#!/usr/bin/php
<?php

    //$vhdir="/etc/apache2-old-chroot/vhost.d";
    $vhdir="/etc/apache2-chroot/vhost.d";

    $ini=parse_ini_file("/etc/sys-admin/config/sys-admin.conf",true);
    include('/web/sys/admin/sysadmin/config/config.php');

    $myconn=mysql_connect($ini['mysql']['host'], $CONFIG['db_user'], $CONFIG['db_pass']) or die("Unable to connect database server!");
    $mydb=mysql_select_db($CONFIG['db_name']) or die("Unable to select database ($CONFIG[db_name])!");

    //$myconn=mysql_connect($ini['mysql']['host'], $ini['mysql']['user'], $ini['mysql']['password']) or die("Cannot connect to MySQL server.\n");
    //$mydb=mysql_select_db($ini['mysql']['db'], $myconn) or die("DB error (".$ini['mysql']['db'].")\n");

    $sectld =$CONFIG['sectld'];
    $def_writable=implode("\n",$CONFIG['def_writable']);

# functions

function nullquote($str) {
    if ($str==NULL) { $quoted="NULL"; } else { $quoted="'$str'"; }
    return $quoted;
}

function vh($vhname) {

    global $sectld;

    $vhnarr=explode(".",$vhname);
    $len=count($vhnarr);

    $lentld=$len-1;
    $lendom=$len-2;
    $lenhost=$len-3;
    $tld=$vhnarr[$lentld];
    $domn=$vhnarr[$lendom];

    if ( preg_match("#^(".$sectld.")$#", $domn) ) {
	$lendom=$len-3;
	$lenhost=$len-4;
	$domn=$vhnarr[$lendom].".".$domn;
    }

    $domname=$domn.".".$tld;
    $hostname="";
    for ($di = 0; $di <= $lenhost; $di++) {
	if ($di!=0) { $hostname.="."; }
	$hostname.=$vhnarr[$di];
    }

    $vharr[0]=$hostname;
    $vharr[1]=$domname;
    return $vharr;
}

# start

if (count($argv<2) || $argv[1]!="SURE")
{
    echo "*** TESTING *** TESTING *** TESTING *** TESTING ***\n";
}

exec ("grep -hE 'Server(Name|Alias)' $vhdir/*",$lines);

foreach ($lines as $line) {
    $line=trim($line, "\r\t ");
    $line=str_replace("\t"," ",$line);
    $line=preg_replace('/ +/', ' ', $line);
    $parts=explode(" ", $line);
    if ($parts[0]=="ServerName") {
	$sn=$parts[1];
    }
    if (($parts[0]=="ServerName" || $parts[0]=="ServerAlias") && $parts[1]!="") {
	$vhd[$sn][]=$parts[1];
    }
}

foreach ($vhd as $vhname => $vhaliases) {

    $mainvhnarr=vh($vhname);
    $vhhn=$mainvhnarr[0];
    $vhdn=$mainvhnarr[1];

    if (empty($vhhn)) { $vhhn="www"; }

    $sql="SELECT
	    domain.id AS domid,
	    domain.name AS domname
            FROM domain
        LEFT JOIN client ON domain.clientid=client.id
        WHERE domain.name='$vhdn';";
    $res=mysql_query($sql);
    if ( mysql_num_rows($res)!=1 ) { echo "ERROR: Domain doesn't exist in database: $vhdn\n"; die (3);  }
    while ($domrow = mysql_fetch_array($res)) { $domid=$domrow['domid']; }

    echo "\n$vhhn(.)$vhdn [$domid]\n";

    $intaliasarr=array();
    $intaliaslist="";
    $aliasarr=array();
    $aliaslist="";

    foreach($vhaliases as $vhalias) {
	if ( substr($vhalias,0,4)=="www.") {
	    $vhalias=substr($vhalias,4);
	}
	if ( $vhalias!="$vhdn" && $vhalias!="$vhhn.$vhdn" && $vhalias!="www.$vhhn.$vhdn" ) {
	    $pos=strpos($vhalias,$vhdn);
	    if ($pos!=0 && (strlen($vhalias)-strlen($vhdn)==$pos)) {
		$intalias=substr($vhalias,0,$pos-1);
		if (!(in_array($intalias, $intaliasarr))) {
		    $intaliasarr[]=$intalias;
		}
	    } else {
		if (!(in_array($vhalias, $aliasarr))) {
		    $aliasarr[]=$vhalias;
		}
	    }
	}
    }

    $intaliaslist=implode("\n",$intaliasarr);
    $aliaslist=implode("\n",$aliasarr);
    $intaliaslisti=nullquote($intaliaslist);
    $aliaslisti=nullquote($aliaslist);

    if ($intaliaslist!="") { echo "INT aliases:\n$intaliaslist\n"; }
    if ($aliaslist!="") { echo "EXT aliases:\n$aliaslist\n"; }

    $isql="INSERT INTO `vhosts` SET `domainid`='$domid', `host`='$vhhn', `alias`=$intaliaslisti, `ext_alias`=$aliaslisti, `writable`='$def_writable', active=1;";

    //echo "$isql\n";
    if (count($argv)>1 && $argv[1]=="SURE")
    {
	$ires=mysql_query($isql);
	$myerr=mysql_error();
	if ($myerr!="") { echo "WARNING: MySQL: $myerr\n"; }
    }

}

if (count($argv)<2 || $argv[1]!="SURE")
{
    echo "\n*** TESTING *** TESTING *** TESTING *** TESTING ***\n";
    echo "I haven't done anything yet. Enter SURE as argument to run for real.\n";
}

?>