The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Разговоры, обсуждение новостей
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

OpenNews: Free-SA -новый анализатор логов squid, для замены SARG, opennews (?), 22-Мрт-07, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


2. "Free-SA -новый анализатор логов squid, для замены SARG"  +/
Сообщение от Vatson (??), 22-Мрт-07, 05:02 
в принципе не плох только почемуто вместо разделителя разрядов вылазит 'Б─┌'
Ответить | Правка | Наверх | Cообщить модератору

5. "Free-SA -новый анализатор логов squid, для замены SARG"  +/
Сообщение от saperemail (?), 22-Мрт-07, 09:27 
> вместо разделителя разрядов вылазит 'Б─┌'
Эта функция реализована через штатный printf. Постараюсь разобраться. Локаль у вас UTF-8?
Ответить | Правка | Наверх | Cообщить модератору

44. "Free-SA -новый анализатор логов squid, для замены SARG"  +/
Сообщение от saperemail (?), 22-Мрт-07, 18:17 
> вместо разделителя разрядов вылазит 'Б─┌'
"Разобрался", это проблема локали, в которой определен этот странный символ в качестве разделителя. У меня при ru_RU.UTF8 такой же набор появляется, если кодировку отчета выставить в KOI8-R, но она должна быть в UTF8 (так и есть). И кстати для локали ru_RU.UTF8 нужно использовать перекодированный Russian файл (например через iconv -f KOI8-R -t UTF8 < Russian > Russian.UTF8, прописать потом в sa.conf параметр localisation на этот файл).

Т.е. пока локаль не пофиксят эта ошибка не исчезнет. Возможно в каком то шрифте для этого символа и есть картинка, но у меня ни Aria, ни OpenSymbol, ни *dings не знают ничего о нем.

Как временное решение, при сильном желании использовать ru_RU.UTF8 можно переопределить заново локаль, где в качестве символа разделителя разрядов указать что то попроще.

Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

59. "локаль"  +/
Сообщение от Michael Shigorinemail (?), 22-Мрт-07, 22:39 
>Как временное решение, при сильном желании использовать ru_RU.UTF8 можно переопределить заново локаль,
>где в качестве символа разделителя разрядов указать что то попроще.
Думаю, Вы понимаете, что это не решение.  Перекраивать системную локаль, которая более нигде проблем не создаёт, ради анализатора логов -- неконструктивно.

Если честно, то вместе с отношением к /tmp у меня пока пропало желание _проверять_ результат на пригодность, хотя подсказать про возможность выставления LC_NUMERIC у себя в коде в C или POSIX -- подсказываю.

Ответить | Правка | Наверх | Cообщить модератору

61. "локаль"  +/
Сообщение от saperemail (?), 22-Мрт-07, 23:00 
> Думаю, Вы понимаете, что это не решение.  Перекраивать системную локаль, которая более нигде проблем не создаёт, ради анализатора логов -- неконструктивно.
Да понимаю и согласен с вами, поэтому сейчас буду разбираться что он там пишет и если это проблема libc, то извините - баг отпишу разработчикам libc, а не программу переделывать буду. Если хотите отпишу о результатах тут.

> Если честно, то вместе с отношением к /tmp у меня пока пропало желание _проверять_ результат на пригодность
Я ниже ответил куском кода, вам то решение не подходит?

Ответить | Правка | Наверх | Cообщить модератору

63. "/tmp"  +/
Сообщение от Michael Shigorinemail (?), 22-Мрт-07, 23:37 
>если это проблема libc, то извините - баг отпишу разработчикам libc,
>а не программу переделывать буду. Если хотите отпишу о результатах тут.
Разумно; как удобно.

Только впервые слышу о проблеме с разделителями в ru_RU.* (при том, что активно применяются все три имеющие распространение вариации по кодировкам -- KOI8-R, CP1251 и UTF-8).

>> Если честно, то вместе с отношением к /tmp у меня пока пропало желание _проверять_
>>результат на пригодность
>Я ниже ответил куском кода, вам то решение не подходит?
Нет, я боюсь /tmp [*].  В данном разе не устраивает DoS, который элементарно организовывается пользователем заранее и чуточку сложнее -- в процессе функционирования (поскольку классический race condition: загружаем систему в округе возможного рестарта сервиса до повышения вероятности вклиниться между -- кстати, нерекомендуемым -- system() и mkdir(), создаём /tmp/sa и срываем работу анализатора).

* правило большого пальца -- /tmp кусается и не предназначен для постоянных или "надёжных" объектов непредсказуемого объёма.  И вообще чем дальше, тем чаще наблюдается на tmpfs.  А это ещё гораздо лучше, чем если угораздит остаться на корне.

По FHS подходящим местом для рабочих данных программы является подкаталог в /var/lib или /var/spool; при этом не стоит забывать, что "sa" -- очень короткий идентификатор (например, в ALT /usr/lib/sa и /var/log/sa принадлежат пакету sysstat и лично я бы слегка удивился, когда-то обнаружив /var/lib/sa из другого пакета...).

PS: я не являюсь ни разработчиком на C, ни специалистом по разработке защищённых программ, хотя принимаю некоторое участие в ALT Security Team и смежных вопросах по нашей конторе (включая поддержку нескольких серверов и выбор вариантов для того, что поставляем клиентам -- например, lightsquid, а не sarg, в качестве спутника прокси).  Просьба воспринимать в таком контексте.

Ответить | Правка | Наверх | Cообщить модератору

