From 14e9dd679a43ef9eb90adc0764152045caab6146 Mon Sep 17 00:00:00 2001 From: Ulrich Drepper Date: Tue, 24 Feb 1998 15:22:29 +0000 Subject: Update. 1998-02-24 15:12 Ulrich Drepper * Makeconfig: Filter out frame-pointer effecting options when compiling profiling or debugging code. * config.h.in (internal_function): Don't define here if PROF is defined. * gmon/gmon.c (__moncontrol): Don't change state if already in error state. (__monstartup): If calloc fails set error state and mark array as not allocated. (_mcleanup): Don't call write_gmon if in error state. Don't try to free array if not successfully allocated. * elf/dl-load.c (STRING): Define to __STRING to enble expansion. Include elf.h to get macro definitions. Use __ELF?NATIVE?CLASS in message, not __ELF_WORDSIZE. 1998-02-24 09:40 Ulrich Drepper * elf/ldd.sh.in: Add compatibility for broken old shells. * elf/ldd.bash.in: Likewise. 1998-02-24 08:11 H.J. Lu * sunrpc/rpc_main.c (open_input): Check pipe return error. * time/clocktest.c (main): Check signal return error. 1998-02-24 Andreas Jaeger * iconv/Makefile ($(inst_bindir)/iconv): Correct typo, add "/" and use do-install-program. Reported by Mark M. Kettenis. (subdir_install): Likewise. 1998-02-22 Thorsten Kukuk * sunrpc/rpc_sample.c: Fix typo. * nscd/connections.c: Use locale. * nscd/grpcache.c: Add debug messages, gidtbl should get the calloc result. * nscd/nscd.c: Check if init functions fails. * nscd/nscd_conf.c: Allow disabling of group cache. * nscd/nscd_getgr_r.c: Fix return code if group not found. * nscd/pwdcache.c: Fix debug messages. 1998-02-22 Andreas Schwab * libc.map: Add __monstartup and _mcleanup for profiling support. 1998-02-20 Andreas Schwab * libc.map: Export __getpagesize, for binary compatibility with 2.0. 1998-02-21 Andreas Schwab * posix/globtest.sh: Use --library-path instead of LD_LIBRARY_PATH. * localedata/sort-test.sh: Likewise. * localedata/tst-fmon.sh: Likewise. Avoid useless use of cat. 1998-02-22 Andreas Schwab * sysdeps/unix/sysv/linux/sigaction.c: Translate between struct sigaction and struct kernel_sigaction for __syscall_rt_sigaction. * sysdeps/unix/sysv/linux/i386/sigaction.c: Likewise. * sysdeps/unix/sysv/linux/kernel_sigaction.h (struct kernel_sigaction): Define. * sysdeps/unix/sysv/linux/alpha/kernel_sigaction.h (struct kernel_sigaction): Define. 1998-02-23 Andreas Jaeger * math/libm-test.c: Change epsilons for libm-ieee754. 1998-02-23 12:33 Ulrich Drepper * sysdeps/i386/__longjmp.S: Fix race condition. Reported by Bruno Haible . --- nscd/connections.c | 2 +- nscd/grpcache.c | 26 +++++++++++++++++++++----- nscd/nscd.c | 9 ++++++--- nscd/nscd_conf.c | 5 +++++ nscd/nscd_getgr_r.c | 9 +++++++-- nscd/pwdcache.c | 21 ++++++++++++--------- 6 files changed, 52 insertions(+), 20 deletions(-) (limited to 'nscd') diff --git a/nscd/connections.c b/nscd/connections.c index abde747a8a..36e89fa25d 100644 --- a/nscd/connections.c +++ b/nscd/connections.c @@ -393,7 +393,7 @@ pw_send_disabled (int conn) if (sock[conn] == 0) { - dbg_log ("bad connection id on send response [%d|%d]", + dbg_log (_("bad connection id on send response [%d|%d]"), conn, sock[conn]); return; } diff --git a/nscd/grpcache.c b/nscd/grpcache.c index 9734d08510..2b837f8bc1 100644 --- a/nscd/grpcache.c +++ b/nscd/grpcache.c @@ -109,7 +109,7 @@ cache_grpinit () grptbl = calloc (modulo, sizeof (grphash)); if (grptbl == NULL) return -1; - calloc (modulo, sizeof (grphash)); + gidtbl = calloc (modulo, sizeof (grphash)); if (gidtbl == NULL) return -1; negtbl = calloc (modulo, sizeof (neghash)); @@ -179,6 +179,9 @@ add_cache (struct group *grp) unsigned long int hash = __nis_hash (grp->gr_name, strlen (grp->gr_name)) % modulo; + if (debug_flag) + dbg_log (_("grp_add_cache (%s)"), grp->gr_name); + work = &grptbl[hash]; if (grptbl[hash].grp == NULL) @@ -244,10 +247,16 @@ add_negcache (char *key) neghash *work; unsigned long int hash = __nis_hash (key, strlen (key)) % modulo; + if (debug_flag) + dbg_log (_("grp_add_netgache (%s|%ld)"), key, hash); + work = &negtbl[hash]; if (negtbl[hash].key == NULL) - negtbl[hash].key = strdup (key); + { + negtbl[hash].key = strdup (key); + negtbl[hash].next = NULL; + } else { while (work->next != NULL) @@ -268,6 +277,9 @@ cache_search_neg (const char *key) neghash *work; unsigned long int hash = __nis_hash (key, strlen (key)) % modulo; + if (debug_flag) + dbg_log (_("grp_cache_search_neg (%s|%ld)"), key, hash); + work = &negtbl[hash]; while (work->key != NULL) @@ -286,7 +298,7 @@ void * cache_getgrnam (void *v_param) { param_t *param = (param_t *)v_param; - struct group *grp, resultbuf; + struct group *grp; pthread_rwlock_rdlock (&grplock); grp = cache_search_name (param->key); @@ -294,7 +306,7 @@ cache_getgrnam (void *v_param) /* I don't like it to hold the read only lock longer, but it is necessary to avoid to much malloc/free/strcpy. */ - if (grp) + if (grp != NULL) { if (debug_flag) dbg_log (_("Found \"%s\" in cache !"), param->key); @@ -307,9 +319,10 @@ cache_getgrnam (void *v_param) } else { + int status; int buflen = 1024; char *buffer = calloc (1, buflen); - int status; + struct group resultbuf; if (debug_flag) dbg_log (_("Doesn't found \"%s\" in cache !"), param->key); @@ -371,6 +384,9 @@ cache_gr_disabled (void *v_param) { param_t *param = (param_t *)v_param; + if (debug_flag) + dbg_log (_("\tgroup cache is disabled\n")); + gr_send_disabled (param->conn); return NULL; } diff --git a/nscd/nscd.c b/nscd/nscd.c index 7e0b32ae19..a53abc1fe0 100644 --- a/nscd/nscd.c +++ b/nscd/nscd.c @@ -107,7 +107,7 @@ main (int argc, char **argv) /* Parse and process arguments. */ argp_parse (&argp, argc, argv, 0, &remaining, NULL); - if (remaining != 0) + if (remaining != argc) { error (0, 0, gettext ("wrong number of arguments")); argp_help (&argp, stdout, ARGP_HELP_SEE, program_invocation_short_name); @@ -152,8 +152,11 @@ main (int argc, char **argv) /* Create first sockets */ init_sockets (); /* Init databases */ - cache_pwdinit (); - cache_grpinit (); + if ((cache_pwdinit () < 0) || (cache_grpinit () < 0)) + { + fputs (_("Not enough memory\n"), stderr); + return 1; + } /* Handle incoming requests */ handle_requests (); diff --git a/nscd/nscd_conf.c b/nscd/nscd_conf.c index 59c225e566..62a1e6cbd1 100644 --- a/nscd/nscd_conf.c +++ b/nscd/nscd_conf.c @@ -122,6 +122,11 @@ nscd_parse_file (const char *fname) if (strcmp (arg1, "passwd") == 0 && strcmp (arg2, "no") == 0) disabled_passwd = 1; + else if (strcmp (arg1, "group") == 0 + && strcmp (arg2, "no") == 0) + disabled_group = 1; + else + dbg_log (_("service %s is not supported"), arg1); } else if (strcmp (entry, "logfile") == 0) { diff --git a/nscd/nscd_getgr_r.c b/nscd/nscd_getgr_r.c index 6739657e48..f133530f9f 100644 --- a/nscd/nscd_getgr_r.c +++ b/nscd/nscd_getgr_r.c @@ -205,7 +205,12 @@ __nscd_getgr_r (const char *key, request_type type, struct group *resultbuf, return 1; } } + close (sock); + return 0; + } + else + { + close (sock); + return -1; } - close (sock); - return 0; } diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c index 82a26efc25..721e77b7c9 100644 --- a/nscd/pwdcache.c +++ b/nscd/pwdcache.c @@ -163,7 +163,7 @@ add_cache (struct passwd *pwd) strlen (pwd->pw_name)) % modulo; if (debug_flag) - dbg_log (_("add_cache (%s)"), pwd->pw_name); + dbg_log (_("pwd_add_cache (%s)"), pwd->pw_name); work = &pwdtbl[hash]; @@ -231,7 +231,7 @@ add_negcache (char *key) unsigned long int hash = __nis_hash (key, strlen (key)) % modulo; if (debug_flag) - dbg_log (_("add_netgache (%s|%ld)"), key, hash); + dbg_log (_("pwd_add_netgache (%s|%ld)"), key, hash); work = &negtbl[hash]; @@ -249,7 +249,7 @@ add_negcache (char *key) work->next->key = strdup (key); work = work->next; } - /* Set a pointer from the pwuid hash table to the pwname hash table */ + time (&work->create); return 0; @@ -261,10 +261,10 @@ cache_search_neg (const char *key) neghash *work; unsigned long int hash = __nis_hash (key, strlen (key)) % modulo; - work = &negtbl[hash]; - if (debug_flag) - dbg_log (_("cache_search_neg (%s|%ld)"), key, hash); + dbg_log (_("pwd_cache_search_neg (%s|%ld)"), key, hash); + + work = &negtbl[hash]; while (work->key != NULL) { @@ -281,8 +281,8 @@ cache_search_neg (const char *key) void * cache_getpwnam (void *v_param) { + struct passwd *pwd; param_t *param = (param_t *)v_param; - struct passwd *pwd, resultbuf; pthread_rwlock_rdlock (&pwdlock); pwd = cache_search_name (param->key); @@ -300,13 +300,13 @@ cache_getpwnam (void *v_param) close_socket (param->conn); pthread_rwlock_unlock (&pwdlock); - pwd = &resultbuf; } else { int status; int buflen = 1024; - char *buffer = malloc (buflen); + char *buffer = calloc (1, buflen); + struct passwd resultbuf; if (debug_flag) dbg_log (_("Doesn't found \"%s\" in cache !"), param->key); @@ -367,6 +367,9 @@ cache_pw_disabled (void *v_param) { param_t *param = (param_t *)v_param; + if (debug_flag) + dbg_log (_("\tpasswd cache is disabled\n")); + pw_send_disabled (param->conn); return NULL; } -- cgit v1.2.3