#!/usr/pkg/bin/perl
# save_virt.cgi
# Save or delete a new or existing virtual mapping

require './qmail-lib.pl';
&ReadParse();
&error_setup($text{'vsave_err'});

@virts = &list_virts();
$v = $virts[$in{'idx'}] if ($in{'idx'} ne '');

if ($in{'delete'}) {
	# delete some virt
	$logv = $v;
	&delete_virt($v);
	}
else {
	# saving or creating .. check inputs
	if ($in{'from_mode'} == 1) {
		$in{'domain'} =~ /^[A-Za-z0-9\.\-]+$/ ||
			&error(&text('vsave_edomain', $in{'domain'}));
		$newv{'domain'} = $in{'domain'};
		}
	elsif ($in{'from_mode'} == 2) {
		$in{'user'} =~ /^[^\@: ]+$/ ||
			&error(&text('vsave_euser', $in{'user'}));
		$in{'domain2'} =~ /^[A-Za-z0-9\.\-]+$/ ||
			&error(&text('vsave_edomain', $in{'domain2'}));
		$newv{'domain'} = $in{'domain2'};
		$newv{'user'} = $in{'user'};
		}
	if ($in{'prepend_mode'} == 1) {
		$in{'prepend'} =~ /^[^\@: ]+$/ ||
			&error(&text('vsave_eprepend', $in{'prepend'}));
		$newv{'prepend'} = $in{'prepend'};
		}
	elsif ($in{'prepend_mode'} == 0) {
		$in{'from_mode'} || &error($text{'vsave_eboth'});
		}
	elsif ($in{'prepend_mode'} == 2) {
		if ($in{'from_mode'} == 1) {
			$newv{'prepend'} = $in{'domain'};
			$newv{'prepend'} =~ s/\.(.*)$//;
			}
		elsif ($in{'from_mode'} == 2) {
			$newv{'prepend'} = $in{'domain2'};
			$newv{'prepend'} =~ s/\.(.*)$//;
			}
		else {
			$newv{'prepend'} = 'catchall';
			}
		}
	if ($in{'new'}) { &create_virt(\%newv); }
	else { &modify_virt($v, \%newv); }
	$logv = \%newv;
	}
&restart_qmail();
&webmin_log($in{'delete'} ? 'delete' : $in{'new'} ? 'create' : 'modify',
	    "virt", $logv->{'user'} ? "$logv->{'user'}\@$logv->{'domain'}" :
		    $logv->{'domain'}, $logv);
&redirect("list_virts.cgi");

