Я работаю как root, но имею uid пользователя (например, 504
). Как определить локаль пользователя (в моем случае en_GB
)? Не работает следующее:
setuid(user_uid);
fprintf(stderr,
CFStringGetCStringPtr(CFLocaleGetIdentifier(CFLocaleCopyCurrent()),
kCFStringEncodingMacRoman);
setuid(0);
Это выводит en_US
для меня.
export
s и ожидайте, что пользователь введет в свою командную строку! Эксгумация файлаbash_history
может дать вам статистическую информацию о прошлом поведении; например если вы видите многоLC_ALL=en_AU.utf8 ./myprog
, вы знаете, что пользователю могут понравиться кенгуру... - person Kerrek SB   schedule 24.11.2011setuid(0)
изменяет результатCFLocaleCopyCurrent()
, аsetuid(user_uid)
нет? - person fredley   schedule 24.11.2011setuid(0)
меняет его? Обычно, когда вы получаете повышенные привилегии, ОС должна сбросить или очистить всю среду, чтобы непривилегированные пользователи не могли ничего вводить в привилегированный контекст. Я предполагаю, что это установит локаль наC
или что-то в этом роде. - person Kerrek SB   schedule 24.11.2011en_US
, я не знаю, почему. Mac моего коллеги меняет его наen_GB
, что кажется странным. - person fredley   schedule 24.11.2011