65. "/tmp"  +/
Сообщение от saperemail (?), 23-Мрт-07, 00:19 
>Только впервые слышу о проблеме с разделителями в ru_RU.* (при том, что
>активно применяются все три имеющие распространение вариации по кодировкам -- KOI8-R, CP1251 и UTF-8).
Я не про все ru_RU, а только про ru_RU.UTF8 например, в Slackware (но видимо в ALTLinux тоже).

>Нет, я боюсь /tmp [*].  В данном разе не устраивает DoS,
>который элементарно организовывается пользователем заранее и чуточку сложнее -- в процессе
>функционирования (поскольку классический race condition: загружаем систему в округе возможного рестарта
>сервиса до повышения вероятности вклиниться между -- кстати, нерекомендуемым -- system()
>и mkdir(), создаём /tmp/sa и срываем работу анализатора).
Натянутый DoS получается. Администратор при желании легко от этого защитится. В конце концов TMPDIR в Makefile можно переопределить куда душе угодно. Умолчание, выставленное в /tmp - это скорее для удобства понимания конечным пользователем free-sa, чем для безопасности. Кто то такие программы с libsafe собирает ;-)

>По FHS подходящим местом для рабочих данных программы является подкаталог в /var/lib
>или /var/spool; при этом не стоит забывать, что "sa" -- очень
>короткий идентификатор (например, в ALT /usr/lib/sa и /var/log/sa принадлежат пакету sysstat
>и лично я бы слегка удивился, когда-то обнаружив /var/lib/sa из другого
>пакета...).
Спасибо, sa заменю на free-sa. Это от того, что раньше было несколько версий *-sa, сейчас решили оставить и развивать только одну: free-sa.

>PS: я не являюсь ни разработчиком на C, ни специалистом по разработке
>защищённых программ, хотя принимаю некоторое участие в ALT Security Team и
>смежных вопросах по нашей конторе (включая поддержку нескольких серверов и выбор
>вариантов для того, что поставляем клиентам -- например, lightsquid, а не
>sarg, в качестве спутника прокси).  Просьба воспринимать в таком контексте.
Да примерно также.

Ответить | Правка | Наверх | Cообщить модератору

64. "локаль"  +/
Сообщение от saperemail (?), 22-Мрт-07, 23:52 
Итак, все три локали штатно в системе, никто их не менял и не переопределял:
$ ls -ld /usr/lib/locale/en_US.utf8 /usr/lib/locale/zh_CN.utf8 /usr/lib/locale/ru_RU.utf8
drwxr-xr-x 3 root root 4096 Дек 21 22:55 /usr/lib/locale/en_US.utf8/
drwxr-xr-x 3 root root 4096 Дек 21 22:58 /usr/lib/locale/ru_RU.utf8/
drwxr-xr-x 3 root root 4096 Дек 21 23:01 /usr/lib/locale/zh_CN.utf8/

Составим простую программу:
$ cat x.c
#include <stdio.h>
#include <locale.h>
#include <stdlib.h>

int main(int argc, char **argv) {
    int a = 65535;
    setlocale(LC_ALL, "");
    fprintf(stderr, "\n[ %'d ]\n", a);
    return 0;
}

$ LANG=zh_CN.UTF8;LC_ALL=zh_CN.UTF8;./x
[ 65,535 ]
$ LANG=en_US.UTF8;LC_ALL=en_US.UTF8;./x
[ 65,535 ]
$ LANG=ru_RU.UTF8;LC_ALL=ru_RU.UTF8;./x
[ 65Б─┌535 ]
$ LANG=ru_RU.UTF8;LC_ALL=ru_RU.UTF8;./x 2>/zxc
$ LANG=ru_RU.KOI8-R;LC_ALL=ru_RU.KOI8-R;iconv -f UTF-8 -t KOI8-R < /zxc
[ 65iconv: недопустимая входная последовательность в позиции 5

Убедил? Кстати те 3 байта (0xE2, 0x80, 0x82), которые записаны в zxc соответствуют Unicode 4.0. Это можно проверить тут: http://www.unicode.org/versions/Unicode4.0.0/ch03.pdf (выполнить поиск "Table 3-5").

Ответить | Правка | К родителю #59 | Наверх | Cообщить модератору

87. "локаль"  +/
Сообщение от Michael Shigorinemail (?), 25-Мрт-07, 16:25 
Это если вывод в UTF-8 созерцать в терминале с кодировкой локали и шрифта KOI8-R.  В utf'ной -- нормально.

$ LC_NUMERIC=ru_RU.UTF8;./x
[ 65 535 ]

Поскольку сам предпочитаю на сегодня KOI8, то юникодный терминал, прицепленный на комбинацию клавиш, запускается так:

#!/bin/sh
G_FILENAME_ENCODING=utf-8 LC_ALL=ru_RU.UTF-8 LC_COLLATE=uk_UA.UTF8 LC_CTYPE=uk_UA.UTF8 exec urxvt +sb -fn '-*-terminus-bold-*-*-*-20-*-*-*-*-*-iso10646-*' -rv -cr yellow -tn xterm &

Вывод: или всё-таки синхронизировать кодировки, или (может оказаться проще и практичнее) делать что-то вроде setlocale (LC_NUMERIC,"C");

Ответить | Правка | Наверх | Cообщить модератору

88. "локаль"  +/
Сообщение от saperemail (ok), 25-Мрт-07, 17:08 
>$ LC_NUMERIC=ru_RU.UTF8;./x
>[ 65 535 ]

Да, с вашими параметрами запуска терминала у меня тоже пробел вставляет. В общем эта проблема немного странная для меня. Потому что OpenOffice вывод программы открывает с квадратиком на месте того символа (при открытии как "кодированный текст (*.txt)").

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру