prompt = def_prompt;
/* Only override PAM prompt if it matches /^Password: ?/ */
#if defined(PAM_TEXT_DOMAIN) && defined(HAVE_DGETTEXT)
- if (std_prompt ||
+ if (!def_passprompt_override && (std_prompt ||
(strcmp(pm->msg, dgettext(PAM_TEXT_DOMAIN, "Password: ")) &&
- strcmp(pm->msg, dgettext(PAM_TEXT_DOMAIN, "Password:"))))
+ strcmp(pm->msg, dgettext(PAM_TEXT_DOMAIN, "Password:")))))
prompt = pm->msg;
#else
- if (std_prompt ||
+ if (!def_passprompt_override && (std_prompt ||
strncmp(pm->msg, "Password:", 9) || (pm->msg[9] != '\0'
- && (pm->msg[9] != ' ' || pm->msg[10] != '\0')))
+ && (pm->msg[9] != ' ' || pm->msg[10] != '\0'))))
prompt = pm->msg;
#endif
/* Read the password. */
"passprompt", T_STR,
"Default password prompt: %s",
NULL,
+ }, {
+ "passprompt_override", T_FLAG,
+ "If set, passprompt will override system prompt in all cases.",
+ NULL,
}, {
"runas_default", T_STR,
"Default user to run commands as: %s",
NULL,
- set_runaspw,
}, {
"secure_path", T_STR|T_BOOL,
"Value to override user's $PATH with: %s",
#define I_EXEMPT_GROUP 45
#define def_passprompt (sudo_defs_table[46].sd_un.str)
#define I_PASSPROMPT 46
-#define def_runas_default (sudo_defs_table[47].sd_un.str)
-#define I_RUNAS_DEFAULT 47
-#define def_secure_path (sudo_defs_table[48].sd_un.str)
-#define I_SECURE_PATH 48
-#define def_editor (sudo_defs_table[49].sd_un.str)
-#define I_EDITOR 49
-#define def_listpw (sudo_defs_table[50].sd_un.tuple)
-#define I_LISTPW 50
-#define def_verifypw (sudo_defs_table[51].sd_un.tuple)
-#define I_VERIFYPW 51
-#define def_noexec (sudo_defs_table[52].sd_un.flag)
-#define I_NOEXEC 52
-#define def_noexec_file (sudo_defs_table[53].sd_un.str)
-#define I_NOEXEC_FILE 53
-#define def_ignore_local_sudoers (sudo_defs_table[54].sd_un.flag)
-#define I_IGNORE_LOCAL_SUDOERS 54
-#define def_closefrom (sudo_defs_table[55].sd_un.ival)
-#define I_CLOSEFROM 55
-#define def_closefrom_override (sudo_defs_table[56].sd_un.flag)
-#define I_CLOSEFROM_OVERRIDE 56
-#define def_setenv (sudo_defs_table[57].sd_un.flag)
-#define I_SETENV 57
-#define def_env_reset (sudo_defs_table[58].sd_un.flag)
-#define I_ENV_RESET 58
-#define def_env_check (sudo_defs_table[59].sd_un.list)
-#define I_ENV_CHECK 59
-#define def_env_delete (sudo_defs_table[60].sd_un.list)
-#define I_ENV_DELETE 60
-#define def_env_keep (sudo_defs_table[61].sd_un.list)
-#define I_ENV_KEEP 61
+#define def_passprompt_override (sudo_defs_table[47].sd_un.flag)
+#define I_PASSPROMPT_OVERRIDE 47
+#define def_runas_default (sudo_defs_table[48].sd_un.str)
+#define I_RUNAS_DEFAULT 48
+#define def_secure_path (sudo_defs_table[49].sd_un.str)
+#define I_SECURE_PATH 49
+#define def_editor (sudo_defs_table[50].sd_un.str)
+#define I_EDITOR 50
+#define def_listpw (sudo_defs_table[51].sd_un.tuple)
+#define I_LISTPW 51
+#define def_verifypw (sudo_defs_table[52].sd_un.tuple)
+#define I_VERIFYPW 52
+#define def_noexec (sudo_defs_table[53].sd_un.flag)
+#define I_NOEXEC 53
+#define def_noexec_file (sudo_defs_table[54].sd_un.str)
+#define I_NOEXEC_FILE 54
+#define def_ignore_local_sudoers (sudo_defs_table[55].sd_un.flag)
+#define I_IGNORE_LOCAL_SUDOERS 55
+#define def_closefrom (sudo_defs_table[56].sd_un.ival)
+#define I_CLOSEFROM 56
+#define def_closefrom_override (sudo_defs_table[57].sd_un.flag)
+#define I_CLOSEFROM_OVERRIDE 57
+#define def_setenv (sudo_defs_table[58].sd_un.flag)
+#define I_SETENV 58
+#define def_env_reset (sudo_defs_table[59].sd_un.flag)
+#define I_ENV_RESET 59
+#define def_env_check (sudo_defs_table[60].sd_un.list)
+#define I_ENV_CHECK 60
+#define def_env_delete (sudo_defs_table[61].sd_un.list)
+#define I_ENV_DELETE 61
+#define def_env_keep (sudo_defs_table[62].sd_un.list)
+#define I_ENV_KEEP 62
enum def_tupple {
never,
allowed to run it, which can be confusing. This flag is I<@path_info@>
by default.
+=item passprompt_override
+
+The password prompt specified by I<passprompt> will normally only
+be used if the passwod prompt provided by systems such as PAM matches
+the string "Password:". If I<passprompt_override> is set, I<passprompt>
+will always be used. This flag is I<off> by default.
+
=item preserve_groups
By default B<sudo> will initialize the group vector to the list of