DESCRIPTION
The nsdispatch function invokes the methods specified in dtab in the order given by nsswitch.conf(5) for the database database until a successful entry is found. retval is passed to each method to modify as necessary, to pass back results to the caller of nsdispatch.
Each method has the function signature described by the typedef:
typedef int *nss_method "void *retval" "void *mdata" "va_list *ap";
dtab is an array of ns_dtab structures, which have the following format:
typedef struct _ns_dtab {
const char *src;
nss_method method;
void *mdata;
} ns_dtab;
The
dtab
array should consist of one entry for each source type that is
implemented, with
src
as the name of the source,
method
as a function which handles that source, and
mdata
as a handle on arbitrary data to be passed to the method.
The last entry in
dtab
should contain
NULL
values for
src,
method,
and
mdata.
Additionally, methods may be implemented in NSS modules, in which case they are selected using the database and method_name arguments along with the configured source. (The methods supplied via dtab take priority over those implemented in NSS modules in the event of a conflict.)
defaults contains a list of default sources to try if nsswitch.conf(5) is missing or corrupted, or if there is no relevant entry for database. It is an array of ns_src structures, which have the following format:
typedef struct _ns_src {
const char *src;
u_int32_t flags;
} ns_src;
The
defaults
array should consist of one entry for each source to be configured by
default indicated by
src,
and
flags
set to the criterion desired
(usually
NS_SUCCESS;
refer to
Method 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 the source
'files'
that may be used by callers which do not require complicated default
rules.
'...' are optional extra arguments, which are passed to the appropriate method as a variable argument list of the type
.Vt va_list .
Valid source types
While there is support for arbitrary sources, the following #defines for commonly implemented sources are available: