.
[kopensolaris-gnu/glibc.git] / nss / nsswitch.h
index f597a58..9f40a9e 100644 (file)
@@ -1,20 +1,20 @@
-/* Copyright (C) 1996 Free Software Foundation, Inc.
-This file is part of the GNU C Library.
+/* Copyright (C) 1996, 1997, 1998, 1999 Free Software Foundation, Inc.
+   This file is part of the GNU C Library.
 
-The GNU C Library is free software; you can redistribute it and/or
-modify it under the terms of the GNU Library General Public License as
-published by the Free Software Foundation; either version 2 of the
-License, or (at your option) any later version.
+   The GNU C Library is free software; you can redistribute it and/or
+   modify it under the terms of the GNU Library General Public License as
+   published by the Free Software Foundation; either version 2 of the
+   License, or (at your option) any later version.
 
-The GNU C Library is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-Library General Public License for more details.
+   The GNU C Library is distributed in the hope that it will be useful,
+   but WITHOUT ANY WARRANTY; without even the implied warranty of
+   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+   Library General Public License for more details.
 
-You should have received a copy of the GNU Library General Public
-License along with the GNU C Library; see the file COPYING.LIB.  If
-not, write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
-Boston, MA 02111-1307, USA.  */
+   You should have received a copy of the GNU Library General Public
+   License along with the GNU C Library; see the file COPYING.LIB.  If not,
+   write to the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+   Boston, MA 02111-1307, USA.  */
 
 #ifndef _NSSWITCH_H
 #define _NSSWITCH_H    1
@@ -23,22 +23,10 @@ Boston, MA 02111-1307, USA.  */
 
 #include <arpa/nameser.h>
 #include <netinet/in.h>
+#include <nss.h>
 #include <resolv.h>
 #include <search.h>
-
-
-/* Revision number of NSS interface (must be a string).  */
-#define NSS_SHLIB_REVISION ".1"
-
-
-/* Possible results of lookup using a nss_* function.  */
-enum nss_status
-{
-  NSS_STATUS_TRYAGAIN = -2,
-  NSS_STATUS_UNAVAIL,
-  NSS_STATUS_NOTFOUND,
-  NSS_STATUS_SUCCESS,
-};
+#include <ldsodefs.h>
 
 
 /* Actions performed after lookup finished.  */
@@ -60,7 +48,9 @@ typedef struct service_library
 } service_library;
 
 
-/* For mappng a function name to a function pointer.  */
+/* For mapping a function name to a function pointer.  It is known in
+   nsswitch.c:nss_lookup_function that a string pointer for the lookup key
+   is the first member.  */
 typedef struct
 {
   const char *fct_name;
@@ -70,16 +60,16 @@ typedef struct
 
 typedef struct service_user
 {
-  /* Name of the service (`files', `dns', `nis', ...).  */
-  const char *name;
+  /* And the link to the next entry.  */
+  struct service_user *next;
   /* Action according to result.  */
-  lookup_actions actions[4];
+  lookup_actions actions[5];
   /* Link to the underlying library object.  */
   service_library *library;
   /* Collection of known functions.  */
   struct entry *known;
-  /* And the link to the next entry.  */
-  struct service_user *next;
+  /* Name of the service (`files', `dns', `nis', ...).  */
+  char name[0];
 } service_user;
 
 /* To access the action based on the status value use this macro.  */
@@ -88,12 +78,12 @@ typedef struct service_user
 
 typedef struct name_database_entry
 {
-  /* Name of the database.  */
-  const char *name;
-  /* List of service to be used.  */
-  service_user *service;
   /* And the link to the next entry.  */
   struct name_database_entry *next;
+  /* List of service to be used.  */
+  service_user *service;
+  /* Name of the database.  */
+  char name[0];
 } name_database_entry;
 
 
@@ -108,14 +98,17 @@ typedef struct name_database
 
 /* Interface functions for NSS.  */
 
-/* Get the data structure representing the specified database.  More
+/* Get the data structure representing the specified database.
+   If there is no configuration for this database in the file,
+   parse a service list from DEFCONFIG and use that.  More
    than one function can use the database.  */
-int __nss_database_lookup (const char *database, service_user **ni);
+int __nss_database_lookup (const char *database, const char *alternative_name,
+                          const char *defconfig, service_user **ni);
 
 
 /* Put first function with name FCT_NAME for SERVICE in FCTP.  The
    position is remembered in NI.  The function returns a value < 0 if
-   an error occured or no such function exists.  */
+   an error occurred or no such function exists.  */
 int __nss_lookup (service_user **ni, const char *fct_name, void **fctp);
 
 /* Determine the next step in the lookup process according to the
@@ -123,8 +116,8 @@ int __nss_lookup (service_user **ni, const char *fct_name, void **fctp);
    `__nss_lookup' or `__nss_next'.  NI specifies the last function
    examined.  The function return a value > 0 if the process should
    stop with the last result of the last function call to be the
-   result of the entire lookup.  The returned valie is 0 if there is
-   another function to use and < 0 if an error occured.
+   result of the entire lookup.  The returned value is 0 if there is
+   another function to use and < 0 if an error occurred.
 
    If ALL_VALUES is nonzero, the return value will not be > 0 as long as
    there is a possibility the lookup process can ever use following
@@ -134,5 +127,8 @@ int __nss_lookup (service_user **ni, const char *fct_name, void **fctp);
 int __nss_next (service_user **ni, const char *fct_name, void **fctp,
                int status, int all_values);
 
+/* Search for the service described in NI for a function named FCT_NAME
+   and return a pointer to this function if successful.  */
+void *__nss_lookup_function (service_user *ni, const char *fct_name);
 
 #endif /* nsswitch.h */