#!/usr/bin/perl

# Copyright (C) 2000 NEC Corporation
# All Rights Reserved.

# RCS: $Id: wbmc_backup,v 1.2 2002/06/04 11:45:36 hata Exp $



#
# Хååץޥ
#
# usage: wbmc_backup [-c conffilename] [-l] [-m] -i item
#        -c     ե졼ե
#        -l     å˽
#        -l̵ åSTDERR˽
#        -m     ¹ԥå
#        -i     ХååоݤΥƥ̾
#        -p     ¨¹Իڡ			## 001219
#
# : :0
#         :1
#

require "/opt/nec/mail/wbmc/lib/wbmc.pl";
#require join ("/", $WBMC_ADM_DIR, "mail/fml", "fml.pl");

$| = 1;
$old = select(STDERR); $| = 1; select($old);

# Ǥ
$conf_file = "$WBMC_CONF_DIR/backup.conf";
$conf_lock = "backup.conf";
$tag_name = "wbmc_backup";
$log_file = "/var/log/wbmc";

$domain_conf = "$WBMC_CONF_DIR/domain.conf";
$domain_conf_lock = "domain.conf";
$cluster_type = &cluster_typechk();

# 
$item = "";
$errtolog = 0; # 0:STDERR, 1:LOG 
$msgout = 0;
$argerr = 0;
$argerrmsg = "";
$pageout = "";		## 001219
$tar_status = 0;	## 001227
for ($i = 0; $i < @ARGV; $i++) {
	if ($ARGV[$i] eq "-c") {
		if ($i == $#ARGV) {
			$argerrmsg = "'$ARGV[$i]'";
			$argerr = 1;
			next;
		}
		$conf_file = $ARGV[$i + 1];
		$i++;
	} elsif ($ARGV[$i] eq "-i") {
		if ($i == $#ARGV) {
			$argerrmsg = "'$ARGV[$i]'";
			$argerr = 1;
			next;
		}
		$item = $ARGV[$i + 1];
		$i++;
	} elsif ($ARGV[$i] eq "-l") {
		$errtolog = 1;
	} elsif ($ARGV[$i] eq "-m") {
		$msgout = 1;
	} elsif ($ARGV[$i] eq "-p") {		## 001219 kokokara
		if ($i == $#ARGV) {
			$argerrmsg = "'$ARGV[$i]'";
			$argerr = 1;
			next;
		}
		$pageout = $ARGV[$i + 1];
		$i++;							## 001219 kokomade
	} else {
		$argerrmsg = "'$ARGV[$i]'";
		$argerr = 1;
	}
}
if ($argerr) {
	&writeError("invalid argment $argerrmsg", "");
	exit(1);
}

# зб	001219
if (!($workmode = &getConfParam("WbMC", "WorkMode"))) {
	&writeError("read file error INITCONF.INI", "$item");
	exit(1);
}

