[Devel] О локализации имён пользователей

Vitaly Lipatov lav на etersoft.ru
Чт Фев 21 23:41:06 MSK 2008


В сообщении от 21 февраля 2008 Сергей написал(a):
> Я работаю над задачей локализации имён пользователей.
> О текущем ходе работы можно узнать здесь:
> http://wiki.office.etersoft.ru/RusskieImena?v=49i
> На данный момент я сделал патч для shadow-utils и они успешно добавляют
> русские имена в системную базу. Теперь я работаю над тем, чтобы
> пользователь с таким именем мог войти в систему. И на этом этапе
> возникает такой вопрос: согласно какой локали проверять имя
> пользователя? Алгоритм проверки корректности имени использует функции
> iswalpha/iswdigit и тому подобные, имя пользователя предварительно
> переводится в Unicode-строку функцией mbstowcs, поведение которой как
> раз и зависит от локали.
От локали или от кодировки локали?

> Есть несколько соображений на этот счёт:
> 1. Установить локаль пользователя root в ту локаль, в которой должно
> производиться сравнение. Если мы хотим имена пользователей в UTF-8, а
На самом деле запрос логина (например при входе в текстовую консоль) может 
происходить и до входа пользователя root в систему, таким образом 
использовать локаль рута мы не можем.

> сообщения программ оставить английскими - нам нужна локаль en_US.utf8
> или en_GB.utf8. Если нам нужны имена в koi8-r - тоже нет проблем, ставим
> локаль рута в ru_RU.koi8r
На самом деле, если посмотреть вывод # locale, локаль - сложная вещь. Локаль 
сообщений задаётся в LC_MESSAGES, локаль для сравнения и приведения 
регистров - в LC_CTYPE...

> 2. Сделать соотв. настройку где-нибудь в /etc/sysconfig/blabla или
> использовать какую-нибудь подходящую. Этот тоже можно сделать по-разному:
Так лучше не делать, уж лучше ориентироваться на /etc/sysconfig/i18n.
Кстати, есть библиотека libnatspec, с удовольствием возвращающая системную 
локаль или кодировку системной локали.

> 2.1. Обеспечить вычитку настройки и установку нужной локали при запуске
> программ, осуществляющих аутентификацию пользователя.
Их может быть много. Кстати, они ещё и в разных кодировках могут строку 
pam-модулю передавать. Подозреваю правда что общее умолчание будет UTF-8.

> 2.2. Сделать вычитку настройки внутри pam-модуля и использовать
> указанную там локаль при проверке имени.
> Такой вопрос: какой вариант лучше и почему?
Думаю, нужно решить, надо ли нам поддерживать не UTF-8 кодировки. Я был бы 
конечно не против поддержки.
Я бы всё-таки остановился на локали внутри pam-модуля. Хотя, полагая что в 
него уже попадает UTF-ная строка, внутри достаточно "прибить"  ту же 
en_US.UTF-8. Тут надо подробнее смотреть, в какой кодировке хранятся строки в 
passwd (опять же, вне зависимости от локали, KDE предполагает что в UTF-8).
Если пытаться делать общее решение, я бы смотрел на libnatspec, она вводит 
понятие системной локали (к руту отношения не имеет) и локали пользователя.

-- 
С уважением,
Виталий Липатов
Россия, Санкт-Петербург. www.etersoft.ru
GNU! ALT Linux Team! WINE! WIKI! LaTeX! LyX!


Подробная информация о списке рассылки devel