mirror of
https://sourceware.org/git/glibc.git
synced 2024-11-22 04:50:07 +00:00
Signal temporary host lookup errors in nscd as such to the requester.
This commit is contained in:
parent
70181fddf1
commit
bc425b339b
@ -1,3 +1,11 @@
|
|||||||
|
2011-01-15 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
|
[BZ #6812]
|
||||||
|
* nscd/hstcache.c (tryagain): Define.
|
||||||
|
(cache_addhst): Return tryagain not notfound for temporary errors.
|
||||||
|
(addhstbyX): Also set h_errno to TRY_AGAIN when memory allocation
|
||||||
|
failed.
|
||||||
|
|
||||||
2011-01-14 Ulrich Drepper <drepper@gmail.com>
|
2011-01-14 Ulrich Drepper <drepper@gmail.com>
|
||||||
|
|
||||||
[BZ #10563]
|
[BZ #10563]
|
||||||
|
12
NEWS
12
NEWS
@ -1,4 +1,4 @@
|
|||||||
GNU C Library NEWS -- history of user-visible changes. 2011-1-14
|
GNU C Library NEWS -- history of user-visible changes. 2011-1-15
|
||||||
Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc.
|
Copyright (C) 1992-2009, 2010, 2011 Free Software Foundation, Inc.
|
||||||
See the end for copying conditions.
|
See the end for copying conditions.
|
||||||
|
|
||||||
@ -9,11 +9,11 @@ Version 2.13
|
|||||||
|
|
||||||
* The following bugs are resolved with this release:
|
* The following bugs are resolved with this release:
|
||||||
|
|
||||||
3268, 7066, 10085, 10484, 10563, 10851, 11149, 11155, 11611, 11640, 11655,
|
3268, 6812, 7066, 10085, 10484, 10563, 10851, 11149, 11155, 11611, 11640,
|
||||||
11701, 11840, 11856, 11883, 11903, 11904, 11968, 11979, 12005, 12037,
|
11655, 11701, 11840, 11856, 11883, 11903, 11904, 11968, 11979, 12005,
|
||||||
12067, 12077, 12078, 12092, 12093, 12107, 12108, 12113, 12140, 12159,
|
12037, 12067, 12077, 12078, 12092, 12093, 12107, 12108, 12113, 12140,
|
||||||
12167, 12191, 12194, 12201, 12204, 12205, 12207, 12348, 12378, 12394,
|
12159, 12167, 12191, 12194, 12201, 12204, 12205, 12207, 12348, 12378,
|
||||||
12397
|
12394, 12397
|
||||||
|
|
||||||
* New Linux interfaces: prlimit, prlimit64, fanotify_init, fanotify_mark
|
* New Linux interfaces: prlimit, prlimit64, fanotify_init, fanotify_mark
|
||||||
|
|
||||||
|
@ -1,5 +1,5 @@
|
|||||||
/* Cache handling for host lookup.
|
/* Cache handling for host lookup.
|
||||||
Copyright (C) 1998-2008, 2009 Free Software Foundation, Inc.
|
Copyright (C) 1998-2008, 2009, 2011 Free Software Foundation, Inc.
|
||||||
This file is part of the GNU C Library.
|
This file is part of the GNU C Library.
|
||||||
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
Contributed by Ulrich Drepper <drepper@cygnus.com>, 1998.
|
||||||
|
|
||||||
@ -77,6 +77,20 @@ static const hst_response_header notfound =
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
/* This is the standard reply in case there are temporary problems. */
|
||||||
|
static const hst_response_header tryagain =
|
||||||
|
{
|
||||||
|
.version = NSCD_VERSION,
|
||||||
|
.found = 0,
|
||||||
|
.h_name_len = 0,
|
||||||
|
.h_aliases_cnt = 0,
|
||||||
|
.h_addrtype = -1,
|
||||||
|
.h_length = -1,
|
||||||
|
.h_addr_list_cnt = 0,
|
||||||
|
.error = TRY_AGAIN
|
||||||
|
};
|
||||||
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
cache_addhst (struct database_dyn *db, int fd, request_header *req,
|
cache_addhst (struct database_dyn *db, int fd, request_header *req,
|
||||||
const void *key, struct hostent *hst, uid_t owner,
|
const void *key, struct hostent *hst, uid_t owner,
|
||||||
@ -111,11 +125,15 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req,
|
|||||||
else
|
else
|
||||||
{
|
{
|
||||||
/* We have no data. This means we send the standard reply for this
|
/* We have no data. This means we send the standard reply for this
|
||||||
case. */
|
case. Possibly this is only temporary. */
|
||||||
ssize_t total = sizeof (notfound);
|
ssize_t total = sizeof (notfound);
|
||||||
|
assert (sizeof (notfound) == sizeof (tryagain));
|
||||||
|
|
||||||
|
const hst_response_header *resp = (errval == EAGAIN
|
||||||
|
? &tryagain : ¬found);
|
||||||
|
|
||||||
if (fd != -1 &&
|
if (fd != -1 &&
|
||||||
TEMP_FAILURE_RETRY (send (fd, ¬found, total,
|
TEMP_FAILURE_RETRY (send (fd, resp, total,
|
||||||
MSG_NOSIGNAL)) != total)
|
MSG_NOSIGNAL)) != total)
|
||||||
all_written = false;
|
all_written = false;
|
||||||
|
|
||||||
@ -135,7 +153,7 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req,
|
|||||||
? db->negtimeout : ttl);
|
? db->negtimeout : ttl);
|
||||||
|
|
||||||
/* This is the reply. */
|
/* This is the reply. */
|
||||||
memcpy (&dataset->resp, ¬found, total);
|
memcpy (&dataset->resp, resp, total);
|
||||||
|
|
||||||
/* Copy the key data. */
|
/* Copy the key data. */
|
||||||
memcpy (dataset->strdata, key, req->key_len);
|
memcpy (dataset->strdata, key, req->key_len);
|
||||||
@ -490,6 +508,7 @@ addhstbyX (struct database_dyn *db, int fd, request_header *req,
|
|||||||
/* We set the error to indicate this is (possibly) a
|
/* We set the error to indicate this is (possibly) a
|
||||||
temporary error and that it does not mean the entry
|
temporary error and that it does not mean the entry
|
||||||
is not available at all. */
|
is not available at all. */
|
||||||
|
h_errno = TRY_AGAIN;
|
||||||
errval = EAGAIN;
|
errval = EAGAIN;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user