# եͤɤ߹
if (!&readFile($conf_file, $conf_lock, *conf)) {
	&writeError("read file error '$conf_file'", "$item");
	exit(1);
}
$item_flag = 0;
for ($i = 0; $i < @conf; $i++) {
	if ($conf[$i] =~ /^\s*$item\s*{\s*$/) {
		$item_flag = 1;
	}
	if ($item_flag && $conf[$i] =~ /^\s*}\s*$/) {
		$item_flag = 0;
	}
	if ($item_flag && $conf[$i] =~ /^\s*TARGET\s*=\s*(.*)\s*$/) {
		$target_dir = &getValue($1);
	}
	if ($item_flag && $conf[$i] =~ /^\s*BACKUP\s*=\s*(.*)\s*$/) {
		$backup_dir = &getValue($1);
	}
	if ($item_flag && $conf[$i] =~ /^\s*ROTATE\s*=\s*(.*)\s*$/) {
		$rotate_max = &getValue($1);
	}
        if ($item_flag && $conf[$i] =~ /^\s*BACKUPMODE\s*=\s*(.*)\s*$/) {
                $backupmode = &getValue($1);
				@line = split(/\s+/, $backupmode);
        }
        if ($item_flag && $conf[$i] =~ /^\s*WINMACHINE\s*=\s*(.*)\s*$/) {
                $winmachine = &getValue($1);
				$winmachine_arg = &encodeCmdArg($winmachine);
        }
        if ($item_flag && $conf[$i] =~ /^\s*SHARE\s*=\s*(.*)\s*$/) {
                $share = &getValue($1);
				$share_arg = &encodeCmdArg($share);
        }
        if ($item_flag && $conf[$i] =~ /^\s*SMBUSER\s*=\s*(.*)\s*$/) {
                $smbuser = &getValue($1);
				$smbuser_arg = &encodeCmdArg($smbuser);
        }
        if ($item_flag && $conf[$i] =~ /^\s*SMBPASSWD\s*=\s*"(.*)"\s*$/) {
                $smbpasswd = &getValue($1);
				$smbpasswd_arg = &encodeCmdArg($smbpasswd);
        }
        if ($item_flag && $conf[$i] =~ /^\s*FTPSERVER\s*=\s*(.*)\s*$/) {
                $ftpserver = &getValue($1);
				$ftpserver_arg = &encodeCmdArg($ftpserver);
        }
        if ($item_flag && $conf[$i] =~ /^\s*FTPUSER\s*=\s*(.*)\s*$/) {
                $ftpuser = &getValue($1);
				$ftpuser_arg = &encodeCmdArg($ftpuser);
        }
        if ($item_flag && $conf[$i] =~ /^\s*FTPPASSWD\s*=\s*"(.*)"\s*$/) {
                $ftppasswd = &getValue($1);
				$ftppasswd_arg = &encodeCmdArg($ftppasswd);
        }
        if ($item_flag && $conf[$i] =~ /^\s*DOMAINBACKUPTYPE\s*=\s*(.*)\s*$/) {
                $domainbackuptype = &getValue($1);
        }
        if ($item_flag && $conf[$i] =~ /^\s*DOMAINNAME\s*=\s*(.*)\s*$/) {
                $domainname = &getValue($1);
				@domainlist = split(/\s+/, $domainname);
        }
	    if ($item_flag && $conf[$i] =~ /^\s*FMLBACKUPTYPE\s*=\s*(.*)\s*$/) {
                $fmlbackuptype = &getValue($1);
	    }
	    if ($item_flag && $conf[$i] =~ /^\s*FMLNAME\s*=\s*(.*)\s*$/) {
                $fmlname = &getValue($1);
				@fmllist = split(/\s+/, $fmlname);
	    }
	    if ($item_flag && $conf[$i] =~ /^\s*SPOOL\s*=\s*(.*)\s*$/) {
                $spool = &getValue($1);
	    }
}

# ̵ͤϴͤ
if ($backup_dir eq "") {
	$backup_dir = "/var/backup";
}
if ($rotate_max eq "") {
	$rotate_max = 3;
}

# ХååоݤΥǥ쥯ȥ꤬¸ߤʤϽλ
if ($target_dir eq "") {
	&writeError("no target", $item);
	exit(1);
}

#Хååץǥ쥯ȥ̵꤬к
if (! -d $backup_dir) {
	if (!mkdir($backup_dir, 0755)) {
		&writeError("mkdir error", $item);
	}
}

