aboutsummaryrefslogtreecommitdiff
path: root/lib/libc/gen/getnetgrent.c
diff options
context:
space:
mode:
authorBill Paul <wpaul@FreeBSD.org>1997-11-16 03:02:39 +0000
committerBill Paul <wpaul@FreeBSD.org>1997-11-16 03:02:39 +0000
commitd9cc92f584084e320bc8e1f437fd46843924762f (patch)
tree60dcea468964a1e542f2ccca2088f712947cf055 /lib/libc/gen/getnetgrent.c
parent40b8c3d00880b882bc21d05af8dedf907bb8c8eb (diff)
downloadsrc-d9cc92f584084e320bc8e1f437fd46843924762f.tar.gz
src-d9cc92f584084e320bc8e1f437fd46843924762f.zip
Close PR #4867: improve _listmatch() to avoid returning false positives.
PR: 4867
Notes
Notes: svn path=/head/; revision=31180
Diffstat (limited to 'lib/libc/gen/getnetgrent.c')
-rw-r--r--lib/libc/gen/getnetgrent.c25
1 files changed, 16 insertions, 9 deletions
diff --git a/lib/libc/gen/getnetgrent.c b/lib/libc/gen/getnetgrent.c
index 605dd500e422..cc04f2f0d7bb 100644
--- a/lib/libc/gen/getnetgrent.c
+++ b/lib/libc/gen/getnetgrent.c
@@ -276,17 +276,24 @@ endnetgrent()
#ifdef YP
static int _listmatch(list, group, len)
-char *list, *group;
-int len;
+ char *list, *group;
+ int len;
{
- char *ptr = list;
-
- while ( (ptr = strstr(ptr, group)) ) {
-
- ptr += strlen(group);
-
- if (*ptr == ',' || *ptr == '\0')
+ char *ptr = list, *cptr;
+ int glen = strlen(group);
+
+ /* skip possible leading whitespace */
+ while(isspace(*ptr))
+ ptr++;
+
+ while (ptr < list + len) {
+ cptr = ptr;
+ while(*ptr != ',' && !isspace(*ptr))
+ ptr++;
+ if (strncmp(cptr, group, glen) == 0 && glen == (ptr - cptr))
return(1);
+ while(*ptr == ',' || isspace(*ptr))
+ ptr++;
}
return(0);