#!/usr/bin/perl
#-----------------------------------------------------------------------------#
#  Copyright (C) 2001 - 2002 Multi-Tech Systems Inc., USA
#  All Rights Reserved
#  Multi-Tech Systems, Inc., 2205, Woodale Dr, Mounds View MN USA
#-----------------------------------------------------------------------------#
#  ModName: Web GUI - Interface
#  Version: 3.25
#  Date: 2005-10-05
#  Modification History - Begin
#  Modification History - End


#Description: This is the main backup file that is invoked by Web module
#		Depending on the ID, respective scripts are invoked to
#             	export, import and timely export backup file

$SIG{QUIT} = 'inthdlr';
$SIG{INT} = 'inthdlr';
$SIG{TERM} = 'inthdlr';

#This subroutine is added to avoid race condition while restoring Iptablerules
sub restorerules
{
        open(IPTABLERULES,"/etc/multiconf/iptablerules");
        flock(IPTABLERULES,2);
        #system("iptables-restore </etc/multiconf/iptablerules");
       `/etc/multiconf/scripts/iptableop rest`;

        close(IPTABLERULES);
}
# If Surf control is activated start off the timer irrespective of whatis there in the backup or factory defaults
sub check_surf_status
{
	# Surf control change
	my $surf_status = `cat /etc/multiconf/surf_status`;
	chomp($surf_status);
	if ($surf_status eq "ACTIVATED")
	{
		`perl -pi -e 's/TIMER=OFF/TIMER=ON/g' /etc/multiconf/processstatus`;
	}
}

sub inthdlr {
}

#$Scriptpath = "/etc/multiconf/scripts";
$ID = $ARGV[0];

