xref: /freebsd/lib/libc/net/nsdispatch.3 (revision 46d93063837e3149b3834e488ddef3befd03b601)
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.\"
3846d93063SJacques Vidrine.Dd April 16, 2003
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
4746d93063SJacques Vidrine.In sys/types.h
4846d93063SJacques Vidrine.In stdarg.h
4932eef9aeSRuslan Ermilov.In nsswitch.h
50248aee62SJacques Vidrine.Ft int
51248aee62SJacques Vidrine.Fo nsdispatch
52248aee62SJacques Vidrine.Fa "void *retval"
53248aee62SJacques Vidrine.Fa "const ns_dtab dtab[]"
54248aee62SJacques Vidrine.Fa "const char *database"
5546d93063SJacques Vidrine.Fa "const char *method_name"
56248aee62SJacques Vidrine.Fa "const ns_src defaults[]"
57248aee62SJacques Vidrine.Fa "..."
58248aee62SJacques Vidrine.Fc
59248aee62SJacques Vidrine.Sh DESCRIPTION
60248aee62SJacques VidrineThe
61248aee62SJacques Vidrine.Fn nsdispatch
6246d93063SJacques Vidrinefunction invokes the methods specified in
63248aee62SJacques Vidrine.Va dtab
6446d93063SJacques Vidrinein the order given by
6546d93063SJacques Vidrine.Xr nsswitch.conf 5
66248aee62SJacques Vidrinefor the database
67248aee62SJacques Vidrine.Va database
68248aee62SJacques Vidrineuntil a successful entry is found.
69248aee62SJacques Vidrine.Pp
70248aee62SJacques Vidrine.Va retval
7146d93063SJacques Vidrineis passed to each method to modify as necessary, to pass back results to
7246d93063SJacques Vidrinethe caller of
7346d93063SJacques Vidrine.Fn nsdispatch .
7446d93063SJacques Vidrine.Pp
7546d93063SJacques VidrineEach method has the function signature described by the typedef:
7646d93063SJacques Vidrine.Pp
7746d93063SJacques Vidrine.Ft typedef "int \*(lp*nss_method\*(rp\*(lpvoid *retval, void *mdata, va_list *ap\*(rp" ;
78248aee62SJacques Vidrine.Pp
79248aee62SJacques Vidrine.Va dtab
80248aee62SJacques Vidrineis an array of
81248aee62SJacques Vidrine.Va ns_dtab
82248aee62SJacques Vidrinestructures, which have the following format:
83248aee62SJacques Vidrine.Bd -literal -offset indent
8446d93063SJacques Vidrinetypedef struct _ns_dtab {
85248aee62SJacques Vidrine	const char	*src;
8646d93063SJacques Vidrine	nss_method	 method;
8746d93063SJacques Vidrine	void		*mdata;
88248aee62SJacques Vidrine} ns_dtab;
89248aee62SJacques Vidrine.Ed
90248aee62SJacques Vidrine.Pp
91248aee62SJacques Vidrine.Bd -ragged -offset indent
9246d93063SJacques VidrineThe
9346d93063SJacques Vidrine.Fa dtab
9446d93063SJacques Vidrinearray should consist of one entry for each source type that is
9546d93063SJacques Vidrineimplemented, with
96248aee62SJacques Vidrine.Va src
9746d93063SJacques Vidrineas the name of the source,
9846d93063SJacques Vidrine.Va method
9946d93063SJacques Vidrineas a function which handles that source, and
10046d93063SJacques Vidrine.Va mdata
10146d93063SJacques Vidrineas a handle on arbitrary data to be passed to the method.
102248aee62SJacques VidrineThe last entry in
103248aee62SJacques Vidrine.Va dtab
104248aee62SJacques Vidrineshould contain
105248aee62SJacques Vidrine.Dv NULL
106248aee62SJacques Vidrinevalues for
107248aee62SJacques Vidrine.Va src ,
10846d93063SJacques Vidrine.Va method ,
109248aee62SJacques Vidrineand
11046d93063SJacques Vidrine.Va mdata .
111248aee62SJacques Vidrine.Ed
112248aee62SJacques Vidrine.Pp
11346d93063SJacques VidrineAdditionally, methods may be implemented in NSS modules, in
11446d93063SJacques Vidrinewhich case they are selected using the
11546d93063SJacques Vidrine.Fa database
11646d93063SJacques Vidrineand
11746d93063SJacques Vidrine.Fa method_name
11846d93063SJacques Vidrinearguments along with the configured source.
11946d93063SJacques Vidrine(The methods supplied via
12046d93063SJacques Vidrine.Fa dtab
12146d93063SJacques Vidrinetake priority over those implemented in NSS modules in the event
12246d93063SJacques Vidrineof a conflict.)
123248aee62SJacques Vidrine.Pp
124248aee62SJacques Vidrine.Va defaults
12546d93063SJacques Vidrinecontains a list of default sources to try if
12646d93063SJacques Vidrine.Xr nsswitch.conf 5
12746d93063SJacques Vidrineis missing or corrupted, or if there is no relevant entry for
128248aee62SJacques Vidrine.Va database .
129248aee62SJacques VidrineIt is an array of
130248aee62SJacques Vidrine.Va ns_src
131248aee62SJacques Vidrinestructures, which have the following format:
132248aee62SJacques Vidrine.Bd -literal -offset indent
13346d93063SJacques Vidrinetypedef struct _ns_src {
134248aee62SJacques Vidrine	const char	*src;
135248aee62SJacques Vidrine	u_int32_t	 flags;
136248aee62SJacques Vidrine} ns_src;
137248aee62SJacques Vidrine.Ed
138248aee62SJacques Vidrine.Pp
139248aee62SJacques Vidrine.Bd -ragged -offset indent
14046d93063SJacques VidrineThe
14146d93063SJacques Vidrine.Fa defaults
14246d93063SJacques Vidrinearray should consist of one entry for each source to be configured by
14346d93063SJacques Vidrinedefault indicated by
14446d93063SJacques Vidrine.Va src ,
14546d93063SJacques Vidrineand
146248aee62SJacques Vidrine.Va flags
14746d93063SJacques Vidrineset to the criterion desired
148248aee62SJacques Vidrine(usually
149248aee62SJacques Vidrine.Dv NS_SUCCESS ;
150248aee62SJacques Vidrinerefer to
15146d93063SJacques Vidrine.Sx Method return values
152248aee62SJacques Vidrinefor more information).
153248aee62SJacques VidrineThe last entry in
154248aee62SJacques Vidrine.Va defaults
155248aee62SJacques Vidrineshould have
156248aee62SJacques Vidrine.Va src
157248aee62SJacques Vidrineset to
158248aee62SJacques Vidrine.Dv NULL
159248aee62SJacques Vidrineand
160248aee62SJacques Vidrine.Va flags
161248aee62SJacques Vidrineset to 0.
162248aee62SJacques Vidrine.Pp
163248aee62SJacques VidrineFor convenience, a global variable defined as:
164248aee62SJacques Vidrine.Dl extern const ns_src __nsdefaultsrc[];
16546d93063SJacques Vidrineexists which contains a single default entry for the source
166248aee62SJacques Vidrine.Sq files
16746d93063SJacques Vidrinethat may be used by callers which do not require complicated default
16846d93063SJacques Vidrinerules.
169248aee62SJacques Vidrine.Ed
170248aee62SJacques Vidrine.Pp
171c2d03ea8SRuslan Ermilov.Sq Va ...
17246d93063SJacques Vidrineare optional extra arguments, which are passed to the appropriate method
17346d93063SJacques Vidrineas a variable argument list of the type
17446d93063SJacques Vidrine.Vt va_list .
175248aee62SJacques Vidrine.Ss Valid source types
17646d93063SJacques VidrineWhile there is support for arbitrary sources, the following
17757bd0fc6SJens Schweikhardt#defines for commonly implemented sources are available:
178248aee62SJacques Vidrine.Bl -column NS_COMPAT COMPAT -offset indent
17942635956SRuslan Ermilov.It Sy "#define	value"
18042635956SRuslan Ermilov.It "NSSRC_FILES	""files"""
18142635956SRuslan Ermilov.It "NSSRC_DNS	""dns"""
18242635956SRuslan Ermilov.It "NSSRC_NIS	""nis"""
18342635956SRuslan Ermilov.It "NSSRC_COMPAT	""compat"""
184248aee62SJacques Vidrine.El
185248aee62SJacques Vidrine.Pp
186248aee62SJacques VidrineRefer to
187248aee62SJacques Vidrine.Xr nsswitch.conf 5
188248aee62SJacques Vidrinefor a complete description of what each source type is.
189248aee62SJacques Vidrine.Pp
19046d93063SJacques Vidrine.Ss Method return values
19146d93063SJacques VidrineThe
19246d93063SJacques Vidrine.Vt nss_method
19346d93063SJacques Vidrinefunctions must return one of the following values depending upon status
19446d93063SJacques Vidrineof the lookup:
19546d93063SJacques Vidrine.Bl -column "RETURN VALUE" "STATUS CODE"
19642635956SRuslan Ermilov.It Sy "Return value	Status code"
19742635956SRuslan Ermilov.It "NS_SUCCESS	success"
19842635956SRuslan Ermilov.It "NS_NOTFOUND	notfound"
19942635956SRuslan Ermilov.It "NS_UNAVAIL	unavail"
20042635956SRuslan Ermilov.It "NS_TRYAGAIN	tryagain"
20146d93063SJacques Vidrine.It "NS_RETURN	-none-"
202248aee62SJacques Vidrine.El
203248aee62SJacques Vidrine.Pp
204248aee62SJacques VidrineRefer to
205248aee62SJacques Vidrine.Xr nsswitch.conf 5
20646d93063SJacques Vidrinefor a complete description of each status code.
207248aee62SJacques Vidrine.Pp
208d6498251SPhilippe CharnierThe
209d6498251SPhilippe Charnier.Fn nsdispatch
21046d93063SJacques Vidrinefunction returns the value of the method that caused the dispatcher to
21146d93063SJacques Vidrineterminate, or NS_NOTFOUND otherwise.
212248aee62SJacques Vidrine.Sh SEE ALSO
213248aee62SJacques Vidrine.Xr hesiod 3 ,
214248aee62SJacques Vidrine.Xr stdarg 3 ,
21546d93063SJacques Vidrine.Xr yp 8 ,
216248aee62SJacques Vidrine.Xr nsswitch.conf 5
217248aee62SJacques Vidrine.Sh HISTORY
218248aee62SJacques VidrineThe
219d6498251SPhilippe Charnier.Fn nsdispatch
220d6498251SPhilippe Charnierfunction first appeared in
2216883c2e5STom Rhodes.Fx 5.0 .
222d6498251SPhilippe CharnierIt was imported from the
223248aee62SJacques Vidrine.Nx
224248aee62SJacques VidrineProject,
225d6498251SPhilippe Charnierwhere it appeared first in
226248aee62SJacques Vidrine.Nx 1.4 .
22746d93063SJacques VidrineSupport for NSS modules first appeared in
22846d93063SJacques Vidrine.Fx 5.1 .
229248aee62SJacques Vidrine.Sh AUTHORS
230248aee62SJacques VidrineLuke Mewburn
231248aee62SJacques Vidrine.Aq lukem@netbsd.org
23246d93063SJacques Vidrinewrote this freely-distributable name-service switch implementation,
233248aee62SJacques Vidrineusing ideas from the
234248aee62SJacques Vidrine.Tn ULTRIX
23546d93063SJacques Vidrine"svc.conf\*(lp5\*(rp"
236248aee62SJacques Vidrineand
237248aee62SJacques Vidrine.Tn Solaris
23846d93063SJacques Vidrine"nsswitch.conf\*(lp4\*(rp"
239248aee62SJacques Vidrinemanual pages.
240248aee62SJacques VidrineThe
24146d93063SJacques Vidrine.Fx Project
24246d93063SJacques Vidrineadded the support for threads and NSS modules, and normalized the uses
24346d93063SJacques Vidrineof
244d6498251SPhilippe Charnier.Fn nsdispatch
24546d93063SJacques Vidrinewithin the standard C library.
246