17c478bd9Sstevel@tonic-gate /* 246736d35Ssemery * Copyright 2007 Sun Microsystems, Inc. All rights reserved. 37c478bd9Sstevel@tonic-gate * Use is subject to license terms. 47c478bd9Sstevel@tonic-gate */ 57c478bd9Sstevel@tonic-gate 67c478bd9Sstevel@tonic-gate #ifndef __KADM5_ADMIN_H__ 77c478bd9Sstevel@tonic-gate #define __KADM5_ADMIN_H__ 87c478bd9Sstevel@tonic-gate 97c478bd9Sstevel@tonic-gate #pragma ident "%Z%%M% %I% %E% SMI" 107c478bd9Sstevel@tonic-gate 117c478bd9Sstevel@tonic-gate #ifdef __cplusplus 127c478bd9Sstevel@tonic-gate extern "C" { 137c478bd9Sstevel@tonic-gate #endif 147c478bd9Sstevel@tonic-gate 157c478bd9Sstevel@tonic-gate /* 167c478bd9Sstevel@tonic-gate * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 177c478bd9Sstevel@tonic-gate * 187c478bd9Sstevel@tonic-gate * Openvision retains the copyright to derivative works of 197c478bd9Sstevel@tonic-gate * this source code. Do *NOT* create a derivative of this 207c478bd9Sstevel@tonic-gate * source code before consulting with your legal department. 217c478bd9Sstevel@tonic-gate * Do *NOT* integrate *ANY* of this source code into another 227c478bd9Sstevel@tonic-gate * product before consulting with your legal department. 237c478bd9Sstevel@tonic-gate * 247c478bd9Sstevel@tonic-gate * For further information, read the top-level Openvision 257c478bd9Sstevel@tonic-gate * copyright which is contained in the top-level MIT Kerberos 267c478bd9Sstevel@tonic-gate * copyright. 277c478bd9Sstevel@tonic-gate * 287c478bd9Sstevel@tonic-gate * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING 297c478bd9Sstevel@tonic-gate * 307c478bd9Sstevel@tonic-gate */ 3156a424ccSmp153739 /* 3256a424ccSmp153739 * lib/kadm5/admin.h 3356a424ccSmp153739 * 3456a424ccSmp153739 * Copyright 2001 by the Massachusetts Institute of Technology. 3556a424ccSmp153739 * All Rights Reserved. 3656a424ccSmp153739 * 3756a424ccSmp153739 * Export of this software from the United States of America may 3856a424ccSmp153739 * require a specific license from the United States Government. 3956a424ccSmp153739 * It is the responsibility of any person or organization contemplating 4056a424ccSmp153739 * export to obtain such a license before exporting. 4156a424ccSmp153739 * 4256a424ccSmp153739 * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and 4356a424ccSmp153739 * distribute this software and its documentation for any purpose and 4456a424ccSmp153739 * without fee is hereby granted, provided that the above copyright 4556a424ccSmp153739 * notice appear in all copies and that both that copyright notice and 4656a424ccSmp153739 * this permission notice appear in supporting documentation, and that 4756a424ccSmp153739 * the name of M.I.T. not be used in advertising or publicity pertaining 4856a424ccSmp153739 * to distribution of the software without specific, written prior 4956a424ccSmp153739 * permission. Furthermore if you modify this software you must label 5056a424ccSmp153739 * your software as modified software and not distribute it in such a 5156a424ccSmp153739 * fashion that it might be confused with the original M.I.T. software. 5256a424ccSmp153739 * M.I.T. makes no representations about the suitability of 5356a424ccSmp153739 * this software for any purpose. It is provided "as is" without express 5456a424ccSmp153739 * or implied warranty. 5556a424ccSmp153739 * 5656a424ccSmp153739 */ 577c478bd9Sstevel@tonic-gate /* 587c478bd9Sstevel@tonic-gate * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved 597c478bd9Sstevel@tonic-gate * 60*54925bf6Swillf * $Header$ 617c478bd9Sstevel@tonic-gate */ 627c478bd9Sstevel@tonic-gate 637c478bd9Sstevel@tonic-gate #include <sys/types.h> 647c478bd9Sstevel@tonic-gate #include <rpc/types.h> 657c478bd9Sstevel@tonic-gate #include <rpc/rpc.h> 667c478bd9Sstevel@tonic-gate #include <krb5.h> 677c478bd9Sstevel@tonic-gate #include <k5-int.h> 68*54925bf6Swillf #include <krb5/kdb.h> 697c478bd9Sstevel@tonic-gate #include <com_err.h> 707c478bd9Sstevel@tonic-gate #include <kadm5/kadm_err.h> 717c478bd9Sstevel@tonic-gate #include <kadm5/chpass_util_strings.h> 727c478bd9Sstevel@tonic-gate 737c478bd9Sstevel@tonic-gate #define KADM5_ADMIN_SERVICE_P "kadmin@admin" 74*54925bf6Swillf /* 75*54925bf6Swillf * Solaris Kerberos: 76*54925bf6Swillf * The kadmin/admin principal is unused on Solaris. This principal is used 77*54925bf6Swillf * in AUTH_GSSAPI but Solaris doesn't support AUTH_GSSAPI. RPCSEC_GSS can only 78*54925bf6Swillf * be used with host-based principals. 79*54925bf6Swillf * 80*54925bf6Swillf */ 81*54925bf6Swillf /* #define KADM5_ADMIN_SERVICE "kadmin/admin" */ 827c478bd9Sstevel@tonic-gate #define KADM5_CHANGEPW_SERVICE_P "kadmin@changepw" 837c478bd9Sstevel@tonic-gate #define KADM5_CHANGEPW_SERVICE "kadmin/changepw" 847c478bd9Sstevel@tonic-gate #define KADM5_HIST_PRINCIPAL "kadmin/history" 857c478bd9Sstevel@tonic-gate #define KADM5_ADMIN_HOST_SERVICE "kadmin" 867c478bd9Sstevel@tonic-gate #define KADM5_CHANGEPW_HOST_SERVICE "changepw" 877c478bd9Sstevel@tonic-gate #define KADM5_KIPROP_HOST_SERVICE "kiprop" 887c478bd9Sstevel@tonic-gate 897c478bd9Sstevel@tonic-gate typedef krb5_principal kadm5_princ_t; 907c478bd9Sstevel@tonic-gate typedef char *kadm5_policy_t; 917c478bd9Sstevel@tonic-gate typedef long kadm5_ret_t; 927c478bd9Sstevel@tonic-gate typedef int rpc_int32; 937c478bd9Sstevel@tonic-gate typedef unsigned int rpc_u_int32; 947c478bd9Sstevel@tonic-gate 957c478bd9Sstevel@tonic-gate #define KADM5_PW_FIRST_PROMPT \ 9656a424ccSmp153739 (error_message(CHPASS_UTIL_NEW_PASSWORD_PROMPT)) 977c478bd9Sstevel@tonic-gate #define KADM5_PW_SECOND_PROMPT \ 9856a424ccSmp153739 (error_message(CHPASS_UTIL_NEW_PASSWORD_AGAIN_PROMPT)) 997c478bd9Sstevel@tonic-gate 1007c478bd9Sstevel@tonic-gate /* 10156a424ccSmp153739 * Successful return code 1027c478bd9Sstevel@tonic-gate */ 1037c478bd9Sstevel@tonic-gate #define KADM5_OK 0 1047c478bd9Sstevel@tonic-gate 1057c478bd9Sstevel@tonic-gate /* 1067c478bd9Sstevel@tonic-gate * Field masks 1077c478bd9Sstevel@tonic-gate */ 1087c478bd9Sstevel@tonic-gate 1097c478bd9Sstevel@tonic-gate /* kadm5_principal_ent_t */ 1107c478bd9Sstevel@tonic-gate #define KADM5_PRINCIPAL 0x000001 1117c478bd9Sstevel@tonic-gate #define KADM5_PRINC_EXPIRE_TIME 0x000002 1127c478bd9Sstevel@tonic-gate #define KADM5_PW_EXPIRATION 0x000004 1137c478bd9Sstevel@tonic-gate #define KADM5_LAST_PWD_CHANGE 0x000008 1147c478bd9Sstevel@tonic-gate #define KADM5_ATTRIBUTES 0x000010 1157c478bd9Sstevel@tonic-gate #define KADM5_MAX_LIFE 0x000020 1167c478bd9Sstevel@tonic-gate #define KADM5_MOD_TIME 0x000040 1177c478bd9Sstevel@tonic-gate #define KADM5_MOD_NAME 0x000080 1187c478bd9Sstevel@tonic-gate #define KADM5_KVNO 0x000100 1197c478bd9Sstevel@tonic-gate #define KADM5_MKVNO 0x000200 1207c478bd9Sstevel@tonic-gate #define KADM5_AUX_ATTRIBUTES 0x000400 1217c478bd9Sstevel@tonic-gate #define KADM5_POLICY 0x000800 1227c478bd9Sstevel@tonic-gate #define KADM5_POLICY_CLR 0x001000 1237c478bd9Sstevel@tonic-gate /* version 2 masks */ 1247c478bd9Sstevel@tonic-gate #define KADM5_MAX_RLIFE 0x002000 1257c478bd9Sstevel@tonic-gate #define KADM5_LAST_SUCCESS 0x004000 1267c478bd9Sstevel@tonic-gate #define KADM5_LAST_FAILED 0x008000 1277c478bd9Sstevel@tonic-gate #define KADM5_FAIL_AUTH_COUNT 0x010000 1287c478bd9Sstevel@tonic-gate #define KADM5_KEY_DATA 0x020000 1297c478bd9Sstevel@tonic-gate #define KADM5_TL_DATA 0x040000 130*54925bf6Swillf #ifdef notyet /* Novell */ 131*54925bf6Swillf #define KADM5_CPW_FUNCTION 0x080000 132*54925bf6Swillf #define KADM5_RANDKEY_USED 0x100000 133*54925bf6Swillf #endif 134*54925bf6Swillf #define KADM5_LOAD 0x200000 135*54925bf6Swillf 1367c478bd9Sstevel@tonic-gate /* all but KEY_DATA and TL_DATA */ 1377c478bd9Sstevel@tonic-gate #define KADM5_PRINCIPAL_NORMAL_MASK 0x01ffff 1387c478bd9Sstevel@tonic-gate 139*54925bf6Swillf 1407c478bd9Sstevel@tonic-gate /* kadm5_policy_ent_t */ 1417c478bd9Sstevel@tonic-gate #define KADM5_PW_MAX_LIFE 0x004000 1427c478bd9Sstevel@tonic-gate #define KADM5_PW_MIN_LIFE 0x008000 1437c478bd9Sstevel@tonic-gate #define KADM5_PW_MIN_LENGTH 0x010000 1447c478bd9Sstevel@tonic-gate #define KADM5_PW_MIN_CLASSES 0x020000 1457c478bd9Sstevel@tonic-gate #define KADM5_PW_HISTORY_NUM 0x040000 1467c478bd9Sstevel@tonic-gate #define KADM5_REF_COUNT 0x080000 1477c478bd9Sstevel@tonic-gate 1487c478bd9Sstevel@tonic-gate /* kadm5_config_params */ 1497c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_REALM 0x0000001 1507c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_DBNAME 0x0000002 1517c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_MKEY_NAME 0x0000004 1527c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_MAX_LIFE 0x0000008 1537c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_MAX_RLIFE 0x0000010 1547c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_EXPIRATION 0x0000020 1557c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_FLAGS 0x0000040 1567c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ADMIN_KEYTAB 0x0000080 1577c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_STASH_FILE 0x0000100 1587c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ENCTYPE 0x0000200 1597c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ADBNAME 0x0000400 1607c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ADB_LOCKFILE 0x0000800 1617c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_PROFILE 0x0001000 1627c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ACL_FILE 0x0002000 1637c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_KADMIND_PORT 0x0004000 1647c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ENCTYPES 0x0008000 1657c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ADMIN_SERVER 0x0010000 1667c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_DICT_FILE 0x0020000 1677c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_MKEY_FROM_KBD 0x0040000 1687c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_KPASSWD_PORT 0x0080000 1697c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_KPASSWD_SERVER 0x0100000 1707c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_KPASSWD_PROTOCOL 0x0200000 1717c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_IPROP_ENABLED 0x0400000 1727c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ULOG_SIZE 0x0800000 1737c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_POLL_TIME 0x1000000 1747c478bd9Sstevel@tonic-gate 1757c478bd9Sstevel@tonic-gate /* password change constants */ 1767c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_SUCCESS 0 1777c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_MALFORMED 1 1787c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_HARDERROR 2 1797c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_AUTHERROR 3 1807c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_SOFTERROR 4 1817c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_ACCESSDENIED 5 1827c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_BAD_VERSION 6 1837c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_INITIAL_FLAG_NEEDED 7 1847c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_POLICY_REJECT 8 1857c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_BAD_PRINCIPAL 9 1867c478bd9Sstevel@tonic-gate #define KRB5_KPASSWD_ETYPE_NOSUPP 10 1877c478bd9Sstevel@tonic-gate 1887c478bd9Sstevel@tonic-gate /* 1897c478bd9Sstevel@tonic-gate * permission bits 1907c478bd9Sstevel@tonic-gate */ 1917c478bd9Sstevel@tonic-gate #define KADM5_PRIV_GET 0x01 1927c478bd9Sstevel@tonic-gate #define KADM5_PRIV_ADD 0x02 1937c478bd9Sstevel@tonic-gate #define KADM5_PRIV_MODIFY 0x04 1947c478bd9Sstevel@tonic-gate #define KADM5_PRIV_DELETE 0x08 1957c478bd9Sstevel@tonic-gate 1967c478bd9Sstevel@tonic-gate /* 1977c478bd9Sstevel@tonic-gate * API versioning constants 1987c478bd9Sstevel@tonic-gate */ 1997c478bd9Sstevel@tonic-gate #define KADM5_MASK_BITS 0xffffff00 2007c478bd9Sstevel@tonic-gate 2017c478bd9Sstevel@tonic-gate #define KADM5_STRUCT_VERSION_MASK 0x12345600 2027c478bd9Sstevel@tonic-gate #define KADM5_STRUCT_VERSION_1 (KADM5_STRUCT_VERSION_MASK|0x01) 2037c478bd9Sstevel@tonic-gate #define KADM5_STRUCT_VERSION KADM5_STRUCT_VERSION_1 2047c478bd9Sstevel@tonic-gate 2057c478bd9Sstevel@tonic-gate #define KADM5_API_VERSION_MASK 0x12345700 2067c478bd9Sstevel@tonic-gate #define KADM5_API_VERSION_1 (KADM5_API_VERSION_MASK|0x01) 2077c478bd9Sstevel@tonic-gate #define KADM5_API_VERSION_2 (KADM5_API_VERSION_MASK|0x02) 2087c478bd9Sstevel@tonic-gate 2097c478bd9Sstevel@tonic-gate #ifdef KRB5_DNS_LOOKUP 2107c478bd9Sstevel@tonic-gate /* 2117c478bd9Sstevel@tonic-gate * Name length constants for DNS lookups 2127c478bd9Sstevel@tonic-gate */ 2137c478bd9Sstevel@tonic-gate #define MAX_HOST_NAMELEN 256 2147c478bd9Sstevel@tonic-gate #define MAX_DNS_NAMELEN (15*(MAX_HOST_NAMELEN + 1)+1) 2157c478bd9Sstevel@tonic-gate #endif /* KRB5_DNS_LOOKUP */ 2167c478bd9Sstevel@tonic-gate 2177c478bd9Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v2 { 2187c478bd9Sstevel@tonic-gate krb5_principal principal; 2197c478bd9Sstevel@tonic-gate krb5_timestamp princ_expire_time; 2207c478bd9Sstevel@tonic-gate krb5_timestamp last_pwd_change; 2217c478bd9Sstevel@tonic-gate krb5_timestamp pw_expiration; 2227c478bd9Sstevel@tonic-gate krb5_deltat max_life; 2237c478bd9Sstevel@tonic-gate krb5_principal mod_name; 2247c478bd9Sstevel@tonic-gate krb5_timestamp mod_date; 2257c478bd9Sstevel@tonic-gate krb5_flags attributes; 2267c478bd9Sstevel@tonic-gate krb5_kvno kvno; 2277c478bd9Sstevel@tonic-gate krb5_kvno mkvno; 2287c478bd9Sstevel@tonic-gate char *policy; 2297c478bd9Sstevel@tonic-gate long aux_attributes; 2307c478bd9Sstevel@tonic-gate 2317c478bd9Sstevel@tonic-gate /* version 2 fields */ 2327c478bd9Sstevel@tonic-gate krb5_deltat max_renewable_life; 2337c478bd9Sstevel@tonic-gate krb5_timestamp last_success; 2347c478bd9Sstevel@tonic-gate krb5_timestamp last_failed; 2357c478bd9Sstevel@tonic-gate krb5_kvno fail_auth_count; 2367c478bd9Sstevel@tonic-gate krb5_int16 n_key_data; 2377c478bd9Sstevel@tonic-gate krb5_int16 n_tl_data; 2387c478bd9Sstevel@tonic-gate krb5_tl_data *tl_data; 2397c478bd9Sstevel@tonic-gate krb5_key_data *key_data; 2407c478bd9Sstevel@tonic-gate } kadm5_principal_ent_rec_v2, *kadm5_principal_ent_t_v2; 2417c478bd9Sstevel@tonic-gate 2427c478bd9Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v1 { 2437c478bd9Sstevel@tonic-gate krb5_principal principal; 2447c478bd9Sstevel@tonic-gate krb5_timestamp princ_expire_time; 2457c478bd9Sstevel@tonic-gate krb5_timestamp last_pwd_change; 2467c478bd9Sstevel@tonic-gate krb5_timestamp pw_expiration; 2477c478bd9Sstevel@tonic-gate krb5_deltat max_life; 2487c478bd9Sstevel@tonic-gate krb5_principal mod_name; 2497c478bd9Sstevel@tonic-gate krb5_timestamp mod_date; 2507c478bd9Sstevel@tonic-gate krb5_flags attributes; 2517c478bd9Sstevel@tonic-gate krb5_kvno kvno; 2527c478bd9Sstevel@tonic-gate krb5_kvno mkvno; 2537c478bd9Sstevel@tonic-gate char *policy; 2547c478bd9Sstevel@tonic-gate long aux_attributes; 2557c478bd9Sstevel@tonic-gate } kadm5_principal_ent_rec_v1, *kadm5_principal_ent_t_v1; 2567c478bd9Sstevel@tonic-gate 25756a424ccSmp153739 #if USE_KADM5_API_VERSION == 1 25856a424ccSmp153739 typedef struct _kadm5_principal_ent_t_v1 25956a424ccSmp153739 kadm5_principal_ent_rec, *kadm5_principal_ent_t; 26056a424ccSmp153739 #else 2617c478bd9Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v2 2627c478bd9Sstevel@tonic-gate kadm5_principal_ent_rec, *kadm5_principal_ent_t; 26356a424ccSmp153739 #endif 2647c478bd9Sstevel@tonic-gate 2657c478bd9Sstevel@tonic-gate typedef struct _kadm5_policy_ent_t { 2667c478bd9Sstevel@tonic-gate char *policy; 2677c478bd9Sstevel@tonic-gate long pw_min_life; 2687c478bd9Sstevel@tonic-gate long pw_max_life; 2697c478bd9Sstevel@tonic-gate long pw_min_length; 2707c478bd9Sstevel@tonic-gate long pw_min_classes; 2717c478bd9Sstevel@tonic-gate long pw_history_num; 2727c478bd9Sstevel@tonic-gate long policy_refcnt; 2737c478bd9Sstevel@tonic-gate } kadm5_policy_ent_rec, *kadm5_policy_ent_t; 2747c478bd9Sstevel@tonic-gate 275*54925bf6Swillf #if 0 /************** Begin IFDEF'ed OUT *******************************/ 2767c478bd9Sstevel@tonic-gate typedef struct __krb5_key_salt_tuple { 2777c478bd9Sstevel@tonic-gate krb5_enctype ks_enctype; 2787c478bd9Sstevel@tonic-gate krb5_int32 ks_salttype; 2797c478bd9Sstevel@tonic-gate } krb5_key_salt_tuple; 280*54925bf6Swillf #endif /**************** END IFDEF'ed OUT *******************************/ 2817c478bd9Sstevel@tonic-gate 2827c478bd9Sstevel@tonic-gate /* 2837c478bd9Sstevel@tonic-gate * New types to indicate which protocol to use when sending 2847c478bd9Sstevel@tonic-gate * password change requests 2857c478bd9Sstevel@tonic-gate */ 2867c478bd9Sstevel@tonic-gate typedef enum { 2877c478bd9Sstevel@tonic-gate KRB5_CHGPWD_RPCSEC, 2887c478bd9Sstevel@tonic-gate KRB5_CHGPWD_CHANGEPW_V2 2897c478bd9Sstevel@tonic-gate } krb5_chgpwd_prot; 2907c478bd9Sstevel@tonic-gate 2917c478bd9Sstevel@tonic-gate /* 2927c478bd9Sstevel@tonic-gate * Data structure returned by kadm5_get_config_params() 2937c478bd9Sstevel@tonic-gate */ 2947c478bd9Sstevel@tonic-gate typedef struct _kadm5_config_params { 2957c478bd9Sstevel@tonic-gate long mask; 2967c478bd9Sstevel@tonic-gate char * realm; 2977c478bd9Sstevel@tonic-gate char * profile; 2987c478bd9Sstevel@tonic-gate int kadmind_port; 29956a424ccSmp153739 int kpasswd_port; 30056a424ccSmp153739 3017c478bd9Sstevel@tonic-gate char * admin_server; 302*54925bf6Swillf #ifdef notyet /* Novell */ /* ABI change? */ 303*54925bf6Swillf char * kpasswd_server; 304*54925bf6Swillf #endif 30556a424ccSmp153739 3067c478bd9Sstevel@tonic-gate char * dbname; 3077c478bd9Sstevel@tonic-gate char * admin_dbname; 3087c478bd9Sstevel@tonic-gate char * admin_lockfile; 3097c478bd9Sstevel@tonic-gate char * admin_keytab; 3107c478bd9Sstevel@tonic-gate char * acl_file; 3117c478bd9Sstevel@tonic-gate char * dict_file; 31256a424ccSmp153739 3137c478bd9Sstevel@tonic-gate int mkey_from_kbd; 3147c478bd9Sstevel@tonic-gate char * stash_file; 3157c478bd9Sstevel@tonic-gate char * mkey_name; 3167c478bd9Sstevel@tonic-gate krb5_enctype enctype; 3177c478bd9Sstevel@tonic-gate krb5_deltat max_life; 3187c478bd9Sstevel@tonic-gate krb5_deltat max_rlife; 3197c478bd9Sstevel@tonic-gate krb5_timestamp expiration; 3207c478bd9Sstevel@tonic-gate krb5_flags flags; 3217c478bd9Sstevel@tonic-gate krb5_key_salt_tuple *keysalts; 3227c478bd9Sstevel@tonic-gate krb5_int32 num_keysalts; 3237c478bd9Sstevel@tonic-gate char *kpasswd_server; 32456a424ccSmp153739 3257c478bd9Sstevel@tonic-gate krb5_chgpwd_prot kpasswd_protocol; 3267c478bd9Sstevel@tonic-gate bool_t iprop_enabled; 3277c478bd9Sstevel@tonic-gate int iprop_ulogsize; 3287c478bd9Sstevel@tonic-gate char *iprop_polltime; 3297c478bd9Sstevel@tonic-gate } kadm5_config_params; 3307c478bd9Sstevel@tonic-gate 3317c478bd9Sstevel@tonic-gate /*********************************************************************** 3327c478bd9Sstevel@tonic-gate * This is the old krb5_realm_read_params, which I mutated into 3337c478bd9Sstevel@tonic-gate * kadm5_get_config_params but which old code (kdb5_* and krb5kdc) 3347c478bd9Sstevel@tonic-gate * still uses. 3357c478bd9Sstevel@tonic-gate ***********************************************************************/ 3367c478bd9Sstevel@tonic-gate 3377c478bd9Sstevel@tonic-gate /* 3387c478bd9Sstevel@tonic-gate * Data structure returned by krb5_read_realm_params() 3397c478bd9Sstevel@tonic-gate */ 3407c478bd9Sstevel@tonic-gate typedef struct __krb5_realm_params { 3417c478bd9Sstevel@tonic-gate char * realm_profile; 3427c478bd9Sstevel@tonic-gate char * realm_dbname; 3437c478bd9Sstevel@tonic-gate char * realm_mkey_name; 3447c478bd9Sstevel@tonic-gate char * realm_stash_file; 3457c478bd9Sstevel@tonic-gate char * realm_kdc_ports; 3467c478bd9Sstevel@tonic-gate char * realm_kdc_tcp_ports; 3477c478bd9Sstevel@tonic-gate char * realm_acl_file; 3487c478bd9Sstevel@tonic-gate krb5_int32 realm_kadmind_port; 3497c478bd9Sstevel@tonic-gate krb5_enctype realm_enctype; 3507c478bd9Sstevel@tonic-gate krb5_deltat realm_max_life; 3517c478bd9Sstevel@tonic-gate krb5_deltat realm_max_rlife; 3527c478bd9Sstevel@tonic-gate krb5_timestamp realm_expiration; 3537c478bd9Sstevel@tonic-gate krb5_flags realm_flags; 3547c478bd9Sstevel@tonic-gate krb5_key_salt_tuple *realm_keysalts; 35556a424ccSmp153739 unsigned int realm_reject_bad_transit:1; 3567c478bd9Sstevel@tonic-gate unsigned int realm_kadmind_port_valid:1; 3577c478bd9Sstevel@tonic-gate unsigned int realm_enctype_valid:1; 3587c478bd9Sstevel@tonic-gate unsigned int realm_max_life_valid:1; 3597c478bd9Sstevel@tonic-gate unsigned int realm_max_rlife_valid:1; 3607c478bd9Sstevel@tonic-gate unsigned int realm_expiration_valid:1; 3617c478bd9Sstevel@tonic-gate unsigned int realm_flags_valid:1; 36256a424ccSmp153739 unsigned int realm_reject_bad_transit_valid:1; 3637c478bd9Sstevel@tonic-gate krb5_int32 realm_num_keysalts; 3647c478bd9Sstevel@tonic-gate } krb5_realm_params; 3657c478bd9Sstevel@tonic-gate 3667c478bd9Sstevel@tonic-gate /* 3677c478bd9Sstevel@tonic-gate * functions 3687c478bd9Sstevel@tonic-gate */ 3697c478bd9Sstevel@tonic-gate 3707c478bd9Sstevel@tonic-gate kadm5_ret_t 3717c478bd9Sstevel@tonic-gate kadm5_get_adm_host_srv_name(krb5_context context, 3727c478bd9Sstevel@tonic-gate const char *realm, char **host_service_name); 3737c478bd9Sstevel@tonic-gate 3747c478bd9Sstevel@tonic-gate kadm5_ret_t 3757c478bd9Sstevel@tonic-gate kadm5_get_cpw_host_srv_name(krb5_context context, 3767c478bd9Sstevel@tonic-gate const char *realm, char **host_service_name); 3777c478bd9Sstevel@tonic-gate 37856a424ccSmp153739 #if USE_KADM5_API_VERSION > 1 3797c478bd9Sstevel@tonic-gate krb5_error_code kadm5_get_config_params(krb5_context context, 3807c478bd9Sstevel@tonic-gate char *kdcprofile, char *kdcenv, 3817c478bd9Sstevel@tonic-gate kadm5_config_params *params_in, 3827c478bd9Sstevel@tonic-gate kadm5_config_params *params_out); 3837c478bd9Sstevel@tonic-gate 3847c478bd9Sstevel@tonic-gate krb5_error_code kadm5_free_config_params(krb5_context context, 3857c478bd9Sstevel@tonic-gate kadm5_config_params *params); 3867c478bd9Sstevel@tonic-gate 3877c478bd9Sstevel@tonic-gate krb5_error_code kadm5_free_realm_params(krb5_context kcontext, 3887c478bd9Sstevel@tonic-gate kadm5_config_params *params); 3897c478bd9Sstevel@tonic-gate 39056a424ccSmp153739 krb5_error_code kadm5_get_admin_service_name(krb5_context, char *, 39156a424ccSmp153739 char *, size_t); 39256a424ccSmp153739 #endif 39356a424ccSmp153739 3947c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_init(char *client_name, char *pass, 3957c478bd9Sstevel@tonic-gate char *service_name, 39656a424ccSmp153739 #if USE_KADM5_API_VERSION == 1 39756a424ccSmp153739 char *realm, 39856a424ccSmp153739 #else 3997c478bd9Sstevel@tonic-gate kadm5_config_params *params, 40056a424ccSmp153739 #endif 4017c478bd9Sstevel@tonic-gate krb5_ui_4 struct_version, 4027c478bd9Sstevel@tonic-gate krb5_ui_4 api_version, 403*54925bf6Swillf char **db_args, 4047c478bd9Sstevel@tonic-gate void **server_handle); 405*54925bf6Swillf 4067c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_init_with_password(char *client_name, 4077c478bd9Sstevel@tonic-gate char *pass, 4087c478bd9Sstevel@tonic-gate char *service_name, 40956a424ccSmp153739 #if USE_KADM5_API_VERSION == 1 41056a424ccSmp153739 char *realm, 41156a424ccSmp153739 #else 4127c478bd9Sstevel@tonic-gate kadm5_config_params *params, 41356a424ccSmp153739 #endif 4147c478bd9Sstevel@tonic-gate krb5_ui_4 struct_version, 4157c478bd9Sstevel@tonic-gate krb5_ui_4 api_version, 416*54925bf6Swillf char **db_args, 4177c478bd9Sstevel@tonic-gate void **server_handle); 4187c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_init_with_skey(char *client_name, 4197c478bd9Sstevel@tonic-gate char *keytab, 4207c478bd9Sstevel@tonic-gate char *service_name, 42156a424ccSmp153739 #if USE_KADM5_API_VERSION == 1 42256a424ccSmp153739 char *realm, 42356a424ccSmp153739 #else 4247c478bd9Sstevel@tonic-gate kadm5_config_params *params, 42556a424ccSmp153739 #endif 4267c478bd9Sstevel@tonic-gate krb5_ui_4 struct_version, 4277c478bd9Sstevel@tonic-gate krb5_ui_4 api_version, 428*54925bf6Swillf char **db_args, 4297c478bd9Sstevel@tonic-gate void **server_handle); 43056a424ccSmp153739 #if USE_KADM5_API_VERSION > 1 4317c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_init_with_creds(char *client_name, 4327c478bd9Sstevel@tonic-gate krb5_ccache cc, 4337c478bd9Sstevel@tonic-gate char *service_name, 4347c478bd9Sstevel@tonic-gate kadm5_config_params *params, 4357c478bd9Sstevel@tonic-gate krb5_ui_4 struct_version, 4367c478bd9Sstevel@tonic-gate krb5_ui_4 api_version, 437*54925bf6Swillf char **db_args, 4387c478bd9Sstevel@tonic-gate void **server_handle); 43956a424ccSmp153739 #endif 44056a424ccSmp153739 kadm5_ret_t kadm5_lock(void *server_handle); 44156a424ccSmp153739 kadm5_ret_t kadm5_unlock(void *server_handle); 4427c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_flush(void *server_handle); 4437c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_destroy(void *server_handle); 4447c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_create_principal(void *server_handle, 4457c478bd9Sstevel@tonic-gate kadm5_principal_ent_t ent, 4467c478bd9Sstevel@tonic-gate long mask, char *pass); 4477c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_create_principal_3(void *server_handle, 4487c478bd9Sstevel@tonic-gate kadm5_principal_ent_t ent, 4497c478bd9Sstevel@tonic-gate long mask, 4507c478bd9Sstevel@tonic-gate int n_ks_tuple, 4517c478bd9Sstevel@tonic-gate krb5_key_salt_tuple *ks_tuple, 4527c478bd9Sstevel@tonic-gate char *pass); 4537c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_delete_principal(void *server_handle, 4547c478bd9Sstevel@tonic-gate krb5_principal principal); 4557c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_modify_principal(void *server_handle, 4567c478bd9Sstevel@tonic-gate kadm5_principal_ent_t ent, 4577c478bd9Sstevel@tonic-gate long mask); 4587c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_rename_principal(void *server_handle, 4597c478bd9Sstevel@tonic-gate krb5_principal,krb5_principal); 46056a424ccSmp153739 #if USE_KADM5_API_VERSION == 1 46156a424ccSmp153739 kadm5_ret_t kadm5_get_principal(void *server_handle, 46256a424ccSmp153739 krb5_principal principal, 46356a424ccSmp153739 kadm5_principal_ent_t *ent); 46456a424ccSmp153739 #else 4657c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_get_principal(void *server_handle, 4667c478bd9Sstevel@tonic-gate krb5_principal principal, 4677c478bd9Sstevel@tonic-gate kadm5_principal_ent_t ent, 4687c478bd9Sstevel@tonic-gate long mask); 46956a424ccSmp153739 #endif 4707c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_chpass_principal(void *server_handle, 4717c478bd9Sstevel@tonic-gate krb5_principal principal, 4727c478bd9Sstevel@tonic-gate char *pass); 4737c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_chpass_principal_3(void *server_handle, 4747c478bd9Sstevel@tonic-gate krb5_principal principal, 4757c478bd9Sstevel@tonic-gate krb5_boolean keepold, 4767c478bd9Sstevel@tonic-gate int n_ks_tuple, 4777c478bd9Sstevel@tonic-gate krb5_key_salt_tuple *ks_tuple, 4787c478bd9Sstevel@tonic-gate char *pass); 47956a424ccSmp153739 #if USE_KADM5_API_VERSION == 1 48056a424ccSmp153739 kadm5_ret_t kadm5_randkey_principal(void *server_handle, 48156a424ccSmp153739 krb5_principal principal, 48256a424ccSmp153739 krb5_keyblock **keyblock); 48356a424ccSmp153739 #else 4847c478bd9Sstevel@tonic-gate 4857c478bd9Sstevel@tonic-gate /* 4867c478bd9Sstevel@tonic-gate * Solaris Kerberos: 4877c478bd9Sstevel@tonic-gate * this routine is only implemented in the client library. 4887c478bd9Sstevel@tonic-gate */ 4897c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_randkey_principal_old(void *server_handle, 4907c478bd9Sstevel@tonic-gate krb5_principal principal, 4917c478bd9Sstevel@tonic-gate krb5_keyblock **keyblocks, 4927c478bd9Sstevel@tonic-gate int *n_keys); 4937c478bd9Sstevel@tonic-gate 4947c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_randkey_principal(void *server_handle, 4957c478bd9Sstevel@tonic-gate krb5_principal principal, 4967c478bd9Sstevel@tonic-gate krb5_keyblock **keyblocks, 4977c478bd9Sstevel@tonic-gate int *n_keys); 4987c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_randkey_principal_3(void *server_handle, 4997c478bd9Sstevel@tonic-gate krb5_principal principal, 5007c478bd9Sstevel@tonic-gate krb5_boolean keepold, 5017c478bd9Sstevel@tonic-gate int n_ks_tuple, 5027c478bd9Sstevel@tonic-gate krb5_key_salt_tuple *ks_tuple, 5037c478bd9Sstevel@tonic-gate krb5_keyblock **keyblocks, 5047c478bd9Sstevel@tonic-gate int *n_keys); 50556a424ccSmp153739 #endif 5067c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_setv4key_principal(void *server_handle, 5077c478bd9Sstevel@tonic-gate krb5_principal principal, 5087c478bd9Sstevel@tonic-gate krb5_keyblock *keyblock); 5097c478bd9Sstevel@tonic-gate 5107c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_setkey_principal(void *server_handle, 5117c478bd9Sstevel@tonic-gate krb5_principal principal, 5127c478bd9Sstevel@tonic-gate krb5_keyblock *keyblocks, 5137c478bd9Sstevel@tonic-gate int n_keys); 5147c478bd9Sstevel@tonic-gate 5157c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_setkey_principal_3(void *server_handle, 5167c478bd9Sstevel@tonic-gate krb5_principal principal, 5177c478bd9Sstevel@tonic-gate krb5_boolean keepold, 5187c478bd9Sstevel@tonic-gate int n_ks_tuple, 5197c478bd9Sstevel@tonic-gate krb5_key_salt_tuple *ks_tuple, 5207c478bd9Sstevel@tonic-gate krb5_keyblock *keyblocks, 5217c478bd9Sstevel@tonic-gate int n_keys); 5227c478bd9Sstevel@tonic-gate 52356a424ccSmp153739 kadm5_ret_t kadm5_decrypt_key(void *server_handle, 52456a424ccSmp153739 kadm5_principal_ent_t entry, krb5_int32 52556a424ccSmp153739 ktype, krb5_int32 stype, krb5_int32 52656a424ccSmp153739 kvno, krb5_keyblock *keyblock, 52756a424ccSmp153739 krb5_keysalt *keysalt, int *kvnop); 52856a424ccSmp153739 5297c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_create_policy(void *server_handle, 5307c478bd9Sstevel@tonic-gate kadm5_policy_ent_t ent, 5317c478bd9Sstevel@tonic-gate long mask); 5327c478bd9Sstevel@tonic-gate /* 5337c478bd9Sstevel@tonic-gate * kadm5_create_policy_internal is not part of the supported, 5347c478bd9Sstevel@tonic-gate * exposed API. It is available only in the server library, and you 5357c478bd9Sstevel@tonic-gate * shouldn't use it unless you know why it's there and how it's 5367c478bd9Sstevel@tonic-gate * different from kadm5_create_policy. 5377c478bd9Sstevel@tonic-gate */ 5387c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_create_policy_internal(void *server_handle, 5397c478bd9Sstevel@tonic-gate kadm5_policy_ent_t 5407c478bd9Sstevel@tonic-gate entry, long mask); 5417c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_delete_policy(void *server_handle, 5427c478bd9Sstevel@tonic-gate kadm5_policy_t policy); 5437c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_modify_policy(void *server_handle, 5447c478bd9Sstevel@tonic-gate kadm5_policy_ent_t ent, 5457c478bd9Sstevel@tonic-gate long mask); 5467c478bd9Sstevel@tonic-gate /* 5477c478bd9Sstevel@tonic-gate * kadm5_modify_policy_internal is not part of the supported, 5487c478bd9Sstevel@tonic-gate * exposed API. It is available only in the server library, and you 5497c478bd9Sstevel@tonic-gate * shouldn't use it unless you know why it's there and how it's 5507c478bd9Sstevel@tonic-gate * different from kadm5_modify_policy. 5517c478bd9Sstevel@tonic-gate */ 5527c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_modify_policy_internal(void *server_handle, 5537c478bd9Sstevel@tonic-gate kadm5_policy_ent_t 5547c478bd9Sstevel@tonic-gate entry, long mask); 55556a424ccSmp153739 #if USE_KADM5_API_VERSION == 1 55656a424ccSmp153739 kadm5_ret_t kadm5_get_policy(void *server_handle, 55756a424ccSmp153739 kadm5_policy_t policy, 55856a424ccSmp153739 kadm5_policy_ent_t *ent); 55956a424ccSmp153739 #else 5607c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_get_policy(void *server_handle, 5617c478bd9Sstevel@tonic-gate kadm5_policy_t policy, 5627c478bd9Sstevel@tonic-gate kadm5_policy_ent_t ent); 56356a424ccSmp153739 #endif 5647c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_get_privs(void *server_handle, 5657c478bd9Sstevel@tonic-gate long *privs); 5667c478bd9Sstevel@tonic-gate 5677c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_chpass_principal_util(void *server_handle, 5687c478bd9Sstevel@tonic-gate krb5_principal princ, 5697c478bd9Sstevel@tonic-gate char *new_pw, 5707c478bd9Sstevel@tonic-gate char **ret_pw, 5717c478bd9Sstevel@tonic-gate char *msg_ret, 57256a424ccSmp153739 unsigned int msg_len); 5737c478bd9Sstevel@tonic-gate 5747c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_free_principal_ent(void *server_handle, 5757c478bd9Sstevel@tonic-gate kadm5_principal_ent_t 5767c478bd9Sstevel@tonic-gate ent); 5777c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_free_policy_ent(void *server_handle, 5787c478bd9Sstevel@tonic-gate kadm5_policy_ent_t ent); 5797c478bd9Sstevel@tonic-gate 5807c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_get_principals(void *server_handle, 5817c478bd9Sstevel@tonic-gate char *exp, char ***princs, 5827c478bd9Sstevel@tonic-gate int *count); 5837c478bd9Sstevel@tonic-gate 5847c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_get_policies(void *server_handle, 5857c478bd9Sstevel@tonic-gate char *exp, char ***pols, 5867c478bd9Sstevel@tonic-gate int *count); 5877c478bd9Sstevel@tonic-gate 58856a424ccSmp153739 #if USE_KADM5_API_VERSION > 1 5897c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_free_key_data(void *server_handle, 5907c478bd9Sstevel@tonic-gate krb5_int16 *n_key_data, 5917c478bd9Sstevel@tonic-gate krb5_key_data *key_data); 59256a424ccSmp153739 #endif 5937c478bd9Sstevel@tonic-gate 59456a424ccSmp153739 kadm5_ret_t kadm5_free_name_list(void *server_handle, char **names, 59556a424ccSmp153739 int count); 59656a424ccSmp153739 597*54925bf6Swillf krb5_error_code kadm5_init_krb5_context (krb5_context *); 598*54925bf6Swillf 59956a424ccSmp153739 #if USE_KADM5_API_VERSION == 1 60056a424ccSmp153739 /* 60156a424ccSmp153739 * OVSEC_KADM_API_VERSION_1 should be, if possible, compile-time 60256a424ccSmp153739 * compatible with KADM5_API_VERSION_2. Basically, this means we have 60356a424ccSmp153739 * to continue to provide all the old ovsec_kadm function and symbol 60456a424ccSmp153739 * names. 60556a424ccSmp153739 */ 60656a424ccSmp153739 60756a424ccSmp153739 #define OVSEC_KADM_ACLFILE "/krb5/ovsec_adm.acl" 60856a424ccSmp153739 #define OVSEC_KADM_WORDFILE "/krb5/ovsec_adm.dict" 60956a424ccSmp153739 61056a424ccSmp153739 #define OVSEC_KADM_ADMIN_SERVICE "ovsec_adm/admin" 61156a424ccSmp153739 #define OVSEC_KADM_CHANGEPW_SERVICE "ovsec_adm/changepw" 61256a424ccSmp153739 #define OVSEC_KADM_HIST_PRINCIPAL "ovsec_adm/history" 61356a424ccSmp153739 61456a424ccSmp153739 typedef krb5_principal ovsec_kadm_princ_t; 61556a424ccSmp153739 typedef krb5_keyblock ovsec_kadm_keyblock; 61656a424ccSmp153739 typedef char *ovsec_kadm_policy_t; 61756a424ccSmp153739 typedef long ovsec_kadm_ret_t; 61856a424ccSmp153739 61956a424ccSmp153739 enum ovsec_kadm_salttype { OVSEC_KADM_SALT_V4, OVSEC_KADM_SALT_NORMAL }; 62056a424ccSmp153739 enum ovsec_kadm_saltmod { OVSEC_KADM_MOD_KEEP, OVSEC_KADM_MOD_V4, OVSEC_KADM_MOD_NORMAL }; 62156a424ccSmp153739 62256a424ccSmp153739 #define OVSEC_KADM_PW_FIRST_PROMPT \ 62356a424ccSmp153739 ((char *) error_message(CHPASS_UTIL_NEW_PASSWORD_PROMPT)) 62456a424ccSmp153739 #define OVSEC_KADM_PW_SECOND_PROMPT \ 62556a424ccSmp153739 ((char *) error_message(CHPASS_UTIL_NEW_PASSWORD_AGAIN_PROMPT)) 62656a424ccSmp153739 62756a424ccSmp153739 /* 62856a424ccSmp153739 * Successful return code 62956a424ccSmp153739 */ 63056a424ccSmp153739 #define OVSEC_KADM_OK 0 63156a424ccSmp153739 63256a424ccSmp153739 /* 63356a424ccSmp153739 * Create/Modify masks 63456a424ccSmp153739 */ 63556a424ccSmp153739 /* principal */ 63656a424ccSmp153739 #define OVSEC_KADM_PRINCIPAL 0x000001 63756a424ccSmp153739 #define OVSEC_KADM_PRINC_EXPIRE_TIME 0x000002 63856a424ccSmp153739 #define OVSEC_KADM_PW_EXPIRATION 0x000004 63956a424ccSmp153739 #define OVSEC_KADM_LAST_PWD_CHANGE 0x000008 64056a424ccSmp153739 #define OVSEC_KADM_ATTRIBUTES 0x000010 64156a424ccSmp153739 #define OVSEC_KADM_MAX_LIFE 0x000020 64256a424ccSmp153739 #define OVSEC_KADM_MOD_TIME 0x000040 64356a424ccSmp153739 #define OVSEC_KADM_MOD_NAME 0x000080 64456a424ccSmp153739 #define OVSEC_KADM_KVNO 0x000100 64556a424ccSmp153739 #define OVSEC_KADM_MKVNO 0x000200 64656a424ccSmp153739 #define OVSEC_KADM_AUX_ATTRIBUTES 0x000400 64756a424ccSmp153739 #define OVSEC_KADM_POLICY 0x000800 64856a424ccSmp153739 #define OVSEC_KADM_POLICY_CLR 0x001000 64956a424ccSmp153739 /* policy */ 65056a424ccSmp153739 #define OVSEC_KADM_PW_MAX_LIFE 0x004000 65156a424ccSmp153739 #define OVSEC_KADM_PW_MIN_LIFE 0x008000 65256a424ccSmp153739 #define OVSEC_KADM_PW_MIN_LENGTH 0x010000 65356a424ccSmp153739 #define OVSEC_KADM_PW_MIN_CLASSES 0x020000 65456a424ccSmp153739 #define OVSEC_KADM_PW_HISTORY_NUM 0x040000 65556a424ccSmp153739 #define OVSEC_KADM_REF_COUNT 0x080000 65656a424ccSmp153739 65756a424ccSmp153739 /* 65856a424ccSmp153739 * permission bits 65956a424ccSmp153739 */ 66056a424ccSmp153739 #define OVSEC_KADM_PRIV_GET 0x01 66156a424ccSmp153739 #define OVSEC_KADM_PRIV_ADD 0x02 66256a424ccSmp153739 #define OVSEC_KADM_PRIV_MODIFY 0x04 66356a424ccSmp153739 #define OVSEC_KADM_PRIV_DELETE 0x08 66456a424ccSmp153739 66556a424ccSmp153739 /* 66656a424ccSmp153739 * API versioning constants 66756a424ccSmp153739 */ 66856a424ccSmp153739 #define OVSEC_KADM_MASK_BITS 0xffffff00 66956a424ccSmp153739 67056a424ccSmp153739 #define OVSEC_KADM_STRUCT_VERSION_MASK 0x12345600 67156a424ccSmp153739 #define OVSEC_KADM_STRUCT_VERSION_1 (OVSEC_KADM_STRUCT_VERSION_MASK|0x01) 67256a424ccSmp153739 #define OVSEC_KADM_STRUCT_VERSION OVSEC_KADM_STRUCT_VERSION_1 67356a424ccSmp153739 67456a424ccSmp153739 #define OVSEC_KADM_API_VERSION_MASK 0x12345700 67556a424ccSmp153739 #define OVSEC_KADM_API_VERSION_1 (OVSEC_KADM_API_VERSION_MASK|0x01) 67656a424ccSmp153739 67756a424ccSmp153739 67856a424ccSmp153739 typedef struct _ovsec_kadm_principal_ent_t { 67956a424ccSmp153739 krb5_principal principal; 68056a424ccSmp153739 krb5_timestamp princ_expire_time; 68156a424ccSmp153739 krb5_timestamp last_pwd_change; 68256a424ccSmp153739 krb5_timestamp pw_expiration; 68356a424ccSmp153739 krb5_deltat max_life; 68456a424ccSmp153739 krb5_principal mod_name; 68556a424ccSmp153739 krb5_timestamp mod_date; 68656a424ccSmp153739 krb5_flags attributes; 68756a424ccSmp153739 krb5_kvno kvno; 68856a424ccSmp153739 krb5_kvno mkvno; 68956a424ccSmp153739 char *policy; 69056a424ccSmp153739 long aux_attributes; 69156a424ccSmp153739 } ovsec_kadm_principal_ent_rec, *ovsec_kadm_principal_ent_t; 69256a424ccSmp153739 69356a424ccSmp153739 typedef struct _ovsec_kadm_policy_ent_t { 69456a424ccSmp153739 char *policy; 69556a424ccSmp153739 long pw_min_life; 69656a424ccSmp153739 long pw_max_life; 69756a424ccSmp153739 long pw_min_length; 69856a424ccSmp153739 long pw_min_classes; 69956a424ccSmp153739 long pw_history_num; 70056a424ccSmp153739 long policy_refcnt; 70156a424ccSmp153739 } ovsec_kadm_policy_ent_rec, *ovsec_kadm_policy_ent_t; 70256a424ccSmp153739 70356a424ccSmp153739 /* 70456a424ccSmp153739 * functions 70556a424ccSmp153739 */ 70656a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_init(char *client_name, char *pass, 70756a424ccSmp153739 char *service_name, char *realm, 70856a424ccSmp153739 krb5_ui_4 struct_version, 70956a424ccSmp153739 krb5_ui_4 api_version, 710*54925bf6Swillf char **db_args, 71156a424ccSmp153739 void **server_handle); 71256a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_init_with_password(char *client_name, 71356a424ccSmp153739 char *pass, 71456a424ccSmp153739 char *service_name, 71556a424ccSmp153739 char *realm, 71656a424ccSmp153739 krb5_ui_4 struct_version, 71756a424ccSmp153739 krb5_ui_4 api_version, 718*54925bf6Swillf char ** db_args, 71956a424ccSmp153739 void **server_handle); 72056a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_init_with_skey(char *client_name, 72156a424ccSmp153739 char *keytab, 72256a424ccSmp153739 char *service_name, 72356a424ccSmp153739 char *realm, 72456a424ccSmp153739 krb5_ui_4 struct_version, 72556a424ccSmp153739 krb5_ui_4 api_version, 726*54925bf6Swillf char **db_args, 72756a424ccSmp153739 void **server_handle); 72856a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_flush(void *server_handle); 72956a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_destroy(void *server_handle); 73056a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_create_principal(void *server_handle, 73156a424ccSmp153739 ovsec_kadm_principal_ent_t ent, 73256a424ccSmp153739 long mask, char *pass); 73356a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_delete_principal(void *server_handle, 73456a424ccSmp153739 krb5_principal principal); 73556a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_modify_principal(void *server_handle, 73656a424ccSmp153739 ovsec_kadm_principal_ent_t ent, 73756a424ccSmp153739 long mask); 73856a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_rename_principal(void *server_handle, 73956a424ccSmp153739 krb5_principal,krb5_principal); 74056a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_get_principal(void *server_handle, 74156a424ccSmp153739 krb5_principal principal, 74256a424ccSmp153739 ovsec_kadm_principal_ent_t *ent); 74356a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_chpass_principal(void *server_handle, 74456a424ccSmp153739 krb5_principal principal, 74556a424ccSmp153739 char *pass); 74656a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_randkey_principal(void *server_handle, 74756a424ccSmp153739 krb5_principal principal, 74856a424ccSmp153739 krb5_keyblock **keyblock); 74956a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_create_policy(void *server_handle, 75056a424ccSmp153739 ovsec_kadm_policy_ent_t ent, 75156a424ccSmp153739 long mask); 75256a424ccSmp153739 /* 75356a424ccSmp153739 * ovsec_kadm_create_policy_internal is not part of the supported, 75456a424ccSmp153739 * exposed API. It is available only in the server library, and you 75556a424ccSmp153739 * shouldn't use it unless you know why it's there and how it's 75656a424ccSmp153739 * different from ovsec_kadm_create_policy. 75756a424ccSmp153739 */ 75856a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_create_policy_internal(void *server_handle, 75956a424ccSmp153739 ovsec_kadm_policy_ent_t 76056a424ccSmp153739 entry, long mask); 76156a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_delete_policy(void *server_handle, 76256a424ccSmp153739 ovsec_kadm_policy_t policy); 76356a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_modify_policy(void *server_handle, 76456a424ccSmp153739 ovsec_kadm_policy_ent_t ent, 76556a424ccSmp153739 long mask); 76656a424ccSmp153739 /* 76756a424ccSmp153739 * ovsec_kadm_modify_policy_internal is not part of the supported, 76856a424ccSmp153739 * exposed API. It is available only in the server library, and you 76956a424ccSmp153739 * shouldn't use it unless you know why it's there and how it's 77056a424ccSmp153739 * different from ovsec_kadm_modify_policy. 77156a424ccSmp153739 */ 77256a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_modify_policy_internal(void *server_handle, 77356a424ccSmp153739 ovsec_kadm_policy_ent_t 77456a424ccSmp153739 entry, long mask); 77556a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_get_policy(void *server_handle, 77656a424ccSmp153739 ovsec_kadm_policy_t policy, 77756a424ccSmp153739 ovsec_kadm_policy_ent_t *ent); 77856a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_get_privs(void *server_handle, 77956a424ccSmp153739 long *privs); 78056a424ccSmp153739 78156a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_chpass_principal_util(void *server_handle, 78256a424ccSmp153739 krb5_principal princ, 78356a424ccSmp153739 char *new_pw, 78456a424ccSmp153739 char **ret_pw, 78556a424ccSmp153739 char *msg_ret); 78656a424ccSmp153739 78756a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_free_principal_ent(void *server_handle, 78856a424ccSmp153739 ovsec_kadm_principal_ent_t 78956a424ccSmp153739 ent); 79056a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_free_policy_ent(void *server_handle, 79156a424ccSmp153739 ovsec_kadm_policy_ent_t ent); 79256a424ccSmp153739 79356a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_free_name_list(void *server_handle, 7947c478bd9Sstevel@tonic-gate char **names, int count); 7957c478bd9Sstevel@tonic-gate 79656a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_get_principals(void *server_handle, 79756a424ccSmp153739 char *exp, char ***princs, 79856a424ccSmp153739 int *count); 79956a424ccSmp153739 80056a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_get_policies(void *server_handle, 80156a424ccSmp153739 char *exp, char ***pols, 80256a424ccSmp153739 int *count); 80356a424ccSmp153739 80456a424ccSmp153739 #define OVSEC_KADM_FAILURE KADM5_FAILURE 80556a424ccSmp153739 #define OVSEC_KADM_AUTH_GET KADM5_AUTH_GET 80656a424ccSmp153739 #define OVSEC_KADM_AUTH_ADD KADM5_AUTH_ADD 80756a424ccSmp153739 #define OVSEC_KADM_AUTH_MODIFY KADM5_AUTH_MODIFY 80856a424ccSmp153739 #define OVSEC_KADM_AUTH_DELETE KADM5_AUTH_DELETE 80956a424ccSmp153739 #define OVSEC_KADM_AUTH_INSUFFICIENT KADM5_AUTH_INSUFFICIENT 81056a424ccSmp153739 #define OVSEC_KADM_BAD_DB KADM5_BAD_DB 81156a424ccSmp153739 #define OVSEC_KADM_DUP KADM5_DUP 81256a424ccSmp153739 #define OVSEC_KADM_RPC_ERROR KADM5_RPC_ERROR 81356a424ccSmp153739 #define OVSEC_KADM_NO_SRV KADM5_NO_SRV 81456a424ccSmp153739 #define OVSEC_KADM_BAD_HIST_KEY KADM5_BAD_HIST_KEY 81556a424ccSmp153739 #define OVSEC_KADM_NOT_INIT KADM5_NOT_INIT 81656a424ccSmp153739 #define OVSEC_KADM_UNK_PRINC KADM5_UNK_PRINC 81756a424ccSmp153739 #define OVSEC_KADM_UNK_POLICY KADM5_UNK_POLICY 81856a424ccSmp153739 #define OVSEC_KADM_BAD_MASK KADM5_BAD_MASK 81956a424ccSmp153739 #define OVSEC_KADM_BAD_CLASS KADM5_BAD_CLASS 82056a424ccSmp153739 #define OVSEC_KADM_BAD_LENGTH KADM5_BAD_LENGTH 82156a424ccSmp153739 #define OVSEC_KADM_BAD_POLICY KADM5_BAD_POLICY 82256a424ccSmp153739 #define OVSEC_KADM_BAD_PRINCIPAL KADM5_BAD_PRINCIPAL 82356a424ccSmp153739 #define OVSEC_KADM_BAD_AUX_ATTR KADM5_BAD_AUX_ATTR 82456a424ccSmp153739 #define OVSEC_KADM_BAD_HISTORY KADM5_BAD_HISTORY 82556a424ccSmp153739 #define OVSEC_KADM_BAD_MIN_PASS_LIFE KADM5_BAD_MIN_PASS_LIFE 82656a424ccSmp153739 #define OVSEC_KADM_PASS_Q_TOOSHORT KADM5_PASS_Q_TOOSHORT 82756a424ccSmp153739 #define OVSEC_KADM_PASS_Q_CLASS KADM5_PASS_Q_CLASS 82856a424ccSmp153739 #define OVSEC_KADM_PASS_Q_DICT KADM5_PASS_Q_DICT 82956a424ccSmp153739 #define OVSEC_KADM_PASS_REUSE KADM5_PASS_REUSE 83056a424ccSmp153739 #define OVSEC_KADM_PASS_TOOSOON KADM5_PASS_TOOSOON 83156a424ccSmp153739 #define OVSEC_KADM_POLICY_REF KADM5_POLICY_REF 83256a424ccSmp153739 #define OVSEC_KADM_INIT KADM5_INIT 83356a424ccSmp153739 #define OVSEC_KADM_BAD_PASSWORD KADM5_BAD_PASSWORD 83456a424ccSmp153739 #define OVSEC_KADM_PROTECT_PRINCIPAL KADM5_PROTECT_PRINCIPAL 83556a424ccSmp153739 #define OVSEC_KADM_BAD_SERVER_HANDLE KADM5_BAD_SERVER_HANDLE 83656a424ccSmp153739 #define OVSEC_KADM_BAD_STRUCT_VERSION KADM5_BAD_STRUCT_VERSION 83756a424ccSmp153739 #define OVSEC_KADM_OLD_STRUCT_VERSION KADM5_OLD_STRUCT_VERSION 83856a424ccSmp153739 #define OVSEC_KADM_NEW_STRUCT_VERSION KADM5_NEW_STRUCT_VERSION 83956a424ccSmp153739 #define OVSEC_KADM_BAD_API_VERSION KADM5_BAD_API_VERSION 84056a424ccSmp153739 #define OVSEC_KADM_OLD_LIB_API_VERSION KADM5_OLD_LIB_API_VERSION 84156a424ccSmp153739 #define OVSEC_KADM_OLD_SERVER_API_VERSION KADM5_OLD_SERVER_API_VERSION 84256a424ccSmp153739 #define OVSEC_KADM_NEW_LIB_API_VERSION KADM5_NEW_LIB_API_VERSION 84356a424ccSmp153739 #define OVSEC_KADM_NEW_SERVER_API_VERSION KADM5_NEW_SERVER_API_VERSION 84456a424ccSmp153739 #define OVSEC_KADM_SECURE_PRINC_MISSING KADM5_SECURE_PRINC_MISSING 84556a424ccSmp153739 #define OVSEC_KADM_NO_RENAME_SALT KADM5_NO_RENAME_SALT 84656a424ccSmp153739 84756a424ccSmp153739 #endif /* USE_KADM5_API_VERSION == 1 */ 8487c478bd9Sstevel@tonic-gate 84946736d35Ssemery #define MAXPRINCLEN 125 85046736d35Ssemery 85146736d35Ssemery void trunc_name(size_t *len, char **dots); 85246736d35Ssemery 8537c478bd9Sstevel@tonic-gate krb5_chgpwd_prot _kadm5_get_kpasswd_protocol(void *server_handle); 8547c478bd9Sstevel@tonic-gate kadm5_ret_t kadm5_chpass_principal_v2(void *server_handle, 8557c478bd9Sstevel@tonic-gate krb5_principal princ, 8567c478bd9Sstevel@tonic-gate char *new_password, 8577c478bd9Sstevel@tonic-gate kadm5_ret_t *srvr_rsp_code, 8587c478bd9Sstevel@tonic-gate krb5_data *srvr_msg); 8597c478bd9Sstevel@tonic-gate 8607c478bd9Sstevel@tonic-gate void handle_chpw(krb5_context context, int s, void *serverhandle, 8617c478bd9Sstevel@tonic-gate kadm5_config_params *params); 8627c478bd9Sstevel@tonic-gate 8637c478bd9Sstevel@tonic-gate #ifdef __cplusplus 8647c478bd9Sstevel@tonic-gate } 8657c478bd9Sstevel@tonic-gate #endif 8667c478bd9Sstevel@tonic-gate 8677c478bd9Sstevel@tonic-gate #endif /* __KADM5_ADMIN_H__ */ 868