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