#!/usr/local/bin/perl # edit_log.cgi # Display a form for editing or creating a new log destination require './syslog-lib.pl'; &ReadParse(); $access{'noedit'} && &error($text{'edit_ecannot'}); $access{'syslog'} || &error($text{'edit_ecannot'}); $conf = &get_config(); if ($in{'new'}) { &ui_print_header(undef, $text{'create_title'}, ""); $log = { 'active' => '1', 'sync' => 1, 'file' => -d '/var/log' ? '/var/log/' : -d '/var/adm' ? '/var/adm/' : undef }; } else { &ui_print_header(undef, $text{'edit_title'}, ""); $log = $conf->[$in{'idx'}]; &can_edit_log($log) || &error($text{'edit_ecannot2'}); } # Log destination section print &ui_form_start("save_log.cgi"); print &ui_hidden("new", $in{'new'}); print &ui_hidden("idx", $in{'idx'}); print &ui_table_start($text{'edit_header1'}, "width=100%", 2); # Log destination, starting with file @dopts = ( [ 0, $text{'edit_file'}, &ui_textbox("file", $log->{'file'}, 40)." ". &file_chooser_button("file")." ". ($config{'sync'} ? "
".&ui_checkbox("sync", 1, $text{'edit_sync'}, $log->{'sync'}) : "") ]); # Named pipe if ($config{'pipe'} == 1) { push(@dopts, [ 1, $text{'edit_pipe'}, &ui_textbox("pipe", $log->{'pipe'}, 40)." ". &file_chooser_button("pipe") ]); } elsif ($config{'pipe'} == 2) { push(@dopts, [ 1, $text{'edit_pipe2'}, &ui_textbox("pipe", $log->{'pipe'}, 40) ]); } # Socket file if ($config{'socket'}) { push(@dopts, [ 5, $text{'edit_socket'}, &ui_textbox("socket", $log->{'socket'}, 40)." ". &file_chooser_button("socket") ]); } # Send to users push(@dopts, [ 3, $text{'edit_users'}, &ui_textbox("users", join(" ", @{$log->{'users'}}), 40)." ". &user_chooser_button("users", 1) ]); # All users push(@dopts, [ 4, $text{'edit_allusers'} ]); # Remote host push(@dopts, [ 2, $text{'edit_host'}, &ui_textbox("host", $log->{'host'}, 30) ]); print &ui_table_row($text{'edit_logto'}, &ui_radio_table("mode", $log->{'file'} ? 0 : $log->{'pipe'} ? 1 : $log->{'socket'} ? 5 : $log->{'host'} ? 2 : $log->{'users'} ? 3 : $log->{'all'} ? 4 : -1, \@dopts)); # Log active? print &ui_table_row($text{'edit_active'}, &ui_yesno_radio("active", $log->{'active'})); if ($config{'tags'}) { # Tag name print &ui_table_row($text{'edit_tag'}, &ui_select("tag", $log->{'section'}->{'tag'}, [ map { [ $_->{'index'}, $_->{'tag'} eq '*' ? $text{'all'} : $_->{'tag'} ] } grep { $_->{'tag'} } @$conf ])); } print &ui_table_end(); # Log selection section print &ui_table_start($text{'edit_header2'}, "width=100%", 2); @facil = split(/\s+/, $config{'facilities'}); $table = &ui_columns_start([ $text{'edit_facil'}, $text{'edit_pri'} ], 100); $i = 0; foreach $s (@{$log->{'sel'}}, ".none") { ($f, $p) = split(/\./, $s); $p =~ s/warn$/warning/; $p =~ s/panic$/emerg/; $p =~ s/error$/err/; # Facility column local $facil; $facil .= &ui_radio("fmode_$i", $f =~ /,/ ? 1 : 0, [ [ 0, &ui_select("facil_$i", $f =~ /,/ ? undef : $f, [ [ undef, ' ' ], [ '*', $text{'edit_all'} ], @facil ], 1, 0, 1) ], [ 1, $text{'edit_many'}." ". &ui_textbox("facils_$i", $f =~ /,/ ? join(" ", split(/,/, $f)) : '', 25) ] ]); # Priorities range selector if ($config{'pri_dir'} == 1) { # Linux style $psel = &ui_select("pdir_$i", $p eq '*' || $p eq 'none' ? '' : $p =~ /^=/ ? '=' : $p =~ /^![^=]/ ? '!' : $p =~ /^!=/ ? '!=' : '', [ [ '', $text{'edit_pdir0'} ], [ '=', $text{'edit_pdir1'} ], [ '!', $text{'edit_pdir2'} ], [ '!=', $text{'edit_pdir3'} ] ]); $p =~ s/^[!=]*//; } elsif ($config{'pri_dir'} == 2) { # FreeBSD style local $pfx = $p =~ /^([<=>]+)/ ? $1 : undef; $psel = &ui_select("pdir_$i", $p eq '*' || $p eq 'none' || $pfx eq '>=' || $pfx eq '=>' || !$pfx ? '' : $pfx eq '<=' || $pfx eq '=<' ? '<=' : $pfx eq '<>' || $pfx eq '><' ? '<>' : $pfx, [ [ '', '>=' ], [ '>', '>' ], [ '<=', '<=' ], [ '<', '<' ], [ '<>', '<>' ] ], 1, 0, 1); $p =~ s/^[<=>]*//; } else { # No range selection allowed $psel = $text{'edit_pdir0'}; } # Priorities column local $pri; local $pmode = $p eq 'none' ? 0 : $p eq '*' ? 1 : 2; $pri .= &ui_radio("pmode_$i", $pmode, [ [ 0, $text{'edit_none'} ], $config{'pri_all'} ? ( [ 1, $text{'edit_all'} ] ) : ( ), [ 2, $psel ] ]); # Priority menu local $selpri; foreach $pr (&list_priorities()) { $selpri = $pr if ($p =~ /$pr/); } $pri .= &ui_select("pri_$i", $selpri, [ $p eq '*' || $p eq 'none' ? ( '' ) : ( ), &list_priorities() ], 1, 0, 1); $table .= &ui_columns_row([ $facil, $pri ]); $i++; } $table .= &ui_columns_end(); print &ui_table_row(undef, $table, 2); print &ui_table_end(); @buts = ( [ undef, $text{'save'} ] ); if (!$in{'new'}) { if ($log->{'file'} && -f $log->{'file'}) { push(@buts, [ 'view', $text{'edit_view'} ]); } push(@buts, [ 'delete', $text{'delete'} ]); } print &ui_form_end(\@buts); &ui_print_footer("", $text{'index_return'});