xref: /freebsd/lib/libc/net/nsdispatch.3 (revision c2d03ea87913b49c09051746bb4ab5b45c80c49a)
1248aee62SJacques Vidrine.\"	$NetBSD: nsdispatch.3,v 1.8 1999/03/22 19:44:53 garbled Exp $
2248aee62SJacques Vidrine.\"	$FreeBSD$
3248aee62SJacques Vidrine.\"
4248aee62SJacques Vidrine.\" Copyright (c) 1997, 1998, 1999 The NetBSD Foundation, Inc.
5248aee62SJacques Vidrine.\" All rights reserved.
6248aee62SJacques Vidrine.\"
7248aee62SJacques Vidrine.\" This code is derived from software contributed to The NetBSD Foundation
8248aee62SJacques Vidrine.\" by Luke Mewburn.
9248aee62SJacques Vidrine.\"
10248aee62SJacques Vidrine.\" Redistribution and use in source and binary forms, with or without
11248aee62SJacques Vidrine.\" modification, are permitted provided that the following conditions
12248aee62SJacques Vidrine.\" are met:
13248aee62SJacques Vidrine.\" 1. Redistributions of source code must retain the above copyright
14248aee62SJacques Vidrine.\"    notice, this list of conditions and the following disclaimer.
15248aee62SJacques Vidrine.\" 2. Redistributions in binary form must reproduce the above copyright
16248aee62SJacques Vidrine.\"    notice, this list of conditions and the following disclaimer in the
17248aee62SJacques Vidrine.\"    documentation and/or other materials provided with the distribution.
18248aee62SJacques Vidrine.\" 3. All advertising materials mentioning features or use of this software
19248aee62SJacques Vidrine.\"    must display the following acknowledgement:
20248aee62SJacques Vidrine.\"        This product includes software developed by the NetBSD
21248aee62SJacques Vidrine.\"        Foundation, Inc. and its contributors.
22248aee62SJacques Vidrine.\" 4. Neither the name of The NetBSD Foundation nor the names of its
23248aee62SJacques Vidrine.\"    contributors may be used to endorse or promote products derived
24248aee62SJacques Vidrine.\"    from this software without specific prior written permission.
25248aee62SJacques Vidrine.\"
26248aee62SJacques Vidrine.\" THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
27248aee62SJacques Vidrine.\" ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
28248aee62SJacques Vidrine.\" TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
29248aee62SJacques Vidrine.\" PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
30248aee62SJacques Vidrine.\" BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
31248aee62SJacques Vidrine.\" CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
32248aee62SJacques Vidrine.\" SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
33248aee62SJacques Vidrine.\" INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
34248aee62SJacques Vidrine.\" CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
35248aee62SJacques Vidrine.\" ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
36248aee62SJacques Vidrine.\" POSSIBILITY OF SUCH DAMAGE.
37248aee62SJacques Vidrine.\"
38248aee62SJacques Vidrine.Dd January 19, 1999
39248aee62SJacques Vidrine.Dt NSDISPATCH 3
40248aee62SJacques Vidrine.Os
41248aee62SJacques Vidrine.Sh NAME
42248aee62SJacques Vidrine.Nm nsdispatch
43248aee62SJacques Vidrine.Nd name-service switch dispatcher routine
44248aee62SJacques Vidrine.Sh LIBRARY
45248aee62SJacques Vidrine.Lb libc
46248aee62SJacques Vidrine.Sh SYNOPSIS
47248aee62SJacques Vidrine.Fd #include <nsswitch.h>
48248aee62SJacques Vidrine.Ft int
49248aee62SJacques Vidrine.Fo nsdispatch
50248aee62SJacques Vidrine.Fa "void *retval"
51248aee62SJacques Vidrine.Fa "const ns_dtab dtab[]"
52248aee62SJacques Vidrine.Fa "const char *database"
53248aee62SJacques Vidrine.Fa "const char *method"
54248aee62SJacques Vidrine.Fa "const ns_src defaults[]"
55248aee62SJacques Vidrine.Fa "..."
56248aee62SJacques Vidrine.Fc
57248aee62SJacques Vidrine.Sh DESCRIPTION
58248aee62SJacques VidrineThe
59248aee62SJacques Vidrine.Fn nsdispatch
60248aee62SJacques Vidrinefunction invokes the callback functions specified in
61248aee62SJacques Vidrine.Va dtab
62248aee62SJacques Vidrinein the order given in
63248aee62SJacques Vidrine.Pa /etc/nsswitch.conf
64248aee62SJacques Vidrinefor the database
65248aee62SJacques Vidrine.Va database
66248aee62SJacques Vidrineuntil a successful entry is found.
67248aee62SJacques Vidrine.Pp
68248aee62SJacques Vidrine.Va retval
69248aee62SJacques Vidrineis passed to each callback function to modify as necessary
70248aee62SJacques Vidrine(to pass back to the caller of
71248aee62SJacques Vidrine.Fn nsdispatch )
72248aee62SJacques Vidrine.Pp
73248aee62SJacques Vidrine.Va dtab
74248aee62SJacques Vidrineis an array of
75248aee62SJacques Vidrine.Va ns_dtab
76248aee62SJacques Vidrinestructures, which have the following format:
77248aee62SJacques Vidrine.Bd -literal -offset indent
78248aee62SJacques Vidrinetypedef struct {
79248aee62SJacques Vidrine	const char *src;
80248aee62SJacques Vidrine	int (*cb)(void *retval, void *cb_data, va_list ap);
81248aee62SJacques Vidrine	void *cb_data;
82248aee62SJacques Vidrine} ns_dtab;
83248aee62SJacques Vidrine.Ed
84248aee62SJacques Vidrine.Pp
85248aee62SJacques Vidrine.Bd -ragged -offset indent
86248aee62SJacques VidrineFor each source type that is implemented, an entry with
87248aee62SJacques Vidrine.Va src
88248aee62SJacques Vidrineset to the name of the source,
89248aee62SJacques Vidrine.Va cb
90248aee62SJacques Vidrinedefined as a function which handles that source, and
91248aee62SJacques Vidrine.Va cb_data
92248aee62SJacques Vidrineis used to pass arbritrary data to the callback function.
93248aee62SJacques VidrineThe last entry in
94248aee62SJacques Vidrine.Va dtab
95248aee62SJacques Vidrineshould contain
96248aee62SJacques Vidrine.Dv NULL
97248aee62SJacques Vidrinevalues for
98248aee62SJacques Vidrine.Va src ,
99248aee62SJacques Vidrine.Va cb ,
100248aee62SJacques Vidrineand
101248aee62SJacques Vidrine.Va cb_data .
102248aee62SJacques Vidrine.Ed
103248aee62SJacques Vidrine.Pp
104248aee62SJacques Vidrine.Va method
105248aee62SJacques Vidrineis usually the name of the function calling
106248aee62SJacques Vidrine.Fn nsdispatch .
107248aee62SJacques VidrineWhen dynamic loading is supported, a symbol constructed from
108248aee62SJacques Vidrine.Va database ,
109248aee62SJacques Vidrinethe current source, and
110248aee62SJacques Vidrine.Va method
111248aee62SJacques Vidrinewill be used as the name to invoke the dynamically loaded function.
112248aee62SJacques Vidrine.Pp
113248aee62SJacques Vidrine.Va defaults
114248aee62SJacques Vidrinecontains a list of default sources to try in the case of
115248aee62SJacques Vidrinea missing or corrupt
116248aee62SJacques Vidrine.Xr nsswitch.conf 5 ,
117248aee62SJacques Vidrineor if there isn't a relevant entry for
118248aee62SJacques Vidrine.Va database .
119248aee62SJacques VidrineIt is an array of
120248aee62SJacques Vidrine.Va ns_src
121248aee62SJacques Vidrinestructures, which have the following format:
122248aee62SJacques Vidrine.Bd -literal -offset indent
123248aee62SJacques Vidrinetypedef struct {
124248aee62SJacques Vidrine	const char *src;
125248aee62SJacques Vidrine	u_int32_t flags;
126248aee62SJacques Vidrine} ns_src;
127248aee62SJacques Vidrine.Ed
128248aee62SJacques Vidrine.Pp
129248aee62SJacques Vidrine.Bd -ragged -offset indent
130248aee62SJacques VidrineFor each default source type, an entry with
131248aee62SJacques Vidrine.Va src
132248aee62SJacques Vidrineset to the name of the source, and
133248aee62SJacques Vidrine.Va flags
134248aee62SJacques Vidrineset to the relevant flags
135248aee62SJacques Vidrine(usually
136248aee62SJacques Vidrine.Dv NS_SUCCESS ;
137248aee62SJacques Vidrinerefer to
138248aee62SJacques Vidrine.Sx Callback return values
139248aee62SJacques Vidrinefor more information).
140248aee62SJacques VidrineThe last entry in
141248aee62SJacques Vidrine.Va defaults
142248aee62SJacques Vidrineshould have
143248aee62SJacques Vidrine.Va src
144248aee62SJacques Vidrineset to
145248aee62SJacques Vidrine.Dv NULL
146248aee62SJacques Vidrineand
147248aee62SJacques Vidrine.Va flags
148248aee62SJacques Vidrineset to 0.
149248aee62SJacques Vidrine.Pp
150248aee62SJacques VidrineFor convenience, a global variable defined as:
151248aee62SJacques Vidrine.Dl extern const ns_src __nsdefaultsrc[];
152248aee62SJacques Vidrineexists which contains a single default entry for
153248aee62SJacques Vidrine.Sq files
154248aee62SJacques Vidrinefor use by callers which don't require complicated default rules.
155248aee62SJacques Vidrine.Ed
156248aee62SJacques Vidrine.Pp
157c2d03ea8SRuslan Ermilov.Sq Va ...
158248aee62SJacques Vidrineare optional extra arguments, which
159248aee62SJacques Vidrineare passed to the appropriate callback function as a variable argument
160248aee62SJacques Vidrinelist of the type
161248aee62SJacques Vidrine.Va va_list .
162248aee62SJacques Vidrine.Ss Valid source types
163248aee62SJacques VidrineWhilst there is support for arbitrary sources, the following
164248aee62SJacques Vidrine#defines for commonly implementated sources are available:
165248aee62SJacques Vidrine.Bl -column NS_COMPAT COMPAT -offset indent
16642635956SRuslan Ermilov.It Sy "#define	value"
16742635956SRuslan Ermilov.It "NSSRC_FILES	""files"""
16842635956SRuslan Ermilov.It "NSSRC_DNS	""dns"""
16942635956SRuslan Ermilov.It "NSSRC_NIS	""nis"""
17042635956SRuslan Ermilov.It "NSSRC_COMPAT	""compat"""
171248aee62SJacques Vidrine.El
172248aee62SJacques Vidrine.Pp
173248aee62SJacques VidrineRefer to
174248aee62SJacques Vidrine.Xr nsswitch.conf 5
175248aee62SJacques Vidrinefor a complete description of what each source type is.
176248aee62SJacques Vidrine.Pp
177248aee62SJacques Vidrine.Ss Callback return values
178248aee62SJacques VidrineThe callback functions should return one of the following values
179248aee62SJacques Vidrinedepending upon status of the lookup:
180248aee62SJacques Vidrine.Bl -column NS_NOTFOUND -offset indent
18142635956SRuslan Ermilov.It Sy "Return value	Status code"
18242635956SRuslan Ermilov.It "NS_SUCCESS	success"
18342635956SRuslan Ermilov.It "NS_NOTFOUND	notfound"
18442635956SRuslan Ermilov.It "NS_UNAVAIL	unavail"
18542635956SRuslan Ermilov.It "NS_TRYAGAIN	tryagain"
186248aee62SJacques Vidrine.El
187248aee62SJacques Vidrine.Pp
188248aee62SJacques VidrineRefer to
189248aee62SJacques Vidrine.Xr nsswitch.conf 5
190248aee62SJacques Vidrinefor a complete description of what each status code is.
191248aee62SJacques Vidrine.Pp
192248aee62SJacques Vidrine.Nm
193248aee62SJacques Vidrinereturns the value of the callback that caused the dispatcher to finish,
194248aee62SJacques Vidrineor NS_NOTFOUND otherwise.
195248aee62SJacques Vidrine.Sh SEE ALSO
196248aee62SJacques Vidrine.Xr hesiod 3 ,
197248aee62SJacques Vidrine.Xr stdarg 3 ,
198248aee62SJacques Vidrine.Xr ypclnt 3 ,
199248aee62SJacques Vidrine.Xr nsswitch.conf 5
200248aee62SJacques Vidrine.Sh HISTORY
201248aee62SJacques VidrineThe
202248aee62SJacques Vidrine.Nm
203248aee62SJacques Vidrineroutines first appeared in
204248aee62SJacques Vidrine.Fx 4.1 .
205248aee62SJacques VidrineThey were imported from the
206248aee62SJacques Vidrine.Nx
207248aee62SJacques VidrineProject,
208248aee62SJacques Vidrinewhere they appeared first in
209248aee62SJacques Vidrine.Nx 1.4 .
210248aee62SJacques Vidrine.Sh AUTHORS
211248aee62SJacques VidrineLuke Mewburn
212248aee62SJacques Vidrine.Aq lukem@netbsd.org
213248aee62SJacques Vidrinewrote this freely distributable name-service switch implementation,
214248aee62SJacques Vidrineusing ideas from the
215248aee62SJacques Vidrine.Tn ULTRIX
216248aee62SJacques Vidrine.Xr svc.conf 5
217248aee62SJacques Vidrineand
218248aee62SJacques Vidrine.Tn Solaris
219248aee62SJacques Vidrine.Xr nsswitch.conf 4
220248aee62SJacques Vidrinemanual pages.
221248aee62SJacques Vidrine.Sh BUGS
222248aee62SJacques VidrineThe
223248aee62SJacques Vidrine.Nm
224248aee62SJacques Vidrineroutines are not thread safe.
225248aee62SJacques VidrineThis will be rectified in the future.
226248aee62SJacques Vidrine.Pp
227248aee62SJacques VidrineCurrently there is no support for dynamically loadable dispatcher callback
228248aee62SJacques Vidrinefunctions.
229248aee62SJacques VidrineIt is anticipated that this will be added in the future in the back-end
230248aee62SJacques Vidrinewithout requiring changes to code that invokes
231248aee62SJacques Vidrine.Fn nsdispatch .
232