#!/usr/bin/perl

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

# RCS: $Id: wbmc_trip,v 1.1.1.1 2004/09/09 08:14:21 snavi Exp $

##011228 create murakami

#############################################################
# Cronˤ꼫ưư륳ޥɡåDB#
#                     wbmc_trip                             #
#############################################################

# ɬפʴؿХݡ
require "/opt/nec/wbmc/lib/wbmc.pl";
require "/opt/nec/wbmc/adm/system/tripwire/tripwire.pl";
require "/opt/nec/wbmc/lib/cluster_com.pl";

## Cron¹ԥޥ

# wbmc_trip -i : åDB
# wbmc_trip -c : å
# wbmc_trip -d : DB
# ޥɤΥץϡ$ARGV[0] ˳ǼƤ

# 饹Ƚ
# ե륪йǡԵϤξϼ¹ԲĤȤ
if (&cluster_masterchk() eq "slave") {
	print "ե륪йԵϻϼ¹Ԥޤ";
	exit (1);
}

############ -cץư-iץ¹Ԥ#############
if ($ARGV[0] eq "-i" || $ARGV[0] eq "-c") {
# åޥɼ
# /etc/opt/nec/wbmc/wbmc_tripconf  EMAIL_CMD ͤ
	$cmd = &GetCheckcmd();
	# ޥɼ¹
	system("$cmd -n >/dev/null 2>&1");
	$? = $?/1024;
	# Ƚϡޥɤ֤ͤѤƹԤ
	if ($? != 0) {
		print "\nåμ¹Ԥ˼Ԥޤǡ١Ƥʤǽޤ\n";
	## ݡȺ
	$err_msg = &DelReport();
    	if ($err_msg) {
			print "å˽λޤ$err_msg<BR>";
    	}
	}
}
############ -cץư ޤ #############
############ -dץư-iץ¹Ԥ#############
if ($ARGV[0] eq "-i" || $ARGV[0] eq "-d") {
## DBˡꤵƤɥᥤФƤϡ
## 桼ơݥꥷκԤ

###### ֥ե(wbmc_middlepolicy) #####
	# ե̾
	$trip_middlepol = "/etc/opt/nec/wbmc/wbmc_middlepolicy";
	$trip_middlepol_lock = "wbmc_middlepolicy";

	# ֥եɤ߹
	@conf = ();
	if (-f $trip_middlepol) {
		if (!&readFile($trip_middlepol, $trip_middlepol_lock, *conf)) {
			print("֥ե(/etc/opt/nec/wbmc/wbmc_middlepolicy)ɤ߹ߤ˼ԤޤåäƤǽޤФ餯ԤäơƤ");
			exit(1);
		}
	} else {
		print("֥ե(/etc/opt/nec/wbmc/wbmc_middlepolicy)¸ߤޤեΥХååפäƤϡեꥹȥƤ") ;
		exit(1);
	}

	## ꤵƤɥᥤ
	@polset_domain_list = &GetPolsetdomainlist(*conf);

	## ɥᥤˡUC or UF ¸ߤι
	foreach $domainname (@polset_domain_list) {
		# UCι
		@chk_directory_contents = &GetPolicy("UC",$domainname,*conf);
		if ($chk_directory_contents[0] ne "") {
			@policy_list = &GetPolsetitem("UC",$domainname,*chk_directory_contents);
			# оݳȤեΥꥹȤˣĤĳǼ
			@nochk_file_list = split(/[\r\n]+/,$policy_list[1]);
			@addtxt = &MakeMiddlePolicy($domainname,"UC",$policy_list[0],*nochk_file_list);
			if ($add_txt[0] == "-1") {
				print("$domainnameɥᥤ˥桼ͤ⤤ޤ󡣥桼ɲø塢ݥꥷꤷƤ");
			} else {
				$err_msg = &WritePolicy($domainname,"UC",*addtxt,*conf);
				if ($err_msg) {
					print("$err_msg");
				}
			}
		}
		# ѿκǽ
		undef @chk_directory_contents;
		undef @addtxt;
		undef @nochk_file_list;
		undef @policy_list;
		# UFι
		@chk_directory_contents = &GetPolicy("UF",$domainname,*conf);
		if ($chk_directory_contents[0] ne "") {
			@policy_list = &GetPolsetitem("UF",$domainname,*chk_directory_contents);
			# оݳȤեΥꥹȤˣĤĳǼ
			@nochk_file_list = split(/[\r\n]+/,$policy_list[1]);
			@addtxt = &MakeMiddlePolicy($domainname,"UF",$policy_list[0],*nochk_file_list);
			if ($add_txt[0] == "-1") {
				print("$domainnameɥᥤ˥桼ͤ⤤ޤ󡣥桼ɲø塢ݥꥷꤷƤ");
			} else {
				$err_msg = &WritePolicy($domainname,"UF",*addtxt,*conf);
				if ($err_msg) {
					print("$err_msg");
				}
			}
		}
	}

	# Ի֥եκ
	# ֥ե̾($backup_filename)
	@gettime = localtime(time);
	$backup_filename = "/tmp/wbmc_middlepolicy-$gettime[2]-$gettime[1]-$gettime[0].bak";
	system("/bin/cp -pf $trip_middlepol $backup_filename >/dev/null 2>&1");

	# ֥ե˽񤭹
	# ԻϡХååץեƽλ
	# ʹߤΥ顼ƥե⥨顼˴ޤ
	if (-f $trip_middlepol) {
		if (!&writeFile($trip_middlepol, $trip_middlepol_lock, @conf)) {
			system("/bin/mv -f $backup_filename $trip_middlepol >/dev/null 2>&1");
	    	print("֥ե(/etc/opt/nec/wbmc/wbmc_middlepolicy)ν񤭹ߤ˼ԤޤåäƤǽޤФ餯ԤäơƤ");
		    exit(1);
		}
	} else {
		print("֥ե(/etc/opt/nec/wbmc/wbmc_middlepolicy)¸ߤޤեΥХååפäƤϡեꥹȥƤ") ;
		exit(1);
	}
##### ֥եޤ #####
	# ѿκƽ
	undef @addtxt;
	undef @chk_directory_contents;
	undef @nochk_file_list;
	undef @policy_list;
##### ݥꥷե #####
	# ե̾
	$trip_pol = "/etc/tripwire/twpol.txt";
	$trip_pol_lock = "trippol_lock";

	# ƥȥݥꥷɤ߹
	@conf2 = ();
	if (-f $trip_pol) {
		if (!&readFile($trip_pol, $trip_pol_lock, *conf2)) {
			print("ݥꥷե(/etc/tripwire/twpol.txt)ɤ߹ߤ˼ԤޤåäƤǽޤФ餯ԤäơƤ");
			system("/bin/mv -f $backup_filename $trip_middlepol >/dev/null 2>&1");
			exit(1);
		}
	} else {
		print("ݥꥷե(/etc/tripwire/twpol.txt)¸ߤޤեΥХååפäƤϡեꥹȥƤ") ;
		exit(1);
	}

## ɥᥤˡUC or UF ¸ߤι
	foreach $domainname (@polset_domain_list) {
		# UCι
		@chk_directory_contents = &GetPolicy("UC",$domainname,*conf);
		if ($chk_directory_contents[0] ne "") {
			@policy_list = &GetPolsetitem("UC",$domainname,*chk_directory_contents);
			# оݳȤեΥꥹȤˣĤĳǼ
			@nochk_file_list = split(/[\r\n]+/,$policy_list[1]);
			@addtxt = &MakePolicy($domainname,"UC",$policy_list[0],*nochk_file_list);
			if ($add_txt[0] == "-1") {
				print("$domainnameɥᥤ˥桼ͤ⤤ޤ󡣥桼ɲø塢ݥꥷꤷƤ");
			} else {
				$err_msg = &WritePolicy($domainname,"UC",*addtxt,*conf2);
				if ($err_msg) {
					print("$err_msg");
				}
			}
		}
		# ѿκƽ
		undef @chk_directory_contents;
		undef @addtxt;
		undef @nochk_file_list;
		undef @policy_list;
		# UFι
		@chk_directory_contents = &GetPolicy("UF",$domainname,*conf);
		if ($chk_directory_contents[0] ne "") {
			@policy_list = &GetPolsetitem("UF",$domainname,*chk_directory_contents);
			# оݳȤեΥꥹȤˣĤĳǼ
			@nochk_file_list = split(/[\r\n]+/,$policy_list[1]);
			@addtxt = &MakePolicy($domainname,"UF",$policy_list[0],*nochk_file_list);
			if ($add_txt[0] == "-1") {
				print("$domainnameɥᥤ˥桼ͤ⤤ޤ󡣥桼ɲø塢ݥꥷꤷƤ");
#				next;
			} else {
				$err_msg = &WritePolicy($domainname,"UF",*addtxt,*conf2);
				if ($err_msg) {
					print("$err_msg");
				}
			}
		}
	}

	# ե˽񤭹
	if (-f $trip_pol) {
		if (!&writeFile($trip_pol, $trip_pol_lock, @conf2)) {
		    print("ݥꥷե(/etc/tripwire/twpol.txt)ν񤭹ߤ˼ԤޤåäƤǽޤФ餯ԤäơƤ");
			system("/bin/mv -f $backup_filename $trip_middlepol >/dev/null 2>&1");
		    exit(1);
		}
	} else {
		print("ݥꥷե(/etc/tripwire/twpol.txt)¸ߤޤեΥХååפäƤϡեꥹȥƤ") ;
		system("/bin/mv -f $backup_filename $trip_middlepol");
		exit(1);
	}

##### ݥꥷեޤ #####
	# 
	undef @conf;
	undef @conf2;

	## ݥꥷե빹 
	# ѥե졼μ
	$phrase = &GetPassphrase();
	if ($phrase == -1) {
		system("/bin/mv -f $backup_filename $trip_middlepol >/dev/null 2>&1");
		print("ѥե졼μ˼Ԥޤ");
		exit(1);
	}
	# ޥɼ¹ԡǤϥåͤƤʤ
	if(system("/usr/sbin/twadmin -m P -Q $phrase /etc/tripwire/twpol.txt >/dev/null 2>&1")) {
		system("/bin/mv -f $backup_filename $trip_middlepol >/dev/null 2>&1");
		print ("ݥꥷեι˼Ԥޤ");
		exit(1);
	}

	# ǡ١ˡĹ֤ǽ뤿ᡢä
	# ХååץեϺ
	system("/bin/rm -f $backup_filename >/dev/null 2>&1");

	# ǡ١ιޥɼ¹
	if (system("/usr/sbin/tripwire -m i -P $phrase >/dev/null 2>&1")) {
		print ("ǡ١ι˼Ԥޤ");
		exit(1);
	}
}
############ -dץư ޤ #############
exit (0);
