313 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			313 lines
		
	
	
		
			11 KiB
		
	
	
	
		
			Perl
		
	
	
		
			Executable File
		
	
	
	
	
| ############################################
 | |
| ##                                        ##
 | |
| ##          WebAdverts (Rebuild)          ##
 | |
| ##           by Darryl Burgdorf           ##
 | |
| ##       (e-mail burgdorf@awsd.com)       ##
 | |
| ##                                        ##
 | |
| ##             version:  3.20             ##
 | |
| ##        last modified:  09/08/02        ##
 | |
| ##           copyright (c) 2002           ##
 | |
| ##                                        ##
 | |
| ##    latest version is available from    ##
 | |
| ##        http://awsd.com/scripts/        ##
 | |
| ##                                        ##
 | |
| ############################################
 | |
| 
 | |
| # NOTHING BELOW THIS LINE NEEDS TO BE ALTERED!
 | |
| 
 | |
| sub RebuildDatabase {
 | |
| 	&ConfirmAdminPassword(1);
 | |
| 	unlink ("$ADVadverts_dir/adcount.txt");
 | |
| 	foreach $key (a..z,0..9) {
 | |
| 		unless (-d "$ADVadverts_dir/$key") {
 | |
| 			mkdir ("$ADVadverts_dir/$key",0777);
 | |
| 			chmod 0777,"$ADVadverts_dir/$key";
 | |
| 		}
 | |
| 	}
 | |
| 	opendir (FILES,$ADVadverts_dir);
 | |
| 	@files = readdir(FILES);
 | |
| 	closedir (FILES);
 | |
| 	&ADVLockOpen (GRPLIST, "groups.txt");
 | |
| 	seek (GRPLIST,0,0);
 | |
| 	foreach $file (@files) {
 | |
| 		if ($file =~ /(.*)\.grp$/) {
 | |
| 		$AccountName = $1;
 | |
| 		&CheckName;
 | |
| 		rename ("$ADVadverts_dir/$1\.grp","$ADVadverts_dir/$AccountName\.grp");
 | |
| 		print GRPLIST "$AccountName\n"; }
 | |
| 	}
 | |
| 	truncate (GRPLIST, tell(GRPLIST));
 | |
| 	&ADVLockClose (GRPLIST, "groups.txt");
 | |
| 	&ADVLockOpen (ADVLIST, "adlist.txt");
 | |
| 	@adverts = <ADVLIST>;
 | |
| 	chomp (@adverts);
 | |
| 	seek (ADVLIST,0,0);
 | |
| 	foreach $advert (@adverts) {
 | |
| 		next unless ($advert);
 | |
| 		$AccountName = $advert;
 | |
| 		&CheckName;
 | |
| 		next if ($OnList{$AccountName});
 | |
| 		next unless ((-e "$ADVadverts_dir/$advert.txt")
 | |
| 		  || (-e "$ADVadverts_dir/$subdir/$AccountName.txt"));
 | |
| 		unless (-d "$ADVadverts_dir/$subdir") {
 | |
| 			mkdir ("$ADVadverts_dir/$subdir",0777);
 | |
| 			chmod 0777,"$ADVadverts_dir/$subdir";
 | |
| 		}
 | |
| 		foreach $file (@files) {
 | |
| 			if (($file =~ /^$advert\.(txt)/)
 | |
| 			  || ($file =~ /^$advert\.(log)/)
 | |
| 			  || ($file =~ /^$advert\.(\d\d\d\d\.log)/)) {
 | |
| 				rename ("$ADVadverts_dir/$file",
 | |
| 				  "$ADVadverts_dir/$subdir/$AccountName.$1");
 | |
| 			}
 | |
| 		}
 | |
| 		print ADVLIST "$AccountName\n";
 | |
| 		$OnList{$AccountName} = 1;
 | |
| 	}
 | |
| 	truncate (ADVLIST, tell(ADVLIST));
 | |
| 	&ADVLockClose (ADVLIST, "adlist.txt");
 | |
| 	&ADVLockOpen (ADVLIST, "adnew.txt");
 | |
| 	@adverts = <ADVLIST>;
 | |
| 	chomp (@adverts);
 | |
| 	seek (ADVLIST,0,0);
 | |
| 	foreach $advert (@adverts) {
 | |
| 		next unless ($advert);
 | |
| 		$AccountName = $advert;
 | |
| 		&CheckName;
 | |
| 		next if ($OnList{$AccountName});
 | |
| 		next unless ((-e "$ADVadverts_dir/$advert.txt")
 | |
| 		  || (-e "$ADVadverts_dir/$subdir/$AccountName.txt"));
 | |
| 		unless (-d "$ADVadverts_dir/$subdir") {
 | |
| 			mkdir ("$ADVadverts_dir/$subdir",0777);
 | |
| 			chmod 0777,"$ADVadverts_dir/$subdir";
 | |
| 		}
 | |
| 		foreach $file (@files) {
 | |
| 			if (($file =~ /^$advert\.(txt)/)
 | |
| 			  || ($file =~ /^$advert\.(log)/)
 | |
| 			  || ($file =~ /^$advert\.(\d\d\d\d\.log)/)) {
 | |
| 				rename ("$ADVadverts_dir/$file",
 | |
| 				  "$ADVadverts_dir/$subdir/$AccountName.$1");
 | |
| 			}
 | |
| 		}
 | |
| 		print ADVLIST "$AccountName\n";
 | |
| 		$OnList{$AccountName} = 1;
 | |
| 	}
 | |
| 	foreach $advertcheck (@files) {
 | |
| 		if ($advertcheck =~ /^dbmlist/) { unlink ("$ADVadverts_dir/$advertcheck"); }
 | |
| 		next unless ($advertcheck =~ /(.*)\.txt$/);
 | |
| 		$advert = $1;
 | |
| 		next if (($advert eq "adcount") || ($advert eq "adlist") || ($advert eq "adminlog")
 | |
| 		  || ($advert eq "adnew") || ($advert eq "adpassword") || ($advert eq "dupclicks")
 | |
| 		  || ($advert eq "dupviews") || ($advert eq "groups") || ($advert eq "register")
 | |
| 		  || ($advert eq "reject") || ($advert eq "welcome") || ($advert eq "update"));
 | |
| 		$AccountName = $advert;
 | |
| 		&CheckName;
 | |
| 		next if ($OnList{$AccountName});
 | |
| 		open (DISPLAY, "$ADVadverts_dir/$advert.txt");
 | |
| 		@lines = <DISPLAY>;
 | |
| 		close (DISPLAY);
 | |
| 		chomp (@lines);
 | |
| 		($max,$shown,$visits,$url,$image,$height,$width,
 | |
| 		  $alt,$pass,$text,$start,$weight,$zone,
 | |
| 		  $border,$target,$raw,$displayratio,$username,$email,
 | |
| 		  $displayzone,$clicksfrom) = @lines;
 | |
| 		next unless ($max || $displayratio || $clicksfrom);
 | |
| 		($max,$maxtype) = split(/\|/, $max);
 | |
| 		($displayratio,$displaycount) = split(/\|/, $displayratio);
 | |
| 		($clicksfrom,$clicksratio) = split(/\|/, $clicksfrom);
 | |
| 		next if (($max =~ /[^\d-]/)
 | |
| 		  || ($shown =~ /[^\d-]/) || ($visits =~ /[^\d-]/)
 | |
| 		  || ($start =~ /[^\d-]/) || ($weight =~ /[^\d-]/)
 | |
| 		  || ($displayratio =~ /[^\d-]/) || ($displaycount =~ /[^\d-]/)
 | |
| 		  || ($clicksfrom =~ /[^\d-]/) || ($clicksratio =~ /[^\d-]/));
 | |
| 		unless (-d "$ADVadverts_dir/$subdir") {
 | |
| 			mkdir ("$ADVadverts_dir/$subdir",0777);
 | |
| 			chmod 0777,"$ADVadverts_dir/$subdir";
 | |
| 		}
 | |
| 		foreach $file (@files) {
 | |
| 			if (($file =~ /^$advert\.(txt)/)
 | |
| 			  || ($file =~ /^$advert\.(log)/)
 | |
| 			  || ($file =~ /^$advert\.(\d\d\d\d\.log)/)) {
 | |
| 				rename ("$ADVadverts_dir/$file",
 | |
| 				  "$ADVadverts_dir/$subdir/$AccountName.$1");
 | |
| 			}
 | |
| 		}
 | |
| 		print ADVLIST "$AccountName\n";
 | |
| 		$OnList{$AccountName} = 1;
 | |
| 	}
 | |
| 	foreach $key (a..z,0..9) {
 | |
| 		opendir (FILES,"$ADVadverts_dir/$key");
 | |
| 		@files = readdir(FILES);
 | |
| 		closedir (FILES);
 | |
| 		foreach $file (@files) {
 | |
| 			unless (($file =~ /^\./) || $OnList{$file}) {
 | |
| 				print ADVLIST "$file\n";
 | |
| 				$OnList{$AccountName} = 1;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	truncate (ADVLIST, tell(ADVLIST));
 | |
| 	&ADVLockClose (ADVLIST, "adnew.txt");
 | |
| 	&ADVLockOpen (DBMLIST, "dbmlist.txt");
 | |
| 	if ($ADVlockerror) { &Error_DBM; }
 | |
| 	else {
 | |
| 		&ADVDBMOpen;
 | |
| 		if ($ADVdbmerror) { &Error_DBM; }
 | |
| 		else {
 | |
| 			%DBMList = ();
 | |
| 			$DBMList{'adcount.txt'} = "1\n0\n$time";
 | |
| 			foreach $account (keys %OnList) {
 | |
| 				$subdir = substr($account,0,1);
 | |
| 				$subdir .= "/$account";
 | |
| 				open (DISPLAY, "$ADVadverts_dir/$subdir/$account.txt");
 | |
| 				@lines = <DISPLAY>;
 | |
| 				close (DISPLAY);
 | |
| 				chomp (@lines);
 | |
| 				($max,$shown,$visits,$url,$image,$height,$width,
 | |
| 				  $alt,$pass,$text,$start,$weight,$zone,
 | |
| 				  $border,$target,$raw,$displayratio,$username,$email,
 | |
| 				  $displayzone,$clicksfrom) = @lines;
 | |
| 				if ($image) { $image = "X"; }
 | |
| 				if ($raw =~ /<SCRIPT/) { $raw = "J"; }
 | |
| 				elsif ($raw) { $raw = "X"; }
 | |
| 				$DBMList{$account} = "$max\t$shown\t$visits\t$image\t$start\t$weight\t";
 | |
| 				$DBMList{$account} .= "$zone\t$raw\t$displayratio\t$clicksfrom";
 | |
| 			}
 | |
| 			&ADVDBMClose;
 | |
| 		}
 | |
| 	}
 | |
| 	&ADVLockClose (DBMLIST, "dbmlist.txt");
 | |
| 	if ($AdminDisplaySetup) { &defineview; }
 | |
| 	else {
 | |
| 		$INPUT{'whichtype'} = "pending established groups";
 | |
| 		$INPUT{'whichtime'} = "active expired disabled";
 | |
| 		$INPUT{'whichzone'} = "";
 | |
| 		&reviewall;
 | |
| 	}
 | |
| }
 | |
| 
 | |
| sub CheckDatabase {
 | |
| 	&ConfirmAdminPassword(1);
 | |
| 	&Header("WebAdverts","WebAdverts Database Integrity Check");
 | |
| 	print "<P ALIGN=CENTER><BIG><BIG><STRONG>";
 | |
| 	print "WebAdverts Database Integrity Check";
 | |
| 	print "</STRONG></BIG></BIG>\n";
 | |
| 	open (ADVLIST, "$ADVadverts_dir/adnew.txt");
 | |
| 	while (defined($ADVlist = <ADVLIST>)) {
 | |
| 		chomp $ADVlist;
 | |
| 		$Adverts_List{$ADVlist} = 1;
 | |
| 		$MasterList{$ADVlist} = 1;
 | |
| 	}
 | |
| 	close (ADVLIST);
 | |
| 	open (ADVLIST, "$ADVadverts_dir/adlist.txt");
 | |
| 	while (defined($ADVlist = <ADVLIST>)) {
 | |
| 		chomp $ADVlist;
 | |
| 		$Adverts_List{$ADVlist} = 1;
 | |
| 		$MasterList{$ADVlist} = 1;
 | |
| 	}
 | |
| 	close (ADVLIST);
 | |
| 	opendir (FILES,$ADVadverts_dir);
 | |
| 	@files = readdir(FILES);
 | |
| 	closedir (FILES);
 | |
| 	foreach $advertcheck (@files) {
 | |
| 		next unless ($advertcheck =~ /(.*)\.txt$/);
 | |
| 		$advert = $1;
 | |
| 		next if (($advert eq "adcount") || ($advert eq "adlist") || ($advert eq "adminlog")
 | |
| 		  || ($advert eq "adnew") || ($advert eq "adpassword") || ($advert eq "dbmlist")
 | |
| 		  || ($advert eq "dupclicks") || ($advert eq "dupviews") || ($advert eq "groups")
 | |
| 		  || ($advert eq "register") || ($advert eq "reject") || ($advert eq "welcome")
 | |
| 		  || ($advert eq "update"));
 | |
| 		open (DISPLAY, "$ADVadverts_dir/$advert.txt");
 | |
| 		@lines = <DISPLAY>;
 | |
| 		close (DISPLAY);
 | |
| 		chomp (@lines);
 | |
| 		($max,$shown,$visits,$url,$image,$height,$width,
 | |
| 		  $alt,$pass,$text,$start,$weight,$zone,
 | |
| 		  $border,$target,$raw,$displayratio,$username,$email,
 | |
| 		  $displayzone,$clicksfrom) = @lines;
 | |
| 		next unless ($max || $displayratio || $clicksfrom);
 | |
| 		($max,$maxtype) = split(/\|/, $max);
 | |
| 		($displayratio,$displaycount) = split(/\|/, $displayratio);
 | |
| 		($clicksfrom,$clicksratio) = split(/\|/, $clicksfrom);
 | |
| 		next if (($max =~ /[^\d-]/)
 | |
| 		  || ($shown =~ /[^\d-]/) || ($visits =~ /[^\d-]/)
 | |
| 		  || ($start =~ /[^\d-]/) || ($weight =~ /[^\d-]/)
 | |
| 		  || ($displayratio =~ /[^\d-]/) || ($displaycount =~ /[^\d-]/)
 | |
| 		  || ($clicksfrom =~ /[^\d-]/) || ($clicksratio =~ /[^\d-]/));
 | |
| 		$Adverts_Physical{$advert} = 1;
 | |
| 		$MasterList{$advert} = 1;
 | |
| 	}
 | |
| 	foreach $key (a..z,0..9) {
 | |
| 		opendir (FILES,"$ADVadverts_dir/$key");
 | |
| 		@files = readdir(FILES);
 | |
| 		closedir (FILES);
 | |
| 		foreach $file (@files) {
 | |
| 			unless ($file =~ /^\./) {
 | |
| 				$Adverts_Physical{$file} = 1;
 | |
| 				$MasterList{$file} = 1;
 | |
| 			}
 | |
| 		}
 | |
| 	}
 | |
| 	&ADVLockOpen (DBMLIST, "dbmlist.txt");
 | |
| 	if ($ADVlockerror) { &Error_DBM; }
 | |
| 	else {
 | |
| 		&ADVDBMOpen;
 | |
| 		if ($ADVdbmerror) { &Error_DBM; }
 | |
| 		else {
 | |
| 			foreach $account (keys %DBMList) {
 | |
| 				next if ($account eq "adcount.txt");
 | |
| 				$Adverts_DBM{$account} = 1;
 | |
| 				$MasterList{$account} = 1;
 | |
| 				($dbmmax,$dbmshown,$dbmvisits,$dbmimage,$dbmstart,$dbmweight,
 | |
| 				  $dbmzone,$dbmraw,$dbmdisplayratio,$dbmclicksfrom) = split(/\t/,$DBMList{$account});
 | |
| 				$subdir = substr($account,0,1);
 | |
| 				$subdir .= "/$account";
 | |
| 				next unless (-s "$ADVadverts_dir/$subdir/$account.txt");
 | |
| 				open (DISPLAY, "<$ADVadverts_dir/$subdir/$account.txt");
 | |
| 				@lines = <DISPLAY>;
 | |
| 				close (DISPLAY);
 | |
| 				chomp (@lines);
 | |
| 				($max,$shown,$visits,$url,$image,$height,$width,
 | |
| 				  $alt,$pass,$text,$start,$weight,$zone,
 | |
| 				  $border,$target,$raw,$displayratio,$username,$email,
 | |
| 				  $displayzone,$clicksfrom) = @lines;
 | |
| 				if (($max eq $dbmmax) && ($shown eq $dbmshown) && ($visits eq $dbmvisits)
 | |
| 				  && ($start eq $dbmstart) && ($weight eq $dbmweight) && ($zone eq $dbmzone)
 | |
| 				  && ($displayratio eq $dbmdisplayratio) && ($clicksfrom eq $dbmclicksfrom)) {
 | |
| 					$Adverts_Match{$account} = 1;
 | |
| 				}
 | |
| 			}
 | |
| 			&ADVDBMClose;
 | |
| 		}
 | |
| 	}
 | |
| 	&ADVLockClose (DBMLIST, "dbmlist.txt");
 | |
| 	print "<P><CENTER><TABLE BORDER CELLPADDING=3>\n";
 | |
| 	print "<TR><TH>Account</TH><TH>List?</TH><TH>Physical?</TH><TH>DBM?</TH><TH>Match?</TH></TR>\n";
 | |
| 	foreach $key (sort (keys %MasterList)) {
 | |
| 		print "<TR><TD>$key</TD>";
 | |
| 		if ($Adverts_List{$key}) { print "<TD ALIGN=CENTER>X</TD>"; }
 | |
| 		else { print "<TD> </TD>"; $NotOK = 1; }
 | |
| 		if ($Adverts_Physical{$key}) { print "<TD ALIGN=CENTER>X</TD>"; }
 | |
| 		else { print "<TD> </TD>"; $NotOK = 1; }
 | |
| 		if ($Adverts_DBM{$key}) { print "<TD ALIGN=CENTER>X</TD>"; }
 | |
| 		else { print "<TD> </TD>"; $NotOK = 1; }
 | |
| 		if ($Adverts_Match{$key}) { print "<TD ALIGN=CENTER>X</TD>"; }
 | |
| 		else { print "<TD> </TD>"; $NotOK = 1; }
 | |
| 		print "</TR>\n";
 | |
| 	}
 | |
| 	print "</TABLE>\n<P><STRONG>";
 | |
| 	if ($NotOK) {
 | |
| 		print "There seem to be problems. Try rebuilding the database.\n";
 | |
| 		print "<P><FORM METHOD=POST ACTION=$admin_cgi>",
 | |
| 		  "<INPUT TYPE=HIDDEN NAME=password VALUE=$INPUT{'password'}>",
 | |
| 		  "<INPUT TYPE=SUBMIT NAME=rebuild VALUE=\"Rebuild Database\">",
 | |
| 		  "</FORM>\n";
 | |
| 	}
 | |
| 	else { print "Everything seems to be fine; all data is consistent.\n"; }
 | |
| 	print "</CENTER>\n";
 | |
| 	&LinkBack;
 | |
| 	&Footer;
 | |
| }
 | |
| 
 | |
| 1;
 | 
