about summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--ChangeLog9
-rw-r--r--localedata/locales/uk_UA27
-rw-r--r--nscd/nscd.c4
-rw-r--r--nss/Versions1
-rw-r--r--nss/getXXbyYY_r.c2
-rw-r--r--nss/nsswitch.c14
-rw-r--r--nss/nsswitch.h19
7 files changed, 60 insertions, 16 deletions
diff --git a/ChangeLog b/ChangeLog
index ab8c84e53a..1a21e9dd06 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,12 @@
+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.
+
 2003-04-16  Ulrich Drepper  <drepper@redhat.com>
 
 	* stdio-common/perror.c (perror): We don't need to set the offset
diff --git a/localedata/locales/uk_UA b/localedata/locales/uk_UA
index d188291ff5..33ce5d4f96 100644
--- a/localedata/locales/uk_UA
+++ b/localedata/locales/uk_UA
@@ -14,6 +14,8 @@ escape_char  /
 % Charset: KOI8-U
 % Distribution and use is free, also
 % for commercial purposes.
+%
+% Some collate fixes by Valentyn Solomko vesna@slovnyk.org
 
 LC_IDENTIFICATION
 title      "Ukrainian locale for Ukraine"
@@ -25,8 +27,8 @@ tel        ""
 fax        ""
 language   "Ukrainian"
 territory  "Ukraine"
-revision   "1.0"
-date       "2000-06-29"
+revision   "1.3"
+date       "2003-01-31"
 %
 category  "uk_UA:2000";LC_IDENTIFICATION
 category  "uk_UA:2000";LC_CTYPE
@@ -47,19 +49,30 @@ copy "i18n"
 END LC_CTYPE
 
 LC_COLLATE
+
 copy "iso14651_t1"
 
 % iso14651_t1 is missing Ukrainian ghe
 collating-symbol <UKR-GHE>
 
-reorder-after <CYR-GZHE>
+reorder-after <CYR-GHE>
 <UKR-GHE>
 
-reorder-after <U0453>
-<U0491> <UKR-GHE>;<BAS>;<MIN>;IGNORE
+reorder-after <U0433>
+% <U0491> <UKR-GHE>;<BAS>;<MIN>;IGNORE
+<U0491> <CYR-GHE>;<UKR-GHE>;<MIN>;IGNORE
+
+reorder-after <U0438>
+% <U0456> <UKR-I>;<BAS>;<MIN>;IGNORE
+<U0456> <CYR-I>;<UKR-I>;<MIN>;IGNORE
+
+reorder-after <U0413>
+% <U0490> <UKR-GHE>;<BAS>;<CAP>;IGNORE
+<U0490> <CYR-GHE>;<UKR-GHE>;<CAP>;IGNORE
 
-reorder-after <U0403>
-<U0490> <UKR-GHE>;<BAS>;<CAP>;IGNORE
+reorder-after <U0418>
+% <U0406> <UKR-I>;<BAS>;<CAP>;IGNORE
+<U0406> <CYR-I>;<UKR-I>;<CAP>;IGNORE
 
 reorder-end
 END LC_COLLATE
diff --git a/nscd/nscd.c b/nscd/nscd.c
index af4b181c7d..97400d1cf1 100644
--- a/nscd/nscd.c
+++ b/nscd/nscd.c
@@ -41,6 +41,7 @@
 
 #include "dbg_log.h"
 #include "nscd.h"
+#include "../nss/nsswitch.h"
 #include <device-nrs.h>
 
 /* Get libc version number.  */
@@ -213,6 +214,9 @@ main (int argc, char **argv)
   /* Cleanup files created by a previous `bind'.  */
   unlink (_PATH_NSCDSOCKET);
 
+  /* Make sure we do not get recursive calls.  */
+  __nss_disable_nscd ();
+
   /* Init databases.  */
   nscd_init (conffile);
 
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 **)