xref: /titanic_50/usr/src/cmd/nscd/nscd_switch.h (revision 978eb14434856052ad78b0b4c626508b7f2e0f3d)
1cb5caa98Sdjl /*
2cb5caa98Sdjl  * CDDL HEADER START
3cb5caa98Sdjl  *
4cb5caa98Sdjl  * The contents of this file are subject to the terms of the
5cb5caa98Sdjl  * Common Development and Distribution License (the "License").
6cb5caa98Sdjl  * You may not use this file except in compliance with the License.
7cb5caa98Sdjl  *
8cb5caa98Sdjl  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9cb5caa98Sdjl  * or http://www.opensolaris.org/os/licensing.
10cb5caa98Sdjl  * See the License for the specific language governing permissions
11cb5caa98Sdjl  * and limitations under the License.
12cb5caa98Sdjl  *
13cb5caa98Sdjl  * When distributing Covered Code, include this CDDL HEADER in each
14cb5caa98Sdjl  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15cb5caa98Sdjl  * If applicable, add the following below this CDDL HEADER, with the
16cb5caa98Sdjl  * fields enclosed by brackets "[]" replaced with your own identifying
17cb5caa98Sdjl  * information: Portions Copyright [yyyy] [name of copyright owner]
18cb5caa98Sdjl  *
19cb5caa98Sdjl  * CDDL HEADER END
20cb5caa98Sdjl  */
21cb5caa98Sdjl /*
22*cfed26cbSMichen Chang  * Copyright 2009 Sun Microsystems, Inc.  All rights reserved.
23cb5caa98Sdjl  * Use is subject to license terms.
24cb5caa98Sdjl  */
25cb5caa98Sdjl 
26cb5caa98Sdjl #ifndef	_NSCD_SWITCH_H
27cb5caa98Sdjl #define	_NSCD_SWITCH_H
28cb5caa98Sdjl 
29cb5caa98Sdjl #ifdef	__cplusplus
30cb5caa98Sdjl extern "C" {
31cb5caa98Sdjl #endif
32cb5caa98Sdjl 
33cb5caa98Sdjl #include <nss_dbdefs.h>
34cb5caa98Sdjl #include <thread.h>
35cb5caa98Sdjl #include <libscf.h>
36cb5caa98Sdjl #define	__NSS_PRIVATE_INTERFACE
37cb5caa98Sdjl #include "nsswitch_priv.h"
38cb5caa98Sdjl #undef	__NSS_PRIVATE_INTERFACE
39cb5caa98Sdjl #include "nscd_db.h"
40cb5caa98Sdjl #include "nscd_config.h"
41cb5caa98Sdjl 
42cb5caa98Sdjl /*
43cb5caa98Sdjl  * max. length of e.g. "passwd: files ldap"
44cb5caa98Sdjl  */
45cb5caa98Sdjl #define	MAX_NSSWITCH_CONFIG_STRING_SZ 256
46cb5caa98Sdjl 
47cb5caa98Sdjl /*
48cb5caa98Sdjl  * max. length of the name of a NSS database
49cb5caa98Sdjl  */
50cb5caa98Sdjl #define	MAX_NSSWITCH_CONFIG_DB_NAME_SZ 256
51cb5caa98Sdjl 
52cb5caa98Sdjl /*
53cb5caa98Sdjl  * nscd_nsw_config_t is an abstraction of the configuration
54cb5caa98Sdjl  * for a NSS database
55cb5caa98Sdjl  */
56cb5caa98Sdjl typedef struct {
57cb5caa98Sdjl 	char				*db_name;
58cb5caa98Sdjl 	char				*nsw_cfg_str;
59cb5caa98Sdjl 	nss_db_params_t			fe_params;
60cb5caa98Sdjl 	struct __nsw_switchconfig_v1	*nsw_config;
61cb5caa98Sdjl 	int				max_src;
62cb5caa98Sdjl 	int				*src_idx;	/* ptr to array of */
63cb5caa98Sdjl 							/* src index */
64cb5caa98Sdjl 	int				nobase;		/* not shared */
65cb5caa98Sdjl } nscd_nsw_config_t;
66cb5caa98Sdjl 
67cb5caa98Sdjl /*
68cb5caa98Sdjl  * nscd_be_info_t is an abstraction of a NSS backend
69cb5caa98Sdjl  */
70cb5caa98Sdjl typedef struct {
71d2ba247cSmichen 	void			*be_version;
72cb5caa98Sdjl 	nss_backend_constr_t	be_constr;
73cb5caa98Sdjl 	nss_backend_finder_t	*finder;
74cb5caa98Sdjl 	void			*finder_priv;
75cb5caa98Sdjl } nscd_be_info_t;
76cb5caa98Sdjl 
77cb5caa98Sdjl /*
78cb5caa98Sdjl  * nscd_state_ctrl_t is used to control a nscd_nsw_state pool
79cb5caa98Sdjl  */
80cb5caa98Sdjl typedef struct {
81cb5caa98Sdjl 	int			max;
82cb5caa98Sdjl 	int			allocated;
83cb5caa98Sdjl 	int			free;
84cb5caa98Sdjl 	int			waiter;
85cb5caa98Sdjl 	struct nscd_nsw_state	*first;
86cb5caa98Sdjl } nscd_state_ctrl_t;
87cb5caa98Sdjl 
88cb5caa98Sdjl /*
89cb5caa98Sdjl  * nscd_nsw_state_base_t represents the nscd_nsw_state pool
90cb5caa98Sdjl  * for a NSS database
91cb5caa98Sdjl  */
92cb5caa98Sdjl typedef struct nscd_nsw_state_base {
93cb5caa98Sdjl 	int			dbi;	/* which database? */
94cb5caa98Sdjl 	nscd_state_ctrl_t	nsw_state;
95cb5caa98Sdjl 	nscd_state_ctrl_t	nsw_state_thr;
96cb5caa98Sdjl 	int			used_by_thr;
97cb5caa98Sdjl 	thread_t		tid;
98cb5caa98Sdjl 	cond_t			thr_cond;
99cb5caa98Sdjl } nscd_nsw_state_base_t;
100cb5caa98Sdjl 
101cb5caa98Sdjl /*
102cb5caa98Sdjl  * nscd_nsw_state_t is an abstraction of all the data needed
103cb5caa98Sdjl  * to do lookup of NSS database (e.g. "passwd" or "hosts")
104cb5caa98Sdjl  */
105d2ba247cSmichen extern	void *_nscd_be_version;		/* default version for supported be */
106cb5caa98Sdjl typedef struct nscd_nsw_state {
107cb5caa98Sdjl 	int				dbi;	/* which database? */
108cb5caa98Sdjl 	int				max_src; /* is == config->num_lookups */
109cb5caa98Sdjl 	int				getent; /* used by getent */
110bf1e3beeSmichen 	nscd_bool_t			recheck_be; /* if set, check/init be */
111cb5caa98Sdjl 	nss_db_params_t			p;
112cb5caa98Sdjl 	struct __nsw_switchconfig_v1	*config;
113cb5caa98Sdjl 	nscd_nsw_config_t		**nsw_cfg_p;
114cb5caa98Sdjl 	nscd_nsw_state_base_t		*base;
115cb5caa98Sdjl 	nss_backend_t			**be; /* array of backends */
116bf1e3beeSmichen 	nss_backend_constr_t		*be_constr; /* be constructor array */
117cb5caa98Sdjl 	nscd_db_t			***be_db_pp;
118d2ba247cSmichen 	void				**be_version_p; /* version ptr array */
119cb5caa98Sdjl 	struct nscd_nsw_state		*next;
120cb5caa98Sdjl } nscd_nsw_state_t;
121cb5caa98Sdjl 
122cb5caa98Sdjl /*
123cb5caa98Sdjl  * nscd_getent_ctx_base_t represents the nscd_getent_ctx_base_t pool
124cb5caa98Sdjl  * for a NSS database
125cb5caa98Sdjl  */
126cb5caa98Sdjl typedef struct nscd_getent_ctx_base {
127cb5caa98Sdjl 	int			dbi;		/* which database? */
128cb5caa98Sdjl 	int			max_getent_ctx;
129cb5caa98Sdjl 	int			num_getent_ctx;
130cb5caa98Sdjl 	struct nscd_getent_context *first;
131cb5caa98Sdjl } nscd_getent_ctx_base_t;
132cb5caa98Sdjl 
133cb5caa98Sdjl /*
134cb5caa98Sdjl  * nscd_getent_context_t is an abstraction of all the data needed
135cb5caa98Sdjl  * to enumerate a NSS database (e.g. "passwd" or "hosts")
136cb5caa98Sdjl  */
137cb5caa98Sdjl typedef struct nscd_getent_context {
138cb5caa98Sdjl 	int				dbi;
1396392794bSMichen Chang 	thread_t			thr_id;
14029836b19Smichen 	mutex_t				getent_mutex;
14129836b19Smichen 	int				aborted;
14229836b19Smichen 	int				in_use;
1436392794bSMichen Chang 	int				num_reclaim_check;
144cb5caa98Sdjl 	nscd_seq_num_t			seq_num;
145e37190e5Smichen 	nscd_cookie_num_t		cookie_num;
146cb5caa98Sdjl 	pid_t				pid;	/* door client's pid */
147cb5caa98Sdjl 	int				n_src;	/* >=max_src: end of sequence */
148cb5caa98Sdjl 	nscd_nsw_state_t		*nsw_state;
149cb5caa98Sdjl 	nss_backend_t			*be;
150cb5caa98Sdjl 	nscd_getent_ctx_base_t		*base;
151cb5caa98Sdjl 	struct nscd_getent_context	*next;
1526392794bSMichen Chang 	struct nscd_getent_context	*next_to_reclaim;
153cb5caa98Sdjl } nscd_getent_context_t;
154cb5caa98Sdjl 
155cb5caa98Sdjl /*
156cb5caa98Sdjl  * nscd_smf_state_t is used to keep track of the state of the smf
157cb5caa98Sdjl  * service associated with a NSS source (e.g. "passwd" or "hosts")
158cb5caa98Sdjl  */
159cb5caa98Sdjl typedef struct {
160cb5caa98Sdjl 	char	*src_name;
161cb5caa98Sdjl 	int	src_state;
162cb5caa98Sdjl } nscd_smf_state_t;
163cb5caa98Sdjl 
164cb5caa98Sdjl /*
165cb5caa98Sdjl  * nscd_smf_state_t is used to keep track of the state of the smf
166cb5caa98Sdjl  * service associated with a NSS source (e.g. "passwd" or "hosts")
167cb5caa98Sdjl  */
168cb5caa98Sdjl typedef struct {
169cb5caa98Sdjl 	int			dbi;		/* database index */
170cb5caa98Sdjl 	/*
171cb5caa98Sdjl 	 * index of the database of which the switch policy
172cb5caa98Sdjl 	 * should be used
173cb5caa98Sdjl 	 */
174cb5caa98Sdjl 	int			cfgdbi;
175cb5caa98Sdjl 	/*
176cb5caa98Sdjl 	 * index of the pseudo database that the NSS backend
177cb5caa98Sdjl 	 * does search on
178cb5caa98Sdjl 	 */
179cb5caa98Sdjl 	int			compati;
180cb5caa98Sdjl 	/*
181cb5caa98Sdjl 	 * ptr to ptr to the siwtch config structure
182cb5caa98Sdjl 	 */
183cb5caa98Sdjl 	nscd_nsw_config_t	**nswcfg;
184cb5caa98Sdjl 	/*
185cb5caa98Sdjl 	 * frontend params passed to nss_search or nss_*ent
186cb5caa98Sdjl 	 */
187cb5caa98Sdjl 	struct nss_db_params	p;
188cb5caa98Sdjl 	/*
189cb5caa98Sdjl 	 * set to 1 if database is "hosts", else 2 if "ipnodes"
190cb5caa98Sdjl 	 */
191cb5caa98Sdjl 	int8_t			dnsi;
192cb5caa98Sdjl 	/*
193cb5caa98Sdjl 	 * set to 1 if require privilege to look up the database
194cb5caa98Sdjl 	 */
195cb5caa98Sdjl 	uint8_t			privdb;
196cb5caa98Sdjl } nscd_nsw_params_t;
197cb5caa98Sdjl 
198cb5caa98Sdjl /*
199cb5caa98Sdjl  * additional info returned by the switch engine
200cb5caa98Sdjl  */
201cb5caa98Sdjl typedef struct {
202cb5caa98Sdjl 	void	*pbuf;	/* ptr to packed buffer */
203cb5caa98Sdjl 	size_t	pbufsiz; /* length of the packed buffer */
204cb5caa98Sdjl 	int	srci;	/* last source searched */
205cb5caa98Sdjl 	int	errnum; /* errno from the backend */
206cb5caa98Sdjl 	int	noarg; /* if set, backend does not use the arg structure */
207cb5caa98Sdjl 	int	fallback; /* if set, may need to fall back to main nscd */
2084b22b933Srs200217 	int	datalen; /* pbuf->data_len (backend may change it) */
209cb5caa98Sdjl } nscd_sw_return_t;
210cb5caa98Sdjl 
211cb5caa98Sdjl /*
212e37190e5Smichen  * nscd cookies used for setent/getent/endent
213e37190e5Smichen  * - p0 cookie: returned by nscd to indicate
214e37190e5Smichen  *              the start of the enumeration position
215e37190e5Smichen  * - p1 cookie: returned/updated by nscd to indicate
216e37190e5Smichen  *              the current enumeration position
217e37190e5Smichen  */
218e37190e5Smichen #define	NSCD_P0_COOKIE_SEQNUM	-1
219e37190e5Smichen typedef struct {
220e37190e5Smichen 	pid_t		p0_pid;
221e37190e5Smichen 	time_t		p0_time;
222e37190e5Smichen 	nscd_seq_num_t	p0_seqnum;
223e37190e5Smichen } nscd_getent_p0_cookie_t;
224e37190e5Smichen 
225e37190e5Smichen typedef struct {
226e37190e5Smichen 	nscd_cookie_num_t	p1_cookie_num;
227e37190e5Smichen 	nscd_seq_num_t		p1_seqnum;
228e37190e5Smichen } nscd_getent_p1_cookie_t;
229e37190e5Smichen 
230e37190e5Smichen /*
231cb5caa98Sdjl  * static tables or global data defined in other files
232cb5caa98Sdjl  */
233cb5caa98Sdjl extern int			_nscd_cfg_num_nsw_src;
234cb5caa98Sdjl extern int			_nscd_cfg_num_nsw_src_all;
235cb5caa98Sdjl extern int			_nscd_cfg_num_nsw_db;
236cb5caa98Sdjl extern int			_nscd_cfg_num_nsw_db_all;
237cb5caa98Sdjl extern int			_nscd_cfg_num_smf_services;
238cb5caa98Sdjl extern nscd_cfg_id_t		_nscd_cfg_nsw_src[];
239cb5caa98Sdjl extern nscd_cfg_id_t		*_nscd_cfg_nsw_src_all;
240cb5caa98Sdjl extern nscd_cfg_id_t		_nscd_cfg_nsw_db[];
241cb5caa98Sdjl extern nss_db_initf_t		nscd_nss_db_initf[];
242cb5caa98Sdjl extern nscd_cfg_id_t		_nscd_cfg_smf_services[];
243cb5caa98Sdjl extern nscd_smf_state_t		*nscd_smf_service_state;
244cb5caa98Sdjl extern nscd_db_t		***nscd_src_backend_db;
245cb5caa98Sdjl extern nscd_nsw_config_t	***nscd_nsw_config;
246cb5caa98Sdjl extern nscd_nsw_state_base_t	**nscd_nsw_state_base;
247cb5caa98Sdjl extern nscd_getent_ctx_base_t	**nscd_getent_ctx_base;
248cb5caa98Sdjl extern nscd_cfg_global_switch_t	nscd_switch_cfg_g;
249cb5caa98Sdjl extern nscd_cfg_switch_t	*nscd_switch_cfg;
250cb5caa98Sdjl extern nscd_cfg_stat_global_switch_t nscd_switch_stats_g;
251cb5caa98Sdjl extern nscd_cfg_stat_switch_t	*nscd_switch_stats;
252cb5caa98Sdjl 
253cb5caa98Sdjl #define	NSCD_NUM_SRC		_nscd_cfg_num_nsw_src_all
254cb5caa98Sdjl #define	NSCD_NUM_DB		_nscd_cfg_num_nsw_db_all
255cb5caa98Sdjl #define	NSCD_NUM_SMF_FMRI	_nscd_cfg_num_smf_services
256cb5caa98Sdjl #define	NSCD_NSW_SRC_NAME(i)	(_nscd_cfg_nsw_src_all + i)->name
257cb5caa98Sdjl #define	NSCD_NSW_DB_NAME(i)	_nscd_cfg_nsw_db[i].name
258cb5caa98Sdjl #define	NSCD_SMF_SVC_FMRI(i)	_nscd_cfg_smf_services[i].name
259cb5caa98Sdjl #define	NSCD_SMF_SVC_INDEX(i)	_nscd_cfg_smf_services[i].index
260cb5caa98Sdjl #define	NSCD_SMF_SVC_STATE(i)	nscd_smf_service_state[i].src_state
261cb5caa98Sdjl #define	NSCD_SW_CFG_G		nscd_switch_cfg_g
262cb5caa98Sdjl #define	NSCD_SW_CFG(i)		nscd_switch_cfg[i]
263cb5caa98Sdjl #define	NSCD_SW_STATS_G		nscd_switch_stats_g
264cb5caa98Sdjl #define	NSCD_SW_STATS(i)	nscd_switch_stats[i]
265cb5caa98Sdjl 
266cb5caa98Sdjl /*
267cb5caa98Sdjl  * special service states used by the switch engine
268cb5caa98Sdjl  */
269cb5caa98Sdjl #define	NSCD_SVC_STATE_UNINITED		-1
270d2ba247cSmichen #define	NSCD_SVC_STATE_FOREIGN_SRC	-2
271d2ba247cSmichen #define	NSCD_SVC_STATE_UNSUPPORTED_SRC	-3
272cb5caa98Sdjl 
273cb5caa98Sdjl /*
274cb5caa98Sdjl  * prototypes
275cb5caa98Sdjl  */
276cb5caa98Sdjl 
277cb5caa98Sdjl void
278cb5caa98Sdjl _nscd_put_nsw_state(
279cb5caa98Sdjl 	nscd_nsw_state_t	*s);
280cb5caa98Sdjl 
281cb5caa98Sdjl void
282cb5caa98Sdjl _nscd_put_nsw_state_thread(
283cb5caa98Sdjl 	nscd_nsw_state_t	*s);
284cb5caa98Sdjl 
285cb5caa98Sdjl nscd_rc_t
286cb5caa98Sdjl _nscd_get_nsw_state(
287cb5caa98Sdjl 	nss_db_root_t		*rootp,
288cb5caa98Sdjl 	nscd_nsw_params_t	*params);
289cb5caa98Sdjl 
290cb5caa98Sdjl nscd_rc_t
291cb5caa98Sdjl _nscd_get_nsw_state_thread(
292cb5caa98Sdjl 	nss_db_root_t		*rootp,
293cb5caa98Sdjl 	nscd_nsw_params_t	*params);
294cb5caa98Sdjl 
295cb5caa98Sdjl nscd_rc_t
296cb5caa98Sdjl _nscd_init_all_nsw_state_base();
297cb5caa98Sdjl 
298cb5caa98Sdjl nscd_rc_t
299cb5caa98Sdjl _nscd_init_nsw_state_base(
300cb5caa98Sdjl 	int			dbi,
301ad0e80f7Smichen 	int			compat_basei,
302cb5caa98Sdjl 	int			lock);
303cb5caa98Sdjl 
304cb5caa98Sdjl nscd_rc_t
305cb5caa98Sdjl _nscd_init_all_getent_ctx();
306cb5caa98Sdjl 
307cb5caa98Sdjl nscd_rc_t
308cb5caa98Sdjl _nscd_init_getent_ctx_base(
309cb5caa98Sdjl 	int			dbi,
310cb5caa98Sdjl 	int			lock);
311cb5caa98Sdjl 
312cb5caa98Sdjl nscd_db_t
313cb5caa98Sdjl *_nscd_create_getent_ctxaddrDB();
314cb5caa98Sdjl 
315cb5caa98Sdjl nscd_rc_t
316cb5caa98Sdjl _nscd_get_getent_ctx(
317cb5caa98Sdjl 	nss_getent_t		*contextpp,
318cb5caa98Sdjl 	nscd_nsw_params_t	*params);
319cb5caa98Sdjl 
320cb5caa98Sdjl void
321cb5caa98Sdjl _nscd_put_getent_ctx(
322cb5caa98Sdjl 	nscd_getent_context_t	*ctx);
32329836b19Smichen void
32429836b19Smichen _nscd_free_ctx_if_aborted(
32529836b19Smichen 	nscd_getent_context_t	*ctx);
326cb5caa98Sdjl 
3276392794bSMichen Chang int
3286392794bSMichen Chang _nscd_is_getent_ctx_in_use(
3296392794bSMichen Chang 	nscd_getent_context_t	*ctx);
3306392794bSMichen Chang 
331cb5caa98Sdjl nscd_rc_t
332cb5caa98Sdjl _nscd_init_all_nsw_config();
333cb5caa98Sdjl 
334cb5caa98Sdjl nscd_rc_t
335cb5caa98Sdjl _nscd_init_all_nsw_be_info_db();
336cb5caa98Sdjl 
337cb5caa98Sdjl #ifdef NSCD_NSSWITCH_CONF_FROM_SMF_PROP
338cb5caa98Sdjl nscd_rc_t
339cb5caa98Sdjl _nscd_get_new_nsw_config(
340cb5caa98Sdjl 	scf_handle_t		*hndl,
341cb5caa98Sdjl 	const char		*fmri,
342cb5caa98Sdjl 	scf_propertygroup_t	*pg);
343cb5caa98Sdjl #endif
344cb5caa98Sdjl 
345cb5caa98Sdjl nscd_rc_t
346cb5caa98Sdjl _nscd_get_new_service_state(
347cb5caa98Sdjl 	int			index,
348cb5caa98Sdjl 	scf_handle_t		*hndl,
349cb5caa98Sdjl 	scf_property_t		*prop);
350cb5caa98Sdjl 
351cb5caa98Sdjl nscd_getent_context_t *
352cb5caa98Sdjl _nscd_is_getent_ctx(
353e37190e5Smichen 	nscd_cookie_num_t	cookie_num);
354cb5caa98Sdjl 
355cb5caa98Sdjl nscd_rc_t
356cb5caa98Sdjl _nscd_create_sw_struct(
357cb5caa98Sdjl 	int			dbi,
358ad0e80f7Smichen 	int			compat_basei,
359cb5caa98Sdjl 	const char		*dbn,
360cb5caa98Sdjl 	const char		*cfgstr,
361cb5caa98Sdjl 	void			*swcfgv1,
362cb5caa98Sdjl 	nscd_nsw_params_t	*params);
363cb5caa98Sdjl 
364cb5caa98Sdjl nscd_rc_t
365cb5caa98Sdjl _nscd_create_new_config(
366cb5caa98Sdjl 	nscd_nsw_params_t	*params);
367cb5caa98Sdjl 
368cb5caa98Sdjl void
369cb5caa98Sdjl _nscd_free_nsw_config(
370cb5caa98Sdjl 	nscd_nsw_config_t	*nswcfg);
371cb5caa98Sdjl 
372cb5caa98Sdjl nscd_rc_t
373cb5caa98Sdjl _nscd_init_smf_monitor();
374cb5caa98Sdjl 
375cb5caa98Sdjl nscd_rc_t
376cb5caa98Sdjl _nscd_alloc_nsw_config();
377cb5caa98Sdjl 
378cb5caa98Sdjl nscd_rc_t
379cb5caa98Sdjl _nscd_alloc_service_state_table();
380cb5caa98Sdjl 
381cb5caa98Sdjl nscd_rc_t
382cb5caa98Sdjl _nscd_alloc_nsw_state_base();
383cb5caa98Sdjl 
384cb5caa98Sdjl nscd_rc_t
385cb5caa98Sdjl _nscd_alloc_nsw_be_info_db();
386cb5caa98Sdjl 
387cb5caa98Sdjl nscd_rc_t
388cb5caa98Sdjl _nscd_alloc_getent_ctx_base();
389cb5caa98Sdjl 
390cb5caa98Sdjl void
391cb5caa98Sdjl _nscd_free_all_nsw_state_base();
392cb5caa98Sdjl 
393cb5caa98Sdjl void
394cb5caa98Sdjl _nscd_free_all_getent_ctx_base();
395cb5caa98Sdjl 
396cb5caa98Sdjl void
397cb5caa98Sdjl _nscd_free_all_nsw_config();
398cb5caa98Sdjl 
399cb5caa98Sdjl void
400cb5caa98Sdjl _nscd_free_all_nsw_backend_info_db();
401cb5caa98Sdjl 
402cb5caa98Sdjl struct __nsw_switchconfig_v1 *
403cb5caa98Sdjl _nsw_getoneconfig_v1(
404cb5caa98Sdjl 	const char		*name,
405cb5caa98Sdjl 	char			*linep,
406cb5caa98Sdjl 	enum __nsw_parse_err	*errp);
407cb5caa98Sdjl int
408cb5caa98Sdjl __nsw_freeconfig_v1(
409cb5caa98Sdjl 	struct __nsw_switchconfig_v1 *conf);
410cb5caa98Sdjl 
411cb5caa98Sdjl int
412cb5caa98Sdjl _nscd_get_smf_state(int srci, int dbi, int recheck);
413cb5caa98Sdjl 
414cb5caa98Sdjl void
415cb5caa98Sdjl nss_psearch(void *buffer, size_t length);
416cb5caa98Sdjl void
417cb5caa98Sdjl nss_psetent(void *buffer, size_t length, pid_t pid);
418cb5caa98Sdjl void
419cb5caa98Sdjl nss_pgetent(void *buffer, size_t length);
420cb5caa98Sdjl void
421cb5caa98Sdjl nss_pendent(void *buffer, size_t length);
422cb5caa98Sdjl void
423cb5caa98Sdjl nss_pdelete(void *buffer, size_t length);
424cb5caa98Sdjl 
425cb5caa98Sdjl nscd_rc_t _nscd_alloc_switch_cfg();
426cb5caa98Sdjl nscd_rc_t _nscd_alloc_switch_stats();
427cb5caa98Sdjl nscd_db_t *_nscd_create_getent_ctx_addrDB();
428cb5caa98Sdjl nscd_db_t *_nscd_create_getent_ctxDB();
429cb5caa98Sdjl 
430cb5caa98Sdjl #ifdef	__cplusplus
431cb5caa98Sdjl }
432cb5caa98Sdjl #endif
433cb5caa98Sdjl 
434cb5caa98Sdjl #endif	/* _NSCD_SWITCH_H */
435