CUBRID Engine  latest
authenticate.h
Go to the documentation of this file.
1 /*
2  * Copyright 2008 Search Solution Corporation
3  * Copyright 2016 CUBRID Corporation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  *
17  */
18 
19 
20 /*
21  * authenticate.h - Authorization manager
22  *
23  */
24 
25 #ifndef _AUTHENTICATE_H_
26 #define _AUTHENTICATE_H_
27 
28 #ident "$Id$"
29 
30 #if defined (SERVER_MODE)
31 #error Does not belong to server module
32 #endif /* defined (SERVER_MODE) */
33 
34 #ifndef __cplusplus
35 #error Requires C++
36 #endif // not c++
37 
38 #include <stdio.h>
39 #include <stdlib.h>
40 
41 #include "error_manager.h"
42 #include "class_object.h"
43 #include "databases_file.h"
44 #include "object_fetch.h"
45 
46 
47 class print_output;
48 
49 /*
50  * Authorization Class Names
51  */
52 
53 extern const char *AU_ROOT_CLASS_NAME;
54 extern const char *AU_OLD_ROOT_CLASS_NAME;
55 extern const char *AU_USER_CLASS_NAME;
56 extern const char *AU_PASSWORD_CLASS_NAME;
57 extern const char *AU_AUTH_CLASS_NAME;
58 extern const char *AU_GRANT_CLASS_NAME;
59 extern const char *AU_PUBLIC_USER_NAME;
60 extern const char *AU_DBA_USER_NAME;
61 
62 /*
63  * Authorization Types
64  */
65 /* obsolete, should be using the definition from dbdef.h */
66 
67 #define AU_TYPE DB_AUTH
68 #define AU_NONE DB_AUTH_NONE
69 #define AU_SELECT DB_AUTH_SELECT
70 #define AU_INSERT DB_AUTH_INSERT
71 #define AU_UPDATE DB_AUTH_UPDATE
72 #define AU_DELETE DB_AUTH_DELETE
73 #define AU_ALTER DB_AUTH_ALTER
74 #define AU_INDEX DB_AUTH_INDEX
75 #define AU_EXECUTE DB_AUTH_EXECUTE
76 
77 /*
78  * Mask to extract only the authorization bits from a cache. This can also
79  * be used as an absolute value to see if all possible authorizations have
80  * been given
81  * TODO : LP64
82  */
83 
84 #define AU_TYPE_MASK 0x7F
85 #define AU_GRANT_MASK 0x7F00
86 #define AU_FULL_AUTHORIZATION 0x7F7F
87 #define AU_NO_AUTHORIZATION 0
88 
89 /*
90  * the grant option for any particular authorization type is cached in the
91  * same integer, shifted up eight bits.
92  */
93 
94 #define AU_GRANT_SHIFT 8
95 
96 /* Invalid cache is identified when the high bit is on. */
97 
98 #define AU_CACHE_INVALID 0x80000000
99 
100 
101 int au_disable (void);
102 void au_enable (int save);
103 MOP au_get_public_user (void);
104 MOP au_get_dba_user (void);
105 
106 #define AU_DISABLE(save) \
107  do \
108  { \
109  save = Au_disable; \
110  Au_disable = 1; \
111  } \
112  while (0)
113 #define AU_ENABLE(save) \
114  do \
115  { \
116  Au_disable = save; \
117  } \
118  while (0)
119 #define AU_SAVE_AND_ENABLE(save) \
120  do \
121  { \
122  save = Au_disable; \
123  Au_disable = 0; \
124  } \
125  while (0)
126 #define AU_SAVE_AND_DISABLE(save) \
127  do \
128  { \
129  save = Au_disable; \
130  Au_disable = 1; \
131  } \
132  while (0)
133 #define AU_RESTORE(save) \
134  do \
135  { \
136  Au_disable = save; \
137  } \
138  while (0)
139 
140 #define AU_DISABLE_PASSWORDS au_disable_passwords
141 #define AU_SET_USER au_set_user
142 
143 #define AU_MAX_PASSWORD_CHARS 31
144 #define AU_MAX_PASSWORD_BUF 2048
145 #define AU_MAX_COMMENT_CHARS SM_MAX_COMMENT_LENGTH
146 
147 /* free_and_init routine */
148 #define au_free_authorization_cache_and_init(cache) \
149  do \
150  { \
151  au_free_authorization_cache ((cache)); \
152  (cache) = NULL; \
153  } \
154  while (0)
155 
156 /*
157  * Global Variables
158  */
159 extern MOP Au_root;
160 extern MOP Au_user;
161 extern MOP Au_dba_user;
162 extern MOP Au_public_user;
163 extern char Au_user_password[AU_MAX_PASSWORD_BUF + 4];
164 extern int Au_disable;
165 
166 
167 extern void au_init (void);
168 extern void au_final (void);
169 
170 extern int au_install (void);
171 extern int au_force_write_new_auth (void);
172 extern int au_add_method_check_authorization (void);
173 extern int au_start (void);
174 extern int au_login (const char *name, const char *password, bool ignore_dba_privilege);
175 
176 extern void au_disable_passwords (void);
177 extern int au_set_user (MOP newuser);
178 
179 /* user/group hierarchy maintenance */
180 extern MOP au_find_user (const char *user_name);
181 extern int au_find_user_to_drop (const char *user_name, MOP * user);
182 extern MOP au_add_user (const char *name, int *exists);
183 extern int au_add_member (MOP group, MOP member);
184 extern int au_drop_member (MOP group, MOP member);
185 extern int au_drop_user (MOP user);
186 extern int au_set_password (MOP user, const char *password);
187 extern int au_set_user_comment (MOP user, const char *comment);
188 
189 extern const char *au_user_name (void);
190 extern char *au_user_name_dup (void);
191 extern bool au_has_user_name (void);
192 
193 /* grant/revoke */
194 extern int au_grant (MOP user, MOP class_mop, DB_AUTH type, bool grant_option);
195 extern int au_revoke (MOP user, MOP class_mop, DB_AUTH type);
196 
197 extern int au_delete_auth_of_dropping_table (const char *class_name);
198 
199 /* class & instance accessors */
200 extern int au_fetch_class (MOP op, SM_CLASS ** class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type);
201 extern int au_fetch_class_by_classmop (MOP op, SM_CLASS ** class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type);
202 extern int au_fetch_class_by_instancemop (MOP op, SM_CLASS ** class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type);
203 extern int au_fetch_class_force (MOP op, SM_CLASS ** class_, AU_FETCHMODE fetchmode);
204 
205 extern int au_fetch_instance (MOP op, MOBJ * obj_ptr, AU_FETCHMODE mode, LC_FETCH_VERSION_TYPE fetch_version_type,
206  DB_AUTH type);
207 extern int au_fetch_instance_force (MOP op, MOBJ * obj_ptr, AU_FETCHMODE fetchmode,
208  LC_FETCH_VERSION_TYPE fetch_version_type);
209 
210 extern int au_check_authorization (MOP op, DB_AUTH auth);
211 
212 /* class cache support */
213 extern void au_free_authorization_cache (void *cache);
214 extern void au_reset_authorization_caches (void);
215 
216 /* misc utilities */
217 extern int au_change_owner (MOP classmop, MOP owner);
218 extern MOP au_get_class_owner (MOP classmop);
219 extern int au_check_user (void);
220 extern char *au_get_user_name (MOP obj);
221 extern bool au_is_dba_group_member (MOP user);
222 extern void au_change_serial_owner_method (MOP obj, DB_VALUE * returnval, DB_VALUE * serial, DB_VALUE * owner);
223 
224 /* debugging functions */
225 extern void au_dump (void);
226 extern void au_dump_to_file (FILE * fp);
227 extern void au_dump_user (MOP user, FILE * fp);
228 
229 #if defined(ENABLE_UNUSED_FUNCTION)
230 /* used by test code, should be changed to au_dump . . . */
231 extern void au_print_class_auth (MOP class_mop);
232 #endif
233 
234 /* called only at initialization time to get the static methods linked */
235 extern void au_link_static_methods (void);
236 
237 /* migration utilities */
238 
239 extern int au_export_users (print_output & output_ctx);
240 extern int au_export_grants (print_output & output_ctx, MOP class_mop);
241 
242 extern int au_get_class_privilege (DB_OBJECT * mop, unsigned int *auth);
243 
244 /*
245  * Etc
246  */
247 
248 extern void au_find_user_method (MOP class_mop, DB_VALUE * returnval, DB_VALUE * name);
249 extern void au_add_user_method (MOP class_mop, DB_VALUE * returnval, DB_VALUE * name, DB_VALUE * password);
250 extern void au_set_password_method (MOP user, DB_VALUE * returnval, DB_VALUE * password);
251 extern void au_set_password_encoded_method (MOP user, DB_VALUE * returnval, DB_VALUE * password);
252 extern void au_set_password_encoded_sha1_method (MOP user, DB_VALUE * returnval, DB_VALUE * password);
253 extern void au_add_member_method (MOP user, DB_VALUE * returnval, DB_VALUE * memval);
254 extern void au_drop_member_method (MOP user, DB_VALUE * returnval, DB_VALUE * memval);
255 extern void au_drop_user_method (MOP root, DB_VALUE * returnval, DB_VALUE * name);
256 extern void au_change_owner_method (MOP obj, DB_VALUE * returnval, DB_VALUE * class_, DB_VALUE * owner);
257 extern int au_change_trigger_owner (MOP trigger, MOP owner);
258 extern void au_change_trigger_owner_method (MOP obj, DB_VALUE * returnval, DB_VALUE * trigger, DB_VALUE * owner);
259 extern void au_get_owner_method (MOP obj, DB_VALUE * returnval, DB_VALUE * class_);
260 extern void au_check_authorization_method (MOP obj, DB_VALUE * returnval, DB_VALUE * class_, DB_VALUE * auth);
261 extern int au_change_sp_owner (MOP sp, MOP owner);
262 extern void au_change_sp_owner_method (MOP obj, DB_VALUE * returnval, DB_VALUE * sp, DB_VALUE * owner);
263 extern void au_login_method (MOP class_mop, DB_VALUE * returnval, DB_VALUE * user, DB_VALUE * password);
264 extern void au_dump_auth (FILE * fp);
265 extern void au_describe_user_method (MOP user, DB_VALUE * returnval);
266 extern void au_info_method (MOP class_mop, DB_VALUE * returnval, DB_VALUE * info);
267 extern void au_describe_root_method (MOP class_mop, DB_VALUE * returnval, DB_VALUE * info);
268 extern int au_check_serial_authorization (MOP serial_object);
269 extern const char *au_get_public_user_name (void);
270 extern const char *au_get_user_class_name (void);
271 #if defined(ENABLE_UNUSED_FUNCTION)
272 extern char *toupper_string (const char *name1, char *name2);
273 #endif
274 #endif /* _AUTHENTICATE_H_ */
int au_fetch_instance_force(MOP op, MOBJ *obj_ptr, AU_FETCHMODE fetchmode, LC_FETCH_VERSION_TYPE fetch_version_type)
LC_FETCH_VERSION_TYPE
Definition: locator.h:178
MOP au_get_dba_user(void)
const char * AU_USER_CLASS_NAME
Definition: authenticate.c:107
const char * AU_OLD_ROOT_CLASS_NAME
Definition: authenticate.c:105
void au_set_password_method(MOP user, DB_VALUE *returnval, DB_VALUE *password)
enum au_fetchmode AU_FETCHMODE
char * MOBJ
Definition: work_space.h:174
int au_install(void)
void au_dump_user(MOP user, FILE *fp)
const char * au_user_name(void)
MOP au_find_user(const char *user_name)
void au_free_authorization_cache(void *cache)
Definition: authenticate.c:784
char * au_user_name_dup(void)
int au_start(void)
MOP au_add_user(const char *name, int *exists)
const char * au_get_user_class_name(void)
int au_check_serial_authorization(MOP serial_object)
void au_final(void)
void au_describe_root_method(MOP class_mop, DB_VALUE *returnval, DB_VALUE *info)
int au_fetch_class_by_classmop(MOP op, SM_CLASS **class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type)
int au_set_password(MOP user, const char *password)
void au_change_serial_owner_method(MOP obj, DB_VALUE *returnval, DB_VALUE *serial, DB_VALUE *owner)
void au_get_owner_method(MOP obj, DB_VALUE *returnval, DB_VALUE *class_)
void au_set_password_encoded_method(MOP user, DB_VALUE *returnval, DB_VALUE *password)
void au_find_user_method(MOP class_mop, DB_VALUE *returnval, DB_VALUE *name)
void au_reset_authorization_caches(void)
#define AU_MAX_PASSWORD_BUF
Definition: authenticate.h:144
MOP au_get_class_owner(MOP classmop)
void au_info_method(MOP class_mop, DB_VALUE *returnval, DB_VALUE *info)
void au_link_static_methods(void)
int au_add_member(MOP group, MOP member)
MOP Au_root
Definition: authenticate.c:300
int Au_disable
Definition: authenticate.c:309
int au_fetch_class_force(MOP op, SM_CLASS **class_, AU_FETCHMODE fetchmode)
int au_set_user_comment(MOP user, const char *comment)
int au_login(const char *name, const char *password, bool ignore_dba_privilege)
char * au_get_user_name(MOP obj)
int au_find_user_to_drop(const char *user_name, MOP *user)
void au_describe_user_method(MOP user, DB_VALUE *returnval)
char Au_user_password[AU_MAX_PASSWORD_BUF+4]
const char * AU_GRANT_CLASS_NAME
Definition: authenticate.c:110
void au_add_user_method(MOP class_mop, DB_VALUE *returnval, DB_VALUE *name, DB_VALUE *password)
int au_delete_auth_of_dropping_table(const char *class_name)
void au_disable_passwords(void)
int au_disable(void)
void au_dump_to_file(FILE *fp)
const char * au_get_public_user_name(void)
static enum scanner_mode mode
int au_export_users(print_output &output_ctx)
int au_drop_user(MOP user)
void au_change_sp_owner_method(MOP obj, DB_VALUE *returnval, DB_VALUE *sp, DB_VALUE *owner)
MOP au_get_public_user(void)
void au_login_method(MOP class_mop, DB_VALUE *returnval, DB_VALUE *user, DB_VALUE *password)
int au_add_method_check_authorization(void)
void au_dump(void)
int au_revoke(MOP user, MOP class_mop, DB_AUTH type)
MOP Au_dba_user
Definition: authenticate.c:334
const char * AU_DBA_USER_NAME
Definition: authenticate.c:113
int au_fetch_instance(MOP op, MOBJ *obj_ptr, AU_FETCHMODE mode, LC_FETCH_VERSION_TYPE fetch_version_type, DB_AUTH type)
void au_add_member_method(MOP user, DB_VALUE *returnval, DB_VALUE *memval)
void au_change_trigger_owner_method(MOP obj, DB_VALUE *returnval, DB_VALUE *trigger, DB_VALUE *owner)
void au_init(void)
DB_AUTH
Definition: dbtype_def.h:239
int au_drop_member(MOP group, MOP member)
const char * AU_AUTH_CLASS_NAME
Definition: authenticate.c:109
void au_change_owner_method(MOP obj, DB_VALUE *returnval, DB_VALUE *class_, DB_VALUE *owner)
bool au_has_user_name(void)
int au_change_owner(MOP classmop, MOP owner)
int au_check_authorization(MOP op, DB_AUTH auth)
void au_drop_member_method(MOP user, DB_VALUE *returnval, DB_VALUE *memval)
int au_set_user(MOP newuser)
const char * AU_PASSWORD_CLASS_NAME
Definition: authenticate.c:108
int au_change_trigger_owner(MOP trigger, MOP owner)
const char * AU_ROOT_CLASS_NAME
Definition: authenticate.c:104
void au_enable(int save)
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)
int au_fetch_class(MOP op, SM_CLASS **class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type)
int au_grant(MOP user, MOP class_mop, DB_AUTH type, bool grant_option)
MOP Au_public_user
Definition: authenticate.c:333
void au_check_authorization_method(MOP obj, DB_VALUE *returnval, DB_VALUE *class_, DB_VALUE *auth)
int au_change_sp_owner(MOP sp, MOP owner)
MOP Au_user
Definition: authenticate.c:343
const char * AU_PUBLIC_USER_NAME
Definition: authenticate.c:112
void au_dump_auth(FILE *fp)
int au_force_write_new_auth(void)
int au_get_class_privilege(DB_OBJECT *mop, unsigned int *auth)
int au_check_user(void)
int au_fetch_class_by_instancemop(MOP op, SM_CLASS **class_ptr, AU_FETCHMODE fetchmode, DB_AUTH type)
int au_export_grants(print_output &output_ctx, MOP class_mop)
bool au_is_dba_group_member(MOP user)