Switch to the C locale before sending messages to syslog. The messages

sent by shadow were not translated, but error messages from PAM returned
by pam_strerror() were translated in the users's locale.
This commit is contained in:
nekral-guest 2008-02-03 17:53:21 +00:00
parent 4e01ea6c33
commit 6e9078f16c
3 changed files with 13 additions and 1 deletions

View File

@ -1,3 +1,10 @@
2008-02-03 Nicolas François <nicolas.francois@centraliens.net>
* NEWS, lib/defines.h: Switch to the C locale before sending
messages to syslog. The messages sent by shadow were not
translated, but error messages from PAM returned by pam_strerror()
were translated in the users's locale.
2008-02-03 Nicolas François <nicolas.francois@centraliens.net> 2008-02-03 Nicolas François <nicolas.francois@centraliens.net>
* NEWS: newusers will behave more like useradd. * NEWS: newusers will behave more like useradd.

3
NEWS
View File

@ -9,6 +9,9 @@ shadow-4.1.0 -> shadow-4.1.1 UNRELEASED
generated in the same second. generated in the same second.
- packaging - packaging
* Do not install the shadow library per default. * Do not install the shadow library per default.
- general
* Do not translate the messages sent to syslog. This avoids logging
PAM error messages in the users's locale.
- chage - chage
* Fix bug which forbid to set the aging information of an account with a * Fix bug which forbid to set the aging information of an account with a
passwd entry, but no shadow entry. passwd entry, but no shadow entry.

View File

@ -142,13 +142,15 @@ char *strchr (), *strrchr (), *strtok ();
syslogd should log the current system time for each event, and not syslogd should log the current system time for each event, and not
trust the formatted time received from the unix domain (or worse, trust the formatted time received from the unix domain (or worse,
UDP) socket. -MM */ UDP) socket. -MM */
/* Avoid translated PAM error messages: Set LC_ALL to "C".
* --Nekral */
#define SYSLOG(x) \ #define SYSLOG(x) \
do { \ do { \
char *saved_locale = setlocale(LC_ALL, NULL); \ char *saved_locale = setlocale(LC_ALL, NULL); \
if (saved_locale) \ if (saved_locale) \
saved_locale = strdup(saved_locale); \ saved_locale = strdup(saved_locale); \
if (saved_locale) \ if (saved_locale) \
setlocale(LC_TIME, "C"); \ setlocale(LC_ALL, "C"); \
syslog x ; \ syslog x ; \
if (saved_locale) { \ if (saved_locale) { \
setlocale(LC_ALL, saved_locale); \ setlocale(LC_ALL, saved_locale); \