]> granicus.if.org Git - sudo/commitdiff
Set the sudoers locale before opening the sudoers file.
authorTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 30 Jun 2016 18:40:19 +0000 (12:40 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Thu, 30 Jun 2016 18:40:19 +0000 (12:40 -0600)
Previously the sudoers locale was used when evaluating sudoers
but not during the inital parse.  Bug #748

plugins/sudoers/sudoers.c

index 9d7991e40d7418443fe849fc36c46e49ca5a920c..f44b00dfef0d0a1130f5f9295520d0f1a42895d3 100644 (file)
@@ -149,7 +149,7 @@ int
 sudoers_policy_init(void *info, char * const envp[])
 {
     struct sudo_nss *nss, *nss_next;
-    int sources = 0;
+    int oldlocale, sources = 0;
     int rval = -1;
     debug_decl(sudoers_policy_init, SUDOERS_DEBUG_PLUGIN)
 
@@ -183,7 +183,11 @@ sudoers_policy_init(void *info, char * const envp[])
     if (!set_perms(PERM_ROOT))
        debug_return_int(-1);
 
-    /* Open and parse sudoers, set global defaults */
+    /*
+     * Open and parse sudoers, set global defaults.
+     * Uses the C locale unless another is specified in sudoers.
+     */
+    sudoers_setlocale(SUDOERS_LOCALE_SUDOERS, &oldlocale);
     TAILQ_FOREACH_SAFE(nss, snl, entries, nss_next) {
         if (nss->open(nss) == 0 && nss->parse(nss) == 0) {
             sources++;
@@ -245,6 +249,9 @@ cleanup:
     if (!restore_perms())
        rval = -1;
 
+    /* Restore user's locale. */
+    sudoers_setlocale(oldlocale, NULL);
+
     debug_return_int(rval);
 }