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