summaryrefslogtreecommitdiff
path: root/nscd/aicache.c
diff options
context:
space:
mode:
Diffstat (limited to 'nscd/aicache.c')
-rw-r--r--nscd/aicache.c21
1 files changed, 12 insertions, 9 deletions
diff --git a/nscd/aicache.c b/nscd/aicache.c
index 0dc892bc74..a69a7781d3 100644
--- a/nscd/aicache.c
+++ b/nscd/aicache.c
@@ -110,7 +110,7 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
size_t tmpbuf4len = 0;
char *tmpbuf4 = NULL;
char *canon = NULL;
- int32_t ttl = UINT32_MAX;
+ int32_t ttl = INT32_MAX;
ssize_t total = 0;
char *key_copy = NULL;
bool alloca_used = false;
@@ -157,20 +157,20 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
tmpbuf4 = tmpbuf6;
}
- /* Next collect IPv4 information first. */
+ /* Next collect IPv4 information. */
while (1)
{
rc4 = 0;
status[1] = DL_CALL_FCT (fct, (key, AF_INET, &th[1], tmpbuf4,
tmpbuf4len, &rc4, &herrno,
- ttl == UINT32_MAX ? &ttl : NULL,
+ ttl == INT32_MAX ? &ttl : NULL,
canon == NULL ? &canon : NULL));
if (rc4 != ERANGE || herrno != NETDB_INTERNAL)
break;
tmpbuf4 = extend_alloca (tmpbuf4, tmpbuf4len, 2 * tmpbuf4len);
}
- if (rc4 != 0 || herrno == NETDB_INTERNAL)
+ if (rc4 != 0 && herrno == NETDB_INTERNAL)
goto out;
if (status[0] == NSS_STATUS_SUCCESS
@@ -233,9 +233,9 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
int rc;
while (1)
{
- rc = __gethostbyaddr_r (addr, addrlen, addrfamily,
- &he_mem, tmpbuf, tmpbuflen,
- &he, &herrno);
+ rc = __gethostbyaddr2_r (addr, addrlen, addrfamily,
+ &he_mem, tmpbuf, tmpbuflen,
+ &he, &herrno, NULL);
if (rc != ERANGE || herrno != NETDB_INTERNAL)
break;
tmpbuf = extend_alloca (tmpbuf, tmpbuflen,
@@ -285,7 +285,8 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
dataset->head.usable = true;
/* Compute the timeout time. */
- dataset->head.timeout = time (NULL) + MIN (db->postimeout, ttl);
+ dataset->head.timeout = time (NULL) + (ttl == INT32_MAX
+ ? db->postimeout : ttl);
dataset->resp.version = NSCD_VERSION;
dataset->resp.found = 1;
@@ -338,7 +339,7 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
= (struct dataset *) mempool_alloc (db,
total
+ req->key_len);
- if (newp != NULL)
+ if (__builtin_expect (newp != NULL, 1))
{
/* Adjust pointer into the memory block. */
key_copy = (char *) newp + (key_copy
@@ -348,6 +349,8 @@ addhstaiX (struct database_dyn *db, int fd, request_header *req,
total + req->key_len);
alloca_used = false;
}
+ else
+ ++db->head->addfailed;
/* Mark the old record as obsolete. */
dh->usable = false;