if ($ID eq "exportbkp")
{
	$comment_str = $ARGV[1];
	chomp ($comment_str);
	$version_str = `/etc/multiconf/scripts/version get`;
	if ($comment_str eq "")
	{
		if ($version_str ne "")
		{
			$comment_str = " \n$version_str\n" . ".\n";
		}
		else
		{
			$comment_str = ".\n";
		}
	}
	else
	{
		if ($version_str ne "")
		{
			$comment_str = $comment_str . "\n" . "$version_str\n" . ".\n";
		}
		else
		{
			$comment_str = $comment_str . ".\n";
		}
	}

	$tempfile = `/etc/multiconf/scripts/gettempfile`;
	open (TEMPFILE, ">$tempfile");
	print TEMPFILE $comment_str;
	close (TEMPFILE);

	$datestr = `date +%Y-%m-%d.%H-%M`;
	chomp ($datestr);

	$dir = "/etc/multiconf/backup/";

	# To form the required pattern - MonDate-Year-Time.zip
	$zipfile = "$dir$datestr\.zip";

	$timezone = `/etc/multiconf/scripts/settings gettimezone`;
	open (TIMEZONE, ">/etc/multiconf/timezone");
	print TIMEZONE $timezone;
	close (TIMEZONE);

	open (BKUPFILE, "/etc/multiconf/backupfile") || die "can't open backupfile\n";

	while (<BKUPFILE>) {
		# NOTE - "P" option is used to preserve the path
		chomp ($_);
		if (-e $_)
		{
			`zip $zipfile $_`;	
		}
	}

	#Do not zip up the Maildir of the user mail. This will have
	#all the bounced mails.

	$exclfile = `/etc/multiconf/scripts/gettempfile`;
	open (TEMPFILE, ">/etc/multiconf/scripts/$exclfile");
	print TEMPFILE "\/home\/admin\/Maildir\/*\n";
	print TEMPFILE "\/home\/loginuser\/*";
	close (TEMPFILE);

	`zip $zipfile -ry -x@/etc/multiconf/scripts/$exclfile /home/`;
	`zip -ry $zipfile /home/loginuser/.bashrc`;
	`zip -ry $zipfile /home/loginuser/.bash_profile`;
	`zip -ry $zipfile /home/loginuser/.bash_history`;
	`rm -f /etc/multiconf/scripts/$exclfile`;
	`zip -ry $zipfile /var/chroot-named/var/named/*`;
	`zip -ry $zipfile /etc/cron.minutely/`;
	`zip -ry $zipfile /etc/cron.twomins/`;
	`zip -ry $zipfile /etc/cron.threemins/`;
	`zip -ry $zipfile /etc/cron.fivemins/`;
	`zip -ry $zipfile /etc/cron.sevenmins/`;
	`zip -ry $zipfile /etc/cron.elevenmins/`;
	`zip -ry $zipfile /etc/cron.thirtymins/`;
	`zip -ry $zipfile /etc/cron.hourly/`;
	`zip -ry $zipfile /etc/cron.daily-1/`;
	`zip -ry $zipfile /etc/cron.daily-2/`;
	`zip -ry $zipfile /etc/cron.daily-3/`;
	`zip -ry $zipfile /etc/cron.midnight/`;
	`zip -ry $zipfile /etc/cron.weekly/`;
	`zip -ry $zipfile /etc/cron.fortnightly/`;
	`zip -ry $zipfile /etc/cron.monthly/`;
	`zip -ry $zipfile /etc/cron.ddclient/`;
	`zip -ry $zipfile /etc/certs/`;
	`zip -ry $zipfile /etc/ipsec.d/`;
	`zip -ry $zipfile /var/chroot-squid/etc/multiconf/`;

	# NOTE - "z" option is used to associate
	# comment from $tempfile to $zipfile 

	system("zip -z $zipfile < $tempfile");

	system("rm -f $tempfile");
	system ("rm -f /etc/multiconf/timezone");
	close (BKUPFILE);

	#Get the configured parameter - Maximum number of files to be kept
	#in the backup directory.
	chdir ("/etc/multiconf/backup");
	open (BKUPFILE, "/etc/multiconf/bkupnumber");
	while (<BKUPFILE>)
	{
		if (/MAXNO/)
		{
			@values=split(/ /,$_);
			chomp($values[1]);
			$maxno = $values[1];
		}
	}
	close (BKUPFILE);	

	#Get the total number of files in the backup directory
	$nooffiles = `ls | wc -l`;

	#If the total number is greater than the configured value, delete
	#the older file(s)
	if ($nooffiles > $maxno)
	{
		$tempfile = `/etc/multiconf/scripts/gettempfile`;
		
		#Sort the files in the backup directory and enter the
		#result into a temporary file
		$files = `ls -crt`;
		open (TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
		print TEMPFILE $files;
		close (TEMPFILE);
		open (TEMPFILE, "/etc/multiconf/scripts/$tempfile");
		$diff = $nooffiles - $maxno;
		while (<TEMPFILE>)
		{
			chomp ($_);
			#If you have changed the date in past, then this file
			#will be the oldest file!!!
			$basezip = `basename $zipfile`;
			chomp ($basezip);
			if ($_ ne $basezip)
			{
				system ("rm -f $_");
				$diff--;
				if ($diff == 0)
				{
					last;
				}
			}
		}
		system ("rm -f /etc/multiconf/scripts/$tempfile");
	}

	my $NotifyUser = `/etc/multiconf/scripts/settings emailnotify check 'Export Backup'`;

	if (-e "/etc/multiconf/mailids/email.conf" && ($NotifyUser eq 'yes'))
	{
		open (MAILIDS, "/etc/multiconf/mailids/email.conf") || die "Cannot open mail id list file\n";
		$maillist = "";
		$AdminIdPresent = 0;
		while (<MAILIDS>)
		{
			$AdminIdPresent = 1;
			$mailid = $_;
			chomp ($mailid);
			if ($maillist eq "")
			{
				$maillist = $mailid;
			}
			else
			{
				$maillist = $maillist . " " . $mailid;
			}
		} 
		close (MAILIDS);
		if ($AdminIdPresent == 1)
		{
			$datetoprint = `date`;
			chomp ($datetoprint);
			$hostname = `hostname`;
			chomp ($hostname);
			$subject = $hostname . " - Backup";
			`echo "$datetoprint   This message is generated by the backup utility.\n The attached zip file contains all the configuration files in $hostname at this time." | mutt -s "$subject" -a $zipfile $maillist`;
		}
	}
}
elsif ($ID eq "importbkp")
{
#M7 LVPNVer 2.0...
	if ($ARGV[1] eq "default")
	{
		$bkpfile = "/etc/multiconf/defaultbkp.zip";
	}
	else
	{
		$bkpfile = $ARGV[1];
	}
#...M7 LVPNVer 2.0

	if (-e "/etc/cron.fivemins/pppdbk")
	{
		system ("/etc/multiconf/scripts/ppp Status disable");
	}

	#Lock Aide
	system ("/etc/multiconf/scripts/aide_dis create dont_run_aide");

	#Copy the old routes file to a temporary file. This is to delete all
	#the routes and add new routes if the import was successful
	$temproute = `/etc/multiconf/scripts/gettempfile`;
	system ("cp -f /etc/multiconf/interface /etc/multiconf/scripts/$temproute");

	#Copy the old aliases file to temporary files. This is to delete all
	#the aliases and add new aliases if the import was successful
	$file1 = `/etc/multiconf/scripts/gettempfile`;
	system ("cp -f /etc/multiconf/alias-eth0 /etc/multiconf/scripts/$file1");
	$file2 = `/etc/multiconf/scripts/gettempfile`;
	system ("cp -f /etc/multiconf/alias-eth1 /etc/multiconf/scripts/$file2");
	$file3 = `/etc/multiconf/scripts/gettempfile`;
	system ("cp -f /etc/multiconf/alias-eth2 /etc/multiconf/scripts/$file3");

	$tmpdir = `/etc/multiconf/scripts/gettempfile`;
	system ("mkdir /etc/multiconf/$tmpdir");
	system ("mv -f /home/ /etc/multiconf/$tmpdir/home");
	system ("mv -f /var/chroot-named/var/named/ /etc/multiconf/$tmpdir/named");
	system ("mv -f /etc/cron.minutely/ /etc/multiconf/$tmpdir/cron.minutely");
	system ("mv -f /etc/cron.twomins/ /etc/multiconf/$tmpdir/cron.twomins");
	system ("mv -f /etc/cron.threemins/ /etc/multiconf/$tmpdir/cron.threemins");	
	system ("mv -f /etc/cron.fivemins/ /etc/multiconf/$tmpdir/cron.fivemins");
	system ("mv -f /etc/cron.sevenmins/ /etc/multiconf/$tmpdir/cron.sevenmins");
	system ("mv -f /etc/cron.elevenmins/ /etc/multiconf/$tmpdir/cron.elevenmins");
	system ("mv -f /etc/cron.thirtymins/ /etc/multiconf/$tmpdir/cron.thirtymins");
	system ("mv -f /etc/cron.hourly/ /etc/multiconf/$tmpdir/cron.hourly");
	system ("mv -f /etc/cron.daily-1/ /etc/multiconf/$tmpdir/cron.daily-1");
	system ("mv -f /etc/cron.daily-2/ /etc/multiconf/$tmpdir/cron.daily-2");
	system ("mv -f /etc/cron.daily-3/ /etc/multiconf/$tmpdir/cron.daily-3");
	system ("mv -f /etc/cron.midnight/ /etc/multiconf/$tmpdir/cron.midnight");
	system ("mv -f /etc/cron.weekly/ /etc/multiconf/$tmpdir/cron.weekly");
	system ("mv -f /etc/cron.fortnightly/ /etc/multiconf/$tmpdir/cron.fortnightly");
	system ("mv -f /etc/cron.ddclient/ /etc/multiconf/$tmpdir/cron.ddclient");
	system ("mv -f /etc/cron.monthly/ /etc/multiconf/$tmpdir/cron.monthly");

	system ("mv -f /etc/certs/ /etc/multiconf/$tmpdir/certs");
	system ("mv -f /etc/ipsec.d/ /etc/multiconf/$tmpdir/ipsec.d");
	system ("mv -f /var/chroot-squid/etc/multiconf /etc/multiconf/$tmpdir/multiconf");

	chdir ("/");
	if ($ARGV[1] eq "default")
	{
		system("unzip -oX $bkpfile 2>/dev/null 1>/dev/null");
	}
	else
	{
		system("unzip -oX /etc/multiconf/backup/$bkpfile 2>/dev/null 1>/dev/null");
	}
	if ($? != 0)
	{
		system ("mv -f /etc/multiconf/$tmpdir/named /var/chroot-named/var/named");
		system ("mv -f /etc/multiconf/$tmpdir/home /home/");
		system ("mv -f /etc/multiconf/$tmpdir/cron.minutely /etc/cron.minutely");
		system ("mv -f /etc/multiconf/$tmpdir/cron.twomins /etc/cron.twomins");
		system ("mv -f /etc/multiconf/$tmpdir/cron.threemins /etc/cron.threemins");
		system ("mv -f /etc/multiconf/$tmpdir/cron.fivemins /etc/cron.fivemins");
		system ("mv -f /etc/multiconf/$tmpdir/cron.sevenmins /etc/cron.sevenmins");
		system ("mv -f /etc/multiconf/$tmpdir/cron.elevenmins /etc/cron.elevenmins");
		system ("mv -f /etc/multiconf/$tmpdir/cron.thirtymins /etc/cron.thirtymins");
		system ("mv -f /etc/multiconf/$tmpdir/cron.hourly /etc/cron.hourly");
		system ("mv -f /etc/multiconf/$tmpdir/cron.daily-1 /etc/cron.daily-1");
		system ("mv -f /etc/multiconf/$tmpdir/cron.daily-2 /etc/cron.daily-2");
		system ("mv -f /etc/multiconf/$tmpdir/cron.daily-3 /etc/cron.daily-3");
		system ("mv -f /etc/multiconf/$tmpdir/cron.midnight /etc/cron.midnight");
		system ("mv -f /etc/multiconf/$tmpdir/cron.weekly /etc/cron.weekly");
		system ("mv -f /etc/multiconf/$tmpdir/cron.fortnightly /etc/cron.fortnightly");
		system ("mv -f /etc/multiconf/$tmpdir/cron.ddclient /etc/cron.ddclient");
		system ("mv -f /etc/multiconf/$tmpdir/cron.monthly /etc/cron.monthly");
		system ("mv -f /etc/multiconf/$tmpdir/multiconf /var/chroot-squid/etc/multiconf");

		system ("mv -f /etc/multiconf/$tmpdir/certs /etc/certs");
		system ("mv -f /etc/multiconf/$tmpdir/ipsec.d /etc/ipsec.d");

		# Start: Niranjan added code to create quarantine-attachments.db
                # from quarantine-attachments.txt on Import Backup
                                                                                                                             
                system("chown qmailq:qmail /var/spool/qmailscan/quarantine-attachments.txt");
                system("/var/qmail/bin/qmail-scanner-queue.pl -g");
                system("chown qmailq:qmail /var/spool/qmailscan/quarantine-attachments.db");
                # End:
		

		if (-e "/etc/multiconf/$tmpdir")
		{
			system ("rm -rf /etc/multiconf/$tmpdir");
		}
		system ("rm -f /etc/multiconf/scripts/$temproute");

		system ("rm -f /etc/multiconf/scripts/$file1");
		system ("rm -f /etc/multiconf/scripts/$file2");
		system ("rm -f /etc/multiconf/scripts/$file3");

		system ("rm -f /etc/multiconf/timezone");
		system ("sync");
		system ("/etc/multiconf/scripts/CheckIntrusion update 1>/dev/null 2>/dev/null");
		#Unlock Aide
  	system ("/etc/multiconf/scripts/aide_dis delete dont_run_aide");

		print "1\n";
		exit;
	}
	if (-e "/etc/multiconf/$tmpdir")
	{
		system ("rm -rf /etc/multiconf/$tmpdir");
	}

	#Start timer if it is off
	check_surf_status;

	#Remove the old routes and add the new routes
	system ("/etc/multiconf/scripts/delallroutes $temproute 1>/dev/null 2>/dev/null");
	system ("rm -f /etc/multiconf/scripts/$temproute");

	system ("/etc/multiconf/scripts/iptables_stop");
	system ("/etc/multiconf/scripts/iptables_start");
	#system ("/sbin/iptables-restore </etc/multiconf/iptablerules");
	restorerules();
	system ("/etc/multiconf/scripts/interfaces delallalias $file1 $file2 $file3 1>/dev/null 2>/dev/null");
	system ("rm -f /etc/multiconf/scripts/$file1");
	system ("rm -f /etc/multiconf/scripts/$file2");
	system ("rm -f /etc/multiconf/scripts/$file3");

	open (TIMEZONE, "/etc/multiconf/timezone");
	$timezone = <TIMEZONE>;
	close (TIMEZONE);
	system ("/etc/multiconf/scripts/settings settimezone $timezone");
	system ("rm -f /etc/multiconf/timezone");

	# Start: Niranjan added code to create quarantine-attachments.db
        # from quarantine-attachments.txt on Import Backup
                                                                                                                          
        system("chown qmailq:qmail /var/spool/qmailscan/quarantine-attachments.txt");
        system("/var/qmail/bin/qmail-scanner-queue.pl -g");
        system("chown qmailq:qmail /var/spool/qmailscan/quarantine-attachments.db");
        # End:

	system ("/etc/init.d/network restart 1>/dev/null 2>/dev/null");	
	system ("/etc/multiconf/scripts/interfaces addallalias 1>/dev/null 2>/dev/null");
	system ("/usr/local/apache/ssl/certs/cert 1>/dev/null 2>/dev/null");

	open (PROCESSFILE, "/etc/multiconf/processlist") || die "Cannot open Process file\n";
	while (<PROCESSFILE>)
	{
		@splitvals = split (/ /,$_);
		$processname = $splitvals[0];
		if (($processname ne "httpd") && ($processname ne "iptables"))
		{
			system ("/etc/multiconf/scripts/restartproc $processname 1>/dev/null 2>/dev/null");
		}
	}
	close (PROCESSFILE);
	system ("/etc/multiconf/scripts/initroutes 1>/dev/null 2>/dev/null");

	open (HOSTFILE, "/etc/hosts");
	$_ = <HOSTFILE>;
	@splitvals = split (/ /,$_);
	close (HOSTFILE);
	$hostname = $splitvals[1];
	`hostname $hostname`;

	$virusstatus = `/etc/multiconf/scripts/virus_scan dispkav`;
	chomp ($virusstatus);
	`/etc/multiconf/scripts/changequeue virus $virusstatus`;

	if ($ARGV[1] eq "default")
	{
		`mkdir /home`;
		`mkdir /home/admin`;
		`mkdir /home/loginuser`;
		`mkdir /home/multiweb`;
	}
	`cp /etc/multiconf/bashfile /home/admin/.bash_profile`;
	`cp /etc/multiconf/bashrc /home/admin/.bashrc`;
	`cp /etc/multiconf/bashfile /home/loginuser/.bash_profile`;
	`cp /etc/multiconf/bashrc /home/loginuser/.bashrc`;
	`cp /etc/multiconf/bashfile /home/multiweb/.bash_profile`;
	`cp /etc/multiconf/bashrc /home/multiweb/.bashrc`;
	`/var/qmail/bin/maildirmake /home/admin/Maildir`;
	`chown -R admin:admin /home/admin`;
	`chown -R loginuser:loginuser /home/loginuser`;
	`chown -R multiweb:multiweb /home/multiweb`;

	$ethaddress = `/etc/multiconf/scripts/getethaddress eth0`;
	@splitvals = split (/:/,$ethaddress);
	$ethaddress = $splitvals[0];
	system ("/etc/multiconf/scripts/consoledisplay $ethaddress");
	system ("/etc/multiconf/scripts/consoledisplay $hostname");
	system ("/etc/multiconf/scripts/mrtgvals");

	system ("/etc/multiconf/scripts/CheckIntrusion update 1>/dev/null 2>/dev/null");
	system ("/etc/multiconf/scripts/restartproc httpd 1>/dev/null 2>/dev/null");
	#Unlock Aide
  system ("/etc/multiconf/scripts/aide_dis delete dont_run_aide");
	print "0\n";
}
elsif ($ID eq "importbkpfile")
{
	$bkpfile = $ARGV[1];

	if (-e "/etc/cron.fivemins/pppdbk")
	{
		system ("/etc/multiconf/scripts/ppp Status disable");
	}

	#Lock Aide
	system ("/etc/multiconf/scripts/aide_dis create dont_run_aide");
	$tempdir = `/etc/multiconf/scripts/gettempfile`;
	system ("mkdir /etc/multiconf/$tempdir");
	
	system ("mv /home/multiweb/$bkpfile /etc/multiconf/$tempdir/");

	#Copy the old routes file to a temporary file. This is to delete all
	#the routes and add new routes if the import was successful
	$temproute = `/etc/multiconf/scripts/gettempfile`;
	system ("cp -f /etc/multiconf/interface /etc/multiconf/scripts/$temproute");

	#Move the home, cron directories to a temporary directory. If the 
	#import fails, move them back. Otherwise, delete the temporary directory
	$tmpdir = `/etc/multiconf/scripts/gettempfile`;
	system ("mkdir /etc/multiconf/$tmpdir");
	system ("mv -f /home/ /etc/multiconf/$tmpdir/home");
	system ("mv -f /var/chroot-named/var/named/ /etc/multiconf/$tmpdir/named");
	system ("mv -f /etc/cron.minutely/ /etc/multiconf/$tmpdir/cron.minutely");
	system ("mv -f /etc/cron.twomins/ /etc/multiconf/$tmpdir/cron.twomins");
	if (-e "/etc/cron.threemins")
	{
		system ("mv -f /etc/cron.threemins/ /etc/multiconf/$tmpdir/cron.threemins");
	}
	system ("mv -f /etc/cron.fivemins/ /etc/multiconf/$tmpdir/cron.fivemins");
	if (-e "/etc/cron.sevenmins")
	{
		system ("mv -f /etc/cron.sevenmins/ /etc/multiconf/$tmpdir/cron.sevenmins");	
	}
	if (-e "/etc/cron.elevenmins")
	{
		system ("mv -f /etc/cron.elevenmins/ /etc/multiconf/$tmpdir/cron.elevenmins");
	}
	system ("mv -f /etc/cron.thirtymins/ /etc/multiconf/$tmpdir/cron.thirtymins");
	system ("mv -f /etc/cron.hourly/ /etc/multiconf/$tmpdir/cron.hourly");
	if (-e "/etc/cron.daily-1")
	{
		system ("mv -f /etc/cron.daily-1/ /etc/multiconf/$tmpdir/cron.daily-1");
	}
	if (-e "/etc/cron.daily-2")
	{
		system ("mv -f /etc/cron.daily-2/ /etc/multiconf/$tmpdir/cron.daily-2");
	}
	if (-e "/etc/cron.daily-3")
	{
		system ("mv -f /etc/cron.daily-3/ /etc/multiconf/$tmpdir/cron.daily-3");	
	}
	system ("mv -f /etc/cron.midnight/ /etc/multiconf/$tmpdir/cron.midnight");
	system ("mv -f /etc/cron.weekly/ /etc/multiconf/$tmpdir/cron.weekly");
	system ("mv -f /etc/cron.fortnightly/ /etc/multiconf/$tmpdir/cron.fortnightly");
	system ("mv -f /etc/cron.ddclient/ /etc/multiconf/$tmpdir/cron.ddclient");
	system ("mv -f /etc/cron.monthly/ /etc/multiconf/$tmpdir/cron.monthly");

	system ("mv -f /etc/certs/ /etc/multiconf/$tmpdir/certs");
	system ("mv -f /etc/ipsec.d/ /etc/multiconf/$tmpdir/ipsec.d");
	system ("mv -f /var/chroot-squid/etc/multiconf /etc/multiconf/$tmpdir/multiconf");

	system ("chown root:root /etc/multiconf/$tempdir/$bkpfile");

	chdir ("/");

	$cfbkp1 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /var/qmail/control/concurrencyincoming /etc/multiconf/scripts/$cfbkp1");
                                                                                                                             
        $cfbkp2 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /var/qmail/control/concurrencyremote /etc/multiconf/scripts/$cfbkp2");
                                                                                                                            
        $cfbkp3 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /etc/multiconf/backupfile /etc/multiconf/scripts/$cfbkp3");
                                                                                                                             
        $cfbkp4 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /var/qmail/bin/qmail-scanner-queue.pl /etc/multiconf/scripts/$cfbkp4");
                                                                                                                            
        $cfbkp5 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /etc/multiconf/bkupnumber /etc/multiconf/scripts/$cfbkp5");
                                                                                                                             
        $cfbkp6 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /etc/syslog-ng/syslog-ng.conf /etc/multiconf/scripts/$cfbkp6");
                                                                                                                             
        $cfbkp7 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /etc/syslog-ng/syslog-ng-remote.conf /etc/multiconf/scripts/$cfbkp7");
                                                                                                                             
        $cfbkp8 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /var/chroot-squid/usr/local/squid/etc/squid.conf /etc/multiconf/scripts/$cfbkp8");

	$cfbkp9 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /etc/mail/spamassassin/bayes_toks /etc/multiconf/scripts/$cfbkp9");

	$cfbkp10 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /etc/mail/spamassassin/bayes_seen /etc/multiconf/scripts/$cfbkp10");

	$cfbkp11 = `/etc/multiconf/scripts/gettempfile`;
        system ("cp -f /etc/multiconf/emailnotify /etc/multiconf/scripts/$cfbkp11");
	# *** Niranjan ***	

	system("unzip -oX /etc/multiconf/$tempdir/$bkpfile 2>/dev/null 1>/dev/null");

	if ($? != 0)
        {
                if (-e "/etc/multiconf/$tempdir")
                {
                        system("rm -rf /etc/multiconf/$tempdir");
                }
                system ("mv -f /etc/multiconf/$tmpdir/home /home/");
                system ("mv -f /etc/multiconf/$tmpdir/named /var/chroot-named/var/named");
                system ("mv -f /etc/multiconf/$tmpdir/cron.minutely /etc/cron.minutely");
                system ("mv -f /etc/multiconf/$tmpdir/cron.twomins /etc/cron.twomins");
		if (-e "/etc/multiconf/$tmpdir/cron.threemins")
		{
                	system ("mv -f /etc/multiconf/$tmpdir/cron.threemins /etc/cron.threemins");
		}
                system ("mv -f /etc/multiconf/$tmpdir/cron.fivemins /etc/cron.fivemins");
                if (-e "/etc/multiconf/$tmpdir/cron.sevenmins")
		{
			system ("mv -f /etc/multiconf/$tmpdir/cron.sevenmins /etc/cron.sevenmins");	
		}
		if (-e "/etc/multiconf/$tmpdir/cron.elevenmins")
		{
                	system ("mv -f /etc/multiconf/$tmpdir/cron.elevenmins /etc/cron.elevenmins");
		}
		system("mv -f /etc/multiconf/$tmpdir/cron.thirtymins /etc/cron.thirtymins");
                system ("mv -f /etc/multiconf/$tmpdir/cron.hourly /etc/cron.hourly");
                if (-e "/etc/multiconf/$tmpdir/cron.daily-1")
		{
			system ("mv -f /etc/multiconf/$tmpdir/cron.daily-1 /etc/cron.daily-1");
		}
		if (-e "/etc/multiconf/$tmpdir/cron.daily-2")
                {
                	system ("mv -f /etc/multiconf/$tmpdir/cron.daily-2 /etc/cron.daily-2");
		}
		if (-e "/etc/multiconf/$tmpdir/cron.daily-3")
                {
                	system ("mv -f /etc/multiconf/$tmpdir/cron.daily-3 /etc/cron.daily-3");
		}
                system ("mv -f /etc/multiconf/$tmpdir/cron.midnight /etc/cron.midnight");
                system ("mv -f /etc/multiconf/$tmpdir/cron.weekly /etc/cron.weekly");
                system ("mv -f /etc/multiconf/$tmpdir/cron.fortnightly /etc/cron.fortnightly");
                system ("mv -f /etc/multiconf/$tmpdir/cron.ddclient /etc/cron.ddclient");
                system ("mv -f /etc/multiconf/$tmpdir/cron.monthly /etc/cron.monthly");
                system ("mv -f /etc/multiconf/$tmpdir/multiconf /var/chroot-squid/etc/multiconf");
                                                                                                                             
                system ("mv -f /etc/multiconf/$tmpdir/certs /etc/certs");
                system ("mv -f /etc/multiconf/$tmpdir/ipsec.d /etc/ipsec.d");
                if (-e "/etc/multiconf/$tmpdir")
                {
                        system ("rm -rf /etc/multiconf/$tmpdir");
                }
		
                system ("rm -f /etc/multiconf/scripts/$cfbkp1");
                system ("rm -f /etc/multiconf/scripts/$cfbkp2");
                system ("rm -f /etc/multiconf/scripts/$cfbkp3");
                system ("rm -f /etc/multiconf/scripts/$cfbkp4");
                system ("rm -f /etc/multiconf/scripts/$cfbkp5");
                system ("rm -f /etc/multiconf/scripts/$cfbkp6");
                system ("rm -f /etc/multiconf/scripts/$cfbkp7");
                system ("rm -f /etc/multiconf/scripts/$cfbkp8");
                system ("rm -f /etc/multiconf/scripts/$cfbkp9");
                system ("rm -f /etc/multiconf/scripts/$cfbkp10");
                system ("rm -f /etc/multiconf/scripts/$cfbkp11");
                system ("rm -f /etc/multiconf/timezone");
                system ("sync");
								system ("/etc/multiconf/scripts/CheckIntrusion update 1>/dev/null 2>/dev/null");
								#Unlock Aide
							  system ("/etc/multiconf/scripts/aide_dis delete dont_run_aide");
                print "1\n";
                exit;
        }

	#Restore the IPtables rules.
	system ("/etc/multiconf/scripts/iptables_stop");
	system ("/etc/multiconf/scripts/iptables_start");
	#system ("/sbin/iptables-restore </etc/multiconf/iptablerules");
	restorerules();
	#Remove the old routes and add the new routes
	system ("/etc/multiconf/scripts/delallroutes $temproute 1>/dev/null 2>/dev/null");
	system ("rm -f /etc/multiconf/scripts/$temproute");

	#Stopping Daemons
	system("/etc/init.d/squid stop 1>/dev/null 2>/dev/null");
	system("/etc/init.d/syslog-ng stop 1>/dev/null 2>/dev/null");
	system("/etc/init.d/spamd stop 1>/dev/null 2>/dev/null");
	system("/etc/init.d/pop3spamd stop 1>/dev/null 2>/dev/null");
	system("/etc/init.d/pop3vscan stop 1>/dev/null 2>/dev/null");

	#Check for Cron Dirs and Create
	if(-e "/etc/multiconf/backupfile")
	{
		open(BKPFILE,"/etc/multiconf/backupfile");
		while(<BKPFILE>)
		{
			$filepresent = 0;
			if(/flashtemp/)
			{
				$filepresent = 1; 
				last;
			}
		}
		close(BKPFILE);
		if($filepresent == 0)
		{
			if(-e "/etc/multiconf/$tmpdir/cron.minutely/kernelrotate")
			{
				system("mv -f /etc/multiconf/$tmpdir/cron.minutely/kernelrotate /etc/cron.minutely/");
			}
			if(-e "/etc/cron.minutely/ddclient")
			{	
				open (CRONFILE, ">/etc/cron.minutely/ddclient");
	        	        print CRONFILE "#!/usr/bin/perl -w\n";
        	        	print CRONFILE "\@ddclient = \`ps -eo \"%y %p %a\" | grep -v grep | grep \"/etc/multiconf/scripts/ddclient update\"|tr -s \" \"|cut -d \" \" -f2\`\;\n";
	                	print CRONFILE "chomp(\@ddclient)\;\n";
		                print CRONFILE "if(\@ddclient < 1){\n";
        		        print CRONFILE "\`/etc/multiconf/scripts/ddclient update\`\;\n";
                		print CRONFILE "}\n";
		                close (CRONFILE);
        		        system ("chmod 755 /etc/cron.minutely/ddclient");

			}
			if(!(-e "/etc/cron.twomins"))
			{
				system ("mv -f /etc/multiconf/$tmpdir/cron.twomins /etc/cron.twomins");
			}
			if(!(-e "/etc/cron.threemins"))
			{
				mkdir("/etc/cron.threemins");
				system ("mv -f /etc/cron.minutely/checksurfmem /etc/cron.threemins/");
			}
			if(-e "/etc/cron.fivemins")
			{
				if(-e "/etc/cron.tenmins/check_diskspace")
				{
					system("rm -f /etc/cron.tenmins/check_diskspace");
					system ("mv -f /etc/multiconf/$tmpdir/cron.fivemins/check_diskspace /etc/cron.fivemins/");
				}
				system ("mv -f /etc/multiconf/$tmpdir/cron.fivemins/monitor /etc/cron.fivemins/");
			}
			if(!(-e "/etc/cron.sevenmins"))
			{
				mkdir("/etc/cron.sevenmins");
				system("mv -f /etc/multiconf/$tmpdir/cron.sevenmins/flashqmailconfig /etc/cron.sevenmins/");
				system ("mv -f /etc/multiconf/$tmpdir/cron.sevenmins/mrtg /etc/cron.sevenmins/");
				system ("mv -f /etc/multiconf/$tmpdir/cron.sevenmins/bayesian /etc/cron.sevenmins/");
				if (-e "/etc/cron.fivemins/mrtg")
				{
					system ("rm -f /etc/cron.fivemins/mrtg");
				}
				if (-e "/etc/cron.fivemins/bayesian")
                		{
	                        	system ("rm -f /etc/cron.fivemins/bayesian");
		                }
			}
			if(!(-e "/etc/cron.elevenmins"))
			{
				mkdir("/etc/cron.elevenmins");
				if (-e "/etc/cron.tenmins")
				{
					system ("mv -f /etc/cron.tenmins/* /etc/cron.elevenmins/");
					system ("rm -rf /etc/cron.tenmins");
				}
			}
			if(-e "/etc/cron.elevenmins/virus_quar")
			{
				open(VIRFILE, ">/etc/cron.elevenmins/virus_quar");
				print VIRFILE "#!/usr/bin/perl -w\n";
				print VIRFILE "\@virus = \`ps -eo \"%y %p %a\" | grep -v grep | grep \"/etc/multiconf/scripts/virus_quar\"|tr -s \" \"|cut -d \" \" -f2\`\;\n";
				print VIRFILE "chomp(\@virus)\;\n";
				print VIRFILE "if(\@virus < 1){\n";
				print VIRFILE "         \`/etc/multiconf/scripts/virus_quar\`\;\n";
				print VIRFILE "}\n";
				close(VIRFILE);
				system("chmod 700 /etc/cron.elevenmins/virus_quar");	
			}
			if(!(-e "/etc/cron.thirtymins"))
			{
				mkdir("/etc/cron.thirtymins");
				if(-e "/etc/cron.hourly/logrotate")
				{	
					system("mv -f /etc/cron.hourly/logrotate /etc/cron.thirtymins/");
				}
			}
			if(-e "/etc/cron.hourly")
			{
				system("mv -f /etc/multiconf/$tmpdir/cron.hourly/00sarg /etc/cron.hourly/");
			}
			if(!(-e "/etc/cron.daily-1"))
			{
				mkdir("/etc/cron.daily-1");
			}
			if(!(-e "/etc/cron.daily-2"))
			{
				mkdir("/etc/cron.daily-2");
			}
			if(!(-e "/etc/cron.daily-2/diskquota"))
			{
				system("mv -f /etc/multiconf/$tmpdir/cron.daily-2/diskquota /etc/cron.daily-2/");
			}
			if(!(-e "/etc/cron.daily-3"))
			{
				mkdir("/etc/cron.daily-3");
			}
			if (-e "/etc/cron.daily")
			{
				if (-e "/etc/cron.daily/accounting")
				{
					system ("mv -f /etc/cron.daily/accounting /etc/cron.daily-1/");
				}
				if (-e "/etc/cron.daily/bkup")
	        	        {
        	        	        system ("mv -f /etc/cron.daily/bkup /etc/cron.daily-1/");
	        	        }
				if (-e "/etc/cron.daily/catupdate")
	                	{
        	                	system ("mv -f /etc/cron.daily/catupdate /etc/cron.daily-3/");
	        	        }
				if (-e "/etc/cron.daily/aide")
	                	{
        	                	system ("mv -f /etc/cron.daily/aide /etc/cron.daily-1/");
	        	        }
				if (-e "/etc/cron.daily/antivirusupdate")
	                	{
        	                	system ("mv -f /etc/cron.daily/antivirusupdate /etc/cron.daily-2/");
	        	        }
				system ("mv -f /etc/cron.daily/* /etc/cron.daily-1/");
				system ("rm -rf /etc/cron.daily");
			}
			if(-e "/etc/cron.midnight")
			{
				system("mv -f /etc/multiconf/$tmpdir/cron.midnight/logrotate /etc/cron.midnight/");
			}
			else
			{	
				system ("mv -f /etc/multiconf/$tmpdir/cron.midnight /etc/cron.midnight");
			}

			if(-e "/etc/mail/spamassassin/local.cf")
			{
				open(LOCAL, "/etc/mail/spamassassin/local.cf");
				$tempfile = `/etc/multiconf/scripts/gettempfile`;
				open(TEMPCF, ">/etc/multiconf/scripts/$tempfile");
				while(<LOCAL>)
				{
					if(/bayes_expiry_max_db_size/)
				        {
                                		@splitvals = split(/ /, $_);
		                                chomp($splitvals[1]);
                		                if($splitvals[1] > 500000)
                                		{
		                                        print TEMPCF "bayes_expiry_max_db_size 500000\n";
                		                }
                                		else
		                                {
                		                        print TEMPCF $_;
                                		}
		                        }
                		        elsif(/bayes_min_ham_num/)
		                        {
                		                @splitvals = split(/ /, $_);
                                		chomp($splitvals[1]);
		                                if($splitvals[1] > 500000)
                		                {
                                		        print TEMPCF "bayes_min_ham_num 500000\n";
		                                }
                		                else
                                		{
		                                        print TEMPCF $_;
                		                }
		                        }
                		        elsif(/bayes_min_spam_num/)
		                        {
                		                @splitvals = split(/ /, $_);
                                		chomp($splitvals[1]);
		                                if($splitvals[1] > 500000)
                		                {
                                		        print TEMPCF "bayes_min_spam_num 500000\n";
		                                }
                		                else
						{
		                                        print TEMPCF $_;
                		                }
		                        }
                		        else
		                        {
                		                print TEMPCF $_;
			                }

		                }
                		close(TEMPCF);
		                close(LOCAL);
                		system("mv -f /etc/multiconf/scripts/$tempfile /etc/mail/spamassassin/local.cf");
		                system("chmod 0644 /etc/mail/spamassassin/local.cf");
			}
			#Check For Accounting
			if(-e "/etc/ipac-ng/rules.conf")
			{	
				my $i = 0;
				open(IPAC, "/etc/ipac-ng/rules.conf");
				while(<IPAC>)
				{
					if($i < 20)
					{
						if(/incoming and /)
						{
							my @splitvals = split (/ /, $_);
							$ipaddress[$i] = $splitvals[5];
							chomp($ipaddress[$i]);
							$i++;
						}
					}
					else
					{
						last;
					}
					
				}
				close(IPAC);
				if(($i > 0) && ($i <= 20))
				{
					open(MRTG, "/etc/mrtg.cfg");
					my $tempfile = `/etc/multiconf/scripts/gettempfile`;
					open(TEMP, ">/etc/multiconf/scripts/$tempfile");
					while(<MRTG>)
					{
						if(/ipacng Stuff/)
						{
							print TEMP $_;
							last;
						}
						else
						{
							print TEMP $_;
						}
					}
					close(TEMP);
					close(MRTG);
					system("mv -f /etc/multiconf/scripts/$tempfile /etc/mrtg.cfg");
					system("chmod 644 /etc/mrtg.cfg");

					chdir ("/usr/local/apache/htdocs/mrtg");
					my @ip_arr = `ls *.rrd`;
					chomp(@ip_arr);
					for(my $cou = 0, $cou < @ip_arr, $cou++)
					{
						if($ip_arr[$cou] =~ /^[0-9]+/)
						{	
							system("rm -f /usr/local/apache/htdocs/mrtg/$ip_arr[$cou]");
						}
					}

					system("echo > /etc/ipac-ng/rules.conf");
					#Flushing the ipac chains
					system("iptables -F ipac~o");
					system("iptables -F ipac~fi");
					system("iptables -F ipac~fo");
					system("iptables -F ipac~i");

					#Adding ipac rules
					for(my $j = 0; $j < $i; $j++)
					{
						system("/etc/multiconf/scripts/ipac addip $ipaddress[$j]");
					}
				}
				else
				{
					chdir ("/usr/local/apache/htdocs/mrtg");
					my @ip_arr = `ls *.rrd`;
					chomp(@ip_arr);
					for(my $cou = 0, $cou < @ip_arr, $cou++)
					{
						if($ip_arr[$cou] =~ /^[0-9]+/)
						{	
							system("rm -f /usr/local/apache/htdocs/mrtg/$ip_arr[$cou]");
						}
					}
				}
			}
			system("rm -f /usr/local/apache/htdocs/mrtg/*.png");
			system("/usr/local/sbin/ipac-2-mrtg");

			$http_present = 0;
			open (EMAIL,"/etc/multiconf/emailnotify");
			while(<EMAIL>)
			{
				if(/HTTP Access Deny Report/)
				{
					$http_present = 1;
				}
			}
			close(EMAIL);
			if($http_present == 0)
			{
				open(EMAIL, ">>/etc/multiconf/emailnotify");
				print EMAIL "HTTP Access Deny Reports=0\n";
				close(EMAIL);
			}

			#Senthil 20051006 - Restoring the Backupfile
			my $line_found = 0;
			open(BKPPREV, "/etc/multiconf/backupfile");
			open(BKPCUR, "/etc/multiconf/scripts/$cfbkp3");
			$tempfile = `/etc/multiconf/scripts/gettempfile`;
			open(TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
			while(<BKPPREV>)
			{
				$prev_line = $_;
				chomp($_);
				seek(BKPCUR, 0, 0);
				while(<BKPCUR>)
				{
					$cur_line = $_;
					chomp($_);
					if($prev_line eq $cur_line)
					{
						$line_found = 1;
						last;
					}
				}
				if($line_found == 0)
				{
					print TEMPFILE "$prev_line\n";
				}
				$line_found = 0;
			}
			close(TEMPFILE);
			close(BKPCUR);
			close(BKPPREV);
			$tempfile1 = `/etc/multiconf/scripts/gettempfile`;
		        `cat /etc/multiconf/scripts/$cfbkp3 /etc/multiconf/scripts/$tempfile > /etc/multiconf/scripts/$tempfile1`;
		        `mv -f /etc/multiconf/scripts/$tempfile1 /etc/multiconf/scripts/$cfbkp3`;
		        `rm -f /etc/multiconf/scripts/$tempfile`;
			system ("cp -f /etc/multiconf/scripts/$cfbkp3 /etc/multiconf/backupfile");

		}
	}
	# Start: Niranjan added code to create quarantine-attachments.db
        # from quarantine-attachments.txt on Import Backup
                                                                                                                            
        system("chown qmailq:qmail /var/spool/qmailscan/quarantine-attachments.txt");
        system("/var/qmail/bin/qmail-scanner-queue.pl -g");
        system("chown qmailq:qmail /var/spool/qmailscan/quarantine-attachments.db");
        # End:

	 	system ("cp -f /etc/multiconf/scripts/$cfbkp1 /var/qmail/control/concurrencyincoming");
                                                                                                                             
                system ("cp -f /etc/multiconf/scripts/$cfbkp2 /var/qmail/control/concurrencyremote");

                $queue = "";
                $hostname = "";
                $quarcc = "";
                $debug = "";
                                                                                                                             
                open (QUEUEFILE, "/var/qmail/bin/qmail-scanner-queue.pl");
                while (<QUEUEFILE>)
                {
                        if (/^my \$qmailqueue/)
                        {
                                chomp ($_);
                                $queue = $_;
                        }
                        elsif (/^my \$hostname/)
                        {
                                chomp ($_);
                                $hostname = $_;
                        }
                        elsif (/^my \$QUARANTINE_CC/)
                        {
                                chomp ($_);
                                $quarcc = $_;
                        }
                        elsif (/\$DEBUG=/)
                        {
                                chomp ($_);
                                $debug = $_;
                        }
                }
		close (QUEUEFILE);
                                                                                                                             
                $tempfilename = `/etc/multiconf/scripts/gettempfile`;
                open (TEMP, ">/etc/multiconf/scripts/$tempfilename");
                open (CFQUEUEFILE, "/etc/multiconf/scripts/$cfbkp4");
                while (<CFQUEUEFILE>)
                {
                        if (/^my \$qmailqueue/)
                        {
                                print TEMP "$queue\n";
                        }
                        elsif (/^my \$hostname/)
                        {
                                print TEMP "$hostname\n";
                        }
                        elsif (/^my \$QUARANTINE_CC/)
                        {
                                print TEMP "$quarcc\n";
                        }
                        elsif (/\$DEBUG=/)
                        {
                                print TEMP "$debug\n";
                        }
                        else
                        {
                                print TEMP $_;
                        }
                }
                close (CFQUEUEFILE);
                close (TEMP);
                                                                                                                             
                system ("mv -f /etc/multiconf/scripts/$tempfilename /etc/multiconf/scripts/$cfbkp4");
                                                                                                                             
                system ("cp -f /etc/multiconf/scripts/$cfbkp4 /var/qmail/bin/qmail-scanner-queue.pl");
                system ("chown root:qmail /var/qmail/bin/qmail-scanner-queue.pl");
                system ("chmod 755 /var/qmail/bin/qmail-scanner-queue.pl");
                
		# Niranjan: Start: For Enabling / Disabling SMTP Debug Messages                                                          
		if ($debug =~ /1/)
		{
			system ("/etc/multiconf/scripts/syslogcontrol SET 'SMTP Debug Messages' 1");
		}
	 	else
		{
			system ("/etc/multiconf/scripts/syslogcontrol SET 'SMTP Debug Messages' 0");
		}
		# End                

		$maxno = 0;
		open (BKUPFILE, "/etc/multiconf/bkupnumber");
                while (<BKUPFILE>)
                {
                        if (/MAXNO/)
                        {
                                @values=split(/ /,$_);
                                chomp($values[1]);
                                $maxno = $values[1];
                        }
                }
                close (BKUPFILE);
                                                                                                                             
                if ($maxno > 3)
                {
                	$maxno = 1;
	                open (BKUPNO, "/etc/multiconf/bkupnumber");
        	        $tempfile = `/etc/multiconf/scripts/gettempfile`;
                	open (TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
	                while (<BKUPNO>)
        	        {
                	        if (/MAXNO/)
                        	{
	                                print TEMPFILE "MAXNO $maxno\n";
        	                }
                	        else
                        	{
                                	print TEMPFILE $_;
	                        }
        	        }
                	close (BKUPNO);
	                close (TEMPFILE);
        	        system ("mv -f /etc/multiconf/scripts/$tempfile /etc/multiconf/scripts/$cfbkp5");
                	system ("cp -f /etc/multiconf/scripts/$cfbkp5 /etc/multiconf/bkupnumber");
                }
		                                                                                                             
                $found = 0;
                open (SYSLOG, "/etc/syslog-ng/syslog-ng.conf");
		while (<SYSLOG>)
                {
                        if (/Pluto/)
                        {
                                $found = 1;
                                last;
                        }
                }
                close (SYSLOG);
                if ($found == 0)
                {
                        system ("cp -f /etc/multiconf/scripts/$cfbkp6 /etc/syslog-ng/syslog-ng.conf");
                }
                                                                                                                             
                $found = 0;
                open (RSYSLOG, "/etc/syslog-ng/syslog-ng-remote.conf");
                while (<RSYSLOG>)
                {
                        if (/Pluto/)
                        {
                                $found = 1;
                        }
												if (/^destination remote_syslog_ng_server/)
                        {
                                $remote_server_ip = <RSYSLOG>;
                        }
                }
                close (RSYSLOG);
                if ($found == 0)
                {
												$tempfile = `/etc/multiconf/scripts/gettempfile`;
                        open (TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
                        open (CONFFILE, "/etc/multiconf/scripts/$cfbkp7");
                        while (<CONFFILE>)
                        {
                                if (/^destination remote_syslog_ng_server/)
                                {
                                        print TEMPFILE $_;
                                        # Read the next line and update the line with previous configuration
                                        <CONFFILE>;
                                        print TEMPFILE $remote_server_ip;
                                }
                                else
                                {
                                        print TEMPFILE $_;
                                }
                        }
                        close (TEMPFILE);
                        close (CONFFILE);
                        system ("mv -f /etc/multiconf/scripts/$tempfile /etc/multiconf/scripts/$cfbkp7");
                        system ("cp -f /etc/multiconf/scripts/$cfbkp7 /etc/syslog-ng/syslog-ng-remote.conf");
                }

								$ipsecstatus = `/etc/multiconf/scripts/ipsec IPSecdebug_get`;
								chomp ($ipsecstatus);
								print $ipsecstatus;

								$ikestatus = `/etc/multiconf/scripts/ipsec IKEdebug_get`;
								chomp ($ikestatus);
								print $ikestatus;

								if ($ipsecstatus == 1)
								{
								  `/etc/multiconf/scripts/syslogcontrol SET 'IPSec Debug Messages' 1`;
								}
								else
								{
								  `/etc/multiconf/scripts/syslogcontrol SET 'IPSec Debug Messages' 0`;
								}
								if ($ikestatus == 1)
								{
								  `/etc/multiconf/scripts/syslogcontrol SET 'IKE Debug Messages' 1`;
								}
								else
								{
								  `/etc/multiconf/scripts/syslogcontrol SET 'IKE Debug Messages' 0`;
								}
								$no_of_enabled_connections = 0;
                                                                open (CONNECTIONS, "/etc/multiconf/connections");
                                                                while (<CONNECTIONS>)
                                                                {
                                                                        chomp ($_);
                                                                        @connections = split (/:/, $_);
                                                                        if ($connections[5] eq "enable")
                                                                        {
                                                                                $no_of_enabled_connections++;
                                                                        }
                                                                }
                                                                close (CONNECTIONS);
                                                                if ($no_of_enabled_connections > 5)
                                                                {
                                                                        `/etc/multiconf/scripts/ipsec IPSecdebug_set disable`;
                                                                        `/etc/multiconf/scripts/ipsec IKEdebug_set disable`;
                                                                }


								$pptpstatus = `/etc/multiconf/scripts/getpptp debug`;
								chomp ($pptpstatus);
								print $pptpstatus;

								if ($pptpstatus eq "enabled")
								{
								  `/etc/multiconf/scripts/syslogcontrol SET 'PPTP Debug Messages' 1`;
								}
								else
								{
								  `/etc/multiconf/scripts/syslogcontrol SET 'PPTP Debug Messages' 0`;
								}


								#Check if /etc/multiconf/iptables_logconf exists
								$filename = "/etc/multiconf/iptables_logconf";
								$syncstring = "sync(128)";
								if (-e $filename)
								{
								  open (LOGCONF, $filename);
					        while (<LOGCONF>)
					        {
					          if (/1/)
          		      {
              		    $syncstring = "sync(0)";
		                }
								  }
					        close (LOGCONF);
		

    					    open (SYSLOG, "/etc/syslog-ng/syslog-ng.conf");
					        $tempfile = `/etc/multiconf/scripts/gettempfile`;
					        open (TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
					        while (<SYSLOG>)
					        {
          					if (/sync/)
		                {
    		              print TEMPFILE "options { $syncstring;\n";
        		        }
            		    else
									  {
		                  print TEMPFILE $_;
    		            }
								  }
					        close (TEMPFILE);
					        close (SYSLOG);
				        system ("mv -f /etc/multiconf/scripts/$tempfile /etc/syslog-ng/syslog-ng.conf");
							}

                                                                                                                             
                $tempfile = `/etc/multiconf/scripts/gettempfile`;
                open (TEMPSQUID, ">/etc/multiconf/scripts/$tempfile");
                open (SQUID, "/var/chroot-squid/usr/local/squid/etc/squid.conf");
                while (<SQUID>)
                {
                        if (/cache_dir ufs \/usr\/local\/squid\/cache/)
                        {
                                print TEMPSQUID "cache_dir ufs /usr/local/squid/cache 1 1 1\n";
												}
                        elsif (/acl QUERY/)
                        {
                                print TEMPSQUID "acl QUERY urlpath_regex http www cgi-bin \\?\n";
                        }
                        elsif (/cache_mem 8/)
                        {
                                print TEMPSQUID "cache_mem 0 KB\n";
                        }
												elsif (/cache_log \/usr\/local\/squid\/logs/)
												{
														print TEMPSQUID "#$_";
														print TEMPSQUID "cache_log /dev/null\n";
												}
												elsif(/cache_log \/dev\/null/)
												{
														next;
												}
                        else
                        {
                                print TEMPSQUID $_;
                        }
                }
                close (SQUID);
                close (TEMPSQUID);
                system ("mv -f /etc/multiconf/scripts/$tempfile /var/chroot-squid/usr/local/squid/etc/squid.conf");
                                                                                                                             
                system ("rm -f /etc/multiconf/scripts/$cfbkp1");
                system ("rm -f /etc/multiconf/scripts/$cfbkp2");
                system ("rm -f /etc/multiconf/scripts/$cfbkp3");
                system ("rm -f /etc/multiconf/scripts/$cfbkp4");
                system ("rm -f /etc/multiconf/scripts/$cfbkp5");
                system ("rm -f /etc/multiconf/scripts/$cfbkp6");
                system ("rm -f /etc/multiconf/scripts/$cfbkp7");
                system ("rm -f /etc/multiconf/scripts/$cfbkp8");
                system ("rm -f /etc/multiconf/scripts/$cfbkp11");
	
		system ("/etc/multiconf/scripts/spam bayesiantokens");
		
		if (-e "/var/qmail/control/bayesinfo")
	        {
                	open (BAYESTOKENS, "/var/qmail/control/bayesinfo");
	                while (<BAYESTOKENS>)
        	        {
                	        $spammails  = $_;
                        	$hammails   = <BAYESTOKENS>;
	                        $totalwords = <BAYESTOKENS>;
        	        }
                	close (BAYESTOKENS);
			chomp ($spammails);
			chomp ($hammails);	
	                chomp ($totalwords);
        	        if ($totalwords eq "0")
                	{
                        	print "Adaptive Message Filtering not yet learnt any words from the Inbound Mails\n";
	                }
        	        elsif ($totalwords eq "")
                	{
                        	print "Adaptive Message Filtering not yet learnt any words from the Inbound Mails\n";
	                }
        	        elsif (($totalwords >= 500000) || ($spammails >= 500000) || ($hammails >= 500000))
			{
				system ("cp -f /etc/multiconf/scripts/$cfbkp9 /etc/mail/spamassassin/bayes_toks");
				system("chmod 0666 /etc/mail/spamassassin/bayes_toks");
				system ("cp -f /etc/multiconf/scripts/$cfbkp10 /etc/mail/spamassassin/bayes_seen"); 
				system("chmod 0666 /etc/mail/spamassassin/bayes_seen");
                	}
        	}
		system ("rm -f /etc/multiconf/scripts/$cfbkp9");
                system ("rm -f /etc/multiconf/scripts/$cfbkp10");

		open(MRPFILE, "/etc/inittab");
		$tempfile = `/etc/multiconf/scripts/gettempfile`;
		open (TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
		while(<MRPFILE>)
		{
			if(/MRP/)
			{
				print TEMPFILE "#MRP:12345:respawn:/usr/sbin/memoryresident 120 0\n";
			}
			else
			{
				print TEMPFILE $_;
			}
		}
		close(TEMPFILE);
		close(MRPFILE);
		system("mv -f /etc/multiconf/scripts/$tempfile /etc/inittab");
		system("chmod 644 /etc/inittab");
	
		if(-e "/etc/multiconf/schedule")
		{
			my @splitvals;
			my $fqb;
			my $fql;
			my $fqq;
			my $fbm;
			open(LOGFILE, "/etc/multiconf/schedule");
			while(<LOGFILE>)
			{
				if(/flashqmailbounce/)
				{
					@splitvals = split(/ /, $_);
					$fqb = $splitvals[1];
					chomp($fqb);
					if(!(-e "/etc/cron.$fqb/cronflashqmailbounce"))
					{
						system("mv -f /etc/multiconf/$tmpdir/cron.$fqb/cronflashqmailbounce /etc/cron.$fqb/");
					}

				}
				elsif(/flashbouncemails/)
				{
					@splitvals = split(/ /, $_);
					$fbm = $splitvals[1];
					chomp($fbm);
					if(!(-e "/etc/cron.$fbm/cronflashbouncemails"))
					{
						system("mv -f /etc/multiconf/$tmpdir/cron.$fbm/cronflashbouncemails /etc/cron.$fbm/");
					}
				}
				elsif(/flashqmaillog/)
				{
					@splitvals = split(/ /, $_);
					$fql = $splitvals[1];
					chomp($fql);
					if(!(-e "/etc/cron.$fql/cronflashqmaillog"))
					{
						system("mv -f /etc/multiconf/$tmpdir/cron.$fql/cronflashqmaillog /etc/cron.$fql/");
					}
				}
				elsif(/flashdelquarantine/)
				{
					@splitvals = split(/ /, $_);
					$fqq = $splitvals[1];
					chomp($fqq);
					if(!(-e "/etc/cron.$fqq/cronflashdelquarantine"))
					{
						system("mv -f /etc/multiconf/$tmpdir/cron.$fqq/cronflashdelquarantine /etc/cron.$fqq/");
					}
				}
			}
			close(LOGFILE);			
		}
		
	# *** Niranjan ***

	if (-e "/etc/multiconf/$tempdir")
	{
		system("rm -rf /etc/multiconf/$tempdir");
	}
	if (-e "/etc/multiconf/$tmpdir")
	{
		system("rm -rf /etc/multiconf/$tmpdir");
	}

	#Start timer if it is off
	check_surf_status;


	open (TIMEZONE, "/etc/multiconf/timezone");
	$timezone = <TIMEZONE>;
	close (TIMEZONE);
	system ("/etc/multiconf/scripts/settings settimezone $timezone");
	system ("rm -f /etc/multiconf/timezone");

	system ("/etc/multiconf/scripts/interfaces delallalias $file1 $file2 $file3 1>/dev/null 2>/dev/null");
	system ("rm -f /etc/multiconf/scripts/$file1");
	system ("rm -f /etc/multiconf/scripts/$file2");
	system ("rm -f /etc/multiconf/scripts/$file3");

	#Starting Daemons
	system("/etc/init.d/squid start 1>/dev/null 2>/dev/null");
	system("/etc/init.d/syslog-ng start 1>/dev/null 2>/dev/null");
	system("/etc/init.d/spamd start 1>/dev/null 2>/dev/null");
	system("/etc/init.d/pop3spamd start 1>/dev/null 2>/dev/null");
	system("/etc/init.d/pop3vscan start 1>/dev/null 2>/dev/null");
	system("/etc/init.d/sshd restart 1>/dev/null 2>/dev/null");
	system ("/etc/init.d/network restart 1>/dev/null 2>/dev/null");	
	system ("/etc/multiconf/scripts/interfaces addallalias 1>/dev/null 2>/dev/null");
	system ("/usr/local/apache/ssl/certs/cert 1>/dev/null 2>/dev/null");

	open (PROCESSFILE, "/etc/multiconf/processlist") || die "Cannot open Process file\n";
	while (<PROCESSFILE>)
	{
		@splitvals = split (/ /,$_);
		$processname = $splitvals[0];
		if (($processname ne "httpd") && ($processname ne "iptables"))
		{
			system ("/etc/multiconf/scripts/restartproc $processname 1>/dev/null 2>/dev/null");
		}
	}
	close (PROCESSFILE);

	system ("/etc/multiconf/scripts/initroutes 1>/dev/null 2>/dev/null");

	open (HOSTFILE, "/etc/hosts");
	$_ = <HOSTFILE>;
	@splitvals = split (/ /,$_);
	close (HOSTFILE);
	$hostname = $splitvals[1];
	`hostname $hostname`;

	$virusstatus = `/etc/multiconf/scripts/virus_scan dispkav`;
	chomp ($virusstatus);
	`/etc/multiconf/scripts/changequeue virus $virusstatus`;

	`cp /etc/multiconf/bashfile /home/admin/.bash_profile`;
	`cp /etc/multiconf/bashrc /home/admin/.bashrc`;
	`cp /etc/multiconf/bashfile /home/loginuser/.bash_profile`;
	`cp /etc/multiconf/bashrc /home/loginuser/.bashrc`;
	`cp /etc/multiconf/bashfile /home/multiweb/.bash_profile`;
	`cp /etc/multiconf/bashrc /home/multiweb/.bashrc`;
	`/var/qmail/bin/maildirmake /home/admin/Maildir`;
	`chown -R admin:admin /home/admin`;
	`chown -R loginuser:loginuser /home/loginuser`;
	`chown -R multiweb:multiweb /home/multiweb`;

	$ethaddress = `/etc/multiconf/scripts/getethaddress eth0`;
	@splitvals = split (/:/,$ethaddress);
	$ethaddress = $splitvals[0];
	system ("/etc/multiconf/scripts/consoledisplay $ethaddress");
	system ("/etc/multiconf/scripts/consoledisplay $hostname");
	system ("/etc/multiconf/scripts/mrtgvals");
	system ("/etc/multiconf/scripts/CheckIntrusion update 1>/dev/null 2>/dev/null");
	system ("/etc/multiconf/scripts/restartproc httpd 1>/dev/null 2>/dev/null");
	#Unlock Aide
  system ("/etc/multiconf/scripts/aide_dis delete dont_run_aide");

	print "0\n";
}
elsif ($ID eq "status")
{
	$status = $ARGV[1];
	open (BKUPNO, "/etc/multiconf/bkupnumber");
	$tempfile = `/etc/multiconf/scripts/gettempfile`;
	open (TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
	while (<BKUPNO>)
	{
		if (/STATUS/)
		{
			print TEMPFILE "STATUS $status\n";
		}
		else
		{
			print TEMPFILE $_;
		}
	}
	close (BKUPNO);
	close (TEMPFILE);
	system ("mv /etc/multiconf/scripts/$tempfile /etc/multiconf/bkupnumber");
	if ($status eq "enable")
	{
		open (BKUPNO, "/etc/multiconf/bkupnumber");
		while (<BKUPNO>)
		{
			if (/BKUPTIME/)
			{
				@values=split(/ /,$_);
				chomp($values[1]);
				$time = $values[1];
			}
		}
		close (BKUPNO);
		system("rm -f /etc/cron.daily-1/bkup");
		system("rm -f /etc/cron.weekly/bkup");
		system("rm -f /etc/cron.monthly/bkup");
		if ($time eq "Daily")
		{
			system("cp /etc/multiconf/scripts/bkup /etc/cron.daily-1");
		}
		elsif ($time eq "Weekly")
		{
			system("cp /etc/multiconf/scripts/bkup /etc/cron.weekly");
		}
		elsif ($time eq "Monthly")
		{
			system("cp /etc/multiconf/scripts/bkup /etc/cron.monthly");
		}
	}
	elsif ($status eq "disable")
	{
		if (-e "/etc/cron.daily-1/bkup")
		{
			system ("rm -f /etc/cron.daily-1/bkup");
		}
		elsif (-e "/etc/cron.weekly/bkup")
		{
			system ("rm -f /etc/cron.weekly/bkup");
		}
		elsif (-e "/etc/cron.monthly/bkup")
		{
			system ("rm -f /etc/cron.monthly/bkup");
		}
	}
}
elsif ($ID eq "dispstatus")
{
	open (BKUPNO, "/etc/multiconf/bkupnumber");
	while (<BKUPNO>)
	{
		if (/STATUS/)
		{
			@values=split(/ /,$_);
			chomp($values[1]);
			$status = $values[1];
		}
	}
	close (BKUPNO);
	print $status;
}
# Bayesian code starts 
elsif ($ID eq "dispstatus_bayesian")
{
	$bayes_status = 0;
        open (BKUPNO, "/etc/multiconf/backupfile");
        while (<BKUPNO>)
        {
                if (/bayes_/)
                {
                        $bayes_status = 1;
			last;
                }
                else
                {
                        $bayes_status = 0;
                }
        }
        close (BKUPNO);
	print $bayes_status."\n";
}
# Bayesian code ends 

elsif ($ID eq "bkptime")
{
#	$frequency = $ARGV[1];

# Bayesian code starts 
	$present = 0;	
	if ($ARGV[2] eq "1")
	{
		open (BAYES, "/etc/multiconf/backupfile");
		while (<BAYES>)
		{
			if (/bayes_/)
			{
				$present = 1;	
				last;
			}
		}
		close (BAYES);
		if ($present == 0)
		{
			$tempfile = `/etc/multiconf/scripts/gettempfile`;
			$tempfile1 = `/etc/multiconf/scripts/gettempfile`;
			open (TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
			print TEMPFILE "/etc/mail/spamassassin/bayes_toks\n";
			print TEMPFILE "/etc/mail/spamassassin/bayes_seen\n";
			print TEMPFILE "/etc/mail/spamassassin/bayes_journal\n";
			print TEMPFILE "/var/qmail/control/bayesinfo";	
			close (TEMPFILE);
			`cat /etc/multiconf/backupfile /etc/multiconf/scripts/$tempfile > /etc/multiconf/scripts/$tempfile1`;
			`mv -f /etc/multiconf/scripts/$tempfile1 /etc/multiconf/backupfile`;
			`rm -f /etc/multiconf/scripts/$tempfile`;
		}
	}
	else
	{
		open (BAYES, "/etc/multiconf/backupfile");		
		$tempfile = `/etc/multiconf/scripts/gettempfile`;
		open (TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
		while (<BAYES>)
		{
			if (/bayes_/)
			{
				# Bayesian backup is disabled.
			}
			elsif (/bayesinfo/)
			{
				# Bypass Bayesinfo.
			}
			else
			{
				print TEMPFILE $_;
			}	
		}
		close (TEMPFILE);
		close (BAYES);
		`mv -f /etc/multiconf/scripts/$tempfile /etc/multiconf/backupfile`;
	}
# Bayesian code ends 

	open (BKUPNO, "/etc/multiconf/bkupnumber");
	$tempfile = `/etc/multiconf/scripts/gettempfile`;
	open (TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
	while (<BKUPNO>)
	{
		if (/BKUPTIME/)
		{
			print TEMPFILE "BKUPTIME $ARGV[1]\n";
		}
		else
		{
			print TEMPFILE $_;
		}
	}
	close (BKUPNO);
	close (TEMPFILE);
	system ("mv -f /etc/multiconf/scripts/$tempfile /etc/multiconf/bkupnumber");

	open (BKUPNO, "/etc/multiconf/bkupnumber");
	while (<BKUPNO>)
	{
		if (/BKUPTIME/)
		{
			@values=split(/ /,$_);
			chomp($values[1]);
			$time = $values[1];
		}
	}
	close (BKUPNO);
	system("rm -f /etc/cron.daily-1/bkup");
	system("rm -f /etc/cron.weekly/bkup");
	system("rm -f /etc/cron.monthly/bkup");
	if ($time eq "Daily")
	{
		system("cp /etc/multiconf/scripts/bkup /etc/cron.daily-1");
	}
	elsif ($time eq "Weekly")
	{
		system("cp /etc/multiconf/scripts/bkup /etc/cron.weekly");
	}
	elsif ($time eq "Monthly")
	{
		system("cp /etc/multiconf/scripts/bkup /etc/cron.monthly");
	}
}
elsif ($ID eq "disptime")
{
	open (BKUPNO, "/etc/multiconf/bkupnumber");
	while (<BKUPNO>)
	{
		if (/BKUPTIME/)
		{
			@values=split(/ /,$_);
			chomp($values[1]);
			$time = $values[1];
		}
	}
	close (BKUPNO);
	print $time;
}
elsif ($ID eq "bkupnumber")
{
	open (BKUPNO, "/etc/multiconf/bkupnumber");
	$tempfile = `/etc/multiconf/scripts/gettempfile`;
	open (TEMPFILE, ">/etc/multiconf/scripts/$tempfile");
	while (<BKUPNO>)
	{
		if (/MAXNO/)
		{
			print TEMPFILE "MAXNO $ARGV[1]\n";
		}
		else
		{
			print TEMPFILE $_;
		}
	}
	close (BKUPNO);
	close (TEMPFILE);
	system ("mv /etc/multiconf/scripts/$tempfile /etc/multiconf/bkupnumber");
	system ("/etc/multiconf/scripts/cvscheckin update /etc/multiconf/bkupnumber");
}
elsif ($ID eq "dispbkupnumber")
{
	open (BKUPNO, "/etc/multiconf/bkupnumber");
	while (<BKUPNO>)
	{
		if (/MAXNO/)
		{
			@values=split(/ /,$_);
			chomp($values[1]);
			$maxno = $values[1];
		}
	}
	close (BKUPNO);
	print $maxno;
}
system ("sync");


$SIG{QUIT} = 'DEFAULT';
$SIG{INT} = 'DEFAULT';
$SIG{TERM} = 'DEFAULT';
