Current File : //usr/share/webmin/sendmail/save_mailer.cgi |
#!/usr/bin/perl
# save_mailer.cgi
# Save, create or delete a mailertable entry
require './sendmail-lib.pl';
require './mailers-lib.pl';
&ReadParse();
$access{'mailers'} || &error($text{'msave_ecannot'});
$conf = &get_sendmailcf();
$mfile = &mailers_file($conf);
&lock_file($mfile);
($mdbm,$mdbmtype) = &mailers_dbm($conf);
@mailers = &list_mailers($mfile);
foreach $ml (@mailers) { $already{$ml->{'domain'}}++; }
if (!$in{'new'}) { $m = $mailers[$in{'num'}]; }
if ($in{'delete'}) {
# delete some mailer entry
$logm = $m;
&delete_mailer($m, $mfile, $mdbm, $mdbmtype);
}
else {
# Saving or creating.. check inputs
&error_setup($text{'msave_err'});
$domain = $in{'from_type'} == 1 ? ".".$in{'from_dom'} :
$in{'from_type'} == 2 ? $in{'from_all'} : $in{'from_host'};
$domain =~ /^[A-z0-9\-\.]+$/ ||
&error(&text('msave_edomain', $domain));
if ($already{$domain} && ($in{'new'} || $m->{'domain'} ne $domain)) {
&error(&text('msave_edup', $domain));
}
if ($in{'new'} && $in{'from_type'} == 2 &&
$already{".".$in{'from_all'}}) {
&error(&text('msave_edup', $domain));
}
$mailer = $in{'mailer'};
$dest = $in{'dest'};
$dest =~ s/\s+/:/g;
$newm{'domain'} = $domain;
$newm{'mailer'} = $mailer;
if ($in{'nomx'} && $mailer =~ /smtp|relay/) {
$dest = join(":", map { "[".$_."]" } split(/:/, $dest));
}
$newm{'dest'} = $dest;
$newm{'cmt'} = $in{'cmt'};
if ($in{'new'}) {
&create_mailer(\%newm, $mfile, $mdbm, $mdbmtype);
if ($in{'from_type'} == 2) {
# Add extra for hosts in domain
$newm{'domain'} = ".".$in{'from_all'};
&create_mailer(\%newm, $mfile, $mdbm, $mdbmtype);
}
}
else {
&modify_mailer($m, \%newm, $mfile, $mdbm, $mdbmtype);
}
$logm = \%newm;
}
&unlock_file($mfile);
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify',
"mailer", $logm->{'domain'}, $logm);
&redirect("list_mailers.cgi");