В локали ru_RU.UTF-8 chfn -f Сергей говорит invalid name 'Сергей'
Подтверждаю. Действительно именно в UTF-ной локали такое. Может быть поправить определение, что символ управляющий? А то он коды >=0x80 к ним относит... $ diff -urN fields.c.o fields.c --- fields.c.o 2005-10-13 11:37:27 +0400 +++ libmisc/fields.c 2005-10-13 11:38:04 +0400 @@ -37,7 +37,7 @@ #include "prototypes.h" #define fixed_iscntrl(c) \ - (((c) & 0x7f) < 0x20 || (c) == 0x7f) + ((c) < 0x20 || (c) == 0x7f) #define MAX_FIELD_SIZE 0x80
char оказался знаковым, так что вот так: $diff -urN fields.c.o fields.c --- fields.c.o 2005-10-13 11:37:27 +0400 +++ libmisc/fields.c 2005-10-13 11:56:54 +0400 @@ -37,7 +37,7 @@ #include "prototypes.h" #define fixed_iscntrl(c) \ - (((c) & 0x7f) < 0x20 || (c) == 0x7f) + (((unsigned)(c)) < 0x20 || (c) == 0x7f) #define MAX_FIELD_SIZE 0x80
Дима, а это нормально, что меньше чем через 4 месяца мы отметим 3 года этой баги?
(In reply to comment #3) > Дима, а это нормально, что меньше чем через 4 месяца мы отметим 3 года этой > баги? Попробуй вывести на неюникодную консоль символы из диапазона 0x80..0xa0, и тогда станет понятно, что проблема не одномерна.
Мне кажется это проблема консоли, а в программах не должно быть таких американских хаков, как-либо изменяющих поток данных. И может быть когда-нибудь мы доживём-таки до юникодной консоли :)
chfn -f "Алексей Шабалин" chfn: имя «Алексей Шабалин» содержит не ASCII-символы Может уже пришло время юникодных консолей?
(В ответ на комментарий №4) > Попробуй вывести на неюникодную консоль символы из диапазона 0x80..0xa0, В неадекватном неюникодной консоли отображении текста на экране я проблем не вижу.
В shadow-utils-4.5 юникодный gecos не запрещается, хоть и выводится предупреждение: # chfn -f 'Сергей' foobar chfn: имя «Сергей» содержит не ASCII-символы # grep foobar /etc/passwd foobar:x:502:502:Сергей,,,:/home/foobar:/bin/bash
Работает.