diff options
Diffstat (limited to 'lib')
-rw-r--r-- | lib/libc/gen/getnetgrent.c | 25 |
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); |