File indexing completed on 2025-02-21 10:04:38
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 #ifndef __KADM5_ADMIN_H__
0042 #define __KADM5_ADMIN_H__
0043
0044 #include <sys/types.h>
0045 #include <gssrpc/rpc.h>
0046 #include <krb5.h>
0047 #include <kdb.h>
0048 #include <com_err.h>
0049 #include <kadm5/kadm_err.h>
0050 #include <kadm5/chpass_util_strings.h>
0051
0052 #ifndef KADM5INT_BEGIN_DECLS
0053 #if defined(__cplusplus)
0054 #define KADM5INT_BEGIN_DECLS extern "C" {
0055 #define KADM5INT_END_DECLS }
0056 #else
0057 #define KADM5INT_BEGIN_DECLS
0058 #define KADM5INT_END_DECLS
0059 #endif
0060 #endif
0061
0062 KADM5INT_BEGIN_DECLS
0063
0064 #define KADM5_ADMIN_SERVICE "kadmin/admin"
0065 #define KADM5_CHANGEPW_SERVICE "kadmin/changepw"
0066 #define KADM5_HIST_PRINCIPAL "kadmin/history"
0067 #define KADM5_KIPROP_HOST_SERVICE "kiprop"
0068
0069 typedef krb5_principal kadm5_princ_t;
0070 typedef char *kadm5_policy_t;
0071 typedef long kadm5_ret_t;
0072
0073 #define KADM5_PW_FIRST_PROMPT \
0074 (error_message(CHPASS_UTIL_NEW_PASSWORD_PROMPT))
0075 #define KADM5_PW_SECOND_PROMPT \
0076 (error_message(CHPASS_UTIL_NEW_PASSWORD_AGAIN_PROMPT))
0077
0078
0079
0080
0081 #define KADM5_OK 0
0082
0083
0084
0085
0086
0087
0088 #define KADM5_PRINCIPAL 0x000001
0089 #define KADM5_PRINC_EXPIRE_TIME 0x000002
0090 #define KADM5_PW_EXPIRATION 0x000004
0091 #define KADM5_LAST_PWD_CHANGE 0x000008
0092 #define KADM5_ATTRIBUTES 0x000010
0093 #define KADM5_MAX_LIFE 0x000020
0094 #define KADM5_MOD_TIME 0x000040
0095 #define KADM5_MOD_NAME 0x000080
0096 #define KADM5_KVNO 0x000100
0097 #define KADM5_MKVNO 0x000200
0098 #define KADM5_AUX_ATTRIBUTES 0x000400
0099 #define KADM5_POLICY 0x000800
0100 #define KADM5_POLICY_CLR 0x001000
0101
0102 #define KADM5_MAX_RLIFE 0x002000
0103 #define KADM5_LAST_SUCCESS 0x004000
0104 #define KADM5_LAST_FAILED 0x008000
0105 #define KADM5_FAIL_AUTH_COUNT 0x010000
0106 #define KADM5_KEY_DATA 0x020000
0107 #define KADM5_TL_DATA 0x040000
0108 #ifdef notyet
0109 #define KADM5_CPW_FUNCTION 0x080000
0110 #define KADM5_RANDKEY_USED 0x100000
0111 #endif
0112 #define KADM5_LOAD 0x200000
0113 #define KADM5_KEY_HIST 0x400000
0114
0115
0116 #define KADM5_PRINCIPAL_NORMAL_MASK 0x41ffff
0117
0118
0119
0120 #define KADM5_PW_MAX_LIFE 0x00004000
0121 #define KADM5_PW_MIN_LIFE 0x00008000
0122 #define KADM5_PW_MIN_LENGTH 0x00010000
0123 #define KADM5_PW_MIN_CLASSES 0x00020000
0124 #define KADM5_PW_HISTORY_NUM 0x00040000
0125 #define KADM5_REF_COUNT 0x00080000
0126 #define KADM5_PW_MAX_FAILURE 0x00100000
0127 #define KADM5_PW_FAILURE_COUNT_INTERVAL 0x00200000
0128 #define KADM5_PW_LOCKOUT_DURATION 0x00400000
0129 #define KADM5_POLICY_ATTRIBUTES 0x00800000
0130 #define KADM5_POLICY_MAX_LIFE 0x01000000
0131 #define KADM5_POLICY_MAX_RLIFE 0x02000000
0132 #define KADM5_POLICY_ALLOWED_KEYSALTS 0x04000000
0133 #define KADM5_POLICY_TL_DATA 0x08000000
0134
0135
0136 #define KADM5_CONFIG_REALM 0x00000001
0137 #define KADM5_CONFIG_DBNAME 0x00000002
0138 #define KADM5_CONFIG_MKEY_NAME 0x00000004
0139 #define KADM5_CONFIG_MAX_LIFE 0x00000008
0140 #define KADM5_CONFIG_MAX_RLIFE 0x00000010
0141 #define KADM5_CONFIG_EXPIRATION 0x00000020
0142 #define KADM5_CONFIG_FLAGS 0x00000040
0143
0144 #define KADM5_CONFIG_STASH_FILE 0x00000100
0145 #define KADM5_CONFIG_ENCTYPE 0x00000200
0146 #define KADM5_CONFIG_ADBNAME 0x00000400
0147 #define KADM5_CONFIG_ADB_LOCKFILE 0x00000800
0148 #define KADM5_CONFIG_KADMIND_LISTEN 0x00001000
0149 #define KADM5_CONFIG_ACL_FILE 0x00002000
0150 #define KADM5_CONFIG_KADMIND_PORT 0x00004000
0151 #define KADM5_CONFIG_ENCTYPES 0x00008000
0152 #define KADM5_CONFIG_ADMIN_SERVER 0x00010000
0153 #define KADM5_CONFIG_DICT_FILE 0x00020000
0154 #define KADM5_CONFIG_MKEY_FROM_KBD 0x00040000
0155 #define KADM5_CONFIG_KPASSWD_PORT 0x00080000
0156 #define KADM5_CONFIG_OLD_AUTH_GSSAPI 0x00100000
0157 #define KADM5_CONFIG_NO_AUTH 0x00200000
0158 #define KADM5_CONFIG_AUTH_NOFALLBACK 0x00400000
0159 #define KADM5_CONFIG_KPASSWD_LISTEN 0x00800000
0160 #define KADM5_CONFIG_IPROP_ENABLED 0x01000000
0161 #define KADM5_CONFIG_ULOG_SIZE 0x02000000
0162 #define KADM5_CONFIG_POLL_TIME 0x04000000
0163 #define KADM5_CONFIG_IPROP_LOGFILE 0x08000000
0164 #define KADM5_CONFIG_IPROP_PORT 0x10000000
0165 #define KADM5_CONFIG_KVNO 0x20000000
0166 #define KADM5_CONFIG_IPROP_RESYNC_TIMEOUT 0x40000000
0167 #define KADM5_CONFIG_IPROP_LISTEN 0x80000000
0168
0169
0170
0171 #define KADM5_PRIV_GET 0x01
0172 #define KADM5_PRIV_ADD 0x02
0173 #define KADM5_PRIV_MODIFY 0x04
0174 #define KADM5_PRIV_DELETE 0x08
0175
0176
0177
0178
0179 #define KADM5_MASK_BITS 0xffffff00
0180
0181 #define KADM5_STRUCT_VERSION_MASK 0x12345600
0182 #define KADM5_STRUCT_VERSION_1 (KADM5_STRUCT_VERSION_MASK|0x01)
0183 #define KADM5_STRUCT_VERSION KADM5_STRUCT_VERSION_1
0184
0185 #define KADM5_API_VERSION_MASK 0x12345700
0186 #define KADM5_API_VERSION_2 (KADM5_API_VERSION_MASK|0x02)
0187 #define KADM5_API_VERSION_3 (KADM5_API_VERSION_MASK|0x03)
0188 #define KADM5_API_VERSION_4 (KADM5_API_VERSION_MASK|0x04)
0189
0190 typedef struct _kadm5_principal_ent_t {
0191 krb5_principal principal;
0192 krb5_timestamp princ_expire_time;
0193 krb5_timestamp last_pwd_change;
0194 krb5_timestamp pw_expiration;
0195 krb5_deltat max_life;
0196 krb5_principal mod_name;
0197 krb5_timestamp mod_date;
0198 krb5_flags attributes;
0199 krb5_kvno kvno;
0200 krb5_kvno mkvno;
0201 char *policy;
0202 long aux_attributes;
0203
0204
0205 krb5_deltat max_renewable_life;
0206 krb5_timestamp last_success;
0207 krb5_timestamp last_failed;
0208 krb5_kvno fail_auth_count;
0209 krb5_int16 n_key_data;
0210 krb5_int16 n_tl_data;
0211 krb5_tl_data *tl_data;
0212 krb5_key_data *key_data;
0213 } kadm5_principal_ent_rec, *kadm5_principal_ent_t;
0214
0215 typedef struct _kadm5_policy_ent_t {
0216 char *policy;
0217 long pw_min_life;
0218 long pw_max_life;
0219 long pw_min_length;
0220 long pw_min_classes;
0221 long pw_history_num;
0222 long policy_refcnt;
0223
0224
0225 krb5_kvno pw_max_fail;
0226 krb5_deltat pw_failcnt_interval;
0227 krb5_deltat pw_lockout_duration;
0228
0229
0230 krb5_flags attributes;
0231 krb5_deltat max_life;
0232 krb5_deltat max_renewable_life;
0233 char *allowed_keysalts;
0234 krb5_int16 n_tl_data;
0235 krb5_tl_data *tl_data;
0236 } kadm5_policy_ent_rec, *kadm5_policy_ent_t;
0237
0238
0239
0240
0241 typedef struct _kadm5_config_params {
0242 long mask;
0243 char * realm;
0244 int kadmind_port;
0245 int kpasswd_port;
0246
0247 char * admin_server;
0248 #ifdef notyet
0249 char * kpasswd_server;
0250 #endif
0251
0252
0253
0254
0255
0256 char * dbname;
0257
0258 char * acl_file;
0259 char * dict_file;
0260
0261 int mkey_from_kbd;
0262 char * stash_file;
0263 char * mkey_name;
0264 krb5_enctype enctype;
0265 krb5_deltat max_life;
0266 krb5_deltat max_rlife;
0267 krb5_timestamp expiration;
0268 krb5_flags flags;
0269 krb5_key_salt_tuple *keysalts;
0270 krb5_int32 num_keysalts;
0271 krb5_kvno kvno;
0272 bool_t iprop_enabled;
0273 uint32_t iprop_ulogsize;
0274 krb5_deltat iprop_poll_time;
0275 char * iprop_logfile;
0276
0277 int iprop_port;
0278 int iprop_resync_timeout;
0279 char * kadmind_listen;
0280 char * kpasswd_listen;
0281 char * iprop_listen;
0282 } kadm5_config_params;
0283
0284 typedef struct _kadm5_key_data {
0285 krb5_kvno kvno;
0286 krb5_keyblock key;
0287 krb5_keysalt salt;
0288 } kadm5_key_data;
0289
0290
0291
0292
0293
0294
0295
0296 krb5_error_code kadm5_get_config_params(krb5_context context,
0297 int use_kdc_config,
0298 kadm5_config_params *params_in,
0299 kadm5_config_params *params_out);
0300
0301 krb5_error_code kadm5_free_config_params(krb5_context context,
0302 kadm5_config_params *params);
0303
0304 krb5_error_code kadm5_get_admin_service_name(krb5_context, char *,
0305 char *, size_t);
0306
0307
0308
0309
0310
0311
0312
0313
0314 kadm5_ret_t kadm5_init(krb5_context context, char *client_name,
0315 char *pass, char *service_name,
0316 kadm5_config_params *params,
0317 krb5_ui_4 struct_version,
0318 krb5_ui_4 api_version,
0319 char **db_args,
0320 void **server_handle);
0321 kadm5_ret_t kadm5_init_anonymous(krb5_context context, char *client_name,
0322 char *service_name,
0323 kadm5_config_params *params,
0324 krb5_ui_4 struct_version,
0325 krb5_ui_4 api_version,
0326 char **db_args,
0327 void **server_handle);
0328 kadm5_ret_t kadm5_init_with_password(krb5_context context,
0329 char *client_name,
0330 char *pass,
0331 char *service_name,
0332 kadm5_config_params *params,
0333 krb5_ui_4 struct_version,
0334 krb5_ui_4 api_version,
0335 char **db_args,
0336 void **server_handle);
0337 kadm5_ret_t kadm5_init_with_skey(krb5_context context,
0338 char *client_name,
0339 char *keytab,
0340 char *service_name,
0341 kadm5_config_params *params,
0342 krb5_ui_4 struct_version,
0343 krb5_ui_4 api_version,
0344 char **db_args,
0345 void **server_handle);
0346 kadm5_ret_t kadm5_init_with_creds(krb5_context context,
0347 char *client_name,
0348 krb5_ccache cc,
0349 char *service_name,
0350 kadm5_config_params *params,
0351 krb5_ui_4 struct_version,
0352 krb5_ui_4 api_version,
0353 char **db_args,
0354 void **server_handle);
0355 kadm5_ret_t kadm5_lock(void *server_handle);
0356 kadm5_ret_t kadm5_unlock(void *server_handle);
0357 kadm5_ret_t kadm5_flush(void *server_handle);
0358 kadm5_ret_t kadm5_destroy(void *server_handle);
0359 kadm5_ret_t kadm5_create_principal(void *server_handle,
0360 kadm5_principal_ent_t ent,
0361 long mask, char *pass);
0362 kadm5_ret_t kadm5_create_principal_3(void *server_handle,
0363 kadm5_principal_ent_t ent,
0364 long mask,
0365 int n_ks_tuple,
0366 krb5_key_salt_tuple *ks_tuple,
0367 char *pass);
0368 kadm5_ret_t kadm5_delete_principal(void *server_handle,
0369 krb5_principal principal);
0370 kadm5_ret_t kadm5_modify_principal(void *server_handle,
0371 kadm5_principal_ent_t ent,
0372 long mask);
0373 kadm5_ret_t kadm5_rename_principal(void *server_handle,
0374 krb5_principal,krb5_principal);
0375 kadm5_ret_t kadm5_get_principal(void *server_handle,
0376 krb5_principal principal,
0377 kadm5_principal_ent_t ent,
0378 long mask);
0379 kadm5_ret_t kadm5_chpass_principal(void *server_handle,
0380 krb5_principal principal,
0381 char *pass);
0382 kadm5_ret_t kadm5_chpass_principal_3(void *server_handle,
0383 krb5_principal principal,
0384 krb5_boolean keepold,
0385 int n_ks_tuple,
0386 krb5_key_salt_tuple *ks_tuple,
0387 char *pass);
0388 kadm5_ret_t kadm5_randkey_principal(void *server_handle,
0389 krb5_principal principal,
0390 krb5_keyblock **keyblocks,
0391 int *n_keys);
0392 kadm5_ret_t kadm5_randkey_principal_3(void *server_handle,
0393 krb5_principal principal,
0394 krb5_boolean keepold,
0395 int n_ks_tuple,
0396 krb5_key_salt_tuple *ks_tuple,
0397 krb5_keyblock **keyblocks,
0398 int *n_keys);
0399
0400 kadm5_ret_t kadm5_setkey_principal(void *server_handle,
0401 krb5_principal principal,
0402 krb5_keyblock *keyblocks,
0403 int n_keys);
0404
0405 kadm5_ret_t kadm5_setkey_principal_3(void *server_handle,
0406 krb5_principal principal,
0407 krb5_boolean keepold,
0408 int n_ks_tuple,
0409 krb5_key_salt_tuple *ks_tuple,
0410 krb5_keyblock *keyblocks,
0411 int n_keys);
0412
0413 kadm5_ret_t kadm5_setkey_principal_4(void *server_handle,
0414 krb5_principal principal,
0415 krb5_boolean keepold,
0416 kadm5_key_data *key_data,
0417 int n_key_data);
0418
0419 kadm5_ret_t kadm5_decrypt_key(void *server_handle,
0420 kadm5_principal_ent_t entry, krb5_int32
0421 ktype, krb5_int32 stype, krb5_int32
0422 kvno, krb5_keyblock *keyblock,
0423 krb5_keysalt *keysalt, int *kvnop);
0424
0425 kadm5_ret_t kadm5_create_policy(void *server_handle,
0426 kadm5_policy_ent_t ent,
0427 long mask);
0428 kadm5_ret_t kadm5_delete_policy(void *server_handle,
0429 kadm5_policy_t policy);
0430 kadm5_ret_t kadm5_modify_policy(void *server_handle,
0431 kadm5_policy_ent_t ent,
0432 long mask);
0433 kadm5_ret_t kadm5_get_policy(void *server_handle,
0434 kadm5_policy_t policy,
0435 kadm5_policy_ent_t ent);
0436 kadm5_ret_t kadm5_get_privs(void *server_handle,
0437 long *privs);
0438
0439 kadm5_ret_t kadm5_chpass_principal_util(void *server_handle,
0440 krb5_principal princ,
0441 char *new_pw,
0442 char **ret_pw,
0443 char *msg_ret,
0444 unsigned int msg_len);
0445
0446 kadm5_ret_t kadm5_free_principal_ent(void *server_handle,
0447 kadm5_principal_ent_t
0448 ent);
0449 kadm5_ret_t kadm5_free_policy_ent(void *server_handle,
0450 kadm5_policy_ent_t ent);
0451
0452 kadm5_ret_t kadm5_get_principals(void *server_handle,
0453 char *exp, char ***princs,
0454 int *count);
0455
0456 kadm5_ret_t kadm5_get_policies(void *server_handle,
0457 char *exp, char ***pols,
0458 int *count);
0459
0460 kadm5_ret_t kadm5_free_key_data(void *server_handle,
0461 krb5_int16 *n_key_data,
0462 krb5_key_data *key_data);
0463
0464 kadm5_ret_t kadm5_free_name_list(void *server_handle, char **names,
0465 int count);
0466
0467 krb5_error_code kadm5_init_krb5_context (krb5_context *);
0468
0469 krb5_error_code kadm5_init_iprop(void *server_handle, char **db_args);
0470
0471 kadm5_ret_t kadm5_get_principal_keys(void *server_handle,
0472 krb5_principal principal,
0473 krb5_kvno kvno,
0474 kadm5_key_data **key_data,
0475 int *n_key_data);
0476
0477 kadm5_ret_t kadm5_purgekeys(void *server_handle,
0478 krb5_principal principal,
0479 int keepkvno);
0480
0481 kadm5_ret_t kadm5_get_strings(void *server_handle,
0482 krb5_principal principal,
0483 krb5_string_attr **strings_out,
0484 int *count_out);
0485
0486 kadm5_ret_t kadm5_set_string(void *server_handle,
0487 krb5_principal principal,
0488 const char *key,
0489 const char *value);
0490
0491 kadm5_ret_t kadm5_free_strings(void *server_handle,
0492 krb5_string_attr *strings,
0493 int count);
0494
0495 kadm5_ret_t kadm5_free_kadm5_key_data(krb5_context context, int n_key_data,
0496 kadm5_key_data *key_data);
0497
0498 KADM5INT_END_DECLS
0499
0500 #endif