mirror of
https://github.com/sudo-project/sudo.git
synced 2025-08-31 22:35:10 +00:00
Change defaults callbacks to take a union sudo_defs_val * instead
of a char *.
This commit is contained in:
@@ -656,7 +656,7 @@ store_int(char *val, struct sudo_defs_types *def, int op)
|
|||||||
def->sd_un.ival = i;
|
def->sd_un.ival = i;
|
||||||
}
|
}
|
||||||
if (def->callback)
|
if (def->callback)
|
||||||
debug_return_bool(def->callback(val));
|
debug_return_bool(def->callback(&def->sd_un));
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -679,7 +679,7 @@ store_uint(char *val, struct sudo_defs_types *def, int op)
|
|||||||
def->sd_un.uival = u;
|
def->sd_un.uival = u;
|
||||||
}
|
}
|
||||||
if (def->callback)
|
if (def->callback)
|
||||||
debug_return_bool(def->callback(val));
|
debug_return_bool(def->callback(&def->sd_un));
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -700,7 +700,7 @@ store_float(char *val, struct sudo_defs_types *def, int op)
|
|||||||
def->sd_un.fval = d;
|
def->sd_un.fval = d;
|
||||||
}
|
}
|
||||||
if (def->callback)
|
if (def->callback)
|
||||||
debug_return_bool(def->callback(val));
|
debug_return_bool(def->callback(&def->sd_un));
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -728,7 +728,7 @@ store_tuple(char *val, struct sudo_defs_types *def, int op)
|
|||||||
debug_return_bool(false);
|
debug_return_bool(false);
|
||||||
}
|
}
|
||||||
if (def->callback)
|
if (def->callback)
|
||||||
debug_return_bool(def->callback(val));
|
debug_return_bool(def->callback(&def->sd_un));
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -747,7 +747,7 @@ store_str(char *val, struct sudo_defs_types *def, int op)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (def->callback)
|
if (def->callback)
|
||||||
debug_return_int(def->callback(val));
|
debug_return_int(def->callback(&def->sd_un));
|
||||||
debug_return_int(true);
|
debug_return_int(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -861,7 +861,7 @@ store_mode(char *val, struct sudo_defs_types *def, int op)
|
|||||||
def->sd_un.mode = mode;
|
def->sd_un.mode = mode;
|
||||||
}
|
}
|
||||||
if (def->callback)
|
if (def->callback)
|
||||||
debug_return_bool(def->callback(val));
|
debug_return_bool(def->callback(&def->sd_un));
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -43,6 +43,17 @@ struct def_values {
|
|||||||
enum def_tuple nval;/* numeric value */
|
enum def_tuple nval;/* numeric value */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
union sudo_defs_val {
|
||||||
|
int flag;
|
||||||
|
int ival;
|
||||||
|
unsigned int uival;
|
||||||
|
double fval;
|
||||||
|
enum def_tuple tuple;
|
||||||
|
char *str;
|
||||||
|
mode_t mode;
|
||||||
|
struct list_members list;
|
||||||
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Structure describing compile-time and run-time options.
|
* Structure describing compile-time and run-time options.
|
||||||
*/
|
*/
|
||||||
@@ -51,17 +62,8 @@ struct sudo_defs_types {
|
|||||||
int type;
|
int type;
|
||||||
char *desc;
|
char *desc;
|
||||||
struct def_values *values;
|
struct def_values *values;
|
||||||
bool (*callback)(const char *);
|
bool (*callback)(const union sudo_defs_val *);
|
||||||
union {
|
union sudo_defs_val sd_un;
|
||||||
int flag;
|
|
||||||
int ival;
|
|
||||||
unsigned int uival;
|
|
||||||
double fval;
|
|
||||||
enum def_tuple tuple;
|
|
||||||
char *str;
|
|
||||||
mode_t mode;
|
|
||||||
struct list_members list;
|
|
||||||
} sd_un;
|
|
||||||
};
|
};
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -154,7 +154,7 @@ io_mkdirs(char *path, mode_t mode, bool is_temp)
|
|||||||
/*
|
/*
|
||||||
* Set max session ID (aka sequence number)
|
* Set max session ID (aka sequence number)
|
||||||
*/
|
*/
|
||||||
bool
|
static bool
|
||||||
io_set_max_sessid(const char *maxval)
|
io_set_max_sessid(const char *maxval)
|
||||||
{
|
{
|
||||||
const char *errstr;
|
const char *errstr;
|
||||||
@@ -175,6 +175,19 @@ io_set_max_sessid(const char *maxval)
|
|||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Sudoers callback for maxseq Defaults setting.
|
||||||
|
*/
|
||||||
|
bool
|
||||||
|
cb_maxseq(const union sudo_defs_val *sd_un)
|
||||||
|
{
|
||||||
|
debug_decl(cb_maxseq, SUDOERS_DEBUG_UTIL)
|
||||||
|
|
||||||
|
/* Clamp value to SESSID_MAX as documented. */
|
||||||
|
sessid_max = sd_un->uival < SESSID_MAX ? sd_un->uival : SESSID_MAX;
|
||||||
|
debug_return_bool(true);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read the on-disk sequence number, set sessid to the next
|
* Read the on-disk sequence number, set sessid to the next
|
||||||
* number, and update the on-disk copy.
|
* number, and update the on-disk copy.
|
||||||
|
@@ -69,8 +69,8 @@
|
|||||||
* Prototypes
|
* Prototypes
|
||||||
*/
|
*/
|
||||||
static char *find_editor(int nfiles, char **files, int *argc_out, char ***argv_out);
|
static char *find_editor(int nfiles, char **files, int *argc_out, char ***argv_out);
|
||||||
static bool cb_runas_default(const char *);
|
static bool cb_runas_default(const union sudo_defs_val *);
|
||||||
static bool cb_sudoers_locale(const char *);
|
static bool cb_sudoers_locale(const union sudo_defs_val *);
|
||||||
static int set_cmnd(void);
|
static int set_cmnd(void);
|
||||||
static int create_admin_success_flag(void);
|
static int create_admin_success_flag(void);
|
||||||
static bool init_vars(char * const *);
|
static bool init_vars(char * const *);
|
||||||
@@ -753,7 +753,7 @@ init_vars(char * const envp[])
|
|||||||
sudo_defs_table[I_SUDOERS_LOCALE].callback = cb_sudoers_locale;
|
sudo_defs_table[I_SUDOERS_LOCALE].callback = cb_sudoers_locale;
|
||||||
|
|
||||||
/* Set maxseq callback. */
|
/* Set maxseq callback. */
|
||||||
sudo_defs_table[I_MAXSEQ].callback = io_set_max_sessid;
|
sudo_defs_table[I_MAXSEQ].callback = cb_maxseq;
|
||||||
|
|
||||||
/* It is now safe to use log_warningx() and set_perms() */
|
/* It is now safe to use log_warningx() and set_perms() */
|
||||||
if (unknown_user) {
|
if (unknown_user) {
|
||||||
@@ -761,6 +761,7 @@ init_vars(char * const envp[])
|
|||||||
(unsigned int) user_uid);
|
(unsigned int) user_uid);
|
||||||
debug_return_bool(false);
|
debug_return_bool(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
debug_return_bool(true);
|
debug_return_bool(true);
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1171,11 +1172,11 @@ set_runasgr(const char *group, bool quiet)
|
|||||||
* Callback for runas_default sudoers setting.
|
* Callback for runas_default sudoers setting.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
cb_runas_default(const char *user)
|
cb_runas_default(const union sudo_defs_val *sd_un)
|
||||||
{
|
{
|
||||||
/* Only reset runaspw if user didn't specify one. */
|
/* Only reset runaspw if user didn't specify one. */
|
||||||
if (!runas_user && !runas_group)
|
if (!runas_user && !runas_group)
|
||||||
return set_runaspw(user, true);
|
return set_runaspw(sd_un->str, true);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1183,9 +1184,9 @@ cb_runas_default(const char *user)
|
|||||||
* Callback for sudoers_locale sudoers setting.
|
* Callback for sudoers_locale sudoers setting.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
cb_sudoers_locale(const char *locale)
|
cb_sudoers_locale(const union sudo_defs_val *sd_un)
|
||||||
{
|
{
|
||||||
return sudoers_initlocale(NULL, locale);
|
return sudoers_initlocale(NULL, sd_un->str);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@@ -317,7 +317,7 @@ bool get_boottime(struct timespec *);
|
|||||||
|
|
||||||
/* iolog.c */
|
/* iolog.c */
|
||||||
bool io_nextid(char *iolog_dir, char *iolog_dir_fallback, char sessid[7]);
|
bool io_nextid(char *iolog_dir, char *iolog_dir_fallback, char sessid[7]);
|
||||||
bool io_set_max_sessid(const char *sessid);
|
bool cb_maxseq(const union sudo_defs_val *sd_un);
|
||||||
|
|
||||||
/* iolog_path.c */
|
/* iolog_path.c */
|
||||||
char *expand_iolog_path(const char *prefix, const char *dir, const char *file,
|
char *expand_iolog_path(const char *prefix, const char *dir, const char *file,
|
||||||
|
@@ -71,7 +71,7 @@ void print_userspecs(void);
|
|||||||
void usage(void) __attribute__((__noreturn__));
|
void usage(void) __attribute__((__noreturn__));
|
||||||
static void set_runaspw(const char *);
|
static void set_runaspw(const char *);
|
||||||
static void set_runasgr(const char *);
|
static void set_runasgr(const char *);
|
||||||
static bool cb_runas_default(const char *);
|
static bool cb_runas_default(const union sudo_defs_val *);
|
||||||
static int testsudoers_print(const char *msg);
|
static int testsudoers_print(const char *msg);
|
||||||
|
|
||||||
extern void setgrfile(const char *);
|
extern void setgrfile(const char *);
|
||||||
@@ -392,11 +392,11 @@ set_runasgr(const char *group)
|
|||||||
* Callback for runas_default sudoers setting.
|
* Callback for runas_default sudoers setting.
|
||||||
*/
|
*/
|
||||||
static bool
|
static bool
|
||||||
cb_runas_default(const char *user)
|
cb_runas_default(const union sudo_defs_val *sd_un)
|
||||||
{
|
{
|
||||||
/* Only reset runaspw if user didn't specify one. */
|
/* Only reset runaspw if user didn't specify one. */
|
||||||
if (!runas_user && !runas_group)
|
if (!runas_user && !runas_group)
|
||||||
set_runaspw(user);
|
set_runaspw(sd_un->str);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user