File indexing completed on 2025-01-17 09:55:36
0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032
0033
0034
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062
0063
0064
0065 #ifndef KRB5_KDB5__
0066 #define KRB5_KDB5__
0067
0068 #include <time.h>
0069 #include <krb5.h>
0070
0071
0072
0073 #define KRB5_KDB_API_VERSION 10
0074
0075
0076 #define KRB5_KDB_SALTTYPE_NORMAL 0
0077
0078 #define KRB5_KDB_SALTTYPE_NOREALM 2
0079 #define KRB5_KDB_SALTTYPE_ONLYREALM 3
0080 #define KRB5_KDB_SALTTYPE_SPECIAL 4
0081
0082 #define KRB5_KDB_SALTTYPE_CERTHASH 6
0083
0084
0085 #define KRB5_KDB_DISALLOW_POSTDATED 0x00000001
0086 #define KRB5_KDB_DISALLOW_FORWARDABLE 0x00000002
0087 #define KRB5_KDB_DISALLOW_TGT_BASED 0x00000004
0088 #define KRB5_KDB_DISALLOW_RENEWABLE 0x00000008
0089 #define KRB5_KDB_DISALLOW_PROXIABLE 0x00000010
0090 #define KRB5_KDB_DISALLOW_DUP_SKEY 0x00000020
0091 #define KRB5_KDB_DISALLOW_ALL_TIX 0x00000040
0092 #define KRB5_KDB_REQUIRES_PRE_AUTH 0x00000080
0093 #define KRB5_KDB_REQUIRES_HW_AUTH 0x00000100
0094 #define KRB5_KDB_REQUIRES_PWCHANGE 0x00000200
0095 #define KRB5_KDB_DISALLOW_SVR 0x00001000
0096 #define KRB5_KDB_PWCHANGE_SERVICE 0x00002000
0097 #define KRB5_KDB_SUPPORT_DESMD5 0x00004000
0098 #define KRB5_KDB_NEW_PRINC 0x00008000
0099 #define KRB5_KDB_OK_AS_DELEGATE 0x00100000
0100 #define KRB5_KDB_OK_TO_AUTH_AS_DELEGATE 0x00200000
0101 #define KRB5_KDB_NO_AUTH_DATA_REQUIRED 0x00400000
0102 #define KRB5_KDB_LOCKDOWN_KEYS 0x00800000
0103
0104
0105 #define KRB5_KDB_CREATE_BTREE 0x00000001
0106 #define KRB5_KDB_CREATE_HASH 0x00000002
0107
0108
0109
0110 #define KRB5_KDB_FLAG_REFERRAL_OK 0x00000010
0111
0112 #define KRB5_KDB_FLAG_CLIENT 0x00000040
0113
0114 #define KRB5_KDB_FLAG_MAP_PRINCIPALS 0x00000080
0115
0116 #define KRB5_KDB_FLAG_PROTOCOL_TRANSITION 0x00000100
0117
0118 #define KRB5_KDB_FLAG_CONSTRAINED_DELEGATION 0x00000200
0119
0120 #define KRB5_KDB_FLAG_USER_TO_USER 0x00000800
0121
0122 #define KRB5_KDB_FLAG_CROSS_REALM 0x00001000
0123
0124 #define KRB5_KDB_FLAG_ISSUING_REFERRAL 0x00004000
0125
0126
0127 #define KRB5_KDB_FLAGS_S4U ( KRB5_KDB_FLAG_PROTOCOL_TRANSITION | \
0128 KRB5_KDB_FLAG_CONSTRAINED_DELEGATION )
0129
0130
0131 #define KRB5_DB_ITER_WRITE 0x00000001
0132 #define KRB5_DB_ITER_REV 0x00000002
0133 #define KRB5_DB_ITER_RECURSE 0x00000004
0134
0135
0136 #define KRB5_KDB_SK_PAC_PRIVSVR_ENCTYPE "pac_privsvr_enctype"
0137 #define KRB5_KDB_SK_SESSION_ENCTYPES "session_enctypes"
0138 #define KRB5_KDB_SK_REQUIRE_AUTH "require_auth"
0139
0140 #if !defined(_WIN32)
0141
0142
0143
0144
0145
0146
0147 typedef struct _krb5_tl_data {
0148 struct _krb5_tl_data* tl_data_next;
0149 krb5_int16 tl_data_type;
0150 krb5_ui_2 tl_data_length;
0151 krb5_octet * tl_data_contents;
0152 } krb5_tl_data;
0153
0154
0155
0156 typedef struct krb5_string_attr_st {
0157 char *key;
0158 char *value;
0159 } krb5_string_attr;
0160
0161
0162
0163
0164
0165
0166
0167 typedef struct _krb5_key_data {
0168 krb5_int16 key_data_ver;
0169 krb5_ui_2 key_data_kvno;
0170 krb5_int16 key_data_type[2];
0171 krb5_ui_2 key_data_length[2];
0172 krb5_octet * key_data_contents[2];
0173 } krb5_key_data;
0174
0175 #define KRB5_KDB_V1_KEY_DATA_ARRAY 2
0176
0177 typedef struct _krb5_keysalt {
0178 krb5_int16 type;
0179 krb5_data data;
0180 } krb5_keysalt;
0181
0182
0183
0184
0185
0186
0187
0188
0189
0190
0191 typedef struct _krb5_db_entry_new {
0192 krb5_magic magic;
0193 krb5_ui_2 len;
0194 krb5_ui_4 mask;
0195 krb5_flags attributes;
0196 krb5_deltat max_life;
0197 krb5_deltat max_renewable_life;
0198 krb5_timestamp expiration;
0199 krb5_timestamp pw_expiration;
0200 krb5_timestamp last_success;
0201 krb5_timestamp last_failed;
0202 krb5_kvno fail_auth_count;
0203 krb5_int16 n_tl_data;
0204 krb5_int16 n_key_data;
0205 krb5_ui_2 e_length;
0206 krb5_octet * e_data;
0207
0208 krb5_principal princ;
0209 krb5_tl_data * tl_data;
0210
0211
0212 krb5_key_data * key_data;
0213 } krb5_db_entry;
0214
0215 typedef struct _osa_policy_ent_t {
0216 int version;
0217 char *name;
0218 krb5_ui_4 pw_min_life;
0219 krb5_ui_4 pw_max_life;
0220 krb5_ui_4 pw_min_length;
0221 krb5_ui_4 pw_min_classes;
0222 krb5_ui_4 pw_history_num;
0223 krb5_ui_4 policy_refcnt;
0224
0225 krb5_ui_4 pw_max_fail;
0226 krb5_ui_4 pw_failcnt_interval;
0227 krb5_ui_4 pw_lockout_duration;
0228
0229 krb5_ui_4 attributes;
0230 krb5_ui_4 max_life;
0231 krb5_ui_4 max_renewable_life;
0232 char * allowed_keysalts;
0233 krb5_int16 n_tl_data;
0234 krb5_tl_data * tl_data;
0235 } osa_policy_ent_rec, *osa_policy_ent_t;
0236
0237 typedef void (*osa_adb_iter_policy_func) (void *, osa_policy_ent_t);
0238
0239 typedef struct __krb5_key_salt_tuple {
0240 krb5_enctype ks_enctype;
0241 krb5_int32 ks_salttype;
0242 } krb5_key_salt_tuple;
0243
0244 #define KRB5_KDB_MAGIC_NUMBER 0xdbdbdbdb
0245 #define KRB5_KDB_V1_BASE_LENGTH 38
0246
0247 #define KRB5_KDB_MAX_ALLOWED_KS_LEN 512
0248
0249 #define KRB5_TL_LAST_PWD_CHANGE 0x0001
0250 #define KRB5_TL_MOD_PRINC 0x0002
0251 #define KRB5_TL_KADM_DATA 0x0003
0252 #define KRB5_TL_KADM5_E_DATA 0x0004
0253 #define KRB5_TL_RB1_CHALLENGE 0x0005
0254 #ifdef SECURID
0255 #define KRB5_TL_SECURID_STATE 0x0006
0256 #endif
0257 #define KRB5_TL_USER_CERTIFICATE 0x0007
0258 #define KRB5_TL_MKVNO 0x0008
0259 #define KRB5_TL_ACTKVNO 0x0009
0260 #define KRB5_TL_MKEY_AUX 0x000a
0261
0262
0263
0264 #define KRB5_TL_STRING_ATTRS 0x000b
0265
0266 #define KRB5_TL_PAC_LOGON_INFO 0x0100
0267 #define KRB5_TL_SERVER_REFERRAL 0x0200
0268 #define KRB5_TL_SVR_REFERRAL_DATA 0x0300
0269 #define KRB5_TL_CONSTRAINED_DELEGATION_ACL 0x0400
0270 #define KRB5_TL_LM_KEY 0x0500
0271 #define KRB5_TL_X509_SUBJECT_ISSUER_NAME 0x0600
0272 #define KRB5_TL_LAST_ADMIN_UNLOCK 0x0700
0273
0274 #define KRB5_TL_DB_ARGS 0x7fff
0275
0276
0277 #define KRB5_TL_ACTKVNO_VER 1
0278
0279
0280 #define KRB5_TL_MKEY_AUX_VER 1
0281
0282 typedef struct _krb5_actkvno_node {
0283 struct _krb5_actkvno_node *next;
0284 krb5_kvno act_kvno;
0285 krb5_timestamp act_time;
0286 } krb5_actkvno_node;
0287
0288 typedef struct _krb5_mkey_aux_node {
0289 struct _krb5_mkey_aux_node *next;
0290 krb5_kvno mkey_kvno;
0291 krb5_key_data latest_mkey;
0292 } krb5_mkey_aux_node;
0293
0294 typedef struct _krb5_keylist_node {
0295 krb5_keyblock keyblock;
0296 krb5_kvno kvno;
0297 struct _krb5_keylist_node *next;
0298 } krb5_keylist_node;
0299
0300
0301
0302
0303
0304 #define KRB5_MAX_FAIL_COUNT 5
0305
0306
0307 #define KRB5_KDB_M_NAME "K/M"
0308
0309
0310 #define KRB5_KDC_MKEY_1 "Enter KDC database master key"
0311 #define KRB5_KDC_MKEY_2 "Re-enter KDC database master key to verify"
0312
0313
0314 extern char *krb5_mkey_pwd_prompt1;
0315 extern char *krb5_mkey_pwd_prompt2;
0316
0317
0318
0319
0320
0321
0322 #ifdef _KRB5_INT_H
0323 #include "k5-platform.h"
0324 #define krb5_kdb_decode_int16(cp, i16) \
0325 *((krb5_int16 *) &(i16)) = load_16_le(cp)
0326 #define krb5_kdb_decode_int32(cp, i32) \
0327 *((krb5_int32 *) &(i32)) = load_32_le(cp)
0328 #define krb5_kdb_encode_int16(i16, cp) store_16_le(i16, cp)
0329 #define krb5_kdb_encode_int32(i32, cp) store_32_le(i32, cp)
0330 #endif
0331
0332 #define KRB5_KDB_OPEN_RW 0
0333 #define KRB5_KDB_OPEN_RO 1
0334
0335 #ifndef KRB5_KDB_SRV_TYPE_KDC
0336 #define KRB5_KDB_SRV_TYPE_KDC 0x0100
0337 #endif
0338
0339 #ifndef KRB5_KDB_SRV_TYPE_ADMIN
0340 #define KRB5_KDB_SRV_TYPE_ADMIN 0x0200
0341 #endif
0342
0343
0344
0345 #ifndef KRB5_KDB_SRV_TYPE_OTHER
0346 #define KRB5_KDB_SRV_TYPE_OTHER 0x0400
0347 #endif
0348
0349 #define KRB5_KDB_OPT_SET_DB_NAME 0
0350 #define KRB5_KDB_OPT_SET_LOCK_MODE 1
0351
0352 #define KRB5_DB_LOCKMODE_SHARED 0x0001
0353 #define KRB5_DB_LOCKMODE_EXCLUSIVE 0x0002
0354 #define KRB5_DB_LOCKMODE_PERMANENT 0x0008
0355
0356
0357 krb5_error_code krb5_db_setup_lib_handle(krb5_context kcontext);
0358 krb5_error_code krb5_db_open( krb5_context kcontext, char **db_args, int mode );
0359 krb5_error_code krb5_db_init ( krb5_context kcontext );
0360 krb5_error_code krb5_db_create ( krb5_context kcontext, char **db_args );
0361 krb5_error_code krb5_db_inited ( krb5_context kcontext );
0362 krb5_error_code kdb5_db_create ( krb5_context kcontext, char **db_args );
0363 krb5_error_code krb5_db_fini ( krb5_context kcontext );
0364 const char * krb5_db_errcode2string ( krb5_context kcontext, long err_code );
0365 krb5_error_code krb5_db_destroy ( krb5_context kcontext, char **db_args );
0366 krb5_error_code krb5_db_promote ( krb5_context kcontext, char **db_args );
0367 krb5_error_code krb5_db_get_age ( krb5_context kcontext, char *db_name, time_t *t );
0368 krb5_error_code krb5_db_lock ( krb5_context kcontext, int lock_mode );
0369 krb5_error_code krb5_db_unlock ( krb5_context kcontext );
0370 krb5_error_code krb5_db_get_principal ( krb5_context kcontext,
0371 krb5_const_principal search_for,
0372 unsigned int flags,
0373 krb5_db_entry **entry );
0374 void krb5_db_free_principal ( krb5_context kcontext, krb5_db_entry *entry );
0375 krb5_error_code krb5_db_put_principal ( krb5_context kcontext,
0376 krb5_db_entry *entry );
0377 krb5_error_code krb5_db_delete_principal ( krb5_context kcontext,
0378 krb5_principal search_for );
0379 krb5_error_code krb5_db_rename_principal ( krb5_context kcontext,
0380 krb5_principal source,
0381 krb5_principal target );
0382
0383
0384
0385
0386
0387
0388 krb5_error_code krb5_db_iterate ( krb5_context kcontext,
0389 char *match_entry,
0390 int (*func) (krb5_pointer, krb5_db_entry *),
0391 krb5_pointer func_arg, krb5_flags iterflags );
0392
0393
0394 krb5_error_code krb5_db_store_master_key ( krb5_context kcontext,
0395 char *keyfile,
0396 krb5_principal mname,
0397 krb5_kvno kvno,
0398 krb5_keyblock *key,
0399 char *master_pwd);
0400 krb5_error_code krb5_db_store_master_key_list ( krb5_context kcontext,
0401 char *keyfile,
0402 krb5_principal mname,
0403 char *master_pwd);
0404 krb5_error_code krb5_db_fetch_mkey ( krb5_context context,
0405 krb5_principal mname,
0406 krb5_enctype etype,
0407 krb5_boolean fromkeyboard,
0408 krb5_boolean twice,
0409 char *db_args,
0410 krb5_kvno *kvno,
0411 krb5_data *salt,
0412 krb5_keyblock *key);
0413 krb5_error_code
0414 krb5_db_fetch_mkey_list( krb5_context context,
0415 krb5_principal mname,
0416 const krb5_keyblock * mkey );
0417
0418 krb5_error_code
0419 krb5_dbe_find_enctype( krb5_context kcontext,
0420 krb5_db_entry *dbentp,
0421 krb5_int32 ktype,
0422 krb5_int32 stype,
0423 krb5_int32 kvno,
0424 krb5_key_data **kdatap);
0425
0426
0427 krb5_error_code krb5_dbe_search_enctype ( krb5_context kcontext,
0428 krb5_db_entry *dbentp,
0429 krb5_int32 *start,
0430 krb5_int32 ktype,
0431 krb5_int32 stype,
0432 krb5_int32 kvno,
0433 krb5_key_data **kdatap);
0434
0435 krb5_error_code
0436 krb5_db_setup_mkey_name ( krb5_context context,
0437 const char *keyname,
0438 const char *realm,
0439 char **fullname,
0440 krb5_principal *principal);
0441
0442
0443
0444
0445
0446 krb5_error_code
0447 krb5_dbe_decrypt_key_data( krb5_context context,
0448 const krb5_keyblock * mkey,
0449 const krb5_key_data * key_data,
0450 krb5_keyblock * dbkey,
0451 krb5_keysalt * keysalt);
0452
0453 krb5_error_code
0454 krb5_dbe_encrypt_key_data( krb5_context context,
0455 const krb5_keyblock * mkey,
0456 const krb5_keyblock * dbkey,
0457 const krb5_keysalt * keysalt,
0458 int keyver,
0459 krb5_key_data * key_data);
0460
0461 krb5_error_code
0462 krb5_dbe_fetch_act_key_list(krb5_context context,
0463 krb5_principal princ,
0464 krb5_actkvno_node **act_key_list);
0465
0466 krb5_error_code
0467 krb5_dbe_find_act_mkey( krb5_context context,
0468 krb5_actkvno_node * act_mkey_list,
0469 krb5_kvno * act_kvno,
0470 krb5_keyblock ** act_mkey);
0471
0472 krb5_error_code
0473 krb5_dbe_find_mkey( krb5_context context,
0474 krb5_db_entry * entry,
0475 krb5_keyblock ** mkey);
0476
0477
0478 krb5_error_code
0479 krb5_dbe_lookup_mkvno( krb5_context context,
0480 krb5_db_entry * entry,
0481 krb5_kvno * mkvno);
0482
0483 krb5_keylist_node *
0484 krb5_db_mkey_list_alias( krb5_context kcontext );
0485
0486
0487 krb5_error_code
0488 krb5_dbe_get_mkvno( krb5_context context,
0489 krb5_db_entry * entry,
0490 krb5_kvno * mkvno);
0491
0492 krb5_error_code
0493 krb5_dbe_lookup_mod_princ_data( krb5_context context,
0494 krb5_db_entry * entry,
0495 krb5_timestamp * mod_time,
0496 krb5_principal * mod_princ);
0497
0498 krb5_error_code
0499 krb5_dbe_lookup_mkey_aux( krb5_context context,
0500 krb5_db_entry * entry,
0501 krb5_mkey_aux_node ** mkey_aux_data_list);
0502 krb5_error_code
0503 krb5_dbe_update_mkvno( krb5_context context,
0504 krb5_db_entry * entry,
0505 krb5_kvno mkvno);
0506
0507 krb5_error_code
0508 krb5_dbe_lookup_actkvno( krb5_context context,
0509 krb5_db_entry * entry,
0510 krb5_actkvno_node ** actkvno_list);
0511
0512 krb5_error_code
0513 krb5_dbe_update_mkey_aux( krb5_context context,
0514 krb5_db_entry * entry,
0515 krb5_mkey_aux_node * mkey_aux_data_list);
0516
0517 krb5_error_code
0518 krb5_dbe_update_actkvno(krb5_context context,
0519 krb5_db_entry * entry,
0520 const krb5_actkvno_node *actkvno_list);
0521
0522 krb5_error_code
0523 krb5_dbe_update_last_pwd_change( krb5_context context,
0524 krb5_db_entry * entry,
0525 krb5_timestamp stamp);
0526
0527 krb5_error_code
0528 krb5_dbe_update_last_admin_unlock( krb5_context context,
0529 krb5_db_entry * entry,
0530 krb5_timestamp stamp);
0531
0532 krb5_error_code
0533 krb5_dbe_lookup_tl_data( krb5_context context,
0534 krb5_db_entry * entry,
0535 krb5_tl_data * ret_tl_data);
0536
0537 krb5_error_code
0538 krb5_dbe_create_key_data( krb5_context context,
0539 krb5_db_entry * entry);
0540
0541
0542 krb5_error_code
0543 krb5_dbe_update_mod_princ_data( krb5_context context,
0544 krb5_db_entry * entry,
0545 krb5_timestamp mod_date,
0546 krb5_const_principal mod_princ);
0547
0548
0549
0550
0551
0552
0553
0554
0555
0556
0557 void *krb5_db_alloc( krb5_context kcontext,
0558 void *ptr,
0559 size_t size );
0560 void krb5_db_free( krb5_context kcontext,
0561 void *ptr);
0562
0563
0564 krb5_error_code
0565 krb5_dbe_lookup_last_pwd_change( krb5_context context,
0566 krb5_db_entry * entry,
0567 krb5_timestamp * stamp);
0568
0569 krb5_error_code
0570 krb5_dbe_lookup_last_admin_unlock( krb5_context context,
0571 krb5_db_entry * entry,
0572 krb5_timestamp * stamp);
0573
0574
0575
0576 krb5_error_code
0577 krb5_dbe_get_strings(krb5_context context, krb5_db_entry *entry,
0578 krb5_string_attr **strings_out, int *count_out);
0579
0580
0581
0582 krb5_error_code
0583 krb5_dbe_get_string(krb5_context context, krb5_db_entry *entry,
0584 const char *key, char **value_out);
0585
0586
0587 krb5_error_code
0588 krb5_dbe_set_string(krb5_context context, krb5_db_entry *entry,
0589 const char *key, const char *value);
0590
0591 krb5_error_code
0592 krb5_dbe_delete_tl_data( krb5_context context,
0593 krb5_db_entry * entry,
0594 krb5_int16 tl_data_type);
0595
0596 krb5_error_code
0597 krb5_db_update_tl_data(krb5_context context,
0598 krb5_int16 * n_tl_datap,
0599 krb5_tl_data **tl_datap,
0600 krb5_tl_data * new_tl_data);
0601
0602 krb5_error_code
0603 krb5_dbe_update_tl_data( krb5_context context,
0604 krb5_db_entry * entry,
0605 krb5_tl_data * new_tl_data);
0606
0607
0608 krb5_error_code
0609 krb5_dbe_compute_salt(krb5_context context, const krb5_key_data *key,
0610 krb5_const_principal princ, krb5_int16 *salttype_out,
0611 krb5_data **salt_out);
0612
0613
0614
0615
0616
0617 krb5_error_code
0618 krb5_dbe_specialize_salt(krb5_context context, krb5_db_entry *entry);
0619
0620 krb5_error_code
0621 krb5_dbe_cpw( krb5_context kcontext,
0622 krb5_keyblock * master_key,
0623 krb5_key_salt_tuple * ks_tuple,
0624 int ks_tuple_count,
0625 char * passwd,
0626 int new_kvno,
0627 krb5_boolean keepold,
0628 krb5_db_entry * db_entry);
0629
0630
0631 krb5_error_code
0632 krb5_dbe_ark( krb5_context context,
0633 krb5_keyblock * master_key,
0634 krb5_key_salt_tuple * ks_tuple,
0635 int ks_tuple_count,
0636 krb5_db_entry * db_entry);
0637
0638 krb5_error_code
0639 krb5_dbe_crk( krb5_context context,
0640 krb5_keyblock * master_key,
0641 krb5_key_salt_tuple * ks_tuple,
0642 int ks_tuple_count,
0643 krb5_boolean keepold,
0644 krb5_db_entry * db_entry);
0645
0646 krb5_error_code
0647 krb5_dbe_apw( krb5_context context,
0648 krb5_keyblock * master_key,
0649 krb5_key_salt_tuple * ks_tuple,
0650 int ks_tuple_count,
0651 char * passwd,
0652 krb5_db_entry * db_entry);
0653
0654 int
0655 krb5_db_get_key_data_kvno( krb5_context context,
0656 int count,
0657 krb5_key_data * data);
0658
0659 krb5_error_code krb5_db_check_transited_realms(krb5_context kcontext,
0660 const krb5_data *tr_contents,
0661 const krb5_data *client_realm,
0662 const krb5_data *server_realm);
0663
0664 krb5_error_code krb5_db_check_policy_as(krb5_context kcontext,
0665 krb5_kdc_req *request,
0666 krb5_db_entry *client,
0667 krb5_db_entry *server,
0668 krb5_timestamp kdc_time,
0669 const char **status,
0670 krb5_pa_data ***e_data);
0671
0672 krb5_error_code krb5_db_check_policy_tgs(krb5_context kcontext,
0673 krb5_kdc_req *request,
0674 krb5_db_entry *server,
0675 krb5_ticket *ticket,
0676 const char **status,
0677 krb5_pa_data ***e_data);
0678
0679 void krb5_db_audit_as_req(krb5_context kcontext, krb5_kdc_req *request,
0680 const krb5_address *local_addr,
0681 const krb5_address *remote_addr,
0682 krb5_db_entry *client, krb5_db_entry *server,
0683 krb5_timestamp authtime, krb5_error_code error_code);
0684
0685 void krb5_db_refresh_config(krb5_context kcontext);
0686
0687 krb5_error_code krb5_db_check_allowed_to_delegate(krb5_context kcontext,
0688 krb5_const_principal client,
0689 const krb5_db_entry *server,
0690 krb5_const_principal proxy);
0691
0692 krb5_error_code krb5_db_get_s4u_x509_principal(krb5_context kcontext,
0693 const krb5_data *client_cert,
0694 krb5_const_principal in_princ,
0695 unsigned int flags,
0696 krb5_db_entry **entry);
0697
0698 krb5_error_code krb5_db_allowed_to_delegate_from(krb5_context context,
0699 krb5_const_principal client,
0700 krb5_const_principal server,
0701 krb5_pac server_pac,
0702 const krb5_db_entry *proxy);
0703
0704
0705
0706
0707
0708
0709
0710
0711
0712
0713
0714 void
0715 krb5_dbe_sort_key_data(krb5_key_data *key_data, size_t key_data_length);
0716
0717 krb5_error_code
0718 krb5_db_issue_pac(krb5_context context, unsigned int flags,
0719 krb5_db_entry *client, krb5_keyblock *replaced_reply_key,
0720 krb5_db_entry *server, krb5_db_entry *krbtgt,
0721 krb5_timestamp authtime, krb5_pac old_pac, krb5_pac new_pac,
0722 krb5_data ***auth_indicators);
0723
0724
0725
0726
0727
0728
0729 krb5_error_code
0730 krb5_dbe_def_search_enctype( krb5_context kcontext,
0731 krb5_db_entry *dbentp,
0732 krb5_int32 *start,
0733 krb5_int32 ktype,
0734 krb5_int32 stype,
0735 krb5_int32 kvno,
0736 krb5_key_data **kdatap);
0737
0738 krb5_error_code
0739 krb5_def_store_mkey_list( krb5_context context,
0740 char *keyfile,
0741 krb5_principal mname,
0742 krb5_keylist_node *keylist,
0743 char *master_pwd);
0744
0745 krb5_error_code
0746 krb5_db_def_fetch_mkey( krb5_context context,
0747 krb5_principal mname,
0748 krb5_keyblock *key,
0749 krb5_kvno *kvno,
0750 char *db_args);
0751
0752 krb5_error_code
0753 krb5_def_fetch_mkey_list( krb5_context context,
0754 krb5_principal mprinc,
0755 const krb5_keyblock *mkey,
0756 krb5_keylist_node **mkeys_list);
0757
0758 krb5_error_code
0759 krb5_dbe_def_cpw( krb5_context context,
0760 krb5_keyblock * master_key,
0761 krb5_key_salt_tuple * ks_tuple,
0762 int ks_tuple_count,
0763 char * passwd,
0764 int new_kvno,
0765 krb5_boolean keepold,
0766 krb5_db_entry * db_entry);
0767
0768 krb5_error_code
0769 krb5_dbe_def_decrypt_key_data( krb5_context context,
0770 const krb5_keyblock * mkey,
0771 const krb5_key_data * key_data,
0772 krb5_keyblock * dbkey,
0773 krb5_keysalt * keysalt);
0774
0775 krb5_error_code
0776 krb5_dbe_def_encrypt_key_data( krb5_context context,
0777 const krb5_keyblock * mkey,
0778 const krb5_keyblock * dbkey,
0779 const krb5_keysalt * keysalt,
0780 int keyver,
0781 krb5_key_data * key_data);
0782
0783 krb5_error_code
0784 krb5_db_def_rename_principal( krb5_context kcontext,
0785 krb5_const_principal source,
0786 krb5_const_principal target);
0787
0788 krb5_error_code
0789 krb5_db_create_policy( krb5_context kcontext,
0790 osa_policy_ent_t policy);
0791
0792 krb5_error_code
0793 krb5_db_get_policy ( krb5_context kcontext,
0794 char *name,
0795 osa_policy_ent_t *policy );
0796
0797 krb5_error_code
0798 krb5_db_put_policy( krb5_context kcontext,
0799 osa_policy_ent_t policy);
0800
0801 krb5_error_code
0802 krb5_db_iter_policy( krb5_context kcontext,
0803 char *match_entry,
0804 osa_adb_iter_policy_func func,
0805 void *data);
0806
0807 krb5_error_code
0808 krb5_db_delete_policy( krb5_context kcontext,
0809 char *policy);
0810
0811 void
0812 krb5_db_free_policy( krb5_context kcontext,
0813 osa_policy_ent_t policy);
0814
0815
0816 krb5_error_code
0817 krb5_db_set_context(krb5_context, void *db_context);
0818
0819 krb5_error_code
0820 krb5_db_get_context(krb5_context, void **db_context);
0821
0822 void
0823 krb5_dbe_free_key_data_contents(krb5_context, krb5_key_data *);
0824
0825 void
0826 krb5_dbe_free_key_list(krb5_context, krb5_keylist_node *);
0827
0828 void
0829 krb5_dbe_free_actkvno_list(krb5_context, krb5_actkvno_node *);
0830
0831 void
0832 krb5_dbe_free_mkey_aux_list(krb5_context, krb5_mkey_aux_node *);
0833
0834 void
0835 krb5_dbe_free_tl_data(krb5_context, krb5_tl_data *);
0836
0837 void
0838 krb5_dbe_free_strings(krb5_context, krb5_string_attr *, int count);
0839
0840 void
0841 krb5_dbe_free_string(krb5_context, char *);
0842
0843
0844
0845
0846
0847
0848 krb5_error_code krb5_db_register_keytab(krb5_context context);
0849
0850 #define KRB5_KDB_DEF_FLAGS 0
0851
0852 #define KDB_MAX_DB_NAME 128
0853 #define KDB_REALM_SECTION "realms"
0854 #define KDB_MODULE_POINTER "database_module"
0855 #define KDB_MODULE_DEF_SECTION "dbdefaults"
0856 #define KDB_MODULE_SECTION "dbmodules"
0857 #define KDB_LIB_POINTER "db_library"
0858 #define KDB_DATABASE_CONF_FILE DEFAULT_SECURE_PROFILE_PATH
0859 #define KDB_DATABASE_ENV_PROF KDC_PROFILE_ENV
0860
0861 #define KRB5_KDB_OPEN_RW 0
0862 #define KRB5_KDB_OPEN_RO 1
0863
0864 #define KRB5_KDB_OPT_SET_DB_NAME 0
0865 #define KRB5_KDB_OPT_SET_LOCK_MODE 1
0866
0867
0868
0869
0870
0871 #define KRB5_KDB_DAL_MAJOR_VERSION 9
0872
0873
0874
0875
0876
0877
0878
0879
0880
0881
0882
0883
0884
0885
0886
0887
0888
0889
0890
0891
0892
0893
0894
0895
0896
0897
0898
0899
0900
0901
0902
0903
0904
0905
0906
0907
0908
0909
0910
0911
0912
0913
0914
0915
0916
0917
0918
0919
0920
0921
0922
0923
0924
0925 typedef struct _kdb_vftabl {
0926 short int maj_ver;
0927 short int min_ver;
0928
0929
0930
0931
0932
0933 krb5_error_code (*init_library)(void);
0934
0935
0936
0937
0938
0939 krb5_error_code (*fini_library)(void);
0940
0941
0942
0943
0944
0945
0946
0947
0948 krb5_error_code (*init_module)(krb5_context kcontext, char *conf_section,
0949 char **db_args, int mode);
0950
0951
0952
0953
0954
0955 krb5_error_code (*fini_module)(krb5_context kcontext);
0956
0957
0958
0959
0960
0961
0962
0963
0964
0965
0966
0967
0968
0969
0970 krb5_error_code (*create)(krb5_context kcontext, char *conf_section,
0971 char **db_args);
0972
0973
0974
0975
0976
0977
0978
0979 krb5_error_code (*destroy)(krb5_context kcontext, char *conf_section,
0980 char **db_args);
0981
0982
0983
0984
0985
0986 krb5_error_code (*get_age)(krb5_context kcontext, char *db_name,
0987 time_t *age);
0988
0989
0990
0991
0992
0993
0994
0995
0996
0997
0998
0999
1000
1001
1002 krb5_error_code (*lock)(krb5_context kcontext, int mode);
1003
1004
1005 krb5_error_code (*unlock)(krb5_context kcontext);
1006
1007
1008
1009
1010
1011
1012
1013
1014
1015
1016
1017
1018
1019
1020
1021
1022
1023
1024
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037
1038
1039
1040
1041
1042
1043
1044
1045
1046
1047
1048
1049
1050
1051
1052
1053
1054
1055
1056
1057
1058 krb5_error_code (*get_principal)(krb5_context kcontext,
1059 krb5_const_principal search_for,
1060 unsigned int flags,
1061 krb5_db_entry **entry);
1062
1063
1064
1065
1066
1067
1068
1069
1070
1071
1072
1073
1074 krb5_error_code (*put_principal)(krb5_context kcontext,
1075 krb5_db_entry *entry, char **db_args);
1076
1077
1078
1079
1080
1081 krb5_error_code (*delete_principal)(krb5_context kcontext,
1082 krb5_const_principal search_for);
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093 krb5_error_code (*rename_principal)(krb5_context kcontext,
1094 krb5_const_principal source,
1095 krb5_const_principal target);
1096
1097
1098
1099
1100
1101
1102
1103 krb5_error_code (*iterate)(krb5_context kcontext,
1104 char *match_entry,
1105 int (*func)(krb5_pointer, krb5_db_entry *),
1106 krb5_pointer func_arg, krb5_flags iterflags);
1107
1108
1109
1110
1111
1112 krb5_error_code (*create_policy)(krb5_context kcontext,
1113 osa_policy_ent_t policy);
1114
1115
1116
1117
1118
1119 krb5_error_code (*get_policy)(krb5_context kcontext, char *name,
1120 osa_policy_ent_t *policy);
1121
1122
1123
1124
1125
1126 krb5_error_code (*put_policy)(krb5_context kcontext,
1127 osa_policy_ent_t policy);
1128
1129
1130
1131
1132
1133
1134
1135 krb5_error_code (*iter_policy)(krb5_context kcontext, char *match_entry,
1136 osa_adb_iter_policy_func func,
1137 void *data);
1138
1139
1140
1141
1142
1143 krb5_error_code (*delete_policy)(krb5_context kcontext, char *policy);
1144
1145
1146
1147
1148
1149
1150
1151
1152
1153 krb5_error_code (*fetch_master_key)(krb5_context kcontext,
1154 krb5_principal mname,
1155 krb5_keyblock *key, krb5_kvno *kvno,
1156 char *db_args);
1157
1158
1159
1160
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172 krb5_error_code (*fetch_master_key_list)(krb5_context kcontext,
1173 krb5_principal mname,
1174 const krb5_keyblock *key,
1175 krb5_keylist_node **mkeys_list);
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186 krb5_error_code (*store_master_key_list)(krb5_context kcontext,
1187 char *db_arg,
1188 krb5_principal mname,
1189 krb5_keylist_node *keylist,
1190 char *master_pwd);
1191
1192
1193
1194
1195
1196
1197
1198
1199
1200
1201 krb5_error_code (*dbe_search_enctype)(krb5_context kcontext,
1202 krb5_db_entry *dbentp,
1203 krb5_int32 *start, krb5_int32 ktype,
1204 krb5_int32 stype, krb5_int32 kvno,
1205 krb5_key_data **kdatap);
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217 krb5_error_code (*change_pwd)(krb5_context context,
1218 krb5_keyblock *master_key,
1219 krb5_key_salt_tuple *ks_tuple,
1220 int ks_tuple_count, char *passwd,
1221 int new_kvno, krb5_boolean keepold,
1222 krb5_db_entry *db_entry);
1223
1224
1225
1226
1227
1228
1229
1230
1231
1232
1233 krb5_error_code (*promote_db)(krb5_context context, char *conf_section,
1234 char **db_args);
1235
1236
1237
1238
1239
1240
1241
1242
1243
1244
1245
1246
1247
1248 krb5_error_code (*decrypt_key_data)(krb5_context kcontext,
1249 const krb5_keyblock *mkey,
1250 const krb5_key_data *key_data,
1251 krb5_keyblock *dbkey,
1252 krb5_keysalt *keysalt);
1253
1254
1255
1256
1257
1258
1259
1260
1261
1262
1263
1264 krb5_error_code (*encrypt_key_data)(krb5_context kcontext,
1265 const krb5_keyblock *mkey,
1266 const krb5_keyblock *dbkey,
1267 const krb5_keysalt *keysalt,
1268 int keyver, krb5_key_data *key_data);
1269
1270
1271
1272
1273
1274
1275
1276 krb5_error_code (*check_transited_realms)(krb5_context kcontext,
1277 const krb5_data *tr_contents,
1278 const krb5_data *client_realm,
1279 const krb5_data *server_realm);
1280
1281
1282
1283
1284
1285
1286
1287
1288
1289
1290 krb5_error_code (*check_policy_as)(krb5_context kcontext,
1291 krb5_kdc_req *request,
1292 krb5_db_entry *client,
1293 krb5_db_entry *server,
1294 krb5_timestamp kdc_time,
1295 const char **status,
1296 krb5_pa_data ***e_data);
1297
1298
1299
1300
1301
1302
1303
1304
1305
1306
1307
1308 krb5_error_code (*check_policy_tgs)(krb5_context kcontext,
1309 krb5_kdc_req *request,
1310 krb5_db_entry *server,
1311 krb5_ticket *ticket,
1312 const char **status,
1313 krb5_pa_data ***e_data);
1314
1315
1316
1317
1318
1319 void (*audit_as_req)(krb5_context kcontext, krb5_kdc_req *request,
1320 const krb5_address *local_addr,
1321 const krb5_address *remote_addr,
1322 krb5_db_entry *client, krb5_db_entry *server,
1323 krb5_timestamp authtime, krb5_error_code error_code);
1324
1325
1326
1327
1328
1329
1330
1331 void (*refresh_config)(krb5_context kcontext);
1332
1333
1334
1335
1336
1337
1338
1339
1340
1341
1342
1343
1344
1345
1346 krb5_error_code (*check_allowed_to_delegate)(krb5_context context,
1347 krb5_const_principal client,
1348 const krb5_db_entry *server,
1349 krb5_const_principal proxy);
1350
1351
1352
1353
1354
1355
1356 void (*free_principal_e_data)(krb5_context kcontext, krb5_octet *e_data);
1357
1358
1359
1360
1361
1362
1363
1364
1365
1366
1367
1368
1369
1370
1371 krb5_error_code (*get_s4u_x509_principal)(krb5_context kcontext,
1372 const krb5_data *client_cert,
1373 krb5_const_principal princ,
1374 unsigned int flags,
1375 krb5_db_entry **entry_out);
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388
1389
1390
1391
1392
1393 krb5_error_code (*allowed_to_delegate_from)(krb5_context context,
1394 krb5_const_principal client,
1395 krb5_const_principal server,
1396 krb5_pac server_pac,
1397 const krb5_db_entry *proxy);
1398
1399
1400
1401
1402
1403
1404
1405
1406
1407
1408
1409
1410
1411
1412
1413
1414
1415
1416
1417
1418
1419
1420
1421
1422
1423
1424
1425
1426
1427
1428
1429
1430
1431
1432
1433
1434
1435
1436
1437
1438
1439
1440
1441
1442
1443 krb5_error_code (*issue_pac)(krb5_context context, unsigned int flags,
1444 krb5_db_entry *client,
1445 krb5_keyblock *replaced_reply_key,
1446 krb5_db_entry *server,
1447 krb5_db_entry *signing_krbtgt,
1448 krb5_timestamp authtime, krb5_pac old_pac,
1449 krb5_pac new_pac,
1450 krb5_data ***auth_indicators);
1451
1452
1453 } kdb_vftabl;
1454
1455 #endif
1456
1457 #endif