From ef4d5b32b37ba6af985d427ee7c120532d62cc6b Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Thu, 17 Apr 2003 08:42:06 +0000 Subject: [PATCH] Update. 2003-04-17 Ulrich Drepper * 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. --- ChangeLog | 9 +++++++++ localedata/locales/uk_UA | 27 ++++++++++++++++++++------- nscd/nscd.c | 4 ++++ nss/Versions | 1 + nss/getXXbyYY_r.c | 2 +- nss/nsswitch.c | 14 +++++++++++++- nss/nsswitch.h | 19 ++++++++++++------- 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 + + * 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 * 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 -reorder-after +reorder-after -reorder-after - ;;;IGNORE +reorder-after +% ;;;IGNORE + ;;;IGNORE -reorder-after - ;;;IGNORE +reorder-after +% ;;;IGNORE + ;;;IGNORE + +reorder-after +% ;;;IGNORE + ;;;IGNORE + +reorder-after +% ;;;IGNORE + ;;;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 /* 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 , 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 **)