]> granicus.if.org Git - sudo/commitdiff
Add sudoers_locale Defaults option to override the default sudoers
authorTodd C. Miller <Todd.Miller@courtesan.com>
Sun, 14 Sep 2008 00:45:24 +0000 (00:45 +0000)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Sun, 14 Sep 2008 00:45:24 +0000 (00:45 +0000)
locale of "C".

def_data.c
def_data.h
def_data.in
defaults.c
sudo.c

index 0dd21be8c850dc4957e8a18abf915d6c9f665815..da859e89451e0c3ad2cf534f6fe4e67384e71802 100644 (file)
@@ -294,6 +294,10 @@ struct sudo_defs_types sudo_defs_table[] = {
        "env_file", T_STR|T_PATH|T_BOOL,
        "Path to the sudo-specific environment file: %s",
        NULL,
+    }, {
+       "sudoers_locale", T_STR,
+       "Locale to use while parsing sudoers: %s",
+       NULL,
     }, {
        NULL, 0, NULL
     }
index 103b55e850bef61feca67057d24ee56c7cb96848..72d793eab975dd93d3310860fdc8d26ae83b1126 100644 (file)
 #define I_ASKPASS               66
 #define def_env_file            (sudo_defs_table[67].sd_un.str)
 #define I_ENV_FILE              67
+#define def_sudoers_locale      (sudo_defs_table[68].sd_un.str)
+#define I_SUDOERS_LOCALE        68
 
 enum def_tupple {
        never,
index fa58e8d1af385bcb3a13589b842173d222abc635..f92c631167b93c4bae4f7fa3757c8853e5f086ed 100644 (file)
@@ -217,3 +217,6 @@ askpass
 env_file
        T_STR|T_PATH|T_BOOL
        "Path to the sudo-specific environment file: %s"
+sudoers_locale
+       T_STR
+       "Locale to use while parsing sudoers: %s"
index fc2008210694d976a8fe098707995053fe9bbad6..7ea686eeb2b0cb5f283e4710749c5460c282a1ef 100644 (file)
@@ -426,6 +426,7 @@ init_defaults()
 #ifdef _PATH_SUDO_ASKPASS
     def_askpass = estrdup(_PATH_SUDO_ASKPASS);
 #endif
+    def_sudoers_locale = estrdup("C");
     def_env_reset = TRUE;
     def_set_logname = TRUE;
     def_closefrom = STDERR_FILENO + 1;
diff --git a/sudo.c b/sudo.c
index 685d04dea3eb40b1daac1e6db9410e3c93cc5c03..5be5cbc48d4cbd6137346f5ba20a191c310c7743 100644 (file)
--- a/sudo.c
+++ b/sudo.c
@@ -326,7 +326,11 @@ main(argc, argv, envp)
     cmnd_status = set_cmnd(sudo_mode);
 
 #ifdef HAVE_SETLOCALE
-    setlocale(LC_ALL, "C");
+    if (!setlocale(LC_ALL, def_sudoers_locale)) {
+       warningx("unable to set locale to \"%s\", using \"C\"",
+           def_sudoers_locale);
+       setlocale(LC_ALL, "C");
+    }
 #endif
 
     validated = FLAG_NO_USER | FLAG_NO_HOST;