Use sudo_basename() instead of doing the equivalent manually.

This commit is contained in:
Todd C. Miller
2021-02-10 15:14:08 -07:00
parent 41fa461fe1
commit 0663ffbc3f
15 changed files with 38 additions and 101 deletions

View File

@@ -136,7 +136,7 @@ MKTEMP_TEST_OBJS = mktemp_test.lo mktemp.lo
PARSELN_TEST_OBJS = parseln_test.lo parseln.lo
PROGNAME_TEST_OBJS = progname_test.lo progname.lo
PROGNAME_TEST_OBJS = progname_test.lo progname.lo basename.lo
CONF_TEST_OBJS = conf_test.lo sudo_conf.lo

View File

@@ -53,8 +53,7 @@ sudo_getprogname(void)
void
sudo_setprogname(const char *name)
{
const char *slash = strrchr(name, '/');
__progname = slash ? slash + 1 : name;
__progname = sudo_basename(name);
}
#endif
@@ -69,9 +68,7 @@ initprogname2(const char *name, const char * const * allowed)
name = progname;
} else {
/* Make sure user-specified name is relative. */
const char *slash = strrchr(name, '/');
if (slash != NULL)
name = slash + 1;
name = sudo_basename(name);
}
/* Check for libtool prefix and strip it if present. */

View File

@@ -37,12 +37,8 @@ main(int argc, char *argv[])
{
char *progbase = "progname_test";
if (argc > 0) {
if ((progbase = strrchr(argv[0], '/')) != NULL)
progbase++;
else
progbase = argv[0];
}
if (argc > 0)
progbase = sudo_basename(argv[0]);
initprogname(progbase);
/* Make sure getprogname() matches basename of argv[0]. */

View File

@@ -516,33 +516,25 @@ struct sudo_conf_debug_file_list *
sudo_conf_debug_files_v1(const char *progname)
{
struct sudo_conf_debug *debug_spec;
size_t prognamelen, progbaselen;
const char *progbase = progname;
const char *progbase;
debug_decl(sudo_conf_debug_files, SUDO_DEBUG_UTIL);
/* Determine basename if program is fully qualified (like for plugins). */
prognamelen = progbaselen = strlen(progname);
if (*progname == '/') {
progbase = strrchr(progname, '/');
progbaselen = strlen(++progbase);
}
progbase = progname[0] == '/' ? sudo_basename(progname) : progname;
/* Convert sudoedit -> sudo. */
if (progbaselen > 4 && strcmp(progbase + 4, "edit") == 0) {
progbaselen -= 4;
}
if (strcmp(progbase, "sudoedit") == 0)
progbase = "sudo";
TAILQ_FOREACH(debug_spec, &sudo_conf_data.debugging, entries) {
const char *prog = progbase;
size_t len = progbaselen;
if (debug_spec->progname[0] == '/') {
/* Match fully-qualified name, if possible. */
prog = progname;
len = prognamelen;
}
if (strncmp(debug_spec->progname, prog, len) == 0 &&
debug_spec->progname[len] == '\0') {
if (strcmp(debug_spec->progname, prog) == 0)
debug_return_ptr(&debug_spec->debug_files);
}
}
debug_return_ptr(NULL);
}

View File

@@ -1,6 +1,6 @@
@COMPAT_EXP@initprogname
initprogname2
sudo_basename
sudo_basename_v1
sudo_conf_askpass_path_v1
sudo_conf_clear_paths_v1
sudo_conf_debug_files_v1