1 #ifndef _KRB5_KDB5_H_ 2 #define _KRB5_KDB5_H_ 3 4 #pragma ident "%Z%%M% %I% %E% SMI" 5 6 #if HAVE_UNISTD_H 7 #include <unistd.h> 8 #endif 9 10 #include <errno.h> 11 #include <utime.h> 12 #include <utime.h> 13 #include <k5-int.h> 14 #include "kdb.h" 15 16 #define KDB_MAX_DB_NAME 128 17 #define KDB_REALM_SECTION "realms" 18 #define KDB_MODULE_POINTER "database_module" 19 #define KDB_MODULE_DEF_SECTION "dbdefaults" 20 #define KDB_MODULE_SECTION "dbmodules" 21 #define KDB_LIB_POINTER "db_library" 22 #define KDB_DATABASE_CONF_FILE DEFAULT_SECURE_PROFILE_PATH 23 #define KDB_DATABASE_ENV_PROF KDC_PROFILE_ENV 24 25 #define KRB5_DB_GET_DB_CONTEXT(kcontext) (((kdb5_dal_handle*) (kcontext)->db_context)->db_context) 26 #define KRB5_DB_GET_PROFILE(kcontext) ((kcontext)->profile) 27 #define KRB5_DB_GET_REALM(kcontext) ((kcontext)->default_realm) 28 29 typedef struct _kdb_vftabl{ 30 short int maj_ver; 31 short int min_ver; 32 int iprop_supported; 33 34 krb5_error_code (*init_library)(); 35 krb5_error_code (*fini_library)(); 36 krb5_error_code (*init_module) (krb5_context kcontext, 37 char * conf_section, 38 char ** db_args, 39 int mode); 40 41 krb5_error_code (*fini_module) (krb5_context kcontext); 42 43 krb5_error_code (*db_create) (krb5_context kcontext, 44 char * conf_section, 45 char ** db_args); 46 47 krb5_error_code (*db_destroy) (krb5_context kcontext, 48 char *conf_section, 49 char ** db_args); 50 51 krb5_error_code (*db_get_age) (krb5_context kcontext, 52 char *db_name, 53 time_t *age); 54 55 krb5_error_code (*db_set_option) (krb5_context kcontext, 56 int option, 57 void *value); 58 59 krb5_error_code (*db_lock) (krb5_context kcontext, 60 int mode); 61 62 krb5_error_code (*db_unlock) (krb5_context kcontext); 63 64 krb5_error_code (*db_get_principal) (krb5_context kcontext, 65 krb5_const_principal search_for, 66 krb5_db_entry *entries, 67 int *nentries, 68 krb5_boolean *more); 69 70 krb5_error_code (*db_get_principal_nolock) (krb5_context kcontext, 71 krb5_const_principal search_for, 72 krb5_db_entry *entries, 73 int *nentries, 74 krb5_boolean *more); 75 76 krb5_error_code (*db_free_principal) (krb5_context kcontext, 77 krb5_db_entry *entry, 78 int count); 79 80 krb5_error_code (*db_put_principal) (krb5_context kcontext, 81 krb5_db_entry *entries, 82 int *nentries, 83 char **db_args); 84 85 krb5_error_code (*db_delete_principal) (krb5_context kcontext, 86 krb5_const_principal search_for, 87 int *nentries); 88 89 krb5_error_code (*db_iterate) (krb5_context kcontext, 90 char *match_entry, 91 int (*func) (krb5_pointer, krb5_db_entry *), 92 krb5_pointer func_arg); 93 94 krb5_error_code (*db_create_policy) (krb5_context kcontext, 95 osa_policy_ent_t policy); 96 97 krb5_error_code (*db_get_policy) (krb5_context kcontext, 98 char *name, 99 osa_policy_ent_t *policy, 100 int *cnt); 101 102 krb5_error_code (*db_put_policy) (krb5_context kcontext, 103 osa_policy_ent_t policy); 104 105 krb5_error_code (*db_iter_policy) (krb5_context kcontext, 106 char *match_entry, 107 osa_adb_iter_policy_func func, 108 void *data); 109 110 111 krb5_error_code (*db_delete_policy) (krb5_context kcontext, 112 char *policy); 113 114 void (*db_free_policy) (krb5_context kcontext, 115 osa_policy_ent_t val); 116 117 krb5_error_code (*db_supported_realms) (krb5_context kcontext, 118 char **realms); 119 120 krb5_error_code (*db_free_supported_realms) (krb5_context kcontext, 121 char **realms); 122 123 124 const char * (*errcode_2_string) (krb5_context kcontext, 125 long err_code); 126 void (*release_errcode_string) (krb5_context kcontext, const char *msg); 127 128 void * (*db_alloc) (krb5_context kcontext, void *ptr, size_t size); 129 void (*db_free) (krb5_context kcontext, void *ptr); 130 131 132 133 /* optional functions */ 134 krb5_error_code (*set_master_key) (krb5_context kcontext, 135 char *pwd, 136 krb5_keyblock *key); 137 138 krb5_error_code (*get_master_key) (krb5_context kcontext, 139 krb5_keyblock **key); 140 141 142 krb5_error_code (*setup_master_key_name) (krb5_context kcontext, 143 char *keyname, 144 char *realm, 145 char **fullname, 146 krb5_principal *principal); 147 148 krb5_error_code (*store_master_key) (krb5_context kcontext, 149 char *db_arg, 150 krb5_principal mname, 151 krb5_keyblock *key, 152 char *master_pwd); 153 154 krb5_error_code (*fetch_master_key) (krb5_context kcontext, 155 krb5_principal mname, 156 krb5_keyblock *key, 157 int *kvno, 158 char *db_args); 159 160 krb5_error_code (*verify_master_key) (krb5_context kcontext, 161 krb5_principal mprinc, 162 krb5_keyblock *mkey); 163 164 krb5_error_code (*dbe_search_enctype) (krb5_context kcontext, 165 krb5_db_entry *dbentp, 166 krb5_int32 *start, 167 krb5_int32 ktype, 168 krb5_int32 stype, 169 krb5_int32 kvno, 170 krb5_key_data **kdatap); 171 172 173 krb5_error_code 174 (*db_change_pwd) (krb5_context context, 175 krb5_keyblock * master_key, 176 krb5_key_salt_tuple * ks_tuple, 177 int ks_tuple_count, 178 char * passwd, 179 int new_kvno, 180 krb5_boolean keepold, 181 krb5_db_entry * db_entry); 182 183 /* Promote a temporary database to be the live one. */ 184 krb5_error_code (*promote_db) (krb5_context context, 185 char *conf_section, 186 char **db_args); 187 188 } kdb_vftabl; 189 190 typedef struct _db_library { 191 char name[KDB_MAX_DB_NAME]; 192 int reference_cnt; 193 struct plugin_dir_handle dl_dir_handle; 194 kdb_vftabl vftabl; 195 struct _db_library *next, *prev; 196 } *db_library; 197 198 typedef struct _kdb5_dal_handle 199 { 200 /* Helps us to change db_library without affecting modules to some 201 extent. */ 202 void *db_context; 203 db_library lib_handle; 204 } kdb5_dal_handle; 205 206 #endif /* end of _KRB5_KDB5_H_ */ 207