12 #include "err_handle.h"
14 #define KDB_MAX_DB_NAME 128
15 #define KDB_REALM_SECTION "realms"
16 #define KDB_MODULE_POINTER "database_module"
17 #define KDB_MODULE_SECTION "db_modules"
18 #define KDB_LIB_POINTER "db_library"
19 #define KDB_DATABASE_CONF_FILE DEFAULT_SECURE_PROFILE_PATH
20 #define KDB_DATABASE_ENV_PROF KDC_PROFILE_ENV
22 #define KRB5_KDB_OPEN_RW 0
23 #define KRB5_KDB_OPEN_RO 1
25 #define KRB5_KDB_OPT_SET_DB_NAME 0
26 #define KRB5_KDB_OPT_SET_LOCK_MODE 1
28 #define KRB5_DB_GET_DB_CONTEXT(kcontext) ( ((kdb5_dal_handle*) (kcontext)->db_context)->db_context )
29 #define KRB5_DB_GET_PROFILE(kcontext) ( (kcontext)->profile )
30 #define KRB5_DB_GET_REALM(kcontext) ( (kcontext)->default_realm )
32 #ifndef KRB5_DB_LOCKMODE_SHARED
33 #define KRB5_DB_LOCKMODE_SHARED 0x0001
36 #ifndef KRB5_DB_LOCKMODE_EXCLUSIVE
37 #define KRB5_DB_LOCKMODE_EXCLUSIVE 0x0002
40 #ifndef KRB5_DB_LOCKMODE_DONTBLOCK
41 #define KRB5_DB_LOCKMODE_DONTBLOCK 0x0004
44 #ifndef KRB5_DB_LOCKMODE_PERMANENT
45 #define KRB5_DB_LOCKMODE_PERMANENT 0x0008
48 typedef struct _kdb_vftabl{
52 short int is_thread_safe;
54 krb5_error_code (*init_library)(krb5_set_err_func_t);
55 krb5_error_code (*fini_library)();
56 krb5_error_code (*init_module) ( krb5_context kcontext,
61 krb5_error_code (*fini_module) ( krb5_context kcontext );
63 krb5_error_code (*db_create) ( krb5_context kcontext,
67 krb5_error_code (*db_destroy) ( krb5_context kcontext,
71 krb5_error_code (*db_get_age) ( krb5_context kcontext,
75 krb5_error_code (*db_set_option) ( krb5_context kcontext,
79 krb5_error_code (*db_lock) ( krb5_context kcontext,
82 krb5_error_code (*db_unlock) ( krb5_context kcontext);
84 krb5_error_code (*db_get_principal) ( krb5_context kcontext,
85 krb5_const_principal search_for,
86 krb5_db_entry *entries,
90 krb5_error_code (*db_free_principal) ( krb5_context kcontext,
94 krb5_error_code (*db_put_principal) ( krb5_context kcontext,
95 krb5_db_entry *entries,
99 krb5_error_code (*db_delete_principal) ( krb5_context kcontext,
100 krb5_const_principal search_for,
103 krb5_error_code (*db_iterate) ( krb5_context kcontext,
105 int (*func) (krb5_pointer, krb5_db_entry *),
106 krb5_pointer func_arg );
108 krb5_error_code (*db_create_policy) ( krb5_context kcontext,
109 osa_policy_ent_t policy );
111 krb5_error_code (*db_get_policy) ( krb5_context kcontext,
113 osa_policy_ent_t *policy,
116 krb5_error_code (*db_put_policy) ( krb5_context kcontext,
117 osa_policy_ent_t policy );
119 krb5_error_code (*db_iter_policy) ( krb5_context kcontext,
121 osa_adb_iter_policy_func func,
125 krb5_error_code (*db_delete_policy) ( krb5_context kcontext,
128 void (*db_free_policy) ( krb5_context kcontext,
129 osa_policy_ent_t val );
131 krb5_error_code (*db_supported_realms) ( krb5_context kcontext,
134 krb5_error_code (*db_free_supported_realms) ( krb5_context kcontext,
138 const char * (*errcode_2_string) ( krb5_context kcontext,
141 void * (*db_alloc) (krb5_context kcontext, void *ptr, size_t size);
142 void (*db_free) (krb5_context kcontext, void *ptr);
146 /* optional functions */
147 krb5_error_code (*set_master_key) ( krb5_context kcontext,
151 krb5_error_code (*get_master_key) ( krb5_context kcontext,
152 krb5_keyblock **key);
155 krb5_error_code (*setup_master_key_name) ( krb5_context kcontext,
159 krb5_principal *principal);
161 krb5_error_code (*store_master_key) ( krb5_context kcontext,
163 krb5_principal mname,
167 krb5_error_code (*fetch_master_key) ( krb5_context kcontext,
168 krb5_principal mname,
173 krb5_error_code (*verify_master_key) ( krb5_context kcontext,
174 krb5_principal mprinc,
175 krb5_keyblock *mkey );
177 krb5_error_code (*dbe_search_enctype) ( krb5_context kcontext,
178 krb5_db_entry *dbentp,
183 krb5_key_data **kdatap);
187 (*db_change_pwd) ( krb5_context context,
188 krb5_keyblock * master_key,
189 krb5_key_salt_tuple * ks_tuple,
193 krb5_boolean keepold,
194 krb5_db_entry * db_entry);
198 typedef struct _db_library {
199 char name[KDB_MAX_DB_NAME];
201 #ifdef HAVE_PTHREAD_H
202 pthread_mutex_t lib_lock;
203 pthread_cond_t unlocked; /* To check whether some one has called db_unlock */
204 int recursive_cnt; /* this is used as lock to help recursive locking */
205 pthread_t lock_holder;
210 struct _db_library *next, *prev;
213 typedef struct _kdb5_dal_handle
215 void *db_context; /* helps us to change db_library without affecting modules to some extend */
216 db_library lib_handle;
219 #endif /* end of _KRB5_KDB5_H_ */