1cb5caa98Sdjl /* 2cb5caa98Sdjl * CDDL HEADER START 3cb5caa98Sdjl * 4cb5caa98Sdjl * The contents of this file are subject to the terms of the 5cb5caa98Sdjl * Common Development and Distribution License (the "License"). 6cb5caa98Sdjl * You may not use this file except in compliance with the License. 7cb5caa98Sdjl * 8cb5caa98Sdjl * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE 9cb5caa98Sdjl * or http://www.opensolaris.org/os/licensing. 10cb5caa98Sdjl * See the License for the specific language governing permissions 11cb5caa98Sdjl * and limitations under the License. 12cb5caa98Sdjl * 13cb5caa98Sdjl * When distributing Covered Code, include this CDDL HEADER in each 14cb5caa98Sdjl * file and include the License file at usr/src/OPENSOLARIS.LICENSE. 15cb5caa98Sdjl * If applicable, add the following below this CDDL HEADER, with the 16cb5caa98Sdjl * fields enclosed by brackets "[]" replaced with your own identifying 17cb5caa98Sdjl * information: Portions Copyright [yyyy] [name of copyright owner] 18cb5caa98Sdjl * 19cb5caa98Sdjl * CDDL HEADER END 20cb5caa98Sdjl */ 21cb5caa98Sdjl /* 22*cfed26cbSMichen Chang * Copyright 2009 Sun Microsystems, Inc. All rights reserved. 23cb5caa98Sdjl * Use is subject to license terms. 24cb5caa98Sdjl */ 25cb5caa98Sdjl 26cb5caa98Sdjl #ifndef _NSCD_SWITCH_H 27cb5caa98Sdjl #define _NSCD_SWITCH_H 28cb5caa98Sdjl 29cb5caa98Sdjl #ifdef __cplusplus 30cb5caa98Sdjl extern "C" { 31cb5caa98Sdjl #endif 32cb5caa98Sdjl 33cb5caa98Sdjl #include <nss_dbdefs.h> 34cb5caa98Sdjl #include <thread.h> 35cb5caa98Sdjl #include <libscf.h> 36cb5caa98Sdjl #define __NSS_PRIVATE_INTERFACE 37cb5caa98Sdjl #include "nsswitch_priv.h" 38cb5caa98Sdjl #undef __NSS_PRIVATE_INTERFACE 39cb5caa98Sdjl #include "nscd_db.h" 40cb5caa98Sdjl #include "nscd_config.h" 41cb5caa98Sdjl 42cb5caa98Sdjl /* 43cb5caa98Sdjl * max. length of e.g. "passwd: files ldap" 44cb5caa98Sdjl */ 45cb5caa98Sdjl #define MAX_NSSWITCH_CONFIG_STRING_SZ 256 46cb5caa98Sdjl 47cb5caa98Sdjl /* 48cb5caa98Sdjl * max. length of the name of a NSS database 49cb5caa98Sdjl */ 50cb5caa98Sdjl #define MAX_NSSWITCH_CONFIG_DB_NAME_SZ 256 51cb5caa98Sdjl 52cb5caa98Sdjl /* 53cb5caa98Sdjl * nscd_nsw_config_t is an abstraction of the configuration 54cb5caa98Sdjl * for a NSS database 55cb5caa98Sdjl */ 56cb5caa98Sdjl typedef struct { 57cb5caa98Sdjl char *db_name; 58cb5caa98Sdjl char *nsw_cfg_str; 59cb5caa98Sdjl nss_db_params_t fe_params; 60cb5caa98Sdjl struct __nsw_switchconfig_v1 *nsw_config; 61cb5caa98Sdjl int max_src; 62cb5caa98Sdjl int *src_idx; /* ptr to array of */ 63cb5caa98Sdjl /* src index */ 64cb5caa98Sdjl int nobase; /* not shared */ 65cb5caa98Sdjl } nscd_nsw_config_t; 66cb5caa98Sdjl 67cb5caa98Sdjl /* 68cb5caa98Sdjl * nscd_be_info_t is an abstraction of a NSS backend 69cb5caa98Sdjl */ 70cb5caa98Sdjl typedef struct { 71d2ba247cSmichen void *be_version; 72cb5caa98Sdjl nss_backend_constr_t be_constr; 73cb5caa98Sdjl nss_backend_finder_t *finder; 74cb5caa98Sdjl void *finder_priv; 75cb5caa98Sdjl } nscd_be_info_t; 76cb5caa98Sdjl 77cb5caa98Sdjl /* 78cb5caa98Sdjl * nscd_state_ctrl_t is used to control a nscd_nsw_state pool 79cb5caa98Sdjl */ 80cb5caa98Sdjl typedef struct { 81cb5caa98Sdjl int max; 82cb5caa98Sdjl int allocated; 83cb5caa98Sdjl int free; 84cb5caa98Sdjl int waiter; 85cb5caa98Sdjl struct nscd_nsw_state *first; 86cb5caa98Sdjl } nscd_state_ctrl_t; 87cb5caa98Sdjl 88cb5caa98Sdjl /* 89cb5caa98Sdjl * nscd_nsw_state_base_t represents the nscd_nsw_state pool 90cb5caa98Sdjl * for a NSS database 91cb5caa98Sdjl */ 92cb5caa98Sdjl typedef struct nscd_nsw_state_base { 93cb5caa98Sdjl int dbi; /* which database? */ 94cb5caa98Sdjl nscd_state_ctrl_t nsw_state; 95cb5caa98Sdjl nscd_state_ctrl_t nsw_state_thr; 96cb5caa98Sdjl int used_by_thr; 97cb5caa98Sdjl thread_t tid; 98cb5caa98Sdjl cond_t thr_cond; 99cb5caa98Sdjl } nscd_nsw_state_base_t; 100cb5caa98Sdjl 101cb5caa98Sdjl /* 102cb5caa98Sdjl * nscd_nsw_state_t is an abstraction of all the data needed 103cb5caa98Sdjl * to do lookup of NSS database (e.g. "passwd" or "hosts") 104cb5caa98Sdjl */ 105d2ba247cSmichen extern void *_nscd_be_version; /* default version for supported be */ 106cb5caa98Sdjl typedef struct nscd_nsw_state { 107cb5caa98Sdjl int dbi; /* which database? */ 108cb5caa98Sdjl int max_src; /* is == config->num_lookups */ 109cb5caa98Sdjl int getent; /* used by getent */ 110bf1e3beeSmichen nscd_bool_t recheck_be; /* if set, check/init be */ 111cb5caa98Sdjl nss_db_params_t p; 112cb5caa98Sdjl struct __nsw_switchconfig_v1 *config; 113cb5caa98Sdjl nscd_nsw_config_t **nsw_cfg_p; 114cb5caa98Sdjl nscd_nsw_state_base_t *base; 115cb5caa98Sdjl nss_backend_t **be; /* array of backends */ 116bf1e3beeSmichen nss_backend_constr_t *be_constr; /* be constructor array */ 117cb5caa98Sdjl nscd_db_t ***be_db_pp; 118d2ba247cSmichen void **be_version_p; /* version ptr array */ 119cb5caa98Sdjl struct nscd_nsw_state *next; 120cb5caa98Sdjl } nscd_nsw_state_t; 121cb5caa98Sdjl 122cb5caa98Sdjl /* 123cb5caa98Sdjl * nscd_getent_ctx_base_t represents the nscd_getent_ctx_base_t pool 124cb5caa98Sdjl * for a NSS database 125cb5caa98Sdjl */ 126cb5caa98Sdjl typedef struct nscd_getent_ctx_base { 127cb5caa98Sdjl int dbi; /* which database? */ 128cb5caa98Sdjl int max_getent_ctx; 129cb5caa98Sdjl int num_getent_ctx; 130cb5caa98Sdjl struct nscd_getent_context *first; 131cb5caa98Sdjl } nscd_getent_ctx_base_t; 132cb5caa98Sdjl 133cb5caa98Sdjl /* 134cb5caa98Sdjl * nscd_getent_context_t is an abstraction of all the data needed 135cb5caa98Sdjl * to enumerate a NSS database (e.g. "passwd" or "hosts") 136cb5caa98Sdjl */ 137cb5caa98Sdjl typedef struct nscd_getent_context { 138cb5caa98Sdjl int dbi; 1396392794bSMichen Chang thread_t thr_id; 14029836b19Smichen mutex_t getent_mutex; 14129836b19Smichen int aborted; 14229836b19Smichen int in_use; 1436392794bSMichen Chang int num_reclaim_check; 144cb5caa98Sdjl nscd_seq_num_t seq_num; 145e37190e5Smichen nscd_cookie_num_t cookie_num; 146cb5caa98Sdjl pid_t pid; /* door client's pid */ 147cb5caa98Sdjl int n_src; /* >=max_src: end of sequence */ 148cb5caa98Sdjl nscd_nsw_state_t *nsw_state; 149cb5caa98Sdjl nss_backend_t *be; 150cb5caa98Sdjl nscd_getent_ctx_base_t *base; 151cb5caa98Sdjl struct nscd_getent_context *next; 1526392794bSMichen Chang struct nscd_getent_context *next_to_reclaim; 153cb5caa98Sdjl } nscd_getent_context_t; 154cb5caa98Sdjl 155cb5caa98Sdjl /* 156cb5caa98Sdjl * nscd_smf_state_t is used to keep track of the state of the smf 157cb5caa98Sdjl * service associated with a NSS source (e.g. "passwd" or "hosts") 158cb5caa98Sdjl */ 159cb5caa98Sdjl typedef struct { 160cb5caa98Sdjl char *src_name; 161cb5caa98Sdjl int src_state; 162cb5caa98Sdjl } nscd_smf_state_t; 163cb5caa98Sdjl 164cb5caa98Sdjl /* 165cb5caa98Sdjl * nscd_smf_state_t is used to keep track of the state of the smf 166cb5caa98Sdjl * service associated with a NSS source (e.g. "passwd" or "hosts") 167cb5caa98Sdjl */ 168cb5caa98Sdjl typedef struct { 169cb5caa98Sdjl int dbi; /* database index */ 170cb5caa98Sdjl /* 171cb5caa98Sdjl * index of the database of which the switch policy 172cb5caa98Sdjl * should be used 173cb5caa98Sdjl */ 174cb5caa98Sdjl int cfgdbi; 175cb5caa98Sdjl /* 176cb5caa98Sdjl * index of the pseudo database that the NSS backend 177cb5caa98Sdjl * does search on 178cb5caa98Sdjl */ 179cb5caa98Sdjl int compati; 180cb5caa98Sdjl /* 181cb5caa98Sdjl * ptr to ptr to the siwtch config structure 182cb5caa98Sdjl */ 183cb5caa98Sdjl nscd_nsw_config_t **nswcfg; 184cb5caa98Sdjl /* 185cb5caa98Sdjl * frontend params passed to nss_search or nss_*ent 186cb5caa98Sdjl */ 187cb5caa98Sdjl struct nss_db_params p; 188cb5caa98Sdjl /* 189cb5caa98Sdjl * set to 1 if database is "hosts", else 2 if "ipnodes" 190cb5caa98Sdjl */ 191cb5caa98Sdjl int8_t dnsi; 192cb5caa98Sdjl /* 193cb5caa98Sdjl * set to 1 if require privilege to look up the database 194cb5caa98Sdjl */ 195cb5caa98Sdjl uint8_t privdb; 196cb5caa98Sdjl } nscd_nsw_params_t; 197cb5caa98Sdjl 198cb5caa98Sdjl /* 199cb5caa98Sdjl * additional info returned by the switch engine 200cb5caa98Sdjl */ 201cb5caa98Sdjl typedef struct { 202cb5caa98Sdjl void *pbuf; /* ptr to packed buffer */ 203cb5caa98Sdjl size_t pbufsiz; /* length of the packed buffer */ 204cb5caa98Sdjl int srci; /* last source searched */ 205cb5caa98Sdjl int errnum; /* errno from the backend */ 206cb5caa98Sdjl int noarg; /* if set, backend does not use the arg structure */ 207cb5caa98Sdjl int fallback; /* if set, may need to fall back to main nscd */ 2084b22b933Srs200217 int datalen; /* pbuf->data_len (backend may change it) */ 209cb5caa98Sdjl } nscd_sw_return_t; 210cb5caa98Sdjl 211cb5caa98Sdjl /* 212e37190e5Smichen * nscd cookies used for setent/getent/endent 213e37190e5Smichen * - p0 cookie: returned by nscd to indicate 214e37190e5Smichen * the start of the enumeration position 215e37190e5Smichen * - p1 cookie: returned/updated by nscd to indicate 216e37190e5Smichen * the current enumeration position 217e37190e5Smichen */ 218e37190e5Smichen #define NSCD_P0_COOKIE_SEQNUM -1 219e37190e5Smichen typedef struct { 220e37190e5Smichen pid_t p0_pid; 221e37190e5Smichen time_t p0_time; 222e37190e5Smichen nscd_seq_num_t p0_seqnum; 223e37190e5Smichen } nscd_getent_p0_cookie_t; 224e37190e5Smichen 225e37190e5Smichen typedef struct { 226e37190e5Smichen nscd_cookie_num_t p1_cookie_num; 227e37190e5Smichen nscd_seq_num_t p1_seqnum; 228e37190e5Smichen } nscd_getent_p1_cookie_t; 229e37190e5Smichen 230e37190e5Smichen /* 231cb5caa98Sdjl * static tables or global data defined in other files 232cb5caa98Sdjl */ 233cb5caa98Sdjl extern int _nscd_cfg_num_nsw_src; 234cb5caa98Sdjl extern int _nscd_cfg_num_nsw_src_all; 235cb5caa98Sdjl extern int _nscd_cfg_num_nsw_db; 236cb5caa98Sdjl extern int _nscd_cfg_num_nsw_db_all; 237cb5caa98Sdjl extern int _nscd_cfg_num_smf_services; 238cb5caa98Sdjl extern nscd_cfg_id_t _nscd_cfg_nsw_src[]; 239cb5caa98Sdjl extern nscd_cfg_id_t *_nscd_cfg_nsw_src_all; 240cb5caa98Sdjl extern nscd_cfg_id_t _nscd_cfg_nsw_db[]; 241cb5caa98Sdjl extern nss_db_initf_t nscd_nss_db_initf[]; 242cb5caa98Sdjl extern nscd_cfg_id_t _nscd_cfg_smf_services[]; 243cb5caa98Sdjl extern nscd_smf_state_t *nscd_smf_service_state; 244cb5caa98Sdjl extern nscd_db_t ***nscd_src_backend_db; 245cb5caa98Sdjl extern nscd_nsw_config_t ***nscd_nsw_config; 246cb5caa98Sdjl extern nscd_nsw_state_base_t **nscd_nsw_state_base; 247cb5caa98Sdjl extern nscd_getent_ctx_base_t **nscd_getent_ctx_base; 248cb5caa98Sdjl extern nscd_cfg_global_switch_t nscd_switch_cfg_g; 249cb5caa98Sdjl extern nscd_cfg_switch_t *nscd_switch_cfg; 250cb5caa98Sdjl extern nscd_cfg_stat_global_switch_t nscd_switch_stats_g; 251cb5caa98Sdjl extern nscd_cfg_stat_switch_t *nscd_switch_stats; 252cb5caa98Sdjl 253cb5caa98Sdjl #define NSCD_NUM_SRC _nscd_cfg_num_nsw_src_all 254cb5caa98Sdjl #define NSCD_NUM_DB _nscd_cfg_num_nsw_db_all 255cb5caa98Sdjl #define NSCD_NUM_SMF_FMRI _nscd_cfg_num_smf_services 256cb5caa98Sdjl #define NSCD_NSW_SRC_NAME(i) (_nscd_cfg_nsw_src_all + i)->name 257cb5caa98Sdjl #define NSCD_NSW_DB_NAME(i) _nscd_cfg_nsw_db[i].name 258cb5caa98Sdjl #define NSCD_SMF_SVC_FMRI(i) _nscd_cfg_smf_services[i].name 259cb5caa98Sdjl #define NSCD_SMF_SVC_INDEX(i) _nscd_cfg_smf_services[i].index 260cb5caa98Sdjl #define NSCD_SMF_SVC_STATE(i) nscd_smf_service_state[i].src_state 261cb5caa98Sdjl #define NSCD_SW_CFG_G nscd_switch_cfg_g 262cb5caa98Sdjl #define NSCD_SW_CFG(i) nscd_switch_cfg[i] 263cb5caa98Sdjl #define NSCD_SW_STATS_G nscd_switch_stats_g 264cb5caa98Sdjl #define NSCD_SW_STATS(i) nscd_switch_stats[i] 265cb5caa98Sdjl 266cb5caa98Sdjl /* 267cb5caa98Sdjl * special service states used by the switch engine 268cb5caa98Sdjl */ 269cb5caa98Sdjl #define NSCD_SVC_STATE_UNINITED -1 270d2ba247cSmichen #define NSCD_SVC_STATE_FOREIGN_SRC -2 271d2ba247cSmichen #define NSCD_SVC_STATE_UNSUPPORTED_SRC -3 272cb5caa98Sdjl 273cb5caa98Sdjl /* 274cb5caa98Sdjl * prototypes 275cb5caa98Sdjl */ 276cb5caa98Sdjl 277cb5caa98Sdjl void 278cb5caa98Sdjl _nscd_put_nsw_state( 279cb5caa98Sdjl nscd_nsw_state_t *s); 280cb5caa98Sdjl 281cb5caa98Sdjl void 282cb5caa98Sdjl _nscd_put_nsw_state_thread( 283cb5caa98Sdjl nscd_nsw_state_t *s); 284cb5caa98Sdjl 285cb5caa98Sdjl nscd_rc_t 286cb5caa98Sdjl _nscd_get_nsw_state( 287cb5caa98Sdjl nss_db_root_t *rootp, 288cb5caa98Sdjl nscd_nsw_params_t *params); 289cb5caa98Sdjl 290cb5caa98Sdjl nscd_rc_t 291cb5caa98Sdjl _nscd_get_nsw_state_thread( 292cb5caa98Sdjl nss_db_root_t *rootp, 293cb5caa98Sdjl nscd_nsw_params_t *params); 294cb5caa98Sdjl 295cb5caa98Sdjl nscd_rc_t 296cb5caa98Sdjl _nscd_init_all_nsw_state_base(); 297cb5caa98Sdjl 298cb5caa98Sdjl nscd_rc_t 299cb5caa98Sdjl _nscd_init_nsw_state_base( 300cb5caa98Sdjl int dbi, 301ad0e80f7Smichen int compat_basei, 302cb5caa98Sdjl int lock); 303cb5caa98Sdjl 304cb5caa98Sdjl nscd_rc_t 305cb5caa98Sdjl _nscd_init_all_getent_ctx(); 306cb5caa98Sdjl 307cb5caa98Sdjl nscd_rc_t 308cb5caa98Sdjl _nscd_init_getent_ctx_base( 309cb5caa98Sdjl int dbi, 310cb5caa98Sdjl int lock); 311cb5caa98Sdjl 312cb5caa98Sdjl nscd_db_t 313cb5caa98Sdjl *_nscd_create_getent_ctxaddrDB(); 314cb5caa98Sdjl 315cb5caa98Sdjl nscd_rc_t 316cb5caa98Sdjl _nscd_get_getent_ctx( 317cb5caa98Sdjl nss_getent_t *contextpp, 318cb5caa98Sdjl nscd_nsw_params_t *params); 319cb5caa98Sdjl 320cb5caa98Sdjl void 321cb5caa98Sdjl _nscd_put_getent_ctx( 322cb5caa98Sdjl nscd_getent_context_t *ctx); 32329836b19Smichen void 32429836b19Smichen _nscd_free_ctx_if_aborted( 32529836b19Smichen nscd_getent_context_t *ctx); 326cb5caa98Sdjl 3276392794bSMichen Chang int 3286392794bSMichen Chang _nscd_is_getent_ctx_in_use( 3296392794bSMichen Chang nscd_getent_context_t *ctx); 3306392794bSMichen Chang 331cb5caa98Sdjl nscd_rc_t 332cb5caa98Sdjl _nscd_init_all_nsw_config(); 333cb5caa98Sdjl 334cb5caa98Sdjl nscd_rc_t 335cb5caa98Sdjl _nscd_init_all_nsw_be_info_db(); 336cb5caa98Sdjl 337cb5caa98Sdjl #ifdef NSCD_NSSWITCH_CONF_FROM_SMF_PROP 338cb5caa98Sdjl nscd_rc_t 339cb5caa98Sdjl _nscd_get_new_nsw_config( 340cb5caa98Sdjl scf_handle_t *hndl, 341cb5caa98Sdjl const char *fmri, 342cb5caa98Sdjl scf_propertygroup_t *pg); 343cb5caa98Sdjl #endif 344cb5caa98Sdjl 345cb5caa98Sdjl nscd_rc_t 346cb5caa98Sdjl _nscd_get_new_service_state( 347cb5caa98Sdjl int index, 348cb5caa98Sdjl scf_handle_t *hndl, 349cb5caa98Sdjl scf_property_t *prop); 350cb5caa98Sdjl 351cb5caa98Sdjl nscd_getent_context_t * 352cb5caa98Sdjl _nscd_is_getent_ctx( 353e37190e5Smichen nscd_cookie_num_t cookie_num); 354cb5caa98Sdjl 355cb5caa98Sdjl nscd_rc_t 356cb5caa98Sdjl _nscd_create_sw_struct( 357cb5caa98Sdjl int dbi, 358ad0e80f7Smichen int compat_basei, 359cb5caa98Sdjl const char *dbn, 360cb5caa98Sdjl const char *cfgstr, 361cb5caa98Sdjl void *swcfgv1, 362cb5caa98Sdjl nscd_nsw_params_t *params); 363cb5caa98Sdjl 364cb5caa98Sdjl nscd_rc_t 365cb5caa98Sdjl _nscd_create_new_config( 366cb5caa98Sdjl nscd_nsw_params_t *params); 367cb5caa98Sdjl 368cb5caa98Sdjl void 369cb5caa98Sdjl _nscd_free_nsw_config( 370cb5caa98Sdjl nscd_nsw_config_t *nswcfg); 371cb5caa98Sdjl 372cb5caa98Sdjl nscd_rc_t 373cb5caa98Sdjl _nscd_init_smf_monitor(); 374cb5caa98Sdjl 375cb5caa98Sdjl nscd_rc_t 376cb5caa98Sdjl _nscd_alloc_nsw_config(); 377cb5caa98Sdjl 378cb5caa98Sdjl nscd_rc_t 379cb5caa98Sdjl _nscd_alloc_service_state_table(); 380cb5caa98Sdjl 381cb5caa98Sdjl nscd_rc_t 382cb5caa98Sdjl _nscd_alloc_nsw_state_base(); 383cb5caa98Sdjl 384cb5caa98Sdjl nscd_rc_t 385cb5caa98Sdjl _nscd_alloc_nsw_be_info_db(); 386cb5caa98Sdjl 387cb5caa98Sdjl nscd_rc_t 388cb5caa98Sdjl _nscd_alloc_getent_ctx_base(); 389cb5caa98Sdjl 390cb5caa98Sdjl void 391cb5caa98Sdjl _nscd_free_all_nsw_state_base(); 392cb5caa98Sdjl 393cb5caa98Sdjl void 394cb5caa98Sdjl _nscd_free_all_getent_ctx_base(); 395cb5caa98Sdjl 396cb5caa98Sdjl void 397cb5caa98Sdjl _nscd_free_all_nsw_config(); 398cb5caa98Sdjl 399cb5caa98Sdjl void 400cb5caa98Sdjl _nscd_free_all_nsw_backend_info_db(); 401cb5caa98Sdjl 402cb5caa98Sdjl struct __nsw_switchconfig_v1 * 403cb5caa98Sdjl _nsw_getoneconfig_v1( 404cb5caa98Sdjl const char *name, 405cb5caa98Sdjl char *linep, 406cb5caa98Sdjl enum __nsw_parse_err *errp); 407cb5caa98Sdjl int 408cb5caa98Sdjl __nsw_freeconfig_v1( 409cb5caa98Sdjl struct __nsw_switchconfig_v1 *conf); 410cb5caa98Sdjl 411cb5caa98Sdjl int 412cb5caa98Sdjl _nscd_get_smf_state(int srci, int dbi, int recheck); 413cb5caa98Sdjl 414cb5caa98Sdjl void 415cb5caa98Sdjl nss_psearch(void *buffer, size_t length); 416cb5caa98Sdjl void 417cb5caa98Sdjl nss_psetent(void *buffer, size_t length, pid_t pid); 418cb5caa98Sdjl void 419cb5caa98Sdjl nss_pgetent(void *buffer, size_t length); 420cb5caa98Sdjl void 421cb5caa98Sdjl nss_pendent(void *buffer, size_t length); 422cb5caa98Sdjl void 423cb5caa98Sdjl nss_pdelete(void *buffer, size_t length); 424cb5caa98Sdjl 425cb5caa98Sdjl nscd_rc_t _nscd_alloc_switch_cfg(); 426cb5caa98Sdjl nscd_rc_t _nscd_alloc_switch_stats(); 427cb5caa98Sdjl nscd_db_t *_nscd_create_getent_ctx_addrDB(); 428cb5caa98Sdjl nscd_db_t *_nscd_create_getent_ctxDB(); 429cb5caa98Sdjl 430cb5caa98Sdjl #ifdef __cplusplus 431cb5caa98Sdjl } 432cb5caa98Sdjl #endif 433cb5caa98Sdjl 434cb5caa98Sdjl #endif /* _NSCD_SWITCH_H */ 435