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