aboutsummaryrefslogtreecommitdiff
path: root/nscd
diff options
context:
space:
mode:
Diffstat (limited to 'nscd')
-rw-r--r--nscd/connections.c2
-rw-r--r--nscd/grpcache.c26
-rw-r--r--nscd/nscd.c9
-rw-r--r--nscd/nscd_conf.c5
-rw-r--r--nscd/nscd_getgr_r.c9
-rw-r--r--nscd/pwdcache.c21
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;
}