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 2014 Garrett D'Amore <garrett@damore.org>
  23  *
  24  * Copyright 2006 Sun Microsystems, Inc.  All rights reserved.
  25  * Use is subject to license terms.
  26  */
  27 
  28 /*
  29  * nsswitch.h
  30  *
  31  * Low-level interface to the name-service switch.  The interface defined
  32  * in <nss_common.h> should be used in preference to this.
  33  *
  34  * This is a Project Private interface.  It may change in future releases.
  35  */
  36 
  37 #ifndef _NSSWITCH_H
  38 #define _NSSWITCH_H
  39 
  40 #ifdef  __cplusplus
  41 extern "C" {
  42 #endif
  43 
  44 #ifndef __NSW_CONFIG_FILE
  45 #define __NSW_CONFIG_FILE       "/etc/nsswitch.conf"
  46 #endif
  47 #define __NSW_DEFAULT_FILE      "/etc/default/nss"
  48 
  49 #define __NSW_HOSTS_DB          "hosts"
  50 #define __NSW_PASSWD_DB         "passwd"
  51 #define __NSW_GROUP_DB          "group"
  52 #define __NSW_NETGROUP_DB       "netgroup"
  53 #define __NSW_NETWORKS_DB       "networks"
  54 #define __NSW_PROTOCOLS_DB      "protocols"
  55 #define __NSW_RPC_DB            "rpc"
  56 #define __NSW_SERVICES_DB       "services"
  57 #define __NSW_ETHERS_DB         "ethers"
  58 #define __NSW_BOOTPARAMS_DB     "bootparams"
  59 #define __NSW_NETMASKS_DB       "netmasks"
  60 #define __NSW_BROADCASTADDRS_DB "broadcastaddrs"
  61 #define __NSW_MAIL_ALIASES_DB   "aliases"
  62 #define __NSW_AUDITUSER_DB      "audit_user"
  63 #define __NSW_AUTHATTR_DB       "auth_attr"
  64 #define __NSW_EXECATTR_DB       "exec_attr"
  65 #define __NSW_PROFATTR_DB       "prof_attr"
  66 #define __NSW_USERATTR_DB       "user_attr"
  67 #define __NSW_PROJECT_DB        "project"
  68 
  69 #define __NSW_STD_ERRS  4       /* number of reserved errors that follow */
  70 
  71 #define __NSW_SUCCESS   0       /* found the required data */
  72 #define __NSW_NOTFOUND  1       /* the naming service returned lookup failure */
  73 #define __NSW_UNAVAIL   2       /* could not call the naming service */
  74 #define __NSW_TRYAGAIN  3       /* bind error to suggest a retry */
  75 
  76 typedef unsigned char action_t;
  77 #define __NSW_CONTINUE  0       /* the action is to continue to next service */
  78 #define __NSW_RETURN    1       /* the action is to return to the user */
  79 
  80 #define __NSW_STR_RETURN        "return"
  81 #define __NSW_STR_CONTINUE      "continue"
  82 #define __NSW_STR_SUCCESS       "success"
  83 #define __NSW_STR_NOTFOUND      "notfound"
  84 #define __NSW_STR_UNAVAIL       "unavail"
  85 #define __NSW_STR_TRYAGAIN      "tryagain"
  86 
  87 /* prefix for all switch shared objects */
  88 #define __NSW_LIB       "nsw"
  89 
  90 enum __nsw_parse_err {
  91         __NSW_CONF_PARSE_SUCCESS = 0,   /* parser found the required policy */
  92         __NSW_CONF_PARSE_NOFILE = 1,    /* the policy files does not exist */
  93         __NSW_CONF_PARSE_NOPOLICY = 2,  /* the required policy is not set */
  94                                         /* in the file */
  95         __NSW_CONF_PARSE_SYSERR = 3     /* system error in the parser */
  96 };
  97 
  98 
  99 struct __nsw_long_err {
 100         int nsw_errno;
 101         action_t action;
 102         struct __nsw_long_err *next;
 103 };
 104 
 105 struct __nsw_lookup {
 106         char *service_name;
 107         action_t actions[__NSW_STD_ERRS];
 108         struct __nsw_long_err *long_errs;
 109         struct __nsw_lookup *next;
 110 };
 111 
 112 struct __nsw_switchconfig {
 113         int vers;
 114         char *dbase;
 115         int num_lookups;
 116         struct __nsw_lookup *lookups;
 117 };
 118 
 119 #define __NSW_ACTION(lkp, err)  \
 120         ((lkp)->next == NULL ? \
 121                 __NSW_RETURN \
 122         : \
 123                 ((err) >= 0 && (err) < __NSW_STD_ERRS ? \
 124                         (lkp)->actions[err] \
 125                 : \
 126                         __nsw_extended_action(lkp, err)))
 127 
 128 struct __nsw_switchconfig *__nsw_getconfig
 129         (const char *, enum __nsw_parse_err *);
 130 int __nsw_freeconfig(struct __nsw_switchconfig *);
 131 action_t __nsw_extended_action(struct __nsw_lookup *, int);
 132 
 133 #ifdef  __cplusplus
 134 }
 135 #endif
 136 
 137 #endif /* _NSSWITCH_H */