# HG changeset patch # User devi # Date 1150052862 -10800 # Node ID 4c02cf4123ee4b88dd7c76b74147f0a2d567fa36 # Parent 9f64b4cfa4f63d3aff5fe4fd89b762eb11e2ffbd l3-agent и l3-backend изменены так, что все записанные команды теперь привязаны к контексту, заданному в параметре l3cd агента Их XML-представление теперь сохраняется не только в общем файле backend.xml, но и в файлах соответствующих контексту l3cd $Config{backend_datadir}/$l3cd/data.xml Параметр l3cd (пока что) меняется вручную в конфигурационном файле агента ~/.l3rc После того как параметр изменён необходимо перезапустить агент, отправив ему сигнал HUP killall -1 l3-agent ЧТО НУЖНО СДЕЛАТЬ: == Безопасность == * Сделать процедуру залогивинивания и проверки подлинности пользователя * Ограничить доступ на запись в контекстные каталоги для пользователей == Смена каталога == * Сделать команду l3, которая позволяет изменить и просмотреть текущий l3-контекст l3 pwd l3 cd /devi/netflow diff -r 9f64b4cfa4f6 -r 4c02cf4123ee l3-agent --- a/l3-agent Sun May 28 17:46:58 2006 +0300 +++ b/l3-agent Sun Jun 11 22:07:42 2006 +0300 @@ -698,6 +698,7 @@ # Начинаем вывод команды print OUT "\n"; + print OUT "$Config{l3cd}\n" if $Config{"l3cd"}; for my $element (qw( local_session_id history @@ -755,6 +756,7 @@ open(OUT, ">>", $output_filename) or die "Can't open $output_filename for writing\n"; print OUT "\n"; + print OUT "$Config{l3cd}\n" if $Config{"l3cd"}; my %session = %{$Sessions{$local_session_id}}; for my $key (keys %session) { print OUT "<$key>".$session{$key}."\n"; @@ -822,6 +824,11 @@ $Killed = 1; } +sub reload +{ + init_config; +} + sub main { @@ -894,7 +901,9 @@ $0 = $Config{"l3-agent"}; - $SIG{INT} = $SIG{TERM} = $SIG{HUP} = \&process_was_killed; + $SIG{INT} = $SIG{TERM} = \&process_was_killed; + $SIG{HUP} = \&reload; + } while (not $Killed) { @Command_Lines = (); diff -r 9f64b4cfa4f6 -r 4c02cf4123ee l3-backend --- a/l3-backend Sun May 28 17:46:58 2006 +0300 +++ b/l3-backend Sun Jun 11 22:07:42 2006 +0300 @@ -91,13 +91,35 @@ # Это наш ответвлённый клиент close($server); + my $saved_data = ""; + # Считываем данные и передаём их в точку получения open(OUT, ">>", $Config{"backend_datafile"}); select OUT; $|=1; while(<$client>) { print OUT $_; + $saved_data .= $_; } close(OUT); + + while ($saved_data =~ m@<(session|command)>(.*)@sg) { + my $element_name = $1; + my $element = $2; + if ($element =~ m@(.*?)@msg) { +# Обнаружен элемент l3cd +# Информация должна быть сохранена в соответствующий каталог + my $l3cd = $1; +# Путь l3cd должен быть не пуст, +# и в нём могут быть только символы латинского алфавита, цифры и знаки _ и - + if ($l3cd && $l3cd =~ /^[a-zA-Z_\/0-9-]*/) { + system("mkdir -p $Config{backend_datadir}/$l3cd"); + if (open(OUT, ">>", $Config{"backend_datadir"}."/$l3cd/data.xml")) { + print OUT "<$element_name>".$element.""; + close(OUT); + }; + } + } + } } continue { # Наш родитель diff -r 9f64b4cfa4f6 -r 4c02cf4123ee l3config.pm --- a/l3config.pm Sun May 28 17:46:58 2006 +0300 +++ b/l3config.pm Sun Jun 11 22:07:42 2006 +0300 @@ -9,7 +9,7 @@ @EXPORT = qw(%Config &init_config); our $System_Config_File = "/etc/lilalo.conf"; -our $User_Config_File = "$ENV{HOME}/.lilalo.conf"; +our $User_Config_File = "$ENV{HOME}/.l3rc"; $ENV{HOME} ||= "/tmp"; @@ -84,10 +84,11 @@ "detach" => "yes", "agent_pidfile" => "$ENV{HOME}/.lilalo/l3-agent.pid", - "backend_address" => "192.168.15.254", + "backend_address" => "192.168.18.254", "backend_port" => "18030", "backend_pidfile" => "/tmp/l3-backend.pid", "backend_datafile" => "/var/lilalo/lablogs-xml/backend.xml", + "backend_datadir" => "/var/lilalo/lablogs-xml/", "l3-agent" => "l3-agent", "l3-backend" => "l3-backend", @@ -103,6 +104,12 @@ #lm "show_host" => "no", + "l3cd" => "", # Текущий контекст перехваченных команд + # Возможные варианты: + # КУРС/ДАТА-НАЧАЛА/МАШИНА/ПОЛЬЗОВАТЕЛЬ + # ДАТА-НАЧАЛА/КУРС/МАШИНА/ПОЛЬЗОВАТЕЛЬ + # УНИКАЛЬНЫЙ_ПОЛЬЗОВАТЕЛЬ/КУРС/МАШИНА/ПОЛЬЗОВАТЕЛЬ + # Вспомогательные программы #"l3-report" => "./lm-report", "l3-report" => "./l3-report", @@ -145,6 +152,7 @@ open(CONFIG, "$filename") or return; while () { + chomp; s/#.*//; next if /^\s*$/; my ($var, $val) = split /\s*=\s*/, $_, 2;