(root)/
glibc-2.38/
inet/
netgroup.h
       1  /* Internal header for netgroup related functions.
       2     Copyright (C) 1996-2023 Free Software Foundation, Inc.
       3     This file is part of the GNU C Library.
       4  
       5     The GNU C Library is free software; you can redistribute it and/or
       6     modify it under the terms of the GNU Lesser General Public
       7     License as published by the Free Software Foundation; either
       8     version 2.1 of the License, or (at your option) any later version.
       9  
      10     The GNU C Library is distributed in the hope that it will be useful,
      11     but WITHOUT ANY WARRANTY; without even the implied warranty of
      12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      13     Lesser General Public License for more details.
      14  
      15     You should have received a copy of the GNU Lesser General Public
      16     License along with the GNU C Library; if not, see
      17     <https://www.gnu.org/licenses/>.  */
      18  
      19  #ifndef _NETGROUP_H
      20  #define _NETGROUP_H	1
      21  
      22  #include <nsswitch.h>
      23  
      24  /* A netgroup can consist of names of other netgroups.  We have to
      25     track which netgroups were read and which still have to be read.  */
      26  struct name_list
      27  {
      28    struct name_list *next;
      29    char name[];
      30  };
      31  
      32  
      33  /* Dataset for iterating netgroups.  */
      34  struct __netgrent
      35  {
      36    enum { triple_val, group_val } type;
      37  
      38    union
      39    {
      40      struct
      41      {
      42        const char *host;
      43        const char *user;
      44        const char *domain;
      45      }
      46      triple;
      47  
      48      const char *group;
      49    } val;
      50  
      51    /* Room for the data kept between the calls to the netgroup
      52       functions.  We must avoid global variables.  */
      53    char *data;
      54    size_t data_size;
      55    union
      56    {
      57      char *cursor;
      58      unsigned long int position;
      59    };
      60    int first;
      61  
      62    struct name_list *known_groups;
      63    struct name_list *needed_groups;
      64  
      65    /* This handle for the NSS data base is shared between all
      66       set/get/endXXXent functions.  */
      67    struct nss_action *nip;
      68  };
      69  
      70  
      71  /* The internal netgroup handling functions might be called from outside.  */
      72  extern int __internal_setnetgrent (const char *group,
      73  				   struct __netgrent *datap);
      74  libc_hidden_proto (__internal_setnetgrent)
      75  extern void __internal_endnetgrent (struct __netgrent *datap);
      76  libc_hidden_proto (__internal_endnetgrent)
      77  extern int __internal_getnetgrent_r (char **hostp, char **userp,
      78  				     char **domainp, struct __netgrent *datap,
      79  				     char *buffer, size_t buflen, int *errnop);
      80  libc_hidden_proto (__internal_getnetgrent_r)
      81  
      82  #endif /* netgroup.h */