summaryrefslogtreecommitdiffstats
path: root/newlib/libc/sys/linux/net/nsdispatch.3
blob: 708f97cba82404b910f757287d7e45479dc64bf8 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
NSDISPATCH(3)                      BSD Library Functions Manual                     NSDISPATCH(3)

NAME
     nsdispatch -- name-service switch dispatcher routine

LIBRARY
     Standard C Library (libc, -lc)

SYNOPSIS
     #include <nsswitch.h>

     int
     nsdispatch(void *retval, const ns_dtab dtab[], const char *database, const char *method,
         const ns_src defaults[], ...);

DESCRIPTION
     The nsdispatch() function invokes the callback functions specified in dtab in the order
     given in /etc/nsswitch.conf for the database database until a successful entry is found.

     retval is passed to each callback function to modify as necessary (to pass back to the
     caller of nsdispatch())

     dtab is an array of ns_dtab structures, which have the following format:

           typedef struct {
                   const char *src;
                   int (*cb)(void *retval, void *cb_data, va_list ap);
                   void *cb_data;
           } ns_dtab;

           For each source type that is implemented, an entry with src set to the name of the
           source, cb defined as a function which handles that source, and cb_data is used to
           pass arbritrary data to the callback function.  The last entry in dtab should contain
           NULL values for src, cb, and cb_data.

     method is usually the name of the function calling nsdispatch().  When dynamic loading is
     supported, a symbol constructed from database, the current source, and method will be used
     as the name to invoke the dynamically loaded function.

     defaults contains a list of default sources to try in the case of a missing or corrupt
     nsswitch.conf(5), or if there isn't a relevant entry for database.  It is an array of ns_src
     structures, which have the following format:

           typedef struct {
                   const char *src;
                   u_int32_t flags;
           } ns_src;

           For each default source type, an entry with src set to the name of the source, and
           flags set to the relevant flags (usually NS_SUCCESS; refer to Callback return values
           for more information).  The last entry in defaults should have src set to NULL and
           flags set to 0.

           For convenience, a global variable defined as:
                 extern const ns_src __nsdefaultsrc[];
           exists which contains a single default entry for 'files' for use by callers which
           don't require complicated default rules.

     '...' are optional extra arguments, which are passed to the appropriate callback function as
     a variable argument list of the type va_list.

   Valid source types
     Whilst there is support for arbitrary sources, the following #defines for commonly implemen-
     tated sources are available:

           #define      value
           NSSRC_FILES  "files"
           NSSRC_DNS    "dns"
           NSSRC_NIS    "nis"
           NSSRC_COMPAT "compat"

     Refer to nsswitch.conf(5) for a complete description of what each source type is.

   Callback return values
     The callback functions should return one of the following values depending upon status of
     the lookup:

           Return value   Status code
           NS_SUCCESS     success
           NS_NOTFOUND    notfound
           NS_UNAVAIL     unavail
           NS_TRYAGAIN    tryagain

     Refer to nsswitch.conf(5) for a complete description of what each status code is.

     nsdispatch returns the value of the callback that caused the dispatcher to finish, or
     NS_NOTFOUND otherwise.

SEE ALSO
     hesiod(3), stdarg(3), ypclnt(3), nsswitch.conf(5)

HISTORY
     The nsdispatch routines first appeared in FreeBSD 4.1.  They were imported from the NetBSD
     Project, where they appeared first in NetBSD 1.4.

AUTHORS
     Luke Mewburn <lukem@netbsd.org> wrote this freely distributable name-service switch imple-
     mentation, using ideas from the ULTRIX svc.conf(5) and Solaris nsswitch.conf(4) manual
     pages.

BUGS
     The nsdispatch routines are not thread safe.  This will be rectified in the future.

     Currently there is no support for dynamically loadable dispatcher callback functions.  It is
     anticipated that this will be added in the future in the back-end without requiring changes
     to code that invokes nsdispatch().

BSD                                      January 19, 1999                                     BSD