# ɥᥤб:ɥᥤ󥳥եɤ߹
if ($item eq "home" || $item eq "mail") {
	if ($domainbackuptype eq "ALL") {
		@domainlist = ();
		if (!&readFile($domain_conf, $domain_conf_lock, *conf)) {
			&writeError("read file error 'domain_conf'", "$item");
			exit(1);
		}
		# ɥᥤ̾
		$get_flg = 0;
		for ($i = 0; $i < @conf; $i++) {
			if ($conf[$i] =~ /^\s*#/) {
				next;
			}

			if ($conf[$i] =~ /^\s*<DOMAINNAME\s*(.*)>\s*$/) {
				$domainname = $1;
				$domainname =~ s/\s*$//;
				$domainname =~ s/^\s*//;
				$get_flg = 1;
			} elsif ($get_flg && ($conf[$i] =~ /^\s*<\/DOMAINNAME\s*>\s*$/ ||		## 001219
								 ($conf[$i] =~ /^\s+/ && $WBMC_MGRVER =~ /^1./))) {	## 001219
				$get_flg = 0;
				if (($domain_mode eq "REAL")&&($cluster_type)) {
					next;
				}
				if ($item eq "home") {
					# ɥᥤ
					push(@domainlist, $domainname);
				}
				if ($item eq "mail" && $mail eq "on") {
					# ɥᥤ
					push(@domainlist, $domainname);
				}
			} elsif ($get_flg && $conf[$i] =~ /^\s*MODE\s*(.*)\s*$/) {
				$domain_mode = $1;
				$domain_mode =~ s/\s*$//;
				$domain_mode =~ s/^\s*//;
			} elsif ($get_flg && $conf[$i] =~ /^\s*MAIL_SERVICE\s*(.*)\s*$/) {
				$mail = $1;
				$mail =~ s/\s*$//;
				$mail =~ s/^\s*//;
			}
		}
	}
	$domaincnt = @domainlist;

	if ($item eq "mail") {
		@target_dir_list = ();
		@target_dir_list = split(/\s+/, $target_dir);
		$target_dir_master = $target_dir_list[0];
		$target_dir_spool = "";
		for ($i = 1; $i < @target_dir_list; $i++) {
			$target_dir_spool .= " $target_dir_list[$i]";
		}
		if ($spool) {
			$domaincnt++;
		}
	} else {
		$target_dir_master = $target_dir;
	}

	if ($domaincnt eq 0) {
		&writeError("no target domain", "$item");
		exit(1);
	}
} elsif ($item eq "fml") {
	# ᡼󥰥ꥹб
	if ($fmlbackuptype eq "ALL") {
		@fmllist = ();
		&getListName(*fmlname);
		for ($i = 0; $i < @fmlname; $i++) {
			push(@fmllist, $fmlname[$i]);
		}
	}
	$domaincnt = @fmllist;
	$target_dir_master = $target_dir;
	if ($domaincnt eq 0) {
		&writeError("no target fml", "$item");
		exit(1);
	}
} elsif ($item eq "sysconf") {
	$target_dir_master = $target_dir;
	$domaincnt = 1;
} else {
	$domaincnt = 1;
}

# ХååΥɥᥤ
for ($j = 0; $j < @line; $j++) {
	$backupmode = $line[$j];
	for ($k = 0; $k < $domaincnt; $k++) {
		if ($backupmode eq "LOCAL") {

			if ($item eq "home" || $item eq "mail") {
				if ($item eq "mail" && $spool && $k eq @domainlist) {
					$backup_file = "backup_${item}_spool";
					$rotate_file = "$backup_dir/.current_${item}_spool";
					$rotate_file_lock = ".current_${item}_spool";
				} else {
					$backup_file = "backup_${item}_${domainlist[$k]}";
					$rotate_file = "$backup_dir/.current_${item}_${domainlist[$k]}";
					$rotate_file_lock = ".current_${item}_${domainlist[$k]}";
				}
			} elsif ($item eq "fml") {
				$backup_file = "backup_${item}_${fmllist[$k]}";
				$rotate_file = "$backup_dir/.current_${item}_${fmllist[$k]}";
				$rotate_file_lock = ".current_${item}_${fmllist[$k]}";
			} else {
				$backup_file = "backup_$item";
				$rotate_file = "$backup_dir/.current_$item";
				$rotate_file_lock = ".current_$item";
			}

		} elsif ($backupmode eq "SMB") {

			if (!&readFile("/etc/sysconfig/network-scripts/ifcfg-eth0", "ifcfg-eth0", *file)) {
				&writeError("read file error", $item);
				exit(1);
			}
			for ($i = 0; $i < @file; $i++) {
				if ($file[$i] =~ /^\s*IPADDR\s*=\s*(.*)\s*$/) {
					$ipaddr = $1;
				}
			}

			if ($item eq "home" || $item eq "mail") {
				if ($item eq "mail" && $spool && $k eq @domainlist) {
					$backup_file = "backup_smb_${item}_spool";
					$rotate_file = "$backup_dir/.current_smb_${item}_spool";
					$rotate_file_lock = ".current_smb_${item}_spool";
				} else {
					$backup_file = "backup_smb_${item}_${domainlist[$k]}";
					$rotate_file = "$backup_dir/.current_smb_${item}_${domainlist[$k]}";
					$rotate_file_lock = ".current_smb_${item}_${domainlist[$k]}";
				}
			} elsif ($item eq "fml") {
				$backup_file = "backup_smb_${item}_${fmllist[$k]}";
				$rotate_file = "$backup_dir/.current_smb_${item}_${fmllist[$k]}";
				$rotate_file_lock = ".current_smb_${item}_${fmllist[$k]}";
			} else {
				$backup_file = "backup_smb_$item";
				$rotate_file = "$backup_dir/.current_smb_$item";
				$rotate_file_lock = ".current_smb_$item";
			}

		} elsif ($backupmode eq "FTP") {

			if ($item eq "home" || $item eq "mail") {
				if ($item eq "mail" && $spool && $k eq @domainlist) {
					$backup_file = "backup_ftp_${item}_spool";
					$rotate_file = "$backup_dir/.current_ftp_$item_spool";
					$rotate_file_lock = ".current_ftp_$item_spool";
				} else {
					$backup_file = "backup_ftp_${item}_${domainlist[$k]}";
					$rotate_file = "$backup_dir/.current_ftp_${item}_${domainlist[$k]}";
					$rotate_file_lock = ".current_ftp_${item}_${domainlist[$k]}";
				}
			} elsif ($item eq "fml") {
				$backup_file = "backup_ftp_${item}_${fmllist[$k]}";
				$rotate_file = "$backup_dir/.current_ftp_${item}_${fmllist[$k]}";
				$rotate_file_lock = ".current_ftp_${item}_${fmllist[$k]}";
			} else {
				$backup_file = "backup_ftp_$item";
				$rotate_file = "$backup_dir/.current_ftp_$item";
				$rotate_file_lock = ".current_ftp_$item";
			}
		}

		# ơѥʥСɤ߹
		if (!&readFile($rotate_file, $rotate_file_lock, *current)) {
			$backup_num = 0;
			$backup_num_current = -1;			## 001221
		} else {
			$backup_num = $current[0] + 1;
			$backup_num_current = $current[0];	## 001221
		}

		# MAX 
		if ($rotate_max <= $backup_num) {
			$backup_num = 0;
		}

		$tgzfile = "${backup_file}_${backup_num}.tgz";

		if ($backupmode eq "LOCAL") {
			# եƱ̾ե
			unlink ("$backup_dir/$tgzfile");
		}

		# 001219 kokokara
		$mode = "";
		$hostname = "";
		if ($WBMC_MGRVER =~ /^1./ && ($item eq "home" || $item eq "mail")) {
			if (!&GetDomainParam($domainlist[$k], "MODE", *mode)) {
				&writeError("cannot read file MODE", "$item");
				exit(1);
			}
			if (!&GetDomainParam($domainlist[$k], "HOSTNAME", *hostname)) {
				&writeError("cannot read file HOSTNAME", "$item");
				exit(1);
			}
		}
		# 001219 kokomade

		## ܥåб
		@symlink_dir_list = ();
		# /home/web
		if ($item eq "sysconf" || $item eq "home") {
			$chkdir = "/home/web";
			if ($item eq "home") {
				# 001219 kokokara
				if ($mode eq "REAL" && $WBMC_MGRVER =~ /^1./) {
					$chkdir = "/home/web/${hostname}.$domainlist[$k]";
				} else {
					$chkdir = "/home/web/$domainlist[$k]";
				}
				# 001219 kokomade
			}
			@symlink_dir = ();
			if ($err = &chksymlink($chkdir, *symlink_dir)) {
				&writeError("$err", "$item");
				exit(1);
			}
			for($i = 0; $i < @symlink_dir; $i++) {
				if (&dupchksymlink($symlink_dir[$i], @symlink_dir_list)) {
					push(@symlink_dir_list, $symlink_dir[$i]);
				}
			}
		}

		# /home/mail
		if ($item eq "sysconf" || $item eq "mail") {
			$chkdir = "/home/mail";
			if ($item eq "mail") {
				# 001219 kokokara
				if ($mode eq "REAL" && $WBMC_MGRVER =~ /^1./) {
					$chkdir = "/home/mail/${hostname}.$domainlist[$k]";
				} else {
					$chkdir = "/home/mail/$domainlist[$k]";
				}
				# 001219 kokomade
			}
			@symlink_dir = ();
			if ($err = &chksymlink($chkdir, *symlink_dir)) {
				&writeError("$err", "$item");
				exit(1);
			}
			for($i = 0; $i < @symlink_dir; $i++) {
				if (&dupchksymlink($symlink_dir[$i], @symlink_dir_list)) {
					push(@symlink_dir_list, $symlink_dir[$i]);
				}
			}
		}

		# /home/.wbmc
		if ($item eq "sysconf") {
			$chkdir = "/home/.wbmc";
			@symlink_dir = ();
			if ($err = &chksymlink($chkdir, *symlink_dir)) {
				&writeError("$err", "$item");
				exit(1);
			}
			for($i = 0; $i < @symlink_dir; $i++) {
				if (&dupchksymlink($symlink_dir[$i], @symlink_dir_list)) {
					push(@symlink_dir_list, $symlink_dir[$i]);
				}
			}
		}
		## ܥåб

		# ɥᥤѥХååоݥǥ쥯ȥ
		if ($item eq "home" || $item eq "mail") {
			# ¥ǥ쥯ȥб
#			if (!&GetDomainParam($domainlist[$k], "MODE", *mode)) {		##001110
#				&writeError("cannot read file MODE", "$item");			##001110
#				exit(1);												##001110
#			}															##001110
#			if (!&GetDomainParam($domainlist[$k], "HOSTNAME", *hostname)) {
#				&writeError("cannot read file HOSTNAME", "$item");
#				exit(1);
#			}
#			if ($mode eq "REAL") {
#				$target_dir = "$target_dir_master/${hostname}.${domainlist[$k]}";
#			} else {
				## ܥåб
				if (@symlink_dir_list eq 0) {
					# 001219 kokokara
					if ($mode eq "REAL" && $WBMC_MGRVER =~ /^1./) {
						$target_dir = "$target_dir_master/${hostname}.${domainlist[$k]}";
					} else {
						$target_dir = "$target_dir_master/${domainlist[$k]}";
					}
					# 001219 kokomade
				} else {
					for ($l = 0; $l < @symlink_dir_list; $l++) {
						$target_dir = "$symlink_dir_list[$l]";
					}
				}
				## ܥåб
#			}
			if ($item eq "mail" && $spool && $k eq @domainlist) {
				$target_dir = $target_dir_spool;
			}
		} elsif ($item eq "fml") {
			$target_dir = "$target_dir_master/${fmllist[$k]}";
		} elsif ($item eq "sysconf") {
			## ܥåб
			$target_dir = $target_dir_master;
			for ($l = 0; $l < @symlink_dir_list; $l++) {
				$target_dir .= " $symlink_dir_list[$l]";
			}
			## ܥåб
		}

		# ᡼󥰥ꥹбå
		if ($item eq "fml") {
			if (&lockFml($fmllist[$k], $WBMC_LOCK_R_NB, *lockcf, *lockph)) {
				&writeError("lockFml failed $fmllist[$k]", "$item");
				exit(1);
			}
		}

		# -m:åϲ̤ɽ
		#       -m̵:åɽʤ

		# ֺ
		print "------ Start $backupmode -----\n";
#		print "------ TARGET $target_dir -----\n";
		# mailtar ¸ߥå 001219 kokokara
		# mailtar ޥ	(ƥե)
		#	appliance3.0 
		#	appliance2.0 MailServer	(Standalone/MailCluster) SEC (Standalone)
		# tar ޥ		(ƥե)
		#	appliance2.0 WebServer	(Standalone/WebLoadbalance)
		$mailtar_flg = "off";
		if ($WBMC_MGRVER =~ /^1./) {
			if (($workmode eq "Standalone" && $WBMC_MACHINE_TYPE eq "mail") ||
				 $workmode eq "MailCluster"	||
				 ($workmode eq "Standalone" && $WBMC_MACHINE_TYPE eq "pre")) {
				$mailtar_flg = "ok";
			}
		} else {
			$mailtar_flg = "ok";
		}
		# 001219 kokomade

		if ($item eq "mail" || ($item eq "sysconf" && $mailtar_flg eq "ok")) {
# delete -P option 001202 seki
			$pid = open(CMD, "/opt/nec/mailtar/mailtar cvfz ${backup_dir}/$tgzfile --ignore-failed-read $target_dir 2>&1 |");
		} else {
# delete -P option 001202 seki
# update /bin/tar -> /opt/nec/mail/baktar/baktar 001227
			$pid = open(CMD, "/opt/nec/mail/baktar/baktar cvfz ${backup_dir}/$tgzfile --ignore-failed-read $target_dir 2>&1 |");
		}

		# 001219 kokokara
		$newpage = "./$pageout?$item";
		$killmode = "tgz";
		print "Хåå׼¹桥<A HREF=\"./kill_pid2.cgi?$pid+$newpage+$killmode+$backup_dir+$tgzfile\"></A>\n";
		# 001219 kokomade

		# ᡼󥰥ꥹбå
		if ($item eq "fml") {
			&unlockFml($lockcf, $lockph);
		}

		$errmessage = "";
		$cnt = 0;
		while (<CMD>) {
			if (/\/opt\/nec\/mail\/baktar\/baktar: / || /\/opt\/nec\/mailtar\/mailtar: /) {	# wbmc03-B17 update	001227
				if (/Removing leading/i) {
					next;
				}
				if (/Archive contains future timestamp/i) {
					next;
				}
		        # taråʸɽ
				print "<FONT COLOR=red>$_</FONT>";
				$errmessage = $_;
			}
			if (/^baktar: / || /^mailtar: /) {							# wbmc03-B17 update		001227
				$errmessage = $_;
				last;
			}
			if ($msgout) {
				if (($cnt % 100) == 0) {
					print "$cnt: $_";
				}
				$cnt++;
			}
		}
		close(CMD);
		if ($?) {
			if ($errmessage eq "") {
				&writeError("tar: Unknown error", $item);
				goto error;
			} else {
				&writeError($errmessage, $item);
				goto error;
			}
		} elsif ($errmessage) {			## 001227
			$tar_status = 1;			## 001227
		}

		chdir("$backup_dir");
		if ($backupmode eq "LOCAL") {

			# ѡߥåѹ
			if (!chmod(0600, "$tgzfile")) {
				&writeError("chmod error", $item);
				goto error;
			}
		} elsif ($backupmode eq "SMB") {

			# ѡߥåѹ
			if (!chmod(0666, "$tgzfile")) {
				&writeError("chmod error", $item);
				goto error;
			}

			# ǥ쥯ȥ
			$pid = open(CMD, "/usr/bin/smbclient //$winmachine_arg/$share_arg $smbpasswd_arg -U $smbuser_arg -c \"mkdir $ipaddr\" 2>&1 |");
			runpid($pid);
			$errmessage = "";
			while(<CMD>) {
				if (/ERR/) {
					if (/making remote directory/i) {
						next;
					}
					$errmessage = $_;
				} elsif (/Connection to.*failed/i) {
					$errmessage = $_;
				}
				if ($msgout) {
					print $_;
				}
			}
			close(CMD);
			if ($errmessage ne "") {
				&writeError($errmessage, $item);
				goto error;
			}

			# եž
			$pid = open(CMD, "/usr/bin/smbclient //$winmachine_arg/$share_arg $smbpasswd_arg -U $smbuser_arg -c \"cd $ipaddr; put $tgzfile; exit\" 2>&1 |");
			$killmode = "samba";
			runpid($pid, $killmode, $tgzfile, $winmachine_arg, $share_arg, $smbpasswd_arg, $smbuser_arg, $ipaddr, $rotate_file, $rotate_file_lock);
			$errmessage = "";
			while(<CMD>) {
				if ($msgout) {
					print $_;
				}
				if (/ERR/) {
					$errmessage = $_;
				}
			}
			close(CMD);
			if ($errmessage ne "") {
				&writeError($errmessage, $item);
				goto error;
			}

			# ե
			unlink("$tgzfile");
		} elsif ($backupmode eq "FTP") {

			# ѡߥåѹ
			if (!chmod(0666, "$backup_dir/$tgzfile")) {
				&writeError("chmod error", $item);
				goto error;
			}

			# եž
			$pid = open(CMD, "/usr/bin/lftp $ftpserver_arg -u $ftpuser_arg,$ftppasswd_arg -e \"put $tgzfile;exit\" 2>&1 |");
			runpid($pid);
			$errmessage = "";
			while (<CMD>) {
				if ($msgout) {
					print $_;
				}
				if (/bytes transferred/i) {
					next;
				}
				$errmessage = $_;
			}
			close(CMD);
			if ($errmessage ne "") {
				&writeError($errmessage, $item);
				goto error;
			}
			# ե
			unlink("$tgzfile");
		}

		# 001221 kokokara
		# ơѥʥСɤ߹	001221
		if (!&readFile($rotate_file, $rotate_file_lock, *current)) {
			$backup_num_now = 0;
		} else {
			$backup_num_now = $current[0];
		}
		# ơȥե񤭹
		if ($backup_num_now == -1) {		## 
			$current[0] = $backup_num_current;
		} else {
			$current[0] = $backup_num;
		}
		if ($current[0] == -1) {			## ǽեʤ
			unlink("$rotate_file");
		} else {
			if (!&writeFile($rotate_file, $rotate_file_lock, @current)) {
				&writeLog("write file error", $tag_name, $log_file);
			}
		}
		# 001221 kokomade

	}
}

