Change sudo_strtomode() to return mode_t.
This commit is contained in:
@@ -19,7 +19,7 @@
|
||||
#ifndef SUDO_DEBUG_H
|
||||
#define SUDO_DEBUG_H
|
||||
|
||||
#include <sys/types.h> /* for id_t, size_t, ssize_t, time_t */
|
||||
#include <sys/types.h> /* for id_t, mode_t, size_t, ssize_t, time_t */
|
||||
#include <stdarg.h>
|
||||
#ifdef HAVE_STDBOOL_H
|
||||
# include <stdbool.h>
|
||||
@@ -168,6 +168,14 @@ struct sudo_conf_debug_file_list;
|
||||
return sudo_debug_ret; \
|
||||
} while (0)
|
||||
|
||||
#define debug_return_mode_t(ret) \
|
||||
do { \
|
||||
mode_t sudo_debug_ret = (ret); \
|
||||
sudo_debug_exit_mode_t(__func__, __FILE__, __LINE__, sudo_debug_subsys,\
|
||||
sudo_debug_ret); \
|
||||
return sudo_debug_ret; \
|
||||
} while (0)
|
||||
|
||||
#define debug_return_long(ret) \
|
||||
do { \
|
||||
long sudo_debug_ret = (ret); \
|
||||
@@ -260,6 +268,7 @@ sudo_dso_public void sudo_debug_exit_ssize_t_v1(const char *func, const char *fi
|
||||
sudo_dso_public void sudo_debug_exit_str_v1(const char *func, const char *file, int line, unsigned int subsys, const char *ret);
|
||||
sudo_dso_public void sudo_debug_exit_str_masked_v1(const char *func, const char *file, int line, unsigned int subsys, const char *ret);
|
||||
sudo_dso_public void sudo_debug_exit_time_t_v1(const char *func, const char *file, int line, unsigned int subsys, time_t ret);
|
||||
sudo_dso_public void sudo_debug_exit_mode_t_v1(const char *func, const char *file, int line, unsigned int subsys, mode_t ret);
|
||||
sudo_dso_public pid_t sudo_debug_fork_v1(void);
|
||||
sudo_dso_public int sudo_debug_get_active_instance_v1(void);
|
||||
sudo_dso_public int sudo_debug_get_fds_v1(unsigned char **fds);
|
||||
@@ -290,6 +299,7 @@ sudo_dso_public bool sudo_debug_needed_v1(unsigned int level);
|
||||
#define sudo_debug_exit_str(_a, _b, _c, _d, _e) sudo_debug_exit_str_v1((_a), (_b), (_c), (_d), (_e))
|
||||
#define sudo_debug_exit_str_masked(_a, _b, _c, _d, _e) sudo_debug_exit_str_masked_v1((_a), (_b), (_c), (_d), (_e))
|
||||
#define sudo_debug_exit_time_t(_a, _b, _c, _d, _e) sudo_debug_exit_time_t_v1((_a), (_b), (_c), (_d), (_e))
|
||||
#define sudo_debug_exit_mode_t(_a, _b, _c, _d, _e) sudo_debug_exit_mode_t_v1((_a), (_b), (_c), (_d), (_e))
|
||||
#define sudo_debug_fork() sudo_debug_fork_v1()
|
||||
#define sudo_debug_get_active_instance() sudo_debug_get_active_instance_v1()
|
||||
#define sudo_debug_get_fds(_a) sudo_debug_get_fds_v1((_a))
|
||||
|
@@ -312,7 +312,8 @@ sudo_dso_public id_t sudo_strtoidx_v1(const char *str, const char *sep, char **e
|
||||
|
||||
/* strtomode.c */
|
||||
sudo_dso_public int sudo_strtomode_v1(const char *cp, const char **errstr);
|
||||
#define sudo_strtomode(_a, _b) sudo_strtomode_v1((_a), (_b))
|
||||
sudo_dso_public mode_t sudo_strtomode_v2(const char *cp, const char **errstr);
|
||||
#define sudo_strtomode(_a, _b) sudo_strtomode_v2((_a), (_b))
|
||||
|
||||
/* sudo_printf.c */
|
||||
extern int (*sudo_printf)(int msg_type, const char *fmt, ...);
|
||||
|
@@ -38,8 +38,8 @@
|
||||
* On success, returns the parsed mode and clears errstr.
|
||||
* On error, returns 0 and sets errstr.
|
||||
*/
|
||||
int
|
||||
sudo_strtomode_v1(const char *cp, const char **errstr)
|
||||
mode_t
|
||||
sudo_strtomode_v2(const char *cp, const char **errstr)
|
||||
{
|
||||
char *ep;
|
||||
long lval;
|
||||
@@ -51,15 +51,21 @@ sudo_strtomode_v1(const char *cp, const char **errstr)
|
||||
if (errstr != NULL)
|
||||
*errstr = N_("invalid value");
|
||||
errno = EINVAL;
|
||||
debug_return_int(0);
|
||||
debug_return_mode_t(0);
|
||||
}
|
||||
if (lval < 0 || lval > ACCESSPERMS) {
|
||||
if (errstr != NULL)
|
||||
*errstr = lval < 0 ? N_("value too small") : N_("value too large");
|
||||
errno = ERANGE;
|
||||
debug_return_int(0);
|
||||
debug_return_mode_t(0);
|
||||
}
|
||||
if (errstr != NULL)
|
||||
*errstr = NULL;
|
||||
debug_return_int((int)lval);
|
||||
debug_return_mode_t((mode_t)lval);
|
||||
}
|
||||
|
||||
int
|
||||
sudo_strtomode_v1(const char *cp, const char **errstr)
|
||||
{
|
||||
return (int)sudo_strtomode_v2(cp, errstr);
|
||||
}
|
||||
|
@@ -1,7 +1,7 @@
|
||||
/*
|
||||
* SPDX-License-Identifier: ISC
|
||||
*
|
||||
* Copyright (c) 2011-2017 Todd C. Miller <Todd.Miller@sudo.ws>
|
||||
* Copyright (c) 2011-2023 Todd C. Miller <Todd.Miller@sudo.ws>
|
||||
*
|
||||
* Permission to use, copy, modify, and distribute this software for any
|
||||
* purpose with or without fee is hereby granted, provided that the above
|
||||
@@ -569,6 +569,14 @@ sudo_debug_exit_time_t_v1(const char *func, const char *file, int line,
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
sudo_debug_exit_mode_t_v1(const char *func, const char *file, int line,
|
||||
unsigned int subsys, mode_t ret)
|
||||
{
|
||||
sudo_debug_printf2(NULL, NULL, 0, subsys | SUDO_DEBUG_TRACE,
|
||||
"<- %s @ %s:%d := %d", func, file, line, (int)ret);
|
||||
}
|
||||
|
||||
void
|
||||
sudo_debug_exit_bool_v1(const char *func, const char *file, int line,
|
||||
unsigned int subsys, bool ret)
|
||||
@@ -1097,6 +1105,12 @@ sudo_debug_exit_time_t_v1(const char *func, const char *file, int line,
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
sudo_debug_exit_mode_t_v1(const char *func, const char *file, int line,
|
||||
unsigned int subsys, mode_t ret)
|
||||
{
|
||||
}
|
||||
|
||||
void
|
||||
sudo_debug_exit_bool_v1(const char *func, const char *file, int line,
|
||||
unsigned int subsys, bool ret)
|
||||
|
@@ -24,6 +24,7 @@ sudo_debug_exit_bool_v1
|
||||
sudo_debug_exit_id_t_v1
|
||||
sudo_debug_exit_int_v1
|
||||
sudo_debug_exit_long_v1
|
||||
sudo_debug_exit_mode_t_v1
|
||||
sudo_debug_exit_ptr_v1
|
||||
sudo_debug_exit_size_t_v1
|
||||
sudo_debug_exit_ssize_t_v1
|
||||
@@ -147,6 +148,7 @@ sudo_strtoid_v1
|
||||
sudo_strtoid_v2
|
||||
sudo_strtoidx_v1
|
||||
sudo_strtomode_v1
|
||||
sudo_strtomode_v2
|
||||
sudo_strtonum
|
||||
sudo_term_cbreak_v1
|
||||
sudo_term_copy_v1
|
||||
|
Reference in New Issue
Block a user