LINUX.ORG.RU

Webmin File Manager и кириллица в пользователях. И пробелы.

 , , ,


0

1

File Manager в Webmin не выводит ACL с кириллицей. В настройках задал выводить колонку ACL в списке файлов, вот там и не работает, и в Properties объекта тоже не отображается. Только user: user: user: С латиницей проблем нет никаких. Помогите модернизировать, очень надо.

(кстати, user/group выводит корректно и с пробелом «иванов:пользователи домена»)

Я так понимаю проблема в index.cgi. Если Properties в другом месте - я найду, как только с этим разберусь.

# List ACLs
    if ($userconfig{'columns'} =~ /acls/ && get_acls_status()) {
        my $command = get_list_acls_command() . " " . join(' ', map {quotemeta("$_")} @list);
        my $output  = `$command`;
        my @aclsArr;
        foreach my $aclsStr (split(/\n\n/, $output)) {
            $aclsStr =~ /#\s+file:\s*(.*)/;
            my ($file)  = ($aclsStr =~ /#\s+file:\s*(.*)/);
            my @aclsA = ($aclsStr =~ /^(?!(#|user::|group::|other::))([\w\:\-\_]+)/gm);
            push(@aclsArr, [$file, \@aclsA]);
        }
        %acls = map {$_->[0] => ('<span data-acls>' . join("<br>", (grep /\S/, @{ $_->[1] })) . '</span>')} @aclsArr;

Пытался я всунуть [\w\:\-\_\x{0400}-\x{04FF}]+, но ничего не изменилось. Точнее я много чего пробовал и а-я и iscyrillic тоже. Или ошибка в регулярке или с кодировкой Webmin’а что-то.

Вот в таком виде права от getfacl

# file: srv/samba/testplan
# owner: root
# group: пользователи\040домена
user::rwx
user:иванов\040м:rwx
user:петров:rwx
user:сидоров:rwx
group::r-x
group:support:rwx
mask::rwx
other::---

Надо ещё и с \040 что-то делать. Охренеть. Ну учитывая, что это только информативный вывод, то похрен как, лишь бы показывалось.



Последнее исправление: TepakoT (всего исправлений: 1)

\p{L} выглядит максимально разумной альтернативой \w, но ничего не изменилось. Пока оставлю \p{L}, буду смотреть куда @aclsArr дальше пошла.

А никуда. На страничку. Мда, html и perl не моя сильная сторона.

А, нет, не на страничку ещё, а в %acls.

TepakoT
() автор топика
Последнее исправление: TepakoT (всего исправлений: 3)
Ответ на: комментарий от TepakoT

Послание потомкам:

Править нужно не index.cgi, а /usr/share/webmin/authentic-theme/extensions/file-manager/file-manager-lib.pl

Добавляем use utf8; в начале. В блоке # List ACLs после

foreach my $aclsStr (split(/\n\n/, $output)) {

добавляем строчку utf8::decode($aclsStr);

В регулярках меняем \w в первой и \S во второй на \p{L}.

my @aclsA = ($aclsStr =~ /^(?!(#|user::|group::|other::))([\p{L}\:\-\_]+)/gm);

%acls = map {$_->[0] => ('<span data-acls>' . join("<br>", (grep /\p{L}/, @{ $_->[1] })) . '</span>')} @aclsArr;

С пробелами любитесь сами, с меня перловки хватит, ковыряйте регулярку до хохота.

TepakoT
() автор топика