]> granicus.if.org Git - sudo/commitdiff
Move sudoers locale callback function to locale.c and user it in
authorTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 20 Jul 2016 20:16:00 +0000 (14:16 -0600)
committerTodd C. Miller <Todd.Miller@courtesan.com>
Wed, 20 Jul 2016 20:16:00 +0000 (14:16 -0600)
visudo and testsudoers.

plugins/sudoers/locale.c
plugins/sudoers/logging.h
plugins/sudoers/sudoers.c
plugins/sudoers/testsudoers.c
plugins/sudoers/visudo.c

index 60a40705be599d31a290790ba250a00cd4e3f93a..459c395493993ab9fcd9feebbbf6feb5e083c845 100644 (file)
@@ -37,6 +37,7 @@
 #include "sudo_compat.h"
 #include "sudo_fatal.h"
 #include "sudoers_debug.h"
+#include "defaults.h"
 #include "logging.h"
 
 static int current_locale = SUDOERS_LOCALE_USER;
@@ -133,3 +134,18 @@ sudoers_warn_setlocale(bool restore, int *cookie)
        debug_return_bool(sudoers_setlocale(*cookie, NULL));
     debug_return_bool(sudoers_setlocale(SUDOERS_LOCALE_USER, cookie));
 }
+
+/*
+ * Callback for sudoers_locale sudoers setting.
+ */
+bool
+sudoers_locale_callback(const union sudo_defs_val *sd_un)
+{
+    debug_decl(sudoers_locale_callback, SUDOERS_DEBUG_UTIL)
+
+    if (sudoers_initlocale(NULL, sd_un->str)) {
+       if (setlocale(LC_ALL, sd_un->str) != NULL)
+           debug_return_bool(true);
+    }
+    debug_return_bool(false);
+}
index 10d421159ab17479645d32cab7ae2fa39b4b5b43..2b64e7a7c665c798e38f3bc9e516571aaf1e7a99 100644 (file)
@@ -74,6 +74,7 @@ bool log_failure(int status, int flags);
 bool log_warning(int flags, const char *fmt, ...) __printflike(2, 3);
 bool log_warningx(int flags, const char *fmt, ...) __printflike(2, 3);
 bool sudoers_initlocale(const char *ulocale, const char *slocale);
+bool sudoers_locale_callback(const union sudo_defs_val *);
 int writeln_wrap(FILE *fp, char *line, size_t len, size_t maxlen);
 
 #endif /* SUDOERS_LOGGING_H */
index 58b7985c7e1e3b3efcb242620f90f64a019b5205..b02aa1962b538d19c98d37815942b02982cf64d8 100644 (file)
@@ -71,7 +71,6 @@
 static char *find_editor(int nfiles, char **files, int *argc_out, char ***argv_out);
 static bool cb_fqdn(const union sudo_defs_val *);
 static bool cb_runas_default(const union sudo_defs_val *);
-static bool cb_sudoers_locale(const union sudo_defs_val *);
 static int set_cmnd(void);
 static int create_admin_success_flag(void);
 static bool init_vars(char * const *);
@@ -750,7 +749,7 @@ init_vars(char * const envp[])
     sudo_defs_table[I_RUNAS_DEFAULT].callback = cb_runas_default;
 
     /* Set locale callback. */
-    sudo_defs_table[I_SUDOERS_LOCALE].callback = cb_sudoers_locale;
+    sudo_defs_table[I_SUDOERS_LOCALE].callback = sudoers_locale_callback;
 
     /* Set maxseq callback. */
     sudo_defs_table[I_MAXSEQ].callback = cb_maxseq;
@@ -1186,21 +1185,6 @@ cb_runas_default(const union sudo_defs_val *sd_un)
     debug_return_bool(true);
 }
 
-/*
- * Callback for sudoers_locale sudoers setting.
- */
-static bool
-cb_sudoers_locale(const union sudo_defs_val *sd_un)
-{
-    debug_decl(cb_sudoers_locale, SUDOERS_DEBUG_PLUGIN)
-
-    if (sudoers_initlocale(NULL, sd_un->str)) {
-       if (setlocale(LC_ALL, sd_un->str) != NULL)
-           debug_return_bool(true);
-    }
-    debug_return_bool(false);
-}
-
 /*
  * Cleanup hook for sudo_fatal()/sudo_fatalx()
  */
index 009dfd04c9c00d5563abf4c249367d5ab2481cc8..62d5c260257f7e8de88e7b95c20d958762629d6d 100644 (file)
@@ -245,6 +245,9 @@ main(int argc, char *argv[])
     /* Set runas callback. */
     sudo_defs_table[I_RUNAS_DEFAULT].callback = cb_runas_default;
 
+    /* Set locale callback. */
+    sudo_defs_table[I_SUDOERS_LOCALE].callback = sudoers_locale_callback;
+
     /* Load ip addr/mask for each interface. */
     if (get_net_ifs(&p) > 0) {
        if (!set_interfaces(p))
index 4dc9257d071d6cae7ead9b4491d45d8ab01e5fb6..e4b63a587ac65fc8a4849b0735759b3f44285cc7 100644 (file)
@@ -159,6 +159,9 @@ main(int argc, char *argv[])
     /* Register fatal/fatalx callback. */
     sudo_fatal_callback_register(visudo_cleanup);
 
+    /* Set sudoers locale callback. */
+    sudo_defs_table[I_SUDOERS_LOCALE].callback = sudoers_locale_callback;
+
     /* Read debug and plugin sections of sudo.conf. */
     if (sudo_conf_read(NULL, SUDO_CONF_DEBUG|SUDO_CONF_PLUGINS) == -1)
        exit(EXIT_FAILURE);