From d151c184a5d2f251891ebadbde9bc664522516ba Mon Sep 17 00:00:00 2001 From: opensides Date: Thu, 27 Mar 2008 21:39:22 +0000 Subject: [PATCH 1/1] - Cleanup before release git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5-plugins@10040 594d385d-05f5-0310-b6e9-bd551577e9d8 --- vhost-apache2/gen_locale.sh | 169 +++++++ vhost-apache2/plugin.dsc | 5 + .../apache2/class_servApacheEditVhost.inc | 454 ++++++++++++++++++ .../systems/apache2/class_servApacheVhost.inc | 272 +++++++++++ .../systems/apache2/functions_apache.inc | 257 ++++++++++ .../systems/apache2/servApacheVhost.tpl | 14 + .../systems/apache2/servApacheVhostEdit.tpl | 120 +++++ 7 files changed, 1291 insertions(+) create mode 100755 vhost-apache2/gen_locale.sh create mode 100644 vhost-apache2/plugin.dsc create mode 100644 vhost-apache2/systems/apache2/class_servApacheEditVhost.inc create mode 100644 vhost-apache2/systems/apache2/class_servApacheVhost.inc create mode 100644 vhost-apache2/systems/apache2/functions_apache.inc create mode 100644 vhost-apache2/systems/apache2/servApacheVhost.tpl create mode 100644 vhost-apache2/systems/apache2/servApacheVhostEdit.tpl diff --git a/vhost-apache2/gen_locale.sh b/vhost-apache2/gen_locale.sh new file mode 100755 index 000000000..4960be833 --- /dev/null +++ b/vhost-apache2/gen_locale.sh @@ -0,0 +1,169 @@ +#!/bin/sh + +generate_po() { + ORIG=`pwd` + TEMPDIR="/tmp/gosa-locale" + TRUE=`which true` + + echo + echo "Creating temporary directory..." + [ -d $TEMPDIR ] && rm -rf $TEMPDIR + mkdir $TEMPDIR + + echo "Creating copy of GOsa..." + tar c . | tar x -C $TEMPDIR + + echo "Converting .tpl files..." + pushd . &> /dev/null + cd $TEMPDIR + + for template in $(find . -name '*.tpl'); do + echo "* converting .tpl files: $(basename $template)" + sed -e 's/{t}/!g' $template > $template.new + mv $template.new $template + done + + for class in $(find . -name 'class_*.inc'); do + echo "* converting class_*.inc files: $(basename $class)" + sed -e 's/\($pl[DH][^=]*\)= *"\([^"]*\)";$/\1= _("\2");/g' $class > $class.new + mv $class.new $class + done + + echo "Extracting languages..." + rm locale/messages.po + find . -name '*.[ctpi][ophn][nlpc]' | xgettext -f - --keyword=must -d Domain -L PHP -n -o locale/messages.po + + echo "Merging po files with existing ones" + error=0 + for f in locale/??/LC_MESSAGES; do + echo -n "* merging $f/messages.po: " + [ -f $f/messages.po ] && msgmerge $f/messages.po locale/messages.po --output-file=$f/messages.po.new &> /dev/null + + # Do an extra check for dummy dir 'locale/en/LC_MESSAGES' + if [ $? -ne 0 ]; then + [ "$f" == "locale/en/LC_MESSAGES" ] && $TRUE + fi + + if [ $? -eq 0 ]; then + echo "done"; + else + echo "failed"; + error=1 + fi + + done + + echo "Copying new po files, making backups..." + find . -name messages.po | while read f; do + + if [ -f $ORIG/$f ]; then + mv $ORIG/$f $ORIG/$f.orig + else + continue + fi + + echo $f | grep -q "locale/messages.po" + if [ $? -ne 0 ]; then + echo "* replaced $ORIG/$f" + cp $f.new $ORIG/$f + else + cp $f $ORIG/$f + fi + + done + + rm -rf $TEMPDIR + + echo + error=0 + if [ $error -eq 0 ]; then + if [ $ASSUME_Y -eq 1 ]; then + find $ORIG/ -type f -name 'messages.po.orig' -exec rm -f {} \; + else + read -p "Do you want to erase the message.po.orig files? (y/n)" -n1 ans + + if [ "$ans" == "y" -o "$ans" == "Y" ]; then + find $ORIG/ -type f -name 'messages.po.orig' -exec rm -f {} \; + fi + fi + + else + echo "There were errors during the transition. Please fix!" + exit 1 + fi + +cat <<-EOF + +--------------------------------------------------------------------- + +Now edit all files that have been replaced above (i.e. using kbabel +or gtranslator) and mail the changes to gosa@oss.gonicus.de to be +included in the next release. + +To see the changes you've made in GOsa, run "msgfmt messages.po" on +your freshly edited files and restart your apache after that. Set +the webbrowser to the language you've edited and go back to the +login screen. + +--------------------------------------------------------------------- + +EOF + + popd &> /dev/null +} + +compile_po() +{ + po='messages.po' + mo='messages.mo' + + echo "Compiling po files..." + for f in locale/??/LC_MESSAGES; do + + if [ -f $f/$po ]; then + echo "* compiling $f/$po" + msgfmt $f/$po -o $f/$mo + else + echo "! skipped $f/$po - does not exist" + error=1 + continue + fi + + done +} + +# +# MAIN +# +GENERATE=0 +COMPILE=0 +ASSUME_Y=0 +while getopts ":cgyh" opt +do + case $opt in + c) COMPILE=1 + ;; + g) GENERATE=1; + ;; + y) ASSUME_Y=1; + ;; + h|--help) + echo "Usage: $(basename $0) [-c] [-g] [-y]" + echo " -c compile existing po files into mo files" + echo " -g extract strings from GOsa and generate po files" + echo " -y assume yes" + exit 1 + ;; + esac +done +shift $(($OPTIND - 1)) + +# Default to generate +if [ $GENERATE -eq 0 -a $COMPILE -eq 0 ]; then + GENERATE=1 +fi + +[ $GENERATE -eq 1 ] && generate_po +[ $COMPILE -eq 1 ] && compile_po + +# vim:tabstop=2:expandtab:shiftwidth=2:syntax:ruler: diff --git a/vhost-apache2/plugin.dsc b/vhost-apache2/plugin.dsc new file mode 100644 index 000000000..f9dfa3a63 --- /dev/null +++ b/vhost-apache2/plugin.dsc @@ -0,0 +1,5 @@ +[gosa-plugin] +name = apache2 +description = "Apache2 vhost management module" +version = 2.5 +author = "Alejandro Escanero " diff --git a/vhost-apache2/systems/apache2/class_servApacheEditVhost.inc b/vhost-apache2/systems/apache2/class_servApacheEditVhost.inc new file mode 100644 index 000000000..1b0b61725 --- /dev/null +++ b/vhost-apache2/systems/apache2/class_servApacheEditVhost.inc @@ -0,0 +1,454 @@ +OldApacheServerName = ""; + $this->isNew = true; + + $this->InitialApacheServerName = "";//$attrs['InitialApacheServerName']; + }else{ + $this->VhostObject = $attrs; + + $this->OldApacheServerName = $attrs['apacheServerName']; + + $this->InitialApacheServerName = $attrs['InitialApacheServerName']; + + $this->isNew = false; + + foreach($this->attributes as $value){ + if(isset($attrs[$value])){ + $this->$value = $attrs[$value]; + } + } + + if(!isset($attrs['apacheServerAlias'])) $this->apacheServerAlias = array(); + if(!isset($attrs['apacheScriptAlias'])) $this->apacheScriptAlias = array(); + + } + } + + /* Transports the given Arraykey one position up*/ + function ArrayUp($atr,$attrs) + { + $ret = $attrs; + $pos = $atr ; + $cn = count($attrs); + if(!(($pos == -1)||($pos == 1)||($pos >$cn))){ + $before = array_slice($attrs,0,($pos-2)); + $mitte = array_reverse(array_slice($attrs,($pos-2),2)); + $unten = array_slice($attrs,$pos); + $ret = array(); + $ret = $this->combineArrays($before,$mitte,$unten); + } + return($ret); + } + + + /* Transports the given Arraykey one position down*/ + function ArrayDown($atr,$attrs) + { + $ret = $attrs; + $pos = $atr ; + $cn = count($attrs); + if(!(($pos == -1)||($pos == $cn))){ + $before = array_slice($attrs,0,($pos-1)); + $mitte = array_reverse(array_slice($attrs,($pos-1),2)); + $unten = array_slice($attrs,($pos+1)); + $ret = array(); + $ret = $this->combineArrays($before,$mitte,$unten); + } + return($ret); + } + + /* Combine new array */ + function combineArrays($ar0,$ar1,$ar2) + { + $ret = array(); + if(is_array($ar0)) + foreach($ar0 as $ar => $a){ + $ret[]=$a; + } + if(is_array($ar1)) + foreach($ar1 as $ar => $a){ + $ret[]=$a; + } + if(is_array($ar2)) + foreach($ar2 as $ar => $a){ + $ret[]=$a; + } + return($ret); + } + + function getpos($atr,$attrs) + { + $i = 0; + foreach($attrs as $attr => $name) { + $i++; + if($attr == $atr){ + return($i); + } + } + return(-1); + } + + + function execute() + { + /* Call parent execute */ + plugin::execute(); + + + /* Fill templating stuff */ + $smarty= get_smarty(); + $display= ""; + + /* Open Vhost Entry Edit Dialog + */ + if(!count($this->VhostObject)){ + $smarty->assign("AllowVhostEdit" , false); + }else{ + $smarty->assign("AllowVhostEdit" , true); + if(isset($_POST['EditVhostEntries'])){ + $this->dialog= new apacheVhostEditEntries($this->config,$this->dn,$this->VhostObject); + } + } + + /* Save Vhost Entry Edit Dialog + */ + if(isset($_POST['SaveVhostEntryChanges'])){ + $this->dialog->save_object(); + if(count($this->dialog->check())){ + $msgs = $this->dialog->check(); + foreach($msgs as $msg){ + print_red($msg); + } + }else{ + $this->dialog->save(); + $this->dialog = false; + } + } + + /* Cancel Vhost Entrie Edit Dialog + */ + if(isset($_POST['CancelVhostEntryChanges'])){ + $this->dialog = false; + } + + /* Display any type of open dialogs + */ + if($this->dialog){ + $this->dialog->save_object(); + return($this->dialog->execute()); + } + + $once =true; + foreach($_POST as $name => $value){ + if((preg_match("/^SAup_/",$name)) && ($once)){ + $once = false; + + $id = preg_replace("/^SAup_/","",$name); + $id = preg_replace("/_.*$/","",$id); + $id = base64_decode($id); + + $this->apacheServerAlias = $this->ArrayUp(($id+1),$this->apacheServerAlias); + } + if((preg_match("/^SAdown_/",$name)) && ($once)){ + $once = false; + + $id = preg_replace("/^SAdown_/","",$name); + $id = preg_replace("/_.*$/","",$id); + $id = base64_decode($id); + + $this->apacheServerAlias = $this->ArrayDown(($id+1),$this->apacheServerAlias); + } + if((preg_match("/^SAdel_/",$name)) && ($once)){ + $once = false; + + $id = preg_replace("/^SAdel_/","",$name); + $id = preg_replace("/_.*$/","",$id); + $id = base64_decode($id); + + unset($this->apacheServerAlias[$id]); + + $tmp =array(); + foreach($this->apacheServerAlias as $entry){ + $tmp[] = $entry; + } + + $this->apacheServerAlias = $tmp; + } + + if((preg_match("/^SCup_/",$name)) && ($once)){ + $once = false; + + $id = preg_replace("/^SCup_/","",$name); + $id = preg_replace("/_.*$/","",$id); + $id = base64_decode($id); + + $this->apacheScriptAlias = $this->ArrayUp(($id+1),$this->apacheScriptAlias); + } + if((preg_match("/^SCdown_/",$name)) && ($once)){ + $once = false; + + $id = preg_replace("/^SCdown_/","",$name); + $id = preg_replace("/_.*$/","",$id); + $id = base64_decode($id); + + $this->apacheScriptAlias = $this->ArrayDown(($id+1),$this->apacheScriptAlias); + } + if((preg_match("/^SCdel_/",$name)) && ($once)){ + $once = false; + + $id = preg_replace("/^SCdel_/","",$name); + $id = preg_replace("/_.*$/","",$id); + $id = base64_decode($id); + + unset($this->apacheScriptAlias[$id]); + + $tmp =array(); + foreach($this->apacheScriptAlias as $entry){ + $tmp[] = $entry; + } + + $this->apacheScriptAlias = $tmp; + } + + } + + if((isset($_POST['AddSARecord'])) && (!empty($_POST['StrSAAlias'])) && (!empty($_POST['StrSADir']))){ + $this->apacheServerAlias[] = trim($_POST['StrSAAlias']." ".$_POST['StrSADir']); + } + + if((isset($_POST['AddSCRecord'])) && (!empty($_POST['StrSCAlias'])) && (!empty($_POST['StrSCDir']))){ + $this->apacheScriptAlias[] = trim($_POST['StrSCAlias']." ".$_POST['StrSCDir']); + } + + /* Handle Post events */ + $once = true; + foreach($_POST as $name => $value){ + + /* Delete vhosts if requested */ + if((preg_match("/RemoveRecord_/",$name))&&($once)){ + $once = false; + $id= preg_replace("/RemoveRecord_/","",$name); + unset($this->Records[$id]); + } + } + + /* Add new Vhostrecord */ + /* if(isset($_POST['AddNewRecord'])){ + $this->Records[] = array("type"=>"aRecord","value"=>""); + }*/ + + /* Fill in values */ + foreach($this->attributes as $name){ + $smarty->assign($name,$this->$name); + } + + /* Set apacheServerNames without server suffix */ + $smarty->assign("apacheServerName",$this->apacheServerName); + + $div = new DivSelectBox("apacheServerAlias"); + $div->setHeight(120); + $recs = $this->apacheServerAlias; + + $oneup = " "; + $onedown = " "; + $onedel = " + "; + foreach($recs as $key => $rec){ + $div ->AddEntry(array( + array("string"=>$rec), +/* array("string"=>$key, + "attach"=>"style='width:20px;'"),*/ + array("string"=>str_replace("%s",base64_encode($key),$oneup.$onedown.$onedel), + "attach"=>"style='width:70px;border-right:0px;'") + )); + } + + $smarty->assign("NotNew", false); + + $smarty->assign("apacheServerAlias", $div->DrawList()); + + $div = new DivSelectBox("apacheScriptAlias"); + $div->setHeight(120); + $recs = $this->apacheScriptAlias; + + $oneup = " "; + $onedown = " "; + $onedel = " + "; + + foreach($recs as $key => $rec){ + $div ->AddEntry(array( + array("string"=>$rec), +/* array("string"=>$key, + "attach"=>"style='width:20px;'"),*/ + array("string"=>str_replace("%s",base64_encode($key),$oneup.$onedown.$onedel), + "attach"=>"style='width:70px;border-right:0px;'") + )); + } + + $smarty->assign("NotNew", false); + + $smarty->assign("apacheScriptAlias", $div->DrawList()); + + /* Display template */ + $display.= $smarty->fetch(get_template_path('servApacheVhostEdit.tpl', TRUE)); + return($display); + } + + function remove_from_parent() + { + } + + /* Save data to object */ + function save_object() + { + //plugin::save_object(); + foreach($this->attributes as $attr){ + if(isset($_POST[$attr])){ + $this->$attr = $_POST[$attr]; + } + } + + } + + + /* Check supplied data */ + function check() + { + /* Call common method to give check the hook */ + $message= plugin::check(); + + /* Check if apacheServerName is already in use */ + $usedVhosts = $this->getUsedServerNames(); + if(($this->isNew == true)||($this->apacheServerName != $this->InitialApacheServerName)){ +/* if((isset($usedVhosts[$this->apacheServerName]))&&($this->apacheServerName != $this->InitialApacheServerName)){ + $message[] =_("This apacheServerName is already in use"); + } +*/ + } + + if(!GetVhostsDomain($this->apacheServerName) || empty($this->apacheServerName)){ + $message[] =sprintf(_("Please choose a valid Virtual Host Name.")); + } + + if(!is_path($this->apacheDocumentRoot) || empty($this->apacheDocumentRoot)){ + $message[] = _("Please choose a valid Path as Virtual Host Document Root."); + } + + if(!is_email($this->apacheServerAdmin) || empty($this->apacheServerAdmin)){ + $message[] = _("Please choose a valid Email Account as Admin Mail address."); + } + + if($this->apacheServerName != strtolower($this->apacheServerName)){ + $message[] = _("Only lowercase strings are allowed as Virtual Host Name."); + } + + if($this->apacheDocumentRoot != strtolower($this->apacheDocumentRoot)){ + $message[] = _("Only lowercase strings are allowed as Virtual Host Document Root."); + } + + if($this->apacheServerAdmin != strtolower($this->apacheServerAdmin)){ + $message[] = _("Only lowercase strings are allowed as Admin Mail address."); + } + + foreach($this->apacheServerAlias as $key => $line){ + $apacheServerAlias_ar=split(" ",$line); + $url=$apacheServerAlias_ar[0]; + if(!is_path($url)){ + $message[] = sprintf(_("Please choose a valid Path as URL Alias Path in line: %s"),$line); + } + } + + foreach($this->apacheScriptAlias as $key => $line){ + $apacheScriptAlias_ar=split(" ",$line); + $url=$apacheScriptAlias_ar[0]; + if(!is_path($url)){ + $message[] = sprintf(_("Please choose a valid Path as URL Alias Path in line: %s"),$line); + } + } + + return ($message); + } + + /* This funtion returns all used apacheServerNames */ + function getUsedServerNames() + { + $ret = array(); + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=apacheConfig)(apacheServerName=*))",array("apacheServerName")); + while($attr = $ldap->fetch()){ + $ret[$attr['apacheServerName'][0]]=""; + } + return($ret); + } + + /* Save to LDAP */ + function save() + { + $ret =array(); + foreach($this->attributes as $name){ + $ret[$name] = $this->$name; + } + + /* Create SA records + */ + foreach($this->apacheServerAlias as $key => $rec){ + $rec['value']= $key." ".$rec['value']; + $this->Records [] = $rec; + } + + /* Create SC records + */ + foreach($this->apacheScriptAlias as $key => $rec){ + $rec['value']= $key." ".$rec['value']; + $this->Records [] = $rec; + } + + $ret['RECORDS'] = $this->Records; + + $ret['InitialApacheServerName'] = $this->InitialApacheServerName; + + return($ret); + } + +} + +?> diff --git a/vhost-apache2/systems/apache2/class_servApacheVhost.inc b/vhost-apache2/systems/apache2/class_servApacheVhost.inc new file mode 100644 index 000000000..4b97104b3 --- /dev/null +++ b/vhost-apache2/systems/apache2/class_servApacheVhost.inc @@ -0,0 +1,272 @@ +orig_dn = $dn; + + /* Get all vhost Informations + */ + $this->Vhosts = getVhostEntries($config,$dn); + + /* If there is at least one entry in this -> types, we have apache vhosts enabled + */ + if(count($this->Vhosts) == 0){ + $this->is_account = false; + }else{ + $this->is_account = true; + } + $this->APACHEinitially_was_account = $this->is_account; + } + + + function execute() + { + /* Call parent execute + */ + plugin::execute(); + + /* Fill templating stuff + */ + $smarty= get_smarty(); + $display= ""; + + /* Do we need to flip is_account state? + */ + if (isset($_POST['modify_state'])){ + + /* Only change account state if allowed */ + if($this->is_account && $this->acl == "#all#"){ + $this->is_account= !$this->is_account; + $this->is_modified = true; + }elseif(!$this->is_account && chkacl($this->acl,"create") == ""){ + $this->is_account= !$this->is_account; + $this->is_modified = true; + } + } + + if ($this->is_account){ + $display= $this->show_header(_("Remove Apache service"), + _("This server has Apache features enabled. You can disable them by clicking below.")); + } else { + $display= $this->show_header(_("Add Apache service"), + _("This server has Apache features disabled. You can enable them by clicking below.")); + return ($display); + } + + /* Edited or Added vhost + */ + if((isset($_POST['SaveVhostChanges'])) && is_object($this->dialog)){ + $this->dialog->save_object(); + + /* Check for errors + */ + if(count($this->dialog->check())){ + foreach($this->dialog->check() as $msgs){ + print_red($msgs); + } + }else{ + /* add new/edited vhost + */ + $ret = $this->dialog->save(); + if(!$this->dialog->isNew){ + unset($this->Vhosts[$this->dialog->OldApacheServerName]); + } + $this->Vhosts[$ret['apacheServerName']] = $ret; + $this->dialog = NULL; + } + } + + /* Cancel vhost edit / new + */ + if(isset($_POST['CancelVhostChanges'])){ + $this->dialog = NULL; + } + + /* Add empty new vhost + */ + if(isset($_POST['AddVhost']) && chkacl($this->acl,"servapache") == ""){ + $this->dialog = new servapacheVhostEdit($this->config,$this->dn); + } + + /* Check for edit vhost request + */ + $once = false; + foreach( $_POST as $name => $value){ + //user_error(print_r($this->Vhosts,true)); + /* check all post for edit request + */ + if(preg_match("/^editVhost_/",$name)&&!$once && chkacl($this->acl,"servapache") == ""){ + $once =true; + $tmp = preg_replace("/^editVhost_/","",$name); + $tmp = base64_decode(preg_replace("/_.*$/","",$tmp)); + $this->dialog= new servapacheVhostEdit($this->config,$this->dn,$this->Vhosts[$tmp]); + } + + /* check posts for delete vhost + */ + if(preg_match("/^delVhost_/",$name)&&!$once && chkacl($this->acl,"servapache") == ""){ + + $once =true; + $tmp = preg_replace("/^delVhost_/","",$name); + $tmp = base64_decode(preg_replace("/_.*$/","",$tmp)); + + /* Initiate deletion + */ + $this->RemoveVhost($tmp); + } + } + + /* Show dialog + */ + if($this->dialog!= NULL){ + $this->dialog->save_object(); + $this->dialog->parent = $this; + return($this->dialog->execute()); + } + + /* Create Listbox with existing Vhosts + */ + $VhostList = new divSelectBox("apacheConfigs"); + $VhostList -> SetHeight(254); + + /* Add entries to divlist + */ + $editImg = " + "; + foreach($this->Vhosts as $vhost => $values ){ + $VhostList->AddEntry(array( + array("string" => $vhost), + array("string" => str_replace("%s",base64_encode($vhost),$editImg)) + )); + } + + $smarty->assign("servapacheACL",chkacl($this->acl,"servapache")); + + /* Display template + */ + $smarty->assign("VhostList",$VhostList->DrawList()); + $display.= $smarty->fetch(get_template_path('servApacheVhost.tpl', TRUE)); + return($display); + } + + + /* Delete specified vhost + */ + function RemoveVhost($id) + { + unset($this->Vhosts[$id]); + return(true); + } + + + /* This function returns all used Vhostnames + */ + function getUsedServerNames() + { + $ret = array(); + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=apacheConfig)(apacheServerName=*))",array("apacheServerName")); + while($attr = $ldap->fetch()){ + $ret[$attr['apacheServerName'][0]][] = $attr['dn']; + } + return($ret); + } + + + /* Remove apache service + */ + function remove_from_parent() + { + if($this->APACHEinitially_was_account){ + $bool = true; + foreach($this->Vhosts as $key => $vhost){ + $bool= $bool & $this->RemoveVhost($key); + } + + if($bool){ + $this->save(); + } + return($bool); + } + } + + + /* Save to LDAP */ + function save() + { + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + + /* Get differences + */ + + $old_dn = $this->orig_dn; + if($old_dn == "new"){ + $old_dn = $this->dn; + } + + $tmp = getVhostEntriesDiff($this->config,$this->Vhosts,$old_dn); + + /* Updated vhost entries if reverser or forward name has changed + * Must be done before moving entries, else the given dn is invalid + */ + if(isset($tmp['vhostUpdates'])){ + foreach($tmp['vhostUpdates'] as $dn => $attrs){ + $ldap->cd($dn); + $ldap->modify($attrs); + show_ldap_error("Vhost:".$ldap->get_error(), _("Updating Apache service failed")); + } + } + + /* Delete apache vhost + */ + foreach($tmp['del'] as $dn => $del){ + $ldap->cd($dn); + $ldap->rmdir_recursive($dn); + show_ldap_error($ldap->get_error(), _("Removing Apache entries failed")); + } + + /* move follwoing entries + */ + foreach($tmp['move'] as $src => $dst){ + $this->recursive_move($src,$dst); + } + + /* Add || Update new apache entries + */ + foreach($tmp['add'] as $dn => $attrs){ + $ldap->cd($dn); +// user_error(print_r($dn,true)); + $ldap->cat($dn, array('dn')); + if(count($ldap->fetch())){ + $ldap->cd($dn); + $ldap->modify ($attrs); + }else{ + $ldap->cd($dn); + $ldap->add($attrs); + } + show_ldap_error($ldap->get_error(), _("Saving apache entries failed")); + } + } +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/vhost-apache2/systems/apache2/functions_apache.inc b/vhost-apache2/systems/apache2/functions_apache.inc new file mode 100644 index 000000000..9ed7ea4b9 --- /dev/null +++ b/vhost-apache2/systems/apache2/functions_apache.inc @@ -0,0 +1,257 @@ +get_ldap_link(); + $ldap->cd($config->current['BASE']); + + /* Get host entry */ + $ldap->cat($HostDn); + $host_attr = $ldap->fetch(); + + /* Create template for all fetched vhosts Data + */ + $VhostBase = array(); + $VhostBase['exists'] = false; + //$VhostBase['RECORDS'] = array(); + $VhostBase['apacheServerName'] = array(); + $VhostBase['apacheConfig'] = array(); + + $Vhosts = array(); + + /* Get & Parse all vhosts entries + */ + $ldap->ls("(&(objectClass=apacheConfig)(apacheServerName=*))",$HostDn,array("*")); + $tmp_res = array(); + while($attrs = $ldap->fetch()) { + $tmp_res[] = $attrs; + } + + /* Parse fetched vhosts + */ + foreach($tmp_res as $attrs){ + + $apacheServerName = $attrs['apacheServerName'][0]; + $apacheDocumentRoot = $attrs['apacheDocumentRoot'][0]; + $apacheServerAdmin = $attrs['apacheServerAdmin'][0]; + $Vhosts[$apacheServerName] = $VhostBase; + $Vhosts[$apacheServerName]['exists'] = true; + + /* Set basic attributes + */ + if(isset($attrs["apacheConfig"][0])){ + $Vhosts[$apacheServerName]["apacheConfig"] = $attrs["apacheConfig"][0]; + } + + /* Set initial vhosts name, to be able to detect if this entry was renamed + */ + $Vhosts[$apacheServerName]['InitialApacheServerName'] = $apacheServerName; + $Vhosts[$apacheServerName]['apacheServerName'] = $apacheServerName; + $Vhosts[$apacheServerName]['apacheDocumentRoot'] = $apacheDocumentRoot; + $Vhosts[$apacheServerName]['apacheServerAdmin'] = $apacheServerAdmin; + + + if (isset($attrs['apacheServerAlias'])){ + for($i = 0 ; $i < $attrs['apacheServerAlias']['count']; $i ++){ + $Vhosts[$apacheServerName]['apacheServerAlias'][] = $attrs['apacheServerAlias'][$i]; + } + } + + if (isset($attrs['apacheScriptAlias'])){ + for($i = 0 ; $i < $attrs['apacheScriptAlias']['count']; $i ++){ + $Vhosts[$apacheServerName]['apacheScriptAlias'][] = $attrs['apacheScriptAlias'][$i]; + } + } + + } + return($Vhosts); +} + + +/* This function compares two apache vhosts objects and returns an + * array with following indexes + * - delete, for vhost entries which must be deleted (only if vhost entries is removed) + * - rename, if a dn must be renamed, for example, the apacheServerName has changed + * - add, if there is a new vhost entries created + */ +function getVhostEntriesDiff($config,$newVhosts,$HostDn) +{ + $oldVhosts = getVhostEntries($config,$HostDn,true); + + $move = array(); + $add = array(); + $del = array(); + + /* Generate a template for vhosts with default values + */ + $zoneBase = array(); + $zoneBase['objectClass'] = array("top","apacheConfig"); + $zoneBase['apacheServerName'] = ""; + + /* Contains all renamed apacheServerNames + * For vhosts entry udpdates + */ + $PrePareVhostEntries = array(); + + /* Walk through all vhosts and detect renamed/added/deleted vhosts ... + */ + foreach($newVhosts as $name => $zone){ + + /* This vhosts was renamed + */ + if((!empty($zone['InitialApacheServerName'])) && ($zone['InitialApacheServerName'] != $zone['apacheServerName'])){ + + /* Move old vhosts to new position + */ + $oldDn = "apacheServerName=".$zone['InitialApacheServerName'].",".$HostDn; + $newDn = "apacheServerName=".$zone['apacheServerName'].",".$HostDn; + $PrePareVhostEntries[$zone['InitialApacheServerName']] = $zone['apacheServerName']; + $move [$oldDn] = $newDn; + } + + /* Get old vhosts if available + */ + $oldVhost=array(); + if(isset($oldVhosts[$zone['InitialApacheServerName']])){ + if(!empty($oldVhosts[$zone['InitialApacheServerName']])){ + $oldVhost = $oldVhosts[$zone['InitialApacheServerName']]; + } + } + + /* Create vhosts entry and put it in our add queue + */ + $newDn = "apacheServerName=".$zone['apacheServerName'].",".$HostDn; + $obj = $zoneBase; + $obj['apacheServerName'] = $zone['apacheServerName']; + $obj['apacheDocumentRoot'] = $zone['apacheDocumentRoot']; + $obj['apacheServerAdmin'] = $zone['apacheServerAdmin']; + + if(!empty($zone['apacheServerAlias'])) { + + foreach($zone['apacheServerAlias'] as $rec){ + $obj['apacheServerAlias'][] = $rec; + } + } + + if(!empty($zone['apacheScriptAlias'])) { + foreach($zone['apacheScriptAlias'] as $rec){ + $obj['apacheScriptAlias'][] = $rec; + } + } + + /* Append udpated Vhost Entry to our add queue + */ + $add[$newDn] = $obj; + + /* Remove currently managed vhosts from oldVhosts. + * this gives us the ability to detect removed vhosts + */ + if(isset($oldVhosts[$zone['InitialApacheServerName']])){ + unset($oldVhosts[$zone['InitialApacheServerName']]); + } + } + + /* The rest of our oldVhosts must be deleted + * because they are no longer available in newVhosts anymore. + */ + foreach($oldVhosts as $zone) { + $oldDn = "apacheServerName=".$zone['InitialApacheServerName'].",".$HostDn; + $del[$oldDn] = ""; + } + + /* Check for entries which must be updated + */ + $zoneUpdates = array(); + $udpate = array(); + if(count($PrePareVhostEntries)){ + $ldap = $config->get_ldap_link(); + foreach($PrePareVhostEntries as $FromVhostName => $ToVhostName){ + $ldap->cd($HostDn); + $ldap->search("(&(objectClass=apacheConfig)(apacheServerName=".$FromVhostName."))",array("apacheServerName")); + while($attrs = $ldap->fetch()){ + $zoneUpdates[$attrs['dn']] = array("apacheServerName"=>$ToVhostName); + } + } + } + + $ret = array("del" => $del , "move" => $move , "add" => $add,"vhostUpdates"=>$zoneUpdates); +// user_error(print_r($ret,true)); + return($ret); +} + +/* returns the dn for a specified zone + */ +function getVhostDN($config,$apacheServerNameMix) +{ + $ret = ""; + if(!strstr($apacheServerNameMix, '/')) { + print_red(sprintf(_("Undefined vhost name '%s'. Vhost name must look like this 'www.example.com or example.com'."),$apacheServerNameMix)); + return($ret); + } + + $apacheServerNameIndex = split("/",$apacheServerNameMix); + $apacheServerName = $apacheServerNameIndex[1]; + $nameServer = strtolower($apacheServerNameIndex[0]); + $ldap = $config->get_ldap_link(); + + /* search for the nameserver */ + $ldap-> cd($config->current['BASE']); + $ldap->search("(&(objectClass=goServer)(cn=".$nameServer."))",array("cn")); + if($ldap->count()){ + $attr = $ldap->fetch(); + } else { + return($ret); + } + + $ldap-> cd($attr['dn']); + $ldap->search("(&(objectClass=apacheConfig)(apacheServerName=".$apacheServerName."))",array("apacheServerName")); + if($ldap->count()){ + $attr = $ldap->fetch(); + return($attr['dn']); + } + + return($ret); +} + + +/* returns all available vhosts + * array[reverseName] = apacheServerName; + */ +function getAvailableVhosts($config) +{ + $ret = array(); + $ldap = $config->get_ldap_link(); + $ldap->cd ($config->current['BASE']); + + /* Search for vhosts ... + */ + $ldap->search("(&(objectClass=apacheConfig)(apacheServerName=*))",array("apacheServerName")); + + $ForwardVhosts = array(); + $zones = array(); + + while($at = $ldap->fetch()){ + $ForwardVhosts[$at['dn']] = $at; + } + + foreach($ForwardVhosts as $dn => $obj){ + + if(preg_match("/".$dn."/",$Rdn)){ + $zones[$Robj['apacheServerName'][0]] =$obj['apacheServerName'][0]; + } + } + return($zones); +} + +/* Simple is domain check, it checks if the given string looks like "string.string.string" + or string.string */ +function GetVhostsDomain($str) +{ + return(preg_match("/[^\.\/]+\.[^\.\/]+$/",$str)); +} + +?> diff --git a/vhost-apache2/systems/apache2/servApacheVhost.tpl b/vhost-apache2/systems/apache2/servApacheVhost.tpl new file mode 100644 index 000000000..a1449753b --- /dev/null +++ b/vhost-apache2/systems/apache2/servApacheVhost.tpl @@ -0,0 +1,14 @@ +

