Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
2014-12-17 Steve Ellcey <sellcey@imgtec.com>
	* inet/getnetgrent_r.c: Move while loop to be inside if statement.
  • Loading branch information
Steve Ellcey committed Dec 17, 2014
1 parent d22ce01 commit 66ce3cb
Show file tree
Hide file tree
Showing 2 changed files with 65 additions and 62 deletions.
4 changes: 4 additions & 0 deletions ChangeLog
@@ -1,3 +1,7 @@
2014-12-17 Steve Ellcey <sellcey@imgtec.com>

* inet/getnetgrent_r.c: Move while loop to be inside if statement.

2014-12-17 Stefan Liebler <stli@linux.vnet.ibm.com>

* stdio-common/bug-vfprintf-nargs.c (do_test):
Expand Down
123 changes: 61 additions & 62 deletions inet/getnetgrent_r.c
Expand Up @@ -281,8 +281,8 @@ __internal_getnetgrent_r (char **hostp, char **userp, char **domainp,
{
#ifdef USE_NSCD
/* This bogus function pointer is a special marker left by
__nscd_setnetgrent to tell us to use the data it left
before considering any modules. */
__nscd_setnetgrent to tell us to use the data it left
before considering any modules. */
if (datap->nip == (service_user *) -1l)
fct = nscd_getnetgrent;
else
Expand All @@ -291,74 +291,73 @@ __internal_getnetgrent_r (char **hostp, char **userp, char **domainp,
fct = __nss_lookup_function (datap->nip, "getnetgrent_r");
no_more = fct == NULL;
}
}

while (! no_more)
{
status = DL_CALL_FCT (*fct, (datap, buffer, buflen, &errno));

if (status == NSS_STATUS_RETURN
/* The service returned a NOTFOUND, but there are more groups that we
need to resolve before we give up. */
|| (status == NSS_STATUS_NOTFOUND && datap->needed_groups != NULL))
while (! no_more)
{
/* This was the last one for this group. Look at next group
if available. */
int found = 0;
while (datap->needed_groups != NULL && ! found)
status = DL_CALL_FCT (*fct, (datap, buffer, buflen, &errno));

if (status == NSS_STATUS_RETURN
/* The service returned a NOTFOUND, but there are more groups that
we need to resolve before we give up. */
|| (status == NSS_STATUS_NOTFOUND && datap->needed_groups != NULL))
{
struct name_list *tmp = datap->needed_groups;
datap->needed_groups = datap->needed_groups->next;
tmp->next = datap->known_groups;
datap->known_groups = tmp;
/* This was the last one for this group. Look at next group
if available. */
int found = 0;
while (datap->needed_groups != NULL && ! found)
{
struct name_list *tmp = datap->needed_groups;
datap->needed_groups = datap->needed_groups->next;
tmp->next = datap->known_groups;
datap->known_groups = tmp;

found = __internal_setnetgrent_reuse (datap->known_groups->name,
datap, errnop);
}
found = __internal_setnetgrent_reuse (datap->known_groups->name,
datap, errnop);
}

if (found && datap->nip != NULL)
{
fct = __nss_lookup_function (datap->nip, "getnetgrent_r");
if (fct != NULL)
continue;
if (found && datap->nip != NULL)
{
fct = __nss_lookup_function (datap->nip, "getnetgrent_r");
if (fct != NULL)
continue;
}
}
}
else if (status == NSS_STATUS_SUCCESS && datap->type == group_val)
{
/* The last entry was a name of another netgroup. */
struct name_list *namep;

/* Ignore if we've seen the name before. */
for (namep = datap->known_groups; namep != NULL;
namep = namep->next)
if (strcmp (datap->val.group, namep->name) == 0)
break;
if (namep == NULL)
for (namep = datap->needed_groups; namep != NULL;
namep = namep->next)
if (strcmp (datap->val.group, namep->name) == 0)
break;
if (namep != NULL)
/* Really ignore. */
continue;

size_t group_len = strlen (datap->val.group) + 1;
namep = (struct name_list *) malloc (sizeof (struct name_list)
+ group_len);
if (namep == NULL)
/* We are out of memory. */
status = NSS_STATUS_RETURN;
else
else if (status == NSS_STATUS_SUCCESS && datap->type == group_val)
{
namep->next = datap->needed_groups;
memcpy (namep->name, datap->val.group, group_len);
datap->needed_groups = namep;
/* And get the next entry. */
continue;
/* The last entry was a name of another netgroup. */
struct name_list *namep;

/* Ignore if we've seen the name before. */
for (namep = datap->known_groups; namep != NULL;
namep = namep->next)
if (strcmp (datap->val.group, namep->name) == 0)
break;
if (namep == NULL)
for (namep = datap->needed_groups; namep != NULL;
namep = namep->next)
if (strcmp (datap->val.group, namep->name) == 0)
break;
if (namep != NULL)
/* Really ignore. */
continue;

size_t group_len = strlen (datap->val.group) + 1;
namep = (struct name_list *) malloc (sizeof (struct name_list)
+ group_len);
if (namep == NULL)
/* We are out of memory. */
status = NSS_STATUS_RETURN;
else
{
namep->next = datap->needed_groups;
memcpy (namep->name, datap->val.group, group_len);
datap->needed_groups = namep;
/* And get the next entry. */
continue;
}
}
break;
}

break;
}

if (status == NSS_STATUS_SUCCESS)
Expand All @@ -382,7 +381,7 @@ __getnetgrent_r (char **hostp, char **userp, char **domainp,
__libc_lock_lock (lock);

status = __internal_getnetgrent_r (hostp, userp, domainp, &dataset,
buffer, buflen, &errno);
buffer, buflen, &errno);

__libc_lock_unlock (lock);

Expand Down

0 comments on commit 66ce3cb

Please sign in to comment.