Skip to content

Commit

Permalink
* nscd/grpcache.c (cache_addgr): Correctly compute size of
Browse files Browse the repository at this point in the history
	fixed-size portion of the record.
	* nscd/servicescache.c (cache_addserv): Likewise.
	* nscd/pwdcache.c (cache_addpw): Likewise.
	* nscd/initgrcache.c (addinitgroupsX): Likewise.
  • Loading branch information
Ulrich Drepper committed Jun 12, 2008
1 parent 9ad58cc commit 5a33777
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 8 deletions.
8 changes: 8 additions & 0 deletions ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,11 @@
2008-06-12 Ulrich Drepper <[email protected]>

* nscd/grpcache.c (cache_addgr): Correctly compute size of
fixed-size portion of the record.
* nscd/servicescache.c (cache_addserv): Likewise.
* nscd/pwdcache.c (cache_addpw): Likewise.
* nscd/initgrcache.c (addinitgroupsX): Likewise.

2008-06-11 Ulrich Drepper <[email protected]>

* nscd/mem.c (gc): Initialize obstack earlier so that if we jump
Expand Down
4 changes: 4 additions & 0 deletions nptl/ChangeLog
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
2008-06-12 Ulrich Drepper <[email protected]>

* sysdeps/pthread/pthread.h: Remove inadvertant checkin.

2008-05-17 Samuel Thibault <[email protected]>

* sysdeps/pthread/pthread.h: Fix typo in comment.
Expand Down
4 changes: 2 additions & 2 deletions nptl/sysdeps/pthread/pthread.h
Original file line number Diff line number Diff line change
Expand Up @@ -122,12 +122,12 @@ enum

/* Read-write lock initializers. */
# define PTHREAD_RWLOCK_INITIALIZER \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 } }
# ifdef __USE_GNU
# if __WORDSIZE == 64
# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
{ { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, \
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP, 0 } }
PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP } }
# else
# if __BYTE_ORDER == __LITTLE_ENDIAN
# define PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP \
Expand Down
5 changes: 4 additions & 1 deletion nscd/grpcache.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,7 @@ cache_addgr (struct database_dyn *db, int fd, request_header *req,
gr_mem_len_total += gr_mem_len[gr_mem_cnt];
}

written = total = (sizeof (struct dataset)
written = total = (offsetof (struct dataset, strdata)
+ gr_mem_cnt * sizeof (uint32_t)
+ gr_name_len + gr_passwd_len + gr_mem_len_total);

Expand Down Expand Up @@ -252,6 +252,9 @@ cache_addgr (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)
Expand Down
6 changes: 5 additions & 1 deletion nscd/initgrcache.c
Original file line number Diff line number Diff line change
Expand Up @@ -246,7 +246,8 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
else
{

written = total = sizeof (struct dataset) + start * sizeof (int32_t);
written = total = (offsetof (struct dataset, strdata)
+ start * sizeof (int32_t));

/* If we refill the cache, first assume the reconrd did not
change. Allocate memory on the cache since it is likely
Expand Down Expand Up @@ -307,6 +308,9 @@ addinitgroupsX (struct database_dyn *db, int fd, request_header *req,
/* Finally the user name. */
memcpy (cp, key, req->key_len);

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)
Expand Down
20 changes: 17 additions & 3 deletions nscd/pwdcache.c
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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
Expand All @@ -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
Expand Down
2 changes: 1 addition & 1 deletion nscd/servicescache.c
Original file line number Diff line number Diff line change
Expand Up @@ -173,7 +173,7 @@ cache_addserv (struct database_dyn *db, int fd, request_header *req,
total += s_aliases_len[cnt];
}

total += (sizeof (struct dataset)
total += (offsetof (struct dataset, strdata)
+ s_name_len
+ s_proto_len
+ s_aliases_cnt * sizeof (uint32_t));
Expand Down

0 comments on commit 5a33777

Please sign in to comment.