sudo frontend: make more bit flags unsigned.

This commit is contained in:
Todd C. Miller
2023-07-10 11:06:34 -06:00
parent cbcb1d2506
commit dbb95ad214
11 changed files with 79 additions and 78 deletions

View File

@@ -53,7 +53,7 @@ sudo_conversation(int num_msgs, const struct sudo_conv_message msgs[],
for (n = 0; n < num_msgs; n++) {
const struct sudo_conv_message *msg = &msgs[n];
int flags = tgetpass_flags;
unsigned int flags = tgetpass_flags;
FILE *fp = stdout;
switch (msg->msg_type & 0xff) {

View File

@@ -406,7 +406,7 @@ sudo_edit_open_nonwritable(char *path, int oflags, mode_t mode,
#ifdef O_NOFOLLOW
int
sudo_edit_open(char *path, int oflags, mode_t mode, int sflags,
sudo_edit_open(char *path, int oflags, mode_t mode, unsigned int sflags,
const struct sudo_cred *user_cred, const struct sudo_cred *cur_cred)
{
int fd;
@@ -435,7 +435,7 @@ sudo_edit_open(char *path, int oflags, mode_t mode, int sflags,
}
#else
int
sudo_edit_open(char *path, int oflags, mode_t mode, int sflags,
sudo_edit_open(char *path, int oflags, mode_t mode, unsigned int sflags,
const struct sudo_cred *user_cred, const struct sudo_cred *cur_cred)
{
struct stat sb;
@@ -488,7 +488,7 @@ sudo_edit_open(char *path, int oflags, mode_t mode, int sflags,
* Does not modify the value of errno.
*/
bool
sudo_edit_parent_valid(char *path, int sflags,
sudo_edit_parent_valid(char *path, unsigned int sflags,
const struct sudo_cred *user_cred, const struct sudo_cred *cur_cred)
{
const int serrno = errno;

View File

@@ -95,7 +95,7 @@ enable_intercept(char *envp[], const char *dso, int intercept_fd)
*/
int
sudo_execve(int fd, const char *path, char *const argv[], char *envp[],
int intercept_fd, int flags)
int intercept_fd, unsigned int flags)
{
debug_decl(sudo_execve, SUDO_DEBUG_UTIL);

View File

@@ -42,7 +42,7 @@
#include "sudo.h"
#include "sudo_lbuf.h"
int tgetpass_flags;
unsigned int tgetpass_flags;
/*
* Local functions.
@@ -225,7 +225,7 @@ parse_env_list(struct environment *e, char *list)
* Sets nargc and nargv which corresponds to the argc/argv we'll use
* for the command to be run (if we are running one).
*/
int
unsigned int
parse_args(int argc, char **argv, const char *shell, int *old_optind,
int *nargc, char ***nargv, struct sudo_settings **settingsp,
char ***env_addp, const char **list_userp)
@@ -234,9 +234,9 @@ parse_args(int argc, char **argv, const char *shell, int *old_optind,
struct option *long_opts = sudo_long_opts;
struct environment extra_env;
const char *list_user = NULL;
int mode = 0; /* what mode is sudo to be run in? */
int flags = 0; /* mode flags */
int valid_flags = DEFAULT_VALID_FLAGS;
unsigned int mode = 0; /* what mode is sudo to be run in? */
unsigned int flags = 0; /* mode flags */
unsigned int valid_flags = DEFAULT_VALID_FLAGS;
int ch, i;
char *cp;
debug_decl(parse_args, SUDO_DEBUG_ARGS);
@@ -692,7 +692,7 @@ parse_args(int argc, char **argv, const char *shell, int *old_optind,
*nargc = argc;
*nargv = argv;
*list_userp = list_user;
debug_return_int(mode | flags);
debug_return_uint(mode | flags);
}
/*

View File

@@ -440,7 +440,7 @@ selinux_setexeccon(void)
void
selinux_execve(int fd, const char *path, char *const argv[], char *envp[],
const char *rundir, int flags)
const char *rundir, unsigned int flags)
{
char **nargv;
const char *sesh;

View File

@@ -95,7 +95,7 @@ main(int argc, char *argv[], char *envp[])
{
enum sesh_mode mode = SESH_RUN_COMMAND;
const char *errstr, *rundir = NULL;
int flags = CD_SUDOEDIT_FOLLOW;
unsigned int flags = CD_SUDOEDIT_FOLLOW;
char *edit_user = NULL;
int ch, ret, fd = -1;
debug_decl(main, SUDO_DEBUG_MAIN);

View File

@@ -140,7 +140,8 @@ main(int argc, char *argv[], char *envp[])
{
struct command_details command_details;
struct user_details user_details;
int nargc, sudo_mode, status = 0;
unsigned int sudo_mode;
int nargc, status = 0;
char **nargv, **env_add;
char **command_info = NULL, **argv_out = NULL, **run_envp = NULL;
const char * const allowed_prognames[] = { "sudo", "sudoedit", NULL };

View File

@@ -52,28 +52,28 @@
/*
* Various modes sudo can be in (based on arguments) in hex
*/
#define MODE_RUN 0x00000001
#define MODE_EDIT 0x00000002
#define MODE_VALIDATE 0x00000004
#define MODE_INVALIDATE 0x00000008
#define MODE_KILL 0x00000010
#define MODE_VERSION 0x00000020
#define MODE_HELP 0x00000040
#define MODE_LIST 0x00000080
#define MODE_CHECK 0x00000100
#define MODE_MASK 0x0000ffff
#define MODE_RUN 0x00000001U
#define MODE_EDIT 0x00000002U
#define MODE_VALIDATE 0x00000004U
#define MODE_INVALIDATE 0x00000008U
#define MODE_KILL 0x00000010U
#define MODE_VERSION 0x00000020U
#define MODE_HELP 0x00000040U
#define MODE_LIST 0x00000080U
#define MODE_CHECK 0x00000100U
#define MODE_MASK 0x0000ffffU
/* Mode flags */
/* XXX - prune this */
#define MODE_BACKGROUND 0x00010000
#define MODE_SHELL 0x00020000
#define MODE_LOGIN_SHELL 0x00040000
#define MODE_IMPLIED_SHELL 0x00080000
#define MODE_RESET_HOME 0x00100000
#define MODE_PRESERVE_GROUPS 0x00200000
#define MODE_PRESERVE_ENV 0x00400000
#define MODE_NONINTERACTIVE 0x00800000
#define MODE_LONG_LIST 0x01000000
#define MODE_BACKGROUND 0x00010000U
#define MODE_SHELL 0x00020000U
#define MODE_LOGIN_SHELL 0x00040000U
#define MODE_IMPLIED_SHELL 0x00080000U
#define MODE_RESET_HOME 0x00100000U
#define MODE_PRESERVE_GROUPS 0x00200000U
#define MODE_PRESERVE_ENV 0x00400000U
#define MODE_NONINTERACTIVE 0x00800000U
#define MODE_LONG_LIST 0x01000000U
/* Indexes into sudo_settings[] args, must match parse_args.c. */
#define ARG_BSDAUTH_TYPE 0
@@ -110,13 +110,13 @@
/*
* Flags for tgetpass()
*/
#define TGP_NOECHO 0x00 /* turn echo off reading pw (default) */
#define TGP_ECHO 0x01 /* leave echo on when reading passwd */
#define TGP_STDIN 0x02 /* read from stdin, not /dev/tty */
#define TGP_ASKPASS 0x04 /* read from askpass helper program */
#define TGP_MASK 0x08 /* mask user input when reading */
#define TGP_NOECHO_TRY 0x10 /* turn off echo if possible */
#define TGP_BELL 0x20 /* bell on password prompt */
#define TGP_NOECHO 0x00U /* turn echo off reading pw (default) */
#define TGP_ECHO 0x01U /* leave echo on when reading passwd */
#define TGP_STDIN 0x02U /* read from stdin, not /dev/tty */
#define TGP_ASKPASS 0x04U /* read from askpass helper program */
#define TGP_MASK 0x08U /* mask user input when reading */
#define TGP_NOECHO_TRY 0x10U /* turn off echo if possible */
#define TGP_BELL 0x20U /* bell on password prompt */
/* name/value pairs for command line settings. */
struct sudo_settings {
@@ -150,33 +150,33 @@ struct user_details {
int ts_cols;
};
#define CD_SET_UID 0x00000001
#define CD_SET_EUID 0x00000002
#define CD_SET_GID 0x00000004
#define CD_SET_EGID 0x00000008
#define CD_PRESERVE_GROUPS 0x00000010
#define CD_INTERCEPT 0x00000020
#define CD_NOEXEC 0x00000040
#define CD_SET_PRIORITY 0x00000080
#define CD_SET_UMASK 0x00000100
#define CD_SET_TIMEOUT 0x00000200
#define CD_SUDOEDIT 0x00000400
#define CD_BACKGROUND 0x00000800
#define CD_RBAC_ENABLED 0x00001000
#define CD_USE_PTY 0x00002000
#define CD_SET_UTMP 0x00004000
#define CD_EXEC_BG 0x00008000
#define CD_SUDOEDIT_FOLLOW 0x00010000
#define CD_SUDOEDIT_CHECKDIR 0x00020000
#define CD_SET_GROUPS 0x00040000
#define CD_LOGIN_SHELL 0x00080000
#define CD_OVERRIDE_UMASK 0x00100000
#define CD_LOG_SUBCMDS 0x00200000
#define CD_USE_PTRACE 0x00400000
#define CD_FEXECVE 0x00800000
#define CD_INTERCEPT_VERIFY 0x01000000
#define CD_RBAC_SET_CWD 0x02000000
#define CD_CWD_OPTIONAL 0x04000000
#define CD_SET_UID 0x00000001U
#define CD_SET_EUID 0x00000002U
#define CD_SET_GID 0x00000004U
#define CD_SET_EGID 0x00000008U
#define CD_PRESERVE_GROUPS 0x00000010U
#define CD_INTERCEPT 0x00000020U
#define CD_NOEXEC 0x00000040U
#define CD_SET_PRIORITY 0x00000080U
#define CD_SET_UMASK 0x00000100U
#define CD_SET_TIMEOUT 0x00000200U
#define CD_SUDOEDIT 0x00000400U
#define CD_BACKGROUND 0x00000800U
#define CD_RBAC_ENABLED 0x00001000U
#define CD_USE_PTY 0x00002000U
#define CD_SET_UTMP 0x00004000U
#define CD_EXEC_BG 0x00008000U
#define CD_SUDOEDIT_FOLLOW 0x00010000U
#define CD_SUDOEDIT_CHECKDIR 0x00020000U
#define CD_SET_GROUPS 0x00040000U
#define CD_LOGIN_SHELL 0x00080000U
#define CD_OVERRIDE_UMASK 0x00100000U
#define CD_LOG_SUBCMDS 0x00200000U
#define CD_USE_PTRACE 0x00400000U
#define CD_FEXECVE 0x00800000U
#define CD_INTERCEPT_VERIFY 0x01000000U
#define CD_RBAC_SET_CWD 0x02000000U
#define CD_CWD_OPTIONAL 0x04000000U
struct preserved_fd {
TAILQ_ENTRY(preserved_fd) entries;
@@ -193,7 +193,7 @@ struct command_details {
int priority;
unsigned int timeout;
int closefrom;
int flags;
unsigned int flags;
int execfd;
int nfiles;
struct preserved_fd_list preserved_fds;
@@ -240,7 +240,7 @@ enum sudo_gc_types {
void cleanup(int);
/* tgetpass.c */
char *tgetpass(const char *prompt, int timeout, int flags,
char *tgetpass(const char *prompt, int timeout, unsigned int flags,
struct sudo_conv_callback *callback);
const struct sudo_cred *sudo_askpass_cred(const struct sudo_cred *cred);
@@ -248,10 +248,10 @@ const struct sudo_cred *sudo_askpass_cred(const struct sudo_cred *cred);
int sudo_execute(struct command_details *details, const struct user_details *ud, struct sudo_event_base *evbase, struct command_status *cstat);
/* parse_args.c */
int parse_args(int argc, char **argv, const char *shell, int *old_optind,
int *nargc, char ***nargv, struct sudo_settings **settingsp,
char ***env_addp, const char **list_user);
extern int tgetpass_flags;
unsigned int parse_args(int argc, char **argv, const char *shell,
int *old_optind, int *nargc, char ***nargv,
struct sudo_settings **settingsp, char ***env_addp, const char **list_user);
extern unsigned int tgetpass_flags;
/* get_pty.c */
char *get_pty(int *leader, int *follower, uid_t uid);
@@ -290,7 +290,7 @@ int selinux_relabel_tty(const char *ttyn, int ttyfd);
int selinux_restore_tty(void);
int selinux_setexeccon(void);
void selinux_execve(int fd, const char *path, char *const argv[],
char *envp[], const char *rundir, int flags);
char *envp[], const char *rundir, unsigned int flags);
/* apparmor.c */
int apparmor_is_enabled(void);

View File

@@ -48,8 +48,8 @@ bool sudo_check_temp_file(int tfd, const char *tname, uid_t uid, struct stat *sb
/* edit_open.c */
struct sudo_cred;
void switch_user(uid_t euid, gid_t egid, int ngroups, GETGROUPS_T *groups);
int sudo_edit_open(char *path, int oflags, mode_t mode, int sflags, const struct sudo_cred *user_cred, const struct sudo_cred *cur_cred);
int sudo_edit_open(char *path, int oflags, mode_t mode, unsigned int sflags, const struct sudo_cred *user_cred, const struct sudo_cred *cur_cred);
int dir_is_writable(int dfd, const struct sudo_cred *user_cred, const struct sudo_cred *cur_cred);
bool sudo_edit_parent_valid(char *path, int sflags, const struct sudo_cred *user_cred, const struct sudo_cred *cur_cred);
bool sudo_edit_parent_valid(char *path, unsigned int sflags, const struct sudo_cred *user_cred, const struct sudo_cred *cur_cred);
#endif /* SUDO_EDIT_H */

View File

@@ -180,7 +180,7 @@ bool sudo_terminated(struct command_status *cstat);
void free_exec_closure(struct exec_closure *ec);
/* exec_common.c */
int sudo_execve(int fd, const char *path, char *const argv[], char *envp[], int intercept_fd, int flags);
int sudo_execve(int fd, const char *path, char *const argv[], char *envp[], int intercept_fd, unsigned int flags);
char **disable_execute(char *envp[], const char *dso);
char **enable_monitor(char *envp[], const char *dso);

View File

@@ -108,7 +108,7 @@ tgetpass_display_error(enum tgetpass_errval errval)
* Like getpass(3) but with timeout and echo flags.
*/
char *
tgetpass(const char *prompt, int timeout, int flags,
tgetpass(const char *prompt, int timeout, unsigned int flags,
struct sudo_conv_callback *callback)
{
struct sigaction sa, savealrm, saveint, savehup, savequit, saveterm;