diff options
author | Ulrich Drepper <drepper@redhat.com> | 2008-06-12 16:16:38 +0000 |
---|---|---|
committer | Ulrich Drepper <drepper@redhat.com> | 2008-06-12 16:16:38 +0000 |
commit | 5a337776da5b7ff1dbbf0fdcd093a3b6af2cdf83 (patch) | |
tree | 90b83fdd99ba1c9c676a9bf2165732faccf0a088 /nscd/pwdcache.c | |
parent | 9ad58cc3ba614e13af5a6f3810f9b115899eb2ca (diff) | |
download | glibc-5a337776da5b7ff1dbbf0fdcd093a3b6af2cdf83.tar glibc-5a337776da5b7ff1dbbf0fdcd093a3b6af2cdf83.tar.gz glibc-5a337776da5b7ff1dbbf0fdcd093a3b6af2cdf83.tar.bz2 glibc-5a337776da5b7ff1dbbf0fdcd093a3b6af2cdf83.zip |
* nscd/grpcache.c (cache_addgr): Correctly compute size ofcvs/fedora-glibc-20080612T1619
fixed-size portion of the record.
* nscd/servicescache.c (cache_addserv): Likewise.
* nscd/pwdcache.c (cache_addpw): Likewise.
* nscd/initgrcache.c (addinitgroupsX): Likewise.
Diffstat (limited to 'nscd/pwdcache.c')
-rw-r--r-- | nscd/pwdcache.c | 20 |
1 files changed, 17 insertions, 3 deletions
diff --git a/nscd/pwdcache.c b/nscd/pwdcache.c index 4a0cabd240..782b101371 100644 --- a/nscd/pwdcache.c +++ b/nscd/pwdcache.c @@ -185,7 +185,8 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req, n = snprintf (buf, buf_len, "%d%c%n%s", pwd->pw_uid, '\0', &key_offset, (char *) key) + 1; - written = total = (sizeof (struct dataset) + pw_name_len + pw_passwd_len + written = total = (offsetof (struct dataset, strdata) + + pw_name_len + pw_passwd_len + pw_gecos_len + pw_dir_len + pw_shell_len); /* If we refill the cache, first assume the reconrd did not @@ -247,16 +248,28 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req, char *key_copy = cp + key_offset; assert (key_copy == (char *) rawmemchr (cp, '\0') + 1); + assert (cp == dataset->strdata + total - offsetof (struct dataset, + strdata)); + /* Now we can determine whether on refill we have to create a new record or not. */ if (he != NULL) { assert (fd == -1); - if (total + n == dh->allocsize - && total - offsetof (struct dataset, resp) == dh->recsize +#if 0 + if (dataset->head.datasize == dh->allocsize + && dataset->head.recsize == dh->recsize && memcmp (&dataset->resp, dh->data, dh->allocsize - offsetof (struct dataset, resp)) == 0) +#else + if (dataset->head.allocsize != dh->allocsize) + goto nnn; + if (dataset->head.recsize != dh->recsize) + goto nnn; + if(memcmp (&dataset->resp, dh->data, + dh->allocsize - offsetof (struct dataset, resp)) == 0) +#endif { /* The data has not changed. We will just bump the timeout value. Note that the new record has been @@ -266,6 +279,7 @@ cache_addpw (struct database_dyn *db, int fd, request_header *req, } else { + nnn:; /* We have to create a new record. Just allocate appropriate memory and copy it. */ struct dataset *newp |