# mod_log_config.pl
# Defines editors for logging
sub mod_log_config_directives
{
$rv = [ [ 'LogFormat', 1, 3, 'virtual', 1.2 ],
[ 'TransferLog CustomLog', 1, 3, 'virtual', 1.2 ] ];
return &make_directives($rv, $_[0], "mod_log_config");
}
sub edit_LogFormat
{
if ($_[1]->{'version'} >= 1.3) {
local($i, $v, $deffmt, @nick, @fmt, $rv);
for($i=0; $_[0]->[$i]; $i++) {
$vv = $_[0]->[$i]->{'words'};
if ($vv->[1]) {
push(@nick, $vv->[1]); push(@fmt, $vv->[0]);
}
else { $deffmt = $vv->[0]; }
}
$rv = &opt_input($deffmt, "LogFormat", "$text{'mod_log_config_common'}", 20);
$rv .= "
$text{'mod_log_config_named'}
\n";
$rv .= "
\n";
return (2, "$text{'mod_log_config_deflog'}", $rv);
}
else {
return (1, "$text{'mod_log_config_deflog'}",
&opt_input($_[0]->[0]->{'words'}->[0],
"LogFormat", "$text{'mod_log_config_default'}", 25));
}
}
sub save_LogFormat
{
$in{'LogFormat'} =~ s/\"/\\\"/g;
if ($_[0]->{'version'} >= 1.3) {
local(@rv, $i, $nick, $fmt);
if (!$in{'LogFormat_def'}) { push(@rv, "\"$in{'LogFormat'}\""); }
for($i=0; defined($in{"LogFormat_nick_$i"}); $i++) {
$nick = $in{"LogFormat_nick_$i"}; $fmt =$in{"LogFormat_fmt_$i"};
$fmt =~ s/\"/\\\"/g;
if ($nick !~ /\S/ && $fmt !~ /\S/) { next; }
$nick =~ /^\S+$/ || &error(&text('mod_log_config_enick', $nick));
push(@rv, "\"$fmt\" $nick");
}
return ( \@rv );
}
else {
if ($in{'LogFormat_def'}) { return ( [ ] ); }
elsif ($in{'LogFormat'} =~ /^\S+$/) { return ( [ $in{'LogFormat'} ] ); }
else { return ( [ "\"$in{'LogFormat'}\"" ] ); }
}
}
sub edit_TransferLog_CustomLog
{
local($rv, @all, $d, $i, $format, $dest);
$rv = "\n";
return (2, "$text{'mod_log_config_log'}", $rv);
}
sub save_TransferLog_CustomLog
{
local($i, $def, $cust, $prog, $dest, $fileprog, @tl, @cl);
for($i=0; defined($in{"Log_dest_$i"}); $i++) {
$def = $in{"Log_def_$i"}; $cust = $in{"Log_cust_$i"};
$prog = $in{"Log_prog_$i"}; $dest = $in{"Log_dest_$i"};
$env = $in{"Log_env_$i"};
$cust =~ s/\"/\\\"/g;
if ($cust !~ /\S/ && $dest !~ /\S/) { next; }
if (!$def && $cust !~ /\S/) { &error(&text('mod_log_config_eformat', $dest)); }
if ($dest !~ /\S/) { &error($text{'mod_log_config_enofilprog'}); }
&allowed_auth_file($dest) ||
&error(&text('mod_log_config_efilprog', $dest));
$prog || &directory_exists($dest) ||
&error(&text('mod_log_config_edir', $dest));
$fileprog = !$prog ? $dest :
$dest =~ /^\S+$/ ? "|$dest" : "\"|$dest\"";
if ($def) {
if ($env) { &error($text{'mod_log_config_eifset'}); }
push(@tl, "$fileprog");
}
else {
if ($env) { push(@cl, "$fileprog \"$cust\" env=$env"); }
else { push(@cl, "$fileprog \"$cust\""); }
}
}
return ( \@tl, \@cl );
}
1;