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