xref: /onnv-gate/usr/src/lib/nsswitch/ad/common/ad_common.h (revision 12914:e95332bf1454)
18040SBaban.Kenkre@Sun.COM /*
28040SBaban.Kenkre@Sun.COM  * CDDL HEADER START
38040SBaban.Kenkre@Sun.COM  *
48040SBaban.Kenkre@Sun.COM  * The contents of this file are subject to the terms of the
58040SBaban.Kenkre@Sun.COM  * Common Development and Distribution License (the "License").
68040SBaban.Kenkre@Sun.COM  * You may not use this file except in compliance with the License.
78040SBaban.Kenkre@Sun.COM  *
88040SBaban.Kenkre@Sun.COM  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
98040SBaban.Kenkre@Sun.COM  * or http://www.opensolaris.org/os/licensing.
108040SBaban.Kenkre@Sun.COM  * See the License for the specific language governing permissions
118040SBaban.Kenkre@Sun.COM  * and limitations under the License.
128040SBaban.Kenkre@Sun.COM  *
138040SBaban.Kenkre@Sun.COM  * When distributing Covered Code, include this CDDL HEADER in each
148040SBaban.Kenkre@Sun.COM  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
158040SBaban.Kenkre@Sun.COM  * If applicable, add the following below this CDDL HEADER, with the
168040SBaban.Kenkre@Sun.COM  * fields enclosed by brackets "[]" replaced with your own identifying
178040SBaban.Kenkre@Sun.COM  * information: Portions Copyright [yyyy] [name of copyright owner]
188040SBaban.Kenkre@Sun.COM  *
198040SBaban.Kenkre@Sun.COM  * CDDL HEADER END
208040SBaban.Kenkre@Sun.COM  */
218040SBaban.Kenkre@Sun.COM /*
22*12914SJoyce.McIntosh@Sun.COM  * Copyright (c) 2008, 2010, Oracle and/or its affiliates. All rights reserved.
238040SBaban.Kenkre@Sun.COM  */
248040SBaban.Kenkre@Sun.COM 
258040SBaban.Kenkre@Sun.COM #ifndef	_AD_COMMON_H
268040SBaban.Kenkre@Sun.COM #define	_AD_COMMON_H
278040SBaban.Kenkre@Sun.COM 
288040SBaban.Kenkre@Sun.COM #ifdef	__cplusplus
298040SBaban.Kenkre@Sun.COM extern "C" {
308040SBaban.Kenkre@Sun.COM #endif
318040SBaban.Kenkre@Sun.COM 
328040SBaban.Kenkre@Sun.COM #include <ctype.h>
338040SBaban.Kenkre@Sun.COM #include <nss_dbdefs.h>
348040SBaban.Kenkre@Sun.COM #include <stdlib.h>
358040SBaban.Kenkre@Sun.COM #include <stdio.h>
368040SBaban.Kenkre@Sun.COM #include <string.h>
378040SBaban.Kenkre@Sun.COM #include <strings.h>
388040SBaban.Kenkre@Sun.COM #include <signal.h>
398040SBaban.Kenkre@Sun.COM #include <idmap.h>
408040SBaban.Kenkre@Sun.COM #include <sys/idmap.h>
419565SJordan.Brown@Sun.COM #include <rpcsvc/idmap_prot.h>
428040SBaban.Kenkre@Sun.COM #include <idmap_priv.h>
438040SBaban.Kenkre@Sun.COM #include "addisc.h"
448040SBaban.Kenkre@Sun.COM #include "libadutils.h"
458040SBaban.Kenkre@Sun.COM 
468040SBaban.Kenkre@Sun.COM #define	_GROUP	"group"
478040SBaban.Kenkre@Sun.COM #define	_PASSWD	"passwd"
488040SBaban.Kenkre@Sun.COM #define	_SHADOW	"shadow"
498040SBaban.Kenkre@Sun.COM 
508040SBaban.Kenkre@Sun.COM #define	WK_DOMAIN	"BUILTIN"
518040SBaban.Kenkre@Sun.COM #define	CFG_QUEUE_MAX_SIZE	15
528040SBaban.Kenkre@Sun.COM 
538040SBaban.Kenkre@Sun.COM #define	SEARCHFILTERLEN		256
548040SBaban.Kenkre@Sun.COM #define	RESET_ERRNO()\
558040SBaban.Kenkre@Sun.COM 	if (errno == EINVAL)\
568040SBaban.Kenkre@Sun.COM 		errno = 0;
578040SBaban.Kenkre@Sun.COM 
588040SBaban.Kenkre@Sun.COM /*
598040SBaban.Kenkre@Sun.COM  * Superset the nss_backend_t abstract data type. This ADT has
608040SBaban.Kenkre@Sun.COM  * been extended to include AD associated data structures.
618040SBaban.Kenkre@Sun.COM  */
628040SBaban.Kenkre@Sun.COM 
638040SBaban.Kenkre@Sun.COM typedef struct ad_backend *ad_backend_ptr;
648040SBaban.Kenkre@Sun.COM typedef nss_status_t (*ad_backend_op_t)(ad_backend_ptr, void *);
658040SBaban.Kenkre@Sun.COM typedef int (*fnf)(ad_backend_ptr be, nss_XbyY_args_t *argp);
668040SBaban.Kenkre@Sun.COM 
678040SBaban.Kenkre@Sun.COM typedef enum {
688040SBaban.Kenkre@Sun.COM 	NSS_AD_DB_NONE		= 0,
698040SBaban.Kenkre@Sun.COM 	NSS_AD_DB_PASSWD_BYNAME	= 1,
708040SBaban.Kenkre@Sun.COM 	NSS_AD_DB_PASSWD_BYUID	= 2,
718040SBaban.Kenkre@Sun.COM 	NSS_AD_DB_GROUP_BYNAME	= 3,
728040SBaban.Kenkre@Sun.COM 	NSS_AD_DB_GROUP_BYGID	= 4,
738040SBaban.Kenkre@Sun.COM 	NSS_AD_DB_SHADOW_BYNAME	= 5
748040SBaban.Kenkre@Sun.COM } nss_ad_db_type_t;
758040SBaban.Kenkre@Sun.COM 
768040SBaban.Kenkre@Sun.COM struct ad_backend {
778040SBaban.Kenkre@Sun.COM 	ad_backend_op_t		*ops;
788040SBaban.Kenkre@Sun.COM 	nss_dbop_t		nops;
798040SBaban.Kenkre@Sun.COM 	char			*tablename;
808040SBaban.Kenkre@Sun.COM 	const char		**attrs;
818040SBaban.Kenkre@Sun.COM 	fnf			adobj2str;
828040SBaban.Kenkre@Sun.COM 	char			*buffer;
838040SBaban.Kenkre@Sun.COM 	int			buflen;
848040SBaban.Kenkre@Sun.COM 	uid_t			uid;
858040SBaban.Kenkre@Sun.COM 	adutils_result_t	*result;
868040SBaban.Kenkre@Sun.COM 	nss_ad_db_type_t	db_type;
878040SBaban.Kenkre@Sun.COM };
888040SBaban.Kenkre@Sun.COM 
898040SBaban.Kenkre@Sun.COM typedef struct nssad_prop {
908040SBaban.Kenkre@Sun.COM 	char			*domain_name;
918040SBaban.Kenkre@Sun.COM 	idmap_ad_disc_ds_t	*domain_controller;
928040SBaban.Kenkre@Sun.COM } nssad_prop_t;
938040SBaban.Kenkre@Sun.COM 
948040SBaban.Kenkre@Sun.COM typedef struct nssad_cfg {
958040SBaban.Kenkre@Sun.COM 	pthread_rwlock_t	lock;
968040SBaban.Kenkre@Sun.COM 	nssad_prop_t		props;
978040SBaban.Kenkre@Sun.COM 	ad_disc_t		ad_ctx;
988040SBaban.Kenkre@Sun.COM 	adutils_ad_t		*ad;
998040SBaban.Kenkre@Sun.COM 	struct nssad_cfg	*qnext;
1008040SBaban.Kenkre@Sun.COM } nssad_cfg_t;
1018040SBaban.Kenkre@Sun.COM 
1028040SBaban.Kenkre@Sun.COM typedef struct nssad_state {
1038040SBaban.Kenkre@Sun.COM 	nssad_cfg_t		*qhead;
1048040SBaban.Kenkre@Sun.COM 	nssad_cfg_t		*qtail;
1058040SBaban.Kenkre@Sun.COM 	uint32_t		qcount;
1068040SBaban.Kenkre@Sun.COM } nssad_state_t;
1078040SBaban.Kenkre@Sun.COM 
1088040SBaban.Kenkre@Sun.COM extern nss_status_t	_nss_ad_destr(ad_backend_ptr be, void *a);
1098040SBaban.Kenkre@Sun.COM extern nss_status_t	_nss_ad_endent(ad_backend_ptr be, void *a);
1108040SBaban.Kenkre@Sun.COM extern nss_status_t	_nss_ad_setent(ad_backend_ptr be, void *a);
1118040SBaban.Kenkre@Sun.COM extern nss_status_t	_nss_ad_getent(ad_backend_ptr be, void *a);
1128040SBaban.Kenkre@Sun.COM nss_backend_t		*_nss_ad_constr(ad_backend_op_t ops[], int nops,
1138040SBaban.Kenkre@Sun.COM 			char *tablename, const char **attrs, fnf ldapobj2str);
1148040SBaban.Kenkre@Sun.COM extern nss_status_t	_nss_ad_lookup(ad_backend_ptr be,
1158040SBaban.Kenkre@Sun.COM 			nss_XbyY_args_t *argp, const char *database,
1168040SBaban.Kenkre@Sun.COM 			const char *searchfilter, const char *dname,
1178040SBaban.Kenkre@Sun.COM 			int *try_idmap);
1188040SBaban.Kenkre@Sun.COM extern nss_status_t	_nss_ad_marshall_data(ad_backend_ptr be,
1198040SBaban.Kenkre@Sun.COM 			nss_XbyY_args_t *argp);
1208040SBaban.Kenkre@Sun.COM extern nss_status_t	_nss_ad_sanitize_status(ad_backend_ptr be,
1218040SBaban.Kenkre@Sun.COM 			nss_XbyY_args_t *argp, nss_status_t stat);
1228040SBaban.Kenkre@Sun.COM extern int		_ldap_filter_name(char *filter_name, const char *name,
1238040SBaban.Kenkre@Sun.COM 			int filter_name_size);
1248040SBaban.Kenkre@Sun.COM 
1258040SBaban.Kenkre@Sun.COM 
1268040SBaban.Kenkre@Sun.COM #ifdef	__cplusplus
1278040SBaban.Kenkre@Sun.COM }
1288040SBaban.Kenkre@Sun.COM #endif
1298040SBaban.Kenkre@Sun.COM 
1308040SBaban.Kenkre@Sun.COM #endif	/* _AD_COMMON_H */
131