* inet/getnetgrent_r.c (innetgr): We must get the lock used for
	the set/get/end interfaces since we call all these functions in
	succession and must not be interrupted doing this.
	Reported by Chuck Simmons.
This commit is contained in:
Ulrich Drepper 2004-08-13 23:24:09 +00:00
parent 2486480e23
commit a575320641
2 changed files with 9 additions and 0 deletions

View File

@ -1,5 +1,10 @@
2004-08-13 Ulrich Drepper <drepper@redhat.com> 2004-08-13 Ulrich Drepper <drepper@redhat.com>
* inet/getnetgrent_r.c (innetgr): We must get the lock used for
the set/get/end interfaces since we call all these functions in
succession and must not be interrupted doing this.
Reported by Chuck Simmons.
* inet/netgroup.h (struct name_list): Replace name pointer with * inet/netgroup.h (struct name_list): Replace name pointer with
zero-sized array. zero-sized array.
* inet/getnetgrent_r.c: Adjust code for change in name_list * inet/getnetgrent_r.c: Adjust code for change in name_list

View File

@ -344,6 +344,8 @@ innetgr (const char *netgroup, const char *host, const char *user,
const char *current_group = netgroup; const char *current_group = netgroup;
int real_entry = 0; int real_entry = 0;
__libc_lock_lock (lock);
/* Walk through the services until we found an answer or we shall /* Walk through the services until we found an answer or we shall
not work further. We can do some optimization here. Since all not work further. We can do some optimization here. Since all
services must provide the `setnetgrent' function we can do all services must provide the `setnetgrent' function we can do all
@ -445,6 +447,8 @@ innetgr (const char *netgroup, const char *host, const char *user,
break; break;
} }
__libc_lock_unlock (lock);
/* Free the memory. */ /* Free the memory. */
while (known != NULL) while (known != NULL)
{ {