(root)/
glibc-2.38/
nss/
XXX-lookup.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 <assert.h>
      19  #include "nsswitch.h"
      20  
      21  /*******************************************************************\
      22  |* Here we assume one symbol to be defined:			   *|
      23  |* 								   *|
      24  |* DATABASE_NAME - name of the database the function accesses	   *|
      25  |*		   (e.g., hosts, services, ...)			   *|
      26  |* 								   *|
      27  |* One additional symbol may optionally be defined:		   *|
      28  |* 								   *|
      29  |* ALTERNATE_NAME - name of another service which is examined in   *|
      30  |*                  case DATABASE_NAME is not found                *|
      31  |* 								   *|
      32  |* DEFAULT_CONFIG - string for default conf (e.g. "files dns")	   *|
      33  |* 								   *|
      34  \*******************************************************************/
      35  
      36  #define DB_LOOKUP_FCT CONCAT3_1 (__nss_, DATABASE_NAME, _lookup2)
      37  #define CONCAT3_1(Pre, Name, Post) CONCAT3_2 (Pre, Name, Post)
      38  #define CONCAT3_2(Pre, Name, Post) Pre##Name##Post
      39  
      40  #define DATABASE_NAME_ID CONCAT2_1 (nss_database_, DATABASE_NAME)
      41  #define CONCAT2_1(Pre, Name) CONCAT2_2 (Pre, Name)
      42  #define CONCAT2_2(Pre, Name) Pre##Name
      43  
      44  #define DATABASE_NAME_SYMBOL CONCAT3_1 (__nss_, DATABASE_NAME, _database)
      45  #define DATABASE_NAME_STRING STRINGIFY1 (DATABASE_NAME)
      46  #define STRINGIFY1(Name) STRINGIFY2 (Name)
      47  #define STRINGIFY2(Name) #Name
      48  
      49  int
      50  DB_LOOKUP_FCT (nss_action_list *ni, const char *fct_name, const char *fct2_name,
      51  	       void **fctp)
      52  {
      53    if (! __nss_database_get (DATABASE_NAME_ID, &DATABASE_NAME_SYMBOL))
      54      return -1;
      55  
      56    *ni = DATABASE_NAME_SYMBOL;
      57  
      58    /* We want to know about it if we've somehow got a NULL action list;
      59     in the past, we had bad state if seccomp interfered with setup. */
      60    assert(*ni != NULL);
      61  
      62    return __nss_lookup (ni, fct_name, fct2_name, fctp);
      63  }
      64  libc_hidden_def (DB_LOOKUP_FCT)