xref: /titanic_54/usr/src/cmd/nscd/nscd_switch.h (revision e37190e5b4531a897e4191a30b8f41678b582e25)
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 /*
22cb5caa98Sdjl  * Copyright 2006 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 #pragma ident	"%Z%%M%	%I%	%E% SMI"
30cb5caa98Sdjl 
31cb5caa98Sdjl #ifdef	__cplusplus
32cb5caa98Sdjl extern "C" {
33cb5caa98Sdjl #endif
34cb5caa98Sdjl 
35cb5caa98Sdjl #include <nss_dbdefs.h>
36cb5caa98Sdjl #include <thread.h>
37cb5caa98Sdjl #include <libscf.h>
38cb5caa98Sdjl #define	__NSS_PRIVATE_INTERFACE
39cb5caa98Sdjl #include "nsswitch_priv.h"
40cb5caa98Sdjl #undef	__NSS_PRIVATE_INTERFACE
41cb5caa98Sdjl #include "nscd_db.h"
42cb5caa98Sdjl #include "nscd_config.h"
43cb5caa98Sdjl 
44cb5caa98Sdjl /*
45cb5caa98Sdjl  * max. length of e.g. "passwd: files ldap"
46cb5caa98Sdjl  */
47cb5caa98Sdjl #define	MAX_NSSWITCH_CONFIG_STRING_SZ 256
48cb5caa98Sdjl 
49cb5caa98Sdjl /*
50cb5caa98Sdjl  * max. length of the name of a NSS database
51cb5caa98Sdjl  */
52cb5caa98Sdjl #define	MAX_NSSWITCH_CONFIG_DB_NAME_SZ 256
53cb5caa98Sdjl 
54cb5caa98Sdjl /*
55cb5caa98Sdjl  * nscd_nsw_config_t is an abstraction of the configuration
56cb5caa98Sdjl  * for a NSS database
57cb5caa98Sdjl  */
58cb5caa98Sdjl typedef struct {
59cb5caa98Sdjl 	char				*db_name;
60cb5caa98Sdjl 	char				*nsw_cfg_str;
61cb5caa98Sdjl 	nss_db_params_t			fe_params;
62cb5caa98Sdjl 	struct __nsw_switchconfig_v1	*nsw_config;
63cb5caa98Sdjl 	int				max_src;
64cb5caa98Sdjl 	int				*src_idx;	/* ptr to array of */
65cb5caa98Sdjl 							/* src index */
66cb5caa98Sdjl 	int				nobase;		/* not shared */
67cb5caa98Sdjl } nscd_nsw_config_t;
68cb5caa98Sdjl 
69cb5caa98Sdjl /*
70cb5caa98Sdjl  * nscd_be_info_t is an abstraction of a NSS backend
71cb5caa98Sdjl  */
72cb5caa98Sdjl typedef struct {
73cb5caa98Sdjl 	nss_backend_constr_t	be_constr;
74cb5caa98Sdjl 	nss_backend_finder_t	*finder;
75cb5caa98Sdjl 	void			*finder_priv;
76cb5caa98Sdjl } nscd_be_info_t;
77cb5caa98Sdjl 
78cb5caa98Sdjl /*
79cb5caa98Sdjl  * nscd_state_ctrl_t is used to control a nscd_nsw_state pool
80cb5caa98Sdjl  */
81cb5caa98Sdjl typedef struct {
82cb5caa98Sdjl 	int			max;
83cb5caa98Sdjl 	int			allocated;
84cb5caa98Sdjl 	int			free;
85cb5caa98Sdjl 	int			waiter;
86cb5caa98Sdjl 	struct nscd_nsw_state	*first;
87cb5caa98Sdjl } nscd_state_ctrl_t;
88cb5caa98Sdjl 
89cb5caa98Sdjl /*
90cb5caa98Sdjl  * nscd_nsw_state_base_t represents the nscd_nsw_state pool
91cb5caa98Sdjl  * for a NSS database
92cb5caa98Sdjl  */
93cb5caa98Sdjl typedef struct nscd_nsw_state_base {
94cb5caa98Sdjl 	int			dbi;	/* which database? */
95cb5caa98Sdjl 	nscd_state_ctrl_t	nsw_state;
96cb5caa98Sdjl 	nscd_state_ctrl_t	nsw_state_thr;
97cb5caa98Sdjl 	int			used_by_thr;
98cb5caa98Sdjl 	thread_t		tid;
99cb5caa98Sdjl 	cond_t			thr_cond;
100cb5caa98Sdjl } nscd_nsw_state_base_t;
101cb5caa98Sdjl 
102cb5caa98Sdjl /*
103cb5caa98Sdjl  * nscd_nsw_state_t is an abstraction of all the data needed
104cb5caa98Sdjl  * to do lookup of NSS database (e.g. "passwd" or "hosts")
105cb5caa98Sdjl  */
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 */
110cb5caa98Sdjl 	nss_db_params_t			p;
111cb5caa98Sdjl 	struct __nsw_switchconfig_v1	*config;
112cb5caa98Sdjl 	nscd_nsw_config_t		**nsw_cfg_p;
113cb5caa98Sdjl 	nscd_nsw_state_base_t		*base;
114cb5caa98Sdjl 	nss_backend_t			**be; /* array of backends */
115cb5caa98Sdjl 	nscd_db_t			***be_db_pp;
116cb5caa98Sdjl 	struct nscd_nsw_state		*next;
117cb5caa98Sdjl } nscd_nsw_state_t;
118cb5caa98Sdjl 
119cb5caa98Sdjl /*
120cb5caa98Sdjl  * nscd_getent_ctx_base_t represents the nscd_getent_ctx_base_t pool
121cb5caa98Sdjl  * for a NSS database
122cb5caa98Sdjl  */
123cb5caa98Sdjl typedef struct nscd_getent_ctx_base {
124cb5caa98Sdjl 	int			dbi;		/* which database? */
125cb5caa98Sdjl 	int			deattached;	/* not associated with */
126cb5caa98Sdjl 						/* current config */
127cb5caa98Sdjl 	int			max_getent_ctx;
128cb5caa98Sdjl 	int			num_getent_ctx;
129cb5caa98Sdjl 	int			num_waiter;
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;
139cb5caa98Sdjl 	nscd_seq_num_t			seq_num;
140*e37190e5Smichen 	nscd_cookie_num_t		cookie_num;
141cb5caa98Sdjl 	pid_t				pid;	/* door client's pid */
142cb5caa98Sdjl 	int				n_src;	/* >=max_src: end of sequence */
143cb5caa98Sdjl 	nscd_nsw_state_t		*nsw_state;
144cb5caa98Sdjl 	nss_backend_t			*be;
145cb5caa98Sdjl 	nscd_getent_ctx_base_t		*base;
146cb5caa98Sdjl 	struct nscd_getent_context	*next;
147cb5caa98Sdjl } nscd_getent_context_t;
148cb5caa98Sdjl 
149cb5caa98Sdjl /*
150cb5caa98Sdjl  * nscd_smf_state_t is used to keep track of the state of the smf
151cb5caa98Sdjl  * service associated with a NSS source (e.g. "passwd" or "hosts")
152cb5caa98Sdjl  */
153cb5caa98Sdjl typedef struct {
154cb5caa98Sdjl 	char	*src_name;
155cb5caa98Sdjl 	int	src_state;
156cb5caa98Sdjl } nscd_smf_state_t;
157cb5caa98Sdjl 
158cb5caa98Sdjl /*
159cb5caa98Sdjl  * nscd_smf_state_t is used to keep track of the state of the smf
160cb5caa98Sdjl  * service associated with a NSS source (e.g. "passwd" or "hosts")
161cb5caa98Sdjl  */
162cb5caa98Sdjl typedef struct {
163cb5caa98Sdjl 	int			dbi;		/* database index */
164cb5caa98Sdjl 	/*
165cb5caa98Sdjl 	 * index of the database of which the switch policy
166cb5caa98Sdjl 	 * should be used
167cb5caa98Sdjl 	 */
168cb5caa98Sdjl 	int			cfgdbi;
169cb5caa98Sdjl 	/*
170cb5caa98Sdjl 	 * index of the pseudo database that the NSS backend
171cb5caa98Sdjl 	 * does search on
172cb5caa98Sdjl 	 */
173cb5caa98Sdjl 	int			compati;
174cb5caa98Sdjl 	/*
175cb5caa98Sdjl 	 * ptr to ptr to the siwtch config structure
176cb5caa98Sdjl 	 */
177cb5caa98Sdjl 	nscd_nsw_config_t	**nswcfg;
178cb5caa98Sdjl 	/*
179cb5caa98Sdjl 	 * frontend params passed to nss_search or nss_*ent
180cb5caa98Sdjl 	 */
181cb5caa98Sdjl 	struct nss_db_params	p;
182cb5caa98Sdjl 	/*
183cb5caa98Sdjl 	 * set to 1 if database is "hosts", else 2 if "ipnodes"
184cb5caa98Sdjl 	 */
185cb5caa98Sdjl 	int8_t			dnsi;
186cb5caa98Sdjl 	/*
187cb5caa98Sdjl 	 * set to 1 if require privilege to look up the database
188cb5caa98Sdjl 	 */
189cb5caa98Sdjl 	uint8_t			privdb;
190cb5caa98Sdjl } nscd_nsw_params_t;
191cb5caa98Sdjl 
192cb5caa98Sdjl /*
193cb5caa98Sdjl  * additional info returned by the switch engine
194cb5caa98Sdjl  */
195cb5caa98Sdjl typedef struct {
196cb5caa98Sdjl 	void	*pbuf;	/* ptr to packed buffer */
197cb5caa98Sdjl 	size_t	pbufsiz; /* length of the packed buffer */
198cb5caa98Sdjl 	int	srci;	/* last source searched */
199cb5caa98Sdjl 	int	errnum; /* errno from the backend */
200cb5caa98Sdjl 	int	noarg; /* if set, backend does not use the arg structure */
201cb5caa98Sdjl 	int	fallback; /* if set, may need to fall back to main nscd */
202cb5caa98Sdjl } nscd_sw_return_t;
203cb5caa98Sdjl 
204cb5caa98Sdjl /*
205*e37190e5Smichen  * nscd cookies used for setent/getent/endent
206*e37190e5Smichen  * - p0 cookie: returned by nscd to indicate
207*e37190e5Smichen  *              the start of the enumeration position
208*e37190e5Smichen  * - p1 cookie: returned/updated by nscd to indicate
209*e37190e5Smichen  *              the current enumeration position
210*e37190e5Smichen  */
211*e37190e5Smichen #define	NSCD_P0_COOKIE_SEQNUM	-1
212*e37190e5Smichen typedef struct {
213*e37190e5Smichen 	pid_t		p0_pid;
214*e37190e5Smichen 	time_t		p0_time;
215*e37190e5Smichen 	nscd_seq_num_t	p0_seqnum;
216*e37190e5Smichen } nscd_getent_p0_cookie_t;
217*e37190e5Smichen 
218*e37190e5Smichen typedef struct {
219*e37190e5Smichen 	nscd_cookie_num_t	p1_cookie_num;
220*e37190e5Smichen 	nscd_seq_num_t		p1_seqnum;
221*e37190e5Smichen } nscd_getent_p1_cookie_t;
222*e37190e5Smichen 
223*e37190e5Smichen /*
224cb5caa98Sdjl  * static tables or global data defined in other files
225cb5caa98Sdjl  */
226cb5caa98Sdjl extern int			_nscd_cfg_num_nsw_src;
227cb5caa98Sdjl extern int			_nscd_cfg_num_nsw_src_all;
228cb5caa98Sdjl extern int			_nscd_cfg_num_nsw_db;
229cb5caa98Sdjl extern int			_nscd_cfg_num_nsw_db_all;
230cb5caa98Sdjl extern int			_nscd_cfg_num_smf_services;
231cb5caa98Sdjl extern nscd_cfg_id_t		_nscd_cfg_nsw_src[];
232cb5caa98Sdjl extern nscd_cfg_id_t		*_nscd_cfg_nsw_src_all;
233cb5caa98Sdjl extern nscd_cfg_id_t		_nscd_cfg_nsw_db[];
234cb5caa98Sdjl extern nss_db_initf_t		nscd_nss_db_initf[];
235cb5caa98Sdjl extern nscd_cfg_id_t		_nscd_cfg_smf_services[];
236cb5caa98Sdjl extern nscd_smf_state_t		*nscd_smf_service_state;
237cb5caa98Sdjl extern nscd_db_t		***nscd_src_backend_db;
238cb5caa98Sdjl extern nscd_nsw_config_t	***nscd_nsw_config;
239cb5caa98Sdjl extern nscd_nsw_state_base_t	**nscd_nsw_state_base;
240cb5caa98Sdjl extern nscd_getent_ctx_base_t	**nscd_getent_ctx_base;
241cb5caa98Sdjl extern nscd_cfg_global_switch_t	nscd_switch_cfg_g;
242cb5caa98Sdjl extern nscd_cfg_switch_t	*nscd_switch_cfg;
243cb5caa98Sdjl extern nscd_cfg_stat_global_switch_t nscd_switch_stats_g;
244cb5caa98Sdjl extern nscd_cfg_stat_switch_t	*nscd_switch_stats;
245cb5caa98Sdjl 
246cb5caa98Sdjl #define	NSCD_NUM_SRC		_nscd_cfg_num_nsw_src_all
247cb5caa98Sdjl #define	NSCD_NUM_DB		_nscd_cfg_num_nsw_db_all
248cb5caa98Sdjl #define	NSCD_NUM_SMF_FMRI	_nscd_cfg_num_smf_services
249cb5caa98Sdjl #define	NSCD_NSW_SRC_NAME(i)	(_nscd_cfg_nsw_src_all + i)->name
250cb5caa98Sdjl #define	NSCD_NSW_DB_NAME(i)	_nscd_cfg_nsw_db[i].name
251cb5caa98Sdjl #define	NSCD_SMF_SVC_FMRI(i)	_nscd_cfg_smf_services[i].name
252cb5caa98Sdjl #define	NSCD_SMF_SVC_INDEX(i)	_nscd_cfg_smf_services[i].index
253cb5caa98Sdjl #define	NSCD_SMF_SVC_STATE(i)	nscd_smf_service_state[i].src_state
254cb5caa98Sdjl #define	NSCD_SW_CFG_G		nscd_switch_cfg_g
255cb5caa98Sdjl #define	NSCD_SW_CFG(i)		nscd_switch_cfg[i]
256cb5caa98Sdjl #define	NSCD_SW_STATS_G		nscd_switch_stats_g
257cb5caa98Sdjl #define	NSCD_SW_STATS(i)	nscd_switch_stats[i]
258cb5caa98Sdjl 
259cb5caa98Sdjl /*
260cb5caa98Sdjl  * special service states used by the switch engine
261cb5caa98Sdjl  */
262cb5caa98Sdjl #define	NSCD_SVC_STATE_UNINITED		-1
263cb5caa98Sdjl #define	NSCD_SVC_STATE_UNKNOWN_SRC	-2
264cb5caa98Sdjl 
265cb5caa98Sdjl /*
266cb5caa98Sdjl  * prototypes
267cb5caa98Sdjl  */
268cb5caa98Sdjl 
269cb5caa98Sdjl void
270cb5caa98Sdjl _nscd_put_nsw_state(
271cb5caa98Sdjl 	nscd_nsw_state_t	*s);
272cb5caa98Sdjl 
273cb5caa98Sdjl void
274cb5caa98Sdjl _nscd_put_nsw_state_thread(
275cb5caa98Sdjl 	nscd_nsw_state_t	*s);
276cb5caa98Sdjl 
277cb5caa98Sdjl nscd_rc_t
278cb5caa98Sdjl _nscd_get_nsw_state(
279cb5caa98Sdjl 	nss_db_root_t		*rootp,
280cb5caa98Sdjl 	nscd_nsw_params_t	*params);
281cb5caa98Sdjl 
282cb5caa98Sdjl nscd_rc_t
283cb5caa98Sdjl _nscd_get_nsw_state_thread(
284cb5caa98Sdjl 	nss_db_root_t		*rootp,
285cb5caa98Sdjl 	nscd_nsw_params_t	*params);
286cb5caa98Sdjl 
287cb5caa98Sdjl nscd_rc_t
288cb5caa98Sdjl _nscd_init_all_nsw_state_base();
289cb5caa98Sdjl 
290cb5caa98Sdjl nscd_rc_t
291cb5caa98Sdjl _nscd_init_nsw_state_base(
292cb5caa98Sdjl 	int			dbi,
293ad0e80f7Smichen 	int			compat_basei,
294cb5caa98Sdjl 	int			lock);
295cb5caa98Sdjl 
296cb5caa98Sdjl nscd_rc_t
297cb5caa98Sdjl _nscd_init_all_getent_ctx();
298cb5caa98Sdjl 
299cb5caa98Sdjl nscd_rc_t
300cb5caa98Sdjl _nscd_init_getent_ctx_base(
301cb5caa98Sdjl 	int			dbi,
302cb5caa98Sdjl 	int			lock);
303cb5caa98Sdjl 
304cb5caa98Sdjl nscd_db_t
305cb5caa98Sdjl *_nscd_create_getent_ctxaddrDB();
306cb5caa98Sdjl 
307cb5caa98Sdjl nscd_rc_t
308cb5caa98Sdjl _nscd_get_getent_ctx(
309cb5caa98Sdjl 	nss_getent_t		*contextpp,
310cb5caa98Sdjl 	nscd_nsw_params_t	*params);
311cb5caa98Sdjl 
312cb5caa98Sdjl void
313cb5caa98Sdjl _nscd_put_getent_ctx(
314cb5caa98Sdjl 	nscd_getent_context_t	*ctx);
315cb5caa98Sdjl 
316cb5caa98Sdjl nscd_rc_t
317cb5caa98Sdjl _nscd_init_all_nsw_config();
318cb5caa98Sdjl 
319cb5caa98Sdjl nscd_rc_t
320cb5caa98Sdjl _nscd_init_all_nsw_be_info_db();
321cb5caa98Sdjl 
322cb5caa98Sdjl #ifdef NSCD_NSSWITCH_CONF_FROM_SMF_PROP
323cb5caa98Sdjl nscd_rc_t
324cb5caa98Sdjl _nscd_get_new_nsw_config(
325cb5caa98Sdjl 	scf_handle_t		*hndl,
326cb5caa98Sdjl 	const char		*fmri,
327cb5caa98Sdjl 	scf_propertygroup_t	*pg);
328cb5caa98Sdjl #endif
329cb5caa98Sdjl 
330cb5caa98Sdjl nscd_rc_t
331cb5caa98Sdjl _nscd_get_new_service_state(
332cb5caa98Sdjl 	int			index,
333cb5caa98Sdjl 	scf_handle_t		*hndl,
334cb5caa98Sdjl 	scf_property_t		*prop);
335cb5caa98Sdjl 
336cb5caa98Sdjl nscd_getent_context_t *
337cb5caa98Sdjl _nscd_is_getent_ctx(
338*e37190e5Smichen 	nscd_cookie_num_t	cookie_num);
339cb5caa98Sdjl 
340cb5caa98Sdjl nscd_rc_t
341cb5caa98Sdjl _nscd_create_sw_struct(
342cb5caa98Sdjl 	int			dbi,
343ad0e80f7Smichen 	int			compat_basei,
344cb5caa98Sdjl 	const char		*dbn,
345cb5caa98Sdjl 	const char		*cfgstr,
346cb5caa98Sdjl 	void			*swcfgv1,
347cb5caa98Sdjl 	nscd_nsw_params_t	*params);
348cb5caa98Sdjl 
349cb5caa98Sdjl nscd_rc_t
350cb5caa98Sdjl _nscd_create_new_config(
351cb5caa98Sdjl 	nscd_nsw_params_t	*params);
352cb5caa98Sdjl 
353cb5caa98Sdjl void
354cb5caa98Sdjl _nscd_free_nsw_config(
355cb5caa98Sdjl 	nscd_nsw_config_t	*nswcfg);
356cb5caa98Sdjl 
357cb5caa98Sdjl nscd_rc_t
358cb5caa98Sdjl _nscd_init_smf_monitor();
359cb5caa98Sdjl 
360cb5caa98Sdjl nscd_rc_t
361cb5caa98Sdjl _nscd_alloc_nsw_config();
362cb5caa98Sdjl 
363cb5caa98Sdjl nscd_rc_t
364cb5caa98Sdjl _nscd_alloc_service_state_table();
365cb5caa98Sdjl 
366cb5caa98Sdjl nscd_rc_t
367cb5caa98Sdjl _nscd_alloc_nsw_state_base();
368cb5caa98Sdjl 
369cb5caa98Sdjl nscd_rc_t
370cb5caa98Sdjl _nscd_alloc_nsw_be_info_db();
371cb5caa98Sdjl 
372cb5caa98Sdjl nscd_rc_t
373cb5caa98Sdjl _nscd_alloc_getent_ctx_base();
374cb5caa98Sdjl 
375cb5caa98Sdjl void
376cb5caa98Sdjl _nscd_free_all_nsw_state_base();
377cb5caa98Sdjl 
378cb5caa98Sdjl void
379cb5caa98Sdjl _nscd_free_all_getent_ctx_base();
380cb5caa98Sdjl 
381cb5caa98Sdjl void
382cb5caa98Sdjl _nscd_free_all_nsw_config();
383cb5caa98Sdjl 
384cb5caa98Sdjl void
385cb5caa98Sdjl _nscd_free_all_nsw_backend_info_db();
386cb5caa98Sdjl 
387cb5caa98Sdjl struct __nsw_switchconfig_v1 *
388cb5caa98Sdjl _nsw_getoneconfig_v1(
389cb5caa98Sdjl 	const char		*name,
390cb5caa98Sdjl 	char			*linep,
391cb5caa98Sdjl 	enum __nsw_parse_err	*errp);
392cb5caa98Sdjl int
393cb5caa98Sdjl __nsw_freeconfig_v1(
394cb5caa98Sdjl 	struct __nsw_switchconfig_v1 *conf);
395cb5caa98Sdjl 
396cb5caa98Sdjl int
397cb5caa98Sdjl _nscd_get_smf_state(int srci, int dbi, int recheck);
398cb5caa98Sdjl 
399cb5caa98Sdjl void
400cb5caa98Sdjl nss_psearch(void *buffer, size_t length);
401cb5caa98Sdjl void
402cb5caa98Sdjl nss_psetent(void *buffer, size_t length, pid_t pid);
403cb5caa98Sdjl void
404cb5caa98Sdjl nss_pgetent(void *buffer, size_t length);
405cb5caa98Sdjl void
406cb5caa98Sdjl nss_pendent(void *buffer, size_t length);
407cb5caa98Sdjl void
408cb5caa98Sdjl nss_pdelete(void *buffer, size_t length);
409cb5caa98Sdjl 
410cb5caa98Sdjl nscd_rc_t _nscd_alloc_switch_cfg();
411cb5caa98Sdjl nscd_rc_t _nscd_alloc_switch_stats();
412cb5caa98Sdjl nscd_db_t *_nscd_create_getent_ctx_addrDB();
413cb5caa98Sdjl nscd_rc_t _nscd_populate_nsw_backend_info();
414cb5caa98Sdjl nscd_db_t *_nscd_create_getent_ctxDB();
415cb5caa98Sdjl 
416cb5caa98Sdjl #ifdef	__cplusplus
417cb5caa98Sdjl }
418cb5caa98Sdjl #endif
419cb5caa98Sdjl 
420cb5caa98Sdjl #endif	/* _NSCD_SWITCH_H */
421