212 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
			
		
		
	
	
			212 lines
		
	
	
		
			7.9 KiB
		
	
	
	
		
			PHP
		
	
	
		
			Executable File
		
	
	
| #!/usr/bin/php
 | |
| <?php
 | |
| 
 | |
| // TODO : we should accept a "-n" option that will mean : "don't do any action, but tell us" :) 
 | |
| 
 | |
| echo "Connecting to AlternC MySQL database... "; flush();
 | |
| 
 | |
| define('NOCHECK', 1);
 | |
| require_once("/var/alternc/bureau/class/config.php");
 | |
| 
 | |
| echo "done.\n";
 | |
| echo "------------------------------------------------------------\n";
 | |
| echo "Statistics : \n";
 | |
| 
 | |
| list($m1)=@mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM membres;"));
 | |
| echo " $m1 accounts\n";
 | |
| list($m2)=@mysql_fetch_array(mysql_query("SELECT COUNT(DISTINCT path) FROM mail_users;"));
 | |
| echo " $m2 pop accounts\n";
 | |
| list($m3)=@mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM domaines;"));
 | |
| echo " $m3 domains\n";
 | |
| list($m4)=@mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM sub_domaines;"));
 | |
| echo " $m4 subdomains\n";
 | |
| list($m5)=@mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM ftpusers;"));
 | |
| echo " $m5 ftp accounts\n";
 | |
| list($m6)=@mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM aws;"));
 | |
| if ($m6) echo " $m6 awstats statistics\n";
 | |
| list($m7)=@mysql_fetch_array(mysql_query("SELECT COUNT(*) FROM mailman;"));
 | |
| if ($m7) echo " $m7 mailing-lists using mailman\n";
 | |
| 
 | |
| if (!$m1 && !$m2 && !$m3 && !$m4 && !$m5) {
 | |
|   echo "All statistics are wrong. We certainly have a connection problem. Please check !\n";
 | |
|   exit();
 | |
| }
 | |
| 
 | |
| $checks=array(
 | |
| 	      "1" => "Change owner and group of pop mail accounts",
 | |
| 	      "2" => "Change owner and group of html folders",
 | |
| 	      "3" => "Remove non-existent pop accounts in /var/alternc/mail",
 | |
| 	      "4" => "Remove non-existent alternc accounts in /var/alternc/html",
 | |
| 	      "5" => "Delete subdomains of non-existents folders pointers (dangling links)",
 | |
| 	      "6" => "Delete ftp accounts of non-existents folders",
 | |
| 	      "7" => "Delete mailman mailing-lists in mailman alternc table who does not exists anymore in /var/lib/mailman/lists",
 | |
| 	      "8" => "Delete mailman mailing-lists in /var/lib/mailman/lists who does not exists anymore in mailman alternc table",
 | |
| 	      "100" => "Send anonymous statistics regarding your AlternC installation to alternc team",
 | |
| 	      );
 | |
| 
 | |
| echo "------------------------------------------------------------\n";
 | |
| echo "The following checks can be done : \n";
 | |
| foreach($checks as $k=>$v) {
 | |
|   echo " - $k : $v\n";
 | |
| }
 | |
| 
 | |
| if (!$argv[1]) {
 | |
|   do {
 | |
|     echo "\nPlease choose the check you want to do (or [a]ll of them) : ";
 | |
|     $f=fopen("php://stdin","rb");
 | |
|     $r=fgets($f,1024);
 | |
|     $r=strtolower(trim($r));
 | |
|   } while (!$r); 
 | |
| } else {
 | |
|   $r=strtolower(trim($argv[1]));
 | |
| }
 | |
| 
 | |
| 
 | |
| // Change owner and group of pop mail accounts
 | |
| if ($r=="1" || $r=="a") {
 | |
|   echo "========== ".$checks[1]." STARTING (".date("d/m/Y H:i:s").")\n";
 | |
|   $r=mysql_query("SELECT  DISTINCT(path),uid from mail_users;");
 | |
|   while ($c=mysql_fetch_array($r)) {
 | |
|     echo $c["path"]." ".$c["uid"]."\n";
 | |
|     if (substr($c["path"],0,17)=="/var/alternc/mail") {
 | |
|       if (is_dir($c["path"])) {
 | |
| 	exec("chown -R 33.".$c["uid"]." ".escapeshellarg($c["path"]));
 | |
|       } else {
 | |
| 	echo "WARNING: Folder ".$c["path"]." does not exist. Please do relevant check to delete associated pop account\n";
 | |
|       }
 | |
|     } else {
 | |
|       echo "SKIPPED\n";
 | |
|     }
 | |
|   }
 | |
|   echo "========== ".$checks[1]." ENDING (".date("d/m/Y H:i:s").")\n";
 | |
| }
 | |
