xref: /titanic_51/usr/src/cmd/nscd/nscd_cfgdef.h (revision ccbf80fa3b6bf6b986dca9037e5ad9d6c9f9fa65)
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 2006 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/nisplus: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, NULL, NULL \
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, NULL, NULL \
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, NULL, NULL \
241 	}
242 #define	NSCD_CFG_FUNC_NAME_AS_GROUP	"(as_group)"
243 
244 /*
245  * the static config parameter description table
246  */
247 static	nscd_cfg_param_desc_t	_nscd_cfg_param_desc[] = {
248 
249 	NSCD_CFG_PGROUP_DESC(
250 		"param-group-global-log",
251 		NSCD_CFG_DATA_NONE,
252 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
253 		NSCD_CFG_PFLAG_GLOBAL,
254 		log,
255 		nscd_cfg_global_data_t,
256 		NULL,
257 		"_nscd_cfg_log_notify",
258 		"_nscd_cfg_log_verify"),
259 
260 	NSCD_CFG_PARAM_DESC(
261 		"logfile",
262 		NSCD_CFG_DATA_STRING,
263 		NSCD_CFG_PFLAG_GLOBAL |
264 		NSCD_CFG_PFLAG_VLEN_DATA,
265 		logfile,
266 		nscd_cfg_global_log_t,
267 		log,
268 		nscd_cfg_global_data_t,
269 		&NSCD_CFG_LOGFILE_PCHECK,
270 		NSCD_CFG_FUNC_NAME_AS_GROUP,
271 		NSCD_CFG_FUNC_NAME_AS_GROUP),
272 
273 	NSCD_CFG_PARAM_DESC(
274 		"debug-level",
275 		NSCD_CFG_DATA_BITMAP,
276 		NSCD_CFG_PFLAG_GLOBAL,
277 		debug_level,
278 		nscd_cfg_global_log_t,
279 		log,
280 		nscd_cfg_global_data_t,
281 		&NSCD_CFG_LOGLEVEL_PCHECK,
282 		NSCD_CFG_FUNC_NAME_AS_GROUP,
283 		NSCD_CFG_FUNC_NAME_AS_GROUP),
284 
285 	NSCD_CFG_PARAM_DESC(
286 		"debug-components",
287 		NSCD_CFG_DATA_BITMAP,
288 		NSCD_CFG_PFLAG_GLOBAL,
289 		debug_comp,
290 		nscd_cfg_global_log_t,
291 		log,
292 		nscd_cfg_global_data_t,
293 		&NSCD_CFG_LOGCOMP_PCHECK,
294 		NSCD_CFG_FUNC_NAME_AS_GROUP,
295 		NSCD_CFG_FUNC_NAME_AS_GROUP),
296 
297 	NSCD_CFG_PGROUP_DESC(
298 		"param-group-global-frontend",
299 		NSCD_CFG_DATA_NONE,
300 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
301 		NSCD_CFG_PFLAG_GLOBAL,
302 		fe,
303 		nscd_cfg_global_data_t,
304 		NULL,
305 		"_nscd_cfg_frontend_notify",
306 		"_nscd_cfg_frontend_verify"),
307 
308 	NSCD_CFG_PARAM_DESC(
309 		"common-worker-threads",
310 		NSCD_CFG_DATA_INTEGER,
311 		NSCD_CFG_PFLAG_SEND_BIT_SELECTED |
312 		NSCD_CFG_PFLAG_GLOBAL,
313 		common_worker_threads,
314 		nscd_cfg_global_frontend_t,
315 		fe,
316 		nscd_cfg_global_data_t,
317 		NULL,
318 		NSCD_CFG_FUNC_NAME_AS_GROUP,
319 		NSCD_CFG_FUNC_NAME_AS_GROUP),
320 
321 	NSCD_CFG_PARAM_DESC(
322 		"cache-hit-threads",
323 		NSCD_CFG_DATA_INTEGER,
324 		NSCD_CFG_PFLAG_SEND_BIT_SELECTED |
325 		NSCD_CFG_PFLAG_GLOBAL,
326 		cache_hit_threads,
327 		nscd_cfg_global_frontend_t,
328 		fe,
329 		nscd_cfg_global_data_t,
330 		NULL,
331 		NSCD_CFG_FUNC_NAME_AS_GROUP,
332 		NSCD_CFG_FUNC_NAME_AS_GROUP),
333 
334 	NSCD_CFG_PGROUP_DESC(
335 		"param-group-global-selfcred",
336 		NSCD_CFG_DATA_NONE,
337 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
338 		NSCD_CFG_PFLAG_GLOBAL,
339 		sc,
340 		nscd_cfg_global_data_t,
341 		NULL,
342 		"_nscd_cfg_selfcred_notify",
343 		"_nscd_cfg_selfcred_verify"),
344 
345 	NSCD_CFG_PARAM_DESC(
346 		"enable-selfcred",
347 		NSCD_CFG_DATA_BOOLEAN,
348 		NSCD_CFG_PFLAG_GLOBAL,
349 		enable_selfcred,
350 		nscd_cfg_global_selfcred_t,
351 		sc,
352 		nscd_cfg_global_data_t,
353 		NULL,
354 		NSCD_CFG_FUNC_NAME_AS_GROUP,
355 		NSCD_CFG_FUNC_NAME_AS_GROUP),
356 
357 	NSCD_CFG_PARAM_DESC(
358 		"max-per-user-nscd",
359 		NSCD_CFG_DATA_INTEGER,
360 		NSCD_CFG_PFLAG_GLOBAL,
361 		max_per_user_nscd,
362 		nscd_cfg_global_selfcred_t,
363 		sc,
364 		nscd_cfg_global_data_t,
365 		NULL,
366 		NSCD_CFG_FUNC_NAME_AS_GROUP,
367 		NSCD_CFG_FUNC_NAME_AS_GROUP),
368 
369 	NSCD_CFG_PARAM_DESC(
370 		"per-user-nscd-ttl",
371 		NSCD_CFG_DATA_INTEGER,
372 		NSCD_CFG_PFLAG_GLOBAL,
373 		per_user_nscd_ttl,
374 		nscd_cfg_global_selfcred_t,
375 		sc,
376 		nscd_cfg_global_data_t,
377 		NULL,
378 		NSCD_CFG_FUNC_NAME_AS_GROUP,
379 		NSCD_CFG_FUNC_NAME_AS_GROUP),
380 
381 	NSCD_CFG_PGROUP_DESC(
382 		"param-group-global-switch",
383 		NSCD_CFG_DATA_NONE,
384 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
385 		NSCD_CFG_PFLAG_GLOBAL,
386 		sw,
387 		nscd_cfg_global_data_t,
388 		NULL,
389 		"_nscd_cfg_switch_notify",
390 		"_nscd_cfg_switch_verify"),
391 
392 	NSCD_CFG_PARAM_DESC(
393 		"global-enable-lookup",
394 		NSCD_CFG_DATA_BOOLEAN,
395 		NSCD_CFG_PFLAG_GLOBAL,
396 		enable_lookup_g,
397 		nscd_cfg_global_switch_t,
398 		sw,
399 		nscd_cfg_global_data_t,
400 		NULL,
401 		NSCD_CFG_FUNC_NAME_AS_GROUP,
402 		NSCD_CFG_FUNC_NAME_AS_GROUP),
403 
404 	NSCD_CFG_PARAM_DESC(
405 		"global-enable-loopback-checking",
406 		NSCD_CFG_DATA_BOOLEAN,
407 		NSCD_CFG_PFLAG_GLOBAL,
408 		enable_loopback_checking_g,
409 		nscd_cfg_global_switch_t,
410 		sw,
411 		nscd_cfg_global_data_t,
412 		NULL,
413 		NSCD_CFG_FUNC_NAME_AS_GROUP,
414 		NSCD_CFG_FUNC_NAME_AS_GROUP),
415 
416 	NSCD_CFG_PARAM_DESC(
417 		"global-check-smf-state-interval",
418 		NSCD_CFG_DATA_INTEGER,
419 		NSCD_CFG_PFLAG_GLOBAL,
420 		check_smf_state_interval_g,
421 		nscd_cfg_global_switch_t,
422 		sw,
423 		nscd_cfg_global_data_t,
424 		NULL,
425 		NSCD_CFG_FUNC_NAME_AS_GROUP,
426 		NSCD_CFG_FUNC_NAME_AS_GROUP),
427 
428 	NSCD_CFG_PGROUP_DESC(
429 		"param-group-global-cache",
430 		NSCD_CFG_DATA_NONE,
431 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
432 		NSCD_CFG_PFLAG_INIT_SET_ALL_DB |
433 		NSCD_CFG_PFLAG_GLOBAL,
434 		cache,
435 		nscd_cfg_global_data_t,
436 		NULL,
437 		"_nscd_cfg_cache_notify",
438 		"_nscd_cfg_cache_verify"),
439 
440 	NSCD_CFG_PARAM_DESC(
441 		"global-enable-cache",
442 		NSCD_CFG_DATA_BOOLEAN,
443 		NSCD_CFG_PFLAG_GLOBAL,
444 		enable,
445 		nscd_cfg_global_cache_t,
446 		cache,
447 		nscd_cfg_global_data_t,
448 		NULL,
449 		NSCD_CFG_FUNC_NAME_AS_GROUP,
450 		NSCD_CFG_FUNC_NAME_AS_GROUP),
451 
452 	/* non-global config param from this point on */
453 
454 	NSCD_CFG_PGROUP_DESC(
455 		"param-group-frontend",
456 		NSCD_CFG_DATA_NONE,
457 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP,
458 		fe,
459 		nscd_cfg_nsw_db_data_t,
460 		NULL,
461 		"_nscd_cfg_frontend_notify",
462 		"_nscd_cfg_frontend_verify"),
463 
464 	NSCD_CFG_PARAM_DESC(
465 		"worker-thread-per-nsw-db",
466 		NSCD_CFG_DATA_INTEGER,
467 		NSCD_CFG_PFLAG_NONE,
468 		worker_thread_per_nsw_db,
469 		nscd_cfg_frontend_t,
470 		fe,
471 		nscd_cfg_nsw_db_data_t,
472 		NULL,
473 		NSCD_CFG_FUNC_NAME_AS_GROUP,
474 		NSCD_CFG_FUNC_NAME_AS_GROUP),
475 
476 	NSCD_CFG_PGROUP_DESC(
477 		"param-group-switch",
478 		NSCD_CFG_DATA_NONE,
479 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP |
480 		NSCD_CFG_PFLAG_NONE,
481 		sw,
482 		nscd_cfg_nsw_db_data_t,
483 		NULL,
484 		"_nscd_cfg_switch_notify",
485 		"_nscd_cfg_switch_verify"),
486 
487 	NSCD_CFG_PARAM_DESC(
488 		"nsw-config-string",
489 		NSCD_CFG_DATA_STRING,
490 		NSCD_CFG_PFLAG_VLEN_DATA |
491 		NSCD_CFG_PFLAG_LINKED,
492 		nsw_config_string,
493 		nscd_cfg_switch_t,
494 		sw,
495 		nscd_cfg_nsw_db_data_t,
496 		&NSCD_CFG_NSWCFGSTR_PCHECK,
497 		NSCD_CFG_FUNC_NAME_AS_GROUP,
498 		NSCD_CFG_FUNC_NAME_AS_GROUP),
499 
500 	NSCD_CFG_PARAM_DESC(
501 		"nsw-config-database",
502 		NSCD_CFG_DATA_STRING,
503 		NSCD_CFG_PFLAG_VLEN_DATA |
504 		NSCD_CFG_PFLAG_HIDDEN,
505 		nsw_config_db,
506 		nscd_cfg_switch_t,
507 		sw,
508 		nscd_cfg_nsw_db_data_t,
509 		&NSCD_CFG_NSWCFGSTR_PCHECK,
510 		NSCD_CFG_FUNC_NAME_AS_GROUP,
511 		NSCD_CFG_FUNC_NAME_AS_GROUP),
512 
513 	NSCD_CFG_PARAM_DESC(
514 		"enable-lookup",
515 		NSCD_CFG_DATA_BOOLEAN,
516 		NSCD_CFG_PFLAG_NONE,
517 		enable_lookup,
518 		nscd_cfg_switch_t,
519 		sw,
520 		nscd_cfg_nsw_db_data_t,
521 		NULL,
522 		NSCD_CFG_FUNC_NAME_AS_GROUP,
523 		NSCD_CFG_FUNC_NAME_AS_GROUP),
524 
525 	NSCD_CFG_PARAM_DESC(
526 		"enable-loopback-checking",
527 		NSCD_CFG_DATA_BOOLEAN,
528 		NSCD_CFG_PFLAG_NONE,
529 		enable_loopback_checking,
530 		nscd_cfg_switch_t,
531 		sw,
532 		nscd_cfg_nsw_db_data_t,
533 		NULL,
534 		NSCD_CFG_FUNC_NAME_AS_GROUP,
535 		NSCD_CFG_FUNC_NAME_AS_GROUP),
536 
537 	NSCD_CFG_PARAM_DESC(
538 		"max-nsw-state-per-db",
539 		NSCD_CFG_DATA_INTEGER,
540 		NSCD_CFG_PFLAG_NONE,
541 		max_nsw_state_per_db,
542 		nscd_cfg_switch_t,
543 		sw,
544 		nscd_cfg_nsw_db_data_t,
545 		NULL,
546 		NSCD_CFG_FUNC_NAME_AS_GROUP,
547 		NSCD_CFG_FUNC_NAME_AS_GROUP),
548 
549 	NSCD_CFG_PARAM_DESC(
550 		"max-nsw-state-per-thread",
551 		NSCD_CFG_DATA_INTEGER,
552 		NSCD_CFG_PFLAG_NONE,
553 		max_nsw_state_per_thread,
554 		nscd_cfg_switch_t,
555 		sw,
556 		nscd_cfg_nsw_db_data_t,
557 		NULL,
558 		NSCD_CFG_FUNC_NAME_AS_GROUP,
559 		NSCD_CFG_FUNC_NAME_AS_GROUP),
560 
561 	NSCD_CFG_PARAM_DESC(
562 		"max-getent-ctx-per-db",
563 		NSCD_CFG_DATA_INTEGER,
564 		NSCD_CFG_PFLAG_NONE,
565 		max_getent_ctx_per_db,
566 		nscd_cfg_switch_t,
567 		sw,
568 		nscd_cfg_nsw_db_data_t,
569 		NULL,
570 		NSCD_CFG_FUNC_NAME_AS_GROUP,
571 		NSCD_CFG_FUNC_NAME_AS_GROUP),
572 
573 	NSCD_CFG_PGROUP_DESC(
574 		"param-group-cache",
575 		NSCD_CFG_DATA_NONE,
576 		NSCD_CFG_PFLAG_INIT_SEND_WHOLE_GROUP,
577 		cache,
578 		nscd_cfg_nsw_db_data_t,
579 		NULL,
580 		"_nscd_cfg_cache_notify",
581 		"_nscd_cfg_cache_verify"),
582 
583 	NSCD_CFG_PARAM_DESC(
584 		"enable-cache",
585 		NSCD_CFG_DATA_BOOLEAN,
586 		NSCD_CFG_PFLAG_NONE,
587 		enable,
588 		nscd_cfg_cache_t,
589 		cache,
590 		nscd_cfg_nsw_db_data_t,
591 		NULL,
592 		NSCD_CFG_FUNC_NAME_AS_GROUP,
593 		NSCD_CFG_FUNC_NAME_AS_GROUP),
594 
595 	NSCD_CFG_PARAM_DESC(
596 		"enable-per-user-cache",
597 		NSCD_CFG_DATA_BOOLEAN,
598 		NSCD_CFG_PFLAG_NONE,
599 		per_user,
600 		nscd_cfg_cache_t,
601 		cache,
602 		nscd_cfg_nsw_db_data_t,
603 		NULL,
604 		NSCD_CFG_FUNC_NAME_AS_GROUP,
605 		NSCD_CFG_FUNC_NAME_AS_GROUP),
606 
607 	NSCD_CFG_PARAM_DESC(
608 		"avoid-nameservice",
609 		NSCD_CFG_DATA_BOOLEAN,
610 		NSCD_CFG_PFLAG_NONE,
611 		avoid_ns,
612 		nscd_cfg_cache_t,
613 		cache,
614 		nscd_cfg_nsw_db_data_t,
615 		NULL,
616 		NSCD_CFG_FUNC_NAME_AS_GROUP,
617 		NSCD_CFG_FUNC_NAME_AS_GROUP),
618 
619 	NSCD_CFG_PARAM_DESC(
620 		"check-files",
621 		NSCD_CFG_DATA_BOOLEAN,
622 		NSCD_CFG_PFLAG_NONE,
623 		check_files,
624 		nscd_cfg_cache_t,
625 		cache,
626 		nscd_cfg_nsw_db_data_t,
627 		NULL,
628 		NSCD_CFG_FUNC_NAME_AS_GROUP,
629 		NSCD_CFG_FUNC_NAME_AS_GROUP),
630 
631 	NSCD_CFG_PARAM_DESC(
632 		"check-file-interval",
633 		NSCD_CFG_DATA_INTEGER,
634 		NSCD_CFG_PFLAG_NONE,
635 		check_interval,
636 		nscd_cfg_cache_t,
637 		cache,
638 		nscd_cfg_nsw_db_data_t,
639 		NULL,
640 		NSCD_CFG_FUNC_NAME_AS_GROUP,
641 		NSCD_CFG_FUNC_NAME_AS_GROUP),
642 
643 	NSCD_CFG_PARAM_DESC(
644 		"positive-time-to-live",
645 		NSCD_CFG_DATA_INTEGER,
646 		NSCD_CFG_PFLAG_NONE,
647 		pos_ttl,
648 		nscd_cfg_cache_t,
649 		cache,
650 		nscd_cfg_nsw_db_data_t,
651 		NULL,
652 		NSCD_CFG_FUNC_NAME_AS_GROUP,
653 		NSCD_CFG_FUNC_NAME_AS_GROUP),
654 
655 	NSCD_CFG_PARAM_DESC(
656 		"negative-time-to-live",
657 		NSCD_CFG_DATA_INTEGER,
658 		NSCD_CFG_PFLAG_NONE,
659 		neg_ttl,
660 		nscd_cfg_cache_t,
661 		cache,
662 		nscd_cfg_nsw_db_data_t,
663 		NULL,
664 		NSCD_CFG_FUNC_NAME_AS_GROUP,
665 		NSCD_CFG_FUNC_NAME_AS_GROUP),
666 
667 	NSCD_CFG_PARAM_DESC(
668 		"keep-hot-count",
669 		NSCD_CFG_DATA_INTEGER,
670 		NSCD_CFG_PFLAG_NONE,
671 		keephot,
672 		nscd_cfg_cache_t,
673 		cache,
674 		nscd_cfg_nsw_db_data_t,
675 		NULL,
676 		NSCD_CFG_FUNC_NAME_AS_GROUP,
677 		NSCD_CFG_FUNC_NAME_AS_GROUP),
678 
679 	NSCD_CFG_PARAM_DESC(
680 		"hint-size",
681 		NSCD_CFG_DATA_INTEGER,
682 		NSCD_CFG_PFLAG_NONE,
683 		hint_size,
684 		nscd_cfg_cache_t,
685 		cache,
686 		nscd_cfg_nsw_db_data_t,
687 		NULL,
688 		NSCD_CFG_FUNC_NAME_AS_GROUP,
689 		NSCD_CFG_FUNC_NAME_AS_GROUP),
690 
691 	NSCD_CFG_PARAM_DESC(
692 		"maximum-entries-allowed",
693 		NSCD_CFG_DATA_INTEGER,
694 		NSCD_CFG_PFLAG_NONE,
695 		maxentries,
696 		nscd_cfg_cache_t,
697 		cache,
698 		nscd_cfg_nsw_db_data_t,
699 		NULL,
700 		NSCD_CFG_FUNC_NAME_AS_GROUP,
701 		NSCD_CFG_FUNC_NAME_AS_GROUP),
702 
703 	NSCD_CFG_PARAM_DESC(
704 		"suggested-size",
705 		NSCD_CFG_DATA_INTEGER,
706 		NSCD_CFG_PFLAG_OBSOLETE,
707 		suggestedsize,
708 		nscd_cfg_cache_t,
709 		cache,
710 		nscd_cfg_nsw_db_data_t,
711 		NULL,
712 		NSCD_CFG_FUNC_NAME_AS_GROUP,
713 		NSCD_CFG_FUNC_NAME_AS_GROUP),
714 
715 	NSCD_CFG_PARAM_DESC(
716 		"old-data-ok",
717 		NSCD_CFG_DATA_BOOLEAN,
718 		NSCD_CFG_PFLAG_OBSOLETE,
719 		old_data_ok,
720 		nscd_cfg_cache_t,
721 		cache,
722 		nscd_cfg_nsw_db_data_t,
723 		NULL,
724 		NSCD_CFG_FUNC_NAME_AS_GROUP,
725 		NSCD_CFG_FUNC_NAME_AS_GROUP),
726 
727 	NSCD_CFG_PGROUP_DESC_NULL
728 };
729 
730 /*
731  * defaults for the global configuration
732  */
733 static nscd_cfg_global_data_t nscd_cfg_global_default = {
734 
735 	/*
736 	 * nscd_cfg_global_log_t
737 	 */
738 	{
739 
740 	NSCD_CFG_GROUP_INFO_GLOBAL_LOG,
741 	NULL,
742 	NSCD_LOG_LEVEL_ERROR,	/* debug_level */
743 	NSCD_LOG_CACHE,		/* debug_comp */
744 
745 	},
746 
747 	/*
748 	 * nscd_cfg_global_frontend_t
749 	 */
750 	{
751 
752 	NSCD_CFG_GROUP_INFO_GLOBAL_FRONTEND,
753 	20,			/* common_worker_threads */
754 	20,			/* cache_hit_threads */
755 
756 	},
757 
758 	/*
759 	 * nscd_cfg_global_selfcred_t
760 	 */
761 	{
762 
763 	NSCD_CFG_GROUP_INFO_GLOBAL_SELFCRED,
764 	nscd_true,		/* enable_selfcred */
765 	1000,			/* max_per_user_nscd */
766 	120,			/* per_user_nscd_ttl: 120 seconds */
767 
768 	},
769 
770 	/*
771 	 * nscd_cfg_global_switch_t
772 	 */
773 	{
774 
775 	NSCD_CFG_GROUP_INFO_GLOBAL_SWITCH,
776 	nscd_true,		/* enable_lookup_g */
777 	nscd_false,		/* enable_loopback_checking_g */
778 	120,			/* check_smf_state_interval_g */
779 
780 	},
781 
782 	/*
783 	 * nscd_cfg_global_cache_t
784 	 */
785 	NSCD_CFG_GLOBAL_CACHE_DEFAULTS
786 };
787 
788 /*
789  * defaults for the per switch database configuration
790  */
791 static nscd_cfg_nsw_db_data_t nscd_cfg_nsw_db_data_default = {
792 
793 	/*
794 	 * nscd_cfg_frontend_t
795 	 */
796 	{
797 
798 	NSCD_CFG_GROUP_INFO_FRONTEND,
799 	10, 			/* worker_thread_per_nsw_db */
800 
801 	},
802 
803 	/*
804 	 * nscd_cfg_switch_t
805 	 */
806 	{
807 
808 	NSCD_CFG_GROUP_INFO_SWITCH,
809 	"nis files",		/* nsw_config_string */
810 	NULL,			/* nsw_config_db */
811 	nscd_true,		/* enable_lookup */
812 	nscd_false,		/* enable_loopback_checking */
813 	10,			/* max_nsw_state_per_db */
814 	5,			/* max_nsw_state_per_thread */
815 	10,			/* max_getent_ctx_per_db */
816 
817 	},
818 
819 	/*
820 	 * nscd_cfg_cache_t
821 	 */
822 	NSCD_CFG_CACHE_DEFAULTS
823 };
824 
825 /*
826  * macros for defining the database specific defaults
827  */
828 #define	NSCD_CFG_DB_DEFAULT_PARAM(db, gf, pf, gt, defaddr, deflen) \
829 	{ \
830 		db, offsetof(nscd_cfg_nsw_db_data_t, gf), \
831 		offsetof(gt, pf), defaddr, deflen \
832 	}
833 
834 #define	NSCD_CFG_DB_DEFAULT_GROUP(db, gf, defaddr, deflen) \
835 	{ \
836 		db, offsetof(nscd_cfg_nsw_db_data_t, gf), \
837 		0, defaddr, deflen \
838 	}
839 
840 #define	NSCD_CFG_DB_DEFAULT_NULL \
841 	{ \
842 		NULL, 0, 0, NULL, 0 \
843 	}
844 
845 /*
846  * shadow, user_attr, and audit_user use the same switch policy
847  * as that of passwd. exec_attr use that of prof_attr.
848  */
849 static char *nscd_cfg_shadow_cfg_db	= NSS_DBNAM_PASSWD;
850 static char *nscd_cfg_userattr_cfg_db	= NSS_DBNAM_PASSWD;
851 static char *nscd_cfg_auuser_cfg_db	= NSS_DBNAM_PASSWD;
852 static char *nscd_cfg_execattr_cfg_db	= NSS_DBNAM_PROFATTR;
853 
854 /*
855  * default switch policy for pseudo-databases passwd_compat and
856  * and group_compa is "nis"
857  */
858 static char *nscd_cfg_def_passwd_compat	= NSS_DEFCONF_PASSWD_COMPAT;
859 static char *nscd_cfg_def_group_compat	= NSS_DEFCONF_GROUP_COMPAT;
860 
861 static nscd_cfg_nsw_spc_default_t nscd_cfg_passwd_cfg_link =
862 	NSCD_CFG_DB_DEFAULT_PARAM(
863 		NSS_DBNAM_PASSWD,
864 		sw,
865 		nsw_config_string,
866 		nscd_cfg_switch_t,
867 		NULL,
868 		NSCD_SIZEOF(nscd_cfg_switch_t, nsw_config_string));
869 
870 static nscd_cfg_nsw_spc_default_t nscd_cfg_profattr_cfg_link =
871 	NSCD_CFG_DB_DEFAULT_PARAM(
872 		NSS_DBNAM_PROFATTR,
873 		sw,
874 		nsw_config_string,
875 		nscd_cfg_switch_t,
876 		NULL,
877 		NSCD_SIZEOF(nscd_cfg_switch_t, nsw_config_string));
878 
879 
880 /*
881  * switch database specific defaults
882  */
883 nscd_cfg_nsw_spc_default_t	_nscd_cfg_nsw_spc_default[] = {
884 
885 	NSCD_CFG_DB_DEFAULT_PARAM(
886 	NSS_DBNAM_SHADOW,
887 		sw,
888 		nsw_config_db,
889 		nscd_cfg_switch_t,
890 		&nscd_cfg_shadow_cfg_db,
891 		sizeof (nscd_cfg_shadow_cfg_db)),
892 
893 	NSCD_CFG_DB_DEFAULT_PARAM(
894 		NSS_DBNAM_USERATTR,
895 		sw,
896 		nsw_config_db,
897 		nscd_cfg_switch_t,
898 		&nscd_cfg_userattr_cfg_db,
899 		sizeof (nscd_cfg_userattr_cfg_db)),
900 
901 	NSCD_CFG_DB_DEFAULT_PARAM(
902 		NSS_DBNAM_AUDITUSER,
903 		sw,
904 		nsw_config_db,
905 		nscd_cfg_switch_t,
906 		&nscd_cfg_auuser_cfg_db,
907 		sizeof (nscd_cfg_auuser_cfg_db)),
908 
909 	NSCD_CFG_DB_DEFAULT_PARAM(
910 		NSS_DBNAM_EXECATTR,
911 		sw,
912 		nsw_config_db,
913 		nscd_cfg_switch_t,
914 		&nscd_cfg_execattr_cfg_db,
915 		sizeof (nscd_cfg_execattr_cfg_db)),
916 
917 	NSCD_CFG_DB_DEFAULT_PARAM(
918 		NSS_DBNAM_PASSWD_COMPAT,
919 		sw,
920 		nsw_config_string,
921 		nscd_cfg_switch_t,
922 		&nscd_cfg_def_passwd_compat,
923 		sizeof (nscd_cfg_def_passwd_compat)),
924 
925 	NSCD_CFG_DB_DEFAULT_PARAM(
926 		NSS_DBNAM_GROUP_COMPAT,
927 		sw,
928 		nsw_config_string,
929 		nscd_cfg_switch_t,
930 		&nscd_cfg_def_group_compat,
931 		sizeof (nscd_cfg_def_group_compat)),
932 
933 	NSCD_CFG_DB_DEFAULT_NULL
934 };
935 
936 /*
937  * switch database specific defaults that are linked to
938  * those of other databases
939  */
940 nscd_cfg_nsw_spc_default_t	_nscd_cfg_nsw_link_default[] = {
941 
942 	NSCD_CFG_DB_DEFAULT_PARAM(
943 		NSS_DBNAM_SHADOW,
944 		sw,
945 		nsw_config_string,
946 		nscd_cfg_switch_t,
947 		&nscd_cfg_passwd_cfg_link,
948 		0),
949 
950 	NSCD_CFG_DB_DEFAULT_PARAM(
951 		NSS_DBNAM_USERATTR,
952 		sw,
953 		nsw_config_string,
954 		nscd_cfg_switch_t,
955 		&nscd_cfg_passwd_cfg_link,
956 		0),
957 
958 	NSCD_CFG_DB_DEFAULT_PARAM(
959 		NSS_DBNAM_AUDITUSER,
960 		sw,
961 		nsw_config_string,
962 		nscd_cfg_switch_t,
963 		&nscd_cfg_passwd_cfg_link,
964 		0),
965 
966 	NSCD_CFG_DB_DEFAULT_PARAM(
967 		NSS_DBNAM_EXECATTR,
968 		sw,
969 		nsw_config_string,
970 		nscd_cfg_switch_t,
971 		&nscd_cfg_profattr_cfg_link,
972 		0),
973 
974 	NSCD_CFG_DB_DEFAULT_NULL
975 };
976 
977 /*
978  * macros for defining the static stats table
979  */
980 #define	NSCD_CFG_SGROUP_DESC(sn, type, sflag, gi, \
981 		gf, g_in_t, gsfunc_name) \
982 	{ \
983 		{-1, sn}, type, NSCD_CFG_SFLAG_GROUP | sflag, gi, \
984 		0, 0, 0,\
985 		NSCD_SIZEOF(g_in_t, gf), offsetof(g_in_t, gf), -1, \
986 		gsfunc_name, NULL \
987 	}
988 
989 #define	NSCD_CFG_STAT_DESC(sn, type, sflag, sf, s_in_t, \
990 		gf, g_in_t, gsfunc_name) \
991 	{ \
992 		{-1, sn}, type, sflag, NSCD_CFG_GROUP_INFO_NULL, \
993 		NSCD_SIZEOF(s_in_t, sf), offsetof(s_in_t, sf), -1, \
994 		NSCD_SIZEOF(g_in_t, gf), offsetof(g_in_t, gf), -1, \
995 		gsfunc_name, NULL \
996 	}
997 
998 #define	NSCD_CFG_SGROUP_DESC_NULL \
999 	{ \
1000 		{-1, NULL}, -1, NSCD_CFG_SFLAG_GROUP, NULL, \
1001 		0, 0, 0, \
1002 		0, 0, 0, \
1003 		NULL, NULL \
1004 	}
1005 
1006 /*
1007  * the static statistics description table
1008  */
1009 static	nscd_cfg_stat_desc_t	_nscd_cfg_stat_desc[] = {
1010 
1011 	NSCD_CFG_SGROUP_DESC(
1012 		"stat-group-global-log",
1013 		NSCD_CFG_DATA_NONE,
1014 		NSCD_CFG_SFLAG_GLOBAL,
1015 		NSCD_CFG_STAT_GROUP_INFO_GLOBAL_LOG,
1016 		log,
1017 		nscd_cfg_stat_global_data_t,
1018 		"_nscd_cfg_log_get_stat"),
1019 
1020 	NSCD_CFG_STAT_DESC(
1021 		"entries-logged",
1022 		NSCD_CFG_DATA_INTEGER,
1023 		NSCD_CFG_SFLAG_GLOBAL,
1024 		entries_logged,
1025 		nscd_cfg_stat_global_log_t,
1026 		log,
1027 		nscd_cfg_stat_global_data_t,
1028 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1029 
1030 	NSCD_CFG_SGROUP_DESC(
1031 		"stat-group-global-switch",
1032 		NSCD_CFG_DATA_NONE,
1033 		NSCD_CFG_SFLAG_GLOBAL,
1034 		NSCD_CFG_STAT_GROUP_INFO_GLOBAL_SWITCH,
1035 		sw,
1036 		nscd_cfg_stat_global_data_t,
1037 		"_nscd_cfg_switch_get_stat"),
1038 
1039 	NSCD_CFG_STAT_DESC(
1040 		"global-lookup-request-received",
1041 		NSCD_CFG_DATA_INTEGER,
1042 		NSCD_CFG_SFLAG_GLOBAL,
1043 		lookup_request_received_g,
1044 		nscd_cfg_stat_global_switch_t,
1045 		sw,
1046 		nscd_cfg_stat_global_data_t,
1047 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1048 
1049 	NSCD_CFG_STAT_DESC(
1050 		"global-lookup-request-queued",
1051 		NSCD_CFG_DATA_INTEGER,
1052 		NSCD_CFG_SFLAG_GLOBAL,
1053 		lookup_request_queued_g,
1054 		nscd_cfg_stat_global_switch_t,
1055 		sw,
1056 		nscd_cfg_stat_global_data_t,
1057 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1058 
1059 	NSCD_CFG_STAT_DESC(
1060 		"global-lookup-request-in-progress",
1061 		NSCD_CFG_DATA_INTEGER,
1062 		NSCD_CFG_SFLAG_GLOBAL,
1063 		lookup_request_in_progress_g,
1064 		nscd_cfg_stat_global_switch_t,
1065 		sw,
1066 		nscd_cfg_stat_global_data_t,
1067 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1068 
1069 	NSCD_CFG_STAT_DESC(
1070 		"global-lookup-request-succeeded",
1071 		NSCD_CFG_DATA_INTEGER,
1072 		NSCD_CFG_SFLAG_GLOBAL,
1073 		lookup_request_succeeded_g,
1074 		nscd_cfg_stat_global_switch_t,
1075 		sw,
1076 		nscd_cfg_stat_global_data_t,
1077 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1078 
1079 	NSCD_CFG_STAT_DESC(
1080 		"global-lookup-request-failed",
1081 		NSCD_CFG_DATA_INTEGER,
1082 		NSCD_CFG_SFLAG_GLOBAL,
1083 		lookup_request_failed_g,
1084 		nscd_cfg_stat_global_switch_t,
1085 		sw,
1086 		nscd_cfg_stat_global_data_t,
1087 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1088 
1089 	NSCD_CFG_STAT_DESC(
1090 		"global-loopback-nsw-db-skipped",
1091 		NSCD_CFG_DATA_INTEGER,
1092 		NSCD_CFG_SFLAG_GLOBAL,
1093 		loopback_nsw_db_skipped_g,
1094 		nscd_cfg_stat_global_switch_t,
1095 		sw,
1096 		nscd_cfg_stat_global_data_t,
1097 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1098 
1099 	NSCD_CFG_SGROUP_DESC(
1100 		"stat-group-global-cache",
1101 		NSCD_CFG_DATA_NONE,
1102 		NSCD_CFG_SFLAG_GLOBAL,
1103 		NSCD_CFG_STAT_GROUP_INFO_CACHE,
1104 		cache,
1105 		nscd_cfg_stat_global_data_t,
1106 		"_nscd_cfg_cache_get_stat"),
1107 
1108 	NSCD_CFG_STAT_DESC(
1109 		"global-cache-hits-on-positive",
1110 		NSCD_CFG_DATA_INTEGER,
1111 		NSCD_CFG_SFLAG_GLOBAL,
1112 		pos_hits,
1113 		nscd_cfg_stat_cache_t,
1114 		cache,
1115 		nscd_cfg_stat_global_data_t,
1116 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1117 
1118 	NSCD_CFG_STAT_DESC(
1119 		"global-cache-hits-on-negative",
1120 		NSCD_CFG_DATA_INTEGER,
1121 		NSCD_CFG_SFLAG_GLOBAL,
1122 		neg_hits,
1123 		nscd_cfg_stat_cache_t,
1124 		cache,
1125 		nscd_cfg_stat_global_data_t,
1126 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1127 
1128 	NSCD_CFG_STAT_DESC(
1129 		"global-cache-misses-on-positive",
1130 		NSCD_CFG_DATA_INTEGER,
1131 		NSCD_CFG_SFLAG_GLOBAL,
1132 		pos_misses,
1133 		nscd_cfg_stat_cache_t,
1134 		cache,
1135 		nscd_cfg_stat_global_data_t,
1136 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1137 
1138 	NSCD_CFG_STAT_DESC(
1139 		"global-cache-misses-on-negative",
1140 		NSCD_CFG_DATA_INTEGER,
1141 		NSCD_CFG_SFLAG_GLOBAL,
1142 		neg_misses,
1143 		nscd_cfg_stat_cache_t,
1144 		cache,
1145 		nscd_cfg_stat_global_data_t,
1146 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1147 
1148 	NSCD_CFG_STAT_DESC(
1149 		"global-cache-queries-queued",
1150 		NSCD_CFG_DATA_INTEGER,
1151 		NSCD_CFG_SFLAG_GLOBAL,
1152 		wait_count,
1153 		nscd_cfg_stat_cache_t,
1154 		cache,
1155 		nscd_cfg_stat_global_data_t,
1156 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1157 
1158 	NSCD_CFG_STAT_DESC(
1159 		"global-total-cache-entries",
1160 		NSCD_CFG_DATA_INTEGER,
1161 		NSCD_CFG_SFLAG_GLOBAL,
1162 		entries,
1163 		nscd_cfg_stat_cache_t,
1164 		cache,
1165 		nscd_cfg_stat_global_data_t,
1166 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1167 
1168 	NSCD_CFG_STAT_DESC(
1169 		"global-complete-cache-invalidations",
1170 		NSCD_CFG_DATA_INTEGER,
1171 		NSCD_CFG_SFLAG_GLOBAL,
1172 		invalidate_count,
1173 		nscd_cfg_stat_cache_t,
1174 		cache,
1175 		nscd_cfg_stat_global_data_t,
1176 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1177 
1178 	NSCD_CFG_STAT_DESC(
1179 		"global-cache-queries-dropped",
1180 		NSCD_CFG_DATA_INTEGER,
1181 		NSCD_CFG_SFLAG_GLOBAL,
1182 		drop_count,
1183 		nscd_cfg_stat_cache_t,
1184 		cache,
1185 		nscd_cfg_stat_global_data_t,
1186 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1187 
1188 	NSCD_CFG_STAT_DESC(
1189 		"global-cache-hit-rate",
1190 		NSCD_CFG_DATA_PERCENT,
1191 		NSCD_CFG_SFLAG_GLOBAL,
1192 		hitrate,
1193 		nscd_cfg_stat_cache_t,
1194 		cache,
1195 		nscd_cfg_stat_global_data_t,
1196 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1197 
1198 	/* non-global stat from this point on */
1199 
1200 	NSCD_CFG_SGROUP_DESC(
1201 		"stat-group-switch",
1202 		NSCD_CFG_DATA_NONE,
1203 		NSCD_CFG_SFLAG_GROUP,
1204 		NSCD_CFG_STAT_GROUP_INFO_SWITCH,
1205 		cache,
1206 		nscd_cfg_stat_nsw_db_data_t,
1207 		"_nscd_cfg_switch_get_stat"),
1208 
1209 	NSCD_CFG_STAT_DESC(
1210 		"lookup-request-received",
1211 		NSCD_CFG_DATA_INTEGER,
1212 		NSCD_CFG_SFLAG_NONE,
1213 		lookup_request_received,
1214 		nscd_cfg_stat_switch_t,
1215 		sw,
1216 		nscd_cfg_stat_nsw_db_data_t,
1217 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1218 
1219 	NSCD_CFG_STAT_DESC(
1220 		"lookup-request-queued",
1221 		NSCD_CFG_DATA_INTEGER,
1222 		NSCD_CFG_SFLAG_NONE,
1223 		lookup_request_queued,
1224 		nscd_cfg_stat_switch_t,
1225 		sw,
1226 		nscd_cfg_stat_nsw_db_data_t,
1227 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1228 
1229 	NSCD_CFG_STAT_DESC(
1230 		"lookup-request-in-progress",
1231 		NSCD_CFG_DATA_INTEGER,
1232 		NSCD_CFG_SFLAG_NONE,
1233 		lookup_request_in_progress,
1234 		nscd_cfg_stat_switch_t,
1235 		sw,
1236 		nscd_cfg_stat_nsw_db_data_t,
1237 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1238 
1239 	NSCD_CFG_STAT_DESC(
1240 		"lookup-request-succeeded",
1241 		NSCD_CFG_DATA_INTEGER,
1242 		NSCD_CFG_SFLAG_NONE,
1243 		lookup_request_succeeded,
1244 		nscd_cfg_stat_switch_t,
1245 		sw,
1246 		nscd_cfg_stat_nsw_db_data_t,
1247 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1248 
1249 	NSCD_CFG_STAT_DESC(
1250 		"lookup-request-failed",
1251 		NSCD_CFG_DATA_INTEGER,
1252 		NSCD_CFG_SFLAG_NONE,
1253 		lookup_request_failed,
1254 		nscd_cfg_stat_switch_t,
1255 		sw,
1256 		nscd_cfg_stat_nsw_db_data_t,
1257 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1258 
1259 	NSCD_CFG_STAT_DESC(
1260 		"loopback-nsw-db-skipped",
1261 		NSCD_CFG_DATA_INTEGER,
1262 		NSCD_CFG_SFLAG_NONE,
1263 		loopback_nsw_db_skipped,
1264 		nscd_cfg_stat_switch_t,
1265 		sw,
1266 		nscd_cfg_stat_nsw_db_data_t,
1267 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1268 
1269 	NSCD_CFG_SGROUP_DESC(
1270 		"stat-group-cache",
1271 		NSCD_CFG_DATA_NONE,
1272 		NSCD_CFG_SFLAG_GROUP,
1273 		NSCD_CFG_STAT_GROUP_INFO_CACHE,
1274 		cache,
1275 		nscd_cfg_stat_nsw_db_data_t,
1276 		"_nscd_cfg_cache_get_stat"),
1277 
1278 	NSCD_CFG_STAT_DESC(
1279 		"cache-hits-on-positive",
1280 		NSCD_CFG_DATA_INTEGER,
1281 		NSCD_CFG_SFLAG_NONE,
1282 		pos_hits,
1283 		nscd_cfg_stat_cache_t,
1284 		cache,
1285 		nscd_cfg_stat_nsw_db_data_t,
1286 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1287 
1288 	NSCD_CFG_STAT_DESC(
1289 		"cache-hits-on-negative",
1290 		NSCD_CFG_DATA_INTEGER,
1291 		NSCD_CFG_SFLAG_NONE,
1292 		neg_hits,
1293 		nscd_cfg_stat_cache_t,
1294 		cache,
1295 		nscd_cfg_stat_nsw_db_data_t,
1296 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1297 
1298 	NSCD_CFG_STAT_DESC(
1299 		"cache-misses-on-positive",
1300 		NSCD_CFG_DATA_INTEGER,
1301 		NSCD_CFG_SFLAG_NONE,
1302 		pos_misses,
1303 		nscd_cfg_stat_cache_t,
1304 		cache,
1305 		nscd_cfg_stat_nsw_db_data_t,
1306 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1307 
1308 	NSCD_CFG_STAT_DESC(
1309 		"cache-misses-on-negative",
1310 		NSCD_CFG_DATA_INTEGER,
1311 		NSCD_CFG_SFLAG_NONE,
1312 		neg_misses,
1313 		nscd_cfg_stat_cache_t,
1314 		cache,
1315 		nscd_cfg_stat_nsw_db_data_t,
1316 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1317 
1318 	NSCD_CFG_STAT_DESC(
1319 		"cache-queries-queued",
1320 		NSCD_CFG_DATA_INTEGER,
1321 		NSCD_CFG_SFLAG_NONE,
1322 		wait_count,
1323 		nscd_cfg_stat_cache_t,
1324 		cache,
1325 		nscd_cfg_stat_nsw_db_data_t,
1326 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1327 
1328 	NSCD_CFG_STAT_DESC(
1329 		"total-cache-entries",
1330 		NSCD_CFG_DATA_INTEGER,
1331 		NSCD_CFG_SFLAG_NONE,
1332 		entries,
1333 		nscd_cfg_stat_cache_t,
1334 		cache,
1335 		nscd_cfg_stat_nsw_db_data_t,
1336 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1337 
1338 	NSCD_CFG_STAT_DESC(
1339 		"complete-cache-invalidations",
1340 		NSCD_CFG_DATA_INTEGER,
1341 		NSCD_CFG_SFLAG_NONE,
1342 		invalidate_count,
1343 		nscd_cfg_stat_cache_t,
1344 		cache,
1345 		nscd_cfg_stat_nsw_db_data_t,
1346 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1347 
1348 	NSCD_CFG_STAT_DESC(
1349 		"cache-hit-rate",
1350 		NSCD_CFG_DATA_PERCENT,
1351 		NSCD_CFG_SFLAG_NONE,
1352 		hitrate,
1353 		nscd_cfg_stat_cache_t,
1354 		cache,
1355 		nscd_cfg_stat_nsw_db_data_t,
1356 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1357 
1358 	NSCD_CFG_STAT_DESC(
1359 		"cache-queries-dropped",
1360 		NSCD_CFG_DATA_PERCENT,
1361 		NSCD_CFG_SFLAG_NONE,
1362 		drop_count,
1363 		nscd_cfg_stat_cache_t,
1364 		cache,
1365 		nscd_cfg_stat_nsw_db_data_t,
1366 		NSCD_CFG_FUNC_NAME_AS_GROUP),
1367 
1368 
1369 	NSCD_CFG_SGROUP_DESC_NULL
1370 };
1371 
1372 /* number of entries in the static tables */
1373 
1374 int _nscd_cfg_num_nsw_src =
1375 	(sizeof (_nscd_cfg_nsw_src) /
1376 		sizeof (_nscd_cfg_nsw_src[0]) - 1);
1377 
1378 int _nscd_cfg_num_smf_services =
1379 	(sizeof (_nscd_cfg_smf_services) /
1380 		sizeof (_nscd_cfg_smf_services[0]) - 1);
1381 
1382 /* number of supported nsw databases (including pseudo ones) */
1383 int _nscd_cfg_num_nsw_db_all =
1384 	(sizeof (_nscd_cfg_nsw_db) /
1385 		sizeof (_nscd_cfg_nsw_db[0]) - 1);
1386 
1387 /* number of supported nsw databases (not including pseudo ones) */
1388 int _nscd_cfg_num_nsw_db =
1389 	(sizeof (_nscd_cfg_nsw_db) /
1390 		sizeof (_nscd_cfg_nsw_db[0]) - 1) -
1391 		NSS_DBNAM_COMPAT_NUM_DB;
1392 
1393 static int _nscd_cfg_num_param =
1394 	(sizeof (_nscd_cfg_param_desc) /
1395 		sizeof (_nscd_cfg_param_desc[0]) - 1);
1396 
1397 static int _nscd_cfg_num_stat =
1398 	(sizeof (_nscd_cfg_stat_desc) /
1399 		sizeof (_nscd_cfg_stat_desc[0]) - 1);
1400 
1401 int _nscd_cfg_num_nsw_default =
1402 	(sizeof (_nscd_cfg_nsw_spc_default) /
1403 		sizeof (_nscd_cfg_nsw_spc_default[0]) - 1);
1404 
1405 int _nscd_cfg_num_link_default =
1406 	(sizeof (_nscd_cfg_nsw_link_default) /
1407 		sizeof (_nscd_cfg_nsw_link_default[0]) - 1);
1408 
1409 #ifdef	__cplusplus
1410 }
1411 #endif
1412 
1413 #endif	/* _NSCD_CFGDEF_H */
1414