72 #if defined (SUPPRESS_STRLEN_WARNING) 73 #define strlen(s1) ((int) strlen(s1)) 84 #define MSGCAT_AUTH_INVALID_CACHE 1 85 #define MSGCAT_AUTH_CLASS_NAME 2 86 #define MSGCAT_AUTH_FROM_USER 3 87 #define MSGCAT_AUTH_USER_TITLE 4 88 #define MSGCAT_AUTH_UNDEFINED_USER 5 89 #define MSGCAT_AUTH_USER_NAME 6 90 #define MSGCAT_AUTH_USER_ID 7 91 #define MSGCAT_AUTH_USER_MEMBERS 8 92 #define MSGCAT_AUTH_USER_GROUPS 9 93 #define MSGCAT_AUTH_USER_NAME2 10 94 #define MSGCAT_AUTH_CURRENT_USER 11 95 #define MSGCAT_AUTH_ROOT_TITLE 12 96 #define MSGCAT_AUTH_ROOT_USERS 13 97 #define MSGCAT_AUTH_GRANT_DUMP_ERROR 14 98 #define MSGCAT_AUTH_AUTH_TITLE 15 99 #define MSGCAT_AUTH_USER_DIRECT_GROUPS 16 130 #define GRANT_ENTRY_LENGTH 3 131 #define GRANT_ENTRY_CLASS(index) (index ) 132 #define GRANT_ENTRY_SOURCE(index) ((index) + 1) 133 #define GRANT_ENTRY_CACHE(index) ((index) + 2) 135 #define PASSWORD_ENCRYPTION_SEED "U9a$y1@zw~a0%" 136 #define ENCODE_PREFIX_DEFAULT (char)0 137 #define ENCODE_PREFIX_DES (char)1 138 #define ENCODE_PREFIX_SHA1 (char)2 139 #define ENCODE_PREFIX_SHA2_512 (char)3 140 #define IS_ENCODED_DES(string) (string[0] == ENCODE_PREFIX_DES) 141 #define IS_ENCODED_SHA1(string) (string[0] == ENCODE_PREFIX_SHA1) 142 #define IS_ENCODED_SHA2_512(string) (string[0] == ENCODE_PREFIX_SHA2_512) 143 #define IS_ENCODED_ANY(string) \ 144 (IS_ENCODED_SHA2_512 (string) || IS_ENCODED_SHA1 (string) || IS_ENCODED_DES (string)) 147 #define IS_STRING(n) DB_IS_STRING (n) 150 #define IS_CATALOG_CLASS(name) \ 151 (strcmp(name, CT_CLASS_NAME) == 0 || \ 152 strcmp(name, CT_ATTRIBUTE_NAME) == 0 || \ 153 strcmp(name, CT_DOMAIN_NAME) == 0 || \ 154 strcmp(name, CT_METHOD_NAME) == 0 || \ 155 strcmp(name, CT_METHSIG_NAME) == 0 || \ 156 strcmp(name, CT_METHARG_NAME) == 0 || \ 157 strcmp(name, CT_METHFILE_NAME) == 0 || \ 158 strcmp(name, CT_QUERYSPEC_NAME) == 0 || \ 159 strcmp(name, CT_RESOLUTION_NAME) ==0 || \ 160 strcmp(name, CT_INDEX_NAME) == 0 || \ 161 strcmp(name, CT_INDEXKEY_NAME) == 0 || \ 162 strcmp(name, CT_CLASSAUTH_NAME) == 0 || \ 163 strcmp(name, CT_DATATYPE_NAME) == 0 || \ 164 strcmp(name, CT_STORED_PROC_NAME) == 0 || \ 165 strcmp(name, CT_STORED_PROC_ARGS_NAME) == 0 || \ 166 strcmp(name, CT_PARTITION_NAME) == 0 || \ 167 strcmp(name, CT_SERIAL_NAME) == 0 || \ 168 strcmp(name, CT_USER_NAME) == 0 || \ 169 strcmp(name, CT_COLLATION_NAME) == 0 || \ 170 strcmp(name, CT_HA_APPLY_INFO_NAME) == 0 || \ 171 strcmp(name, CT_TRIGGER_NAME) == 0 || \ 172 strcmp(name, CT_ROOT_NAME) == 0 || \ 173 strcmp(name, CT_PASSWORD_NAME) == 0 || \ 174 strcmp(name, CT_AUTHORIZATION_NAME) == 0 || \ 175 strcmp(name, CT_AUTHORIZATIONS_NAME) == 0 || \ 176 strcmp(name, CT_CHARSET_NAME) == 0 || \ 177 strcmp(name, CT_DUAL_NAME) == 0) 422 "select",
"insert",
"update",
"delete",
"alter",
"index",
"execute" 510 static void encrypt_password (
const char *pass,
int add_prefix,
char *dest);
513 static bool match_password (
const char *user,
const char *database);
543 static int au_perform_login (
const char *name,
const char *password,
bool ignore_dba_privilege);
579 error =
obj_get (obj, attname, &value);
634 error =
obj_get (obj, attname, &value);
717 size =
sizeof (
AU_CLASS_CACHE) + ((depth - 1) *
sizeof (
unsigned int));
719 if (new_class_cache ==
NULL)
727 for (i = 0; i < depth; i++)
733 return new_class_cache;
765 if (new_class_cache !=
NULL)
768 Au_class_caches = new_class_cache;
769 new_class_cache->
class_ = sm_class;
773 return new_class_cache;
790 for (c = Au_class_caches, prev =
NULL; c !=
NULL && c != cache; c = c->
next)
798 Au_class_caches = c->
next;
839 if (new_entry ==
NULL)
851 new_entry->
next = new_list;
852 new_list = new_entry;
858 for (c = Au_class_caches, next =
NULL; c !=
NULL; c =
next)
864 for (c = new_list; c !=
NULL; c = c->
next)
869 Au_class_caches = new_list;
917 if (class_mop ==
NULL)
922 else if (class_mop != Au_user_class)
931 if (new_user_cache !=
NULL)
940 Au_user_cache = new_user_cache;
989 for (c = Au_class_caches; c !=
NULL && c->
class_ != sm_class; c = c->
next);
996 for (u = Au_user_cache; u !=
NULL; u = u->
next)
1024 for (c = Au_class_caches; c !=
NULL; c = c->
next)
1049 for (u = Au_user_cache; u !=
NULL; u = u->
next)
1066 Au_user_cache =
NULL;
1067 Au_class_caches =
NULL;
1086 for (c = Au_class_caches, nextc =
NULL; c !=
NULL; c = nextc)
1092 for (u = Au_user_cache, nextu =
NULL; u !=
NULL; u = nextu)
1107 #if defined(ENABLE_UNUSED_FUNCTION) 1119 toupper_string (
const char *name1,
char *name2)
1123 buffer = (
char *) malloc (
strlen (name1) * 2 + 1);
1129 intl_mbs_upper (name1, buffer);
1131 while (*ptr !=
'\0')
1168 const char *qp1 =
"select [%s] from [%s] where [name] = '%s' using index none";
1170 char *upper_case_name;
1171 size_t upper_case_name_size;
1174 if (user_name ==
NULL)
1185 upper_case_name = (
char *) malloc (upper_case_name_size + 1);
1186 if (upper_case_name ==
NULL)
1260 if (upper_case_name)
1283 char *upper_case_name =
NULL;
1284 size_t upper_case_name_size;
1298 upper_case_name = (
char *) malloc (upper_case_name_size + 1);
1299 if (upper_case_name ==
NULL)
1309 if (user_class ==
NULL)
1318 if ((*user) ==
NULL)
1340 if (upper_case_name)
1392 MOP uclass, aclass,
user, auth;
1417 lname = (
char *) malloc (name_size + 1);
1422 error =
obj_set (user,
"name", &value);
1442 obj_set (user,
"groups", &value);
1452 obj_set (user,
"direct_groups", &value);
1463 obj_set (auth,
"owner", &value);
1470 obj_set (auth,
"grants", &value);
1474 obj_set (user,
"authorization", &value);
1477 obj_set (user,
"comment", &value);
1510 MOP au_class, db_class =
NULL, db_class_inst =
NULL;
1514 const char *type_set[] = {
"SELECT",
"INSERT",
"UPDATE",
"DELETE",
"ALTER",
"INDEX",
"EXECUTE" };
1519 if (au_class ==
NULL)
1534 obj_set (au_obj,
"grantor", &value);
1537 obj_set (au_obj,
"grantee", &value);
1540 if (db_class ==
NULL)
1548 if (db_class_inst ==
NULL)
1556 obj_set (au_obj,
"class_of", &value);
1564 obj_set (au_obj,
"auth_type", &value);
1567 obj_set (au_obj,
"is_grantable", &value);
1587 const char *class_name;
1588 const char *sql_query =
1590 " WHERE [au].[grantee].[name] = ? AND [au].[grantor].[name] = ?" 1591 " AND [au].[class_of].[class_name] = ? AND [au].[auth_type] = ?";
1594 INDEX_FOR_GRANTEE_NAME = 0,
1595 INDEX_FOR_GRANTOR_NAME = 1,
1596 INDEX_FOR_CLASS_NAME = 2,
1597 INDEX_FOR_AUTH_TYPE = 3,
1606 const char *type_set[] = {
"SELECT",
"INSERT",
"UPDATE",
"DELETE",
"ALTER",
"INDEX",
"EXECUTE" };
1608 for (i = 0; i < COUNT_FOR_VARIABLES; i++)
1619 error =
obj_get (user,
"name", &val[INDEX_FOR_GRANTEE_NAME]);
1624 else if (!
IS_STRING (&val[INDEX_FOR_GRANTEE_NAME]) ||
DB_IS_NULL (&val[INDEX_FOR_GRANTEE_NAME])
1631 error =
obj_get (grantor,
"name", &val[INDEX_FOR_GRANTOR_NAME]);
1636 else if (!
IS_STRING (&val[INDEX_FOR_GRANTOR_NAME]) ||
DB_IS_NULL (&val[INDEX_FOR_GRANTOR_NAME])
1644 if (class_name ==
NULL)
1658 if (session ==
NULL)
1715 if (session !=
NULL)
1725 for (i = 0; i < COUNT_FOR_VARIABLES; i++)
1755 if (auth_type & index)
1787 if (auth_type & index)
1804 ((grant_option & index) ?
true :
false));
1832 if (auth_type & index)
1872 for (g = glist; g !=
NULL; g = g->
next)
1914 MOP au_class, au_obj;
1917 DB_VALUE grantor_val, grantee_val, class_val, auth_val;
1929 if (au_class ==
NULL)
1944 for (mop = list; mop !=
NULL; mop = mop->
next)
1948 error =
obj_get (au_obj,
"owner", &grantee_val);
1955 error =
obj_get (au_obj,
"grants", &grants_val);
2015 const char *sql_query =
2017 " [cl] WHERE [class_name] = ?);";
2031 if (session ==
NULL)
2066 if (session !=
NULL)
2110 bool is_member =
false;
2201 if (Au_public_user !=
NULL)
2220 if (Au_dba_user !=
NULL)
2255 const char *tmp =
NULL;
2408 char *result_strp =
NULL;
2422 memcpy (dest + 1, result_strp, result_len);
2423 dest[result_len + 1] =
'\0';
2463 if (user ==
NULL || database ==
NULL)
2473 strcpy (buf2, database);
2488 strcpy (buf2, database);
2503 strcpy (buf2, database);
2531 return strcmp (buf1, buf2) == 0;
2564 if (password !=
NULL)
2601 error =
obj_set (user,
"password", &value);
2618 if (encode && password !=
NULL)
2622 error =
obj_set (pass,
"password", &value);
2630 if (password ==
NULL)
2636 strcpy (pbuf + 1, password);
2637 pbuf[0] = encrypt_prefix;
2640 error =
obj_set (pass,
"password", &value);
2673 const char *
string =
NULL;
2676 if (password !=
NULL)
2714 const char *
string =
NULL;
2717 if (password !=
NULL)
2761 const char *
string =
NULL;
2764 if (password !=
NULL)
2822 if (comment !=
NULL)
2840 error =
obj_set (user,
"comment", &value);
2882 for (g = 0; g < gcard && !
error; g++)
2908 DB_SET *new_groups, *direct_groups;
2916 const char *qstr =
"select [d] from [db_user] [d] where ? in [d].[groups] or [d].[name] = ?;";
2966 for (g = 0; g < gcard && !
error; g++)
2984 obj_set (user,
"groups", &value);
3036 DB_VALUE membervalue, member_name_val, groupvalue;
3039 const char *member_name =
NULL;
3049 if ((!new_user) && (group == member))
3056 if ((!new_user) && ((error =
au_get_set (group,
"groups", &group_groups)) !=
NO_ERROR))
3062 if ((!new_user) && (
set_ismember (group_groups, &membervalue)))
3072 error =
au_get_set (member,
"groups", &member_groups);
3077 error =
au_get_set (member,
"direct_groups", &member_direct_groups);
3082 error =
db_set_add (member_groups, &groupvalue);
3085 error =
db_set_add (member_direct_groups, &groupvalue);
3088 else if (!
set_ismember (member_direct_groups, &membervalue))
3090 error =
db_get (member,
"name", &member_name_val);
3102 error =
db_set_add (member_direct_groups, &groupvalue);
3231 DB_VALUE groupvalue, member_name_val;
3234 const char *member_name =
NULL;
3258 error =
au_get_set (member,
"direct_groups", &member_direct_groups);
3263 if ((error =
db_get (member,
"name", &member_name_val)) ==
NO_ERROR)
3382 DB_VALUE val[2], user_val, gvalue, value, password_val;
3386 MOP auser, password;
3387 DB_SET *new_groups, *direct_groups;
3390 const char *class_name[] = {
3395 "_db_class",
"db_trigger",
"db_serial",
NULL 3397 char query_buf[1024];
3413 error =
obj_get (user,
"name", &name);
3425 for (i = 0; class_name[
i] !=
NULL; i++)
3427 sprintf (query_buf,
"select count(*) from [%s] where [owner] = ?;", class_name[i]);
3429 if (session ==
NULL)
3489 "[d].[direct_groups] = [d].[direct_groups] - ? where ? in [d].[direct_groups];");
3490 if (session ==
NULL)
3531 session =
db_open_buffer (
"select [d] from [db_user] [d] where ? in [d].[groups];");
3532 if (session ==
NULL)
3564 error =
au_get_set (auser,
"direct_groups", &direct_groups);
3569 for (g = 0; g < gcard && !
error; g++)
3589 obj_set (auser,
"groups", &value);
3614 error =
obj_get (user,
"password", &password_val);
3622 error =
obj_set (user,
"password", &password_val);
3714 int i, gsize, position;
3802 int gsize,
i, j, existing, cache;
3803 bool need_pop_er_stack =
false;
3811 need_pop_er_stack =
true;
3813 error =
obj_get (auth,
"grants", &value);
3860 if (grantor ==
NULL)
3959 if (need_pop_er_stack)
4032 bool is_member =
false;
4033 bool need_pop_er_stack =
false;
4043 need_pop_er_stack =
true;
4130 for (i = 0; i < card; i++)
4168 if (need_pop_er_stack)
4197 unsigned int mask, atype;
4213 if (requested & mask)
4216 if ((bits & mask) == 0)
4257 if (requested & mask)
4260 if ((bits & mask) == 0)
4322 unsigned int cache_bits;
4356 if ((cache_bits & mask) != mask)
4389 int current, save = 0, gindex;
4408 savepoint_grant = 1;
4409 for (i = 0; sub_partitions[
i]; i++)
4411 error =
au_grant (user, sub_partitions[i], type, grant_option);
4479 #if defined(SA_MODE) 4492 upd_bits = (
DB_AUTH) (~ins_bits & (
int) type);
4493 if ((error ==
NO_ERROR) && upd_bits)
4508 current |= (int) type;
4568 next = grants->
next;
4611 int cache, j, gsize;
4617 const char *qp1 =
"select [%s] from [%s];";
4619 *return_grants =
NULL;
4622 query = (
char *) malloc (query_size);
4676 if (auth == revoked_auth && j == revoked_grant_index)
4698 if ((cache & (
int) type))
4701 if (new_grant ==
NULL)
4708 new_grant->
next = grant_list;
4709 grant_list = new_grant;
4710 new_grant->
legal = 0;
4747 *return_grants = grant_list;
4768 for (g = grants; g !=
NULL; g = g->
next)
4803 #if defined(SA_MODE) 4913 int current, mask, save = 0, gindex;
4932 savepoint_revoke = 1;
4934 for (i = 0; sub_partitions[
i]; i++)
4936 error =
au_revoke (user, sub_partitions[i], type);
5030 if ((current & (
int) type) == 0)
5067 #if defined(SA_MODE) 5149 class_->
owner = owner;
5173 const char *class_name =
NULL, *owner_name =
NULL;
5192 if (classmop ==
NULL)
5240 savepoint_owner = 1;
5241 for (i = 0; sub_partitions[
i]; i++)
5311 if (*
object ==
NULL)
5343 MOP serial_class_mop;
5345 const char *serial_name =
NULL, *owner_name =
NULL;
5367 if (serial_object ==
NULL)
5444 if (trigger_mop !=
NULL)
5493 owner = class_->
owner;
5522 if (classmop !=
NULL)
5572 if (classmop !=
NULL)
5726 if (Au_user ==
NULL)
5749 const char *name =
NULL;
5751 if (Au_user ==
NULL)
5888 if ((bits & type) != type)
5897 if ((bits & type) != type)
5931 *return_class =
NULL;
5966 else if (is_class > 0)
5978 if (classmop ==
NULL)
5980 if ((error = classmop_from_instance (op, &classmop)) !=
NO_ERROR)
5985 if (classmop !=
NULL)
6055 if (classmop !=
NULL)
6072 *return_mop = classmop;
6073 *return_class = class_;
6095 if (class_ptr !=
NULL)
6120 error =
fetch_class (op, &classmop, &class_, fetchmode, fetch_by);
6144 #if !defined(NDEBUG) 6155 if (class_ptr !=
NULL)
6157 *class_ptr = class_;
6289 if (obj_ptr !=
NULL)
6375 else if (obj_ptr !=
NULL)
6459 return (
fetch_instance (op, obj_ptr, fetchmode, fetch_version_type));
6533 dbuser = (
char *) name;
6534 dbpassword = (
char *) password;
6545 if (Au_public_user ==
NULL || Au_dba_user ==
NULL)
6607 if ((dbpassword ==
NULL) || (
strlen (dbpassword) == 0)
6624 if (dbpassword !=
NULL &&
strlen (dbpassword))
6662 au_login (
const char *name,
const char *password,
bool ignore_dba_privilege)
6691 if (password ==
NULL ||
strlen (password) == 0)
6802 if (class_mop ==
NULL)
6808 Au_authorizations_class = class_mop;
6811 if (class_mop ==
NULL)
6817 Au_authorization_class = class_mop;
6820 if (class_mop ==
NULL)
6826 Au_user_class = class_mop;
6829 if (class_mop ==
NULL)
6835 Au_password_class = class_mop;
6857 if (Au_public_user ==
NULL || Au_dba_user ==
NULL)
6948 const char *qp1 =
"select [%s] from [%s];";
6949 char encrypt_mode = 0x00;
6952 query = (
char *) malloc (query_size);
6986 strcpy (passbuf,
"");
6987 encrypt_mode = 0x00;
6990 error =
obj_get (user,
"password", &value);
7004 error =
obj_get (pwd,
"password", &value);
7044 error =
obj_get (user,
"comment", &value);
7063 output_ctx (
"call [add_user]('%s', '') on class [db_root];\n", uname);
7067 output_ctx (
"call [add_user]('%s', '') on class [db_root] to [auser];\n", uname);
7070 output_ctx (
"call [set_password_encoded]('%s') on [auser];\n", passbuf);
7074 output_ctx (
"call [set_password_encoded_sha1]('%s') on [auser];\n", passbuf);
7082 output_ctx (
"call [find_user]('%s') on class [db_user] to [auser];\n", uname);
7085 output_ctx (
"call [set_password_encoded]('%s') on [auser];\n", passbuf);
7089 output_ctx (
"call [set_password_encoded_sha1]('%s') on [auser];\n", passbuf);
7095 if (comment !=
NULL && comment[0] !=
'\0')
7097 output_ctx (
"ALTER USER [%s] ", uname);
7108 if (comment !=
NULL)
7117 output_ctx (
"call [find_user]('PUBLIC') on class [db_user] to [g_public];\n");
7147 for (g = 0; g < gcard && !
error; g++)
7176 output_ctx (
"call [find_user]('%s') on class [db_user] to [g_%s];\n", gname, gname);
7177 output_ctx (
"call [add_member]('%s') on [g_%s];\n", uname, gname);
7218 grant->
cache = cache;
7393 int j, gsize, cache;
7399 const char *qp1 =
"select [%s] from [%s];";
7402 query = (
char *) malloc (query_size);
7488 const char *gtype, *classname;
7523 output_ctx (
"GRANT %s ON ", gtype);
7524 output_ctx (
"[%s]", classname);
7526 if (username !=
NULL)
7528 output_ctx (
" TO [%s]", username);
7532 output_ctx (
" TO %s",
"???");
7537 output_ctx (
" WITH GRANT OPTION");
7573 #define AU_MIN_BIT 1 7574 #define AU_MAX_BIT 0x40 7583 for (grant = user->
grants, prev_grant =
NULL, next_grant =
NULL; grant !=
NULL; grant = next_grant)
7585 next_grant = grant->
next;
7589 if (grant->
cache & mask)
7603 grant->
cache &= ~authbits;
7608 if (grant->
cache == 0)
7611 if (prev_grant ==
NULL)
7632 return (statements);
7650 int statements, ecount;
7682 output_ctx (
"*/\n");
7720 for (i = 0; i < 7; i++)
7723 auth = cache & mask;
7778 error =
obj_get (auth,
"owner", &value);
7781 error =
obj_get (auth,
"user", &value);
7829 const char *qp1 =
"select [%s] from [%s];";
7888 for (i = 0; i < card; i++)
7908 for (i = 0; i < card; i++)
7935 #if defined(ENABLE_UNUSED_FUNCTION) 7949 au_print_class_auth (
MOP class_mop)
7953 int j, title, gsize;
7960 const char *qp1 =
"select [%s] from [%s];";
7978 obj_get (user,
"authorization", &value);
7988 obj_get (user,
"name", &value);
8035 const char *qp1 =
"select [%s] from [%s];";
8082 if (error >= 0 && query)
8213 int exists, save,
index;
8325 smt_add_method (def,
"set_password_encoded",
"au_set_password_encoded_method");
8326 smt_add_method (def,
"set_password_encoded_sha1",
"au_set_password_encoded_sha1_method");
8329 smt_add_method (def,
"print_authorizations",
"au_describe_user_method");
8344 const char *names[] = {
"name",
NULL };
8394 if (Au_root ==
NULL)
8401 if (Au_dba_user ==
NULL)
8424 if (Au_public_user ==
NULL)
8445 if (Au_public_user !=
NULL)
8448 Au_public_user =
NULL;
8450 if (Au_dba_user !=
NULL)
8455 if (Au_root !=
NULL)
8500 Au_authorizations_class =
NULL;
8501 Au_authorization_class =
NULL;
8502 Au_user_class =
NULL;
8503 Au_password_class =
NULL;
8506 Au_public_user =
NULL;
8521 Au_authorizations_class =
NULL;
8522 Au_authorization_class =
NULL;
8523 Au_user_class =
NULL;
8524 Au_password_class =
NULL;
8527 Au_public_user =
NULL;
8550 unsigned int bits = 0;
8671 ret_val =
db_get (serial_object,
"owner", &creator_val);
#define UNIQUE_PARTITION_SAVEPOINT_REVOKE
DB_OBJECT * db_find_class(const char *name)
int au_check_serial_authorization(MOP serial_object)
static CLASS_USER * find_or_add_user(CLASS_AUTH *auth, MOP user_obj)
#define ER_LK_UNILATERALLY_ABORTED
int db_execute_statement_local(DB_SESSION *session, int stmt, DB_QUERY_RESULT **result)
int au_find_user_to_drop(const char *user_name, MOP *user)
int tran_system_savepoint(const char *savept_name)
#define ER_AU_PASSWORD_OVERFLOW
struct au_user_cache * next
#define WS_IS_DELETED(mop)
#define PASSWORD_ENCRYPTION_SEED
static DB_OBJECT * Au_authorization_class
void au_reset_authorization_caches(void)
int set_drop_seq_element(DB_COLLECTION *set, int index)
void au_add_user_method(MOP class_mop, DB_VALUE *returnval, DB_VALUE *name, DB_VALUE *password)
DB_COLLECTION * db_get_set(const DB_VALUE *value)
MOBJ vid_fetch_instance(MOP mop, DB_FETCH_MODE purpose, LC_FETCH_VERSION_TYPE read_fetch_version_type)
static MOP au_get_new_auth(MOP grantor, MOP user, MOP class_mop, DB_AUTH auth_type)
#define LANG_SYS_COLLATION
#define ER_AU_MEMBER_CAUSES_CYCLES
static int get_grants(MOP auth, DB_SET **grant_ptr, int filter)
#define ER_AU_COMMENT_OVERFLOW
#define AU_MAX_PASSWORD_CHARS
#define GRANT_ENTRY_CLASS(index)
#define ENCODE_PREFIX_SHA1
char Au_user_password_des_oldstyle[AU_MAX_PASSWORD_BUF+4]
const char * db_get_class_name(DB_OBJECT *class_)
void au_dump_to_file(FILE *fp)
static int Au_ignore_passwords
enum au_fetchmode AU_FETCHMODE
#define ER_AU_CLASS_WITH_NO_OWNER
static AU_CLASS_CACHE * au_install_class_cache(SM_CLASS *sm_class)
#define IS_ENCODED_DES(string)
static void encrypt_password(const char *pass, int add_prefix, char *dest)
int sm_mark_system_class(MOP classop, int on_or_off)
#define TP_IS_SET_TYPE(typenum)
void dbmeth_print(DB_OBJECT *self, DB_VALUE *result, DB_VALUE *msg)
#define ER_AU_CANT_GRANT_OWNER
void set_free(DB_COLLECTION *set)
DB_SESSION * db_open_buffer_local(const char *buffer)
int db_get_int(const DB_VALUE *value)
MOBJ locator_create_heap_if_needed(MOP class_mop, bool reuse_oid)
void au_dump_auth(FILE *fp)
int db_make_varchar(DB_VALUE *value, const int max_char_length, DB_CONST_C_CHAR str, const int char_str_byte_size, const int codeset, const int collation_id)
int log_does_active_user_exist(const char *user_name, bool *existed)
int au_force_write_new_auth(void)
static int check_user_name(const char *name)
#define MSGCAT_AUTH_CLASS_NAME
#define ER_AU_USER_EXISTS
static int fetch_instance(MOP op, MOBJ *obj_ptr, AU_FETCHMODE fetchmode, LC_FETCH_VERSION_TYPE read_fetch_version_type)
void qo_set_cost(DB_OBJECT *target, DB_VALUE *result, DB_VALUE *plan, DB_VALUE *cost)
static void remove_user_cache_references(MOP user)
#define ER_USER_NAME_TOO_LONG
static void au_print_cache(int cache, FILE *fp)
int crypt_sha_two(THREAD_ENTRY *thread_p, const char *src, int src_len, int need_hash_len, char **dest_p, int *dest_len_p)
#define ER_AU_CANT_ADD_MEMBER
#define IS_CATALOG_CLASS(name)
SM_ATTRIBUTE * attributes
int au_revoke(MOP user, MOP class_mop, DB_AUTH type)
static int au_add_member_internal(MOP group, MOP member, int new_user)
#define ASSERT_ERROR_AND_SET(error_code)
int db_query_end(DB_QUERY_RESULT *result)
static int class_grant_loop(print_output &output_ctx, CLASS_AUTH *auth)
static void free_class_users(CLASS_USER *users)
int crypt_encrypt_printable(const char *line, char *crypt, int maxlen)
static AU_CLASS_CACHE * au_make_class_cache(int depth)
int db_make_object(DB_VALUE *value, DB_C_OBJECT *obj)
static int au_perform_login(const char *name, const char *password, bool ignore_dba_privilege)
DB_COLLECTION * set_create_sequence(int size)
MOP obj_find_unique(MOP op, const char *attname, DB_VALUE *value, AU_FETCHMODE fetchmode)
#define BOOT_IS_CLIENT_RESTARTED()
int au_fetch_class_by_instancemop(MOP op, SM_CLASS **class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type)
int intl_identifier_upper_string_size(const char *src)
bool au_is_dba_group_member(MOP user)
const char * AU_PASSWORD_CLASS_NAME
static int collect_class_grants(MOP class_mop, DB_AUTH type, MOP revoked_auth, int revoked_grant_index, AU_GRANT **return_grants)
static int add_grant_entry(DB_SET *grants, MOP class_mop, MOP grantor)
void au_set_password_encoded_sha1_method(MOP user, DB_VALUE *returnval, DB_VALUE *password)
void au_drop_user_method(MOP root, DB_VALUE *returnval, DB_VALUE *name)
static int is_protected_class(MOP classmop, SM_CLASS *sm_class, DB_AUTH auth)
#define ER_AU_INSERT_FAILURE
struct sm_component * next
MOP au_get_dba_user(void)
const char * AU_USER_CLASS_NAME
void au_disable_passwords(void)
int db_make_sequence(DB_VALUE *value, DB_C_SET *set)
#define ER_TR_TRIGGER_NOT_FOUND
static void free_grant_list(AU_GRANT *grants)
DB_OBJECT * dbt_finish_object(DB_OTMPL *def)
MOBJ locator_fetch_class_of_instance(MOP inst_mop, MOP *class_mop, DB_FETCH_MODE purpose)
static int au_get_set(MOP obj, const char *attname, DB_SET **set)
#define GRANT_ENTRY_SOURCE(index)
#define MSGCAT_AUTH_CURRENT_USER
#define IS_ENCODED_SHA1(string)
static int find_grant_entry(DB_SET *grants, MOP class_mop, MOP grantor)
void db_string_free(char *string)
int au_export_users(print_output &output_ctx)
void dbt_abort_object(DB_OTMPL *def)
int set_size(DB_COLLECTION *set)
#define AU_MAX_PASSWORD_BUF
#define ER_AU_INVALID_CLASS
int au_change_sp_owner(MOP sp, MOP owner)
void db_ws_free(void *ptr)
bool ws_is_same_object(MOP mop1, MOP mop2)
DB_OBJECT * db_create_class(const char *name)
const char * AU_PUBLIC_USER_NAME
#define MSGCAT_AUTH_USER_GROUPS
static DB_METHOD_LINK au_static_links[]
#define ER_AU_ALTER_FAILURE
void ws_free_string(const char *str)
#define MSGCAT_AUTH_USER_TITLE
#define ER_AU_MULTIPLE_ROOTS
#define ENCODE_PREFIX_DES
static int au_extend_class_caches(int *index)
static void init_caches(void)
int dbt_put_internal(DB_OTMPL *def, const char *name, DB_VALUE *value)
void er_stack_pop_and_keep_error(void)
static DB_OBJECT * is_class(OID *obj_oid, OID *class_oid)
bool set_ismember(DB_COLLECTION *set, DB_VALUE *value)
MOBJ locator_fetch_class(MOP class_mop, DB_FETCH_MODE purpose)
int db_make_string(DB_VALUE *value, DB_CONST_C_CHAR str)
DB_OBJECT * tr_find_trigger(const char *name)
#define DB_CONNECTION_STATUS_CONNECTED
DB_OBJECT * db_create_internal(DB_OBJECT *obj)
int sm_issystem(SM_CLASS *class_)
#define UNIQUE_PARTITION_SAVEPOINT_OWNER
const char * AU_DBA_USER_NAME
void er_set(int severity, const char *file_name, const int line_no, int err_id, int num_args,...)
const char * sm_ch_name(const MOBJ clobj)
static int propagate_revoke(AU_GRANT *grant_list, MOP owner, DB_AUTH mask)
#define ER_QPROC_SERIAL_NOT_FOUND
int au_change_trigger_owner(MOP trigger, MOP owner)
static int au_update_new_auth(MOP grantor, MOP user, MOP class_mop, DB_AUTH auth_type, int grant_option)
int tran_abort_upto_system_savepoint(const char *savepoint_name)
int db_set_system_generated_statement(DB_SESSION *session)
const char * AU_ROOT_CLASS_NAME
static char Au_user_name[DB_MAX_USER_LENGTH+4]
void au_add_member_method(MOP user, DB_VALUE *returnval, DB_VALUE *memval)
void dbmeth_class_name(DB_OBJECT *self, DB_VALUE *result)
int set_filter(DB_COLLECTION *set)
#define ER_AU_CANT_REVOKE_OWNER
MOP jsp_find_stored_procedure(const char *name)
#define ER_AU_CANT_DROP_USER
static int add_class_grant(CLASS_AUTH *auth, MOP source, MOP user, int cache)
static AU_USER_CACHE * Au_user_cache
#define ER_AU_GRANT_NOT_FOUND
int db_make_set(DB_VALUE *value, DB_C_SET *set)
MOP au_add_user(const char *name, int *exists)
#define IS_ENCODED_SHA2_512(string)
int au_fetch_class(MOP op, SM_CLASS **class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type)
int ws_pin(MOP mop, int pin)
#define ER_AU_INCOMPLETE_AUTH
struct db_object * class_mop
static int appropriate_error(unsigned int bits, unsigned int requested)
int db_query_first_tuple(DB_QUERY_RESULT *result)
void help_print_info(const char *command, FILE *fpp)
static int au_compute_groups(MOP member, const char *name)
const char * au_get_user_class_name(void)
#define ER_OUT_OF_VIRTUAL_MEMORY
int smt_assign_argument_domain(SM_TEMPLATE *template_, const char *name, int class_method, const char *implementation, int index, const char *domain_string, DB_DOMAIN *domain)
int sm_check_catalog_rep_dir(MOP classmop, SM_CLASS *class_)
void lang_set_parser_use_client_charset(bool use)
void db_objlist_free(DB_OBJLIST *list)
void au_set_password_method(MOP user, DB_VALUE *returnval, DB_VALUE *password)
void au_check_authorization_method(MOP obj, DB_VALUE *returnval, DB_VALUE *class_, DB_VALUE *auth)
static int check_grant_option(MOP classop, SM_CLASS *sm_class, DB_AUTH type)
static void au_print_grant_entry(DB_SET *grants, int grant_index, FILE *fp)
int au_set_password(MOP user, const char *password)
static int au_set_new_auth(MOP au_obj, MOP grantor, MOP user, MOP class_mop, DB_AUTH auth_type, bool grant_option)
#define MSGCAT_AUTH_USER_NAME
struct class_grant * next
int au_drop_member(MOP group, MOP member)
void(* METHOD_LINK_FUNCTION)()
void crypt_seed(const char *key)
void au_set_password_encoded_method(MOP user, DB_VALUE *returnval, DB_VALUE *password)
#define DB_IS_STRING(value)
int locator_flush_class(MOP class_mop)
void au_change_owner_method(MOP obj, DB_VALUE *returnval, DB_VALUE *class_, DB_VALUE *owner)
static enum scanner_mode mode
bool au_has_user_name(void)
#define ER_AU_NO_USER_LOGGED_IN
int au_change_owner(MOP classmop, MOP owner)
const char * sm_get_ch_name(MOP op)
DB_OBJECT * db_get_object(const DB_VALUE *value)
#define IS_ENCODED_ANY(string)
int db_fetch_set(DB_SET *set, DB_FETCH_MODE purpose, int quit_on_error)
static int build_class_grant_list(CLASS_AUTH *cl_auth, MOP class_mop)
int au_check_authorization(MOP op, DB_AUTH auth)
#define ENCODE_PREFIX_SHA2_512
MOP ws_class_mop(MOP mop)
void db_link_static_methods(DB_METHOD_LINK *methods)
static CLASS_GRANT * make_class_grant(CLASS_USER *user, int cache)
void db_set_read_fetch_instance_version(LC_FETCH_VERSION_TYPE read_Fetch_Instance_Version)
#define MSGCAT_AUTH_INVALID_CACHE
static void free_class_grants(CLASS_GRANT *grants)
void au_info_method(MOP class_mop, DB_VALUE *returnval, DB_VALUE *info)
#define WS_SET_DELETED(mop)
int au_add_member(MOP group, MOP member)
int au_set_user(MOP newuser)
#define ER_AU_USER_HAS_DATABASE_OBJECTS
#define AU_NO_AUTHORIZATION
#define ER_AU_UPDATE_FAILURE
MOP au_find_user(const char *user_name)
#define ER_AU_CANT_REVOKE_SELF
static int au_fetch_class_internal(MOP op, SM_CLASS **class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type, FETCH_BY fetch_by)
#define ER_OBJ_OBJECT_NOT_FOUND
DB_SESSION * db_open_buffer(const char *buffer)
static CLASS_USER * make_class_user(MOP user_obj)
int db_compile_statement(DB_SESSION *session)
void db_close_session(DB_SESSION *session)
int au_export_grants(print_output &output_ctx, MOP class_mop)
static void au_print_auth(MOP auth, FILE *fp)
OID * sm_ch_rep_dir(MOBJ clobj)
static void free_user_cache(AU_USER_CACHE *u)
int db_set_add(DB_SET *set, DB_VALUE *value)
int au_fetch_instance_force(MOP op, MOBJ *obj_ptr, AU_FETCHMODE fetchmode, LC_FETCH_VERSION_TYPE fetch_version_type)
#define db_private_free_and_init(thrd, ptr)
#define TM_TRAN_READ_FETCH_VERSION()
void au_free_authorization_cache(void *cache)
SM_TEMPLATE * smt_edit_class_mop(MOP op, DB_AUTH db_auth_type)
int smt_add_method(SM_TEMPLATE *template_, const char *name, const char *function)
MOBJ locator_fetch_instance(MOP mop, DB_FETCH_MODE purpose, LC_FETCH_VERSION_TYPE fetch_version_type)
#define MSGCAT_AUTH_UNDEFINED_USER
int set_get_element(DB_COLLECTION *set, int index, DB_VALUE *value)
const char * AU_OLD_ROOT_CLASS_NAME
char * db_get_user_name(void)
static void issue_grant_statement(print_output &output_ctx, CLASS_AUTH *auth, CLASS_GRANT *grant, int authbits)
static int au_get_object(MOP obj, const char *attname, MOP *mop_ptr)
int au_grant(MOP user, MOP class_mop, DB_AUTH type, bool grant_option)
int pr_clear_value(DB_VALUE *value)
void sm_bump_local_schema_version(void)
#define MSGCAT_CATALOG_CUBRID
MOBJ locator_update_instance(MOP mop)
#define ER_AU_DELETE_FAILURE
struct au_class_cache AU_CLASS_CACHE
int au_fetch_class_by_classmop(MOP op, SM_CLASS **class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type)
#define ER_AU_INVALID_USER_NAME
void au_change_serial_owner_method(MOP obj, DB_VALUE *returnval, DB_VALUE *serial, DB_VALUE *owner)
#define ER_OBJ_INVALID_ARGUMENT
static int Au_cache_depth
int set_cardinality(DB_COLLECTION *set)
void au_describe_user_method(MOP user, DB_VALUE *returnval)
#define ER_AU_MISSING_CLASS
static int au_set_get_obj(DB_SET *set, int index, MOP *obj)
int set_put_element(DB_COLLECTION *set, int index, DB_VALUE *value)
#define AU_FULL_AUTHORIZATION
static void error(const char *msg)
void get_attribute_number(DB_OBJECT *target, DB_VALUE *result, DB_VALUE *attr_name)
static int Au_cache_index
const char * AU_GRANT_CLASS_NAME
#define ER_AU_INVALID_PASSWORD
DB_OBJLIST * sm_fetch_all_objects(DB_OBJECT *op, DB_FETCH_MODE purpose)
int db_drop_class(MOP class_)
int sm_att_info(MOP classop, const char *name, int *idp, TP_DOMAIN **domainp, int *sharedp, int class_attr)
int db_query_next_tuple(DB_QUERY_RESULT *result)
static int apply_grants(MOP auth, MOP class_mop, unsigned int *bits)
MOP au_get_class_owner(MOP classmop)
static MOP au_make_user(const char *name)
#define MSGCAT_AUTH_GRANT_DUMP_ERROR
#define MSGCAT_AUTH_FROM_USER
#define MSGCAT_AUTH_AUTH_TITLE
#define ER_AU_INVALID_USER
static int au_propagate_del_new_auth(AU_GRANT *glist, DB_AUTH mask)
static DB_OBJECT * Au_user_class
int sm_partitioned_class_type(DB_OBJECT *classop, int *partition_type, char *keyattr, MOP **partitions)
int au_get_class_privilege(DB_OBJECT *mop, unsigned int *auth)
void au_dump_user(MOP user, FILE *fp)
int obj_set(MOP op, const char *name, DB_VALUE *value)
#define ER_AU_SELECT_FAILURE
MOP obj_create(MOP classop)
void au_link_static_methods(void)
const char * au_get_public_user_name(void)
static void drop_grant_entry(DB_SET *grants, int index)
int db_make_error(DB_VALUE *value, const int errcode)
int clogin_user(const char *username)
#define free_and_init(ptr)
#define ER_AU_MEMBER_NOT_FOUND
#define ER_OBJ_INVALID_ARGUMENTS
int db_push_values(DB_SESSION *session, int count, DB_VALUE *in_values)
void help_print_describe_comment(print_output &output_ctx, const char *comment)
int obj_inst_lock(MOP op, int for_write)
static void encrypt_password_sha2_512(const char *pass, char *dest)
#define ER_HEAP_UNKNOWN_OBJECT
#define MSGCAT_AUTH_USER_DIRECT_GROUPS
void au_change_sp_owner_method(MOP obj, DB_VALUE *returnval, DB_VALUE *sp, DB_VALUE *owner)
#define DB_CURSOR_SUCCESS
int db_get(DB_OBJECT *object, const char *attpath, DB_VALUE *value)
#define GRANT_ENTRY_CACHE(index)
void ml_ext_free(DB_OBJLIST *list)
char * au_user_name_dup(void)
static const char * auth_type_name[]
#define AU_SAVE_AND_DISABLE(save)
void * db_ws_alloc(size_t size)
char Au_user_password_sha2_512[AU_MAX_PASSWORD_BUF+4]
static int check_authorization(MOP classobj, SM_CLASS *sm_class, DB_AUTH type)
MOP au_get_public_user(void)
char Au_user_password_sha1[AU_MAX_PASSWORD_BUF+4]
#define ER_AU_ACCESS_ERROR
static int fetch_class(MOP op, MOP *return_mop, SM_CLASS **return_class, AU_FETCHMODE fetchmode, FETCH_BY fetch_by)
#define MSGCAT_SET_AUTHORIZATION
static DB_OBJECT * Au_password_class
static void reset_cache_for_user_and_class(SM_CLASS *sm_class)
int au_login(const char *name, const char *password, bool ignore_dba_privilege)
int au_add_method_check_authorization(void)
#define DB_VALUE_TYPE(value)
int db_make_null(DB_VALUE *value)
char * msgcat_message(int cat_id, int set_id, int msg_id)
void au_describe_root_method(MOP class_mop, DB_VALUE *returnval, DB_VALUE *info)
#define DB_IS_NULL(value)
#define ER_OBJ_DOMAIN_CONFLICT
DB_OTMPL * dbt_edit_object(MOP object)
#define UNIQUE_PARTITION_SAVEPOINT_GRANT
int smt_add_attribute(SM_TEMPLATE *template_, const char *name, const char *domain_string, DB_DOMAIN *domain)
MOP sm_get_class(MOP obj)
MOBJ locator_update_class(MOP mop)
char * au_get_user_name(MOP obj)
#define ER_NOT_ALLOWED_ACCESS_TO_PARTITION
int obj_get(MOP op, const char *name, DB_VALUE *value)
char * strdup(const char *str)
DB_OBJLIST * db_get_all_objects(DB_OBJECT *op)
int au_fetch_instance(MOP op, MOBJ *obj_ptr, AU_FETCHMODE mode, LC_FETCH_VERSION_TYPE fetch_version_type, DB_AUTH type)
void au_get_owner_method(MOP obj, DB_VALUE *returnval, DB_VALUE *class_)
void au_find_user_method(MOP class_mop, DB_VALUE *returnval, DB_VALUE *name)
const char * TR_ATT_OWNER
int db_value_clear(DB_VALUE *value)
int db_make_int(DB_VALUE *value, const int num)
int db_query_get_tuple_value(DB_QUERY_RESULT *result, int index, DB_VALUE *value)
#define ER_AU_AUTHORIZATION_FAILURE
#define ER_AU_CANT_UPDATE
MOP sm_find_class(const char *name)
static int update_cache(MOP classop, SM_CLASS *sm_class, AU_CLASS_CACHE *cache)
void au_change_trigger_owner_method(MOP obj, DB_VALUE *returnval, DB_VALUE *trigger, DB_VALUE *owner)
int au_delete_auth_of_dropping_table(const char *class_name)
#define MSGCAT_AUTH_ROOT_USERS
int locator_is_class(MOP mop, DB_FETCH_MODE hint_purpose)
static DB_OBJECT * Au_authorizations_class
char * ws_copy_string(const char *str)
#define ER_AU_NOT_ALLOW_TO_DROP_ACTIVE_USER
#define ER_AU_INDEX_FAILURE
int db_set_drop(DB_SET *set, DB_VALUE *value)
bool locator_is_root(MOP mop)
#define ER_AU_NO_AUTHORIZATION
static int Au_cache_increment
const char * au_user_name(void)
static void map_grant_list(AU_GRANT *grants, MOP grantor)
#define ER_AU_NO_GRANT_OPTION
int smt_add_class_method(SM_TEMPLATE *template_, const char *name, const char *function)
static int au_delete_new_auth(MOP grantor, MOP user, MOP class_mop, DB_AUTH auth_type)
int db_compile_statement_local(DB_SESSION *session)
MOP do_get_serial_obj_id(DB_IDENTIFIER *serial_obj_id, DB_OBJECT *serial_class_mop, const char *serial_name)
#define GRANT_ENTRY_LENGTH
#define DB_MAX_USER_LENGTH
int db_compile_and_execute_local(const char *CSQL_query, void *result, DB_QUERY_ERROR *query_error)
int au_drop_user(MOP user)
MOBJ vid_upd_instance(MOP mop)
static int au_change_serial_owner(MOP *object, MOP new_owner)
static void encrypt_password_sha1(const char *pass, int add_prefix, char *dest)
#define ER_SM_INVALID_CLASS
static bool match_password(const char *user, const char *database)
static void au_free_class_cache(AU_CLASS_CACHE *cache)
static AU_CLASS_CACHE * Au_class_caches
static int au_find_user_cache_index(DB_OBJECT *user, int *index, int check_it)
static int au_add_direct_groups(DB_SET *new_groups, DB_VALUE *value)
const char * AU_AUTH_CLASS_NAME
#define ER_OBJ_INVALID_TEMP_OBJECT
int au_fetch_class_force(MOP op, SM_CLASS **class_, AU_FETCHMODE fetchmode)
int au_set_user_comment(MOP user, const char *comment)
DB_CONST_C_CHAR db_get_string(const DB_VALUE *value)
#define ER_AU_EXECUTE_FAILURE
#define ER_AU_CANT_ALTER_OWNER_OF_SYSTEM_CLASS
#define ER_IS_ABORTED_DUE_TO_DEADLOCK(err)
int db_add_constraint(MOP classmop, DB_CONSTRAINT_TYPE constraint_type, const char *constraint_name, const char **att_names, int class_attributes)
struct au_class_cache * next
int intl_identifier_upper(const char *src, char *dst)
int crypt_encrypt_sha1_printable(const char *line, char *crypt, int maxlen)
int sc_set_current_schema(MOP user)
static int au_insert_new_auth(MOP grantor, MOP user, MOP class_mop, DB_AUTH auth_type, int grant_option)
#define ER_AU_MISSING_OR_INVALID_USER
#define MSGCAT_AUTH_USER_NAME2
static void flush_caches(void)
void au_login_method(MOP class_mop, DB_VALUE *returnval, DB_VALUE *user, DB_VALUE *password)
#define ER_QPROC_CANNOT_UPDATE_SERIAL
static int au_set_password_internal(MOP user, const char *password, int encode, char encrypt_prefix)
DB_COLLECTION * set_create_basic(void)
#define AU_MAX_COMMENT_CHARS
int sm_update_class(SM_TEMPLATE *template_, MOP *classmop)
void au_drop_member_method(MOP user, DB_VALUE *returnval, DB_VALUE *memval)