(root)/
glibc-2.38/
nss/
nss_files/
files-ethers.c
       1  /* Copyright (C) 1996-2023 Free Software Foundation, Inc.
       2     This file is part of the GNU C Library.
       3  
       4     The GNU C Library is free software; you can redistribute it and/or
       5     modify it under the terms of the GNU Lesser General Public
       6     License as published by the Free Software Foundation; either
       7     version 2.1 of the License, or (at your option) any later version.
       8  
       9     The GNU C Library is distributed in the hope that it will be useful,
      10     but WITHOUT ANY WARRANTY; without even the implied warranty of
      11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
      12     Lesser General Public License for more details.
      13  
      14     You should have received a copy of the GNU Lesser General Public
      15     License along with the GNU C Library; if not, see
      16     <https://www.gnu.org/licenses/>.  */
      17  
      18  #include <string.h>
      19  #include <netinet/ether.h>
      20  #include <netinet/if_ether.h>
      21  #include <nss.h>
      22  
      23  struct etherent_data {};
      24  
      25  #define ENTNAME		etherent
      26  #define DATABASE	"ethers"
      27  #include "files-parse.c"
      28  LINE_PARSER
      29  ("#",
      30   /* Read the ethernet address: 6 x 8bit hexadecimal number.  */
      31   {
      32     size_t cnt;
      33  
      34     for (cnt = 0; cnt < 6; ++cnt)
      35       {
      36         unsigned int number;
      37  
      38         if (cnt < 5)
      39  	 INT_FIELD (number, ISCOLON , 0, 16, (unsigned int))
      40         else
      41  	 INT_FIELD (number, isspace, 1, 16, (unsigned int))
      42  
      43         if (number > 0xff)
      44  	 return 0;
      45         result->e_addr.ether_addr_octet[cnt] = number;
      46       }
      47   };
      48   STRING_FIELD (result->e_name, isspace, 1);
      49   )
      50  
      51  
      52  #include GENERIC
      53  
      54  DB_LOOKUP (hostton, '.', 0, ("%s", name),
      55  	   {
      56  	     if (__strcasecmp (result->e_name, name) == 0)
      57  	       break;
      58  	   }, const char *name)
      59  
      60  DB_LOOKUP (ntohost, '=', 18, ("%x:%x:%x:%x:%x:%x",
      61  			 addr->ether_addr_octet[0], addr->ether_addr_octet[1],
      62  			 addr->ether_addr_octet[2], addr->ether_addr_octet[3],
      63  			 addr->ether_addr_octet[4], addr->ether_addr_octet[5]),
      64  	   {
      65  	     if (memcmp (&result->e_addr, addr,
      66  			 sizeof (struct ether_addr)) == 0)
      67  	       break;
      68  	   }, const struct ether_addr *addr)