Большой Воронежский Форум
» UNIX и дериваты>squid и русские имена пользователей Active Directory в логах
fuze 18:46 01.04.2009
обственно проблема такова:
Имеется squid с авторизацией в win домене. Все работает, но в логах пишется имя пользователя (пользователи на русском) в двоичном виде типа "3%EE%EF%EE%F0%EF%EE%F0%EF%F0%EE%". Соответственно sarg ну или любая другая программа анализа логов не воспринимает пользователей в таком виде.
Внимание, вопрос:
есть ли какое-нибудь решение изложенной проблемы? Весь инет перерыл, что-то не нашел. Использовать английские имена пользователей не предлагать)))) Debian Linux 5.0, squid 2.7, Samba версии 3.25. Контролер домена 2003. [Ответ]
Den 09:41 03.04.2009
fuze, a wbinfo -u в каком виде выводит пользователей? [Ответ]
fuze 12:08 13.04.2009
wbinfo -u выводит по русски...
нашел решение путем перекодирования лог файла squid, может кому сгодится:
Запускаем cat old_log | ./convert.awk > new_log

Код:
#!/usr/bin/awk -f 

BEGIN { 
        for(i = 0; i < 10; i++) 
                hex[i] = i 
        hex["A"] = hex["a"] = 10 
        hex["B"] = hex["b"] = 11 
        hex["C"] = hex["c"] = 12 
        hex["D"] = hex["d"] = 13 
        hex["E"] = hex["e"] = 14 
        hex["F"] = hex["f"] = 15 
} 

{ 

        ######################################################################## 
        # 8 - колонка - это имя пользователя 
        # urldecode - в awk в стандартную библиотеку не входит, но можно найти 
        # http://geni.ath.cx/unix.html#_One-liner_urldecode_functions 
        name = $8 
        name_decode = "" 
        gsub(/\+/, " ", name) 
        while(match(name, /%../)){ 
                if(RSTART > 1) 
                        name_decode = name_decode sprintf("%s", substr(name, 1, RSTART-1)) 
                name_decode = name_decode sprintf("%c", hex[substr(name, RSTART+1, 1)] * 16 + hex[substr(name, RSTART+2, 1)]) 
                name = substr(name, RSTART+RLENGTH) 
        } 
        name_decode = name_decode name 
        ######################################################################## 

        # пробелы на _ 
        gsub(/ /, "_", name_decode) 

        $8 = name_decode 

        print 
}
Помогли на форуме фридома. [Ответ]
Вверх