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  * nss_netdir.h
  30  *
  31  * Defines structures that are shared between the OSNET-private
  32  * _get_hostserv_inetnetdir_byYY() interfaces and the public
  33  * interfaces gethostbyYY()/getservbyYY() and netdir_getbyYY().
  34  * Ideally, this header file should never be visible to developers
  35  * outside of the OSNET build.
  36  */
  37 
  38 #ifndef _NSS_NETDIR_H
  39 #define _NSS_NETDIR_H
  40 
  41 #ifdef  __cplusplus
  42 extern "C" {
  43 #endif
  44 
  45 typedef enum {
  46         NSS_HOST,
  47         NSS_SERV,
  48         NETDIR_BY,
  49         NETDIR_BY_NOSRV,                /* bypass service lookup */
  50         NETDIR_BY6,
  51         NETDIR_BY_NOSRV6,               /* bypass service lookup */
  52         NSS_HOST6
  53 } nss_netdir_op_t;
  54 
  55 struct nss_netdirbyname_in {
  56         nss_netdir_op_t op_t;
  57         union {
  58                 struct nd_hostserv *nd_hs;
  59                 union {
  60                         struct {
  61                                 const char      *name;
  62                                 char    *buf;
  63                                 int     buflen;
  64                         } host;
  65                         struct {
  66                                 const char      *name;
  67                                 char    *buf;
  68                                 int     buflen;
  69                                 int     af_family;      /* for ipnode */
  70                                 int     flags;          /* for ipnode */
  71                         } host6;
  72                         struct {
  73                                 const char      *name;
  74                                 const char      *proto;
  75                                 char    *buf;
  76                                 int     buflen;
  77                         } serv;
  78                 } nss;
  79         } arg;
  80 };
  81 
  82 union nss_netdirbyname_out {
  83         struct nd_addrlist **nd_alist;
  84         union {
  85                 struct {
  86                         struct hostent *hent;
  87                         int     *herrno_p;
  88                 } host;
  89                 struct servent *serv;
  90         } nss;
  91 };
  92 
  93 struct nss_netdirbyaddr_in {
  94         nss_netdir_op_t op_t;
  95         union {
  96                 struct netbuf *nd_nbuf;
  97                 union {
  98                         struct {
  99                                 const char      *addr;
 100                                 int     len;
 101                                 int     type;
 102                                 char    *buf;
 103                                 int     buflen;
 104                         } host;
 105                         struct {
 106                                 int     port;
 107                                 const char      *proto;
 108                                 char    *buf;
 109                                 int     buflen;
 110                         } serv;
 111                 } nss;
 112         } arg;
 113 };
 114 
 115 union nss_netdirbyaddr_out {
 116         struct nd_hostservlist **nd_hslist;
 117         union {
 118                 struct {
 119                         struct hostent *hent;
 120                         int     *herrno_p;
 121                 } host;
 122                 struct servent *serv;
 123         } nss;
 124 };
 125 
 126 int __classic_netdir_getbyname(struct netconfig *,
 127                 struct nd_hostserv *, struct nd_addrlist **);
 128 int __classic_netdir_getbyaddr(struct netconfig *,
 129                 struct nd_hostservlist **, struct netbuf *);
 130 int _get_hostserv_inetnetdir_byname(struct netconfig *,
 131                 struct nss_netdirbyname_in *, union nss_netdirbyname_out *);
 132 int _get_hostserv_inetnetdir_byaddr(struct netconfig *,
 133                 struct nss_netdirbyaddr_in *, union nss_netdirbyaddr_out *);
 134 int __inet_netdir_options(struct netconfig *,
 135                 int option, int fd, char *par);
 136 struct netbuf *__inet_uaddr2taddr(struct netconfig *, char *);
 137 char *__inet_taddr2uaddr(struct netconfig *, struct netbuf *);
 138 
 139 #ifdef  __cplusplus
 140 }
 141 #endif
 142 
 143 #endif /* _NSS_NETDIR_H */