{t}Apache VHosts{/t}

+ + + + +
+ {$VhostList} + +
+ diff --git a/vhost-apache2/systems/apache2/servApacheVhostEdit.tpl b/vhost-apache2/systems/apache2/servApacheVhostEdit.tpl new file mode 100644 index 000000000..3044f9d1b --- /dev/null +++ b/vhost-apache2/systems/apache2/servApacheVhostEdit.tpl @@ -0,0 +1,120 @@ +

{t}Generic{/t}

+ + + + + +
+ + + + + + + + + + + + + +
{t}Virtual Host Name{/t}{$must} + +
{t}Virtual Host Document Root{/t}{$must} + +
{t}Admin Mail address{/t}{$must} + +
+
+ + + + +
+

{t}Server Alias{/t}

+ + + + + + + +
+ {$apacheServerAlias} +
+ + + + + + + + + +
+

{t}URL Alias{/t}

+
+

{t}Directory Path{/t}

+
+ + + + +
+
+
+
+ +

 

+
+ + + + + + +
+

{t}Script Alias{/t}

+ + + + + + + +
+ {$apacheScriptAlias} +
+ + + + + + + + + +
+

{t}Alias Directory{/t}

+
+

{t}Script Directory{/t}

+
+ + + + +
+
+
+
+
+

+ + +

+
+ -- 2.30.2