xref: /titanic_53/usr/src/lib/krb5/kadm5/admin.h (revision 2dd2efa5a06a9befe46075cf41e16f57533c9f98)
17c478bd9Sstevel@tonic-gate /*
2*2dd2efa5Swillf  * Copyright 2008 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  *
6054925bf6Swillf  * $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>
6854925bf6Swillf #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"
7454925bf6Swillf /*
7554925bf6Swillf  * Solaris Kerberos:
7654925bf6Swillf  * The kadmin/admin principal is unused on Solaris. This principal is used
7754925bf6Swillf  * in AUTH_GSSAPI but Solaris doesn't support AUTH_GSSAPI. RPCSEC_GSS can only
7854925bf6Swillf  * be used with host-based principals.
7954925bf6Swillf  *
8054925bf6Swillf  */
8154925bf6Swillf /* #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
13054925bf6Swillf #ifdef notyet /* Novell */
13154925bf6Swillf #define KADM5_CPW_FUNCTION      0x080000
13254925bf6Swillf #define KADM5_RANDKEY_USED      0x100000
13354925bf6Swillf #endif
13454925bf6Swillf #define KADM5_LOAD		0x200000
135*2dd2efa5Swillf /* Solaris Kerberos: adding support for key history in LDAP KDB */
136*2dd2efa5Swillf #define KADM5_KEY_HIST		0x400000
13754925bf6Swillf 
1387c478bd9Sstevel@tonic-gate /* all but KEY_DATA and TL_DATA */
1397c478bd9Sstevel@tonic-gate #define KADM5_PRINCIPAL_NORMAL_MASK 0x01ffff
1407c478bd9Sstevel@tonic-gate 
14154925bf6Swillf 
1427c478bd9Sstevel@tonic-gate /* kadm5_policy_ent_t */
1437c478bd9Sstevel@tonic-gate #define KADM5_PW_MAX_LIFE	0x004000
1447c478bd9Sstevel@tonic-gate #define KADM5_PW_MIN_LIFE	0x008000
1457c478bd9Sstevel@tonic-gate #define KADM5_PW_MIN_LENGTH	0x010000
1467c478bd9Sstevel@tonic-gate #define KADM5_PW_MIN_CLASSES	0x020000
1477c478bd9Sstevel@tonic-gate #define KADM5_PW_HISTORY_NUM	0x040000
1487c478bd9Sstevel@tonic-gate #define KADM5_REF_COUNT		0x080000
1497c478bd9Sstevel@tonic-gate 
1507c478bd9Sstevel@tonic-gate /* kadm5_config_params */
1517c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_REALM		0x0000001
1527c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_DBNAME		0x0000002
1537c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_MKEY_NAME		0x0000004
1547c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_MAX_LIFE		0x0000008
1557c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_MAX_RLIFE		0x0000010
1567c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_EXPIRATION		0x0000020
1577c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_FLAGS		0x0000040
1587c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ADMIN_KEYTAB	0x0000080
1597c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_STASH_FILE		0x0000100
1607c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ENCTYPE		0x0000200
1617c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ADBNAME		0x0000400
1627c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ADB_LOCKFILE	0x0000800
1637c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_PROFILE		0x0001000
1647c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ACL_FILE		0x0002000
1657c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_KADMIND_PORT	0x0004000
1667c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ENCTYPES		0x0008000
1677c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_ADMIN_SERVER	0x0010000
1687c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_DICT_FILE		0x0020000
1697c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_MKEY_FROM_KBD	0x0040000
1707c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_KPASSWD_PORT	0x0080000
1717c478bd9Sstevel@tonic-gate #define KADM5_CONFIG_KPASSWD_SERVER	0x0100000
1727c478bd9Sstevel@tonic-gate #define	KADM5_CONFIG_KPASSWD_PROTOCOL	0x0200000
1737c478bd9Sstevel@tonic-gate #define	KADM5_CONFIG_IPROP_ENABLED	0x0400000
1747c478bd9Sstevel@tonic-gate #define	KADM5_CONFIG_ULOG_SIZE		0x0800000
1757c478bd9Sstevel@tonic-gate #define	KADM5_CONFIG_POLL_TIME		0x1000000
1767c478bd9Sstevel@tonic-gate 
1777c478bd9Sstevel@tonic-gate /* password change constants */
1787c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_SUCCESS		0
1797c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_MALFORMED		1
1807c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_HARDERROR		2
1817c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_AUTHERROR		3
1827c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_SOFTERROR		4
1837c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_ACCESSDENIED	5
1847c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_BAD_VERSION	6
1857c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_INITIAL_FLAG_NEEDED	7
1867c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_POLICY_REJECT	8
1877c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_BAD_PRINCIPAL	9
1887c478bd9Sstevel@tonic-gate #define	KRB5_KPASSWD_ETYPE_NOSUPP	10
1897c478bd9Sstevel@tonic-gate 
1907c478bd9Sstevel@tonic-gate /*
1917c478bd9Sstevel@tonic-gate  * permission bits
1927c478bd9Sstevel@tonic-gate  */
1937c478bd9Sstevel@tonic-gate #define KADM5_PRIV_GET		0x01
1947c478bd9Sstevel@tonic-gate #define KADM5_PRIV_ADD		0x02
1957c478bd9Sstevel@tonic-gate #define KADM5_PRIV_MODIFY	0x04
1967c478bd9Sstevel@tonic-gate #define KADM5_PRIV_DELETE	0x08
1977c478bd9Sstevel@tonic-gate 
1987c478bd9Sstevel@tonic-gate /*
1997c478bd9Sstevel@tonic-gate  * API versioning constants
2007c478bd9Sstevel@tonic-gate  */
2017c478bd9Sstevel@tonic-gate #define KADM5_MASK_BITS		0xffffff00
2027c478bd9Sstevel@tonic-gate 
2037c478bd9Sstevel@tonic-gate #define KADM5_STRUCT_VERSION_MASK	0x12345600
2047c478bd9Sstevel@tonic-gate #define KADM5_STRUCT_VERSION_1	(KADM5_STRUCT_VERSION_MASK|0x01)
2057c478bd9Sstevel@tonic-gate #define KADM5_STRUCT_VERSION	KADM5_STRUCT_VERSION_1
2067c478bd9Sstevel@tonic-gate 
2077c478bd9Sstevel@tonic-gate #define KADM5_API_VERSION_MASK	0x12345700
2087c478bd9Sstevel@tonic-gate #define KADM5_API_VERSION_1	(KADM5_API_VERSION_MASK|0x01)
2097c478bd9Sstevel@tonic-gate #define KADM5_API_VERSION_2	(KADM5_API_VERSION_MASK|0x02)
2107c478bd9Sstevel@tonic-gate 
2117c478bd9Sstevel@tonic-gate #ifdef KRB5_DNS_LOOKUP
2127c478bd9Sstevel@tonic-gate /*
2137c478bd9Sstevel@tonic-gate  * Name length constants for DNS lookups
2147c478bd9Sstevel@tonic-gate  */
2157c478bd9Sstevel@tonic-gate #define	MAX_HOST_NAMELEN 256
2167c478bd9Sstevel@tonic-gate #define	MAX_DNS_NAMELEN (15*(MAX_HOST_NAMELEN + 1)+1)
2177c478bd9Sstevel@tonic-gate #endif /* KRB5_DNS_LOOKUP */
2187c478bd9Sstevel@tonic-gate 
2197c478bd9Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v2 {
2207c478bd9Sstevel@tonic-gate 	krb5_principal	principal;
2217c478bd9Sstevel@tonic-gate 	krb5_timestamp	princ_expire_time;
2227c478bd9Sstevel@tonic-gate 	krb5_timestamp	last_pwd_change;
2237c478bd9Sstevel@tonic-gate 	krb5_timestamp	pw_expiration;
2247c478bd9Sstevel@tonic-gate 	krb5_deltat	max_life;
2257c478bd9Sstevel@tonic-gate 	krb5_principal	mod_name;
2267c478bd9Sstevel@tonic-gate 	krb5_timestamp	mod_date;
2277c478bd9Sstevel@tonic-gate 	krb5_flags	attributes;
2287c478bd9Sstevel@tonic-gate 	krb5_kvno	kvno;
2297c478bd9Sstevel@tonic-gate 	krb5_kvno	mkvno;
2307c478bd9Sstevel@tonic-gate 	char		*policy;
2317c478bd9Sstevel@tonic-gate 	long		aux_attributes;
2327c478bd9Sstevel@tonic-gate 
2337c478bd9Sstevel@tonic-gate 	/* version 2 fields */
2347c478bd9Sstevel@tonic-gate 	krb5_deltat max_renewable_life;
2357c478bd9Sstevel@tonic-gate         krb5_timestamp last_success;
2367c478bd9Sstevel@tonic-gate         krb5_timestamp last_failed;
2377c478bd9Sstevel@tonic-gate         krb5_kvno fail_auth_count;
2387c478bd9Sstevel@tonic-gate 	krb5_int16 n_key_data;
2397c478bd9Sstevel@tonic-gate 	krb5_int16 n_tl_data;
2407c478bd9Sstevel@tonic-gate         krb5_tl_data *tl_data;
2417c478bd9Sstevel@tonic-gate 	krb5_key_data *key_data;
2427c478bd9Sstevel@tonic-gate } kadm5_principal_ent_rec_v2, *kadm5_principal_ent_t_v2;
2437c478bd9Sstevel@tonic-gate 
2447c478bd9Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v1 {
2457c478bd9Sstevel@tonic-gate 	krb5_principal	principal;
2467c478bd9Sstevel@tonic-gate 	krb5_timestamp	princ_expire_time;
2477c478bd9Sstevel@tonic-gate 	krb5_timestamp	last_pwd_change;
2487c478bd9Sstevel@tonic-gate 	krb5_timestamp	pw_expiration;
2497c478bd9Sstevel@tonic-gate 	krb5_deltat	max_life;
2507c478bd9Sstevel@tonic-gate 	krb5_principal	mod_name;
2517c478bd9Sstevel@tonic-gate 	krb5_timestamp	mod_date;
2527c478bd9Sstevel@tonic-gate 	krb5_flags	attributes;
2537c478bd9Sstevel@tonic-gate 	krb5_kvno	kvno;
2547c478bd9Sstevel@tonic-gate 	krb5_kvno	mkvno;
2557c478bd9Sstevel@tonic-gate 	char		*policy;
2567c478bd9Sstevel@tonic-gate 	long		aux_attributes;
2577c478bd9Sstevel@tonic-gate } kadm5_principal_ent_rec_v1, *kadm5_principal_ent_t_v1;
2587c478bd9Sstevel@tonic-gate 
25956a424ccSmp153739 #if USE_KADM5_API_VERSION == 1
26056a424ccSmp153739 typedef struct _kadm5_principal_ent_t_v1
26156a424ccSmp153739      kadm5_principal_ent_rec, *kadm5_principal_ent_t;
26256a424ccSmp153739 #else
2637c478bd9Sstevel@tonic-gate typedef struct _kadm5_principal_ent_t_v2
2647c478bd9Sstevel@tonic-gate      kadm5_principal_ent_rec, *kadm5_principal_ent_t;
26556a424ccSmp153739 #endif
2667c478bd9Sstevel@tonic-gate 
2677c478bd9Sstevel@tonic-gate typedef struct _kadm5_policy_ent_t {
2687c478bd9Sstevel@tonic-gate 	char		*policy;
2697c478bd9Sstevel@tonic-gate 	long		pw_min_life;
2707c478bd9Sstevel@tonic-gate 	long		pw_max_life;
2717c478bd9Sstevel@tonic-gate 	long		pw_min_length;
2727c478bd9Sstevel@tonic-gate 	long		pw_min_classes;
2737c478bd9Sstevel@tonic-gate 	long		pw_history_num;
2747c478bd9Sstevel@tonic-gate 	long		policy_refcnt;
2757c478bd9Sstevel@tonic-gate } kadm5_policy_ent_rec, *kadm5_policy_ent_t;
2767c478bd9Sstevel@tonic-gate 
27754925bf6Swillf #if 0 /************** Begin IFDEF'ed OUT *******************************/
2787c478bd9Sstevel@tonic-gate typedef struct __krb5_key_salt_tuple {
2797c478bd9Sstevel@tonic-gate      krb5_enctype	ks_enctype;
2807c478bd9Sstevel@tonic-gate      krb5_int32		ks_salttype;
2817c478bd9Sstevel@tonic-gate } krb5_key_salt_tuple;
28254925bf6Swillf #endif /**************** END IFDEF'ed OUT *******************************/
2837c478bd9Sstevel@tonic-gate 
2847c478bd9Sstevel@tonic-gate /*
2857c478bd9Sstevel@tonic-gate  * New types to indicate which protocol to use when sending
2867c478bd9Sstevel@tonic-gate  * password change requests
2877c478bd9Sstevel@tonic-gate  */
2887c478bd9Sstevel@tonic-gate typedef enum {
2897c478bd9Sstevel@tonic-gate 	KRB5_CHGPWD_RPCSEC,
2907c478bd9Sstevel@tonic-gate 	KRB5_CHGPWD_CHANGEPW_V2
2917c478bd9Sstevel@tonic-gate } krb5_chgpwd_prot;
2927c478bd9Sstevel@tonic-gate 
2937c478bd9Sstevel@tonic-gate /*
2947c478bd9Sstevel@tonic-gate  * Data structure returned by kadm5_get_config_params()
2957c478bd9Sstevel@tonic-gate  */
2967c478bd9Sstevel@tonic-gate typedef struct _kadm5_config_params {
2977c478bd9Sstevel@tonic-gate      long		mask;
2987c478bd9Sstevel@tonic-gate      char *		realm;
2997c478bd9Sstevel@tonic-gate      char *		profile;
3007c478bd9Sstevel@tonic-gate      int		kadmind_port;
30156a424ccSmp153739      int		kpasswd_port;
30256a424ccSmp153739 
3037c478bd9Sstevel@tonic-gate      char *		admin_server;
30454925bf6Swillf #ifdef notyet /* Novell */ /* ABI change? */
30554925bf6Swillf      char *		kpasswd_server;
30654925bf6Swillf #endif
30756a424ccSmp153739 
3087c478bd9Sstevel@tonic-gate      char *		dbname;
3097c478bd9Sstevel@tonic-gate      char *		admin_dbname;
3107c478bd9Sstevel@tonic-gate      char *		admin_lockfile;
3117c478bd9Sstevel@tonic-gate      char *		admin_keytab;
3127c478bd9Sstevel@tonic-gate      char *		acl_file;
3137c478bd9Sstevel@tonic-gate      char *		dict_file;
31456a424ccSmp153739 
3157c478bd9Sstevel@tonic-gate      int		mkey_from_kbd;
3167c478bd9Sstevel@tonic-gate      char *		stash_file;
3177c478bd9Sstevel@tonic-gate      char *		mkey_name;
3187c478bd9Sstevel@tonic-gate      krb5_enctype	enctype;
3197c478bd9Sstevel@tonic-gate      krb5_deltat	max_life;
3207c478bd9Sstevel@tonic-gate      krb5_deltat	max_rlife;
3217c478bd9Sstevel@tonic-gate      krb5_timestamp	expiration;
3227c478bd9Sstevel@tonic-gate      krb5_flags		flags;
3237c478bd9Sstevel@tonic-gate      krb5_key_salt_tuple *keysalts;
3247c478bd9Sstevel@tonic-gate      krb5_int32		num_keysalts;
3257c478bd9Sstevel@tonic-gate      char 			*kpasswd_server;
32656a424ccSmp153739 
3277c478bd9Sstevel@tonic-gate      krb5_chgpwd_prot	kpasswd_protocol;
3287c478bd9Sstevel@tonic-gate      bool_t			iprop_enabled;
3297c478bd9Sstevel@tonic-gate      int			iprop_ulogsize;
3307c478bd9Sstevel@tonic-gate      char			*iprop_polltime;
3317c478bd9Sstevel@tonic-gate } kadm5_config_params;
3327c478bd9Sstevel@tonic-gate 
3337c478bd9Sstevel@tonic-gate /***********************************************************************
3347c478bd9Sstevel@tonic-gate  * This is the old krb5_realm_read_params, which I mutated into
3357c478bd9Sstevel@tonic-gate  * kadm5_get_config_params but which old code (kdb5_* and krb5kdc)
3367c478bd9Sstevel@tonic-gate  * still uses.
3377c478bd9Sstevel@tonic-gate  ***********************************************************************/
3387c478bd9Sstevel@tonic-gate 
3397c478bd9Sstevel@tonic-gate /*
3407c478bd9Sstevel@tonic-gate  * Data structure returned by krb5_read_realm_params()
3417c478bd9Sstevel@tonic-gate  */
3427c478bd9Sstevel@tonic-gate typedef struct __krb5_realm_params {
3437c478bd9Sstevel@tonic-gate     char *		realm_profile;
3447c478bd9Sstevel@tonic-gate     char *		realm_dbname;
3457c478bd9Sstevel@tonic-gate     char *		realm_mkey_name;
3467c478bd9Sstevel@tonic-gate     char *		realm_stash_file;
3477c478bd9Sstevel@tonic-gate     char *		realm_kdc_ports;
3487c478bd9Sstevel@tonic-gate     char *		realm_kdc_tcp_ports;
3497c478bd9Sstevel@tonic-gate     char *		realm_acl_file;
3507c478bd9Sstevel@tonic-gate     krb5_int32		realm_kadmind_port;
3517c478bd9Sstevel@tonic-gate     krb5_enctype	realm_enctype;
3527c478bd9Sstevel@tonic-gate     krb5_deltat		realm_max_life;
3537c478bd9Sstevel@tonic-gate     krb5_deltat		realm_max_rlife;
3547c478bd9Sstevel@tonic-gate     krb5_timestamp	realm_expiration;
3557c478bd9Sstevel@tonic-gate     krb5_flags		realm_flags;
3567c478bd9Sstevel@tonic-gate     krb5_key_salt_tuple	*realm_keysalts;
35756a424ccSmp153739     unsigned int	realm_reject_bad_transit:1;
3587c478bd9Sstevel@tonic-gate     unsigned int	realm_kadmind_port_valid:1;
3597c478bd9Sstevel@tonic-gate     unsigned int	realm_enctype_valid:1;
3607c478bd9Sstevel@tonic-gate     unsigned int	realm_max_life_valid:1;
3617c478bd9Sstevel@tonic-gate     unsigned int	realm_max_rlife_valid:1;
3627c478bd9Sstevel@tonic-gate     unsigned int	realm_expiration_valid:1;
3637c478bd9Sstevel@tonic-gate     unsigned int	realm_flags_valid:1;
36456a424ccSmp153739     unsigned int	realm_reject_bad_transit_valid:1;
3657c478bd9Sstevel@tonic-gate     krb5_int32		realm_num_keysalts;
3667c478bd9Sstevel@tonic-gate } krb5_realm_params;
3677c478bd9Sstevel@tonic-gate 
3687c478bd9Sstevel@tonic-gate /*
3697c478bd9Sstevel@tonic-gate  * functions
3707c478bd9Sstevel@tonic-gate  */
3717c478bd9Sstevel@tonic-gate 
3727c478bd9Sstevel@tonic-gate kadm5_ret_t
3737c478bd9Sstevel@tonic-gate kadm5_get_adm_host_srv_name(krb5_context context,
3747c478bd9Sstevel@tonic-gate                            const char *realm, char **host_service_name);
3757c478bd9Sstevel@tonic-gate 
3767c478bd9Sstevel@tonic-gate kadm5_ret_t
3777c478bd9Sstevel@tonic-gate kadm5_get_cpw_host_srv_name(krb5_context context,
3787c478bd9Sstevel@tonic-gate                            const char *realm, char **host_service_name);
3797c478bd9Sstevel@tonic-gate 
38056a424ccSmp153739 #if USE_KADM5_API_VERSION > 1
3817c478bd9Sstevel@tonic-gate krb5_error_code kadm5_get_config_params(krb5_context context,
3827c478bd9Sstevel@tonic-gate 					char *kdcprofile, char *kdcenv,
3837c478bd9Sstevel@tonic-gate 					kadm5_config_params *params_in,
3847c478bd9Sstevel@tonic-gate 					kadm5_config_params *params_out);
3857c478bd9Sstevel@tonic-gate 
3867c478bd9Sstevel@tonic-gate krb5_error_code kadm5_free_config_params(krb5_context context,
3877c478bd9Sstevel@tonic-gate 					 kadm5_config_params *params);
3887c478bd9Sstevel@tonic-gate 
3897c478bd9Sstevel@tonic-gate krb5_error_code kadm5_free_realm_params(krb5_context kcontext,
3907c478bd9Sstevel@tonic-gate 					kadm5_config_params *params);
3917c478bd9Sstevel@tonic-gate 
39256a424ccSmp153739 krb5_error_code kadm5_get_admin_service_name(krb5_context, char *,
39356a424ccSmp153739 					     char *, size_t);
39456a424ccSmp153739 #endif
39556a424ccSmp153739 
3967c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_init(char *client_name, char *pass,
3977c478bd9Sstevel@tonic-gate 			  char *service_name,
39856a424ccSmp153739 #if USE_KADM5_API_VERSION == 1
39956a424ccSmp153739 			  char *realm,
40056a424ccSmp153739 #else
4017c478bd9Sstevel@tonic-gate 			  kadm5_config_params *params,
40256a424ccSmp153739 #endif
4037c478bd9Sstevel@tonic-gate 			  krb5_ui_4 struct_version,
4047c478bd9Sstevel@tonic-gate 			  krb5_ui_4 api_version,
40554925bf6Swillf 			  char **db_args,
4067c478bd9Sstevel@tonic-gate 			  void **server_handle);
40754925bf6Swillf 
4087c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_init_with_password(char *client_name,
4097c478bd9Sstevel@tonic-gate 					char *pass,
4107c478bd9Sstevel@tonic-gate 					char *service_name,
41156a424ccSmp153739 #if USE_KADM5_API_VERSION == 1
41256a424ccSmp153739 					char *realm,
41356a424ccSmp153739 #else
4147c478bd9Sstevel@tonic-gate 					kadm5_config_params *params,
41556a424ccSmp153739 #endif
4167c478bd9Sstevel@tonic-gate 					krb5_ui_4 struct_version,
4177c478bd9Sstevel@tonic-gate 					krb5_ui_4 api_version,
41854925bf6Swillf 					char **db_args,
4197c478bd9Sstevel@tonic-gate 					void **server_handle);
4207c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_init_with_skey(char *client_name,
4217c478bd9Sstevel@tonic-gate 				    char *keytab,
4227c478bd9Sstevel@tonic-gate 				    char *service_name,
42356a424ccSmp153739 #if USE_KADM5_API_VERSION == 1
42456a424ccSmp153739 				    char *realm,
42556a424ccSmp153739 #else
4267c478bd9Sstevel@tonic-gate 				    kadm5_config_params *params,
42756a424ccSmp153739 #endif
4287c478bd9Sstevel@tonic-gate 				    krb5_ui_4 struct_version,
4297c478bd9Sstevel@tonic-gate 				    krb5_ui_4 api_version,
43054925bf6Swillf 				    char **db_args,
4317c478bd9Sstevel@tonic-gate 				    void **server_handle);
43256a424ccSmp153739 #if USE_KADM5_API_VERSION > 1
4337c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_init_with_creds(char *client_name,
4347c478bd9Sstevel@tonic-gate 				     krb5_ccache cc,
4357c478bd9Sstevel@tonic-gate 				     char *service_name,
4367c478bd9Sstevel@tonic-gate 				     kadm5_config_params *params,
4377c478bd9Sstevel@tonic-gate 				     krb5_ui_4 struct_version,
4387c478bd9Sstevel@tonic-gate 				     krb5_ui_4 api_version,
43954925bf6Swillf 				     char **db_args,
4407c478bd9Sstevel@tonic-gate 				     void **server_handle);
44156a424ccSmp153739 #endif
44256a424ccSmp153739 kadm5_ret_t    kadm5_lock(void *server_handle);
44356a424ccSmp153739 kadm5_ret_t    kadm5_unlock(void *server_handle);
4447c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_flush(void *server_handle);
4457c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_destroy(void *server_handle);
4467c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_create_principal(void *server_handle,
4477c478bd9Sstevel@tonic-gate 				      kadm5_principal_ent_t ent,
4487c478bd9Sstevel@tonic-gate 				      long mask, char *pass);
4497c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_create_principal_3(void *server_handle,
4507c478bd9Sstevel@tonic-gate 					kadm5_principal_ent_t ent,
4517c478bd9Sstevel@tonic-gate 					long mask,
4527c478bd9Sstevel@tonic-gate 					int n_ks_tuple,
4537c478bd9Sstevel@tonic-gate 					krb5_key_salt_tuple *ks_tuple,
4547c478bd9Sstevel@tonic-gate 					char *pass);
4557c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_delete_principal(void *server_handle,
4567c478bd9Sstevel@tonic-gate 				      krb5_principal principal);
4577c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_modify_principal(void *server_handle,
4587c478bd9Sstevel@tonic-gate 				      kadm5_principal_ent_t ent,
4597c478bd9Sstevel@tonic-gate 				      long mask);
4607c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_rename_principal(void *server_handle,
4617c478bd9Sstevel@tonic-gate 				      krb5_principal,krb5_principal);
46256a424ccSmp153739 #if USE_KADM5_API_VERSION == 1
46356a424ccSmp153739 kadm5_ret_t    kadm5_get_principal(void *server_handle,
46456a424ccSmp153739 				   krb5_principal principal,
46556a424ccSmp153739 				   kadm5_principal_ent_t *ent);
46656a424ccSmp153739 #else
4677c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_get_principal(void *server_handle,
4687c478bd9Sstevel@tonic-gate 				   krb5_principal principal,
4697c478bd9Sstevel@tonic-gate 				   kadm5_principal_ent_t ent,
4707c478bd9Sstevel@tonic-gate 				   long mask);
47156a424ccSmp153739 #endif
4727c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_chpass_principal(void *server_handle,
4737c478bd9Sstevel@tonic-gate 				      krb5_principal principal,
4747c478bd9Sstevel@tonic-gate 				      char *pass);
4757c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_chpass_principal_3(void *server_handle,
4767c478bd9Sstevel@tonic-gate 					krb5_principal principal,
4777c478bd9Sstevel@tonic-gate 					krb5_boolean keepold,
4787c478bd9Sstevel@tonic-gate 					int n_ks_tuple,
4797c478bd9Sstevel@tonic-gate 					krb5_key_salt_tuple *ks_tuple,
4807c478bd9Sstevel@tonic-gate 					char *pass);
48156a424ccSmp153739 #if USE_KADM5_API_VERSION == 1
48256a424ccSmp153739 kadm5_ret_t    kadm5_randkey_principal(void *server_handle,
48356a424ccSmp153739 				       krb5_principal principal,
48456a424ccSmp153739 				       krb5_keyblock **keyblock);
48556a424ccSmp153739 #else
4867c478bd9Sstevel@tonic-gate 
4877c478bd9Sstevel@tonic-gate /*
4887c478bd9Sstevel@tonic-gate  * Solaris Kerberos:
4897c478bd9Sstevel@tonic-gate  * this routine is only implemented in the client library.
4907c478bd9Sstevel@tonic-gate  */
4917c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_randkey_principal_old(void *server_handle,
4927c478bd9Sstevel@tonic-gate 				    krb5_principal principal,
4937c478bd9Sstevel@tonic-gate 				    krb5_keyblock **keyblocks,
4947c478bd9Sstevel@tonic-gate 				    int *n_keys);
4957c478bd9Sstevel@tonic-gate 
4967c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_randkey_principal(void *server_handle,
4977c478bd9Sstevel@tonic-gate 				       krb5_principal principal,
4987c478bd9Sstevel@tonic-gate 				       krb5_keyblock **keyblocks,
4997c478bd9Sstevel@tonic-gate 				       int *n_keys);
5007c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_randkey_principal_3(void *server_handle,
5017c478bd9Sstevel@tonic-gate 					 krb5_principal principal,
5027c478bd9Sstevel@tonic-gate 					 krb5_boolean keepold,
5037c478bd9Sstevel@tonic-gate 					 int n_ks_tuple,
5047c478bd9Sstevel@tonic-gate 					 krb5_key_salt_tuple *ks_tuple,
5057c478bd9Sstevel@tonic-gate 					 krb5_keyblock **keyblocks,
5067c478bd9Sstevel@tonic-gate 					 int *n_keys);
50756a424ccSmp153739 #endif
5087c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_setv4key_principal(void *server_handle,
5097c478bd9Sstevel@tonic-gate 					krb5_principal principal,
5107c478bd9Sstevel@tonic-gate 					krb5_keyblock *keyblock);
5117c478bd9Sstevel@tonic-gate 
5127c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_setkey_principal(void *server_handle,
5137c478bd9Sstevel@tonic-gate 				      krb5_principal principal,
5147c478bd9Sstevel@tonic-gate 				      krb5_keyblock *keyblocks,
5157c478bd9Sstevel@tonic-gate 				      int n_keys);
5167c478bd9Sstevel@tonic-gate 
5177c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_setkey_principal_3(void *server_handle,
5187c478bd9Sstevel@tonic-gate 					krb5_principal principal,
5197c478bd9Sstevel@tonic-gate 					krb5_boolean keepold,
5207c478bd9Sstevel@tonic-gate 					int n_ks_tuple,
5217c478bd9Sstevel@tonic-gate 					krb5_key_salt_tuple *ks_tuple,
5227c478bd9Sstevel@tonic-gate 					krb5_keyblock *keyblocks,
5237c478bd9Sstevel@tonic-gate 					int n_keys);
5247c478bd9Sstevel@tonic-gate 
52556a424ccSmp153739 kadm5_ret_t    kadm5_decrypt_key(void *server_handle,
52656a424ccSmp153739 				 kadm5_principal_ent_t entry, krb5_int32
52756a424ccSmp153739 				 ktype, krb5_int32 stype, krb5_int32
52856a424ccSmp153739 				 kvno, krb5_keyblock *keyblock,
52956a424ccSmp153739 				 krb5_keysalt *keysalt, int *kvnop);
53056a424ccSmp153739 
5317c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_create_policy(void *server_handle,
5327c478bd9Sstevel@tonic-gate 				   kadm5_policy_ent_t ent,
5337c478bd9Sstevel@tonic-gate 				   long mask);
5347c478bd9Sstevel@tonic-gate /*
5357c478bd9Sstevel@tonic-gate  * kadm5_create_policy_internal is not part of the supported,
5367c478bd9Sstevel@tonic-gate  * exposed API.  It is available only in the server library, and you
5377c478bd9Sstevel@tonic-gate  * shouldn't use it unless you know why it's there and how it's
5387c478bd9Sstevel@tonic-gate  * different from kadm5_create_policy.
5397c478bd9Sstevel@tonic-gate  */
5407c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_create_policy_internal(void *server_handle,
5417c478bd9Sstevel@tonic-gate 					    kadm5_policy_ent_t
5427c478bd9Sstevel@tonic-gate 					    entry, long mask);
5437c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_delete_policy(void *server_handle,
5447c478bd9Sstevel@tonic-gate 				   kadm5_policy_t policy);
5457c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_modify_policy(void *server_handle,
5467c478bd9Sstevel@tonic-gate 				   kadm5_policy_ent_t ent,
5477c478bd9Sstevel@tonic-gate 				   long mask);
5487c478bd9Sstevel@tonic-gate /*
5497c478bd9Sstevel@tonic-gate  * kadm5_modify_policy_internal is not part of the supported,
5507c478bd9Sstevel@tonic-gate  * exposed API.  It is available only in the server library, and you
5517c478bd9Sstevel@tonic-gate  * shouldn't use it unless you know why it's there and how it's
5527c478bd9Sstevel@tonic-gate  * different from kadm5_modify_policy.
5537c478bd9Sstevel@tonic-gate  */
5547c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_modify_policy_internal(void *server_handle,
5557c478bd9Sstevel@tonic-gate 					    kadm5_policy_ent_t
5567c478bd9Sstevel@tonic-gate 					    entry, long mask);
55756a424ccSmp153739 #if USE_KADM5_API_VERSION == 1
55856a424ccSmp153739 kadm5_ret_t    kadm5_get_policy(void *server_handle,
55956a424ccSmp153739 				kadm5_policy_t policy,
56056a424ccSmp153739 				kadm5_policy_ent_t *ent);
56156a424ccSmp153739 #else
5627c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_get_policy(void *server_handle,
5637c478bd9Sstevel@tonic-gate 				kadm5_policy_t policy,
5647c478bd9Sstevel@tonic-gate 				kadm5_policy_ent_t ent);
56556a424ccSmp153739 #endif
5667c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_get_privs(void *server_handle,
5677c478bd9Sstevel@tonic-gate 			       long *privs);
5687c478bd9Sstevel@tonic-gate 
5697c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_chpass_principal_util(void *server_handle,
5707c478bd9Sstevel@tonic-gate 					   krb5_principal princ,
5717c478bd9Sstevel@tonic-gate 					   char *new_pw,
5727c478bd9Sstevel@tonic-gate 					   char **ret_pw,
5737c478bd9Sstevel@tonic-gate 					   char *msg_ret,
57456a424ccSmp153739 					   unsigned int msg_len);
5757c478bd9Sstevel@tonic-gate 
5767c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_free_principal_ent(void *server_handle,
5777c478bd9Sstevel@tonic-gate 					kadm5_principal_ent_t
5787c478bd9Sstevel@tonic-gate 					ent);
5797c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_free_policy_ent(void *server_handle,
5807c478bd9Sstevel@tonic-gate 				     kadm5_policy_ent_t ent);
5817c478bd9Sstevel@tonic-gate 
5827c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_get_principals(void *server_handle,
5837c478bd9Sstevel@tonic-gate 				    char *exp, char ***princs,
5847c478bd9Sstevel@tonic-gate 				    int *count);
5857c478bd9Sstevel@tonic-gate 
5867c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_get_policies(void *server_handle,
5877c478bd9Sstevel@tonic-gate 				  char *exp, char ***pols,
5887c478bd9Sstevel@tonic-gate 				  int *count);
5897c478bd9Sstevel@tonic-gate 
59056a424ccSmp153739 #if USE_KADM5_API_VERSION > 1
5917c478bd9Sstevel@tonic-gate kadm5_ret_t    kadm5_free_key_data(void *server_handle,
5927c478bd9Sstevel@tonic-gate 				   krb5_int16 *n_key_data,
5937c478bd9Sstevel@tonic-gate 				   krb5_key_data *key_data);
59456a424ccSmp153739 #endif
5957c478bd9Sstevel@tonic-gate 
59656a424ccSmp153739 kadm5_ret_t    kadm5_free_name_list(void *server_handle, char **names,
59756a424ccSmp153739 				    int count);
59856a424ccSmp153739 
59954925bf6Swillf krb5_error_code kadm5_init_krb5_context (krb5_context *);
60054925bf6Swillf 
60156a424ccSmp153739 #if USE_KADM5_API_VERSION == 1
60256a424ccSmp153739 /*
60356a424ccSmp153739  * OVSEC_KADM_API_VERSION_1 should be, if possible, compile-time
60456a424ccSmp153739  * compatible with KADM5_API_VERSION_2.  Basically, this means we have
60556a424ccSmp153739  * to continue to provide all the old ovsec_kadm function and symbol
60656a424ccSmp153739  * names.
60756a424ccSmp153739  */
60856a424ccSmp153739 
60956a424ccSmp153739 #define OVSEC_KADM_ACLFILE		"/krb5/ovsec_adm.acl"
61056a424ccSmp153739 #define	OVSEC_KADM_WORDFILE		"/krb5/ovsec_adm.dict"
61156a424ccSmp153739 
61256a424ccSmp153739 #define OVSEC_KADM_ADMIN_SERVICE	"ovsec_adm/admin"
61356a424ccSmp153739 #define OVSEC_KADM_CHANGEPW_SERVICE	"ovsec_adm/changepw"
61456a424ccSmp153739 #define OVSEC_KADM_HIST_PRINCIPAL	"ovsec_adm/history"
61556a424ccSmp153739 
61656a424ccSmp153739 typedef krb5_principal	ovsec_kadm_princ_t;
61756a424ccSmp153739 typedef krb5_keyblock	ovsec_kadm_keyblock;
61856a424ccSmp153739 typedef	char		*ovsec_kadm_policy_t;
61956a424ccSmp153739 typedef long		ovsec_kadm_ret_t;
62056a424ccSmp153739 
62156a424ccSmp153739 enum	ovsec_kadm_salttype { OVSEC_KADM_SALT_V4, OVSEC_KADM_SALT_NORMAL };
62256a424ccSmp153739 enum	ovsec_kadm_saltmod  { OVSEC_KADM_MOD_KEEP, OVSEC_KADM_MOD_V4, OVSEC_KADM_MOD_NORMAL };
62356a424ccSmp153739 
62456a424ccSmp153739 #define OVSEC_KADM_PW_FIRST_PROMPT \
62556a424ccSmp153739 	((char *) error_message(CHPASS_UTIL_NEW_PASSWORD_PROMPT))
62656a424ccSmp153739 #define OVSEC_KADM_PW_SECOND_PROMPT \
62756a424ccSmp153739 	((char *) error_message(CHPASS_UTIL_NEW_PASSWORD_AGAIN_PROMPT))
62856a424ccSmp153739 
62956a424ccSmp153739 /*
63056a424ccSmp153739  * Successful return code
63156a424ccSmp153739  */
63256a424ccSmp153739 #define OVSEC_KADM_OK	0
63356a424ccSmp153739 
63456a424ccSmp153739 /*
63556a424ccSmp153739  * Create/Modify masks
63656a424ccSmp153739  */
63756a424ccSmp153739 /* principal */
63856a424ccSmp153739 #define OVSEC_KADM_PRINCIPAL		0x000001
63956a424ccSmp153739 #define OVSEC_KADM_PRINC_EXPIRE_TIME	0x000002
64056a424ccSmp153739 #define OVSEC_KADM_PW_EXPIRATION	0x000004
64156a424ccSmp153739 #define OVSEC_KADM_LAST_PWD_CHANGE	0x000008
64256a424ccSmp153739 #define OVSEC_KADM_ATTRIBUTES		0x000010
64356a424ccSmp153739 #define OVSEC_KADM_MAX_LIFE		0x000020
64456a424ccSmp153739 #define OVSEC_KADM_MOD_TIME		0x000040
64556a424ccSmp153739 #define OVSEC_KADM_MOD_NAME		0x000080
64656a424ccSmp153739 #define OVSEC_KADM_KVNO			0x000100
64756a424ccSmp153739 #define OVSEC_KADM_MKVNO		0x000200
64856a424ccSmp153739 #define OVSEC_KADM_AUX_ATTRIBUTES	0x000400
64956a424ccSmp153739 #define OVSEC_KADM_POLICY		0x000800
65056a424ccSmp153739 #define OVSEC_KADM_POLICY_CLR		0x001000
65156a424ccSmp153739 /* policy */
65256a424ccSmp153739 #define OVSEC_KADM_PW_MAX_LIFE		0x004000
65356a424ccSmp153739 #define OVSEC_KADM_PW_MIN_LIFE		0x008000
65456a424ccSmp153739 #define OVSEC_KADM_PW_MIN_LENGTH	0x010000
65556a424ccSmp153739 #define OVSEC_KADM_PW_MIN_CLASSES	0x020000
65656a424ccSmp153739 #define OVSEC_KADM_PW_HISTORY_NUM	0x040000
65756a424ccSmp153739 #define OVSEC_KADM_REF_COUNT		0x080000
65856a424ccSmp153739 
65956a424ccSmp153739 /*
66056a424ccSmp153739  * permission bits
66156a424ccSmp153739  */
66256a424ccSmp153739 #define OVSEC_KADM_PRIV_GET	0x01
66356a424ccSmp153739 #define OVSEC_KADM_PRIV_ADD	0x02
66456a424ccSmp153739 #define OVSEC_KADM_PRIV_MODIFY	0x04
66556a424ccSmp153739 #define OVSEC_KADM_PRIV_DELETE	0x08
66656a424ccSmp153739 
66756a424ccSmp153739 /*
66856a424ccSmp153739  * API versioning constants
66956a424ccSmp153739  */
67056a424ccSmp153739 #define OVSEC_KADM_MASK_BITS		0xffffff00
67156a424ccSmp153739 
67256a424ccSmp153739 #define OVSEC_KADM_STRUCT_VERSION_MASK	0x12345600
67356a424ccSmp153739 #define OVSEC_KADM_STRUCT_VERSION_1	(OVSEC_KADM_STRUCT_VERSION_MASK|0x01)
67456a424ccSmp153739 #define OVSEC_KADM_STRUCT_VERSION	OVSEC_KADM_STRUCT_VERSION_1
67556a424ccSmp153739 
67656a424ccSmp153739 #define OVSEC_KADM_API_VERSION_MASK	0x12345700
67756a424ccSmp153739 #define OVSEC_KADM_API_VERSION_1	(OVSEC_KADM_API_VERSION_MASK|0x01)
67856a424ccSmp153739 
67956a424ccSmp153739 
68056a424ccSmp153739 typedef struct _ovsec_kadm_principal_ent_t {
68156a424ccSmp153739 	krb5_principal	principal;
68256a424ccSmp153739 	krb5_timestamp	princ_expire_time;
68356a424ccSmp153739 	krb5_timestamp	last_pwd_change;
68456a424ccSmp153739 	krb5_timestamp	pw_expiration;
68556a424ccSmp153739 	krb5_deltat	max_life;
68656a424ccSmp153739 	krb5_principal	mod_name;
68756a424ccSmp153739 	krb5_timestamp	mod_date;
68856a424ccSmp153739 	krb5_flags	attributes;
68956a424ccSmp153739 	krb5_kvno	kvno;
69056a424ccSmp153739 	krb5_kvno	mkvno;
69156a424ccSmp153739 	char		*policy;
69256a424ccSmp153739 	long		aux_attributes;
69356a424ccSmp153739 } ovsec_kadm_principal_ent_rec, *ovsec_kadm_principal_ent_t;
69456a424ccSmp153739 
69556a424ccSmp153739 typedef struct _ovsec_kadm_policy_ent_t {
69656a424ccSmp153739 	char		*policy;
69756a424ccSmp153739 	long		pw_min_life;
69856a424ccSmp153739 	long		pw_max_life;
69956a424ccSmp153739 	long		pw_min_length;
70056a424ccSmp153739 	long		pw_min_classes;
70156a424ccSmp153739 	long		pw_history_num;
70256a424ccSmp153739 	long		policy_refcnt;
70356a424ccSmp153739 } ovsec_kadm_policy_ent_rec, *ovsec_kadm_policy_ent_t;
70456a424ccSmp153739 
70556a424ccSmp153739 /*
70656a424ccSmp153739  * functions
70756a424ccSmp153739  */
70856a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_init(char *client_name, char *pass,
70956a424ccSmp153739 				    char *service_name, char *realm,
71056a424ccSmp153739 				    krb5_ui_4 struct_version,
71156a424ccSmp153739 				    krb5_ui_4 api_version,
71254925bf6Swillf 				    char **db_args,
71356a424ccSmp153739 				    void **server_handle);
71456a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_init_with_password(char *client_name,
71556a424ccSmp153739 						  char *pass,
71656a424ccSmp153739 						  char *service_name,
71756a424ccSmp153739 						  char *realm,
71856a424ccSmp153739 						  krb5_ui_4 struct_version,
71956a424ccSmp153739 						  krb5_ui_4 api_version,
72054925bf6Swillf 						  char ** db_args,
72156a424ccSmp153739 						  void **server_handle);
72256a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_init_with_skey(char *client_name,
72356a424ccSmp153739 					      char *keytab,
72456a424ccSmp153739 					      char *service_name,
72556a424ccSmp153739 					      char *realm,
72656a424ccSmp153739 					      krb5_ui_4 struct_version,
72756a424ccSmp153739 					      krb5_ui_4 api_version,
72854925bf6Swillf 					      char **db_args,
72956a424ccSmp153739 					      void **server_handle);
73056a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_flush(void *server_handle);
73156a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_destroy(void *server_handle);
73256a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_create_principal(void *server_handle,
73356a424ccSmp153739 						ovsec_kadm_principal_ent_t ent,
73456a424ccSmp153739 						long mask, char *pass);
73556a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_delete_principal(void *server_handle,
73656a424ccSmp153739 						krb5_principal principal);
73756a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_modify_principal(void *server_handle,
73856a424ccSmp153739 						ovsec_kadm_principal_ent_t ent,
73956a424ccSmp153739 						long mask);
74056a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_rename_principal(void *server_handle,
74156a424ccSmp153739 						krb5_principal,krb5_principal);
74256a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_get_principal(void *server_handle,
74356a424ccSmp153739 					     krb5_principal principal,
74456a424ccSmp153739 					     ovsec_kadm_principal_ent_t *ent);
74556a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_chpass_principal(void *server_handle,
74656a424ccSmp153739 						krb5_principal principal,
74756a424ccSmp153739 						char *pass);
74856a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_randkey_principal(void *server_handle,
74956a424ccSmp153739 						 krb5_principal principal,
75056a424ccSmp153739 						 krb5_keyblock **keyblock);
75156a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_create_policy(void *server_handle,
75256a424ccSmp153739 					     ovsec_kadm_policy_ent_t ent,
75356a424ccSmp153739 					     long mask);
75456a424ccSmp153739 /*
75556a424ccSmp153739  * ovsec_kadm_create_policy_internal is not part of the supported,
75656a424ccSmp153739  * exposed API.  It is available only in the server library, and you
75756a424ccSmp153739  * shouldn't use it unless you know why it's there and how it's
75856a424ccSmp153739  * different from ovsec_kadm_create_policy.
75956a424ccSmp153739  */
76056a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_create_policy_internal(void *server_handle,
76156a424ccSmp153739 						      ovsec_kadm_policy_ent_t
76256a424ccSmp153739 						      entry, long mask);
76356a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_delete_policy(void *server_handle,
76456a424ccSmp153739 					     ovsec_kadm_policy_t policy);
76556a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_modify_policy(void *server_handle,
76656a424ccSmp153739 					     ovsec_kadm_policy_ent_t ent,
76756a424ccSmp153739 					     long mask);
76856a424ccSmp153739 /*
76956a424ccSmp153739  * ovsec_kadm_modify_policy_internal is not part of the supported,
77056a424ccSmp153739  * exposed API.  It is available only in the server library, and you
77156a424ccSmp153739  * shouldn't use it unless you know why it's there and how it's
77256a424ccSmp153739  * different from ovsec_kadm_modify_policy.
77356a424ccSmp153739  */
77456a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_modify_policy_internal(void *server_handle,
77556a424ccSmp153739 						      ovsec_kadm_policy_ent_t
77656a424ccSmp153739 						      entry, long mask);
77756a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_get_policy(void *server_handle,
77856a424ccSmp153739 					  ovsec_kadm_policy_t policy,
77956a424ccSmp153739 					  ovsec_kadm_policy_ent_t *ent);
78056a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_get_privs(void *server_handle,
78156a424ccSmp153739 					 long *privs);
78256a424ccSmp153739 
78356a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_chpass_principal_util(void *server_handle,
78456a424ccSmp153739 						     krb5_principal princ,
78556a424ccSmp153739 						     char *new_pw,
78656a424ccSmp153739 						     char **ret_pw,
78756a424ccSmp153739 						     char *msg_ret);
78856a424ccSmp153739 
78956a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_free_principal_ent(void *server_handle,
79056a424ccSmp153739 						  ovsec_kadm_principal_ent_t
79156a424ccSmp153739 						  ent);
79256a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_free_policy_ent(void *server_handle,
79356a424ccSmp153739 					       ovsec_kadm_policy_ent_t ent);
79456a424ccSmp153739 
79556a424ccSmp153739 ovsec_kadm_ret_t ovsec_kadm_free_name_list(void *server_handle,
7967c478bd9Sstevel@tonic-gate 					   char **names, int count);
7977c478bd9Sstevel@tonic-gate 
79856a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_get_principals(void *server_handle,
79956a424ccSmp153739 					      char *exp, char ***princs,
80056a424ccSmp153739 					      int *count);
80156a424ccSmp153739 
80256a424ccSmp153739 ovsec_kadm_ret_t    ovsec_kadm_get_policies(void *server_handle,
80356a424ccSmp153739 					    char *exp, char ***pols,
80456a424ccSmp153739 					    int *count);
80556a424ccSmp153739 
80656a424ccSmp153739 #define OVSEC_KADM_FAILURE KADM5_FAILURE
80756a424ccSmp153739 #define OVSEC_KADM_AUTH_GET KADM5_AUTH_GET
80856a424ccSmp153739 #define OVSEC_KADM_AUTH_ADD KADM5_AUTH_ADD
80956a424ccSmp153739 #define OVSEC_KADM_AUTH_MODIFY KADM5_AUTH_MODIFY
81056a424ccSmp153739 #define OVSEC_KADM_AUTH_DELETE KADM5_AUTH_DELETE
81156a424ccSmp153739 #define OVSEC_KADM_AUTH_INSUFFICIENT KADM5_AUTH_INSUFFICIENT
81256a424ccSmp153739 #define OVSEC_KADM_BAD_DB KADM5_BAD_DB
81356a424ccSmp153739 #define OVSEC_KADM_DUP KADM5_DUP
81456a424ccSmp153739 #define OVSEC_KADM_RPC_ERROR KADM5_RPC_ERROR
81556a424ccSmp153739 #define OVSEC_KADM_NO_SRV KADM5_NO_SRV
81656a424ccSmp153739 #define OVSEC_KADM_BAD_HIST_KEY KADM5_BAD_HIST_KEY
81756a424ccSmp153739 #define OVSEC_KADM_NOT_INIT KADM5_NOT_INIT
81856a424ccSmp153739 #define OVSEC_KADM_UNK_PRINC KADM5_UNK_PRINC
81956a424ccSmp153739 #define OVSEC_KADM_UNK_POLICY KADM5_UNK_POLICY
82056a424ccSmp153739 #define OVSEC_KADM_BAD_MASK KADM5_BAD_MASK
82156a424ccSmp153739 #define OVSEC_KADM_BAD_CLASS KADM5_BAD_CLASS
82256a424ccSmp153739 #define OVSEC_KADM_BAD_LENGTH KADM5_BAD_LENGTH
82356a424ccSmp153739 #define OVSEC_KADM_BAD_POLICY KADM5_BAD_POLICY
82456a424ccSmp153739 #define OVSEC_KADM_BAD_PRINCIPAL KADM5_BAD_PRINCIPAL
82556a424ccSmp153739 #define OVSEC_KADM_BAD_AUX_ATTR KADM5_BAD_AUX_ATTR
82656a424ccSmp153739 #define OVSEC_KADM_BAD_HISTORY KADM5_BAD_HISTORY
82756a424ccSmp153739 #define OVSEC_KADM_BAD_MIN_PASS_LIFE KADM5_BAD_MIN_PASS_LIFE
82856a424ccSmp153739 #define OVSEC_KADM_PASS_Q_TOOSHORT KADM5_PASS_Q_TOOSHORT
82956a424ccSmp153739 #define OVSEC_KADM_PASS_Q_CLASS KADM5_PASS_Q_CLASS
83056a424ccSmp153739 #define OVSEC_KADM_PASS_Q_DICT KADM5_PASS_Q_DICT
83156a424ccSmp153739 #define OVSEC_KADM_PASS_REUSE KADM5_PASS_REUSE
83256a424ccSmp153739 #define OVSEC_KADM_PASS_TOOSOON KADM5_PASS_TOOSOON
83356a424ccSmp153739 #define OVSEC_KADM_POLICY_REF KADM5_POLICY_REF
83456a424ccSmp153739 #define OVSEC_KADM_INIT KADM5_INIT
83556a424ccSmp153739 #define OVSEC_KADM_BAD_PASSWORD KADM5_BAD_PASSWORD
83656a424ccSmp153739 #define OVSEC_KADM_PROTECT_PRINCIPAL KADM5_PROTECT_PRINCIPAL
83756a424ccSmp153739 #define OVSEC_KADM_BAD_SERVER_HANDLE KADM5_BAD_SERVER_HANDLE
83856a424ccSmp153739 #define OVSEC_KADM_BAD_STRUCT_VERSION KADM5_BAD_STRUCT_VERSION
83956a424ccSmp153739 #define OVSEC_KADM_OLD_STRUCT_VERSION KADM5_OLD_STRUCT_VERSION
84056a424ccSmp153739 #define OVSEC_KADM_NEW_STRUCT_VERSION KADM5_NEW_STRUCT_VERSION
84156a424ccSmp153739 #define OVSEC_KADM_BAD_API_VERSION KADM5_BAD_API_VERSION
84256a424ccSmp153739 #define OVSEC_KADM_OLD_LIB_API_VERSION KADM5_OLD_LIB_API_VERSION
84356a424ccSmp153739 #define OVSEC_KADM_OLD_SERVER_API_VERSION KADM5_OLD_SERVER_API_VERSION
84456a424ccSmp153739 #define OVSEC_KADM_NEW_LIB_API_VERSION KADM5_NEW_LIB_API_VERSION
84556a424ccSmp153739 #define OVSEC_KADM_NEW_SERVER_API_VERSION KADM5_NEW_SERVER_API_VERSION
84656a424ccSmp153739 #define OVSEC_KADM_SECURE_PRINC_MISSING KADM5_SECURE_PRINC_MISSING
84756a424ccSmp153739 #define OVSEC_KADM_NO_RENAME_SALT KADM5_NO_RENAME_SALT
84856a424ccSmp153739 
84956a424ccSmp153739 #endif /* USE_KADM5_API_VERSION == 1 */
8507c478bd9Sstevel@tonic-gate 
85146736d35Ssemery #define MAXPRINCLEN 125
85246736d35Ssemery 
85346736d35Ssemery void trunc_name(size_t *len, char **dots);
85446736d35Ssemery 
8557c478bd9Sstevel@tonic-gate krb5_chgpwd_prot _kadm5_get_kpasswd_protocol(void *server_handle);
8567c478bd9Sstevel@tonic-gate kadm5_ret_t	kadm5_chpass_principal_v2(void *server_handle,
8577c478bd9Sstevel@tonic-gate 					krb5_principal princ,
8587c478bd9Sstevel@tonic-gate 					char *new_password,
8597c478bd9Sstevel@tonic-gate 					kadm5_ret_t *srvr_rsp_code,
8607c478bd9Sstevel@tonic-gate 					krb5_data *srvr_msg);
8617c478bd9Sstevel@tonic-gate 
8627c478bd9Sstevel@tonic-gate void handle_chpw(krb5_context context, int s, void *serverhandle,
8637c478bd9Sstevel@tonic-gate 			kadm5_config_params *params);
8647c478bd9Sstevel@tonic-gate 
8657c478bd9Sstevel@tonic-gate #ifdef __cplusplus
8667c478bd9Sstevel@tonic-gate }
8677c478bd9Sstevel@tonic-gate #endif
8687c478bd9Sstevel@tonic-gate 
8697c478bd9Sstevel@tonic-gate #endif	/* __KADM5_ADMIN_H__ */
870