| 
 | |
| 
 | |
| // Change owner and group of html folders
 | |
| if ($r=="2" || $r=="a") {
 | |
|   echo "========== ".$checks[2]." STARTING (".date("d/m/Y H:i:s").")\n";
 | |
|   $r=mysql_query("SELECT uid,login FROM membres;");
 | |
|   while ($c=mysql_fetch_array($r)) {
 | |
|     echo $c["login"]." ".$c["uid"]."\n";
 | |
|     if (is_dir("/var/alternc/html/".substr($c["login"],0,1)."/".$c["login"])) { 
 | |
|       exec("chown -R 33.".$c["uid"]." ".escapeshellarg("/var/alternc/html/".substr($c["login"],0,1)."/".$c["login"]));
 | |
|     } else {
 | |
|       echo "WARNING: Folder "."/var/alternc/html/".substr($c["login"],0,1)."/".$c["login"]." does not exist. Please do relevant check to delete associated alternc account, or recreate the folder\n";
 | |
|     }
 | |
|   }
 | |
|   echo "========== ".$checks[2]." ENDING (".date("d/m/Y H:i:s").")\n";
 | |
| }
 | |
| 
 | |
| 
 | |
| // Remove non-existent pop accounts in /var/alternc/mail
 | |
| if ($r=="3" || $r=="a") {
 | |
|   echo "========== ".$checks[3]." STARTING (".date("d/m/Y H:i:s").")\n";
 | |
|   $mail="/var/alternc/mail";
 | |
|   $d1=opendir($mail);
 | |
|   while (($c1=readdir($d1))!==false) {
 | |
|     if (substr($c1,0,1)!="." && is_dir($mail."/".$c1)) {
 | |
|       $d2=opendir($mail."/".$c1);
 | |
|       while ($c2=readdir($d2)) {
 | |
| 	if (substr($c2,0,1)!="." && is_dir($mail."/".$c1."/".$c2)) {
 | |
| 	  // Ok, we have a mail folder in /var/alternc/mail/p/popaccount_domain.tld/ Let's check it in the db : 
 | |
| 	  list($alias)=@mysql_fetch_array(mysql_query("SELECT alias FROM mail_users WHERE path='".addslashes($mail."/".$c1."/".$c2)."';"));
 | |
| 	  if (!$alias) {
 | |
| 	    echo "WARNING: NOT FOUND: ".$mail."/".$c1."/".$c2.", deleting old pop folder.\n";
 | |
| 	    exec("rm -rf ".escapeshellarg($mail."/".$c1."/".$c2));
 | |
| 	  } else {
 | |
| 	    echo $alias." OK\n";
 | |
| 	  }
 | |
| 	} elseif (is_file($mail."/".$c1."/".$c2)) {
 | |
| 	  echo "WARNING: File ".$mail."/".$c1."/".$c2." unexpected. You may delete it...\n";
 | |
| 	}
 | |
|       }
 | |
|       closedir($d2);
 | |
|     } elseif (is_file($mail."/".$c1)) {
 | |
|       echo "WARNING: File ".$mail."/".$c1." unexpected. You may delete it...\n";
 | |
|     }
 | |
| 
 | |
|   }
 | |
|   closedir($d1);
 | |
|   echo "========== ".$checks[3]." ENDING (".date("d/m/Y H:i:s").")\n";
 | |
| }
 | |
| 
 | |
| 
 | |
| // Remove non-existent alternc accounts in /var/alternc/html
 | |
| if ($r=="4" || $r=="a") {
 | |
|   echo "========== ".$checks[4]." STARTING (".date("d/m/Y H:i:s").")\n";
 | |
|   $html="/var/alternc/html";
 | |
|   $d1=opendir($html);
 | |
|   while (($c1=readdir($d1))!==false) {
 | |
|     if (substr($c1,0,1)!="." && is_dir($html."/".$c1)) {
 | |
|       $d2=opendir($html."/".$c1);
 | |
|       while ($c2=readdir($d2)) {
 | |
| 	if (substr($c2,0,1)!="." && is_dir($html."/".$c1."/".$c2)) {
 | |
| 	  // Ok, we have a html folder in /var/alternc/html/u/user/ Let's check it in the db : 
 | |
| 	  if (substr($c2,0,1)!=$c1) {
 | |
| 	    echo "WARNING: html folder is inconsistent in ".$html."/".$c1."/".$c2." YOU SHOULD FIX IT MANUALLY !\n";
 | |
| 	  } else {
 | |
| 	    list($uid)=@mysql_fetch_array(mysql_query("SELECT uid FROM membres WHERE login='".addslashes($c2)."';"));
 | |
| 	    if (!$uid) {
 | |
| 	      echo "WARNING: NOT FOUND: ".$html."/".$c1."/".$c2.", deleting old alternc account.\n";
 | |
| 	      exec("rm -rf ".escapeshellarg($html."/".$c1."/".$c2));
 | |
| 	    } else {
 | |
| 	      echo $c2." (".$uid.") OK\n";
 | |
| 	    }
 | |
| 	  }
 | |
| 	} elseif (is_file($html."/".$c1."/".$c2)) {
 | |
| 	  echo "WARNING: File ".$html."/".$c1."/".$c2." unexpected. You may delete it...\n";
 | |
| 	}
 | |
|       }
 | |
|       closedir($d2);
 | |
|     } elseif (is_file($html."/".$c1)) {
 | |
|       echo "WARNING: File ".$html."/".$c1." unexpected. You may delete it...\n";
 | |
|     }
 | |
|   }
 | |
|   closedir($d1);
 | |
|   echo "========== ".$checks[4]." ENDING (".date("d/m/Y H:i:s").")\n";
 | |
| }
 | |
| 
 | |
| // Delete subdomains of non-existents folders pointers (dangling links)
 | |
| if ($r=="5" || $r=="a") {
 | |
|   echo "========== ".$checks[5]." STARTING (".date("d/m/Y H:i:s").")\n";
 | |
|   echo "NOT YET IMPLEMENTED\n";
 | |
|   echo "========== ".$checks[5]." ENDING (".date("d/m/Y H:i:s").")\n";
 | |
| }
 | |
| 
 | |
| 
 | |
| // Delete ftp accounts of non-existents folders
 | |
| if ($r=="6" || $r=="a") {
 | |
|   echo "========== ".$checks[6]." STARTING (".date("d/m/Y H:i:s").")\n";
 | |
|   echo "NOT YET IMPLEMENTED\n";
 | |
|   echo "========== ".$checks[6]." ENDING (".date("d/m/Y H:i:s").")\n";
 | |
| }
 | |
| 
 | |
| 
 | |
| // Delete mailman mailing-lists in mailman alternc table who does not exists anymore in /var/lib/mailman/lists
 | |
| if ($r=="7" || $r=="a") {
 | |
|   echo "========== ".$checks[7]." STARTING (".date("d/m/Y H:i:s").")\n";
 | |
|   echo "NOT YET IMPLEMENTED\n";
 | |
|   echo "========== ".$checks[7]." ENDING (".date("d/m/Y H:i:s").")\n";
 | |
| }
 | |
| 
 | |
| 
 | |
| // Delete mailman mailing-lists in /var/lib/mailman/lists who does not exists anymore in mailman alternc table
 | |
| if ($r=="8" || $r=="a") {
 | |
|   echo "========== ".$checks[8]." STARTING (".date("d/m/Y H:i:s").")\n";
 | |
|   echo "NOT YET IMPLEMENTED\n";
 | |
|   echo "========== ".$checks[8]." ENDING (".date("d/m/Y H:i:s").")\n";
 | |
| }
 | |
| 
 | |
| 
 | |
| // Send anonymous statistics to AlternC team.
 | |
| if ($r=="100" || $r=="a") {
 | |
|   $f=fopen("http://svn.alternc.org/stats.php?m1=$m1&m2=$m2&m3=$m3&m4=$m4&m5=$m5&m6=$m6&m7=$m7","rb");
 | |
|   if ($f) {
 | |
|     while ($s=fgets($f,1024)) {
 | |
|     }
 | |
|     fclose($f);
 | |
|   }
 | |
|  }
 | |
| 
 | |
| 
 | |
| ?>
 |