В борьбе с журнальными бестиями Иван Скляров (www.sklyaroff.ru) Хакер, номер #078, стр. 078-100-2 # cp /dev/null /var/run/utmp # cp /dev/null /var/log/wtmp # cp /dev/null /var/log/lastlog [формат файлов wtmp, utmp и lastlog] В man можно узнать, что wtmp и utmp состоят из последовательности структур. Причем эти структуры одинаковы для файлов wtmp и utmp и объявлены в заголовочном файле utmp.h. В Linux этот файл расположен в каталоге /usr/include/bits. Заголовочный файл utmp.h в Linux struct utmp { short int ut_type; /* Тип записи */ pid_t ut_pid; /* Идентификатор процесса */ char ut_line[UT_LINESIZE]; /* Имя устройства (console, ttyxx) */ char ut_id[4]; /* Идентификатор из файла /etc/inittab (обычно номер линии) */ char ut_user[UT_NAMESIZE]; /* Входное имя пользователя */ char ut_host[UT_HOSTSIZE]; /* Имя удаленного хоста */ struct exit_status ut_exit; /* Код завершения процесса, помеченного как DEAD_PROCESS */ long int ut_session; /* ID сессии */ struct timeval ut_tv; /* Время создания записи */ int32_t ut_addr_v6[4]; /* IP-адрес удаленного хоста */ char __unused[20]; /* Зарезервировано для будущего использования */ }; struct exit_status { short int e_termination; /* Системный код завершения процесса */ short int e_exit; /* Пользовательский код завершения */ }; /* Для совместимости */ #define ut_name ut_user #ifndef _NO_UT_TIME #define ut_time ut_tv.tv_sec #endif #define ut_xtime ut_tv.tv_sec #define ut_addr ut_addr_v6[0] Во FreeBSD файл utmp.h расположен в каталоге /usr/include и структура utmp выглядит немного иначе: [структура utmp.h в FreeBSD] struct utmp { char ut_line[UT_LINESIZE]; /* Имя устройства (console, ttyxx) */ char ut_name[UT_NAMESIZE]; /* Входное имя пользователя */ char ut_host[UT_HOSTSIZE]; /* Имя удаленного хоста */ time_t ut_time; /* Временная метка */ }; Стоит отметить, что на страницах man эти структуры описаны, но всегда надо смотреть в заголовочные файлы — истина только там. Структура lastlog также определена в файле utmp.h и имеет следующий вид: В Linux: struct lastlog { __time_t ll_time; char ll_line[UT_LINESIZE]; char ll_host[UT_HOSTSIZE]; }; В FreeBSD: struct lastlog { time_t ll_time; char ll_line[UT_LINESIZE]; char ll_host[UT_HOSTSIZE]; }; Как видишь, отличие только в названии типа ll_time. В Linux существует отдельный заголовочный файл lastlog.h. Обычно он содержит только одну строчку «#include <utmp.h>», то есть вся информация находится в файле utmp.h. |