mirror of
https://sourceware.org/git/glibc.git
synced 2024-12-22 10:50:07 +00:00
[BZ #4905]
* nscd/hstcache.c (cache_addhst): When reloading an entry which suddenly has two or more addresses, ignore it and remove the old entry.
This commit is contained in:
parent
1ce7d80ddc
commit
c44d3bdf14
@ -1,5 +1,10 @@
|
||||
2007-08-21 Ulrich Drepper <drepper@redhat.com>
|
||||
|
||||
[BZ #4905]
|
||||
* nscd/hstcache.c (cache_addhst): When reloading an entry which
|
||||
suddenly has two or more addresses, ignore it and remove the old
|
||||
entry.
|
||||
|
||||
[BZ #4814]
|
||||
* resolv/res_hconf.c: Prepare for compiling outside libc.
|
||||
* nscd/res_hconf.c: New file.
|
||||
|
@ -298,25 +298,31 @@ cache_addhst (struct database_dyn *db, int fd, request_header *req,
|
||||
/* The data has not changed. We will just bump the
|
||||
timeout value. Note that the new record has been
|
||||
allocated on the stack and need not be freed. */
|
||||
assert (h_addr_list_cnt == 1);
|
||||
dh->timeout = dataset->head.timeout;
|
||||
++dh->nreloads;
|
||||
}
|
||||
else
|
||||
{
|
||||
/* We have to create a new record. Just allocate
|
||||
appropriate memory and copy it. */
|
||||
struct dataset *newp
|
||||
= (struct dataset *) mempool_alloc (db, total + req->key_len);
|
||||
if (newp != NULL)
|
||||
if (h_addr_list_cnt == 1)
|
||||
{
|
||||
/* Adjust pointers into the memory block. */
|
||||
addresses = (char *) newp + (addresses - (char *) dataset);
|
||||
aliases = (char *) newp + (aliases - (char *) dataset);
|
||||
assert (key_copy != NULL);
|
||||
key_copy = (char *) newp + (key_copy - (char *) dataset);
|
||||
/* We have to create a new record. Just allocate
|
||||
appropriate memory and copy it. */
|
||||
struct dataset *newp
|
||||
= (struct dataset *) mempool_alloc (db,
|
||||
total + req->key_len);
|
||||
if (newp != NULL)
|
||||
{
|
||||
/* Adjust pointers into the memory block. */
|
||||
addresses = (char *) newp + (addresses
|
||||
- (char *) dataset);
|
||||
aliases = (char *) newp + (aliases - (char *) dataset);
|
||||
assert (key_copy != NULL);
|
||||
key_copy = (char *) newp + (key_copy - (char *) dataset);
|
||||
|
||||
dataset = memcpy (newp, dataset, total + req->key_len);
|
||||
alloca_used = false;
|
||||
dataset = memcpy (newp, dataset, total + req->key_len);
|
||||
alloca_used = false;
|
||||
}
|
||||
}
|
||||
|
||||
/* Mark the old record as obsolete. */
|
||||
|
Loading…
Reference in New Issue
Block a user