summaryrefslogtreecommitdiff
path: root/nss
diff options
context:
space:
mode:
authorUlrich Drepper <drepper@redhat.com>2003-04-17 08:42:06 +0000
committerUlrich Drepper <drepper@redhat.com>2003-04-17 08:42:06 +0000
commitef4d5b32b37ba6af985d427ee7c120532d62cc6b (patch)
tree945c2817fe187e384b324cc877fa75137441d14f /nss
parentf542ba5b79d38e5bafa3fcdcae3742b736175a31 (diff)
Update.
2003-04-17 Ulrich Drepper <drepper@redhat.com> * nss/getXXbyYY_r.c [USE_NSCD] (REENTRANT_NAME): Only retry contacting nscd if NOT_USENSCD_NAME > 0. * nss/nsswitch.c (__nss_disable_nscd): New function. * nss/nsswitch.h: Declare it. * nss/Versions [GLIBC_PRIVATE]: Export __nss_disable_nscd. * nscd/nscd.c (main): Call __nss_disable_nscd.
Diffstat (limited to 'nss')
-rw-r--r--nss/Versions1
-rw-r--r--nss/getXXbyYY_r.c2
-rw-r--r--nss/nsswitch.c14
-rw-r--r--nss/nsswitch.h19
4 files changed, 27 insertions, 9 deletions
diff --git a/nss/Versions b/nss/Versions
index 9ba0054abc..91a96a38d1 100644
--- a/nss/Versions
+++ b/nss/Versions
@@ -9,6 +9,7 @@ libc {
}
GLIBC_PRIVATE {
_nss_files_parse_grent; _nss_files_parse_pwent; _nss_files_parse_spent;
+ __nss_disable_nscd;
}
}
diff --git a/nss/getXXbyYY_r.c b/nss/getXXbyYY_r.c
index ba6ffeb7a5..632778d9aa 100644
--- a/nss/getXXbyYY_r.c
+++ b/nss/getXXbyYY_r.c
@@ -163,7 +163,7 @@ INTERNAL (REENTRANT_NAME) (ADD_PARAMS, LOOKUP_TYPE *resbuf, char *buffer,
#endif
#ifdef USE_NSCD
- if (NOT_USENSCD_NAME && ++NOT_USENSCD_NAME > NSS_NSCD_RETRY)
+ if (NOT_USENSCD_NAME > 0 && ++NOT_USENSCD_NAME > NSS_NSCD_RETRY)
NOT_USENSCD_NAME = 0;
if (!NOT_USENSCD_NAME)
diff --git a/nss/nsswitch.c b/nss/nsswitch.c
index 1b3bb23e0b..326687f68a 100644
--- a/nss/nsswitch.c
+++ b/nss/nsswitch.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996,1997,1998,1999,2001,2002 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999,2001,2002,2003 Free Software Foundation, Inc.
This file is part of the GNU C Library.
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1996.
@@ -39,6 +39,7 @@
#endif
#include "nsswitch.h"
+#include "../nscd/nscd_proto.h"
/* Prototypes for the local functions. */
static name_database *nss_parse_file (const char *fname) internal_function;
@@ -696,6 +697,17 @@ nss_new_service (name_database *database, const char *name)
}
+/* Called by nscd and nscd alone. */
+void
+__nss_disable_nscd (void)
+{
+ /* Disable all uses of NSCD. */
+ __nss_not_use_nscd_passwd = -1;
+ __nss_not_use_nscd_group = -1;
+ __nss_not_use_nscd_hosts = -1;
+}
+
+
/* Free all resources if necessary. */
libc_freeres_fn (free_mem)
{
diff --git a/nss/nsswitch.h b/nss/nsswitch.h
index b5e4fc344f..14dcf977a7 100644
--- a/nss/nsswitch.h
+++ b/nss/nsswitch.h
@@ -1,4 +1,4 @@
-/* Copyright (C) 1996,1997,1998,1999,2001,2002 Free Software Foundation, Inc.
+/* Copyright (C) 1996-1999,2001,2002,2003 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
@@ -101,14 +101,15 @@ typedef struct name_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, const char *alternative_name,
- const char *defconfig, service_user **ni);
+extern int __nss_database_lookup (const char *database,
+ const char *alternative_name,
+ const char *defconfig, service_user **ni);
libc_hidden_proto (__nss_database_lookup)
/* 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 occurred or no such function exists. */
-int __nss_lookup (service_user **ni, const char *fct_name, void **fctp);
+extern int __nss_lookup (service_user **ni, const char *fct_name, void **fctp);
/* Determine the next step in the lookup process according to the
result STATUS of the call to the last function returned by
@@ -123,13 +124,17 @@ int __nss_lookup (service_user **ni, const char *fct_name, void **fctp);
services. In other words, only if all four lookup results have
the action RETURN associated the lookup process stops before the
natural end. */
-int __nss_next (service_user **ni, const char *fct_name, void **fctp,
- int status, int all_values);
+extern int __nss_next (service_user **ni, const char *fct_name, void **fctp,
+ int status, int all_values);
libc_hidden_proto (__nss_next)
/* 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);
+extern void *__nss_lookup_function (service_user *ni, const char *fct_name);
+
+
+/* Called by NSCD to disable recursive calls. */
+extern void __nss_disable_nscd (void);
typedef int (*db_lookup_function) (service_user **, const char *, void **)