#!/usr/pkg/bin/perl
# save_domain.cgi
# Save, create or delete an address mapping

require './sendmail-lib.pl';
require './domain-lib.pl';
&ReadParse();
$access{'domains'} || &error($text{'dsave_ecannot'});
$conf = &get_sendmailcf();
$dfile = &domains_file($conf);
&lock_file($dfile);
($ddbm, $ddbmtype) = &domains_dbm($conf);
@doms = &list_domains($dfile);
if (!$in{'new'}) { $d = $doms[$in{'num'}]; }
foreach $du (@doms) { $already{$du->{'from'}}++; }

if ($in{'delete'}) {
	# delete some mapping
	$logd = $d;
	&delete_domain($d, $dfile, $ddbm, $ddbmtype);
	}
else {
	# Saving or creating.. check inputs
	&error_setup($text{'dsave_err'});
	$in{'from'} =~ /^[A-z0-9\.\-]+$/ ||
		&error(&text('dsave_edomain', $in{'from'}));
	$in{'to'} =~ /^[A-z0-9\.\-]+$/ ||
		&error(&text('dsave_edomain', $in{'to'}));
	if ($in{'new'} || lc($in{'from'}) ne lc($d->{'from'})) {
		($same) = grep { lc($_->{'from'}) eq lc($in{'from'}) }
			       @doms;
		$same && &error(&text('dsave_ealready', $in{'from'}));
		}
	$newd{'from'} = $in{'from'};
	$newd{'to'} = $in{'to'};
	$newd{'cmt'} = $in{'cmt'};
	if ($in{'new'}) { &create_domain(\%newd, $dfile, $ddbm, $ddbmtype); }
	else { &modify_domain($d, \%newd, $dfile, $ddbm, $ddbmtype); }
	$logd = \%newd;
	}
&unlock_file($dfile);
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify',
	    "domain", $logd->{'from'}, $logd);
&redirect("list_domains.cgi");

