xref: /onnv-gate/usr/src/lib/krb5/kadm5/admin.h (revision 12253:f3ab3e9cfad1)
10Sstevel@tonic-gate /*
2*12253SPeter.Shoults@Sun.COM  * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
30Sstevel@tonic-gate  */
40Sstevel@tonic-gate 
50Sstevel@tonic-gate #ifndef	__KADM5_ADMIN_H__
60Sstevel@tonic-gate #define	__KADM5_ADMIN_H__
70Sstevel@tonic-gate 
80Sstevel@tonic-gate 
90Sstevel@tonic-gate #ifdef __cplusplus
100Sstevel@tonic-gate extern "C" {
110Sstevel@tonic-gate #endif
120Sstevel@tonic-gate 
130Sstevel@tonic-gate /*
140Sstevel@tonic-gate  * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
150Sstevel@tonic-gate  *
160Sstevel@tonic-gate  *	Openvision retains the copyright to derivative works of
170Sstevel@tonic-gate  *	this source code.  Do *NOT* create a derivative of this
180Sstevel@tonic-gate  *	source code before consulting with your legal department.
190Sstevel@tonic-gate  *	Do *NOT* integrate *ANY* of this source code into another
200Sstevel@tonic-gate  *	product before consulting with your legal department.
210Sstevel@tonic-gate  *
220Sstevel@tonic-gate  *	For further information, read the top-level Openvision
230Sstevel@tonic-gate  *	copyright which is contained in the top-level MIT Kerberos
240Sstevel@tonic-gate  *	copyright.
250Sstevel@tonic-gate  *
260Sstevel@tonic-gate  * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
270Sstevel@tonic-gate  *
280Sstevel@tonic-gate  */
292881Smp153739 /*
302881Smp153739  * lib/kadm5/admin.h
312881Smp153739  *
322881Smp153739  * Copyright 2001 by the Massachusetts Institute of Technology.
332881Smp153739  * All Rights Reserved.
342881Smp153739  *
352881Smp153739  * Export of this software from the United States of America may
362881Smp153739  *   require a specific license from the United States Government.
372881Smp153739  *   It is the responsibility of any person or organization contemplating
382881Smp153739  *   export to obtain such a license before exporting.
392881Smp153739  *
402881Smp153739  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
412881Smp153739  * distribute this software and its documentation for any purpose and
422881Smp153739  * without fee is hereby granted, provided that the above copyright
432881Smp153739  * notice appear in all copies and that both that copyright notice and
442881Smp153739  * this permission notice appear in supporting documentation, and that
452881Smp153739  * the name of M.I.T. not be used in advertising or publicity pertaining
462881Smp153739  * to distribution of the software without specific, written prior
472881Smp153739  * permission.  Furthermore if you modify this software you must label
482881Smp153739  * your software as modified software and not distribute it in such a
492881Smp153739  * fashion that it might be confused with the original M.I.T. software.
502881Smp153739  * M.I.T. makes no representations about the suitability of
512881Smp153739  * this software for any purpose.  It is provided "as is" without express
522881Smp153739  * or implied warranty.
532881Smp153739  *
542881Smp153739  */
550Sstevel@tonic-gate /*
560Sstevel@tonic-gate  * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved
570Sstevel@tonic-gate  *
584960Swillf  * $Header$
590Sstevel@tonic-gate  */
600Sstevel@tonic-gate 
610Sstevel@tonic-gate #include	<sys/types.h>
620Sstevel@tonic-gate #include	<rpc/types.h>
630Sstevel@tonic-gate #include	<rpc/rpc.h>
647934SMark.Phalan@Sun.COM #include	<k5-int.h>
650Sstevel@tonic-gate #include	<krb5.h>
664960Swillf #include	<krb5/kdb.h>
670Sstevel@tonic-gate #include	<com_err.h>
680Sstevel@tonic-gate #include	<kadm5/kadm_err.h>
690Sstevel@tonic-gate #include	<kadm5/chpass_util_strings.h>
700Sstevel@tonic-gate 
712881Smp153739 #define KADM5_ADMIN_SERVICE_P	"kadmin@admin"
724960Swillf /*
734960Swillf  * Solaris Kerberos:
744960Swillf  * The kadmin/admin principal is unused on Solaris. This principal is used
754960Swillf  * in AUTH_GSSAPI but Solaris doesn't support AUTH_GSSAPI. RPCSEC_GSS can only
764960Swillf  * be used with host-based principals.
774960Swillf  *
784960Swillf  */
794960Swillf /* #define KADM5_ADMIN_SERVICE	"kadmin/admin" */
802881Smp153739 #define KADM5_CHANGEPW_SERVICE_P	"kadmin@changepw"
812881Smp153739 #define KADM5_CHANGEPW_SERVICE	"kadmin/changepw"
822881Smp153739 #define KADM5_HIST_PRINCIPAL	"kadmin/history"
832881Smp153739 #define KADM5_ADMIN_HOST_SERVICE "kadmin"
842881Smp153739 #define KADM5_CHANGEPW_HOST_SERVICE "changepw"
852881Smp153739 #define KADM5_KIPROP_HOST_SERVICE "kiprop"
860Sstevel@tonic-gate 
870Sstevel@tonic-gate typedef krb5_principal	kadm5_princ_t;
880Sstevel@tonic-gate typedef	char		*kadm5_policy_t;
890Sstevel@tonic-gate typedef long		kadm5_ret_t;
900Sstevel@tonic-gate typedef int rpc_int32;
910Sstevel@tonic-gate typedef unsigned int rpc_u_int32;
920Sstevel@tonic-gate 
932881Smp153739 #define KADM5_PW_FIRST_PROMPT \
942881Smp153739 	(error_message(CHPASS_UTIL_NEW_PASSWORD_PROMPT))
952881Smp153739 #define KADM5_PW_SECOND_PROMPT \
962881Smp153739 	(error_message(CHPASS_UTIL_NEW_PASSWORD_AGAIN_PROMPT))
970Sstevel@tonic-gate 
980Sstevel@tonic-gate /*
992881Smp153739  * Successful return code
1000Sstevel@tonic-gate  */
1012881Smp153739 #define KADM5_OK	0
1020Sstevel@tonic-gate 
1030Sstevel@tonic-gate /*
1040Sstevel@tonic-gate  * Field masks
1050Sstevel@tonic-gate  */
1060Sstevel@tonic-gate 
1070Sstevel@tonic-gate /* kadm5_principal_ent_t */
1082881Smp153739 #define KADM5_PRINCIPAL		0x000001
1092881Smp153739 #define KADM5_PRINC_EXPIRE_TIME	0x000002
1102881Smp153739 #define KADM5_PW_EXPIRATION	0x000004
1112881Smp153739 #define KADM5_LAST_PWD_CHANGE	0x000008
1122881Smp153739 #define KADM5_ATTRIBUTES	0x000010
1132881Smp153739 #define KADM5_MAX_LIFE		0x000020
1142881Smp153739 #define KADM5_MOD_TIME		0x000040
1152881Smp153739 #define KADM5_MOD_NAME		0x000080
1162881Smp153739 #define KADM5_KVNO		0x000100
1172881Smp153739 #define KADM5_MKVNO		0x000200
1182881Smp153739 #define KADM5_AUX_ATTRIBUTES	0x000400
1192881Smp153739 #define KADM5_POLICY		0x000800
1202881Smp153739 #define KADM5_POLICY_CLR	0x001000
1210Sstevel@tonic-gate /* version 2 masks */
1222881Smp153739 #define KADM5_MAX_RLIFE		0x002000
1232881Smp153739 #define KADM5_LAST_SUCCESS	0x004000
1242881Smp153739 #define KADM5_LAST_FAILED	0x008000
1252881Smp153739 #define KADM5_FAIL_AUTH_COUNT	0x010000
1262881Smp153739 #define KADM5_KEY_DATA		0x020000
1272881Smp153739 #define KADM5_TL_DATA		0x040000
1284960Swillf #ifdef notyet /* Novell */
1294960Swillf #define KADM5_CPW_FUNCTION      0x080000
1304960Swillf #define KADM5_RANDKEY_USED      0x100000
1314960Swillf #endif
1324960Swillf #define KADM5_LOAD		0x200000
1335916Swillf /* Solaris Kerberos: adding support for key history in LDAP KDB */
1345916Swillf #define KADM5_KEY_HIST		0x400000
1354960Swillf 
1360Sstevel@tonic-gate /* all but KEY_DATA and TL_DATA */
1372881Smp153739 #define KADM5_PRINCIPAL_NORMAL_MASK 0x01ffff
1380Sstevel@tonic-gate 
1394960Swillf 
1400Sstevel@tonic-gate /* kadm5_policy_ent_t */
1412881Smp153739 #define KADM5_PW_MAX_LIFE	0x004000
1422881Smp153739 #define KADM5_PW_MIN_LIFE	0x008000
1432881Smp153739 #define KADM5_PW_MIN_LENGTH	0x010000
1442881Smp153739 #define KADM5_PW_MIN_CLASSES	0x020000
1452881Smp153739 #define KADM5_PW_HISTORY_NUM	0x040000
1462881Smp153739 #define KADM5_REF_COUNT		0x080000
1470Sstevel@tonic-gate 
1480Sstevel@tonic-gate /* kadm5_config_params */
1490Sstevel@tonic-gate #define KADM5_CONFIG_REALM		0x0000001
1500Sstevel@tonic-gate #define KADM5_CONFIG_DBNAME		0x0000002
1510Sstevel@tonic-gate #define KADM5_CONFIG_MKEY_NAME		0x0000004
1520Sstevel@tonic-gate #define KADM5_CONFIG_MAX_LIFE		0x0000008
1530Sstevel@tonic-gate #define KADM5_CONFIG_MAX_RLIFE		0x0000010
1540Sstevel@tonic-gate #define KADM5_CONFIG_EXPIRATION		0x0000020
1550Sstevel@tonic-gate #define KADM5_CONFIG_FLAGS		0x0000040
1560Sstevel@tonic-gate #define KADM5_CONFIG_ADMIN_KEYTAB	0x0000080
1570Sstevel@tonic-gate #define KADM5_CONFIG_STASH_FILE		0x0000100
1580Sstevel@tonic-gate #define KADM5_CONFIG_ENCTYPE		0x0000200
1590Sstevel@tonic-gate #define KADM5_CONFIG_ADBNAME		0x0000400
1600Sstevel@tonic-gate #define KADM5_CONFIG_ADB_LOCKFILE	0x0000800
1610Sstevel@tonic-gate #define KADM5_CONFIG_PROFILE		0x0001000
1620Sstevel@tonic-gate #define KADM5_CONFIG_ACL_FILE		0x0002000
1630Sstevel@tonic-gate #define KADM5_CONFIG_KADMIND_PORT	0x0004000
1640Sstevel@tonic-gate #define KADM5_CONFIG_ENCTYPES		0x0008000
1650Sstevel@tonic-gate #define KADM5_CONFIG_ADMIN_SERVER	0x0010000
1660Sstevel@tonic-gate #define KADM5_CONFIG_DICT_FILE		0x0020000
1670Sstevel@tonic-gate #define KADM5_CONFIG_MKEY_FROM_KBD	0x0040000
1680Sstevel@tonic-gate #define KADM5_CONFIG_KPASSWD_PORT	0x0080000
1690Sstevel@tonic-gate #define KADM5_CONFIG_KPASSWD_SERVER	0x0100000
1700Sstevel@tonic-gate #define	KADM5_CONFIG_KPASSWD_PROTOCOL	0x0200000
1710Sstevel@tonic-gate #define	KADM5_CONFIG_IPROP_ENABLED	0x0400000
1720Sstevel@tonic-gate #define	KADM5_CONFIG_ULOG_SIZE		0x0800000
1730Sstevel@tonic-gate #define	KADM5_CONFIG_POLL_TIME		0x1000000
1740Sstevel@tonic-gate 
1750Sstevel@tonic-gate /* password change constants */
1760Sstevel@tonic-gate #define	KRB5_KPASSWD_SUCCESS		0
1770Sstevel@tonic-gate #define	KRB5_KPASSWD_MALFORMED		1
1780Sstevel@tonic-gate #define	KRB5_KPASSWD_HARDERROR		2
1790Sstevel@tonic-gate #define	KRB5_KPASSWD_AUTHERROR		3
1800Sstevel@tonic-gate #define	KRB5_KPASSWD_SOFTERROR		4
1810Sstevel@tonic-gate #define	KRB5_KPASSWD_ACCESSDENIED	5
1820Sstevel@tonic-gate #define	KRB5_KPASSWD_BAD_VERSION	6
1830Sstevel@tonic-gate #define	KRB5_KPASSWD_INITIAL_FLAG_NEEDED	7
1840Sstevel@tonic-gate #define	KRB5_KPASSWD_POLICY_REJECT	8
1850Sstevel@tonic-gate #define	KRB5_KPASSWD_BAD_PRINCIPAL	9
1860Sstevel@tonic-gate #define	KRB5_KPASSWD_ETYPE_NOSUPP	10
1870Sstevel@tonic-gate 
1880Sstevel@tonic-gate /*
1890Sstevel@tonic-gate  * permission bits
1900Sstevel@tonic-gate  */
1912881Smp153739 #define KADM5_PRIV_GET		0x01
1922881Smp153739 #define KADM5_PRIV_ADD		0x02
1932881Smp153739 #define KADM5_PRIV_MODIFY	0x04
1942881Smp153739 #define KADM5_PRIV_DELETE	0x08
1950Sstevel@tonic-gate 
1960Sstevel@tonic-gate /*
1970Sstevel@tonic-gate  * API versioning constants
1980Sstevel@tonic-gate  */
1992881Smp153739 #define KADM5_MASK_BITS		0xffffff00
2000Sstevel@tonic-gate 
2012881Smp153739 #define KADM5_STRUCT_VERSION_MASK	0x12345600
2022881Smp153739 #define KADM5_STRUCT_VERSION_1	(KADM5_STRUCT_VERSION_MASK|0x01)
2032881Smp153739 #define KADM5_STRUCT_VERSION	KADM5_STRUCT_VERSION_1
2040Sstevel@tonic-gate 
2052881Smp153739 #define KADM5_API_VERSION_MASK	0x12345700
2062881Smp153739 #define KADM5_API_VERSION_1	(KADM5_API_VERSION_MASK|0x01)
2072881Smp153739 #define KADM5_API_VERSION_2	(KADM5_API_VERSION_MASK|0x02)
2080Sstevel@tonic-gate 
2090Sstevel@tonic-gate #ifdef KRB5_DNS_LOOKUP
2100Sstevel@tonic-gate /*
2110Sstevel@tonic-gate  * Name length constants for DNS lookups
2120Sstevel@tonic-gate  */
2130Sstevel@tonic-gate #define	MAX_HOST_NAMELEN 256
2140Sstevel@tonic-gate #define	MAX_DNS_NAMELEN (15*(MAX_HOST_NAMELEN + 1)+1)
2150Sstevel@tonic-gate #endif /* KRB5_DNS_LOOKUP */
2160Sstevel@tonic-gate 
2170Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v2 {
2180Sstevel@tonic-gate 	krb5_principal	principal;
2190Sstevel@tonic-gate 	krb5_timestamp	princ_expire_time;
2200Sstevel@tonic-gate 	krb5_timestamp	last_pwd_change;
2210Sstevel@tonic-gate 	krb5_timestamp	pw_expiration;
2220Sstevel@tonic-gate 	krb5_deltat	max_life;
2230Sstevel@tonic-gate 	krb5_principal	mod_name;
2240Sstevel@tonic-gate 	krb5_timestamp	mod_date;
2250Sstevel@tonic-gate 	krb5_flags	attributes;
2260Sstevel@tonic-gate 	krb5_kvno	kvno;
2270Sstevel@tonic-gate 	krb5_kvno	mkvno;
2280Sstevel@tonic-gate 	char		*policy;
2290Sstevel@tonic-gate 	long		aux_attributes;
2300Sstevel@tonic-gate 
2310Sstevel@tonic-gate 	/* version 2 fields */
2320Sstevel@tonic-gate 	krb5_deltat max_renewable_life;
2332881Smp153739         krb5_timestamp last_success;
2342881Smp153739         krb5_timestamp last_failed;
2352881Smp153739         krb5_kvno fail_auth_count;
2360Sstevel@tonic-gate 	krb5_int16 n_key_data;
2370Sstevel@tonic-gate 	krb5_int16 n_tl_data;
2382881Smp153739         krb5_tl_data *tl_data;
2390Sstevel@tonic-gate 	krb5_key_data *key_data;
2400Sstevel@tonic-gate } kadm5_principal_ent_rec_v2, *kadm5_principal_ent_t_v2;
2410Sstevel@tonic-gate 
2420Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v1 {
2430Sstevel@tonic-gate 	krb5_principal	principal;
2440Sstevel@tonic-gate 	krb5_timestamp	princ_expire_time;
2450Sstevel@tonic-gate 	krb5_timestamp	last_pwd_change;
2460Sstevel@tonic-gate 	krb5_timestamp	pw_expiration;
2470Sstevel@tonic-gate 	krb5_deltat	max_life;
2480Sstevel@tonic-gate 	krb5_principal	mod_name;
2490Sstevel@tonic-gate 	krb5_timestamp	mod_date;
2500Sstevel@tonic-gate 	krb5_flags	attributes;
2510Sstevel@tonic-gate 	krb5_kvno	kvno;
2520Sstevel@tonic-gate 	krb5_kvno	mkvno;
2530Sstevel@tonic-gate 	char		*policy;
2540Sstevel@tonic-gate 	long		aux_attributes;
2550Sstevel@tonic-gate } kadm5_principal_ent_rec_v1, *kadm5_principal_ent_t_v1;
2560Sstevel@tonic-gate 
2572881Smp153739 #if USE_KADM5_API_VERSION == 1
2582881Smp153739 typedef struct _kadm5_principal_ent_t_v1
2592881Smp153739      kadm5_principal_ent_rec, *kadm5_principal_ent_t;
2602881Smp153739 #else
2610Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v2
2622881Smp153739      kadm5_principal_ent_rec, *kadm5_principal_ent_t;
2632881Smp153739 #endif
2640Sstevel@tonic-gate 
2650Sstevel@tonic-gate typedef struct _kadm5_policy_ent_t {
2660Sstevel@tonic-gate 	char		*policy;
2670Sstevel@tonic-gate 	long		pw_min_life;
2680Sstevel@tonic-gate 	long		pw_max_life;
2690Sstevel@tonic-gate 	long		pw_min_length;
2700Sstevel@tonic-gate 	long		pw_min_classes;
2710Sstevel@tonic-gate 	long		pw_history_num;
2720Sstevel@tonic-gate 	long		policy_refcnt;
2730Sstevel@tonic-gate } kadm5_policy_ent_rec, *kadm5_policy_ent_t;
2740Sstevel@tonic-gate 
2750Sstevel@tonic-gate /*
2760Sstevel@tonic-gate  * New types to indicate which protocol to use when sending
2770Sstevel@tonic-gate  * password change requests
2780Sstevel@tonic-gate  */
2790Sstevel@tonic-gate typedef enum {
2800Sstevel@tonic-gate 	KRB5_CHGPWD_RPCSEC,
2810Sstevel@tonic-gate 	KRB5_CHGPWD_CHANGEPW_V2
2820Sstevel@tonic-gate } krb5_chgpwd_prot;
2830Sstevel@tonic-gate 
2840Sstevel@tonic-gate /*
2850Sstevel@tonic-gate  * Data structure returned by kadm5_get_config_params()
2860Sstevel@tonic-gate  */
2870Sstevel@tonic-gate typedef struct _kadm5_config_params {
2882881Smp153739      long		mask;
2892881Smp153739      char *		realm;
2902881Smp153739      int		kadmind_port;
2912881Smp153739      int		kpasswd_port;
2922881Smp153739 
2932881Smp153739      char *		admin_server;
2944960Swillf #ifdef notyet /* Novell */ /* ABI change? */
2954960Swillf      char *		kpasswd_server;
2964960Swillf #endif
2972881Smp153739 
2982881Smp153739      char *		dbname;
2992881Smp153739      char *		admin_dbname;
3002881Smp153739      char *		admin_lockfile;
3012881Smp153739      char *		admin_keytab;
3022881Smp153739      char *		acl_file;
3032881Smp153739      char *		dict_file;
3042881Smp153739 
3052881Smp153739      int		mkey_from_kbd;
3062881Smp153739      char *		stash_file;
3072881Smp153739      char *		mkey_name;
3082881Smp153739      krb5_enctype	enctype;
3092881Smp153739      krb5_deltat	max_life;
3102881Smp153739      krb5_deltat	max_rlife;
3112881Smp153739      krb5_timestamp	expiration;
3122881Smp153739      krb5_flags		flags;
3132881Smp153739      krb5_key_salt_tuple *keysalts;
3142881Smp153739      krb5_int32		num_keysalts;
3152881Smp153739      char 			*kpasswd_server;
3162881Smp153739 
3172881Smp153739      krb5_chgpwd_prot	kpasswd_protocol;
3182881Smp153739      bool_t			iprop_enabled;
3192881Smp153739      int			iprop_ulogsize;
3202881Smp153739      char			*iprop_polltime;
3210Sstevel@tonic-gate } kadm5_config_params;
3220Sstevel@tonic-gate 
3230Sstevel@tonic-gate /***********************************************************************
3240Sstevel@tonic-gate  * This is the old krb5_realm_read_params, which I mutated into
3250Sstevel@tonic-gate  * kadm5_get_config_params but which old code (kdb5_* and krb5kdc)
3260Sstevel@tonic-gate  * still uses.
3270Sstevel@tonic-gate  ***********************************************************************/
3280Sstevel@tonic-gate 
3290Sstevel@tonic-gate /*
3300Sstevel@tonic-gate  * Data structure returned by krb5_read_realm_params()
3310Sstevel@tonic-gate  */
3320Sstevel@tonic-gate typedef struct __krb5_realm_params {
3332881Smp153739     char *		realm_profile;
3342881Smp153739     char *		realm_dbname;
3352881Smp153739     char *		realm_mkey_name;
3362881Smp153739     char *		realm_stash_file;
3372881Smp153739     char *		realm_kdc_ports;
3382881Smp153739     char *		realm_kdc_tcp_ports;
3392881Smp153739     char *		realm_acl_file;
3400Sstevel@tonic-gate     krb5_int32		realm_kadmind_port;
3410Sstevel@tonic-gate     krb5_enctype	realm_enctype;
3420Sstevel@tonic-gate     krb5_deltat		realm_max_life;
3430Sstevel@tonic-gate     krb5_deltat		realm_max_rlife;
3440Sstevel@tonic-gate     krb5_timestamp	realm_expiration;
3450Sstevel@tonic-gate     krb5_flags		realm_flags;
3460Sstevel@tonic-gate     krb5_key_salt_tuple	*realm_keysalts;
3472881Smp153739     unsigned int	realm_reject_bad_transit:1;
3480Sstevel@tonic-gate     unsigned int	realm_kadmind_port_valid:1;
3490Sstevel@tonic-gate     unsigned int	realm_enctype_valid:1;
3500Sstevel@tonic-gate     unsigned int	realm_max_life_valid:1;
3510Sstevel@tonic-gate     unsigned int	realm_max_rlife_valid:1;
3520Sstevel@tonic-gate     unsigned int	realm_expiration_valid:1;
3530Sstevel@tonic-gate     unsigned int	realm_flags_valid:1;
3542881Smp153739     unsigned int	realm_reject_bad_transit_valid:1;
3550Sstevel@tonic-gate     krb5_int32		realm_num_keysalts;
3560Sstevel@tonic-gate } krb5_realm_params;
3570Sstevel@tonic-gate 
3580Sstevel@tonic-gate /*
3590Sstevel@tonic-gate  * functions
3600Sstevel@tonic-gate  */
3610Sstevel@tonic-gate 
3620Sstevel@tonic-gate kadm5_ret_t
3630Sstevel@tonic-gate kadm5_get_adm_host_srv_name(krb5_context context,
3642881Smp153739                            const char *realm, char **host_service_name);
3650Sstevel@tonic-gate 
3660Sstevel@tonic-gate kadm5_ret_t
3670Sstevel@tonic-gate kadm5_get_cpw_host_srv_name(krb5_context context,
3682881Smp153739                            const char *realm, char **host_service_name);
3690Sstevel@tonic-gate 
3702881Smp153739 #if USE_KADM5_API_VERSION > 1
3710Sstevel@tonic-gate krb5_error_code kadm5_get_config_params(krb5_context context,
3727934SMark.Phalan@Sun.COM 					int use_kdc_config,
3730Sstevel@tonic-gate 					kadm5_config_params *params_in,
3740Sstevel@tonic-gate 					kadm5_config_params *params_out);
3750Sstevel@tonic-gate 
3762881Smp153739 krb5_error_code kadm5_free_config_params(krb5_context context,
3772881Smp153739 					 kadm5_config_params *params);
3780Sstevel@tonic-gate 
3790Sstevel@tonic-gate krb5_error_code kadm5_free_realm_params(krb5_context kcontext,
3800Sstevel@tonic-gate 					kadm5_config_params *params);
3810Sstevel@tonic-gate 
3822881Smp153739 krb5_error_code kadm5_get_admin_service_name(krb5_context, char *,
3832881Smp153739 					     char *, size_t);
3842881Smp153739 #endif
3852881Smp153739 
3860Sstevel@tonic-gate kadm5_ret_t    kadm5_init(char *client_name, char *pass,
3872881Smp153739 			  char *service_name,
3882881Smp153739 #if USE_KADM5_API_VERSION == 1
3892881Smp153739 			  char *realm,
3902881Smp153739 #else
3912881Smp153739 			  kadm5_config_params *params,
3922881Smp153739 #endif
3932881Smp153739 			  krb5_ui_4 struct_version,
3942881Smp153739 			  krb5_ui_4 api_version,
3954960Swillf 			  char **db_args,
3962881Smp153739 			  void **server_handle);
3970Sstevel@tonic-gate kadm5_ret_t    kadm5_init_with_password(char *client_name,
3980Sstevel@tonic-gate 					char *pass,
3990Sstevel@tonic-gate 					char *service_name,
4002881Smp153739 #if USE_KADM5_API_VERSION == 1
4012881Smp153739 					char *realm,
4022881Smp153739 #else
4030Sstevel@tonic-gate 					kadm5_config_params *params,
4042881Smp153739 #endif
4050Sstevel@tonic-gate 					krb5_ui_4 struct_version,
4060Sstevel@tonic-gate 					krb5_ui_4 api_version,
4074960Swillf 					char **db_args,
4080Sstevel@tonic-gate 					void **server_handle);
4090Sstevel@tonic-gate kadm5_ret_t    kadm5_init_with_skey(char *client_name,
4100Sstevel@tonic-gate 				    char *keytab,
4110Sstevel@tonic-gate 				    char *service_name,
4122881Smp153739 #if USE_KADM5_API_VERSION == 1
4132881Smp153739 				    char *realm,
4142881Smp153739 #else
4150Sstevel@tonic-gate 				    kadm5_config_params *params,
4162881Smp153739 #endif
4170Sstevel@tonic-gate 				    krb5_ui_4 struct_version,
4180Sstevel@tonic-gate 				    krb5_ui_4 api_version,
4194960Swillf 				    char **db_args,
4200Sstevel@tonic-gate 				    void **server_handle);
4212881Smp153739 #if USE_KADM5_API_VERSION > 1
4220Sstevel@tonic-gate kadm5_ret_t    kadm5_init_with_creds(char *client_name,
4230Sstevel@tonic-gate 				     krb5_ccache cc,
4240Sstevel@tonic-gate 				     char *service_name,
4250Sstevel@tonic-gate 				     kadm5_config_params *params,
4260Sstevel@tonic-gate 				     krb5_ui_4 struct_version,
4270Sstevel@tonic-gate 				     krb5_ui_4 api_version,
4284960Swillf 				     char **db_args,
4290Sstevel@tonic-gate 				     void **server_handle);
4302881Smp153739 #endif
4312881Smp153739 kadm5_ret_t    kadm5_lock(void *server_handle);
4322881Smp153739 kadm5_ret_t    kadm5_unlock(void *server_handle);
4330Sstevel@tonic-gate kadm5_ret_t    kadm5_flush(void *server_handle);
4340Sstevel@tonic-gate kadm5_ret_t    kadm5_destroy(void *server_handle);
435*12253SPeter.Shoults@Sun.COM kadm5_ret_t    kadm5_check_min_life(void *server_handle,	/* Solaris Kerberos */
436*12253SPeter.Shoults@Sun.COM 			      krb5_principal principal,
437*12253SPeter.Shoults@Sun.COM 			      char *msg_ret,
438*12253SPeter.Shoults@Sun.COM 			      unsigned int msg_len);
4390Sstevel@tonic-gate kadm5_ret_t    kadm5_create_principal(void *server_handle,
4400Sstevel@tonic-gate 				      kadm5_principal_ent_t ent,
4410Sstevel@tonic-gate 				      long mask, char *pass);
4420Sstevel@tonic-gate kadm5_ret_t    kadm5_create_principal_3(void *server_handle,
4430Sstevel@tonic-gate 					kadm5_principal_ent_t ent,
4440Sstevel@tonic-gate 					long mask,
4450Sstevel@tonic-gate 					int n_ks_tuple,
4460Sstevel@tonic-gate 					krb5_key_salt_tuple *ks_tuple,
4470Sstevel@tonic-gate 					char *pass);
4480Sstevel@tonic-gate kadm5_ret_t    kadm5_delete_principal(void *server_handle,
4490Sstevel@tonic-gate 				      krb5_principal principal);
4500Sstevel@tonic-gate kadm5_ret_t    kadm5_modify_principal(void *server_handle,
4510Sstevel@tonic-gate 				      kadm5_principal_ent_t ent,
4520Sstevel@tonic-gate 				      long mask);
4530Sstevel@tonic-gate kadm5_ret_t    kadm5_rename_principal(void *server_handle,
4542881Smp153739 				      krb5_principal,krb5_principal);
4552881Smp153739 #if USE_KADM5_API_VERSION == 1
4560Sstevel@tonic-gate kadm5_ret_t    kadm5_get_principal(void *server_handle,
4572881Smp153739 				   krb5_principal principal,
4582881Smp153739 				   kadm5_principal_ent_t *ent);
4592881Smp153739 #else
4602881Smp153739 kadm5_ret_t    kadm5_get_principal(void *server_handle,
4612881Smp153739 				   krb5_principal principal,
4622881Smp153739 				   kadm5_principal_ent_t ent,
4632881Smp153739 				   long mask);
4642881Smp153739 #endif
4650Sstevel@tonic-gate kadm5_ret_t    kadm5_chpass_principal(void *server_handle,
4660Sstevel@tonic-gate 				      krb5_principal principal,
4670Sstevel@tonic-gate 				      char *pass);
4680Sstevel@tonic-gate kadm5_ret_t    kadm5_chpass_principal_3(void *server_handle,
4690Sstevel@tonic-gate 					krb5_principal principal,
4700Sstevel@tonic-gate 					krb5_boolean keepold,
4710Sstevel@tonic-gate 					int n_ks_tuple,
4720Sstevel@tonic-gate 					krb5_key_salt_tuple *ks_tuple,
4730Sstevel@tonic-gate 					char *pass);
4742881Smp153739 #if USE_KADM5_API_VERSION == 1
4752881Smp153739 kadm5_ret_t    kadm5_randkey_principal(void *server_handle,
4762881Smp153739 				       krb5_principal principal,
4772881Smp153739 				       krb5_keyblock **keyblock);
4782881Smp153739 #else
4790Sstevel@tonic-gate 
4800Sstevel@tonic-gate /*
4810Sstevel@tonic-gate  * Solaris Kerberos:
4820Sstevel@tonic-gate  * this routine is only implemented in the client library.
4830Sstevel@tonic-gate  */
4840Sstevel@tonic-gate kadm5_ret_t    kadm5_randkey_principal_old(void *server_handle,
4850Sstevel@tonic-gate 				    krb5_principal principal,
4860Sstevel@tonic-gate 				    krb5_keyblock **keyblocks,
4870Sstevel@tonic-gate 				    int *n_keys);
4880Sstevel@tonic-gate 
4890Sstevel@tonic-gate kadm5_ret_t    kadm5_randkey_principal(void *server_handle,
4900Sstevel@tonic-gate 				       krb5_principal principal,
4910Sstevel@tonic-gate 				       krb5_keyblock **keyblocks,
4920Sstevel@tonic-gate 				       int *n_keys);
4930Sstevel@tonic-gate kadm5_ret_t    kadm5_randkey_principal_3(void *server_handle,
4940Sstevel@tonic-gate 					 krb5_principal principal,
4950Sstevel@tonic-gate 					 krb5_boolean keepold,
4960Sstevel@tonic-gate 					 int n_ks_tuple,
4970Sstevel@tonic-gate 					 krb5_key_salt_tuple *ks_tuple,
4980Sstevel@tonic-gate 					 krb5_keyblock **keyblocks,
4990Sstevel@tonic-gate 					 int *n_keys);
5002881Smp153739 #endif
5010Sstevel@tonic-gate kadm5_ret_t    kadm5_setv4key_principal(void *server_handle,
5020Sstevel@tonic-gate 					krb5_principal principal,
5030Sstevel@tonic-gate 					krb5_keyblock *keyblock);
5040Sstevel@tonic-gate 
5050Sstevel@tonic-gate kadm5_ret_t    kadm5_setkey_principal(void *server_handle,
5060Sstevel@tonic-gate 				      krb5_principal principal,
5070Sstevel@tonic-gate 				      krb5_keyblock *keyblocks,
5080Sstevel@tonic-gate 				      int n_keys);
5090Sstevel@tonic-gate 
5100Sstevel@tonic-gate kadm5_ret_t    kadm5_setkey_principal_3(void *server_handle,
5110Sstevel@tonic-gate 					krb5_principal principal,
5120Sstevel@tonic-gate 					krb5_boolean keepold,
5130Sstevel@tonic-gate 					int n_ks_tuple,
5140Sstevel@tonic-gate 					krb5_key_salt_tuple *ks_tuple,
5150Sstevel@tonic-gate 					krb5_keyblock *keyblocks,
5160Sstevel@tonic-gate 					int n_keys);
5170Sstevel@tonic-gate 
5182881Smp153739 kadm5_ret_t    kadm5_decrypt_key(void *server_handle,
5192881Smp153739 				 kadm5_principal_ent_t entry, krb5_int32
5202881Smp153739 				 ktype, krb5_int32 stype, krb5_int32
5212881Smp153739 				 kvno, krb5_keyblock *keyblock,
5222881Smp153739 				 krb5_keysalt *keysalt, int *kvnop);
5232881Smp153739 
5240Sstevel@tonic-gate kadm5_ret_t    kadm5_create_policy(void *server_handle,
5250Sstevel@tonic-gate 				   kadm5_policy_ent_t ent,
5260Sstevel@tonic-gate 				   long mask);
5270Sstevel@tonic-gate /*
5280Sstevel@tonic-gate  * kadm5_create_policy_internal is not part of the supported,
5290Sstevel@tonic-gate  * exposed API.  It is available only in the server library, and you
5300Sstevel@tonic-gate  * shouldn't use it unless you know why it's there and how it's
5310Sstevel@tonic-gate  * different from kadm5_create_policy.
5320Sstevel@tonic-gate  */
5330Sstevel@tonic-gate kadm5_ret_t    kadm5_create_policy_internal(void *server_handle,
5340Sstevel@tonic-gate 					    kadm5_policy_ent_t
5350Sstevel@tonic-gate 					    entry, long mask);
5360Sstevel@tonic-gate kadm5_ret_t    kadm5_delete_policy(void *server_handle,
5370Sstevel@tonic-gate 				   kadm5_policy_t policy);
5380Sstevel@tonic-gate kadm5_ret_t    kadm5_modify_policy(void *server_handle,
5390Sstevel@tonic-gate 				   kadm5_policy_ent_t ent,
5400Sstevel@tonic-gate 				   long mask);
5410Sstevel@tonic-gate /*
5420Sstevel@tonic-gate  * kadm5_modify_policy_internal is not part of the supported,
5430Sstevel@tonic-gate  * exposed API.  It is available only in the server library, and you
5440Sstevel@tonic-gate  * shouldn't use it unless you know why it's there and how it's
5450Sstevel@tonic-gate  * different from kadm5_modify_policy.
5460Sstevel@tonic-gate  */
5470Sstevel@tonic-gate kadm5_ret_t    kadm5_modify_policy_internal(void *server_handle,
5480Sstevel@tonic-gate 					    kadm5_policy_ent_t
5490Sstevel@tonic-gate 					    entry, long mask);
5502881Smp153739 #if USE_KADM5_API_VERSION == 1
5512881Smp153739 kadm5_ret_t    kadm5_get_policy(void *server_handle,
5522881Smp153739 				kadm5_policy_t policy,
5532881Smp153739 				kadm5_policy_ent_t *ent);
5542881Smp153739 #else
5550Sstevel@tonic-gate kadm5_ret_t    kadm5_get_policy(void *server_handle,
5560Sstevel@tonic-gate 				kadm5_policy_t policy,
5570Sstevel@tonic-gate 				kadm5_policy_ent_t ent);
5582881Smp153739 #endif
5590Sstevel@tonic-gate kadm5_ret_t    kadm5_get_privs(void *server_handle,
5602881Smp153739 			       long *privs);
5610Sstevel@tonic-gate 
5620Sstevel@tonic-gate kadm5_ret_t    kadm5_chpass_principal_util(void *server_handle,
5630Sstevel@tonic-gate 					   krb5_principal princ,
5640Sstevel@tonic-gate 					   char *new_pw,
5650Sstevel@tonic-gate 					   char **ret_pw,
5660Sstevel@tonic-gate 					   char *msg_ret,
5672881Smp153739 					   unsigned int msg_len);
5680Sstevel@tonic-gate 
5690Sstevel@tonic-gate kadm5_ret_t    kadm5_free_principal_ent(void *server_handle,
5700Sstevel@tonic-gate 					kadm5_principal_ent_t
5710Sstevel@tonic-gate 					ent);
5720Sstevel@tonic-gate kadm5_ret_t    kadm5_free_policy_ent(void *server_handle,
5730Sstevel@tonic-gate 				     kadm5_policy_ent_t ent);
5740Sstevel@tonic-gate 
5750Sstevel@tonic-gate kadm5_ret_t    kadm5_get_principals(void *server_handle,
5760Sstevel@tonic-gate 				    char *exp, char ***princs,
5770Sstevel@tonic-gate 				    int *count);
5780Sstevel@tonic-gate 
5790Sstevel@tonic-gate kadm5_ret_t    kadm5_get_policies(void *server_handle,
5800Sstevel@tonic-gate 				  char *exp, char ***pols,
5810Sstevel@tonic-gate 				  int *count);
5820Sstevel@tonic-gate 
5832881Smp153739 #if USE_KADM5_API_VERSION > 1
5840Sstevel@tonic-gate kadm5_ret_t    kadm5_free_key_data(void *server_handle,
5850Sstevel@tonic-gate 				   krb5_int16 *n_key_data,
5860Sstevel@tonic-gate 				   krb5_key_data *key_data);
5872881Smp153739 #endif
5880Sstevel@tonic-gate 
5892881Smp153739 kadm5_ret_t    kadm5_free_name_list(void *server_handle, char **names,
5902881Smp153739 				    int count);
5912881Smp153739 
5924960Swillf krb5_error_code kadm5_init_krb5_context (krb5_context *);
5934960Swillf 
5942881Smp153739 #if USE_KADM5_API_VERSION == 1
5952881Smp153739 /*
5962881Smp153739  * OVSEC_KADM_API_VERSION_1 should be, if possible, compile-time
5972881Smp153739  * compatible with KADM5_API_VERSION_2.  Basically, this means we have
5982881Smp153739  * to continue to provide all the old ovsec_kadm function and symbol
5992881Smp153739  * names.
6002881Smp153739  */
6012881Smp153739 
6022881Smp153739 #define OVSEC_KADM_ACLFILE		"/krb5/ovsec_adm.acl"
6032881Smp153739 #define	OVSEC_KADM_WORDFILE		"/krb5/ovsec_adm.dict"
6042881Smp153739 
6052881Smp153739 #define OVSEC_KADM_ADMIN_SERVICE	"ovsec_adm/admin"
6062881Smp153739 #define OVSEC_KADM_CHANGEPW_SERVICE	"ovsec_adm/changepw"
6072881Smp153739 #define OVSEC_KADM_HIST_PRINCIPAL	"ovsec_adm/history"
6082881Smp153739 
6092881Smp153739 typedef krb5_principal	ovsec_kadm_princ_t;
6102881Smp153739 typedef krb5_keyblock	ovsec_kadm_keyblock;
6112881Smp153739 typedef	char		*ovsec_kadm_policy_t;
6122881Smp153739 typedef long		ovsec_kadm_ret_t;
6132881Smp153739 
6142881Smp153739 enum	ovsec_kadm_salttype { OVSEC_KADM_SALT_V4, OVSEC_KADM_SALT_NORMAL };
6152881Smp153739 enum	ovsec_kadm_saltmod  { OVSEC_KADM_MOD_KEEP, OVSEC_KADM_MOD_V4, OVSEC_KADM_MOD_NORMAL };
6162881Smp153739 
6172881Smp153739 #define OVSEC_KADM_PW_FIRST_PROMPT \
6182881Smp153739 	((char *) error_message(CHPASS_UTIL_NEW_PASSWORD_PROMPT))
6192881Smp153739 #define OVSEC_KADM_PW_SECOND_PROMPT \
6202881Smp153739 	((char *) error_message(CHPASS_UTIL_NEW_PASSWORD_AGAIN_PROMPT))
6212881Smp153739 
6222881Smp153739 /*
6232881Smp153739  * Successful return code
6242881Smp153739  */
6252881Smp153739 #define OVSEC_KADM_OK	0
6262881Smp153739 
6272881Smp153739 /*
6282881Smp153739  * Create/Modify masks
6292881Smp153739  */
6302881Smp153739 /* principal */
6312881Smp153739 #define OVSEC_KADM_PRINCIPAL		0x000001
6322881Smp153739 #define OVSEC_KADM_PRINC_EXPIRE_TIME	0x000002
6332881Smp153739 #define OVSEC_KADM_PW_EXPIRATION	0x000004
6342881Smp153739 #define OVSEC_KADM_LAST_PWD_CHANGE	0x000008
6352881Smp153739 #define OVSEC_KADM_ATTRIBUTES		0x000010
6362881Smp153739 #define OVSEC_KADM_MAX_LIFE		0x000020
6372881Smp153739 #define OVSEC_KADM_MOD_TIME		0x000040
6382881Smp153739 #define OVSEC_KADM_MOD_NAME		0x000080
6392881Smp153739 #define OVSEC_KADM_KVNO			0x000100
6402881Smp153739 #define OVSEC_KADM_MKVNO		0x000200
6412881Smp153739 #define OVSEC_KADM_AUX_ATTRIBUTES	0x000400
6422881Smp153739 #define OVSEC_KADM_POLICY		0x000800
6432881Smp153739 #define OVSEC_KADM_POLICY_CLR		0x001000
6442881Smp153739 /* policy */
6452881Smp153739 #define OVSEC_KADM_PW_MAX_LIFE		0x004000
6462881Smp153739 #define OVSEC_KADM_PW_MIN_LIFE		0x008000
6472881Smp153739 #define OVSEC_KADM_PW_MIN_LENGTH	0x010000
6482881Smp153739 #define OVSEC_KADM_PW_MIN_CLASSES	0x020000
6492881Smp153739 #define OVSEC_KADM_PW_HISTORY_NUM	0x040000
6502881Smp153739 #define OVSEC_KADM_REF_COUNT		0x080000
6512881Smp153739 
6522881Smp153739 /*
6532881Smp153739  * permission bits
6542881Smp153739  */
6552881Smp153739 #define OVSEC_KADM_PRIV_GET	0x01
6562881Smp153739 #define OVSEC_KADM_PRIV_ADD	0x02
6572881Smp153739 #define OVSEC_KADM_PRIV_MODIFY	0x04
6582881Smp153739 #define OVSEC_KADM_PRIV_DELETE	0x08
6592881Smp153739 
6602881Smp153739 /*
6612881Smp153739  * API versioning constants
6622881Smp153739  */
6632881Smp153739 #define OVSEC_KADM_MASK_BITS		0xffffff00
6642881Smp153739 
6652881Smp153739 #define OVSEC_KADM_STRUCT_VERSION_MASK	0x12345600
6662881Smp153739 #define OVSEC_KADM_STRUCT_VERSION_1	(OVSEC_KADM_STRUCT_VERSION_MASK|0x01)
6672881Smp153739 #define OVSEC_KADM_STRUCT_VERSION	OVSEC_KADM_STRUCT_VERSION_1
6682881Smp153739 
6692881Smp153739 #define OVSEC_KADM_API_VERSION_MASK	0x12345700
6702881Smp153739 #define OVSEC_KADM_API_VERSION_1	(OVSEC_KADM_API_VERSION_MASK|0x01)
6712881Smp153739 
6722881Smp153739 
6732881Smp153739 typedef struct _ovsec_kadm_principal_ent_t {
6742881Smp153739 	krb5_principal	principal;
6752881Smp153739 	krb5_timestamp	princ_expire_time;
6762881Smp153739 	krb5_timestamp	last_pwd_change;
6772881Smp153739 	krb5_timestamp	pw_expiration;
6782881Smp153739 	krb5_deltat	max_life;
6792881Smp153739 	krb5_principal	mod_name;
6802881Smp153739 	krb5_timestamp	mod_date;
6812881Smp153739 	krb5_flags	attributes;
6822881Smp153739 	krb5_kvno	kvno;
6832881Smp153739 	krb5_kvno	mkvno;
6842881Smp153739 	char		*policy;
6852881Smp153739 	long		aux_attributes;
6862881Smp153739 } ovsec_kadm_principal_ent_rec, *ovsec_kadm_principal_ent_t;
6872881Smp153739 
6882881Smp153739 typedef struct _ovsec_kadm_policy_ent_t {
6892881Smp153739 	char		*policy;
6902881Smp153739 	long		pw_min_life;
6912881Smp153739 	long		pw_max_life;
6922881Smp153739 	long		pw_min_length;
6932881Smp153739 	long		pw_min_classes;
6942881Smp153739 	long		pw_history_num;
6952881Smp153739 	long		policy_refcnt;
6962881Smp153739 } ovsec_kadm_policy_ent_rec, *ovsec_kadm_policy_ent_t;
6970Sstevel@tonic-gate 
6982881Smp153739 /*
6992881Smp153739  * functions
7002881Smp153739  */
7012881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_init(char *client_name, char *pass,
7022881Smp153739 				    char *service_name, char *realm,
7032881Smp153739 				    krb5_ui_4 struct_version,
7042881Smp153739 				    krb5_ui_4 api_version,
7054960Swillf 				    char **db_args,
7062881Smp153739 				    void **server_handle);
7072881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_init_with_password(char *client_name,
7082881Smp153739 						  char *pass,
7092881Smp153739 						  char *service_name,
7102881Smp153739 						  char *realm,
7112881Smp153739 						  krb5_ui_4 struct_version,
7122881Smp153739 						  krb5_ui_4 api_version,
7134960Swillf 						  char ** db_args,
7142881Smp153739 						  void **server_handle);
7152881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_init_with_skey(char *client_name,
7162881Smp153739 					      char *keytab,
7172881Smp153739 					      char *service_name,
7182881Smp153739 					      char *realm,
7192881Smp153739 					      krb5_ui_4 struct_version,
7202881Smp153739 					      krb5_ui_4 api_version,
7214960Swillf 					      char **db_args,
7222881Smp153739 					      void **server_handle);
7232881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_flush(void *server_handle);
7242881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_destroy(void *server_handle);
7252881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_create_principal(void *server_handle,
7262881Smp153739 						ovsec_kadm_principal_ent_t ent,
7272881Smp153739 						long mask, char *pass);
7282881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_delete_principal(void *server_handle,
7292881Smp153739 						krb5_principal principal);
7302881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_modify_principal(void *server_handle,
7312881Smp153739 						ovsec_kadm_principal_ent_t ent,
7322881Smp153739 						long mask);
7332881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_rename_principal(void *server_handle,
7342881Smp153739 						krb5_principal,krb5_principal);
7352881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_get_principal(void *server_handle,
7362881Smp153739 					     krb5_principal principal,
7372881Smp153739 					     ovsec_kadm_principal_ent_t *ent);
7382881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_chpass_principal(void *server_handle,
7392881Smp153739 						krb5_principal principal,
7402881Smp153739 						char *pass);
7412881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_randkey_principal(void *server_handle,
7422881Smp153739 						 krb5_principal principal,
7432881Smp153739 						 krb5_keyblock **keyblock);
7442881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_create_policy(void *server_handle,
7452881Smp153739 					     ovsec_kadm_policy_ent_t ent,
7462881Smp153739 					     long mask);
7472881Smp153739 /*
7482881Smp153739  * ovsec_kadm_create_policy_internal is not part of the supported,
7492881Smp153739  * exposed API.  It is available only in the server library, and you
7502881Smp153739  * shouldn't use it unless you know why it's there and how it's
7512881Smp153739  * different from ovsec_kadm_create_policy.
7522881Smp153739  */
7532881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_create_policy_internal(void *server_handle,
7542881Smp153739 						      ovsec_kadm_policy_ent_t
7552881Smp153739 						      entry, long mask);
7562881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_delete_policy(void *server_handle,
7572881Smp153739 					     ovsec_kadm_policy_t policy);
7582881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_modify_policy(void *server_handle,
7592881Smp153739 					     ovsec_kadm_policy_ent_t ent,
7602881Smp153739 					     long mask);
7612881Smp153739 /*
7622881Smp153739  * ovsec_kadm_modify_policy_internal is not part of the supported,
7632881Smp153739  * exposed API.  It is available only in the server library, and you
7642881Smp153739  * shouldn't use it unless you know why it's there and how it's
7652881Smp153739  * different from ovsec_kadm_modify_policy.
7662881Smp153739  */
7672881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_modify_policy_internal(void *server_handle,
7682881Smp153739 						      ovsec_kadm_policy_ent_t
7692881Smp153739 						      entry, long mask);
7702881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_get_policy(void *server_handle,
7712881Smp153739 					  ovsec_kadm_policy_t policy,
7722881Smp153739 					  ovsec_kadm_policy_ent_t *ent);
7732881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_get_privs(void *server_handle,
7742881Smp153739 					 long *privs);
7752881Smp153739 
7762881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_chpass_principal_util(void *server_handle,
7772881Smp153739 						     krb5_principal princ,
7782881Smp153739 						     char *new_pw,
7792881Smp153739 						     char **ret_pw,
7802881Smp153739 						     char *msg_ret);
7812881Smp153739 
7822881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_free_principal_ent(void *server_handle,
7832881Smp153739 						  ovsec_kadm_principal_ent_t
7842881Smp153739 						  ent);
7852881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_free_policy_ent(void *server_handle,
7862881Smp153739 					       ovsec_kadm_policy_ent_t ent);
7872881Smp153739 
7882881Smp153739 ovsec_kadm_ret_t ovsec_kadm_free_name_list(void *server_handle,
7892881Smp153739 					   char **names, int count);
7902881Smp153739 
7912881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_get_principals(void *server_handle,
7922881Smp153739 					      char *exp, char ***princs,
7932881Smp153739 					      int *count);
7942881Smp153739 
7952881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_get_policies(void *server_handle,
7962881Smp153739 					    char *exp, char ***pols,
7972881Smp153739 					    int *count);
7982881Smp153739 
7992881Smp153739 #define OVSEC_KADM_FAILURE KADM5_FAILURE
8002881Smp153739 #define OVSEC_KADM_AUTH_GET KADM5_AUTH_GET
8012881Smp153739 #define OVSEC_KADM_AUTH_ADD KADM5_AUTH_ADD
8022881Smp153739 #define OVSEC_KADM_AUTH_MODIFY KADM5_AUTH_MODIFY
8032881Smp153739 #define OVSEC_KADM_AUTH_DELETE KADM5_AUTH_DELETE
8042881Smp153739 #define OVSEC_KADM_AUTH_INSUFFICIENT KADM5_AUTH_INSUFFICIENT
8052881Smp153739 #define OVSEC_KADM_BAD_DB KADM5_BAD_DB
8062881Smp153739 #define OVSEC_KADM_DUP KADM5_DUP
8072881Smp153739 #define OVSEC_KADM_RPC_ERROR KADM5_RPC_ERROR
8082881Smp153739 #define OVSEC_KADM_NO_SRV KADM5_NO_SRV
8092881Smp153739 #define OVSEC_KADM_BAD_HIST_KEY KADM5_BAD_HIST_KEY
8102881Smp153739 #define OVSEC_KADM_NOT_INIT KADM5_NOT_INIT
8112881Smp153739 #define OVSEC_KADM_UNK_PRINC KADM5_UNK_PRINC
8122881Smp153739 #define OVSEC_KADM_UNK_POLICY KADM5_UNK_POLICY
8132881Smp153739 #define OVSEC_KADM_BAD_MASK KADM5_BAD_MASK
8142881Smp153739 #define OVSEC_KADM_BAD_CLASS KADM5_BAD_CLASS
8152881Smp153739 #define OVSEC_KADM_BAD_LENGTH KADM5_BAD_LENGTH
8162881Smp153739 #define OVSEC_KADM_BAD_POLICY KADM5_BAD_POLICY
8172881Smp153739 #define OVSEC_KADM_BAD_PRINCIPAL KADM5_BAD_PRINCIPAL
8182881Smp153739 #define OVSEC_KADM_BAD_AUX_ATTR KADM5_BAD_AUX_ATTR
8192881Smp153739 #define OVSEC_KADM_BAD_HISTORY KADM5_BAD_HISTORY
8202881Smp153739 #define OVSEC_KADM_BAD_MIN_PASS_LIFE KADM5_BAD_MIN_PASS_LIFE
8212881Smp153739 #define OVSEC_KADM_PASS_Q_TOOSHORT KADM5_PASS_Q_TOOSHORT
8222881Smp153739 #define OVSEC_KADM_PASS_Q_CLASS KADM5_PASS_Q_CLASS
8232881Smp153739 #define OVSEC_KADM_PASS_Q_DICT KADM5_PASS_Q_DICT
8242881Smp153739 #define OVSEC_KADM_PASS_REUSE KADM5_PASS_REUSE
8252881Smp153739 #define OVSEC_KADM_PASS_TOOSOON KADM5_PASS_TOOSOON
8262881Smp153739 #define OVSEC_KADM_POLICY_REF KADM5_POLICY_REF
8272881Smp153739 #define OVSEC_KADM_INIT KADM5_INIT
8282881Smp153739 #define OVSEC_KADM_BAD_PASSWORD KADM5_BAD_PASSWORD
8292881Smp153739 #define OVSEC_KADM_PROTECT_PRINCIPAL KADM5_PROTECT_PRINCIPAL
8302881Smp153739 #define OVSEC_KADM_BAD_SERVER_HANDLE KADM5_BAD_SERVER_HANDLE
8312881Smp153739 #define OVSEC_KADM_BAD_STRUCT_VERSION KADM5_BAD_STRUCT_VERSION
8322881Smp153739 #define OVSEC_KADM_OLD_STRUCT_VERSION KADM5_OLD_STRUCT_VERSION
8332881Smp153739 #define OVSEC_KADM_NEW_STRUCT_VERSION KADM5_NEW_STRUCT_VERSION
8342881Smp153739 #define OVSEC_KADM_BAD_API_VERSION KADM5_BAD_API_VERSION
8352881Smp153739 #define OVSEC_KADM_OLD_LIB_API_VERSION KADM5_OLD_LIB_API_VERSION
8362881Smp153739 #define OVSEC_KADM_OLD_SERVER_API_VERSION KADM5_OLD_SERVER_API_VERSION
8372881Smp153739 #define OVSEC_KADM_NEW_LIB_API_VERSION KADM5_NEW_LIB_API_VERSION
8382881Smp153739 #define OVSEC_KADM_NEW_SERVER_API_VERSION KADM5_NEW_SERVER_API_VERSION
8392881Smp153739 #define OVSEC_KADM_SECURE_PRINC_MISSING KADM5_SECURE_PRINC_MISSING
8402881Smp153739 #define OVSEC_KADM_NO_RENAME_SALT KADM5_NO_RENAME_SALT
8412881Smp153739 
8422881Smp153739 #endif /* USE_KADM5_API_VERSION == 1 */
8430Sstevel@tonic-gate 
8443998Ssemery #define MAXPRINCLEN 125
8453998Ssemery 
8463998Ssemery void trunc_name(size_t *len, char **dots);
8473998Ssemery 
8480Sstevel@tonic-gate krb5_chgpwd_prot _kadm5_get_kpasswd_protocol(void *server_handle);
8490Sstevel@tonic-gate kadm5_ret_t	kadm5_chpass_principal_v2(void *server_handle,
8500Sstevel@tonic-gate 					krb5_principal princ,
8510Sstevel@tonic-gate 					char *new_password,
8520Sstevel@tonic-gate 					kadm5_ret_t *srvr_rsp_code,
8530Sstevel@tonic-gate 					krb5_data *srvr_msg);
8540Sstevel@tonic-gate 
8550Sstevel@tonic-gate void handle_chpw(krb5_context context, int s, void *serverhandle,
8560Sstevel@tonic-gate 			kadm5_config_params *params);
8570Sstevel@tonic-gate 
8580Sstevel@tonic-gate #ifdef __cplusplus
8590Sstevel@tonic-gate }
8600Sstevel@tonic-gate #endif
8610Sstevel@tonic-gate 
8620Sstevel@tonic-gate #endif	/* __KADM5_ADMIN_H__ */
863