1 /* Copyright (C) 1996-2022 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
DB_LOOKUP_FCT(nss_action_list * ni,const char * fct_name,const char * fct2_name,void ** fctp)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)
65