Promote verbose flag to int for display_privs and display_cmnd.

A negative verbosity will prevent non-error output from being
displayed.
This commit is contained in:
Todd C. Miller
2023-09-15 10:01:35 -06:00
parent a9ee97580a
commit 51d6b0f425
5 changed files with 17 additions and 8 deletions

View File

@@ -455,7 +455,7 @@ output(const char *buf)
*/
int
display_privs(struct sudoers_context *ctx, const struct sudo_nss_list *snl,
struct passwd *pw, bool verbose)
struct passwd *pw, int verbose)
{
const struct sudo_nss *nss;
struct sudo_lbuf def_buf, priv_buf;
@@ -464,6 +464,11 @@ display_privs(struct sudoers_context *ctx, const struct sudo_nss_list *snl,
struct stat sb;
debug_decl(display_privs, SUDOERS_DEBUG_PARSER);
if (verbose < 0) {
/* Nothing to display. */
debug_return_int(true);
}
cols = ctx->user.cols;
if (fstat(STDOUT_FILENO, &sb) == 0 && S_ISFIFO(sb.st_mode))
cols = 0;
@@ -608,7 +613,7 @@ done:
*/
int
display_cmnd(struct sudoers_context *ctx, const struct sudo_nss_list *snl,
struct passwd *pw, bool verbose)
struct passwd *pw, int verbose)
{
struct sudoers_match_info match_info = { NULL };
struct sudo_lbuf lbuf;
@@ -635,6 +640,10 @@ display_cmnd(struct sudoers_context *ctx, const struct sudo_nss_list *snl,
break;
}
if (match == ALLOW) {
if (verbose < 0) {
/* Nothing to display. */
debug_return_int(true);
}
if (verbose) {
/* Append matching sudoers rule (long form). */
display_cmndspec_long(match_info.parse_tree, pw, match_info.us,

View File

@@ -479,8 +479,8 @@ struct sudo_nss_list;
unsigned int sudoers_lookup(struct sudo_nss_list *snl, struct sudoers_context *ctx, time_t now, sudoers_lookup_callback_fn_t callback, void *cb_data, int *cmnd_status, int pwflag);
/* display.c */
int display_privs(struct sudoers_context *ctx, const struct sudo_nss_list *snl, struct passwd *pw, bool verbose);
int display_cmnd(struct sudoers_context *ctx, const struct sudo_nss_list *snl, struct passwd *pw, bool verbose);
int display_privs(struct sudoers_context *ctx, const struct sudo_nss_list *snl, struct passwd *pw, int verbose);
int display_cmnd(struct sudoers_context *ctx, const struct sudo_nss_list *snl, struct passwd *pw, int verbose);
/* parse_ldif.c */
bool sudoers_parse_ldif(struct sudoers_parse_tree *parse_tree, FILE *fp, const char *sudoers_base, bool store_options);

View File

@@ -816,7 +816,7 @@ sudoers_lookup(struct sudo_nss_list *snl, struct sudoers_context *ctx,
/* STUB */
int
display_cmnd(struct sudoers_context *ctx, const struct sudo_nss_list *snl,
struct passwd *pw, bool verbose)
struct passwd *pw, int verbose)
{
return true;
}
@@ -824,7 +824,7 @@ display_cmnd(struct sudoers_context *ctx, const struct sudo_nss_list *snl,
/* STUB */
int
display_privs(struct sudoers_context *ctx, const struct sudo_nss_list *snl,
struct passwd *pw, bool verbose)
struct passwd *pw, int verbose)
{
return true;
}

View File

@@ -908,7 +908,7 @@ done:
* -2 for usage error.
*/
int
sudoers_list(int argc, char * const argv[], const char *list_user, bool verbose)
sudoers_list(int argc, char * const argv[], const char *list_user, int verbose)
{
struct passwd *pw;
int ret = -1;

View File

@@ -440,7 +440,7 @@ int set_cmnd_path(struct sudoers_context *ctx, const char *runchroot);
void set_cmnd_status(struct sudoers_context *ctx, const char *runchroot);
int sudoers_init(void *info, sudoers_logger_t logger, char * const envp[]);
int sudoers_check_cmnd(int argc, char *const argv[], char *env_add[], void *closure);
int sudoers_list(int argc, char *const argv[], const char *list_user, bool verbose);
int sudoers_list(int argc, char *const argv[], const char *list_user, int verbose);
int sudoers_validate_user(void);
void sudoers_cleanup(void);
bool sudoers_override_umask(void);