diff options
Diffstat (limited to 'nscd')
-rw-r--r-- | nscd/connections.c | 2 | ||||
-rw-r--r-- | nscd/grpcache.c | 26 | ||||
-rw-r--r-- | nscd/nscd.c | 9 | ||||
-rw-r--r-- | nscd/nscd_conf.c | 5 | ||||
-rw-r--r-- | nscd/nscd_getgr_r.c | 9 | ||||
-rw-r--r-- | nscd/pwdcache.c | 21 |
6 files changed, 52 insertions, 20 deletions
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; } |