From 4bd4a91714b8cf0dcf7662aa0b79426a5d035fb7 Mon Sep 17 00:00:00 2001 From: "Todd C. Miller" <Todd.Miller@courtesan.com> Date: Mon, 12 Nov 2012 05:42:48 -0500 Subject: [PATCH] Parse sudo.conf in the "C" locale. --- common/sudo_conf.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/common/sudo_conf.c b/common/sudo_conf.c index a3100ac8b..608a78b3c 100644 --- a/common/sudo_conf.c +++ b/common/sudo_conf.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2009-2011 Todd C. Miller <Todd.Miller@courtesan.com> + * Copyright (c) 2009-2012 Todd C. Miller <Todd.Miller@courtesan.com> * * Permission to use, copy, modify, and distribute this software for any * purpose with or without fee is hereby granted, provided that the above @@ -295,6 +295,13 @@ sudo_conf_read(void) struct stat sb; FILE *fp; char *cp; +#ifdef HAVE_SETLOCALE + char *prev_locale = estrdup(setlocale(LC_ALL, NULL)); + + /* Parse sudo.conf in the "C" locale. */ + if (prev_locale[0] != 'C' || prev_locale[1] != '\0') + setlocale(LC_ALL, "C"); +#endif switch (sudo_secure_file(_PATH_SUDO_CONF, ROOT_UID, -1, &sb)) { case SUDO_PATH_SECURE: @@ -346,5 +353,11 @@ sudo_conf_read(void) } fclose(fp); done: +#ifdef HAVE_SETLOCALE + /* Restore locale if needed. */ + if (prev_locale[0] != 'C' || prev_locale[1] != '\0') + setlocale(LC_ALL, prev_locale); + efree(prev_locale); +#endif return; } -- 2.40.0