## ｪλ			001227
if ($tar_status == 0) {
	exit(0);
} else {
	exit(2);
}

# եƽλ
error:
	chdir("$backup_dir");				# 001222
	unlink("$tgzfile");
	exit(1);

#-----------------------------------------------------------------------
sub writeError {
	local($msg, $item) = @_;

	$msg =~ s/\s*$//;
	if ($item ne "") {
		$msg = "[$item]$msg";
	}
	if ($errtolog) {
		&writeLog($msg, $tag_name, $log_file);
	} else {
		print STDERR "$tag_name:$msg\n";
	}
}

sub getValue {
	local($str) = @_;

	$str =~ s/^[\s]*//;
	$str =~ s/[\s]*$//;
	if ($str =~ /^"(.*)"$/) {
		$str = $1;
	}

	return($str);
}

sub runpid
{
	my($pid) = @_;
	my($pid, $killmode ,$tgzfile, $winmachine_arg, $share_arg, $smbpasswd_arg, $smbuser_arg, $ipaddr, $rotate_file, $rotate_file_lock) = @_;

	local(*IN);
	my($i,@ilnes,$flg,@line,$cnt);

	my($newpage) = "./index.cgi?$item";
	print "եž桥<A HREF=\"./kill_pid2.cgi?$pid+$newpage+$killmode+$tgzfile+$winmachine_arg+$share_arg+$smbpasswd_arg+$smbuser_arg+$ipaddr+$rotate_file+$rotate_file_lock\"></A>\n";
	$cnt = 0;
	for (;;){
		# ץɤ߼
		open(IN, "/bin/ps -efwwwww |");
		<IN>;
		@lines = <IN>;
		close(IN);

		$flg = 0;
		for ($i = 0; $i <= $#lines; $i++) {
			@line = split(/ +/, $lines[$i]);
			if ($line[2] eq $pid) {
				$flg = 1;
				last;
			}
		}
		if ($flg eq 0) {
			last;
		}
		sleep 1;
		$cnt++;
		if ($cnt eq 5) {
			print "\n";
			$cnt = 0;
		} else {
			print "";
		}
	}
}

sub chksymlink
{
	local($dirname,*symlink_dir) = @_;
	local(*DIR);
	my($i,$err,@lslist,@lsinfo);

	if (!opendir(DIR, "$dirname")) {
		$err = "not directory $dirname<BR>";
		return $err;
	}
	close(DIR);

	open(DIR, "/bin/ls -la $dirname |");
	@lslist = <DIR>;
	close(DIR);

	for ($i = 0; $i < @lslist; $i++) {
		@lsinfo = split(/\s+/, $lslist[$i]);
		if ($lsinfo[0] =~ /^l/) {
			push(@symlink_dir, $lsinfo[10]);
		}
	}
	return "";
}

sub dupchksymlink
{
	local($symlink,@list) = @_;
	my($i);

	for ($i = 0; $i < @list; $i++) {
		if ($list[$i] eq $symlink) {
			return 0;
		}
	}
	return 1;
}
