From 19c548fd57701d3dbcb8bb7db05d5fd0f852dba9 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" Date: Mon, 27 May 2019 08:49:43 -0600 Subject: [PATCH] Add -B option to ring the bell before the password prompt. --- doc/sudo.cat | 14 +++++++++----- doc/sudo.man.in | 16 ++++++++++------ doc/sudo.mdoc.in | 15 +++++++++------ src/parse_args.c | 8 +++++++- src/sudo.h | 1 + src/tgetpass.c | 5 +++++ 6 files changed, 41 insertions(+), 18 deletions(-) diff --git a/doc/sudo.cat b/doc/sudo.cat index cd505a22b..32a808ac9 100644 --- a/doc/sudo.cat +++ b/doc/sudo.cat @@ -5,13 +5,13 @@ NNAAMMEE SSYYNNOOPPSSIISS ssuuddoo --hh | --KK | --kk | --VV - ssuuddoo --vv [--AAkknnSS] [--aa _t_y_p_e] [--gg _g_r_o_u_p] [--hh _h_o_s_t] [--pp _p_r_o_m_p_t] [--uu _u_s_e_r] - ssuuddoo --ll [--AAkknnSS] [--aa _t_y_p_e] [--gg _g_r_o_u_p] [--hh _h_o_s_t] [--pp _p_r_o_m_p_t] [--UU _u_s_e_r] + ssuuddoo --vv [--AABBkknnSS] [--aa _t_y_p_e] [--gg _g_r_o_u_p] [--hh _h_o_s_t] [--pp _p_r_o_m_p_t] [--uu _u_s_e_r] + ssuuddoo --ll [--AABBkknnSS] [--aa _t_y_p_e] [--gg _g_r_o_u_p] [--hh _h_o_s_t] [--pp _p_r_o_m_p_t] [--UU _u_s_e_r] [--uu _u_s_e_r] [_c_o_m_m_a_n_d] - ssuuddoo [--AAbbEEHHnnPPSS] [--aa _t_y_p_e] [--CC _n_u_m] [--cc _c_l_a_s_s] [--gg _g_r_o_u_p] [--hh _h_o_s_t] + ssuuddoo [--AABBbbEEHHnnPPSS] [--aa _t_y_p_e] [--CC _n_u_m] [--cc _c_l_a_s_s] [--gg _g_r_o_u_p] [--hh _h_o_s_t] [--pp _p_r_o_m_p_t] [--rr _r_o_l_e] [--tt _t_y_p_e] [--TT _t_i_m_e_o_u_t] [--uu _u_s_e_r] [_V_A_R=_v_a_l_u_e] [--ii | --ss] [_c_o_m_m_a_n_d] - ssuuddooeeddiitt [--AAkknnSS] [--aa _t_y_p_e] [--CC _n_u_m] [--cc _c_l_a_s_s] [--gg _g_r_o_u_p] [--hh _h_o_s_t] + ssuuddooeeddiitt [--AABBkknnSS] [--aa _t_y_p_e] [--CC _n_u_m] [--cc _c_l_a_s_s] [--gg _g_r_o_u_p] [--hh _h_o_s_t] [--pp _p_r_o_m_p_t] [--TT _t_i_m_e_o_u_t] [--uu _u_s_e_r] _f_i_l_e _._._. DDEESSCCRRIIPPTTIIOONN @@ -72,6 +72,10 @@ DDEESSCCRRIIPPTTIIOONN _/_e_t_c_/_l_o_g_i_n_._c_o_n_f. This option is only available on systems that support BSD authentication. + --BB, ----bbeellll Ring the bell as part of the password promp when a terminal + is present. This option has no effect if an askpass program + is used. + --bb, ----bbaacckkggrroouunndd Run the given command in the background. Note that it is not possible to use shell job control to manipulate background @@ -738,4 +742,4 @@ DDIISSCCLLAAIIMMEERR file distributed with ssuuddoo or https://www.sudo.ws/license.html for complete details. -Sudo 1.8.28 November 25, 2018 Sudo 1.8.28 +Sudo 1.8.28 May 27, 2019 Sudo 1.8.28 diff --git a/doc/sudo.man.in b/doc/sudo.man.in index c373db95b..a3e7fdd15 100644 --- a/doc/sudo.man.in +++ b/doc/sudo.man.in @@ -2,7 +2,7 @@ .\" .\" SPDX-License-Identifier: ISC .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2018 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2019 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -25,7 +25,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.TH "SUDO" "@mansectsu@" "November 25, 2018" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" +.TH "SUDO" "@mansectsu@" "May 27, 2019" "Sudo @PACKAGE_VERSION@" "System Manager's Manual" .nh .if n .ad l .SH "NAME" @@ -41,7 +41,7 @@ .HP 5n \fBsudo\fR \fB\-v\fR -[\fB\-AknS\fR] +[\fB\-ABknS\fR] .if \n(BA [\fB\-a\fR\ \fItype\fR] [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] @@ -51,7 +51,7 @@ .HP 5n \fBsudo\fR \fB\-l\fR -[\fB\-AknS\fR] +[\fB\-ABknS\fR] .if \n(BA [\fB\-a\fR\ \fItype\fR] [\fB\-g\fR\ \fIgroup\fR] [\fB\-h\fR\ \fIhost\fR] @@ -62,7 +62,7 @@ .br .HP 5n \fBsudo\fR -[\fB\-AbEHnPS\fR] +[\fB\-ABbEHnPS\fR] .if \n(BA [\fB\-a\fR\ \fItype\fR] [\fB\-C\fR\ \fInum\fR] .if \n(LC [\fB\-c\fR\ \fIclass\fR] @@ -79,7 +79,7 @@ .br .HP 9n \fBsudoedit\fR -[\fB\-AknS\fR] +[\fB\-ABknS\fR] .if \n(BA [\fB\-a\fR\ \fItype\fR] [\fB\-C\fR\ \fInum\fR] .if \n(LC [\fB\-c\fR\ \fIclass\fR] @@ -213,6 +213,10 @@ BSD authentication. .\} .TP 12n +\fB\-B\fR, \fB\--bell\fR +Ring the bell as part of the password promp when a terminal is present. +This option has no effect if an askpass program is used. +.TP 12n \fB\-b\fR, \fB\--background\fR Run the given command in the background. Note that it is not possible to use shell job control to manipulate diff --git a/doc/sudo.mdoc.in b/doc/sudo.mdoc.in index ff0610735..e605ee252 100644 --- a/doc/sudo.mdoc.in +++ b/doc/sudo.mdoc.in @@ -1,7 +1,7 @@ .\" .\" SPDX-License-Identifier: ISC .\" -.\" Copyright (c) 1994-1996, 1998-2005, 2007-2018 +.\" Copyright (c) 1994-1996, 1998-2005, 2007-2019 .\" Todd C. Miller .\" .\" Permission to use, copy, modify, and distribute this software for any @@ -24,7 +24,7 @@ .nr BA @BAMAN@ .nr LC @LCMAN@ .nr PS @PSMAN@ -.Dd November 25, 2018 +.Dd May 27, 2019 .Dt SUDO @mansectsu@ .Os Sudo @PACKAGE_VERSION@ .Sh NAME @@ -36,7 +36,7 @@ .Fl h | K | k | V .Nm sudo .Fl v -.Op Fl AknS +.Op Fl ABknS .if \n(BA \{\ .Op Fl a Ar type .\} @@ -46,7 +46,7 @@ .Op Fl u Ar user .Nm sudo .Fl l -.Op Fl AknS +.Op Fl ABknS .if \n(BA \{\ .Op Fl a Ar type .\} @@ -57,7 +57,7 @@ .Op Fl u Ar user .Op Ar command .Nm sudo -.Op Fl AbEHnPS +.Op Fl ABbEHnPS .if \n(BA \{\ .Op Fl a Ar type .\} @@ -78,7 +78,7 @@ .Op Fl i | s .Op Ar command .Nm sudoedit -.Op Fl AknS +.Op Fl ABknS .if \n(BA \{\ .Op Fl a Ar type .\} @@ -208,6 +208,9 @@ This option is only available on systems that support .Bx authentication. .\} +.It Fl B , -bell +Ring the bell as part of the password promp when a terminal is present. +This option has no effect if an askpass program is used. .It Fl b , -background Run the given command in the background. Note that it is not possible to use shell job control to manipulate diff --git a/src/parse_args.c b/src/parse_args.c index 8efb6ce92..6836bdbbb 100644 --- a/src/parse_args.c +++ b/src/parse_args.c @@ -133,11 +133,12 @@ struct environment { * Note that we must disable arg permutation to support setting environment * variables and to better support the optional arg of the -h flag. */ -static const char short_opts[] = "+Aa:bC:c:D:Eeg:Hh::iKklnPp:r:SsT:t:U:u:Vv"; +static const char short_opts[] = "+Aa:BbC:c:D:Eeg:Hh::iKklnPp:r:SsT:t:U:u:Vv"; static struct option long_opts[] = { { "askpass", no_argument, NULL, 'A' }, { "auth-type", required_argument, NULL, 'a' }, { "background", no_argument, NULL, 'b' }, + { "bell", no_argument, NULL, 'B' }, { "close-from", required_argument, NULL, 'C' }, { "login-class", required_argument, NULL, 'c' }, { "preserve-env", optional_argument, NULL, 'E' }, @@ -317,6 +318,9 @@ parse_args(int argc, char **argv, int *nargc, char ***nargv, case 'b': SET(flags, MODE_BACKGROUND); break; + case 'B': + SET(tgetpass_flags, TGP_BELL); + break; case 'C': if (strtonum(optarg, 3, INT_MAX, NULL) == 0) { sudo_warnx(U_("the argument to -C must be a number greater than or equal to 3")); @@ -711,6 +715,8 @@ help(void) #endif sudo_lbuf_append(&lbuf, " -b, --background %s\n", _("run command in the background")); + sudo_lbuf_append(&lbuf, " -B, --bell %s\n", + _("ring bell when prompting")); sudo_lbuf_append(&lbuf, " -C, --close-from=num %s\n", _("close all file descriptors >= num")); #ifdef HAVE_LOGIN_CAP_H diff --git a/src/sudo.h b/src/sudo.h index 6f8eded88..cf2d8b910 100644 --- a/src/sudo.h +++ b/src/sudo.h @@ -86,6 +86,7 @@ #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 */ /* name/value pairs for command line settings. */ struct sudo_settings { diff --git a/src/tgetpass.c b/src/tgetpass.c index a59bc468d..394a64506 100644 --- a/src/tgetpass.c +++ b/src/tgetpass.c @@ -204,6 +204,11 @@ restart: (void) sigaction(SIGTTIN, &sa, &savettin); (void) sigaction(SIGTTOU, &sa, &savettou); + if (ISSET(flags, TGP_BELL) && output != STDERR_FILENO) { + /* Ring the bell if requested and there is a tty. */ + if (write(output, "\a", 1) == -1) + goto restore; + } if (prompt) { if (write(output, prompt, strlen(prompt)) == -1) goto restore;