xref: /onnv-gate/usr/src/lib/krb5/kadm5/admin.h (revision 3998:e0575d2275f8)
10Sstevel@tonic-gate /*
2*3998Ssemery  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
30Sstevel@tonic-gate  * Use is subject to license terms.
40Sstevel@tonic-gate  */
50Sstevel@tonic-gate 
60Sstevel@tonic-gate #ifndef	__KADM5_ADMIN_H__
70Sstevel@tonic-gate #define	__KADM5_ADMIN_H__
80Sstevel@tonic-gate 
90Sstevel@tonic-gate #pragma ident	"%Z%%M%	%I%	%E% SMI"
100Sstevel@tonic-gate 
110Sstevel@tonic-gate #ifdef __cplusplus
120Sstevel@tonic-gate extern "C" {
130Sstevel@tonic-gate #endif
140Sstevel@tonic-gate 
150Sstevel@tonic-gate /*
160Sstevel@tonic-gate  * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
170Sstevel@tonic-gate  *
180Sstevel@tonic-gate  *	Openvision retains the copyright to derivative works of
190Sstevel@tonic-gate  *	this source code.  Do *NOT* create a derivative of this
200Sstevel@tonic-gate  *	source code before consulting with your legal department.
210Sstevel@tonic-gate  *	Do *NOT* integrate *ANY* of this source code into another
220Sstevel@tonic-gate  *	product before consulting with your legal department.
230Sstevel@tonic-gate  *
240Sstevel@tonic-gate  *	For further information, read the top-level Openvision
250Sstevel@tonic-gate  *	copyright which is contained in the top-level MIT Kerberos
260Sstevel@tonic-gate  *	copyright.
270Sstevel@tonic-gate  *
280Sstevel@tonic-gate  * WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING WARNING
290Sstevel@tonic-gate  *
300Sstevel@tonic-gate  */
312881Smp153739 /*
322881Smp153739  * lib/kadm5/admin.h
332881Smp153739  *
342881Smp153739  * Copyright 2001 by the Massachusetts Institute of Technology.
352881Smp153739  * All Rights Reserved.
362881Smp153739  *
372881Smp153739  * Export of this software from the United States of America may
382881Smp153739  *   require a specific license from the United States Government.
392881Smp153739  *   It is the responsibility of any person or organization contemplating
402881Smp153739  *   export to obtain such a license before exporting.
412881Smp153739  *
422881Smp153739  * WITHIN THAT CONSTRAINT, permission to use, copy, modify, and
432881Smp153739  * distribute this software and its documentation for any purpose and
442881Smp153739  * without fee is hereby granted, provided that the above copyright
452881Smp153739  * notice appear in all copies and that both that copyright notice and
462881Smp153739  * this permission notice appear in supporting documentation, and that
472881Smp153739  * the name of M.I.T. not be used in advertising or publicity pertaining
482881Smp153739  * to distribution of the software without specific, written prior
492881Smp153739  * permission.  Furthermore if you modify this software you must label
502881Smp153739  * your software as modified software and not distribute it in such a
512881Smp153739  * fashion that it might be confused with the original M.I.T. software.
522881Smp153739  * M.I.T. makes no representations about the suitability of
532881Smp153739  * this software for any purpose.  It is provided "as is" without express
542881Smp153739  * or implied warranty.
552881Smp153739  *
562881Smp153739  */
570Sstevel@tonic-gate /*
580Sstevel@tonic-gate  * Copyright 1993 OpenVision Technologies, Inc., All Rights Reserved
590Sstevel@tonic-gate  *
602881Smp153739  * $Header: /cvs/krbdev/krb5/src/lib/kadm5/admin.h,v 1.54 2004/08/21 02:31:09 tlyu Exp $
610Sstevel@tonic-gate  */
620Sstevel@tonic-gate 
630Sstevel@tonic-gate #include	<sys/types.h>
640Sstevel@tonic-gate #include	<rpc/types.h>
650Sstevel@tonic-gate #include	<rpc/rpc.h>
660Sstevel@tonic-gate #include	<krb5.h>
670Sstevel@tonic-gate #include	<k5-int.h>
680Sstevel@tonic-gate #include	<com_err.h>
690Sstevel@tonic-gate #include	<kadm5/kadm_err.h>
700Sstevel@tonic-gate #include	<kadm5/adb_err.h>
710Sstevel@tonic-gate #include	<kadm5/chpass_util_strings.h>
720Sstevel@tonic-gate 
732881Smp153739 #define KADM5_ADMIN_SERVICE_P	"kadmin@admin"
742881Smp153739 #define KADM5_ADMIN_SERVICE	"kadmin/admin"
752881Smp153739 #define KADM5_CHANGEPW_SERVICE_P	"kadmin@changepw"
762881Smp153739 #define KADM5_CHANGEPW_SERVICE	"kadmin/changepw"
772881Smp153739 #define KADM5_HIST_PRINCIPAL	"kadmin/history"
782881Smp153739 #define KADM5_ADMIN_HOST_SERVICE "kadmin"
792881Smp153739 #define KADM5_CHANGEPW_HOST_SERVICE "changepw"
802881Smp153739 #define KADM5_KIPROP_HOST_SERVICE "kiprop"
810Sstevel@tonic-gate 
820Sstevel@tonic-gate typedef krb5_principal	kadm5_princ_t;
830Sstevel@tonic-gate typedef	char		*kadm5_policy_t;
840Sstevel@tonic-gate typedef long		kadm5_ret_t;
850Sstevel@tonic-gate typedef int rpc_int32;
860Sstevel@tonic-gate typedef unsigned int rpc_u_int32;
870Sstevel@tonic-gate 
882881Smp153739 #define KADM5_PW_FIRST_PROMPT \
892881Smp153739 	(error_message(CHPASS_UTIL_NEW_PASSWORD_PROMPT))
902881Smp153739 #define KADM5_PW_SECOND_PROMPT \
912881Smp153739 	(error_message(CHPASS_UTIL_NEW_PASSWORD_AGAIN_PROMPT))
920Sstevel@tonic-gate 
930Sstevel@tonic-gate /*
942881Smp153739  * Successful return code
950Sstevel@tonic-gate  */
962881Smp153739 #define KADM5_OK	0
970Sstevel@tonic-gate 
980Sstevel@tonic-gate /*
990Sstevel@tonic-gate  * Field masks
1000Sstevel@tonic-gate  */
1010Sstevel@tonic-gate 
1020Sstevel@tonic-gate /* kadm5_principal_ent_t */
1032881Smp153739 #define KADM5_PRINCIPAL		0x000001
1042881Smp153739 #define KADM5_PRINC_EXPIRE_TIME	0x000002
1052881Smp153739 #define KADM5_PW_EXPIRATION	0x000004
1062881Smp153739 #define KADM5_LAST_PWD_CHANGE	0x000008
1072881Smp153739 #define KADM5_ATTRIBUTES	0x000010
1082881Smp153739 #define KADM5_MAX_LIFE		0x000020
1092881Smp153739 #define KADM5_MOD_TIME		0x000040
1102881Smp153739 #define KADM5_MOD_NAME		0x000080
1112881Smp153739 #define KADM5_KVNO		0x000100
1122881Smp153739 #define KADM5_MKVNO		0x000200
1132881Smp153739 #define KADM5_AUX_ATTRIBUTES	0x000400
1142881Smp153739 #define KADM5_POLICY		0x000800
1152881Smp153739 #define KADM5_POLICY_CLR	0x001000
1160Sstevel@tonic-gate /* version 2 masks */
1172881Smp153739 #define KADM5_MAX_RLIFE		0x002000
1182881Smp153739 #define KADM5_LAST_SUCCESS	0x004000
1192881Smp153739 #define KADM5_LAST_FAILED	0x008000
1202881Smp153739 #define KADM5_FAIL_AUTH_COUNT	0x010000
1212881Smp153739 #define KADM5_KEY_DATA		0x020000
1222881Smp153739 #define KADM5_TL_DATA		0x040000
1230Sstevel@tonic-gate /* all but KEY_DATA and TL_DATA */
1242881Smp153739 #define KADM5_PRINCIPAL_NORMAL_MASK 0x01ffff
1250Sstevel@tonic-gate 
1260Sstevel@tonic-gate /* kadm5_policy_ent_t */
1272881Smp153739 #define KADM5_PW_MAX_LIFE	0x004000
1282881Smp153739 #define KADM5_PW_MIN_LIFE	0x008000
1292881Smp153739 #define KADM5_PW_MIN_LENGTH	0x010000
1302881Smp153739 #define KADM5_PW_MIN_CLASSES	0x020000
1312881Smp153739 #define KADM5_PW_HISTORY_NUM	0x040000
1322881Smp153739 #define KADM5_REF_COUNT		0x080000
1330Sstevel@tonic-gate 
1340Sstevel@tonic-gate /* kadm5_config_params */
1350Sstevel@tonic-gate #define KADM5_CONFIG_REALM		0x0000001
1360Sstevel@tonic-gate #define KADM5_CONFIG_DBNAME		0x0000002
1370Sstevel@tonic-gate #define KADM5_CONFIG_MKEY_NAME		0x0000004
1380Sstevel@tonic-gate #define KADM5_CONFIG_MAX_LIFE		0x0000008
1390Sstevel@tonic-gate #define KADM5_CONFIG_MAX_RLIFE		0x0000010
1400Sstevel@tonic-gate #define KADM5_CONFIG_EXPIRATION		0x0000020
1410Sstevel@tonic-gate #define KADM5_CONFIG_FLAGS		0x0000040
1420Sstevel@tonic-gate #define KADM5_CONFIG_ADMIN_KEYTAB	0x0000080
1430Sstevel@tonic-gate #define KADM5_CONFIG_STASH_FILE		0x0000100
1440Sstevel@tonic-gate #define KADM5_CONFIG_ENCTYPE		0x0000200
1450Sstevel@tonic-gate #define KADM5_CONFIG_ADBNAME		0x0000400
1460Sstevel@tonic-gate #define KADM5_CONFIG_ADB_LOCKFILE	0x0000800
1470Sstevel@tonic-gate #define KADM5_CONFIG_PROFILE		0x0001000
1480Sstevel@tonic-gate #define KADM5_CONFIG_ACL_FILE		0x0002000
1490Sstevel@tonic-gate #define KADM5_CONFIG_KADMIND_PORT	0x0004000
1500Sstevel@tonic-gate #define KADM5_CONFIG_ENCTYPES		0x0008000
1510Sstevel@tonic-gate #define KADM5_CONFIG_ADMIN_SERVER	0x0010000
1520Sstevel@tonic-gate #define KADM5_CONFIG_DICT_FILE		0x0020000
1530Sstevel@tonic-gate #define KADM5_CONFIG_MKEY_FROM_KBD	0x0040000
1540Sstevel@tonic-gate #define KADM5_CONFIG_KPASSWD_PORT	0x0080000
1550Sstevel@tonic-gate #define KADM5_CONFIG_KPASSWD_SERVER	0x0100000
1560Sstevel@tonic-gate #define	KADM5_CONFIG_KPASSWD_PROTOCOL	0x0200000
1570Sstevel@tonic-gate #define	KADM5_CONFIG_IPROP_ENABLED	0x0400000
1580Sstevel@tonic-gate #define	KADM5_CONFIG_ULOG_SIZE		0x0800000
1590Sstevel@tonic-gate #define	KADM5_CONFIG_POLL_TIME		0x1000000
1600Sstevel@tonic-gate 
1610Sstevel@tonic-gate /* password change constants */
1620Sstevel@tonic-gate #define	KRB5_KPASSWD_SUCCESS		0
1630Sstevel@tonic-gate #define	KRB5_KPASSWD_MALFORMED		1
1640Sstevel@tonic-gate #define	KRB5_KPASSWD_HARDERROR		2
1650Sstevel@tonic-gate #define	KRB5_KPASSWD_AUTHERROR		3
1660Sstevel@tonic-gate #define	KRB5_KPASSWD_SOFTERROR		4
1670Sstevel@tonic-gate #define	KRB5_KPASSWD_ACCESSDENIED	5
1680Sstevel@tonic-gate #define	KRB5_KPASSWD_BAD_VERSION	6
1690Sstevel@tonic-gate #define	KRB5_KPASSWD_INITIAL_FLAG_NEEDED	7
1700Sstevel@tonic-gate #define	KRB5_KPASSWD_POLICY_REJECT	8
1710Sstevel@tonic-gate #define	KRB5_KPASSWD_BAD_PRINCIPAL	9
1720Sstevel@tonic-gate #define	KRB5_KPASSWD_ETYPE_NOSUPP	10
1730Sstevel@tonic-gate 
1740Sstevel@tonic-gate /*
1750Sstevel@tonic-gate  * permission bits
1760Sstevel@tonic-gate  */
1772881Smp153739 #define KADM5_PRIV_GET		0x01
1782881Smp153739 #define KADM5_PRIV_ADD		0x02
1792881Smp153739 #define KADM5_PRIV_MODIFY	0x04
1802881Smp153739 #define KADM5_PRIV_DELETE	0x08
1810Sstevel@tonic-gate 
1820Sstevel@tonic-gate /*
1830Sstevel@tonic-gate  * API versioning constants
1840Sstevel@tonic-gate  */
1852881Smp153739 #define KADM5_MASK_BITS		0xffffff00
1860Sstevel@tonic-gate 
1872881Smp153739 #define KADM5_STRUCT_VERSION_MASK	0x12345600
1882881Smp153739 #define KADM5_STRUCT_VERSION_1	(KADM5_STRUCT_VERSION_MASK|0x01)
1892881Smp153739 #define KADM5_STRUCT_VERSION	KADM5_STRUCT_VERSION_1
1900Sstevel@tonic-gate 
1912881Smp153739 #define KADM5_API_VERSION_MASK	0x12345700
1922881Smp153739 #define KADM5_API_VERSION_1	(KADM5_API_VERSION_MASK|0x01)
1932881Smp153739 #define KADM5_API_VERSION_2	(KADM5_API_VERSION_MASK|0x02)
1940Sstevel@tonic-gate 
1950Sstevel@tonic-gate #ifdef KRB5_DNS_LOOKUP
1960Sstevel@tonic-gate /*
1970Sstevel@tonic-gate  * Name length constants for DNS lookups
1980Sstevel@tonic-gate  */
1990Sstevel@tonic-gate #define	MAX_HOST_NAMELEN 256
2000Sstevel@tonic-gate #define	MAX_DNS_NAMELEN (15*(MAX_HOST_NAMELEN + 1)+1)
2010Sstevel@tonic-gate #endif /* KRB5_DNS_LOOKUP */
2020Sstevel@tonic-gate 
2030Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v2 {
2040Sstevel@tonic-gate 	krb5_principal	principal;
2050Sstevel@tonic-gate 	krb5_timestamp	princ_expire_time;
2060Sstevel@tonic-gate 	krb5_timestamp	last_pwd_change;
2070Sstevel@tonic-gate 	krb5_timestamp	pw_expiration;
2080Sstevel@tonic-gate 	krb5_deltat	max_life;
2090Sstevel@tonic-gate 	krb5_principal	mod_name;
2100Sstevel@tonic-gate 	krb5_timestamp	mod_date;
2110Sstevel@tonic-gate 	krb5_flags	attributes;
2120Sstevel@tonic-gate 	krb5_kvno	kvno;
2130Sstevel@tonic-gate 	krb5_kvno	mkvno;
2140Sstevel@tonic-gate 	char		*policy;
2150Sstevel@tonic-gate 	long		aux_attributes;
2160Sstevel@tonic-gate 
2170Sstevel@tonic-gate 	/* version 2 fields */
2180Sstevel@tonic-gate 	krb5_deltat max_renewable_life;
2192881Smp153739         krb5_timestamp last_success;
2202881Smp153739         krb5_timestamp last_failed;
2212881Smp153739         krb5_kvno fail_auth_count;
2220Sstevel@tonic-gate 	krb5_int16 n_key_data;
2230Sstevel@tonic-gate 	krb5_int16 n_tl_data;
2242881Smp153739         krb5_tl_data *tl_data;
2250Sstevel@tonic-gate 	krb5_key_data *key_data;
2260Sstevel@tonic-gate } kadm5_principal_ent_rec_v2, *kadm5_principal_ent_t_v2;
2270Sstevel@tonic-gate 
2280Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v1 {
2290Sstevel@tonic-gate 	krb5_principal	principal;
2300Sstevel@tonic-gate 	krb5_timestamp	princ_expire_time;
2310Sstevel@tonic-gate 	krb5_timestamp	last_pwd_change;
2320Sstevel@tonic-gate 	krb5_timestamp	pw_expiration;
2330Sstevel@tonic-gate 	krb5_deltat	max_life;
2340Sstevel@tonic-gate 	krb5_principal	mod_name;
2350Sstevel@tonic-gate 	krb5_timestamp	mod_date;
2360Sstevel@tonic-gate 	krb5_flags	attributes;
2370Sstevel@tonic-gate 	krb5_kvno	kvno;
2380Sstevel@tonic-gate 	krb5_kvno	mkvno;
2390Sstevel@tonic-gate 	char		*policy;
2400Sstevel@tonic-gate 	long		aux_attributes;
2410Sstevel@tonic-gate } kadm5_principal_ent_rec_v1, *kadm5_principal_ent_t_v1;
2420Sstevel@tonic-gate 
2432881Smp153739 #if USE_KADM5_API_VERSION == 1
2442881Smp153739 typedef struct _kadm5_principal_ent_t_v1
2452881Smp153739      kadm5_principal_ent_rec, *kadm5_principal_ent_t;
2462881Smp153739 #else
2470Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v2
2482881Smp153739      kadm5_principal_ent_rec, *kadm5_principal_ent_t;
2492881Smp153739 #endif
2500Sstevel@tonic-gate 
2510Sstevel@tonic-gate typedef struct _kadm5_policy_ent_t {
2520Sstevel@tonic-gate 	char		*policy;
2530Sstevel@tonic-gate 	long		pw_min_life;
2540Sstevel@tonic-gate 	long		pw_max_life;
2550Sstevel@tonic-gate 	long		pw_min_length;
2560Sstevel@tonic-gate 	long		pw_min_classes;
2570Sstevel@tonic-gate 	long		pw_history_num;
2580Sstevel@tonic-gate 	long		policy_refcnt;
2590Sstevel@tonic-gate } kadm5_policy_ent_rec, *kadm5_policy_ent_t;
2600Sstevel@tonic-gate 
2610Sstevel@tonic-gate typedef struct __krb5_key_salt_tuple {
2620Sstevel@tonic-gate      krb5_enctype	ks_enctype;
2630Sstevel@tonic-gate      krb5_int32		ks_salttype;
2640Sstevel@tonic-gate } krb5_key_salt_tuple;
2650Sstevel@tonic-gate 
2660Sstevel@tonic-gate /*
2670Sstevel@tonic-gate  * New types to indicate which protocol to use when sending
2680Sstevel@tonic-gate  * password change requests
2690Sstevel@tonic-gate  */
2700Sstevel@tonic-gate typedef enum {
2710Sstevel@tonic-gate 	KRB5_CHGPWD_RPCSEC,
2720Sstevel@tonic-gate 	KRB5_CHGPWD_CHANGEPW_V2
2730Sstevel@tonic-gate } krb5_chgpwd_prot;
2740Sstevel@tonic-gate 
2750Sstevel@tonic-gate /*
2760Sstevel@tonic-gate  * Data structure returned by kadm5_get_config_params()
2770Sstevel@tonic-gate  */
2780Sstevel@tonic-gate typedef struct _kadm5_config_params {
2792881Smp153739      long		mask;
2802881Smp153739      char *		realm;
2812881Smp153739      char *		profile;
2822881Smp153739      int		kadmind_port;
2832881Smp153739      int		kpasswd_port;
2842881Smp153739 
2852881Smp153739      char *		admin_server;
2862881Smp153739 
2872881Smp153739      char *		dbname;
2882881Smp153739      char *		admin_dbname;
2892881Smp153739      char *		admin_lockfile;
2902881Smp153739      char *		admin_keytab;
2912881Smp153739      char *		acl_file;
2922881Smp153739      char *		dict_file;
2932881Smp153739 
2942881Smp153739      int		mkey_from_kbd;
2952881Smp153739      char *		stash_file;
2962881Smp153739      char *		mkey_name;
2972881Smp153739      krb5_enctype	enctype;
2982881Smp153739      krb5_deltat	max_life;
2992881Smp153739      krb5_deltat	max_rlife;
3002881Smp153739      krb5_timestamp	expiration;
3012881Smp153739      krb5_flags		flags;
3022881Smp153739      krb5_key_salt_tuple *keysalts;
3032881Smp153739      krb5_int32		num_keysalts;
3042881Smp153739      char 			*kpasswd_server;
3052881Smp153739 
3062881Smp153739      krb5_chgpwd_prot	kpasswd_protocol;
3072881Smp153739      bool_t			iprop_enabled;
3082881Smp153739      int			iprop_ulogsize;
3092881Smp153739      char			*iprop_polltime;
3100Sstevel@tonic-gate } kadm5_config_params;
3110Sstevel@tonic-gate 
3120Sstevel@tonic-gate /***********************************************************************
3130Sstevel@tonic-gate  * This is the old krb5_realm_read_params, which I mutated into
3140Sstevel@tonic-gate  * kadm5_get_config_params but which old code (kdb5_* and krb5kdc)
3150Sstevel@tonic-gate  * still uses.
3160Sstevel@tonic-gate  ***********************************************************************/
3170Sstevel@tonic-gate 
3180Sstevel@tonic-gate /*
3190Sstevel@tonic-gate  * Data structure returned by krb5_read_realm_params()
3200Sstevel@tonic-gate  */
3210Sstevel@tonic-gate typedef struct __krb5_realm_params {
3222881Smp153739     char *		realm_profile;
3232881Smp153739     char *		realm_dbname;
3242881Smp153739     char *		realm_mkey_name;
3252881Smp153739     char *		realm_stash_file;
3262881Smp153739     char *		realm_kdc_ports;
3272881Smp153739     char *		realm_kdc_tcp_ports;
3282881Smp153739     char *		realm_acl_file;
3290Sstevel@tonic-gate     krb5_int32		realm_kadmind_port;
3300Sstevel@tonic-gate     krb5_enctype	realm_enctype;
3310Sstevel@tonic-gate     krb5_deltat		realm_max_life;
3320Sstevel@tonic-gate     krb5_deltat		realm_max_rlife;
3330Sstevel@tonic-gate     krb5_timestamp	realm_expiration;
3340Sstevel@tonic-gate     krb5_flags		realm_flags;
3350Sstevel@tonic-gate     krb5_key_salt_tuple	*realm_keysalts;
3362881Smp153739     unsigned int	realm_reject_bad_transit:1;
3370Sstevel@tonic-gate     unsigned int	realm_kadmind_port_valid:1;
3380Sstevel@tonic-gate     unsigned int	realm_enctype_valid:1;
3390Sstevel@tonic-gate     unsigned int	realm_max_life_valid:1;
3400Sstevel@tonic-gate     unsigned int	realm_max_rlife_valid:1;
3410Sstevel@tonic-gate     unsigned int	realm_expiration_valid:1;
3420Sstevel@tonic-gate     unsigned int	realm_flags_valid:1;
3432881Smp153739     unsigned int	realm_reject_bad_transit_valid:1;
3440Sstevel@tonic-gate     krb5_int32		realm_num_keysalts;
3450Sstevel@tonic-gate } krb5_realm_params;
3460Sstevel@tonic-gate 
3470Sstevel@tonic-gate /*
3480Sstevel@tonic-gate  * functions
3490Sstevel@tonic-gate  */
3500Sstevel@tonic-gate 
3510Sstevel@tonic-gate kadm5_ret_t
3520Sstevel@tonic-gate kadm5_get_adm_host_srv_name(krb5_context context,
3532881Smp153739                            const char *realm, char **host_service_name);
3540Sstevel@tonic-gate 
3550Sstevel@tonic-gate kadm5_ret_t
3560Sstevel@tonic-gate kadm5_get_cpw_host_srv_name(krb5_context context,
3572881Smp153739                            const char *realm, char **host_service_name);
3580Sstevel@tonic-gate 
3592881Smp153739 #if USE_KADM5_API_VERSION > 1
3600Sstevel@tonic-gate krb5_error_code kadm5_get_config_params(krb5_context context,
3610Sstevel@tonic-gate 					char *kdcprofile, char *kdcenv,
3620Sstevel@tonic-gate 					kadm5_config_params *params_in,
3630Sstevel@tonic-gate 					kadm5_config_params *params_out);
3640Sstevel@tonic-gate 
3652881Smp153739 krb5_error_code kadm5_free_config_params(krb5_context context,
3662881Smp153739 					 kadm5_config_params *params);
3670Sstevel@tonic-gate 
3680Sstevel@tonic-gate krb5_error_code kadm5_free_realm_params(krb5_context kcontext,
3690Sstevel@tonic-gate 					kadm5_config_params *params);
3700Sstevel@tonic-gate 
3712881Smp153739 krb5_error_code kadm5_get_admin_service_name(krb5_context, char *,
3722881Smp153739 					     char *, size_t);
3732881Smp153739 #endif
3742881Smp153739 
3750Sstevel@tonic-gate kadm5_ret_t    kadm5_init(char *client_name, char *pass,
3762881Smp153739 			  char *service_name,
3772881Smp153739 #if USE_KADM5_API_VERSION == 1
3782881Smp153739 			  char *realm,
3792881Smp153739 #else
3802881Smp153739 			  kadm5_config_params *params,
3812881Smp153739 #endif
3822881Smp153739 			  krb5_ui_4 struct_version,
3832881Smp153739 			  krb5_ui_4 api_version,
3842881Smp153739 			  void **server_handle);
3850Sstevel@tonic-gate kadm5_ret_t    kadm5_init_with_password(char *client_name,
3860Sstevel@tonic-gate 					char *pass,
3870Sstevel@tonic-gate 					char *service_name,
3882881Smp153739 #if USE_KADM5_API_VERSION == 1
3892881Smp153739 					char *realm,
3902881Smp153739 #else
3910Sstevel@tonic-gate 					kadm5_config_params *params,
3922881Smp153739 #endif
3930Sstevel@tonic-gate 					krb5_ui_4 struct_version,
3940Sstevel@tonic-gate 					krb5_ui_4 api_version,
3950Sstevel@tonic-gate 					void **server_handle);
3960Sstevel@tonic-gate kadm5_ret_t    kadm5_init_with_skey(char *client_name,
3970Sstevel@tonic-gate 				    char *keytab,
3980Sstevel@tonic-gate 				    char *service_name,
3992881Smp153739 #if USE_KADM5_API_VERSION == 1
4002881Smp153739 				    char *realm,
4012881Smp153739 #else
4020Sstevel@tonic-gate 				    kadm5_config_params *params,
4032881Smp153739 #endif
4040Sstevel@tonic-gate 				    krb5_ui_4 struct_version,
4050Sstevel@tonic-gate 				    krb5_ui_4 api_version,
4060Sstevel@tonic-gate 				    void **server_handle);
4072881Smp153739 #if USE_KADM5_API_VERSION > 1
4080Sstevel@tonic-gate kadm5_ret_t    kadm5_init_with_creds(char *client_name,
4090Sstevel@tonic-gate 				     krb5_ccache cc,
4100Sstevel@tonic-gate 				     char *service_name,
4110Sstevel@tonic-gate 				     kadm5_config_params *params,
4120Sstevel@tonic-gate 				     krb5_ui_4 struct_version,
4130Sstevel@tonic-gate 				     krb5_ui_4 api_version,
4140Sstevel@tonic-gate 				     void **server_handle);
4152881Smp153739 #endif
4162881Smp153739 kadm5_ret_t    kadm5_lock(void *server_handle);
4172881Smp153739 kadm5_ret_t    kadm5_unlock(void *server_handle);
4180Sstevel@tonic-gate kadm5_ret_t    kadm5_flush(void *server_handle);
4190Sstevel@tonic-gate kadm5_ret_t    kadm5_destroy(void *server_handle);
4200Sstevel@tonic-gate kadm5_ret_t    kadm5_create_principal(void *server_handle,
4210Sstevel@tonic-gate 				      kadm5_principal_ent_t ent,
4220Sstevel@tonic-gate 				      long mask, char *pass);
4230Sstevel@tonic-gate kadm5_ret_t    kadm5_create_principal_3(void *server_handle,
4240Sstevel@tonic-gate 					kadm5_principal_ent_t ent,
4250Sstevel@tonic-gate 					long mask,
4260Sstevel@tonic-gate 					int n_ks_tuple,
4270Sstevel@tonic-gate 					krb5_key_salt_tuple *ks_tuple,
4280Sstevel@tonic-gate 					char *pass);
4290Sstevel@tonic-gate kadm5_ret_t    kadm5_delete_principal(void *server_handle,
4300Sstevel@tonic-gate 				      krb5_principal principal);
4310Sstevel@tonic-gate kadm5_ret_t    kadm5_modify_principal(void *server_handle,
4320Sstevel@tonic-gate 				      kadm5_principal_ent_t ent,
4330Sstevel@tonic-gate 				      long mask);
4340Sstevel@tonic-gate kadm5_ret_t    kadm5_rename_principal(void *server_handle,
4352881Smp153739 				      krb5_principal,krb5_principal);
4362881Smp153739 #if USE_KADM5_API_VERSION == 1
4370Sstevel@tonic-gate kadm5_ret_t    kadm5_get_principal(void *server_handle,
4382881Smp153739 				   krb5_principal principal,
4392881Smp153739 				   kadm5_principal_ent_t *ent);
4402881Smp153739 #else
4412881Smp153739 kadm5_ret_t    kadm5_get_principal(void *server_handle,
4422881Smp153739 				   krb5_principal principal,
4432881Smp153739 				   kadm5_principal_ent_t ent,
4442881Smp153739 				   long mask);
4452881Smp153739 #endif
4460Sstevel@tonic-gate kadm5_ret_t    kadm5_chpass_principal(void *server_handle,
4470Sstevel@tonic-gate 				      krb5_principal principal,
4480Sstevel@tonic-gate 				      char *pass);
4490Sstevel@tonic-gate kadm5_ret_t    kadm5_chpass_principal_3(void *server_handle,
4500Sstevel@tonic-gate 					krb5_principal principal,
4510Sstevel@tonic-gate 					krb5_boolean keepold,
4520Sstevel@tonic-gate 					int n_ks_tuple,
4530Sstevel@tonic-gate 					krb5_key_salt_tuple *ks_tuple,
4540Sstevel@tonic-gate 					char *pass);
4552881Smp153739 #if USE_KADM5_API_VERSION == 1
4562881Smp153739 kadm5_ret_t    kadm5_randkey_principal(void *server_handle,
4572881Smp153739 				       krb5_principal principal,
4582881Smp153739 				       krb5_keyblock **keyblock);
4592881Smp153739 #else
4600Sstevel@tonic-gate 
4610Sstevel@tonic-gate /*
4620Sstevel@tonic-gate  * Solaris Kerberos:
4630Sstevel@tonic-gate  * this routine is only implemented in the client library.
4640Sstevel@tonic-gate  */
4650Sstevel@tonic-gate kadm5_ret_t    kadm5_randkey_principal_old(void *server_handle,
4660Sstevel@tonic-gate 				    krb5_principal principal,
4670Sstevel@tonic-gate 				    krb5_keyblock **keyblocks,
4680Sstevel@tonic-gate 				    int *n_keys);
4690Sstevel@tonic-gate 
4700Sstevel@tonic-gate kadm5_ret_t    kadm5_randkey_principal(void *server_handle,
4710Sstevel@tonic-gate 				       krb5_principal principal,
4720Sstevel@tonic-gate 				       krb5_keyblock **keyblocks,
4730Sstevel@tonic-gate 				       int *n_keys);
4740Sstevel@tonic-gate kadm5_ret_t    kadm5_randkey_principal_3(void *server_handle,
4750Sstevel@tonic-gate 					 krb5_principal principal,
4760Sstevel@tonic-gate 					 krb5_boolean keepold,
4770Sstevel@tonic-gate 					 int n_ks_tuple,
4780Sstevel@tonic-gate 					 krb5_key_salt_tuple *ks_tuple,
4790Sstevel@tonic-gate 					 krb5_keyblock **keyblocks,
4800Sstevel@tonic-gate 					 int *n_keys);
4812881Smp153739 #endif
4820Sstevel@tonic-gate kadm5_ret_t    kadm5_setv4key_principal(void *server_handle,
4830Sstevel@tonic-gate 					krb5_principal principal,
4840Sstevel@tonic-gate 					krb5_keyblock *keyblock);
4850Sstevel@tonic-gate 
4860Sstevel@tonic-gate kadm5_ret_t    kadm5_setkey_principal(void *server_handle,
4870Sstevel@tonic-gate 				      krb5_principal principal,
4880Sstevel@tonic-gate 				      krb5_keyblock *keyblocks,
4890Sstevel@tonic-gate 				      int n_keys);
4900Sstevel@tonic-gate 
4910Sstevel@tonic-gate kadm5_ret_t    kadm5_setkey_principal_3(void *server_handle,
4920Sstevel@tonic-gate 					krb5_principal principal,
4930Sstevel@tonic-gate 					krb5_boolean keepold,
4940Sstevel@tonic-gate 					int n_ks_tuple,
4950Sstevel@tonic-gate 					krb5_key_salt_tuple *ks_tuple,
4960Sstevel@tonic-gate 					krb5_keyblock *keyblocks,
4970Sstevel@tonic-gate 					int n_keys);
4980Sstevel@tonic-gate 
4992881Smp153739 kadm5_ret_t    kadm5_decrypt_key(void *server_handle,
5002881Smp153739 				 kadm5_principal_ent_t entry, krb5_int32
5012881Smp153739 				 ktype, krb5_int32 stype, krb5_int32
5022881Smp153739 				 kvno, krb5_keyblock *keyblock,
5032881Smp153739 				 krb5_keysalt *keysalt, int *kvnop);
5042881Smp153739 
5050Sstevel@tonic-gate kadm5_ret_t    kadm5_create_policy(void *server_handle,
5060Sstevel@tonic-gate 				   kadm5_policy_ent_t ent,
5070Sstevel@tonic-gate 				   long mask);
5080Sstevel@tonic-gate /*
5090Sstevel@tonic-gate  * kadm5_create_policy_internal is not part of the supported,
5100Sstevel@tonic-gate  * exposed API.  It is available only in the server library, and you
5110Sstevel@tonic-gate  * shouldn't use it unless you know why it's there and how it's
5120Sstevel@tonic-gate  * different from kadm5_create_policy.
5130Sstevel@tonic-gate  */
5140Sstevel@tonic-gate kadm5_ret_t    kadm5_create_policy_internal(void *server_handle,
5150Sstevel@tonic-gate 					    kadm5_policy_ent_t
5160Sstevel@tonic-gate 					    entry, long mask);
5170Sstevel@tonic-gate kadm5_ret_t    kadm5_delete_policy(void *server_handle,
5180Sstevel@tonic-gate 				   kadm5_policy_t policy);
5190Sstevel@tonic-gate kadm5_ret_t    kadm5_modify_policy(void *server_handle,
5200Sstevel@tonic-gate 				   kadm5_policy_ent_t ent,
5210Sstevel@tonic-gate 				   long mask);
5220Sstevel@tonic-gate /*
5230Sstevel@tonic-gate  * kadm5_modify_policy_internal is not part of the supported,
5240Sstevel@tonic-gate  * exposed API.  It is available only in the server library, and you
5250Sstevel@tonic-gate  * shouldn't use it unless you know why it's there and how it's
5260Sstevel@tonic-gate  * different from kadm5_modify_policy.
5270Sstevel@tonic-gate  */
5280Sstevel@tonic-gate kadm5_ret_t    kadm5_modify_policy_internal(void *server_handle,
5290Sstevel@tonic-gate 					    kadm5_policy_ent_t
5300Sstevel@tonic-gate 					    entry, long mask);
5312881Smp153739 #if USE_KADM5_API_VERSION == 1
5322881Smp153739 kadm5_ret_t    kadm5_get_policy(void *server_handle,
5332881Smp153739 				kadm5_policy_t policy,
5342881Smp153739 				kadm5_policy_ent_t *ent);
5352881Smp153739 #else
5360Sstevel@tonic-gate kadm5_ret_t    kadm5_get_policy(void *server_handle,
5370Sstevel@tonic-gate 				kadm5_policy_t policy,
5380Sstevel@tonic-gate 				kadm5_policy_ent_t ent);
5392881Smp153739 #endif
5400Sstevel@tonic-gate kadm5_ret_t    kadm5_get_privs(void *server_handle,
5412881Smp153739 			       long *privs);
5420Sstevel@tonic-gate 
5430Sstevel@tonic-gate kadm5_ret_t    kadm5_chpass_principal_util(void *server_handle,
5440Sstevel@tonic-gate 					   krb5_principal princ,
5450Sstevel@tonic-gate 					   char *new_pw,
5460Sstevel@tonic-gate 					   char **ret_pw,
5470Sstevel@tonic-gate 					   char *msg_ret,
5482881Smp153739 					   unsigned int msg_len);
5490Sstevel@tonic-gate 
5500Sstevel@tonic-gate kadm5_ret_t    kadm5_free_principal_ent(void *server_handle,
5510Sstevel@tonic-gate 					kadm5_principal_ent_t
5520Sstevel@tonic-gate 					ent);
5530Sstevel@tonic-gate kadm5_ret_t    kadm5_free_policy_ent(void *server_handle,
5540Sstevel@tonic-gate 				     kadm5_policy_ent_t ent);
5550Sstevel@tonic-gate 
5560Sstevel@tonic-gate kadm5_ret_t    kadm5_get_principals(void *server_handle,
5570Sstevel@tonic-gate 				    char *exp, char ***princs,
5580Sstevel@tonic-gate 				    int *count);
5590Sstevel@tonic-gate 
5600Sstevel@tonic-gate kadm5_ret_t    kadm5_get_policies(void *server_handle,
5610Sstevel@tonic-gate 				  char *exp, char ***pols,
5620Sstevel@tonic-gate 				  int *count);
5630Sstevel@tonic-gate 
5642881Smp153739 #if USE_KADM5_API_VERSION > 1
5650Sstevel@tonic-gate kadm5_ret_t    kadm5_free_key_data(void *server_handle,
5660Sstevel@tonic-gate 				   krb5_int16 *n_key_data,
5670Sstevel@tonic-gate 				   krb5_key_data *key_data);
5682881Smp153739 #endif
5690Sstevel@tonic-gate 
5702881Smp153739 kadm5_ret_t    kadm5_free_name_list(void *server_handle, char **names,
5712881Smp153739 				    int count);
5722881Smp153739 
5732881Smp153739 #if USE_KADM5_API_VERSION == 1
5742881Smp153739 /*
5752881Smp153739  * OVSEC_KADM_API_VERSION_1 should be, if possible, compile-time
5762881Smp153739  * compatible with KADM5_API_VERSION_2.  Basically, this means we have
5772881Smp153739  * to continue to provide all the old ovsec_kadm function and symbol
5782881Smp153739  * names.
5792881Smp153739  */
5802881Smp153739 
5812881Smp153739 #define OVSEC_KADM_ACLFILE		"/krb5/ovsec_adm.acl"
5822881Smp153739 #define	OVSEC_KADM_WORDFILE		"/krb5/ovsec_adm.dict"
5832881Smp153739 
5842881Smp153739 #define OVSEC_KADM_ADMIN_SERVICE	"ovsec_adm/admin"
5852881Smp153739 #define OVSEC_KADM_CHANGEPW_SERVICE	"ovsec_adm/changepw"
5862881Smp153739 #define OVSEC_KADM_HIST_PRINCIPAL	"ovsec_adm/history"
5872881Smp153739 
5882881Smp153739 typedef krb5_principal	ovsec_kadm_princ_t;
5892881Smp153739 typedef krb5_keyblock	ovsec_kadm_keyblock;
5902881Smp153739 typedef	char		*ovsec_kadm_policy_t;
5912881Smp153739 typedef long		ovsec_kadm_ret_t;
5922881Smp153739 
5932881Smp153739 enum	ovsec_kadm_salttype { OVSEC_KADM_SALT_V4, OVSEC_KADM_SALT_NORMAL };
5942881Smp153739 enum	ovsec_kadm_saltmod  { OVSEC_KADM_MOD_KEEP, OVSEC_KADM_MOD_V4, OVSEC_KADM_MOD_NORMAL };
5952881Smp153739 
5962881Smp153739 #define OVSEC_KADM_PW_FIRST_PROMPT \
5972881Smp153739 	((char *) error_message(CHPASS_UTIL_NEW_PASSWORD_PROMPT))
5982881Smp153739 #define OVSEC_KADM_PW_SECOND_PROMPT \
5992881Smp153739 	((char *) error_message(CHPASS_UTIL_NEW_PASSWORD_AGAIN_PROMPT))
6002881Smp153739 
6012881Smp153739 /*
6022881Smp153739  * Successful return code
6032881Smp153739  */
6042881Smp153739 #define OVSEC_KADM_OK	0
6052881Smp153739 
6062881Smp153739 /*
6072881Smp153739  * Create/Modify masks
6082881Smp153739  */
6092881Smp153739 /* principal */
6102881Smp153739 #define OVSEC_KADM_PRINCIPAL		0x000001
6112881Smp153739 #define OVSEC_KADM_PRINC_EXPIRE_TIME	0x000002
6122881Smp153739 #define OVSEC_KADM_PW_EXPIRATION	0x000004
6132881Smp153739 #define OVSEC_KADM_LAST_PWD_CHANGE	0x000008
6142881Smp153739 #define OVSEC_KADM_ATTRIBUTES		0x000010
6152881Smp153739 #define OVSEC_KADM_MAX_LIFE		0x000020
6162881Smp153739 #define OVSEC_KADM_MOD_TIME		0x000040
6172881Smp153739 #define OVSEC_KADM_MOD_NAME		0x000080
6182881Smp153739 #define OVSEC_KADM_KVNO			0x000100
6192881Smp153739 #define OVSEC_KADM_MKVNO		0x000200
6202881Smp153739 #define OVSEC_KADM_AUX_ATTRIBUTES	0x000400
6212881Smp153739 #define OVSEC_KADM_POLICY		0x000800
6222881Smp153739 #define OVSEC_KADM_POLICY_CLR		0x001000
6232881Smp153739 /* policy */
6242881Smp153739 #define OVSEC_KADM_PW_MAX_LIFE		0x004000
6252881Smp153739 #define OVSEC_KADM_PW_MIN_LIFE		0x008000
6262881Smp153739 #define OVSEC_KADM_PW_MIN_LENGTH	0x010000
6272881Smp153739 #define OVSEC_KADM_PW_MIN_CLASSES	0x020000
6282881Smp153739 #define OVSEC_KADM_PW_HISTORY_NUM	0x040000
6292881Smp153739 #define OVSEC_KADM_REF_COUNT		0x080000
6302881Smp153739 
6312881Smp153739 /*
6322881Smp153739  * permission bits
6332881Smp153739  */
6342881Smp153739 #define OVSEC_KADM_PRIV_GET	0x01
6352881Smp153739 #define OVSEC_KADM_PRIV_ADD	0x02
6362881Smp153739 #define OVSEC_KADM_PRIV_MODIFY	0x04
6372881Smp153739 #define OVSEC_KADM_PRIV_DELETE	0x08
6382881Smp153739 
6392881Smp153739 /*
6402881Smp153739  * API versioning constants
6412881Smp153739  */
6422881Smp153739 #define OVSEC_KADM_MASK_BITS		0xffffff00
6432881Smp153739 
6442881Smp153739 #define OVSEC_KADM_STRUCT_VERSION_MASK	0x12345600
6452881Smp153739 #define OVSEC_KADM_STRUCT_VERSION_1	(OVSEC_KADM_STRUCT_VERSION_MASK|0x01)
6462881Smp153739 #define OVSEC_KADM_STRUCT_VERSION	OVSEC_KADM_STRUCT_VERSION_1
6472881Smp153739 
6482881Smp153739 #define OVSEC_KADM_API_VERSION_MASK	0x12345700
6492881Smp153739 #define OVSEC_KADM_API_VERSION_1	(OVSEC_KADM_API_VERSION_MASK|0x01)
6502881Smp153739 
6512881Smp153739 
6522881Smp153739 typedef struct _ovsec_kadm_principal_ent_t {
6532881Smp153739 	krb5_principal	principal;
6542881Smp153739 	krb5_timestamp	princ_expire_time;
6552881Smp153739 	krb5_timestamp	last_pwd_change;
6562881Smp153739 	krb5_timestamp	pw_expiration;
6572881Smp153739 	krb5_deltat	max_life;
6582881Smp153739 	krb5_principal	mod_name;
6592881Smp153739 	krb5_timestamp	mod_date;
6602881Smp153739 	krb5_flags	attributes;
6612881Smp153739 	krb5_kvno	kvno;
6622881Smp153739 	krb5_kvno	mkvno;
6632881Smp153739 	char		*policy;
6642881Smp153739 	long		aux_attributes;
6652881Smp153739 } ovsec_kadm_principal_ent_rec, *ovsec_kadm_principal_ent_t;
6662881Smp153739 
6672881Smp153739 typedef struct _ovsec_kadm_policy_ent_t {
6682881Smp153739 	char		*policy;
6692881Smp153739 	long		pw_min_life;
6702881Smp153739 	long		pw_max_life;
6712881Smp153739 	long		pw_min_length;
6722881Smp153739 	long		pw_min_classes;
6732881Smp153739 	long		pw_history_num;
6742881Smp153739 	long		policy_refcnt;
6752881Smp153739 } ovsec_kadm_policy_ent_rec, *ovsec_kadm_policy_ent_t;
6760Sstevel@tonic-gate 
6772881Smp153739 /*
6782881Smp153739  * functions
6792881Smp153739  */
6802881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_init(char *client_name, char *pass,
6812881Smp153739 				    char *service_name, char *realm,
6822881Smp153739 				    krb5_ui_4 struct_version,
6832881Smp153739 				    krb5_ui_4 api_version,
6842881Smp153739 				    void **server_handle);
6852881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_init_with_password(char *client_name,
6862881Smp153739 						  char *pass,
6872881Smp153739 						  char *service_name,
6882881Smp153739 						  char *realm,
6892881Smp153739 						  krb5_ui_4 struct_version,
6902881Smp153739 						  krb5_ui_4 api_version,
6912881Smp153739 						  void **server_handle);
6922881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_init_with_skey(char *client_name,
6932881Smp153739 					      char *keytab,
6942881Smp153739 					      char *service_name,
6952881Smp153739 					      char *realm,
6962881Smp153739 					      krb5_ui_4 struct_version,
6972881Smp153739 					      krb5_ui_4 api_version,
6982881Smp153739 					      void **server_handle);
6992881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_flush(void *server_handle);
7002881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_destroy(void *server_handle);
7012881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_create_principal(void *server_handle,
7022881Smp153739 						ovsec_kadm_principal_ent_t ent,
7032881Smp153739 						long mask, char *pass);
7042881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_delete_principal(void *server_handle,
7052881Smp153739 						krb5_principal principal);
7062881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_modify_principal(void *server_handle,
7072881Smp153739 						ovsec_kadm_principal_ent_t ent,
7082881Smp153739 						long mask);
7092881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_rename_principal(void *server_handle,
7102881Smp153739 						krb5_principal,krb5_principal);
7112881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_get_principal(void *server_handle,
7122881Smp153739 					     krb5_principal principal,
7132881Smp153739 					     ovsec_kadm_principal_ent_t *ent);
7142881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_chpass_principal(void *server_handle,
7152881Smp153739 						krb5_principal principal,
7162881Smp153739 						char *pass);
7172881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_randkey_principal(void *server_handle,
7182881Smp153739 						 krb5_principal principal,
7192881Smp153739 						 krb5_keyblock **keyblock);
7202881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_create_policy(void *server_handle,
7212881Smp153739 					     ovsec_kadm_policy_ent_t ent,
7222881Smp153739 					     long mask);
7232881Smp153739 /*
7242881Smp153739  * ovsec_kadm_create_policy_internal is not part of the supported,
7252881Smp153739  * exposed API.  It is available only in the server library, and you
7262881Smp153739  * shouldn't use it unless you know why it's there and how it's
7272881Smp153739  * different from ovsec_kadm_create_policy.
7282881Smp153739  */
7292881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_create_policy_internal(void *server_handle,
7302881Smp153739 						      ovsec_kadm_policy_ent_t
7312881Smp153739 						      entry, long mask);
7322881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_delete_policy(void *server_handle,
7332881Smp153739 					     ovsec_kadm_policy_t policy);
7342881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_modify_policy(void *server_handle,
7352881Smp153739 					     ovsec_kadm_policy_ent_t ent,
7362881Smp153739 					     long mask);
7372881Smp153739 /*
7382881Smp153739  * ovsec_kadm_modify_policy_internal is not part of the supported,
7392881Smp153739  * exposed API.  It is available only in the server library, and you
7402881Smp153739  * shouldn't use it unless you know why it's there and how it's
7412881Smp153739  * different from ovsec_kadm_modify_policy.
7422881Smp153739  */
7432881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_modify_policy_internal(void *server_handle,
7442881Smp153739 						      ovsec_kadm_policy_ent_t
7452881Smp153739 						      entry, long mask);
7462881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_get_policy(void *server_handle,
7472881Smp153739 					  ovsec_kadm_policy_t policy,
7482881Smp153739 					  ovsec_kadm_policy_ent_t *ent);
7492881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_get_privs(void *server_handle,
7502881Smp153739 					 long *privs);
7512881Smp153739 
7522881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_chpass_principal_util(void *server_handle,
7532881Smp153739 						     krb5_principal princ,
7542881Smp153739 						     char *new_pw,
7552881Smp153739 						     char **ret_pw,
7562881Smp153739 						     char *msg_ret);
7572881Smp153739 
7582881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_free_principal_ent(void *server_handle,
7592881Smp153739 						  ovsec_kadm_principal_ent_t
7602881Smp153739 						  ent);
7612881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_free_policy_ent(void *server_handle,
7622881Smp153739 					       ovsec_kadm_policy_ent_t ent);
7632881Smp153739 
7642881Smp153739 ovsec_kadm_ret_t ovsec_kadm_free_name_list(void *server_handle,
7652881Smp153739 					   char **names, int count);
7662881Smp153739 
7672881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_get_principals(void *server_handle,
7682881Smp153739 					      char *exp, char ***princs,
7692881Smp153739 					      int *count);
7702881Smp153739 
7712881Smp153739 ovsec_kadm_ret_t    ovsec_kadm_get_policies(void *server_handle,
7722881Smp153739 					    char *exp, char ***pols,
7732881Smp153739 					    int *count);
7742881Smp153739 
7752881Smp153739 #define OVSEC_KADM_FAILURE KADM5_FAILURE
7762881Smp153739 #define OVSEC_KADM_AUTH_GET KADM5_AUTH_GET
7772881Smp153739 #define OVSEC_KADM_AUTH_ADD KADM5_AUTH_ADD
7782881Smp153739 #define OVSEC_KADM_AUTH_MODIFY KADM5_AUTH_MODIFY
7792881Smp153739 #define OVSEC_KADM_AUTH_DELETE KADM5_AUTH_DELETE
7802881Smp153739 #define OVSEC_KADM_AUTH_INSUFFICIENT KADM5_AUTH_INSUFFICIENT
7812881Smp153739 #define OVSEC_KADM_BAD_DB KADM5_BAD_DB
7822881Smp153739 #define OVSEC_KADM_DUP KADM5_DUP
7832881Smp153739 #define OVSEC_KADM_RPC_ERROR KADM5_RPC_ERROR
7842881Smp153739 #define OVSEC_KADM_NO_SRV KADM5_NO_SRV
7852881Smp153739 #define OVSEC_KADM_BAD_HIST_KEY KADM5_BAD_HIST_KEY
7862881Smp153739 #define OVSEC_KADM_NOT_INIT KADM5_NOT_INIT
7872881Smp153739 #define OVSEC_KADM_UNK_PRINC KADM5_UNK_PRINC
7882881Smp153739 #define OVSEC_KADM_UNK_POLICY KADM5_UNK_POLICY
7892881Smp153739 #define OVSEC_KADM_BAD_MASK KADM5_BAD_MASK
7902881Smp153739 #define OVSEC_KADM_BAD_CLASS KADM5_BAD_CLASS
7912881Smp153739 #define OVSEC_KADM_BAD_LENGTH KADM5_BAD_LENGTH
7922881Smp153739 #define OVSEC_KADM_BAD_POLICY KADM5_BAD_POLICY
7932881Smp153739 #define OVSEC_KADM_BAD_PRINCIPAL KADM5_BAD_PRINCIPAL
7942881Smp153739 #define OVSEC_KADM_BAD_AUX_ATTR KADM5_BAD_AUX_ATTR
7952881Smp153739 #define OVSEC_KADM_BAD_HISTORY KADM5_BAD_HISTORY
7962881Smp153739 #define OVSEC_KADM_BAD_MIN_PASS_LIFE KADM5_BAD_MIN_PASS_LIFE
7972881Smp153739 #define OVSEC_KADM_PASS_Q_TOOSHORT KADM5_PASS_Q_TOOSHORT
7982881Smp153739 #define OVSEC_KADM_PASS_Q_CLASS KADM5_PASS_Q_CLASS
7992881Smp153739 #define OVSEC_KADM_PASS_Q_DICT KADM5_PASS_Q_DICT
8002881Smp153739 #define OVSEC_KADM_PASS_REUSE KADM5_PASS_REUSE
8012881Smp153739 #define OVSEC_KADM_PASS_TOOSOON KADM5_PASS_TOOSOON
8022881Smp153739 #define OVSEC_KADM_POLICY_REF KADM5_POLICY_REF
8032881Smp153739 #define OVSEC_KADM_INIT KADM5_INIT
8042881Smp153739 #define OVSEC_KADM_BAD_PASSWORD KADM5_BAD_PASSWORD
8052881Smp153739 #define OVSEC_KADM_PROTECT_PRINCIPAL KADM5_PROTECT_PRINCIPAL
8062881Smp153739 #define OVSEC_KADM_BAD_SERVER_HANDLE KADM5_BAD_SERVER_HANDLE
8072881Smp153739 #define OVSEC_KADM_BAD_STRUCT_VERSION KADM5_BAD_STRUCT_VERSION
8082881Smp153739 #define OVSEC_KADM_OLD_STRUCT_VERSION KADM5_OLD_STRUCT_VERSION
8092881Smp153739 #define OVSEC_KADM_NEW_STRUCT_VERSION KADM5_NEW_STRUCT_VERSION
8102881Smp153739 #define OVSEC_KADM_BAD_API_VERSION KADM5_BAD_API_VERSION
8112881Smp153739 #define OVSEC_KADM_OLD_LIB_API_VERSION KADM5_OLD_LIB_API_VERSION
8122881Smp153739 #define OVSEC_KADM_OLD_SERVER_API_VERSION KADM5_OLD_SERVER_API_VERSION
8132881Smp153739 #define OVSEC_KADM_NEW_LIB_API_VERSION KADM5_NEW_LIB_API_VERSION
8142881Smp153739 #define OVSEC_KADM_NEW_SERVER_API_VERSION KADM5_NEW_SERVER_API_VERSION
8152881Smp153739 #define OVSEC_KADM_SECURE_PRINC_MISSING KADM5_SECURE_PRINC_MISSING
8162881Smp153739 #define OVSEC_KADM_NO_RENAME_SALT KADM5_NO_RENAME_SALT
8172881Smp153739 
8182881Smp153739 #endif /* USE_KADM5_API_VERSION == 1 */
8190Sstevel@tonic-gate 
820*3998Ssemery #define MAXPRINCLEN 125
821*3998Ssemery 
822*3998Ssemery void trunc_name(size_t *len, char **dots);
823*3998Ssemery 
8240Sstevel@tonic-gate krb5_chgpwd_prot _kadm5_get_kpasswd_protocol(void *server_handle);
8250Sstevel@tonic-gate kadm5_ret_t	kadm5_chpass_principal_v2(void *server_handle,
8260Sstevel@tonic-gate 					krb5_principal princ,
8270Sstevel@tonic-gate 					char *new_password,
8280Sstevel@tonic-gate 					kadm5_ret_t *srvr_rsp_code,
8290Sstevel@tonic-gate 					krb5_data *srvr_msg);
8300Sstevel@tonic-gate 
8310Sstevel@tonic-gate void handle_chpw(krb5_context context, int s, void *serverhandle,
8320Sstevel@tonic-gate 			kadm5_config_params *params);
8330Sstevel@tonic-gate 
8340Sstevel@tonic-gate #ifdef __cplusplus
8350Sstevel@tonic-gate }
8360Sstevel@tonic-gate #endif
8370Sstevel@tonic-gate 
8380Sstevel@tonic-gate #endif	/* __KADM5_ADMIN_H__ */
839