xref: /titanic_44/usr/src/cmd/nscd/nscd_cfgdef.h (revision 4a75c0c1ad1b9f32a7a423e1f23a8d23ac800de0)
1 /*
2  * CDDL HEADER START
3  *
4  * The contents of this file are subject to the terms of the
5  * Common Development and Distribution License (the "License").
6  * You may not use this file except in compliance with the License.
7  *
8  * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE
9  * or http://www.opensolaris.org/os/licensing.
10  * See the License for the specific language governing permissions
11  * and limitations under the License.
12  *
13  * When distributing Covered Code, include this CDDL HEADER in each
14  * file and include the License file at usr/src/OPENSOLARIS.LICENSE.
15  * If applicable, add the following below this CDDL HEADER, with the
16  * fields enclosed by brackets "[]" replaced with your own identifying
17  * information: Portions Copyright [yyyy] [name of copyright owner]
18  *
19  * CDDL HEADER END
20  */
21 /*
22  * Copyright 2007 Sun Microsystems, Inc.  All rights reserved.
23  * Use is subject to license terms.
24  */
25 
26 #ifndef	_NSCD_CFGDEF_H
27 #define	_NSCD_CFGDEF_H
28 
29 #pragma ident	"%Z%%M%	%I%	%E% SMI"
30 
31 #ifdef	__cplusplus
32 extern "C" {
33 #endif
34 
35 #include <stddef.h>
36 #include <limits.h>
37 #include <nss_dbdefs.h>
38 #include "nscd_config.h"
39 #include "nscd_log.h"
40 #include "cache.h"
41 
42 /*
43  * structure used for preliminary checking of an integer
44  * configuration value
45  */
46 typedef	struct {
47 	int	min;
48 	int	max;
49 } nscd_cfg_int_check_t;
50 
51 /*
52  * structure used for preliminary checking of a bitmap
53  * configuration value
54  */
55 typedef	struct {
56 	nscd_cfg_bitmap_t	valid_bits;
57 } nscd_cfg_bitmap_check_t;
58 
59 /*
60  * structure used for preliminary checking of a string
61  * configuration value
62  */
63 typedef	struct {
64 	nscd_bool_t	must_not_null;
65 	int		maxlen;
66 } nscd_cfg_str_check_t;
67 
68 /*
69  * Per nsswitch database config data
70  */
71 typedef struct {
72 	nscd_cfg_frontend_t	fe;
73 	nscd_cfg_switch_t	sw;
74 	nscd_cfg_cache_t	cache;
75 } nscd_cfg_nsw_db_data_t;
76 
77 /*
78  * Per nsswitch database statistics data
79  */
80 typedef struct {
81 	nscd_cfg_stat_switch_t		sw;
82 	nscd_cfg_stat_cache_t		cache;
83 } nscd_cfg_stat_nsw_db_data_t;
84 
85 /*
86  * global statistics data
87  */
88 typedef struct {
89 	nscd_cfg_stat_global_log_t	log;
90 	nscd_cfg_stat_global_switch_t	sw;
91 	nscd_cfg_stat_cache_t		cache;
92 } nscd_cfg_stat_global_data_t;
93 
94 /*
95  * global config data
96  */
97 typedef struct {
98 	nscd_cfg_global_log_t		log;
99 	nscd_cfg_global_frontend_t	fe;
100 	nscd_cfg_global_selfcred_t	sc;
101 	nscd_cfg_global_switch_t	sw;
102 	nscd_cfg_global_cache_t		cache;
103 } nscd_cfg_global_data_t;
104 
105 /*
106  * structure for handling the switch database specific group
107  * or parameter default
108  */
109 typedef struct nscd_cfg_nsw_spc_default {
110 	char	*db;
111 	int	group_off;
112 	int	param_off;
113 	void	*data;		/* pointer or link to data */
114 	int	data_len;
115 } nscd_cfg_nsw_spc_default_t;
116 
117 /*
118  * name service switch source (repository) table
119  */
120 nscd_cfg_id_t _nscd_cfg_nsw_src[] = {
121 	{	0,	"files"			},
122 	{	1,	"ldap"			},
123 	{	2,	"nis"			},
124 	{	3,	"nisplus"		},
125 	{	4,	"dns"			},
126 	{	5,	"compat"		},
127 	{	6,	"user"			},
128 	{	-1,	NULL			}
129 };
130 
131 /*
132  * name service related smf service table
133  * (the order of the services should match the order of the source
134  *  listed above, 0: files, 1: ldap, 2: nis, 3: nisplus. dns is
135  *  not needed)
136  */
137 nscd_cfg_id_t _nscd_cfg_smf_services[] = {
138 	{	0,	"svc:/system/name-service-cache:default"},
139 	{	1,	"svc:/network/ldap/client:default"	},
140 	{	2,	"svc:/network/nis/client:default"	},
141 	{	3,	"svc:/network/rpc/bind:default"		},
142 	{	-1,	NULL					}
143 };
144 
145 /*
146  * name service database table
147  */
148 nscd_cfg_id_t _nscd_cfg_nsw_db[] = {
149 	{	0,	NSS_DBNAM_PASSWD	},
150 	{	1,	NSS_DBNAM_GROUP		},
151 	{	2,	NSS_DBNAM_HOSTS		},
152 	{	3,	NSS_DBNAM_IPNODES	},
153 	{	4,	NSS_DBNAM_EXECATTR	},
154 	{	5,	NSS_DBNAM_PROFATTR	},
155 	{	6,	NSS_DBNAM_USERATTR	},
156 	{	7,	NSS_DBNAM_NETWORKS	},
157 	{	8,	NSS_DBNAM_PROTOCOLS	},
158 	{	9,	NSS_DBNAM_RPC		},
159 	{	10,	NSS_DBNAM_ETHERS	},
160 	{	11,	NSS_DBNAM_NETMASKS	},
161 	{	12,	NSS_DBNAM_BOOTPARAMS	},
162 	{	13,	NSS_DBNAM_PUBLICKEY	},
163 	{	14,	NSS_DBNAM_NETGROUP	},
164 	{	15,	NSS_DBNAM_SERVICES	},
165 	{	16,	NSS_DBNAM_PRINTERS	},
166 	{	17,	NSS_DBNAM_AUTHATTR	},
167 	{	18,	NSS_DBNAM_PROJECT	},
168 	{	19,	NSS_DBNAM_SHADOW	},
169 	{	20,	NSS_DBNAM_AUDITUSER	},
170 	{	21,	NSS_DBNAM_TSOL_TP	},
171 	{	22,	NSS_DBNAM_TSOL_RH	},
172 	/* pseudo-databases for the compat backend */
173 	{	23,	NSS_DBNAM_PASSWD_COMPAT },
174 	{	24,	NSS_DBNAM_GROUP_COMPAT  },
175 #define	NSS_DBNAM_COMPAT_NUM_DB	5
176 	/*
177 	 * pseudo-databases that use the switch policy that is
178 	 * configured for NSS_DBNAM_PASSWD_COMPAT
179 	 */
180 	{	25,	NSS_DBNAM_PASSWD	},
181 	{	26,	NSS_DBNAM_SHADOW	},
182 	{	27,	NSS_DBNAM_AUDITUSER	},
183 	{	28,	NSS_DBNAM_USERATTR	},
184 	/*
185 	 * pseudo-database that uses the switch policy that is
186 	 * configured for NSS_DBNAM_GROUP_COMPAT
187 	 */
188 	{	29,	NSS_DBNAM_GROUP		},
189 	{	-1,	NULL			}
190 };
191 
192 /*
193  * A special way to indicate all switch databases
194  */
195 static	nscd_cfg_id_t _nscd_cfg_nsw_alldb = {
196 		NSCD_CFG_NSW_ALLDB_INDEX,
197 		NSCD_CFG_NSW_ALLDB
198 };
199 
200 /*
201  * data for preliminary checking of the log configuration
202  */
203 static nscd_cfg_str_check_t	NSCD_CFG_LOGFILE_PCHECK =
204 				{nscd_false, PATH_MAX};
205 static nscd_cfg_bitmap_check_t	NSCD_CFG_LOGCOMP_PCHECK =
206 				{NSCD_LOG_ALL};
207 static nscd_cfg_bitmap_check_t	NSCD_CFG_LOGLEVEL_PCHECK =
208 				{NSCD_LOG_LEVEL_ALL};
209 
210 /* data for preliminary checking of the switch configuration */
211 static nscd_cfg_str_check_t	NSCD_CFG_NSWCFGSTR_PCHECK =
212 				{nscd_true, 128};
213 
214 /*
215  * macros for defining the static param table
216  */
217 #define	NSCD_CFG_PGROUP_DESC(pn, type, pflag, gf, g_in_t, pcheck_p,\
218 		nfunc_name, vfunc_name) \
219 	{ \
220 		{-1, pn}, type, (NSCD_CFG_PFLAG_GROUP | pflag), \
221 		0, 0, 0,\
222 		NSCD_SIZEOF(g_in_t, gf), offsetof(g_in_t, gf), -1, \
223 		pcheck_p, nfunc_name, vfunc_name \
224 	}
225 
226 #define	NSCD_CFG_PARAM_DESC(pn, type, pflag, pf, p_in_t, \
227 		gf, g_in_t, pcheck_p, nfunc_name, vfunc_name) \
228 	{ \
229 		{-1, pn}, type, pflag, \
230 		NSCD_SIZEOF(p_in_t, pf), offsetof(p_in_t, pf), -1, \
231 		NSCD_SIZEOF(g_in_t, gf), offsetof(g_in_t, gf), -1, \
232 		pcheck_p, nfunc_name, vfunc_name \
233 	}
234 
235 #define	NSCD_CFG_PGROUP_DESC_NULL \
236 	{ \
237 		{-1, NULL}, -1, NSCD_CFG_PFLAG_GROUP, \
238 		0, 0, 0, \
239 		0, 0, 0, \
240 		NULL, NULL, NULL \
241 	}
242 
243 /* nscd internal cfg_*_notify() cfg_*_verify() and cfg_*_get_stat()  */
244 extern	nscd_rc_t	_nscd_cfg_log_notify();
245 extern	nscd_rc_t	_nscd_cfg_log_verify();
246 extern	nscd_rc_t	_nscd_cfg_frontend_notify();
247 extern	nscd_rc_t	_nscd_cfg_frontend_verify();
248 extern	nscd_rc_t	_nscd_cfg_selfcred_notify();
249 extern	nscd_rc_t	_nscd_cfg_selfcred_verify();
250 extern	nscd_rc_t	_nscd_cfg_switch_notify();
251 extern	nscd_rc_t	_nscd_cfg_switch_verify();
252 extern	nscd_rc_t	_nscd_cfg_cache_notify();
253 extern	nscd_rc_t	_nscd_cfg_cache_verify();
254 extern	nscd_rc_t	_nscd_cfg_log_get_stat();
255 extern	nscd_rc_t	_nscd_cfg_switch_get_stat();
256 extern	nscd_rc_t	_nscd_cfg_cache_get_stat();
257 
258 /*
259  * the following macros are used to indicate a parameter's
260  * notify/verify/get_stat functions are the same as those
261  * of the group
262  */
263 #define	NSCD_CFG_FUNC_NOTIFY_AS_GROUP	((nscd_cfg_func_notify_t)-1)
264 #define	NSCD_CFG_FUNC_VERIFY_AS_GROUP	((nscd_cfg_func_verify_t)-1)
265 #define	NSCD_CFG_FUNC_GET_STAT_AS_GROUP	((nscd_cfg_func_get_stat_t)-1)
266 
267 /*
268  * the static config parameter description table
269  */
270 static	nscd_cfg_param_desc_t	_nscd_cfg_param_desc[] = {
271 
272 	NSCD_CFG_PGROUP_DESC(
273 		"param-group-global-log",
274 		NSCD_CFG_DATA_NONE,
275 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
276 		NSCD_CFG_PFLAG_GLOBAL,
277 		log,
278 		nscd_cfg_global_data_t,
279 		NULL,
280 		_nscd_cfg_log_notify,
281 		_nscd_cfg_log_verify),
282 
283 	NSCD_CFG_PARAM_DESC(
284 		"logfile",
285 		NSCD_CFG_DATA_STRING,
286 		NSCD_CFG_PFLAG_GLOBAL |
287 		NSCD_CFG_PFLAG_VLEN_DATA,
288 		logfile,
289 		nscd_cfg_global_log_t,
290 		log,
291 		nscd_cfg_global_data_t,
292 		&NSCD_CFG_LOGFILE_PCHECK,
293 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
294 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
295 
296 	NSCD_CFG_PARAM_DESC(
297 		"debug-level",
298 		NSCD_CFG_DATA_BITMAP,
299 		NSCD_CFG_PFLAG_GLOBAL,
300 		debug_level,
301 		nscd_cfg_global_log_t,
302 		log,
303 		nscd_cfg_global_data_t,
304 		&NSCD_CFG_LOGLEVEL_PCHECK,
305 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
306 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
307 
308 	NSCD_CFG_PARAM_DESC(
309 		"debug-components",
310 		NSCD_CFG_DATA_BITMAP,
311 		NSCD_CFG_PFLAG_GLOBAL,
312 		debug_comp,
313 		nscd_cfg_global_log_t,
314 		log,
315 		nscd_cfg_global_data_t,
316 		&NSCD_CFG_LOGCOMP_PCHECK,
317 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
318 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
319 
320 	NSCD_CFG_PGROUP_DESC(
321 		"param-group-global-frontend",
322 		NSCD_CFG_DATA_NONE,
323 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
324 		NSCD_CFG_PFLAG_GLOBAL,
325 		fe,
326 		nscd_cfg_global_data_t,
327 		NULL,
328 		_nscd_cfg_frontend_notify,
329 		_nscd_cfg_frontend_verify),
330 
331 	NSCD_CFG_PARAM_DESC(
332 		"common-worker-threads",
333 		NSCD_CFG_DATA_INTEGER,
334 		NSCD_CFG_PFLAG_SEND_BIT_SELECTED |
335 		NSCD_CFG_PFLAG_GLOBAL,
336 		common_worker_threads,
337 		nscd_cfg_global_frontend_t,
338 		fe,
339 		nscd_cfg_global_data_t,
340 		NULL,
341 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
342 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
343 
344 	NSCD_CFG_PARAM_DESC(
345 		"cache-hit-threads",
346 		NSCD_CFG_DATA_INTEGER,
347 		NSCD_CFG_PFLAG_SEND_BIT_SELECTED |
348 		NSCD_CFG_PFLAG_GLOBAL,
349 		cache_hit_threads,
350 		nscd_cfg_global_frontend_t,
351 		fe,
352 		nscd_cfg_global_data_t,
353 		NULL,
354 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
355 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
356 
357 	NSCD_CFG_PGROUP_DESC(
358 		"param-group-global-selfcred",
359 		NSCD_CFG_DATA_NONE,
360 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
361 		NSCD_CFG_PFLAG_GLOBAL,
362 		sc,
363 		nscd_cfg_global_data_t,
364 		NULL,
365 		_nscd_cfg_selfcred_notify,
366 		_nscd_cfg_selfcred_verify),
367 
368 	NSCD_CFG_PARAM_DESC(
369 		"enable-selfcred",
370 		NSCD_CFG_DATA_BOOLEAN,
371 		NSCD_CFG_PFLAG_GLOBAL,
372 		enable_selfcred,
373 		nscd_cfg_global_selfcred_t,
374 		sc,
375 		nscd_cfg_global_data_t,
376 		NULL,
377 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
378 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
379 
380 	NSCD_CFG_PARAM_DESC(
381 		"max-per-user-nscd",
382 		NSCD_CFG_DATA_INTEGER,
383 		NSCD_CFG_PFLAG_GLOBAL,
384 		max_per_user_nscd,
385 		nscd_cfg_global_selfcred_t,
386 		sc,
387 		nscd_cfg_global_data_t,
388 		NULL,
389 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
390 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
391 
392 	NSCD_CFG_PARAM_DESC(
393 		"per-user-nscd-ttl",
394 		NSCD_CFG_DATA_INTEGER,
395 		NSCD_CFG_PFLAG_GLOBAL,
396 		per_user_nscd_ttl,
397 		nscd_cfg_global_selfcred_t,
398 		sc,
399 		nscd_cfg_global_data_t,
400 		NULL,
401 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
402 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
403 
404 	NSCD_CFG_PGROUP_DESC(
405 		"param-group-global-switch",
406 		NSCD_CFG_DATA_NONE,
407 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
408 		NSCD_CFG_PFLAG_GLOBAL,
409 		sw,
410 		nscd_cfg_global_data_t,
411 		NULL,
412 		_nscd_cfg_switch_notify,
413 		_nscd_cfg_switch_verify),
414 
415 	NSCD_CFG_PARAM_DESC(
416 		"global-enable-lookup",
417 		NSCD_CFG_DATA_BOOLEAN,
418 		NSCD_CFG_PFLAG_GLOBAL,
419 		enable_lookup_g,
420 		nscd_cfg_global_switch_t,
421 		sw,
422 		nscd_cfg_global_data_t,
423 		NULL,
424 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
425 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
426 
427 	NSCD_CFG_PARAM_DESC(
428 		"global-enable-loopback-checking",
429 		NSCD_CFG_DATA_BOOLEAN,
430 		NSCD_CFG_PFLAG_GLOBAL,
431 		enable_loopback_checking_g,
432 		nscd_cfg_global_switch_t,
433 		sw,
434 		nscd_cfg_global_data_t,
435 		NULL,
436 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
437 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
438 
439 	NSCD_CFG_PARAM_DESC(
440 		"global-check-smf-state-interval",
441 		NSCD_CFG_DATA_INTEGER,
442 		NSCD_CFG_PFLAG_GLOBAL,
443 		check_smf_state_interval_g,
444 		nscd_cfg_global_switch_t,
445 		sw,
446 		nscd_cfg_global_data_t,
447 		NULL,
448 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
449 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
450 
451 	NSCD_CFG_PGROUP_DESC(
452 		"param-group-global-cache",
453 		NSCD_CFG_DATA_NONE,
454 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
455 		NSCD_CFG_PFLAG_INIT_SET_ALL_DB |
456 		NSCD_CFG_PFLAG_GLOBAL,
457 		cache,
458 		nscd_cfg_global_data_t,
459 		NULL,
460 		_nscd_cfg_cache_notify,
461 		_nscd_cfg_cache_verify),
462 
463 	NSCD_CFG_PARAM_DESC(
464 		"global-enable-cache",
465 		NSCD_CFG_DATA_BOOLEAN,
466 		NSCD_CFG_PFLAG_GLOBAL,
467 		enable,
468 		nscd_cfg_global_cache_t,
469 		cache,
470 		nscd_cfg_global_data_t,
471 		NULL,
472 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
473 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
474 
475 	/* non-global config param from this point on */
476 
477 	NSCD_CFG_PGROUP_DESC(
478 		"param-group-frontend",
479 		NSCD_CFG_DATA_NONE,
480 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP,
481 		fe,
482 		nscd_cfg_nsw_db_data_t,
483 		NULL,
484 		_nscd_cfg_frontend_notify,
485 		_nscd_cfg_frontend_verify),
486 
487 	NSCD_CFG_PARAM_DESC(
488 		"worker-thread-per-nsw-db",
489 		NSCD_CFG_DATA_INTEGER,
490 		NSCD_CFG_PFLAG_NONE,
491 		worker_thread_per_nsw_db,
492 		nscd_cfg_frontend_t,
493 		fe,
494 		nscd_cfg_nsw_db_data_t,
495 		NULL,
496 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
497 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
498 
499 	NSCD_CFG_PGROUP_DESC(
500 		"param-group-switch",
501 		NSCD_CFG_DATA_NONE,
502 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
503 		NSCD_CFG_PFLAG_NONE,
504 		sw,
505 		nscd_cfg_nsw_db_data_t,
506 		NULL,
507 		_nscd_cfg_switch_notify,
508 		_nscd_cfg_switch_verify),
509 
510 	NSCD_CFG_PARAM_DESC(
511 		"nsw-config-string",
512 		NSCD_CFG_DATA_STRING,
513 		NSCD_CFG_PFLAG_VLEN_DATA |
514 		NSCD_CFG_PFLAG_LINKED,
515 		nsw_config_string,
516 		nscd_cfg_switch_t,
517 		sw,
518 		nscd_cfg_nsw_db_data_t,
519 		&NSCD_CFG_NSWCFGSTR_PCHECK,
520 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
521 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
522 
523 	NSCD_CFG_PARAM_DESC(
524 		"nsw-config-database",
525 		NSCD_CFG_DATA_STRING,
526 		NSCD_CFG_PFLAG_VLEN_DATA |
527 		NSCD_CFG_PFLAG_HIDDEN,
528 		nsw_config_db,
529 		nscd_cfg_switch_t,
530 		sw,
531 		nscd_cfg_nsw_db_data_t,
532 		&NSCD_CFG_NSWCFGSTR_PCHECK,
533 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
534 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
535 
536 	NSCD_CFG_PARAM_DESC(
537 		"enable-lookup",
538 		NSCD_CFG_DATA_BOOLEAN,
539 		NSCD_CFG_PFLAG_NONE,
540 		enable_lookup,
541 		nscd_cfg_switch_t,
542 		sw,
543 		nscd_cfg_nsw_db_data_t,
544 		NULL,
545 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
546 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
547 
548 	NSCD_CFG_PARAM_DESC(
549 		"enable-loopback-checking",
550 		NSCD_CFG_DATA_BOOLEAN,
551 		NSCD_CFG_PFLAG_NONE,
552 		enable_loopback_checking,
553 		nscd_cfg_switch_t,
554 		sw,
555 		nscd_cfg_nsw_db_data_t,
556 		NULL,
557 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
558 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
559 
560 	NSCD_CFG_PARAM_DESC(
561 		"max-nsw-state-per-db",
562 		NSCD_CFG_DATA_INTEGER,
563 		NSCD_CFG_PFLAG_NONE,
564 		max_nsw_state_per_db,
565 		nscd_cfg_switch_t,
566 		sw,
567 		nscd_cfg_nsw_db_data_t,
568 		NULL,
569 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
570 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
571 
572 	NSCD_CFG_PARAM_DESC(
573 		"max-nsw-state-per-thread",
574 		NSCD_CFG_DATA_INTEGER,
575 		NSCD_CFG_PFLAG_NONE,
576 		max_nsw_state_per_thread,
577 		nscd_cfg_switch_t,
578 		sw,
579 		nscd_cfg_nsw_db_data_t,
580 		NULL,
581 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
582 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
583 
584 	NSCD_CFG_PARAM_DESC(
585 		"max-getent-ctx-per-db",
586 		NSCD_CFG_DATA_INTEGER,
587 		NSCD_CFG_PFLAG_NONE,
588 		max_getent_ctx_per_db,
589 		nscd_cfg_switch_t,
590 		sw,
591 		nscd_cfg_nsw_db_data_t,
592 		NULL,
593 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
594 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
595 
596 	NSCD_CFG_PGROUP_DESC(
597 		"param-group-cache",
598 		NSCD_CFG_DATA_NONE,
599 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP,
600 		cache,
601 		nscd_cfg_nsw_db_data_t,
602 		NULL,
603 		_nscd_cfg_cache_notify,
604 		_nscd_cfg_cache_verify),
605 
606 	NSCD_CFG_PARAM_DESC(
607 		"enable-cache",
608 		NSCD_CFG_DATA_BOOLEAN,
609 		NSCD_CFG_PFLAG_NONE,
610 		enable,
611 		nscd_cfg_cache_t,
612 		cache,
613 		nscd_cfg_nsw_db_data_t,
614 		NULL,
615 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
616 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
617 
618 	NSCD_CFG_PARAM_DESC(
619 		"enable-per-user-cache",
620 		NSCD_CFG_DATA_BOOLEAN,
621 		NSCD_CFG_PFLAG_NONE,
622 		per_user,
623 		nscd_cfg_cache_t,
624 		cache,
625 		nscd_cfg_nsw_db_data_t,
626 		NULL,
627 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
628 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
629 
630 	NSCD_CFG_PARAM_DESC(
631 		"avoid-nameservice",
632 		NSCD_CFG_DATA_BOOLEAN,
633 		NSCD_CFG_PFLAG_NONE,
634 		avoid_ns,
635 		nscd_cfg_cache_t,
636 		cache,
637 		nscd_cfg_nsw_db_data_t,
638 		NULL,
639 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
640 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
641 
642 	NSCD_CFG_PARAM_DESC(
643 		"check-files",
644 		NSCD_CFG_DATA_BOOLEAN,
645 		NSCD_CFG_PFLAG_NONE,
646 		check_files,
647 		nscd_cfg_cache_t,
648 		cache,
649 		nscd_cfg_nsw_db_data_t,
650 		NULL,
651 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
652 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
653 
654 	NSCD_CFG_PARAM_DESC(
655 		"check-file-interval",
656 		NSCD_CFG_DATA_INTEGER,
657 		NSCD_CFG_PFLAG_NONE,
658 		check_interval,
659 		nscd_cfg_cache_t,
660 		cache,
661 		nscd_cfg_nsw_db_data_t,
662 		NULL,
663 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
664 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
665 
666 	NSCD_CFG_PARAM_DESC(
667 		"positive-time-to-live",
668 		NSCD_CFG_DATA_INTEGER,
669 		NSCD_CFG_PFLAG_NONE,
670 		pos_ttl,
671 		nscd_cfg_cache_t,
672 		cache,
673 		nscd_cfg_nsw_db_data_t,
674 		NULL,
675 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
676 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
677 
678 	NSCD_CFG_PARAM_DESC(
679 		"negative-time-to-live",
680 		NSCD_CFG_DATA_INTEGER,
681 		NSCD_CFG_PFLAG_NONE,
682 		neg_ttl,
683 		nscd_cfg_cache_t,
684 		cache,
685 		nscd_cfg_nsw_db_data_t,
686 		NULL,
687 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
688 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
689 
690 	NSCD_CFG_PARAM_DESC(
691 		"keep-hot-count",
692 		NSCD_CFG_DATA_INTEGER,
693 		NSCD_CFG_PFLAG_NONE,
694 		keephot,
695 		nscd_cfg_cache_t,
696 		cache,
697 		nscd_cfg_nsw_db_data_t,
698 		NULL,
699 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
700 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
701 
702 	NSCD_CFG_PARAM_DESC(
703 		"hint-size",
704 		NSCD_CFG_DATA_INTEGER,
705 		NSCD_CFG_PFLAG_NONE,
706 		hint_size,
707 		nscd_cfg_cache_t,
708 		cache,
709 		nscd_cfg_nsw_db_data_t,
710 		NULL,
711 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
712 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
713 
714 	NSCD_CFG_PARAM_DESC(
715 		"maximum-entries-allowed",
716 		NSCD_CFG_DATA_INTEGER,
717 		NSCD_CFG_PFLAG_NONE,
718 		maxentries,
719 		nscd_cfg_cache_t,
720 		cache,
721 		nscd_cfg_nsw_db_data_t,
722 		NULL,
723 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
724 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
725 
726 	NSCD_CFG_PARAM_DESC(
727 		"suggested-size",
728 		NSCD_CFG_DATA_INTEGER,
729 		NSCD_CFG_PFLAG_OBSOLETE,
730 		suggestedsize,
731 		nscd_cfg_cache_t,
732 		cache,
733 		nscd_cfg_nsw_db_data_t,
734 		NULL,
735 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
736 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
737 
738 	NSCD_CFG_PARAM_DESC(
739 		"old-data-ok",
740 		NSCD_CFG_DATA_BOOLEAN,
741 		NSCD_CFG_PFLAG_OBSOLETE,
742 		old_data_ok,
743 		nscd_cfg_cache_t,
744 		cache,
745 		nscd_cfg_nsw_db_data_t,
746 		NULL,
747 		NSCD_CFG_FUNC_NOTIFY_AS_GROUP,
748 		NSCD_CFG_FUNC_VERIFY_AS_GROUP),
749 
750 	NSCD_CFG_PGROUP_DESC_NULL
751 };
752 
753 /*
754  * defaults for the global configuration
755  */
756 static nscd_cfg_global_data_t nscd_cfg_global_default = {
757 
758 	/*
759 	 * nscd_cfg_global_log_t
760 	 */
761 	{
762 
763 	NSCD_CFG_GROUP_INFO_GLOBAL_LOG,
764 	NULL,
765 	NSCD_LOG_LEVEL_NONE,	/* debug_level */
766 	NSCD_LOG_CACHE,		/* debug_comp */
767 
768 	},
769 
770 	/*
771 	 * nscd_cfg_global_frontend_t
772 	 */
773 	{
774 
775 	NSCD_CFG_GROUP_INFO_GLOBAL_FRONTEND,
776 	100,			/* common_worker_threads */
777 	100,			/* cache_hit_threads */
778 
779 	},
780 
781 	/*
782 	 * nscd_cfg_global_selfcred_t
783 	 */
784 	{
785 
786 	NSCD_CFG_GROUP_INFO_GLOBAL_SELFCRED,
787 	nscd_true,		/* enable_selfcred */
788 	1000,			/* max_per_user_nscd */
789 	120,			/* per_user_nscd_ttl: 120 seconds */
790 
791 	},
792 
793 	/*
794 	 * nscd_cfg_global_switch_t
795 	 */
796 	{
797 
798 	NSCD_CFG_GROUP_INFO_GLOBAL_SWITCH,
799 	nscd_true,		/* enable_lookup_g */
800 	nscd_false,		/* enable_loopback_checking_g */
801 	120,			/* check_smf_state_interval_g */
802 
803 	},
804 
805 	/*
806 	 * nscd_cfg_global_cache_t
807 	 */
808 	NSCD_CFG_GLOBAL_CACHE_DEFAULTS
809 };
810 
811 /*
812  * defaults for the per switch database configuration
813  */
814 static nscd_cfg_nsw_db_data_t nscd_cfg_nsw_db_data_default = {
815 
816 	/*
817 	 * nscd_cfg_frontend_t
818 	 */
819 	{
820 
821 	NSCD_CFG_GROUP_INFO_FRONTEND,
822 	50, 			/* worker_thread_per_nsw_db */
823 
824 	},
825 
826 	/*
827 	 * nscd_cfg_switch_t
828 	 */
829 	{
830 
831 	NSCD_CFG_GROUP_INFO_SWITCH,
832 	"nis files",		/* nsw_config_string */
833 	NULL,			/* nsw_config_db */
834 	nscd_true,		/* enable_lookup */
835 	nscd_false,		/* enable_loopback_checking */
836 	288,			/* max_nsw_state_per_db */
837 	32,			/* max_nsw_state_per_thread */
838 	256,			/* max_getent_ctx_per_db */
839 
840 	},
841 
842 	/*
843 	 * nscd_cfg_cache_t
844 	 */
845 	NSCD_CFG_CACHE_DEFAULTS
846 };
847 
848 /*
849  * macros for defining the database specific defaults
850  */
851 #define	NSCD_CFG_DB_DEFAULT_PARAM(db, gf, pf, gt, defaddr, deflen) \
852 	{ \
853 		db, offsetof(nscd_cfg_nsw_db_data_t, gf), \
854 		offsetof(gt, pf), defaddr, deflen \
855 	}
856 
857 #define	NSCD_CFG_DB_DEFAULT_GROUP(db, gf, defaddr, deflen) \
858 	{ \
859 		db, offsetof(nscd_cfg_nsw_db_data_t, gf), \
860 		0, defaddr, deflen \
861 	}
862 
863 #define	NSCD_CFG_DB_DEFAULT_NULL \
864 	{ \
865 		NULL, 0, 0, NULL, 0 \
866 	}
867 
868 /*
869  * shadow, user_attr, and audit_user use the same switch policy
870  * as that of passwd. exec_attr use that of prof_attr.
871  */
872 static char *nscd_cfg_shadow_cfg_db	= NSS_DBNAM_PASSWD;
873 static char *nscd_cfg_userattr_cfg_db	= NSS_DBNAM_PASSWD;
874 static char *nscd_cfg_auuser_cfg_db	= NSS_DBNAM_PASSWD;
875 static char *nscd_cfg_execattr_cfg_db	= NSS_DBNAM_PROFATTR;
876 
877 /*
878  * default switch policy for pseudo-databases passwd_compat and
879  * and group_compa is "nis"
880  */
881 static char *nscd_cfg_def_passwd_compat	= NSS_DEFCONF_PASSWD_COMPAT;
882 static char *nscd_cfg_def_group_compat	= NSS_DEFCONF_GROUP_COMPAT;
883 
884 static nscd_cfg_nsw_spc_default_t nscd_cfg_passwd_cfg_link =
885 	NSCD_CFG_DB_DEFAULT_PARAM(
886 		NSS_DBNAM_PASSWD,
887 		sw,
888 		nsw_config_string,
889 		nscd_cfg_switch_t,
890 		NULL,
891 		NSCD_SIZEOF(nscd_cfg_switch_t, nsw_config_string));
892 
893 static nscd_cfg_nsw_spc_default_t nscd_cfg_profattr_cfg_link =
894 	NSCD_CFG_DB_DEFAULT_PARAM(
895 		NSS_DBNAM_PROFATTR,
896 		sw,
897 		nsw_config_string,
898 		nscd_cfg_switch_t,
899 		NULL,
900 		NSCD_SIZEOF(nscd_cfg_switch_t, nsw_config_string));
901 
902 
903 /*
904  * switch database specific defaults
905  */
906 nscd_cfg_nsw_spc_default_t	_nscd_cfg_nsw_spc_default[] = {
907 
908 	NSCD_CFG_DB_DEFAULT_PARAM(
909 	NSS_DBNAM_SHADOW,
910 		sw,
911 		nsw_config_db,
912 		nscd_cfg_switch_t,
913 		&nscd_cfg_shadow_cfg_db,
914 		sizeof (nscd_cfg_shadow_cfg_db)),
915 
916 	NSCD_CFG_DB_DEFAULT_PARAM(
917 		NSS_DBNAM_USERATTR,
918 		sw,
919 		nsw_config_db,
920 		nscd_cfg_switch_t,
921 		&nscd_cfg_userattr_cfg_db,
922 		sizeof (nscd_cfg_userattr_cfg_db)),
923 
924 	NSCD_CFG_DB_DEFAULT_PARAM(
925 		NSS_DBNAM_AUDITUSER,
926 		sw,
927 		nsw_config_db,
928 		nscd_cfg_switch_t,
929 		&nscd_cfg_auuser_cfg_db,
930 		sizeof (nscd_cfg_auuser_cfg_db)),
931 
932 	NSCD_CFG_DB_DEFAULT_PARAM(
933 		NSS_DBNAM_EXECATTR,
934 		sw,
935 		nsw_config_db,
936 		nscd_cfg_switch_t,
937 		&nscd_cfg_execattr_cfg_db,
938 		sizeof (nscd_cfg_execattr_cfg_db)),
939 
940 	NSCD_CFG_DB_DEFAULT_PARAM(
941 		NSS_DBNAM_PASSWD_COMPAT,
942 		sw,
943 		nsw_config_string,
944 		nscd_cfg_switch_t,
945 		&nscd_cfg_def_passwd_compat,
946 		sizeof (nscd_cfg_def_passwd_compat)),
947 
948 	NSCD_CFG_DB_DEFAULT_PARAM(
949 		NSS_DBNAM_GROUP_COMPAT,
950 		sw,
951 		nsw_config_string,
952 		nscd_cfg_switch_t,
953 		&nscd_cfg_def_group_compat,
954 		sizeof (nscd_cfg_def_group_compat)),
955 
956 	NSCD_CFG_DB_DEFAULT_NULL
957 };
958 
959 /*
960  * switch database specific defaults that are linked to
961  * those of other databases
962  */
963 nscd_cfg_nsw_spc_default_t	_nscd_cfg_nsw_link_default[] = {
964 
965 	NSCD_CFG_DB_DEFAULT_PARAM(
966 		NSS_DBNAM_SHADOW,
967 		sw,
968 		nsw_config_string,
969 		nscd_cfg_switch_t,
970 		&nscd_cfg_passwd_cfg_link,
971 		0),
972 
973 	NSCD_CFG_DB_DEFAULT_PARAM(
974 		NSS_DBNAM_USERATTR,
975 		sw,
976 		nsw_config_string,
977 		nscd_cfg_switch_t,
978 		&nscd_cfg_passwd_cfg_link,
979 		0),
980 
981 	NSCD_CFG_DB_DEFAULT_PARAM(
982 		NSS_DBNAM_AUDITUSER,
983 		sw,
984 		nsw_config_string,
985 		nscd_cfg_switch_t,
986 		&nscd_cfg_passwd_cfg_link,
987 		0),
988 
989 	NSCD_CFG_DB_DEFAULT_PARAM(
990 		NSS_DBNAM_EXECATTR,
991 		sw,
992 		nsw_config_string,
993 		nscd_cfg_switch_t,
994 		&nscd_cfg_profattr_cfg_link,
995 		0),
996 
997 	NSCD_CFG_DB_DEFAULT_NULL
998 };
999 
1000 /*
1001  * macros for defining the static stats table
1002  */
1003 #define	NSCD_CFG_SGROUP_DESC(sn, type, sflag, gi, \
1004 		gf, g_in_t, gsfunc_name) \
1005 	{ \
1006 		{-1, sn}, type, NSCD_CFG_SFLAG_GROUP | sflag, gi, \
1007 		0, 0, 0,\
1008 		NSCD_SIZEOF(g_in_t, gf), offsetof(g_in_t, gf), -1, \
1009 		gsfunc_name \
1010 	}
1011 
1012 #define	NSCD_CFG_STAT_DESC(sn, type, sflag, sf, s_in_t, \
1013 		gf, g_in_t, gsfunc_name) \
1014 	{ \
1015 		{-1, sn}, type, sflag, NSCD_CFG_GROUP_INFO_NULL, \
1016 		NSCD_SIZEOF(s_in_t, sf), offsetof(s_in_t, sf), -1, \
1017 		NSCD_SIZEOF(g_in_t, gf), offsetof(g_in_t, gf), -1, \
1018 		gsfunc_name \
1019 	}
1020 
1021 #define	NSCD_CFG_SGROUP_DESC_NULL \
1022 	{ \
1023 		{-1, NULL}, -1, NSCD_CFG_SFLAG_GROUP, NULL, \
1024 		0, 0, 0, \
1025 		0, 0, 0, \
1026 		NULL \
1027 	}
1028 
1029 /*
1030  * the static statistics description table
1031  */
1032 static	nscd_cfg_stat_desc_t	_nscd_cfg_stat_desc[] = {
1033 
1034 	NSCD_CFG_SGROUP_DESC(
1035 		"stat-group-global-log",
1036 		NSCD_CFG_DATA_NONE,
1037 		NSCD_CFG_SFLAG_GLOBAL,
1038 		NSCD_CFG_STAT_GROUP_INFO_GLOBAL_LOG,
1039 		log,
1040 		nscd_cfg_stat_global_data_t,
1041 		_nscd_cfg_log_get_stat),
1042 
1043 	NSCD_CFG_STAT_DESC(
1044 		"entries-logged",
1045 		NSCD_CFG_DATA_INTEGER,
1046 		NSCD_CFG_SFLAG_GLOBAL,
1047 		entries_logged,
1048 		nscd_cfg_stat_global_log_t,
1049 		log,
1050 		nscd_cfg_stat_global_data_t,
1051 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1052 
1053 	NSCD_CFG_SGROUP_DESC(
1054 		"stat-group-global-switch",
1055 		NSCD_CFG_DATA_NONE,
1056 		NSCD_CFG_SFLAG_GLOBAL,
1057 		NSCD_CFG_STAT_GROUP_INFO_GLOBAL_SWITCH,
1058 		sw,
1059 		nscd_cfg_stat_global_data_t,
1060 		_nscd_cfg_switch_get_stat),
1061 
1062 	NSCD_CFG_STAT_DESC(
1063 		"global-lookup-request-received",
1064 		NSCD_CFG_DATA_INTEGER,
1065 		NSCD_CFG_SFLAG_GLOBAL,
1066 		lookup_request_received_g,
1067 		nscd_cfg_stat_global_switch_t,
1068 		sw,
1069 		nscd_cfg_stat_global_data_t,
1070 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1071 
1072 	NSCD_CFG_STAT_DESC(
1073 		"global-lookup-request-queued",
1074 		NSCD_CFG_DATA_INTEGER,
1075 		NSCD_CFG_SFLAG_GLOBAL,
1076 		lookup_request_queued_g,
1077 		nscd_cfg_stat_global_switch_t,
1078 		sw,
1079 		nscd_cfg_stat_global_data_t,
1080 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1081 
1082 	NSCD_CFG_STAT_DESC(
1083 		"global-lookup-request-in-progress",
1084 		NSCD_CFG_DATA_INTEGER,
1085 		NSCD_CFG_SFLAG_GLOBAL,
1086 		lookup_request_in_progress_g,
1087 		nscd_cfg_stat_global_switch_t,
1088 		sw,
1089 		nscd_cfg_stat_global_data_t,
1090 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1091 
1092 	NSCD_CFG_STAT_DESC(
1093 		"global-lookup-request-succeeded",
1094 		NSCD_CFG_DATA_INTEGER,
1095 		NSCD_CFG_SFLAG_GLOBAL,
1096 		lookup_request_succeeded_g,
1097 		nscd_cfg_stat_global_switch_t,
1098 		sw,
1099 		nscd_cfg_stat_global_data_t,
1100 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1101 
1102 	NSCD_CFG_STAT_DESC(
1103 		"global-lookup-request-failed",
1104 		NSCD_CFG_DATA_INTEGER,
1105 		NSCD_CFG_SFLAG_GLOBAL,
1106 		lookup_request_failed_g,
1107 		nscd_cfg_stat_global_switch_t,
1108 		sw,
1109 		nscd_cfg_stat_global_data_t,
1110 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1111 
1112 	NSCD_CFG_STAT_DESC(
1113 		"global-loopback-nsw-db-skipped",
1114 		NSCD_CFG_DATA_INTEGER,
1115 		NSCD_CFG_SFLAG_GLOBAL,
1116 		loopback_nsw_db_skipped_g,
1117 		nscd_cfg_stat_global_switch_t,
1118 		sw,
1119 		nscd_cfg_stat_global_data_t,
1120 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1121 
1122 	NSCD_CFG_SGROUP_DESC(
1123 		"stat-group-global-cache",
1124 		NSCD_CFG_DATA_NONE,
1125 		NSCD_CFG_SFLAG_GLOBAL,
1126 		NSCD_CFG_STAT_GROUP_INFO_CACHE,
1127 		cache,
1128 		nscd_cfg_stat_global_data_t,
1129 		_nscd_cfg_cache_get_stat),
1130 
1131 	NSCD_CFG_STAT_DESC(
1132 		"global-cache-hits-on-positive",
1133 		NSCD_CFG_DATA_INTEGER,
1134 		NSCD_CFG_SFLAG_GLOBAL,
1135 		pos_hits,
1136 		nscd_cfg_stat_cache_t,
1137 		cache,
1138 		nscd_cfg_stat_global_data_t,
1139 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1140 
1141 	NSCD_CFG_STAT_DESC(
1142 		"global-cache-hits-on-negative",
1143 		NSCD_CFG_DATA_INTEGER,
1144 		NSCD_CFG_SFLAG_GLOBAL,
1145 		neg_hits,
1146 		nscd_cfg_stat_cache_t,
1147 		cache,
1148 		nscd_cfg_stat_global_data_t,
1149 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1150 
1151 	NSCD_CFG_STAT_DESC(
1152 		"global-cache-misses-on-positive",
1153 		NSCD_CFG_DATA_INTEGER,
1154 		NSCD_CFG_SFLAG_GLOBAL,
1155 		pos_misses,
1156 		nscd_cfg_stat_cache_t,
1157 		cache,
1158 		nscd_cfg_stat_global_data_t,
1159 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1160 
1161 	NSCD_CFG_STAT_DESC(
1162 		"global-cache-misses-on-negative",
1163 		NSCD_CFG_DATA_INTEGER,
1164 		NSCD_CFG_SFLAG_GLOBAL,
1165 		neg_misses,
1166 		nscd_cfg_stat_cache_t,
1167 		cache,
1168 		nscd_cfg_stat_global_data_t,
1169 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1170 
1171 	NSCD_CFG_STAT_DESC(
1172 		"global-cache-queries-queued",
1173 		NSCD_CFG_DATA_INTEGER,
1174 		NSCD_CFG_SFLAG_GLOBAL,
1175 		wait_count,
1176 		nscd_cfg_stat_cache_t,
1177 		cache,
1178 		nscd_cfg_stat_global_data_t,
1179 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1180 
1181 	NSCD_CFG_STAT_DESC(
1182 		"global-total-cache-entries",
1183 		NSCD_CFG_DATA_INTEGER,
1184 		NSCD_CFG_SFLAG_GLOBAL,
1185 		entries,
1186 		nscd_cfg_stat_cache_t,
1187 		cache,
1188 		nscd_cfg_stat_global_data_t,
1189 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1190 
1191 	NSCD_CFG_STAT_DESC(
1192 		"global-complete-cache-invalidations",
1193 		NSCD_CFG_DATA_INTEGER,
1194 		NSCD_CFG_SFLAG_GLOBAL,
1195 		invalidate_count,
1196 		nscd_cfg_stat_cache_t,
1197 		cache,
1198 		nscd_cfg_stat_global_data_t,
1199 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1200 
1201 	NSCD_CFG_STAT_DESC(
1202 		"global-cache-queries-dropped",
1203 		NSCD_CFG_DATA_INTEGER,
1204 		NSCD_CFG_SFLAG_GLOBAL,
1205 		drop_count,
1206 		nscd_cfg_stat_cache_t,
1207 		cache,
1208 		nscd_cfg_stat_global_data_t,
1209 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1210 
1211 	NSCD_CFG_STAT_DESC(
1212 		"global-cache-hit-rate",
1213 		NSCD_CFG_DATA_PERCENT,
1214 		NSCD_CFG_SFLAG_GLOBAL,
1215 		hitrate,
1216 		nscd_cfg_stat_cache_t,
1217 		cache,
1218 		nscd_cfg_stat_global_data_t,
1219 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1220 
1221 	/* non-global stat from this point on */
1222 
1223 	NSCD_CFG_SGROUP_DESC(
1224 		"stat-group-switch",
1225 		NSCD_CFG_DATA_NONE,
1226 		NSCD_CFG_SFLAG_GROUP,
1227 		NSCD_CFG_STAT_GROUP_INFO_SWITCH,
1228 		cache,
1229 		nscd_cfg_stat_nsw_db_data_t,
1230 		_nscd_cfg_switch_get_stat),
1231 
1232 	NSCD_CFG_STAT_DESC(
1233 		"lookup-request-received",
1234 		NSCD_CFG_DATA_INTEGER,
1235 		NSCD_CFG_SFLAG_NONE,
1236 		lookup_request_received,
1237 		nscd_cfg_stat_switch_t,
1238 		sw,
1239 		nscd_cfg_stat_nsw_db_data_t,
1240 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1241 
1242 	NSCD_CFG_STAT_DESC(
1243 		"lookup-request-queued",
1244 		NSCD_CFG_DATA_INTEGER,
1245 		NSCD_CFG_SFLAG_NONE,
1246 		lookup_request_queued,
1247 		nscd_cfg_stat_switch_t,
1248 		sw,
1249 		nscd_cfg_stat_nsw_db_data_t,
1250 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1251 
1252 	NSCD_CFG_STAT_DESC(
1253 		"lookup-request-in-progress",
1254 		NSCD_CFG_DATA_INTEGER,
1255 		NSCD_CFG_SFLAG_NONE,
1256 		lookup_request_in_progress,
1257 		nscd_cfg_stat_switch_t,
1258 		sw,
1259 		nscd_cfg_stat_nsw_db_data_t,
1260 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1261 
1262 	NSCD_CFG_STAT_DESC(
1263 		"lookup-request-succeeded",
1264 		NSCD_CFG_DATA_INTEGER,
1265 		NSCD_CFG_SFLAG_NONE,
1266 		lookup_request_succeeded,
1267 		nscd_cfg_stat_switch_t,
1268 		sw,
1269 		nscd_cfg_stat_nsw_db_data_t,
1270 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1271 
1272 	NSCD_CFG_STAT_DESC(
1273 		"lookup-request-failed",
1274 		NSCD_CFG_DATA_INTEGER,
1275 		NSCD_CFG_SFLAG_NONE,
1276 		lookup_request_failed,
1277 		nscd_cfg_stat_switch_t,
1278 		sw,
1279 		nscd_cfg_stat_nsw_db_data_t,
1280 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1281 
1282 	NSCD_CFG_STAT_DESC(
1283 		"loopback-nsw-db-skipped",
1284 		NSCD_CFG_DATA_INTEGER,
1285 		NSCD_CFG_SFLAG_NONE,
1286 		loopback_nsw_db_skipped,
1287 		nscd_cfg_stat_switch_t,
1288 		sw,
1289 		nscd_cfg_stat_nsw_db_data_t,
1290 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1291 
1292 	NSCD_CFG_SGROUP_DESC(
1293 		"stat-group-cache",
1294 		NSCD_CFG_DATA_NONE,
1295 		NSCD_CFG_SFLAG_GROUP,
1296 		NSCD_CFG_STAT_GROUP_INFO_CACHE,
1297 		cache,
1298 		nscd_cfg_stat_nsw_db_data_t,
1299 		_nscd_cfg_cache_get_stat),
1300 
1301 	NSCD_CFG_STAT_DESC(
1302 		"cache-hits-on-positive",
1303 		NSCD_CFG_DATA_INTEGER,
1304 		NSCD_CFG_SFLAG_NONE,
1305 		pos_hits,
1306 		nscd_cfg_stat_cache_t,
1307 		cache,
1308 		nscd_cfg_stat_nsw_db_data_t,
1309 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1310 
1311 	NSCD_CFG_STAT_DESC(
1312 		"cache-hits-on-negative",
1313 		NSCD_CFG_DATA_INTEGER,
1314 		NSCD_CFG_SFLAG_NONE,
1315 		neg_hits,
1316 		nscd_cfg_stat_cache_t,
1317 		cache,
1318 		nscd_cfg_stat_nsw_db_data_t,
1319 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1320 
1321 	NSCD_CFG_STAT_DESC(
1322 		"cache-misses-on-positive",
1323 		NSCD_CFG_DATA_INTEGER,
1324 		NSCD_CFG_SFLAG_NONE,
1325 		pos_misses,
1326 		nscd_cfg_stat_cache_t,
1327 		cache,
1328 		nscd_cfg_stat_nsw_db_data_t,
1329 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1330 
1331 	NSCD_CFG_STAT_DESC(
1332 		"cache-misses-on-negative",
1333 		NSCD_CFG_DATA_INTEGER,
1334 		NSCD_CFG_SFLAG_NONE,
1335 		neg_misses,
1336 		nscd_cfg_stat_cache_t,
1337 		cache,
1338 		nscd_cfg_stat_nsw_db_data_t,
1339 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1340 
1341 	NSCD_CFG_STAT_DESC(
1342 		"cache-queries-queued",
1343 		NSCD_CFG_DATA_INTEGER,
1344 		NSCD_CFG_SFLAG_NONE,
1345 		wait_count,
1346 		nscd_cfg_stat_cache_t,
1347 		cache,
1348 		nscd_cfg_stat_nsw_db_data_t,
1349 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1350 
1351 	NSCD_CFG_STAT_DESC(
1352 		"total-cache-entries",
1353 		NSCD_CFG_DATA_INTEGER,
1354 		NSCD_CFG_SFLAG_NONE,
1355 		entries,
1356 		nscd_cfg_stat_cache_t,
1357 		cache,
1358 		nscd_cfg_stat_nsw_db_data_t,
1359 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1360 
1361 	NSCD_CFG_STAT_DESC(
1362 		"complete-cache-invalidations",
1363 		NSCD_CFG_DATA_INTEGER,
1364 		NSCD_CFG_SFLAG_NONE,
1365 		invalidate_count,
1366 		nscd_cfg_stat_cache_t,
1367 		cache,
1368 		nscd_cfg_stat_nsw_db_data_t,
1369 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1370 
1371 	NSCD_CFG_STAT_DESC(
1372 		"cache-hit-rate",
1373 		NSCD_CFG_DATA_PERCENT,
1374 		NSCD_CFG_SFLAG_NONE,
1375 		hitrate,
1376 		nscd_cfg_stat_cache_t,
1377 		cache,
1378 		nscd_cfg_stat_nsw_db_data_t,
1379 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1380 
1381 	NSCD_CFG_STAT_DESC(
1382 		"cache-queries-dropped",
1383 		NSCD_CFG_DATA_PERCENT,
1384 		NSCD_CFG_SFLAG_NONE,
1385 		drop_count,
1386 		nscd_cfg_stat_cache_t,
1387 		cache,
1388 		nscd_cfg_stat_nsw_db_data_t,
1389 		NSCD_CFG_FUNC_GET_STAT_AS_GROUP),
1390 
1391 
1392 	NSCD_CFG_SGROUP_DESC_NULL
1393 };
1394 
1395 /* number of entries in the static tables */
1396 
1397 int _nscd_cfg_num_nsw_src =
1398 	(sizeof (_nscd_cfg_nsw_src) /
1399 		sizeof (_nscd_cfg_nsw_src[0]) - 1);
1400 
1401 int _nscd_cfg_num_smf_services =
1402 	(sizeof (_nscd_cfg_smf_services) /
1403 		sizeof (_nscd_cfg_smf_services[0]) - 1);
1404 
1405 /* number of supported nsw databases (including pseudo ones) */
1406 int _nscd_cfg_num_nsw_db_all =
1407 	(sizeof (_nscd_cfg_nsw_db) /
1408 		sizeof (_nscd_cfg_nsw_db[0]) - 1);
1409 
1410 /* number of supported nsw databases (not including pseudo ones) */
1411 int _nscd_cfg_num_nsw_db =
1412 	(sizeof (_nscd_cfg_nsw_db) /
1413 		sizeof (_nscd_cfg_nsw_db[0]) - 1) -
1414 		NSS_DBNAM_COMPAT_NUM_DB;
1415 
1416 static int _nscd_cfg_num_param =
1417 	(sizeof (_nscd_cfg_param_desc) /
1418 		sizeof (_nscd_cfg_param_desc[0]) - 1);
1419 
1420 static int _nscd_cfg_num_stat =
1421 	(sizeof (_nscd_cfg_stat_desc) /
1422 		sizeof (_nscd_cfg_stat_desc[0]) - 1);
1423 
1424 int _nscd_cfg_num_nsw_default =
1425 	(sizeof (_nscd_cfg_nsw_spc_default) /
1426 		sizeof (_nscd_cfg_nsw_spc_default[0]) - 1);
1427 
1428 int _nscd_cfg_num_link_default =
1429 	(sizeof (_nscd_cfg_nsw_link_default) /
1430 		sizeof (_nscd_cfg_nsw_link_default[0]) - 1);
1431 
1432 #ifdef	__cplusplus
1433 }
1434 #endif
1435 
1436 #endif	/* _NSCD_CFGDEF_H */
1437