/* * CDDL HEADER START * * The contents of this file are subject to the terms of the * Common Development and Distribution License (the "License"). * You may not use this file except in compliance with the License. * * You can obtain a copy of the license at usr/src/OPENSOLARIS.LICENSE * or http://www.opensolaris.org/os/licensing. * See the License for the specific language governing permissions * and limitations under the License. * * When distributing Covered Code, include this CDDL HEADER in each * file and include the License file at usr/src/OPENSOLARIS.LICENSE. * If applicable, add the following below this CDDL HEADER, with the * fields enclosed by brackets "[]" replaced with your own identifying * information: Portions Copyright [yyyy] [name of copyright owner] * * CDDL HEADER END */ /* * Copyright 2014 Garrett D'Amore * * Copyright 2006 Sun Microsystems, Inc. All rights reserved. * Use is subject to license terms. */ /* * nsswitch.h * * Low-level interface to the name-service switch. The interface defined * in should be used in preference to this. * * This is a Project Private interface. It may change in future releases. */ #ifndef _NSSWITCH_H #define _NSSWITCH_H #ifdef __cplusplus extern "C" { #endif #ifndef __NSW_CONFIG_FILE #define __NSW_CONFIG_FILE "/etc/nsswitch.conf" #endif #define __NSW_DEFAULT_FILE "/etc/default/nss" #define __NSW_HOSTS_DB "hosts" #define __NSW_PASSWD_DB "passwd" #define __NSW_GROUP_DB "group" #define __NSW_NETGROUP_DB "netgroup" #define __NSW_NETWORKS_DB "networks" #define __NSW_PROTOCOLS_DB "protocols" #define __NSW_RPC_DB "rpc" #define __NSW_SERVICES_DB "services" #define __NSW_ETHERS_DB "ethers" #define __NSW_BOOTPARAMS_DB "bootparams" #define __NSW_NETMASKS_DB "netmasks" #define __NSW_BROADCASTADDRS_DB "broadcastaddrs" #define __NSW_MAIL_ALIASES_DB "aliases" #define __NSW_AUDITUSER_DB "audit_user" #define __NSW_AUTHATTR_DB "auth_attr" #define __NSW_EXECATTR_DB "exec_attr" #define __NSW_PROFATTR_DB "prof_attr" #define __NSW_USERATTR_DB "user_attr" #define __NSW_PROJECT_DB "project" #define __NSW_STD_ERRS 4 /* number of reserved errors that follow */ #define __NSW_SUCCESS 0 /* found the required data */ #define __NSW_NOTFOUND 1 /* the naming service returned lookup failure */ #define __NSW_UNAVAIL 2 /* could not call the naming service */ #define __NSW_TRYAGAIN 3 /* bind error to suggest a retry */ typedef unsigned char action_t; #define __NSW_CONTINUE 0 /* the action is to continue to next service */ #define __NSW_RETURN 1 /* the action is to return to the user */ #define __NSW_STR_RETURN "return" #define __NSW_STR_CONTINUE "continue" #define __NSW_STR_SUCCESS "success" #define __NSW_STR_NOTFOUND "notfound" #define __NSW_STR_UNAVAIL "unavail" #define __NSW_STR_TRYAGAIN "tryagain" /* prefix for all switch shared objects */ #define __NSW_LIB "nsw" enum __nsw_parse_err { __NSW_CONF_PARSE_SUCCESS = 0, /* parser found the required policy */ __NSW_CONF_PARSE_NOFILE = 1, /* the policy files does not exist */ __NSW_CONF_PARSE_NOPOLICY = 2, /* the required policy is not set */ /* in the file */ __NSW_CONF_PARSE_SYSERR = 3 /* system error in the parser */ }; struct __nsw_long_err { int nsw_errno; action_t action; struct __nsw_long_err *next; }; struct __nsw_lookup { char *service_name; action_t actions[__NSW_STD_ERRS]; struct __nsw_long_err *long_errs; struct __nsw_lookup *next; }; struct __nsw_switchconfig { int vers; char *dbase; int num_lookups; struct __nsw_lookup *lookups; }; #define __NSW_ACTION(lkp, err) \ ((lkp)->next == NULL ? \ __NSW_RETURN \ : \ ((err) >= 0 && (err) < __NSW_STD_ERRS ? \ (lkp)->actions[err] \ : \ __nsw_extended_action(lkp, err))) struct __nsw_switchconfig *__nsw_getconfig (const char *, enum __nsw_parse_err *); int __nsw_freeconfig(struct __nsw_switchconfig *); action_t __nsw_extended_action(struct __nsw_lookup *, int); #ifdef __cplusplus } #endif #endif /* _NSSWITCH_H */