now uses fnmatch()

This commit is contained in:
Todd C. Miller
1996-05-28 00:00:17 +00:00
parent a062a35c7e
commit 0713be74a6

View File

@@ -40,6 +40,13 @@ static char rcsid[] = "$Id$";
#ifdef HAVE_STRINGS_H #ifdef HAVE_STRINGS_H
# include <strings.h> # include <strings.h>
#endif /* HAVE_STRINGS_H */ #endif /* HAVE_STRINGS_H */
#ifdef HAVE_FNMATCH_H
# include <fnmatch.h>
#else
# ifndef HAVE_FNMATCH
# include "emul/fnmatch.h"
# endif /* HAVE_FNMATCH */
#endif /* HAVE_FNMATCH_H */
#if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS) #if defined(HAVE_MALLOC_H) && !defined(STDC_HEADERS)
# include <malloc.h> # include <malloc.h>
#endif /* HAVE_MALLOC_H && !STDC_HEADERS */ #endif /* HAVE_MALLOC_H && !STDC_HEADERS */
@@ -95,17 +102,31 @@ int command_matches(cmnd, user_args, path, sudoers_args)
if ((args = strchr(path, ' '))) if ((args = strchr(path, ' ')))
*args++ = '\0'; *args++ = '\0';
if (has_meta(path)) {
if (fnmatch(path, cmnd, FNM_PATHNAME))
return(FALSE);
if (!sudoers_args)
return(TRUE);
else if (user_args && sudoers_args)
return(compare_args(user_args, sudoers_args));
else if (!user_args && sudoers_args && sudoers_args[0][0] == '\0' &&
sudoers_args[1] == NULL)
return(TRUE);
else
return(FALSE);
} else {
plen = strlen(path); plen = strlen(path);
if (path[plen - 1] != '/') { if (path[plen - 1] != '/') {
if (strcmp(cmnd, path) == 0) { if (strcmp(cmnd, path))
if (!sudoers_args) {
return(TRUE);
} else if (user_args && sudoers_args) {
return(compare_args(user_args, sudoers_args));
} else {
return(FALSE); return(FALSE);
} if (!sudoers_args)
} else return(TRUE);
else if (user_args && sudoers_args)
return(compare_args(user_args, sudoers_args));
else if (!user_args && sudoers_args && sudoers_args[0][0] == '\0' &&
sudoers_args[1] == NULL)
return(TRUE);
else
return(FALSE); return(FALSE);
} }
@@ -122,6 +143,7 @@ int command_matches(cmnd, user_args, path, sudoers_args)
/* see whether path is the prefix of cmnd */ /* see whether path is the prefix of cmnd */
return((strncmp(cmnd, path, plen) == 0)); return((strncmp(cmnd, path, plen) == 0));
} }
}
int addr_matches(n) int addr_matches(n)
@@ -311,9 +333,9 @@ int compare_args(user_args, sudoers_args)
for (ua=user_args, sa=sudoers_args; *ua && *sa; ua++, sa++) { for (ua=user_args, sa=sudoers_args; *ua && *sa; ua++, sa++) {
/* only do wildcard match if there are meta chars */ /* only do wildcard match if there are meta chars */
/* XXX - is this really any faster than wildmat() for all? */ /* XXX - is this really any faster than fnmatch() for all? */
if (has_meta(*sa)) { if (has_meta(*sa)) {
if (wildmat(*ua, *sa) != 1) if (fnmatch(*sa, *ua, FNM_PATHNAME))
return(FALSE); return(FALSE);
} else { } else {
if (strcmp(*ua, *sa)) if (strcmp(*ua, *sa))