1 |
207 |
jeremybenn |
/* 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)
|