(nscd_run): Check early for invalid request types.

This commit is contained in:
Ulrich Drepper 2004-09-03 03:39:45 +00:00
parent 91b52f4838
commit 3c82c131d9

View File

@ -786,6 +786,10 @@ nscd_run (void *p)
continue; continue;
} }
/* Check whether this is a valid request type. */
if (req.type < GETPWBYNAME || req.type >= LASTREQ)
goto close_and_out;
/* Some systems have no SO_PEERCRED implementation. They don't /* Some systems have no SO_PEERCRED implementation. They don't
care about security so we don't as well. */ care about security so we don't as well. */
#ifdef SO_PEERCRED #ifdef SO_PEERCRED
@ -798,8 +802,7 @@ nscd_run (void *p)
{ {
dbg_log (_("error getting callers id: %s"), dbg_log (_("error getting callers id: %s"),
strerror_r (errno, buf, sizeof (buf))); strerror_r (errno, buf, sizeof (buf)));
close (fd); goto close_and_out;
continue;
} }
if (req.type < GETPWBYNAME || req.type > LASTDBREQ if (req.type < GETPWBYNAME || req.type > LASTDBREQ
@ -825,8 +828,6 @@ nscd_run (void *p)
{ {
if (debug_level > 0) if (debug_level > 0)
dbg_log (_("key length in request too long: %d"), req.key_len); dbg_log (_("key length in request too long: %d"), req.key_len);
close (fd);
continue;
} }
else else
{ {
@ -859,11 +860,12 @@ handle_request: request received (Version = %d)"), req.version);
/* Phew, we got all the data, now process it. */ /* Phew, we got all the data, now process it. */
handle_request (fd, &req, keybuf, uid); handle_request (fd, &req, keybuf, uid);
/* We are done. */
close (fd);
} }
close_and_out:
/* We are done. */
close (fd);
/* Just determine whether any data is present. We do this to /* Just determine whether any data is present. We do this to
measure whether clients are queued up. */ measure whether clients are queued up. */
try_get: try_get: