From b6576085976d344f86db53c6bdc500d402ab1cb2 Mon Sep 17 00:00:00 2001
From: Benjamin Sonntag <benjamin@alternc.org>
Date: Sun, 20 Nov 2011 12:08:10 +0000
Subject: [PATCH] adding '-n' option to alternc-check and implement check  #5

---
 src/alternc-check | 50 +++++++++++++++++++++++++++++++++++++++++------
 1 file changed, 44 insertions(+), 6 deletions(-)

diff --git a/src/alternc-check b/src/alternc-check
index a9951d70..73350614 100755
--- a/src/alternc-check
+++ b/src/alternc-check
@@ -3,6 +3,21 @@
 
 // TODO : we should accept a "-n" option that will mean : "don't do any action, but tell us" :) 
 
+$DONTDO=false;
+if ($argv[1]=="-n") {
+  array_shift($argv);
+  $DONTDO=true;
+  echo "'DONT DO' mode enabled, will NOT do anything for real\n";
+  function doexec($str) {
+    echo "EXECUTING $str\n";
+    return true;
+  }
+} else {
+  function doexec($str) {
+    return exec($str);
+  }
+}
+
 echo "Connecting to AlternC MySQL database... "; flush();
 
 define('NOCHECK', 1);
@@ -70,7 +85,7 @@ if ($r=="1" || $r=="a") {
     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"]));
+	doexec("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";
       }
@@ -89,7 +104,7 @@ if ($r=="2" || $r=="a") {
   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"]));
+      doexec("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";
     }
@@ -111,8 +126,8 @@ if ($r=="3" || $r=="a") {
 	  // 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));
+	    echo "WARNING: NOT FOUND: ".$mail."/".$c1."/".$c2." deleting old pop folder.\n";
+	    doexec("rm -rf ".escapeshellarg($mail."/".$c1."/".$c2));
 	  } else {
 	    echo $alias." OK\n";
 	  }
@@ -148,7 +163,7 @@ if ($r=="4" || $r=="a") {
 	    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));
+	      doexec("rm -rf ".escapeshellarg($html."/".$c1."/".$c2));
 	    } else {
 	      echo $c2." (".$uid.") OK\n";
 	    }
@@ -168,8 +183,31 @@ if ($r=="4" || $r=="a") {
 
 // Delete subdomains of non-existents folders pointers (dangling links)
 if ($r=="5" || $r=="a") {
+  $html="/var/alternc/html";
   echo "========== ".$checks[5]." STARTING (".date("d/m/Y H:i:s").")\n";
-  echo "NOT YET IMPLEMENTED\n";
+  $r=mysql_query("SELECT m.uid,m.login,s.valeur,s.domaine,s.sub FROM sub_domaines s, membres m WHERE m.uid=s.compte AND s.type='VHOST' AND s.web_action='OK';");
+  while ($c=mysql_fetch_array($r)) {
+    $valeur=trim($c["valeur"],"/");
+    if (is_dir($html."/".substr($c["login"],0,1)."/".$c["login"]."/".$valeur)) { 
+      echo $c["sub"].(($c["sub"])?".":"").$c["domaine"]." OK\n";
+    } else {
+      echo $c["sub"].(($c["sub"])?".":"").$c["domaine"]." Points to '".$html."/".substr($c["login"],0,1)."/".$c["login"]."/".$valeur."' which doesn't exist. Deleting this subdomain\n";
+      if ($DONTDO) {
+	echo "calling dom->del_sub_domain('".$c["domaine"]."','".$c["sub"].",'VHOST','".$valeur."')\n";
+      } else {
+	if (!$mem->su($c["uid"])) {
+	  echo "WARNING: Cannot su to ".$c["uid"]." skipping.\n";
+	} else {
+	  $dom->lock();
+	  if (!$dom->del_sub_domain($c["domaine"],$c["sub"],'VHOST',$c["valeur"])) {
+	    echo "WARNING : del_sub_domain failed with '".$err->errstr()."'\n";
+	  }
+	  $dom->unlock();
+	  $mem->unsu();
+	}
+      }
+    }
+  }
   echo "========== ".$checks[5]." ENDING (".date("d/m/Y H:i:s").")\n";
 }