#!/usr/local/bin/perl
# newtape.pl
# Called when a new tape is needed for some backup, to update its status
# file. Only exits when the user has actually clicked the 'new tape' button

$no_acl_check++;
delete($ENV{'SCRIPT_NAME'});	# force use of $0 to determine module
delete($ENV{'FOREIGN_MODULE_NAME'});
require './fsdump-lib.pl';
$dump = &get_dump($ARGV[0]);
$dump->{'id'} || die "Dump $ARGV[0] does not exist!";

# Find the status file
opendir(DIR, $module_config_directory);
foreach $f (readdir(DIR)) {
	if ($f =~ /^(\d+)\.(\d+)\.status$/ && $1 == $dump->{'id'}) {
		# Got it!
		$sfile = "$module_config_directory/$f";
		}
	}
closedir(DIR);
$sfile || die "Failed to find status file for dump $ARGV[0]";

# Update it to indicate that a new tape is needed
&read_file($sfile, \%status);
$status{'status'} = 'tape';
$status{'tapepid'} = $$;
$status{'tapecount'}++;
&write_file($sfile, \%status);

# Email the backup address
if ($dump->{'email'} && &foreign_check("mailboxes")) {
	&foreign_require("mailboxes", "mailboxes-lib.pl");
	$host = &get_system_hostname();
	$c = $status{'tapecount'};
	@dirs = &dump_directories($dump);
	$dirs = join(", ", @dirs);
	$subject = "Tape change $c for backup of $dirs on $host";
	$data = "The backup of $dirs on $host has reached the\n".
		"maximum amount of data allowed on tape $c. You will\n".
		"need to load a new tape and hit the 'Tape Loaded' link in\n".
		"Webmin's Filesystem Backup module for the backup to continue.\n";
	local $mail = { 'headers' =>
			[ [ 'From', &mailboxes::get_from_address() ],
			  [ 'To', $dump->{'email'} ],
			  [ 'Subject', $subject ] ],
			'attach' =>
			[ { 'headers' => [ [ 'Content-type', 'text/plain' ] ],
			    'data' => $data } ] };
	&mailboxes::send_mail($mail, undef, 0, 0, $config{'smtp_server'});
	}

# Wait until signalled with a HUP
$SIG{'HUP'} = \&got_hup;
while(1) {
	sleep(1000000);
	}
exit(2);

sub got_hup
{
$status{'status'} = 'running';
&write_file($sfile, \%status);
exit(0);
}

