xref: /illumos-gate/usr/src/lib/libsldap/common/ns_internal.h (revision 442384bb4f40e4893df0a79549264f04218e1d9f)
17c478bd9Sstevel@tonic-gate /*
27c478bd9Sstevel@tonic-gate  * CDDL HEADER START
37c478bd9Sstevel@tonic-gate  *
47c478bd9Sstevel@tonic-gate  * The contents of this file are subject to the terms of the
5689c2bf4Sjanga  * Common Development and Distribution License (the "License").
6689c2bf4Sjanga  * You may not use this file except in compliance with the License.
77c478bd9Sstevel@tonic-gate  *
87c478bd9Sstevel@tonic-gate  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
97c478bd9Sstevel@tonic-gate  * or http://www.opensolaris.org/os/licensing.
107c478bd9Sstevel@tonic-gate  * See the License for the specific language governing permissions
117c478bd9Sstevel@tonic-gate  * and limitations under the License.
127c478bd9Sstevel@tonic-gate  *
137c478bd9Sstevel@tonic-gate  * When distributing Covered Code, include this CDDL HEADER in each
147c478bd9Sstevel@tonic-gate  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
157c478bd9Sstevel@tonic-gate  * If applicable, add the following below this CDDL HEADER, with the
167c478bd9Sstevel@tonic-gate  * fields enclosed by brackets "[]" replaced with your own identifying
177c478bd9Sstevel@tonic-gate  * information: Portions Copyright [yyyy] [name of copyright owner]
187c478bd9Sstevel@tonic-gate  *
197c478bd9Sstevel@tonic-gate  * CDDL HEADER END
207c478bd9Sstevel@tonic-gate  */
21*442384bbSJulian Pullen 
227c478bd9Sstevel@tonic-gate /*
239f2fd570SJulian Pullen  * Copyright (c) 1999, 2010, Oracle and/or its affiliates. All rights reserved.
247c478bd9Sstevel@tonic-gate  */
257c478bd9Sstevel@tonic-gate 
267c478bd9Sstevel@tonic-gate 
277c478bd9Sstevel@tonic-gate #ifndef	_NS_INTERNAL_H
287c478bd9Sstevel@tonic-gate #define	_NS_INTERNAL_H
297c478bd9Sstevel@tonic-gate 
307c478bd9Sstevel@tonic-gate #ifdef __cplusplus
317c478bd9Sstevel@tonic-gate extern "C" {
327c478bd9Sstevel@tonic-gate #endif
337c478bd9Sstevel@tonic-gate 
347c478bd9Sstevel@tonic-gate #include <stdio.h>
357c478bd9Sstevel@tonic-gate #include <sys/types.h>
367c478bd9Sstevel@tonic-gate #include <sys/time.h>
377c478bd9Sstevel@tonic-gate #include <thread.h>
387c478bd9Sstevel@tonic-gate #include <lber.h>
397c478bd9Sstevel@tonic-gate #include <ldap.h>
407c478bd9Sstevel@tonic-gate #include "ns_sldap.h"
41e1dd0a2fSth #include "ns_cache_door.h"
427c478bd9Sstevel@tonic-gate 
437c478bd9Sstevel@tonic-gate /*
447c478bd9Sstevel@tonic-gate  * INTERNALLY USED CONSTANTS
457c478bd9Sstevel@tonic-gate  */
467c478bd9Sstevel@tonic-gate 
477c478bd9Sstevel@tonic-gate #define	MAXERROR		2000
487c478bd9Sstevel@tonic-gate #define	TRUE			1
497c478bd9Sstevel@tonic-gate #define	FALSE			0
507c478bd9Sstevel@tonic-gate #define	NSLDAPDIRECTORY		"/var/ldap"
517c478bd9Sstevel@tonic-gate #define	NSCONFIGFILE		"/var/ldap/ldap_client_file"
527c478bd9Sstevel@tonic-gate #define	NSCONFIGREFRESH		"/var/ldap/ldap_client_file.refresh"
537c478bd9Sstevel@tonic-gate #define	NSCREDFILE		"/var/ldap/ldap_client_cred"
547c478bd9Sstevel@tonic-gate #define	NSCREDREFRESH		"/var/ldap/ldap_client_cred.refresh"
557c478bd9Sstevel@tonic-gate #define	ROTORSIZE		256
567c478bd9Sstevel@tonic-gate #define	MASK			0377
577c478bd9Sstevel@tonic-gate #define	LDAPMAXHARDLOOKUPTIME	256
587c478bd9Sstevel@tonic-gate #define	DONOTEDIT		\
597c478bd9Sstevel@tonic-gate 	"Do not edit this file manually; your changes will be lost." \
607c478bd9Sstevel@tonic-gate 	"Please use ldapclient (1M) instead."
617c478bd9Sstevel@tonic-gate #define	MAXPORTNUMBER		65535
627c478bd9Sstevel@tonic-gate #define	MAXPORTNUMBER_STR	"65535"
637c478bd9Sstevel@tonic-gate #define	CREDFILE		0
647c478bd9Sstevel@tonic-gate #define	CONFIGFILE		1
657c478bd9Sstevel@tonic-gate #define	UIDNUMFILTER		"(&(objectclass=posixAccount)(uidnumber=%s))"
667c478bd9Sstevel@tonic-gate #define	UIDNUMFILTER_SSD 	"(&(%%s)(uidnumber=%s))"
677c478bd9Sstevel@tonic-gate #define	UIDFILTER		"(&(objectclass=posixAccount)(uid=%s))"
687c478bd9Sstevel@tonic-gate #define	UIDFILTER_SSD		"(&(%%s)(uid=%s))"
697c478bd9Sstevel@tonic-gate #define	HOSTFILTER		"(&(objectclass=ipHost)(cn=%s))"
707c478bd9Sstevel@tonic-gate #define	HOSTFILTER_SSD		"(&(%%s)(cn=%s))"
717c478bd9Sstevel@tonic-gate 
727c478bd9Sstevel@tonic-gate #define	SIMPLEPAGECTRLFLAG	1
737c478bd9Sstevel@tonic-gate #define	VLVCTRLFLAG		2
747c478bd9Sstevel@tonic-gate 
757c478bd9Sstevel@tonic-gate #define	LISTPAGESIZE		1000
767c478bd9Sstevel@tonic-gate #define	ENUMPAGESIZE		100
777c478bd9Sstevel@tonic-gate 
787c478bd9Sstevel@tonic-gate #define	DEFMAX			8
797c478bd9Sstevel@tonic-gate #define	TOKENSEPARATOR		'='
807c478bd9Sstevel@tonic-gate #define	QUOTETOK		'"'
817c478bd9Sstevel@tonic-gate #define	SPACETOK		' '
827c478bd9Sstevel@tonic-gate #define	COMMATOK		','
837c478bd9Sstevel@tonic-gate #define	COLONTOK		':'
847c478bd9Sstevel@tonic-gate #define	QUESTTOK		'?'
857c478bd9Sstevel@tonic-gate #define	SEMITOK			';'
867c478bd9Sstevel@tonic-gate #define	TABTOK			'\t'
877c478bd9Sstevel@tonic-gate #define	OPARATOK		'('
887c478bd9Sstevel@tonic-gate #define	CPARATOK		')'
897c478bd9Sstevel@tonic-gate #define	BSLTOK			'\\'
907c478bd9Sstevel@tonic-gate #define	DOORLINESEP		"\07"
91e1dd0a2fSth #define	DOORLINESEP_CHR		0x7
927c478bd9Sstevel@tonic-gate #define	COMMASEP		", "
937c478bd9Sstevel@tonic-gate #define	SPACESEP		" "
947c478bd9Sstevel@tonic-gate #define	SEMISEP			";"
957c478bd9Sstevel@tonic-gate #define	COLONSEP		":"
967c478bd9Sstevel@tonic-gate #define	COLSPSEP		": "
977c478bd9Sstevel@tonic-gate #define	EQUALSEP		"="
987c478bd9Sstevel@tonic-gate #define	EQUSPSEP		"= "
997c478bd9Sstevel@tonic-gate #define	LAST_VALUE		(int)NS_LDAP_HOST_CERTPATH_P
100434c5a06SMilan Jurik #define	BUFSIZE			BUFSIZ
1017c478bd9Sstevel@tonic-gate #define	DEFAULTCONFIGNAME	"__default_config"
1027c478bd9Sstevel@tonic-gate #define	EXP_DEFAULT_TTL		"43200"	/* 12 hours TTL */
1037c478bd9Sstevel@tonic-gate #define	CRYPTMARK		"{NS1}"
1047c478bd9Sstevel@tonic-gate #define	DOORBUFFERSIZE		8192
1057c478bd9Sstevel@tonic-gate 
1067c478bd9Sstevel@tonic-gate #define	LDIF_FMT_STR		"%s: %s"
1077c478bd9Sstevel@tonic-gate #define	FILE_FMT_STR		"%s= %s"
1087c478bd9Sstevel@tonic-gate #define	DOOR_FMT_STR		"%s=%s"
1097c478bd9Sstevel@tonic-gate 
1107c478bd9Sstevel@tonic-gate #define	SESSION_CACHE_INC	8
1117c478bd9Sstevel@tonic-gate #define	CONID_OFFSET		1024
1127c478bd9Sstevel@tonic-gate #define	NS_DEFAULT_BIND_TIMEOUT		30 /* timeout value in seconds */
1137c478bd9Sstevel@tonic-gate #define	NS_DEFAULT_SEARCH_TIMEOUT	30 /* timeout value in seconds */
1147c478bd9Sstevel@tonic-gate 
1157c478bd9Sstevel@tonic-gate /* max rdn length in conversion routines used by __ns_ldap_addTypedEntry() */
11650b7bd51SSreedhar Chalamalasetti - Sun Microsystems - Bangalore India #define	RDNSIZE			512
1177c478bd9Sstevel@tonic-gate 
118dd1104fbSMichen Chang /*
119dd1104fbSMichen Chang  * special service used by ldap_cachemgr to indicate a shadow update
120dd1104fbSMichen Chang  * is to be done with the credential of the administrator identity
121dd1104fbSMichen Chang  */
122dd1104fbSMichen Chang #define	NS_ADMIN_SHADOW_UPDATE	"shadow__admin_update"
1237c478bd9Sstevel@tonic-gate 
1247c478bd9Sstevel@tonic-gate /* Phase 1 profile information */
1257c478bd9Sstevel@tonic-gate #define	_PROFILE1_OBJECTCLASS	"SolarisNamingProfile"
1267c478bd9Sstevel@tonic-gate #define	_PROFILE_CONTAINER	"profile"
1277c478bd9Sstevel@tonic-gate #define	_PROFILE_FILTER		"(&(|(objectclass=%s)(objectclass=%s))(cn=%s))"
1287c478bd9Sstevel@tonic-gate 
1297c478bd9Sstevel@tonic-gate /* Phase 2 profile information */
1307c478bd9Sstevel@tonic-gate #define	_PROFILE2_OBJECTCLASS		"DUAConfigProfile"
1317c478bd9Sstevel@tonic-gate 
1327c478bd9Sstevel@tonic-gate /* Common to all profiles */
1337c478bd9Sstevel@tonic-gate #define	_P_CN			"cn"
1347c478bd9Sstevel@tonic-gate 
1357c478bd9Sstevel@tonic-gate /* Native LDAP Phase 1 Specific Profile Attributes */
1367c478bd9Sstevel@tonic-gate #define	_P1_SERVERS			"SolarisLDAPServers"
1377c478bd9Sstevel@tonic-gate #define	_P1_SEARCHBASEDN		"SolarisSearchBaseDN"
1387c478bd9Sstevel@tonic-gate #define	_P1_CACHETTL			"SolarisCacheTTL"
1397c478bd9Sstevel@tonic-gate #define	_P1_BINDDN			"SolarisBindDN"
1407c478bd9Sstevel@tonic-gate #define	_P1_BINDPASSWORD		"SolarisBindPassword"
1417c478bd9Sstevel@tonic-gate #define	_P1_AUTHMETHOD			"SolarisAuthMethod"
1427c478bd9Sstevel@tonic-gate #define	_P1_TRANSPORTSECURITY		"SolarisTransportSecurity"
1437c478bd9Sstevel@tonic-gate #define	_P1_CERTIFICATEPATH		"SolarisCertificatePath"
1447c478bd9Sstevel@tonic-gate #define	_P1_CERTIFICATEPASSWORD		"SolarisCertificatePassword"
1457c478bd9Sstevel@tonic-gate #define	_P1_DATASEARCHDN		"SolarisDataSearchDN"
1467c478bd9Sstevel@tonic-gate #define	_P1_SEARCHSCOPE			"SolarisSearchScope"
1477c478bd9Sstevel@tonic-gate #define	_P1_SEARCHTIMELIMIT		"SolarisSearchTimeLimit"
1487c478bd9Sstevel@tonic-gate #define	_P1_PREFERREDSERVER		"SolarisPreferredServer"
1497c478bd9Sstevel@tonic-gate #define	_P1_PREFERREDSERVERONLY		"SolarisPreferredServerOnly"
1507c478bd9Sstevel@tonic-gate #define	_P1_SEARCHREFERRAL		"SolarisSearchReferral"
1517c478bd9Sstevel@tonic-gate #define	_P1_BINDTIMELIMIT		"SolarisBindTimeLimit"
1527c478bd9Sstevel@tonic-gate 
1537c478bd9Sstevel@tonic-gate /* Native LDAP Phase 2 Specific Profile Attributes */
1547c478bd9Sstevel@tonic-gate #define	_P2_PREFERREDSERVER		"preferredServerList"
1557c478bd9Sstevel@tonic-gate #define	_P2_DEFAULTSERVER		"defaultServerList"
1567c478bd9Sstevel@tonic-gate #define	_P2_SEARCHBASEDN		"defaultSearchBase"
1577c478bd9Sstevel@tonic-gate #define	_P2_SEARCHSCOPE			"defaultSearchScope"
1587c478bd9Sstevel@tonic-gate #define	_P2_AUTHMETHOD			"authenticationMethod"
1597c478bd9Sstevel@tonic-gate #define	_P2_CREDENTIALLEVEL		"credentialLevel"
1607c478bd9Sstevel@tonic-gate #define	_P2_SERVICESEARCHDESC		"serviceSearchDescriptor"
1617c478bd9Sstevel@tonic-gate #define	_P2_SEARCHTIMELIMIT		"searchTimeLimit"
1627c478bd9Sstevel@tonic-gate #define	_P2_BINDTIMELIMIT		"bindTimeLimit"
1637c478bd9Sstevel@tonic-gate #define	_P2_FOLLOWREFERRALS		"followReferrals"
1647c478bd9Sstevel@tonic-gate #define	_P2_PROFILETTL			"profileTTL"
1657c478bd9Sstevel@tonic-gate #define	_P2_ATTRIBUTEMAP		"attributeMap"
1667c478bd9Sstevel@tonic-gate #define	_P2_OBJECTCLASSMAP		"objectClassMap"
1677c478bd9Sstevel@tonic-gate #define	_P2_SERVICECREDLEVEL		"serviceCredentialLevel"
1687c478bd9Sstevel@tonic-gate #define	_P2_SERVICEAUTHMETHOD		"serviceAuthenticationMethod"
1697c478bd9Sstevel@tonic-gate 
1707c478bd9Sstevel@tonic-gate /* Control & SASL information from RootDSE door call */
1717c478bd9Sstevel@tonic-gate #define	_SASLMECHANISM			"supportedSASLmechanisms"
1727c478bd9Sstevel@tonic-gate #define	_SASLMECHANISM_LEN		23
1737c478bd9Sstevel@tonic-gate #define	_SUPPORTEDCONTROL		"supportedControl"
1747c478bd9Sstevel@tonic-gate #define	_SUPPORTEDCONTROL_LEN		16
1757c478bd9Sstevel@tonic-gate 
1767c478bd9Sstevel@tonic-gate #define	NS_HASH_MAX	257
1777c478bd9Sstevel@tonic-gate #define	NS_HASH_SCHEMA_MAPPING_EXISTED	"=MAPPING EXISTED="
1787c478bd9Sstevel@tonic-gate #define	NS_HASH_RC_SUCCESS		1
1797c478bd9Sstevel@tonic-gate #define	NS_HASH_RC_NO_MEMORY		-1
1807c478bd9Sstevel@tonic-gate #define	NS_HASH_RC_CONFIG_ERROR		-2
1817c478bd9Sstevel@tonic-gate #define	NS_HASH_RC_EXISTED		-3
1827c478bd9Sstevel@tonic-gate #define	NS_HASH_RC_SYNTAX_ERROR		-4
1837c478bd9Sstevel@tonic-gate 
1847c478bd9Sstevel@tonic-gate /* Password management related error message from iDS ldap server */
1857c478bd9Sstevel@tonic-gate #define	NS_PWDERR_MAXTRIES		\
1867c478bd9Sstevel@tonic-gate 	"Exceed password retry limit."
1877c478bd9Sstevel@tonic-gate #define	NS_PWDERR_EXPIRED		\
1887c478bd9Sstevel@tonic-gate 	"password expired!"
1897c478bd9Sstevel@tonic-gate #define	NS_PWDERR_ACCT_INACTIVATED	\
1907c478bd9Sstevel@tonic-gate 	"Account inactivated. Contact system administrator."
1917c478bd9Sstevel@tonic-gate #define	NS_PWDERR_CHANGE_NOT_ALLOW	\
1927c478bd9Sstevel@tonic-gate 	"user is not allowed to change password"
1937c478bd9Sstevel@tonic-gate #define	NS_PWDERR_INVALID_SYNTAX	\
1947c478bd9Sstevel@tonic-gate 	"invalid password syntax"
1957c478bd9Sstevel@tonic-gate #define	NS_PWDERR_TRIVIAL_PASSWD	\
1967c478bd9Sstevel@tonic-gate 	"Password failed triviality check"
1977c478bd9Sstevel@tonic-gate #define	NS_PWDERR_IN_HISTORY	\
1987c478bd9Sstevel@tonic-gate 	"password in history"
1997c478bd9Sstevel@tonic-gate #define	NS_PWDERR_WITHIN_MIN_AGE	\
2007c478bd9Sstevel@tonic-gate 	"within password minimum age"
2017c478bd9Sstevel@tonic-gate 
2027c478bd9Sstevel@tonic-gate /*
2037c478bd9Sstevel@tonic-gate  * INTERNALLY USED MACROS
2047c478bd9Sstevel@tonic-gate  */
2057c478bd9Sstevel@tonic-gate 
2067c478bd9Sstevel@tonic-gate void	__s_api_debug_pause(int priority, int st, const char *mesg);
2077c478bd9Sstevel@tonic-gate 
2087c478bd9Sstevel@tonic-gate #define	NULL_OR_STR(str)	(!(str) || *(str) == '\0' ? "<NULL>" : (str))
2097c478bd9Sstevel@tonic-gate 
2107c478bd9Sstevel@tonic-gate /*
2117c478bd9Sstevel@tonic-gate  * MKERROR: builds the error structure and fills in the status and
2127c478bd9Sstevel@tonic-gate  * the message.  The message must be a freeable (non-static) string.
2137c478bd9Sstevel@tonic-gate  * If it fails to allocate memory for the error structure,
2147c478bd9Sstevel@tonic-gate  * it will return the retErr.
2157c478bd9Sstevel@tonic-gate  */
2167c478bd9Sstevel@tonic-gate #define	MKERROR(priority, err, st, mesg, retErr) \
2177c478bd9Sstevel@tonic-gate 	if (((err) = calloc(1, sizeof (struct ns_ldap_error))) == NULL) \
2187c478bd9Sstevel@tonic-gate 		return (retErr); \
2197c478bd9Sstevel@tonic-gate 	(err)->message = mesg; \
2207c478bd9Sstevel@tonic-gate 	(err)->status = (st); \
2217c478bd9Sstevel@tonic-gate 	__s_api_debug_pause(priority, st, (err)->message);
2227c478bd9Sstevel@tonic-gate 
2237c478bd9Sstevel@tonic-gate /*
2247c478bd9Sstevel@tonic-gate  * MKERROR_PWD_MGMT is almost the same as MKERROR
2257c478bd9Sstevel@tonic-gate  * except that it takes two more inputs to fill in the
2267c478bd9Sstevel@tonic-gate  * password management information part of the
2277c478bd9Sstevel@tonic-gate  * ns_ldap_error structure pointed to by err,
2287c478bd9Sstevel@tonic-gate  * and it does not log a syslog message.
2297c478bd9Sstevel@tonic-gate  */
2307c478bd9Sstevel@tonic-gate #define	MKERROR_PWD_MGMT(err, st, mesg, pwd_status, sec_until_exp, retErr) \
2317c478bd9Sstevel@tonic-gate 	if (((err) = calloc(1, sizeof (struct ns_ldap_error))) == NULL) \
2327c478bd9Sstevel@tonic-gate 		return (retErr); \
2337c478bd9Sstevel@tonic-gate 	(err)->message = mesg; \
2347c478bd9Sstevel@tonic-gate 	(err)->status = (st); \
2357c478bd9Sstevel@tonic-gate 	(err)->pwd_mgmt.status = (pwd_status); \
2367c478bd9Sstevel@tonic-gate 	(err)->pwd_mgmt.sec_until_expired = (sec_until_exp);
2377c478bd9Sstevel@tonic-gate 
2387c478bd9Sstevel@tonic-gate #ifdef DEBUG
2397c478bd9Sstevel@tonic-gate #define	NSLDAPTRACE(variable, setequal, message) \
2407c478bd9Sstevel@tonic-gate 	if (variable > 0 || ((setequal != 0) && (variable == setequal))) { \
2417c478bd9Sstevel@tonic-gate 		char buf[BUFSIZ]; \
2427c478bd9Sstevel@tonic-gate 		(void) snprintf(buf, BUFSIZ, message); \
2437c478bd9Sstevel@tonic-gate 		(void) write(__ldap_debug_file, buf); \
2447c478bd9Sstevel@tonic-gate 	}
2457c478bd9Sstevel@tonic-gate #endif
2467c478bd9Sstevel@tonic-gate 
2477c478bd9Sstevel@tonic-gate /*
2487c478bd9Sstevel@tonic-gate  * INTERNAL DATA STRUCTURES
2497c478bd9Sstevel@tonic-gate  */
2507c478bd9Sstevel@tonic-gate 
2517c478bd9Sstevel@tonic-gate /*
2527c478bd9Sstevel@tonic-gate  * configuration entry type
2537c478bd9Sstevel@tonic-gate  */
2547c478bd9Sstevel@tonic-gate 
2557c478bd9Sstevel@tonic-gate typedef enum {
2567c478bd9Sstevel@tonic-gate 	SERVERCONFIG	= 1,
2577c478bd9Sstevel@tonic-gate 	CLIENTCONFIG	= 2,
2587c478bd9Sstevel@tonic-gate 	CREDCONFIG	= 3
2597c478bd9Sstevel@tonic-gate } ns_conftype_t;
2607c478bd9Sstevel@tonic-gate 
2617c478bd9Sstevel@tonic-gate /*
2627c478bd9Sstevel@tonic-gate  * datatype of a config entry
2637c478bd9Sstevel@tonic-gate  */
2647c478bd9Sstevel@tonic-gate 
2657c478bd9Sstevel@tonic-gate typedef enum {
2667c478bd9Sstevel@tonic-gate 	NS_UNKNOWN	= 0,
2677c478bd9Sstevel@tonic-gate 	CHARPTR		= 1,		/* Single character pointer */
2687c478bd9Sstevel@tonic-gate 	ARRAYCP		= 2,		/* comma sep array of char pointers */
2697c478bd9Sstevel@tonic-gate 	ARRAYAUTH	= 3,		/* Array of auths */
2707c478bd9Sstevel@tonic-gate 	TIMET		= 4,		/* time relative value (TTL) */
2717c478bd9Sstevel@tonic-gate 	INT		= 5,		/* single integer */
2727c478bd9Sstevel@tonic-gate 	SSDLIST		= 6,		/* service search descriptor */
2737c478bd9Sstevel@tonic-gate 	ATTRMAP		= 7,		/* attribute mapping */
2747c478bd9Sstevel@tonic-gate 	OBJMAP		= 8,		/* objectclass mapping */
2757c478bd9Sstevel@tonic-gate 	SERVLIST	= 9,		/* serverlist (SP sep array) */
2767c478bd9Sstevel@tonic-gate 	ARRAYCRED	= 10,		/* Array of credentialLevels */
2777c478bd9Sstevel@tonic-gate 	SAMLIST		= 11,		/* serviceAuthenticationMethod */
2787c478bd9Sstevel@tonic-gate 	SCLLIST		= 12		/* serviceCredentialLevel */
2797c478bd9Sstevel@tonic-gate } ns_datatype_t;
2807c478bd9Sstevel@tonic-gate 
2817c478bd9Sstevel@tonic-gate typedef enum {
2827c478bd9Sstevel@tonic-gate 	NS_SUCCESS,
2837c478bd9Sstevel@tonic-gate 	NS_NOTFOUND,
2847c478bd9Sstevel@tonic-gate 	NS_PARSE_ERR
2857c478bd9Sstevel@tonic-gate } ns_parse_status;
2867c478bd9Sstevel@tonic-gate 
2877c478bd9Sstevel@tonic-gate typedef enum {
2887c478bd9Sstevel@tonic-gate 	NS_DOOR_FMT	= 1,
2897c478bd9Sstevel@tonic-gate 	NS_LDIF_FMT	= 2,
2907c478bd9Sstevel@tonic-gate 	NS_FILE_FMT	= 3
2917c478bd9Sstevel@tonic-gate } ns_strfmt_t;
2927c478bd9Sstevel@tonic-gate 
2937c478bd9Sstevel@tonic-gate /*
2947c478bd9Sstevel@tonic-gate  * This enum reduces the number of version string compares
2957c478bd9Sstevel@tonic-gate  * against NS_LDAP_VERSION_1 and NS_LDAP_VERSION_2
2967c478bd9Sstevel@tonic-gate  */
2977c478bd9Sstevel@tonic-gate 
2987c478bd9Sstevel@tonic-gate typedef enum {
2997c478bd9Sstevel@tonic-gate 	NS_LDAP_V1	= 1000,
3007c478bd9Sstevel@tonic-gate 	NS_LDAP_V2	= 2000
3017c478bd9Sstevel@tonic-gate } ns_version_t;
3027c478bd9Sstevel@tonic-gate 
3037c478bd9Sstevel@tonic-gate /*
3047c478bd9Sstevel@tonic-gate  * enum<->string mapping construct
3057c478bd9Sstevel@tonic-gate  */
3067c478bd9Sstevel@tonic-gate 
3077c478bd9Sstevel@tonic-gate typedef struct ns_enum_map {
3087c478bd9Sstevel@tonic-gate 	int	value;
3097c478bd9Sstevel@tonic-gate 	char	*name;
3107c478bd9Sstevel@tonic-gate } ns_enum_map;
3117c478bd9Sstevel@tonic-gate 
3127c478bd9Sstevel@tonic-gate #define	ENUM2INT(x)		((int)(x))
3137c478bd9Sstevel@tonic-gate 
3147c478bd9Sstevel@tonic-gate #define	INT2PARAMINDEXENUM(x)	((ParamIndexType)(x))
3157c478bd9Sstevel@tonic-gate #define	INT2SEARCHREFENUM(x)	((SearchRef_t)(x))
3167c478bd9Sstevel@tonic-gate #define	INT2SCOPEENUM(x)	((ScopeType_t)(x))
3177c478bd9Sstevel@tonic-gate #define	INT2AUTHENUM(x)		((AuthType_t)(x))
3187c478bd9Sstevel@tonic-gate #define	INT2SECENUM(x)		((TlsType_t)(x))
3197c478bd9Sstevel@tonic-gate #define	INT2PREFONLYENUM(x)	((PrefOnly_t)(x))
3207c478bd9Sstevel@tonic-gate #define	INT2CREDLEVELENUM(x)	((CredLevel_t)(x))
321dd1104fbSMichen Chang #define	INT2SHADOWUPDATENUM(x)	((enableShadowUpdate_t)(x))
3227c478bd9Sstevel@tonic-gate 
3237c478bd9Sstevel@tonic-gate #define	INT2LDAPRETURN(x)	((ns_ldap_return_code)(x))
3247c478bd9Sstevel@tonic-gate #define	INT2CONFIGRETURN(x)	((ns_ldap_config_return_code)(x))
3257c478bd9Sstevel@tonic-gate #define	INT2PARTIALRETURN(x)	((ns_ldap_partial_return_code)(x))
3267c478bd9Sstevel@tonic-gate 
3277c478bd9Sstevel@tonic-gate /*
3287c478bd9Sstevel@tonic-gate  * This structure maps service name to rdn components
3297c478bd9Sstevel@tonic-gate  * for use in __ns_getDNs. It also defines the SSD-to-use
3307c478bd9Sstevel@tonic-gate  * service for use in __s_api_get_SSDtoUse_service.
3317c478bd9Sstevel@tonic-gate  * The idea of an SSD-to-use service is to reduce the configuration
3327c478bd9Sstevel@tonic-gate  * complexity. For a service, which does not have its own entries in
3337c478bd9Sstevel@tonic-gate  * the LDAP directory, SSD for it is useless, and should not be set.
3347c478bd9Sstevel@tonic-gate  * But since this service must share the container with at least
3357c478bd9Sstevel@tonic-gate  * one other service which does have it own entries, the SSD for
3367c478bd9Sstevel@tonic-gate  * this other service will be shared by this service.
3377c478bd9Sstevel@tonic-gate  * This other service is called the SSD-to-use service.
3387c478bd9Sstevel@tonic-gate  *
3397c478bd9Sstevel@tonic-gate  */
3407c478bd9Sstevel@tonic-gate 
3417c478bd9Sstevel@tonic-gate typedef struct ns_service_map {
3427c478bd9Sstevel@tonic-gate 	char	*service;
3437c478bd9Sstevel@tonic-gate 	char	*rdn;
3447c478bd9Sstevel@tonic-gate 	char	*SSDtoUse_service;
3457c478bd9Sstevel@tonic-gate } ns_service_map;
3467c478bd9Sstevel@tonic-gate 
3477c478bd9Sstevel@tonic-gate /*
3487c478bd9Sstevel@tonic-gate  * This structure contains a single mapping from:
3497c478bd9Sstevel@tonic-gate  * service:orig -> list of mapped
3507c478bd9Sstevel@tonic-gate  */
3517c478bd9Sstevel@tonic-gate 
3527c478bd9Sstevel@tonic-gate typedef enum {
3537c478bd9Sstevel@tonic-gate 	NS_ATTR_MAP,
3547c478bd9Sstevel@tonic-gate 	NS_OBJ_MAP
3557c478bd9Sstevel@tonic-gate } ns_maptype_t;
3567c478bd9Sstevel@tonic-gate 
3577c478bd9Sstevel@tonic-gate typedef struct ns_mapping {
3587c478bd9Sstevel@tonic-gate 	ns_maptype_t	type;
3597c478bd9Sstevel@tonic-gate 	char		*service;
3607c478bd9Sstevel@tonic-gate 	char		*orig;
3617c478bd9Sstevel@tonic-gate 	char		**map;
3627c478bd9Sstevel@tonic-gate } ns_mapping_t;
3637c478bd9Sstevel@tonic-gate 
3647c478bd9Sstevel@tonic-gate /*
3657c478bd9Sstevel@tonic-gate  * The following is the list of internal libsldap configuration data
3667c478bd9Sstevel@tonic-gate  * structures.  The configuration is populated normally once per
3677c478bd9Sstevel@tonic-gate  * application.  The assumption is that in applications can be
3687c478bd9Sstevel@tonic-gate  * relatively short lived (IE ls via nsswitch) so it is important to
3697c478bd9Sstevel@tonic-gate  * keep configuration to a minimum, but keep lookups fast.
3707c478bd9Sstevel@tonic-gate  *
3717c478bd9Sstevel@tonic-gate  * Assumptions:
3727c478bd9Sstevel@tonic-gate  * 1 configuration entry per domain, and almost always 1 domain
3737c478bd9Sstevel@tonic-gate  * per app.  Hooks exist for multiple domains per app.
3747c478bd9Sstevel@tonic-gate  *
3757c478bd9Sstevel@tonic-gate  * Configurations are read in from client file cache or from LDAP.
3767c478bd9Sstevel@tonic-gate  * Attribute/objectclass mappings are hashed to improve lookup
3777c478bd9Sstevel@tonic-gate  * speed.
3787c478bd9Sstevel@tonic-gate  */
3797c478bd9Sstevel@tonic-gate 
3807c478bd9Sstevel@tonic-gate /*
3817c478bd9Sstevel@tonic-gate  * Hash entry types
3827c478bd9Sstevel@tonic-gate  */
3837c478bd9Sstevel@tonic-gate typedef enum	_ns_hashtype_t {
3847c478bd9Sstevel@tonic-gate 	NS_HASH_AMAP	= 1,		/* attr map */
3857c478bd9Sstevel@tonic-gate 	NS_HASH_RAMAP	= 2,		/* reverse attr map */
3867c478bd9Sstevel@tonic-gate 	NS_HASH_OMAP	= 3,		/* oc map */
3877c478bd9Sstevel@tonic-gate 	NS_HASH_ROMAP	= 4,		/* reverse oc map */
3887c478bd9Sstevel@tonic-gate 	NS_HASH_VOID	= 5
3897c478bd9Sstevel@tonic-gate } ns_hashtype_t;
3907c478bd9Sstevel@tonic-gate 
3917c478bd9Sstevel@tonic-gate typedef struct ns_hash {
3927c478bd9Sstevel@tonic-gate 	ns_hashtype_t	h_type;
3937c478bd9Sstevel@tonic-gate 	ns_mapping_t	*h_map;
3947c478bd9Sstevel@tonic-gate 	struct ns_hash	*h_next;
3957c478bd9Sstevel@tonic-gate 	struct ns_hash	*h_llnext;
3967c478bd9Sstevel@tonic-gate } ns_hash_t;
3977c478bd9Sstevel@tonic-gate 
3987c478bd9Sstevel@tonic-gate /*
3997c478bd9Sstevel@tonic-gate  * This structure defines the format of an internal configuration
4007c478bd9Sstevel@tonic-gate  * parameter for ns_ldap client.
4017c478bd9Sstevel@tonic-gate  */
4027c478bd9Sstevel@tonic-gate 
4037c478bd9Sstevel@tonic-gate typedef struct ns_param {
4047c478bd9Sstevel@tonic-gate 	ns_datatype_t	ns_ptype;
4057c478bd9Sstevel@tonic-gate 	int		ns_acnt;
4067c478bd9Sstevel@tonic-gate 	union {
4077c478bd9Sstevel@tonic-gate 		char	**ppc;
4087c478bd9Sstevel@tonic-gate 		int	*pi;
4097c478bd9Sstevel@tonic-gate 		char	*pc;
4107c478bd9Sstevel@tonic-gate 		int	i;
4117c478bd9Sstevel@tonic-gate 		time_t	tm;
4127c478bd9Sstevel@tonic-gate 	} ns_pu;
4137c478bd9Sstevel@tonic-gate } ns_param_t;
4147c478bd9Sstevel@tonic-gate 
4157c478bd9Sstevel@tonic-gate #define	ns_ppc	ns_pu.ppc
4167c478bd9Sstevel@tonic-gate #define	ns_pi	ns_pu.pi
4177c478bd9Sstevel@tonic-gate #define	ns_pc	ns_pu.pc
4187c478bd9Sstevel@tonic-gate #define	ns_i	ns_pu.i
4197c478bd9Sstevel@tonic-gate #define	ns_tm	ns_pu.tm
4207c478bd9Sstevel@tonic-gate 
4217c478bd9Sstevel@tonic-gate /*
4227c478bd9Sstevel@tonic-gate  * This structure defines an instance of a configuration structure.
4237c478bd9Sstevel@tonic-gate  * paramList contains the current ns_ldap parameter configuration
4247c478bd9Sstevel@tonic-gate  * and hashTbl contain the current attribute/objectclass mappings.
4257c478bd9Sstevel@tonic-gate  * Parameters are indexed by using the value assigned to the parameter
4267c478bd9Sstevel@tonic-gate  * in ParamIndexType.
4277c478bd9Sstevel@tonic-gate  */
4287c478bd9Sstevel@tonic-gate 
4297c478bd9Sstevel@tonic-gate typedef struct ns_config {
4307c478bd9Sstevel@tonic-gate 	char			*domainName;
4317c478bd9Sstevel@tonic-gate 	ns_version_t		version;
4327c478bd9Sstevel@tonic-gate 	ns_param_t		paramList[NS_LDAP_MAX_PIT_P];
4337c478bd9Sstevel@tonic-gate 	ns_hash_t		*hashTbl[NS_HASH_MAX];
4347c478bd9Sstevel@tonic-gate 	ns_hash_t		*llHead;
4357c478bd9Sstevel@tonic-gate 	ns_ldap_entry_t		*RootDSE;
4367c478bd9Sstevel@tonic-gate 	boolean_t		delete;
4377c478bd9Sstevel@tonic-gate 	mutex_t			config_mutex;
4387c478bd9Sstevel@tonic-gate 	int			nUse;
439e1dd0a2fSth 	ldap_get_chg_cookie_t	config_cookie;
4407c478bd9Sstevel@tonic-gate } ns_config_t;
4417c478bd9Sstevel@tonic-gate 
4427c478bd9Sstevel@tonic-gate /*
4437c478bd9Sstevel@tonic-gate  * This structure defines the mapping of the NSCONFIGFILE file
4447c478bd9Sstevel@tonic-gate  * statements into their corresponding SolarisNamingProfile,
4457c478bd9Sstevel@tonic-gate  * Posix Mapping LDAP attributes, and to their corresponding
4467c478bd9Sstevel@tonic-gate  * ParamIndexType enum mapping.  THe ParamIndexType enum
4477c478bd9Sstevel@tonic-gate  * definitions can be found in ns_ldap.h.  This structure also
4487c478bd9Sstevel@tonic-gate  * defines the default values that are used when a value either
4497c478bd9Sstevel@tonic-gate  * does not exist or is undefined.
4507c478bd9Sstevel@tonic-gate  */
4517c478bd9Sstevel@tonic-gate 
4527c478bd9Sstevel@tonic-gate typedef struct ns_default_config {
4537c478bd9Sstevel@tonic-gate 	const char	*name;		/* config file parameter name */
4547c478bd9Sstevel@tonic-gate 	ParamIndexType	index;		/* config file enum index */
4557c478bd9Sstevel@tonic-gate 	ns_conftype_t	config_type;	/* CLIENT/SERVER/CREDCONFIG */
4567c478bd9Sstevel@tonic-gate 	ns_datatype_t	data_type;	/* ppc,pi,pc,int etc... */
4577c478bd9Sstevel@tonic-gate 	int		single_valued;	/* TRUE OR FALSE */
4587c478bd9Sstevel@tonic-gate 	ns_version_t 	version;	/* Version # for attribute */
4597c478bd9Sstevel@tonic-gate 	const char	*profile_name;	/* profile schema attribute name */
4607c478bd9Sstevel@tonic-gate 	ns_param_t	defval;		/* config file parameter default */
4617c478bd9Sstevel@tonic-gate 	int		(*ns_verify)(ParamIndexType i,
4627c478bd9Sstevel@tonic-gate 				struct ns_default_config *def,
4637c478bd9Sstevel@tonic-gate 				ns_param_t *param,
4647c478bd9Sstevel@tonic-gate 				char *errbuf);
4657c478bd9Sstevel@tonic-gate 	ns_enum_map	*allowed;	/* allowed values */
4667c478bd9Sstevel@tonic-gate } ns_default_config;
4677c478bd9Sstevel@tonic-gate 
4687c478bd9Sstevel@tonic-gate 
4697c478bd9Sstevel@tonic-gate /*
4707c478bd9Sstevel@tonic-gate  * This typedef enumerates all the supported authentication
4717c478bd9Sstevel@tonic-gate  * mechanisms currently supported in this library
4727c478bd9Sstevel@tonic-gate  */
4737c478bd9Sstevel@tonic-gate 
4747c478bd9Sstevel@tonic-gate typedef enum EnumAuthType {
4757c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_NONE				= 0,
4767c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_SIMPLE			= 1,
4777c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_SASL_NONE			= 2,
4787c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_SASL_CRAM_MD5		= 3,
4797c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_SASL_DIGEST_MD5		= 4,
4807c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_SASL_DIGEST_MD5_INT		= 5,
4817c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_SASL_DIGEST_MD5_CONF		= 6,
4827c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_SASL_EXTERNAL		= 7,
483cb5caa98Sdjl 	NS_LDAP_EA_SASL_GSSAPI			= 8,
4847c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_SASL_SPNEGO			= 9,	/* unsupported */
4857c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_TLS_NONE			= 10,
4867c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_TLS_SIMPLE			= 11,
4877c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_TLS_SASL_NONE		= 12,
4887c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_TLS_SASL_CRAM_MD5		= 13,
4897c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_TLS_SASL_DIGEST_MD5		= 14,
4907c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_TLS_SASL_DIGEST_MD5_INT	= 15,
4917c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_TLS_SASL_DIGEST_MD5_CONF	= 16,
4927c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_TLS_SASL_EXTERNAL		= 17,
4937c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_TLS_SASL_GSSAPI		= 18,	/* unsupported */
4947c478bd9Sstevel@tonic-gate 	NS_LDAP_EA_TLS_SASL_SPNEGO		= 19	/* unsupported */
4957c478bd9Sstevel@tonic-gate } EnumAuthType_t;
4967c478bd9Sstevel@tonic-gate 
4977c478bd9Sstevel@tonic-gate 
4987c478bd9Sstevel@tonic-gate /*
4997c478bd9Sstevel@tonic-gate  * this enum lists the various states of the search state machine
5007c478bd9Sstevel@tonic-gate  */
5017c478bd9Sstevel@tonic-gate 
5027c478bd9Sstevel@tonic-gate typedef enum {
5037c478bd9Sstevel@tonic-gate 	INIT			= 1,
5047c478bd9Sstevel@tonic-gate 	EXIT			= 2,
5057c478bd9Sstevel@tonic-gate 	NEXT_SEARCH_DESCRIPTOR	= 3,
5067c478bd9Sstevel@tonic-gate 	GET_SESSION		= 4,
5077c478bd9Sstevel@tonic-gate 	NEXT_SESSION		= 5,
5087c478bd9Sstevel@tonic-gate 	RESTART_SESSION		= 6,
5097c478bd9Sstevel@tonic-gate 	NEXT_SEARCH		= 7,
5107c478bd9Sstevel@tonic-gate 	NEXT_VLV		= 8,
5117c478bd9Sstevel@tonic-gate 	NEXT_PAGE		= 9,
5127c478bd9Sstevel@tonic-gate 	ONE_SEARCH		= 10,
5137c478bd9Sstevel@tonic-gate 	DO_SEARCH		= 11,
5147c478bd9Sstevel@tonic-gate 	NEXT_RESULT		= 12,
5157c478bd9Sstevel@tonic-gate 	MULTI_RESULT		= 13,
5167c478bd9Sstevel@tonic-gate 	PROCESS_RESULT		= 14,
5177c478bd9Sstevel@tonic-gate 	END_PROCESS_RESULT	= 15,
5187c478bd9Sstevel@tonic-gate 	END_RESULT		= 16,
5197c478bd9Sstevel@tonic-gate 	NEXT_REFERRAL		= 17,
5207c478bd9Sstevel@tonic-gate 	GET_REFERRAL_SESSION	= 18,
5217c478bd9Sstevel@tonic-gate 	ERROR			= 19,
52247789246Svv 	LDAP_ERROR		= 20,
523699bceb8Smj 	GET_ACCT_MGMT_INFO	= 21,
524e1dd0a2fSth 	CLEAR_RESULTS		= 22,
525e1dd0a2fSth 	REINIT			= 23
5267c478bd9Sstevel@tonic-gate } ns_state_t;
5277c478bd9Sstevel@tonic-gate 
5287c478bd9Sstevel@tonic-gate /*
5297c478bd9Sstevel@tonic-gate  * this enum lists the various states of the write state machine
5307c478bd9Sstevel@tonic-gate  */
5317c478bd9Sstevel@tonic-gate typedef enum {
5327c478bd9Sstevel@tonic-gate 	W_INIT			= 1,
5337c478bd9Sstevel@tonic-gate 	W_EXIT			= 2,
5347c478bd9Sstevel@tonic-gate 	GET_CONNECTION		= 3,
5357c478bd9Sstevel@tonic-gate 	SELECT_OPERATION_SYNC	= 4,
5367c478bd9Sstevel@tonic-gate 	SELECT_OPERATION_ASYNC	= 5,
5377c478bd9Sstevel@tonic-gate 	DO_ADD_SYNC		= 6,
5387c478bd9Sstevel@tonic-gate 	DO_DELETE_SYNC		= 7,
5397c478bd9Sstevel@tonic-gate 	DO_MODIFY_SYNC		= 8,
5407c478bd9Sstevel@tonic-gate 	DO_ADD_ASYNC		= 9,
5417c478bd9Sstevel@tonic-gate 	DO_DELETE_ASYNC		= 10,
5427c478bd9Sstevel@tonic-gate 	DO_MODIFY_ASYNC		= 11,
5437c478bd9Sstevel@tonic-gate 	GET_RESULT_SYNC		= 12,
5447c478bd9Sstevel@tonic-gate 	GET_RESULT_ASYNC	= 13,
5457c478bd9Sstevel@tonic-gate 	PARSE_RESULT		= 14,
5467c478bd9Sstevel@tonic-gate 	GET_REFERRAL_CONNECTION	= 15,
5477c478bd9Sstevel@tonic-gate 	W_LDAP_ERROR		= 16,
5487c478bd9Sstevel@tonic-gate 	W_ERROR			= 17
5497c478bd9Sstevel@tonic-gate } ns_write_state_t;
5507c478bd9Sstevel@tonic-gate 
5517c478bd9Sstevel@tonic-gate 
5527c478bd9Sstevel@tonic-gate typedef int ConnectionID;
5537c478bd9Sstevel@tonic-gate 
5549f2fd570SJulian Pullen /*
5559f2fd570SJulian Pullen  * Server side sort type. Orginally the server side sort
5569f2fd570SJulian Pullen  * was set to "cn uid". This did not work with AD and
5579f2fd570SJulian Pullen  * hence single sort attribute was odopted. We dont
5589f2fd570SJulian Pullen  * know which server side sort will work with the
5599f2fd570SJulian Pullen  * Directory and hence we discover which method works.
5609f2fd570SJulian Pullen  */
5619f2fd570SJulian Pullen typedef enum {
5629f2fd570SJulian Pullen 	SSS_UNKNOWN		= 0,
5639f2fd570SJulian Pullen 	SSS_SINGLE_ATTR		= 1,
5649f2fd570SJulian Pullen 	SSS_CN_UID_ATTRS	= 2
5659f2fd570SJulian Pullen } ns_srvsidesort_t;
5669f2fd570SJulian Pullen 
5677c478bd9Sstevel@tonic-gate /*
5687c478bd9Sstevel@tonic-gate  * This structure is used by ns_connect to create and manage
5697c478bd9Sstevel@tonic-gate  * one or more ldap connections within the library.
5707c478bd9Sstevel@tonic-gate  */
5717c478bd9Sstevel@tonic-gate typedef struct connection {
5727c478bd9Sstevel@tonic-gate 	ConnectionID		connectionId;
573cb5caa98Sdjl 	boolean_t		usedBit;	/* true if only used by */
574cb5caa98Sdjl 						/* one thread and not shared */
575cb5caa98Sdjl 						/* by other threads */
5768277a58bSchinlong 	pid_t			pid;		/* process id */
5777c478bd9Sstevel@tonic-gate 	char			*serverAddr;
578cb5caa98Sdjl 	ns_cred_t		*auth;
5797c478bd9Sstevel@tonic-gate 	LDAP			*ld;
5807c478bd9Sstevel@tonic-gate 	thread_t		threadID;	/* thread ID using it */
5817c478bd9Sstevel@tonic-gate 	struct ns_ldap_cookie	*cookieInfo;
5827c478bd9Sstevel@tonic-gate 	char 			**controls;		/* from server_info */
5837c478bd9Sstevel@tonic-gate 	char			**saslMechanisms;	/* from server_info */
5847c478bd9Sstevel@tonic-gate } Connection;
5857c478bd9Sstevel@tonic-gate 
5867c478bd9Sstevel@tonic-gate #define	ONE_STEP			1
5877c478bd9Sstevel@tonic-gate 
5887c478bd9Sstevel@tonic-gate /*
5897c478bd9Sstevel@tonic-gate  * This structure is for referrals processing.
5907c478bd9Sstevel@tonic-gate  * The data are from referral URLs returned by
5917c478bd9Sstevel@tonic-gate  * LDAP servers
5927c478bd9Sstevel@tonic-gate  */
5937c478bd9Sstevel@tonic-gate typedef struct ns_referral_info {
5947c478bd9Sstevel@tonic-gate 	struct ns_referral_info	*next;
5957c478bd9Sstevel@tonic-gate 	char			*refHost;
5967c478bd9Sstevel@tonic-gate 	int			refScope;
5977c478bd9Sstevel@tonic-gate 	char			*refDN;
5987c478bd9Sstevel@tonic-gate 	char			*refFilter;
5997c478bd9Sstevel@tonic-gate } ns_referral_info_t;
6007c478bd9Sstevel@tonic-gate 
601479ac375Sdm struct ns_ldap_cookie;
602479ac375Sdm 
603479ac375Sdm /*
604479ac375Sdm  * Batch used by __ns_ldap_list_batch_xxx API
605479ac375Sdm  */
606479ac375Sdm struct ns_ldap_list_batch {
607479ac375Sdm 	uint32_t		nactive;
608479ac375Sdm 	struct ns_ldap_cookie	*next_cookie;
609479ac375Sdm 	struct ns_ldap_cookie	*cookie_list;
610479ac375Sdm };
611479ac375Sdm 
612e1dd0a2fSth struct ns_conn_user;
613e1dd0a2fSth typedef struct ns_conn_user ns_conn_user_t;
614e1dd0a2fSth 
6157c478bd9Sstevel@tonic-gate /*
6167c478bd9Sstevel@tonic-gate  * This structure used internally in searches
6177c478bd9Sstevel@tonic-gate  */
6187c478bd9Sstevel@tonic-gate 
6197c478bd9Sstevel@tonic-gate typedef struct ns_ldap_cookie {
6207c478bd9Sstevel@tonic-gate 	/* INPUTS */
6217c478bd9Sstevel@tonic-gate 		/* server list position */
6227c478bd9Sstevel@tonic-gate 
6237c478bd9Sstevel@tonic-gate 		/* service search descriptor list & position */
6247c478bd9Sstevel@tonic-gate 	ns_ldap_search_desc_t  **sdlist;
6257c478bd9Sstevel@tonic-gate 	ns_ldap_search_desc_t  **sdpos;
6267c478bd9Sstevel@tonic-gate 
6277c478bd9Sstevel@tonic-gate 		/* search filter callback */
6287c478bd9Sstevel@tonic-gate 	int			use_filtercb;
6297c478bd9Sstevel@tonic-gate 	int 	(*init_filter_cb)(const ns_ldap_search_desc_t *desc,
6307c478bd9Sstevel@tonic-gate 			char **realfilter, const void *userdata);
6317c478bd9Sstevel@tonic-gate 
6327c478bd9Sstevel@tonic-gate 		/* user callback */
6337c478bd9Sstevel@tonic-gate 	int			use_usercb;
6347c478bd9Sstevel@tonic-gate 	int	(*callback)(const ns_ldap_entry_t *entry,
6357c478bd9Sstevel@tonic-gate 			const void *userdata);
6367c478bd9Sstevel@tonic-gate 	const void		*userdata;
6377c478bd9Sstevel@tonic-gate 
6387c478bd9Sstevel@tonic-gate 	int			followRef;
6397c478bd9Sstevel@tonic-gate 	int			use_paging;
6407c478bd9Sstevel@tonic-gate 	char			*service;
6417c478bd9Sstevel@tonic-gate 	char			*i_filter;
6427c478bd9Sstevel@tonic-gate 	const char * const	*i_attr;
6439f2fd570SJulian Pullen 	const char		*i_sortattr;
6447c478bd9Sstevel@tonic-gate 	const ns_cred_t		*i_auth;
6457c478bd9Sstevel@tonic-gate 	int 			i_flags;
6467c478bd9Sstevel@tonic-gate 
6477c478bd9Sstevel@tonic-gate 	/* OUTPUTS */
6487c478bd9Sstevel@tonic-gate 	ns_ldap_result_t	*result;
6497c478bd9Sstevel@tonic-gate 	ns_ldap_entry_t		*nextEntry;
6507c478bd9Sstevel@tonic-gate 		/* Error data */
6517c478bd9Sstevel@tonic-gate 	int			err_rc;
6527c478bd9Sstevel@tonic-gate 	ns_ldap_error_t		*errorp;
6537c478bd9Sstevel@tonic-gate 
6547c478bd9Sstevel@tonic-gate 	/* PRIVATE */
6557c478bd9Sstevel@tonic-gate 	ns_state_t		state;
6567c478bd9Sstevel@tonic-gate 	ns_state_t		new_state;
6577c478bd9Sstevel@tonic-gate 	ns_state_t		next_state;
6587c478bd9Sstevel@tonic-gate 
6597c478bd9Sstevel@tonic-gate 	Connection		*conn;
660e8ac3ceaSsdussud #define	conn_auth_type	conn->auth->auth.type
6617c478bd9Sstevel@tonic-gate 	ConnectionID		connectionId;
6627c478bd9Sstevel@tonic-gate 
6637c478bd9Sstevel@tonic-gate 	/* paging VLV/SIMPLEPAGE data */
6647c478bd9Sstevel@tonic-gate 	int			listType;
6657c478bd9Sstevel@tonic-gate 	unsigned long		index;
6667c478bd9Sstevel@tonic-gate 	LDAPControl		**p_serverctrls;
6679f2fd570SJulian Pullen 	ns_srvsidesort_t	sortTypeTry;
6689f2fd570SJulian Pullen 	int			entryCount;
6697c478bd9Sstevel@tonic-gate 
6707c478bd9Sstevel@tonic-gate 	int			scope;
6717c478bd9Sstevel@tonic-gate 	char			*basedn;
6727c478bd9Sstevel@tonic-gate 	char			*filter;
6737c478bd9Sstevel@tonic-gate 	char			**attribute;
6747c478bd9Sstevel@tonic-gate 
6757c478bd9Sstevel@tonic-gate 	/* RESULT PROCESSING */
6767c478bd9Sstevel@tonic-gate 	int			msgId;
6777c478bd9Sstevel@tonic-gate 	LDAPMessage		*resultMsg;
6787c478bd9Sstevel@tonic-gate 
6797c478bd9Sstevel@tonic-gate 	char			**dns;
6807c478bd9Sstevel@tonic-gate 	char			*currentdn;
6817c478bd9Sstevel@tonic-gate 	int			flag;
6827c478bd9Sstevel@tonic-gate 	struct berval   	*ctrlCookie;
6837c478bd9Sstevel@tonic-gate 
6847c478bd9Sstevel@tonic-gate 	/* REFERRALS PROCESSING */
6857c478bd9Sstevel@tonic-gate 	/* referralinfo list & position */
6867c478bd9Sstevel@tonic-gate 	ns_referral_info_t  	*reflist;
6877c478bd9Sstevel@tonic-gate 	ns_referral_info_t  	*refpos;
6887c478bd9Sstevel@tonic-gate 	/* search timeout value */
6897c478bd9Sstevel@tonic-gate 	struct timeval		search_timeout;
69047789246Svv 	/* response control to hold account management information */
69147789246Svv 	LDAPControl		**resultctrl;
69247789246Svv 	/* Flag to indicate password less account management is required */
69347789246Svv 	int			nopasswd_acct_mgmt;
6948277a58bSchinlong 	int			err_from_result;
695e1dd0a2fSth 	ns_conn_user_t		*conn_user;
696479ac375Sdm 
697479ac375Sdm 	/* BATCH PROCESSING */
698479ac375Sdm 	ns_ldap_list_batch_t	*batch;
699479ac375Sdm 	boolean_t		no_wait;
700e1dd0a2fSth 	boolean_t		reinit_on_retriable_err;
701e1dd0a2fSth 	int			retries;
702479ac375Sdm 	ns_ldap_result_t	**caller_result;
703479ac375Sdm 	ns_ldap_error_t		**caller_errorp;
704479ac375Sdm 	int			*caller_rc;
705479ac375Sdm 	struct ns_ldap_cookie	*next_cookie_in_batch;
7067c478bd9Sstevel@tonic-gate } ns_ldap_cookie_t;
7077c478bd9Sstevel@tonic-gate 
7087c478bd9Sstevel@tonic-gate /*
7097c478bd9Sstevel@tonic-gate  * This structure is part of the return value information for
7107c478bd9Sstevel@tonic-gate  * __s_api_requestServer.  The routine that requests a new server
7117c478bd9Sstevel@tonic-gate  * from the cache manager
7127c478bd9Sstevel@tonic-gate  */
7137c478bd9Sstevel@tonic-gate typedef struct ns_server_info {
7147c478bd9Sstevel@tonic-gate 	char	*server;
7154a6b6ac4Schinlong 	char	*serverFQDN;
7167c478bd9Sstevel@tonic-gate 	char 	**controls;
7177c478bd9Sstevel@tonic-gate 	char	**saslMechanisms;
7187c478bd9Sstevel@tonic-gate } ns_server_info_t;
7197c478bd9Sstevel@tonic-gate 
720cb5caa98Sdjl /*
721cb5caa98Sdjl  * sasl callback function parameters
722cb5caa98Sdjl  */
723cb5caa98Sdjl typedef struct ns_sasl_cb_param {
724cb5caa98Sdjl 	char	*mech;
725cb5caa98Sdjl 	char	*authid;
726cb5caa98Sdjl 	char	*authzid;
727cb5caa98Sdjl 	char	*passwd;
728cb5caa98Sdjl 	char	*realm;
729cb5caa98Sdjl } ns_sasl_cb_param_t;
730cb5caa98Sdjl 
731cb5caa98Sdjl /* Multiple threads per connection variable */
732cb5caa98Sdjl extern int MTperConn;
733cb5caa98Sdjl 
7347c478bd9Sstevel@tonic-gate /*
7357c478bd9Sstevel@tonic-gate  * INTERNAL GLOBAL DEFINITIONS AND FUNCTION DECLARATIONS
7367c478bd9Sstevel@tonic-gate  */
7377c478bd9Sstevel@tonic-gate 
7387c478bd9Sstevel@tonic-gate #ifdef DEBUG
7397c478bd9Sstevel@tonic-gate extern int	__ldap_debug_file;
7407c478bd9Sstevel@tonic-gate extern int	__ldap_debug_api;
7417c478bd9Sstevel@tonic-gate extern int	__ldap_debug_ldap;
7427c478bd9Sstevel@tonic-gate extern int	__ldap_debug_servers;
7437c478bd9Sstevel@tonic-gate #endif
7447c478bd9Sstevel@tonic-gate 
7457c478bd9Sstevel@tonic-gate /* internal connection APIs */
7467c478bd9Sstevel@tonic-gate void DropConnection(ConnectionID, int);
7477c478bd9Sstevel@tonic-gate int __s_api_getServers(char *** servers, ns_ldap_error_t ** error);
7487c478bd9Sstevel@tonic-gate 
7497c478bd9Sstevel@tonic-gate int __s_get_enum_value(ns_config_t *ptr, char *value, ParamIndexType i);
7507c478bd9Sstevel@tonic-gate char *__s_get_auth_name(ns_config_t *ptr, AuthType_t type);
7517c478bd9Sstevel@tonic-gate char *__s_get_security_name(ns_config_t *ptr, TlsType_t type);
7527c478bd9Sstevel@tonic-gate char *__s_get_scope_name(ns_config_t *ptr, ScopeType_t type);
7537c478bd9Sstevel@tonic-gate char *__s_get_pref_name(PrefOnly_t type);
7547c478bd9Sstevel@tonic-gate char *__s_get_searchref_name(ns_config_t *ptr, SearchRef_t type);
755dd1104fbSMichen Chang char *__s_get_shadowupdate_name(enableShadowUpdate_t type);
7567c478bd9Sstevel@tonic-gate char *__s_get_hostcertpath(void);
757e1dd0a2fSth void __s_api_free_sessionPool();
758e1dd0a2fSth int __s_api_requestServer(const char *request, const char *server,
759e1dd0a2fSth 	ns_server_info_t *ret, ns_ldap_error_t **error,  const char *addrType);
7607c478bd9Sstevel@tonic-gate 
7617c478bd9Sstevel@tonic-gate 
7627c478bd9Sstevel@tonic-gate /* ************ internal sldap-api functions *********** */
7637c478bd9Sstevel@tonic-gate void	__ns_ldap_freeEntry(ns_ldap_entry_t *ep);
7647c478bd9Sstevel@tonic-gate void	__s_api_split_key_value(char *buffer, char **name, char **value);
7657c478bd9Sstevel@tonic-gate int	__s_api_printResult(ns_ldap_result_t *);
7667c478bd9Sstevel@tonic-gate int	__s_api_getSearchScope(int *, ns_ldap_error_t **);
7677c478bd9Sstevel@tonic-gate int	__s_api_getDNs(char ***, const char *,
7687c478bd9Sstevel@tonic-gate 	ns_ldap_error_t **);
7697c478bd9Sstevel@tonic-gate int	__s_api_get_search_DNs_v1(char ***, const char *,
7707c478bd9Sstevel@tonic-gate 	ns_ldap_error_t **);
7717c478bd9Sstevel@tonic-gate int	__s_api_getConnection(const char *, const int,
7727c478bd9Sstevel@tonic-gate 	const ns_cred_t *, int *,
773e1dd0a2fSth 	Connection **, ns_ldap_error_t **, int, int, ns_conn_user_t *);
7747c478bd9Sstevel@tonic-gate char	**__s_api_cp2dArray(char **);
7757c478bd9Sstevel@tonic-gate void	__s_api_free2dArray(char **);
7767c478bd9Sstevel@tonic-gate 
7777c478bd9Sstevel@tonic-gate int	__s_api_isCtrlSupported(Connection *, char *);
7787c478bd9Sstevel@tonic-gate ns_config_t *__ns_ldap_make_config(ns_ldap_result_t *result);
7797c478bd9Sstevel@tonic-gate ns_auth_t  *__s_api_AuthEnumtoStruct(const EnumAuthType_t i);
780e1dd0a2fSth boolean_t __s_api_peruser_proc(void);
781e1dd0a2fSth boolean_t __s_api_nscd_proc(void);
7827c478bd9Sstevel@tonic-gate char	*dvalue(char *);
7837c478bd9Sstevel@tonic-gate char	*evalue(char *);
784e1dd0a2fSth ns_ldap_error_t *__s_api_make_error(int, char *);
785e1dd0a2fSth ns_ldap_error_t *__s_api_copy_error(ns_ldap_error_t *);
786e1dd0a2fSth 
787e1dd0a2fSth /* ************ specific 'Standalone' functions ********** */
788e1dd0a2fSth ns_ldap_return_code __s_api_ip2hostname(char *ipaddr, char **hostname);
789e1dd0a2fSth struct hostent *__s_api_hostname2ip(const char *name,
790e1dd0a2fSth 				    struct hostent *result,
791e1dd0a2fSth 				    char *buffer,
792e1dd0a2fSth 				    int buflen,
793e1dd0a2fSth 				    int *h_errnop);
794e1dd0a2fSth void	__s_api_setInitMode();
795e1dd0a2fSth void	__s_api_unsetInitMode();
796e1dd0a2fSth int	__s_api_isStandalone(void);
797e1dd0a2fSth int __s_api_isInitializing();
798e1dd0a2fSth ns_ldap_return_code __s_api_findRootDSE(const char *request,
799e1dd0a2fSth 					const char *server,
800e1dd0a2fSth 					const char *addrType,
801e1dd0a2fSth 					ns_server_info_t *ret,
802e1dd0a2fSth 					ns_ldap_error_t	**error);
803e1dd0a2fSth ns_config_t *__s_api_create_config_door_str(char *config,
804e1dd0a2fSth 				ns_ldap_error_t **errorp);
8057c478bd9Sstevel@tonic-gate 
8067c478bd9Sstevel@tonic-gate extern void	get_environment();
8077c478bd9Sstevel@tonic-gate 
8087c478bd9Sstevel@tonic-gate /* internal Param APIs */
8097c478bd9Sstevel@tonic-gate int		__ns_ldap_setParamValue(ns_config_t *ptr,
8107c478bd9Sstevel@tonic-gate 			const ParamIndexType type,
8117c478bd9Sstevel@tonic-gate 			const void *data, ns_ldap_error_t **error);
8127c478bd9Sstevel@tonic-gate int		__s_api_get_type(const char *value, ParamIndexType *type);
8137c478bd9Sstevel@tonic-gate int		__s_api_get_versiontype(ns_config_t *ptr, char *value,
8147c478bd9Sstevel@tonic-gate 					ParamIndexType *type);
8157c478bd9Sstevel@tonic-gate int		__s_api_get_profiletype(char *value, ParamIndexType *type);
8167c478bd9Sstevel@tonic-gate void		__s_api_init_config(ns_config_t *ptr);
817e1dd0a2fSth void		__s_api_init_config_global(ns_config_t *ptr);
8187c478bd9Sstevel@tonic-gate ns_parse_status __s_api_crosscheck(ns_config_t *domainptr, char *errstr,
8197c478bd9Sstevel@tonic-gate 					int check_dn);
8207c478bd9Sstevel@tonic-gate ns_config_t	*__s_api_create_config(void);
8217c478bd9Sstevel@tonic-gate ns_config_t	*__s_api_get_default_config(void);
822e1dd0a2fSth ns_config_t	*__s_api_get_default_config_global(void);
8237c478bd9Sstevel@tonic-gate ns_config_t	*__s_api_loadrefresh_config();
824e1dd0a2fSth ns_config_t	*__s_api_loadrefresh_config_global();
8257c478bd9Sstevel@tonic-gate void		__s_api_destroy_config(ns_config_t *ptr);
8267c478bd9Sstevel@tonic-gate int		__s_api_get_configtype(ParamIndexType type);
8277c478bd9Sstevel@tonic-gate const char	*__s_api_get_configname(ParamIndexType type);
828434c5a06SMilan Jurik char		*__s_api_strValue(ns_config_t *ptr, ParamIndexType i,
8297c478bd9Sstevel@tonic-gate 			ns_strfmt_t fmt);
8307c478bd9Sstevel@tonic-gate void		__s_api_release_config(ns_config_t *cfg);
8317c478bd9Sstevel@tonic-gate 
8327c478bd9Sstevel@tonic-gate /* internal attribute/objectclass mapping api's */
8337c478bd9Sstevel@tonic-gate int		 __s_api_add_map2hash(ns_config_t *config,
8347c478bd9Sstevel@tonic-gate 				ns_hashtype_t type, ns_mapping_t *map);
8357c478bd9Sstevel@tonic-gate void		__s_api_destroy_hash(ns_config_t *config);
8367c478bd9Sstevel@tonic-gate int		__s_api_parse_map(char *cp, char **sid,
8377c478bd9Sstevel@tonic-gate 				char **origA, char ***mapA);
8387c478bd9Sstevel@tonic-gate char		**__ns_ldap_mapAttributeList(const char *service,
8397c478bd9Sstevel@tonic-gate 				const char * const *origAttrList);
8409f2fd570SJulian Pullen char		*__ns_ldap_mapAttribute(const char *service,
8419f2fd570SJulian Pullen 				const char *origAttr);
8427c478bd9Sstevel@tonic-gate 
8437c478bd9Sstevel@tonic-gate /* internal configuration APIs */
8447c478bd9Sstevel@tonic-gate void		__ns_ldap_setServer(int set);
8457c478bd9Sstevel@tonic-gate ns_ldap_error_t	*__ns_ldap_LoadConfiguration();
846e1dd0a2fSth ns_ldap_error_t	*__ns_ldap_LoadDoorInfo(LineBuf *configinfo, char *domainname,
847b57459abSJulian Pullen 				ns_config_t *new, int cred_only);
8487c478bd9Sstevel@tonic-gate ns_ldap_error_t *__ns_ldap_DumpConfiguration(char *filename);
8497c478bd9Sstevel@tonic-gate ns_ldap_error_t	*__ns_ldap_DumpLdif(char *filename);
8507c478bd9Sstevel@tonic-gate int		__ns_ldap_cache_ping();
851cb5caa98Sdjl ns_ldap_error_t *__ns_ldap_print_config(int);
852cb5caa98Sdjl void		__ns_ldap_default_config();
853cb5caa98Sdjl int		__ns_ldap_download(const char *, char *, char *,
854cb5caa98Sdjl 				ns_ldap_error_t **);
855cb5caa98Sdjl int
856cb5caa98Sdjl __ns_ldap_check_dns_preq(int foreground,
857cb5caa98Sdjl 		int mode_verbose,
858cb5caa98Sdjl 		int mode_quiet,
859cb5caa98Sdjl 		const char *fname,
860cb5caa98Sdjl 		ns_ldap_self_gssapi_config_t config,
861cb5caa98Sdjl 		ns_ldap_error_t **errpp);
862cb5caa98Sdjl int
863cb5caa98Sdjl __ns_ldap_check_gssapi_preq(int foreground,
864cb5caa98Sdjl 		int mode_verbose,
865cb5caa98Sdjl 		int mode_quiet,
866cb5caa98Sdjl 		ns_ldap_self_gssapi_config_t config,
867cb5caa98Sdjl 		ns_ldap_error_t **errpp);
868cb5caa98Sdjl int
869cb5caa98Sdjl __ns_ldap_check_all_preq(int foreground,
870cb5caa98Sdjl 		int mode_verbose,
871cb5caa98Sdjl 		int mode_quiet,
872cb5caa98Sdjl 		ns_ldap_self_gssapi_config_t config,
873cb5caa98Sdjl 		ns_ldap_error_t **errpp);
8747c478bd9Sstevel@tonic-gate 
8757c478bd9Sstevel@tonic-gate /* internal un-exposed APIs */
8767c478bd9Sstevel@tonic-gate ns_cred_t 	*__ns_ldap_dupAuth(const ns_cred_t *authp);
877e1dd0a2fSth boolean_t	__s_api_is_auth_matched(const ns_cred_t *auth1,
878e1dd0a2fSth 		    const ns_cred_t *auth2);
8797c478bd9Sstevel@tonic-gate int		__s_api_get_SSD_from_SSDtoUse_service(const char *service,
8807c478bd9Sstevel@tonic-gate 			ns_ldap_search_desc_t ***SSDlist,
8817c478bd9Sstevel@tonic-gate 			ns_ldap_error_t **errorp);
8827c478bd9Sstevel@tonic-gate int		__s_api_prepend_automountmapname(const char *service,
8837c478bd9Sstevel@tonic-gate 			ns_ldap_search_desc_t ***SSDlist,
8847c478bd9Sstevel@tonic-gate 			ns_ldap_error_t ** errorp);
8857c478bd9Sstevel@tonic-gate int		__s_api_prepend_automountmapname_to_dn(const char *service,
8867c478bd9Sstevel@tonic-gate 			char **basedn,
8877c478bd9Sstevel@tonic-gate 			ns_ldap_error_t ** errorp);
8887c478bd9Sstevel@tonic-gate int		__s_api_convert_automountmapname(const char *service,
8897c478bd9Sstevel@tonic-gate 			char **dn, ns_ldap_error_t ** errorp);
8907c478bd9Sstevel@tonic-gate int		__s_api_replace_mapped_attr_in_dn(
8917c478bd9Sstevel@tonic-gate 			const char *orig_attr, const char *mapped_attr,
8927c478bd9Sstevel@tonic-gate 			const char *dn, char **new_dn);
8937c478bd9Sstevel@tonic-gate int		__s_api_append_default_basedn(
8947c478bd9Sstevel@tonic-gate 			const char *dn,
8957c478bd9Sstevel@tonic-gate 			char **new_dn,
8967c478bd9Sstevel@tonic-gate 			int *allocated,
8977c478bd9Sstevel@tonic-gate 			ns_ldap_error_t ** errorp);
898e8ac3ceaSsdussud int		__s_api_removeServer(const char *server);
899689c2bf4Sjanga void		__s_api_removeBadServers(char **server);
9004a6b6ac4Schinlong void		__s_api_free_server_info(ns_server_info_t *sinfo);
901e1dd0a2fSth void		__s_api_freeConnection(Connection *con);
9027c478bd9Sstevel@tonic-gate 
9037c478bd9Sstevel@tonic-gate /* internal referrals APIs */
9047c478bd9Sstevel@tonic-gate int 		__s_api_toFollowReferrals(const int flags,
9057c478bd9Sstevel@tonic-gate 			int *toFollow,
9067c478bd9Sstevel@tonic-gate 			ns_ldap_error_t **errorp);
9077c478bd9Sstevel@tonic-gate int 		__s_api_addRefInfo(ns_referral_info_t **head,
9087c478bd9Sstevel@tonic-gate 			char *url, char *baseDN, int *scope,
9097c478bd9Sstevel@tonic-gate 			char *filter, LDAP *ld);
9107c478bd9Sstevel@tonic-gate void		__s_api_deleteRefInfo(ns_referral_info_t *head);
9117c478bd9Sstevel@tonic-gate 
9127c478bd9Sstevel@tonic-gate /* callback routine for SSD filters */
9137c478bd9Sstevel@tonic-gate int		__s_api_merge_SSD_filter(const ns_ldap_search_desc_t *desc,
9147c478bd9Sstevel@tonic-gate 			char **realfilter,
9157c478bd9Sstevel@tonic-gate 			const void *userdata);
9167c478bd9Sstevel@tonic-gate 
9177c478bd9Sstevel@tonic-gate /* network address verification api */
9187c478bd9Sstevel@tonic-gate int		__s_api_isipv4(char *addr);
9197c478bd9Sstevel@tonic-gate int		__s_api_isipv6(char *addr);
9207c478bd9Sstevel@tonic-gate int		__s_api_ishost(char *addr);
9217c478bd9Sstevel@tonic-gate 
9227c478bd9Sstevel@tonic-gate /* password management routine */
9237c478bd9Sstevel@tonic-gate ns_ldap_passwd_status_t
9247c478bd9Sstevel@tonic-gate 		__s_api_set_passwd_status(int errnum, char *errmsg);
9257c478bd9Sstevel@tonic-gate int		__s_api_contain_passwd_control_oid(char **oids);
9267c478bd9Sstevel@tonic-gate 
92747789246Svv /* password less account management routine */
92847789246Svv int		__s_api_contain_account_usable_control_oid(char **oids);
92947789246Svv 
9307c478bd9Sstevel@tonic-gate /* RFC 2307 section 5.6. Get a canonical name from entry */
9317c478bd9Sstevel@tonic-gate char		*__s_api_get_canonical_name(ns_ldap_entry_t *entry,
9327c478bd9Sstevel@tonic-gate 			ns_ldap_attr_t *attrptr, int case_ignore);
9337c478bd9Sstevel@tonic-gate 
934cb5caa98Sdjl /* self/sasl/gssapi functions */
935cb5caa98Sdjl int		__s_api_sasl_bind_callback(
936cb5caa98Sdjl 			LDAP		*ld,
937cb5caa98Sdjl 			unsigned	flags,
938cb5caa98Sdjl 			void		*defaults,
939cb5caa98Sdjl 			void		*in);
940cb5caa98Sdjl 
941cb5caa98Sdjl int		__s_api_self_gssapi_only_get(void);
942cb5caa98Sdjl 
943434c5a06SMilan Jurik int		__print2buf(LineBuf *line, const char *toprint, char *sep);
944434c5a06SMilan Jurik 
9457c478bd9Sstevel@tonic-gate #ifdef __cplusplus
9467c478bd9Sstevel@tonic-gate }
9477c478bd9Sstevel@tonic-gate #endif
9487c478bd9Sstevel@tonic-gate 
9497c478bd9Sstevel@tonic-gate #endif /* _NS_INTERNAL_H */
950