
1: /* Copyright (C) 1996, 1997, 1999, 2000, 2002 Free Software Foundation, Inc. 2: This file is part of the GNU C Library. 3: Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996. 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, write to the Free 17: Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 18: 02111-1307 USA. */ 19: 20: #include "nsswitch.h" 21: 22: /*******************************************************************\ 23: |* Here we assume one symbol to be defined: *| 24: |* *| 25: |* DATABASE_NAME - name of the database the function accesses *| 26: |* (e.g., hosts, services, ...) *| 27: |* *| 28: |* One additional symbol may optionally be defined: *| 29: |* *| 30: |* ALTERNATE_NAME - name of another service which is examined in *| 31: |* case DATABASE_NAME is not found *| 32: |* *| 33: |* DEFAULT_CONFIG - string for default conf (e.g. "dns files") *| 34: |* *| 35: \*******************************************************************/ 36: 37: #define DB_LOOKUP_FCT CONCAT3_1 (__nss_, DATABASE_NAME, _lookup) 38: #define CONCAT3_1(Pre, Name, Post) CONCAT3_2 (Pre, Name, Post) 39: #define CONCAT3_2(Pre, Name, Post) Pre##Name##Post 40: 41: #define DATABASE_NAME_SYMBOL CONCAT3_1 (__nss_, DATABASE_NAME, _database) 42: #define DATABASE_NAME_STRING STRINGIFY1 (DATABASE_NAME) 43: #define STRINGIFY1(Name) STRINGIFY2 (Name) 44: #define STRINGIFY2(Name) #Name 45: 46: #ifdef ALTERNATE_NAME 47: #define ALTERNATE_NAME_STRING STRINGIFY1 (ALTERNATE_NAME) 48: #else 49: #define ALTERNATE_NAME_STRING NULL 50: #endif 51: 52: #ifndef DEFAULT_CONFIG 53: #define DEFAULT_CONFIG NULL 54: #endif 55: 56: service_user *DATABASE_NAME_SYMBOL attribute_hidden; 57: 58: extern int DB_LOOKUP_FCT (service_user **ni, const char *fct_name, 59: void **fctp) internal_function; 60: libc_hidden_proto (DB_LOOKUP_FCT) 61: 62: int 63: internal_function 64: DB_LOOKUP_FCT (service_user **ni, const char *fct_name, void **fctp) 65: { 66: if (DATABASE_NAME_SYMBOL == NULL 67: && __nss_database_lookup (DATABASE_NAME_STRING, ALTERNATE_NAME_STRING, 68: DEFAULT_CONFIG, &DATABASE_NAME_SYMBOL) < 0) 69: return -1; 70: 71: *ni = DATABASE_NAME_SYMBOL; 72: 73: return __nss_lookup (ni, fct_name, fctp); 74: } 75: libc_hidden_def (DB_LOOKUP_FCT)