From d053cb07eeb77c0252e23a28de0c834f8442897d Mon Sep 17 00:00:00 2001 From: tbrehm <t.brehm@ispconfig.org> Date: Sat, 14 Feb 2009 10:54:34 -0500 Subject: [PATCH] Fixed moving of site when the client is changed. --- server/plugins-available/apache2_plugin.inc.php | 429 +++++++++++++++++++++++++++++++++++++++++++++++------ 1 files changed, 378 insertions(+), 51 deletions(-) diff --git a/server/plugins-available/apache2_plugin.inc.php b/server/plugins-available/apache2_plugin.inc.php index 2bc6089..3a5cbda 100644 --- a/server/plugins-available/apache2_plugin.inc.php +++ b/server/plugins-available/apache2_plugin.inc.php @@ -36,6 +36,19 @@ // private variables var $action = ''; + //* This function is called during ispconfig installation to determine + // if a symlink shall be created for this plugin. + function onInstall() { + global $conf; + + if($conf['services']['web'] == true) { + return true; + } else { + return false; + } + + } + /* This function is called when the plugin is loaded @@ -107,7 +120,7 @@ O = ".$data['new']['ssl_organisation']." OU = ".$data['new']['ssl_organisation_unit']." CN = $domain - emailAddress = webmatser@".$data['new']['domain']." + emailAddress = webmaster@".$data['new']['domain']." [ req_attributes ] challengePassword = A challenge password"; @@ -186,11 +199,24 @@ if($this->action != 'insert') $this->action = 'update'; if($data["new"]["type"] != "vhost" && $data["new"]["parent_domain_id"] > 0) { + + $old_parent_domain_id = intval($data["old"]["parent_domain_id"]); + $new_parent_domain_id = intval($data["new"]["parent_domain_id"]); + + // If the parent_domain_id has been chenged, we will have to update the old site as well. + if($data["new"]["parent_domain_id"] != $data["old"]["parent_domain_id"]) { + $tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$old_parent_domain_id." AND active = 'y'"); + $data["new"] = $tmp; + $data["old"] = $tmp; + $this->action = 'update'; + $this->update($event_name,$data); + } + // This is not a vhost, so we need to update the parent record instead. - $parent_domain_id = intval($data["new"]["parent_domain_id"]); - $tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$parent_domain_id." AND active = 'y'"); + $tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$new_parent_domain_id." AND active = 'y'"); $data["new"] = $tmp; $data["old"] = $tmp; + $this->action = 'update'; } @@ -207,28 +233,84 @@ return 0; } + if($this->action == 'update' && $data["new"]["document_root"] != $data["old"]["document_root"]) { + + // Get the old client ID + $old_client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["old"]["sys_groupid"])); + $old_client_id = intval($old_client["client_id"]); + unset($old_client); + + // Remove the old symlinks + $tmp_symlinks_array = explode(':',$web_config["website_symlinks"]); + if(is_array($tmp_symlinks_array)) { + foreach($tmp_symlinks_array as $tmp_symlink) { + $tmp_symlink = str_replace("[client_id]",$old_client_id,$tmp_symlink); + $tmp_symlink = str_replace("[website_domain]",$data["old"]["domain"],$tmp_symlink); + // Remove trailing slash + if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1); + // create the symlinks, if not exist + if(!is_link($tmp_symlink)) { + exec("rm -f ".escapeshellcmd($tmp_symlink)); + $app->log("Removed Symlink: rm -f ".$tmp_symlink,LOGLEVEL_DEBUG); + } + } + } + + $tmp_docroot = explode('/',$data["new"]["document_root"]); + unset($tmp_docroot[count($tmp_docroot)-1]); + $new_dir = implode('/',$tmp_docroot); + + $tmp_docroot = explode('/',$data["old"]["document_root"]); + unset($tmp_docroot[count($tmp_docroot)-1]); + $old_dir = implode('/',$tmp_docroot); + + exec('rm -rf '.$data["new"]["document_root"]); + if(!is_dir($new_dir)) exec('mkdir -p '.$new_dir); + exec('mv '.$data["old"]["document_root"].' '.$new_dir); + $app->log("Moving site to new document root: ".'mv '.$data["old"]["document_root"].' '.$new_dir,LOGLEVEL_DEBUG); + + } + //print_r($data); // Check if the directories are there and create them if nescessary. if(!is_dir($data["new"]["document_root"]."/web")) exec("mkdir -p ".$data["new"]["document_root"]."/web"); - if(!is_dir($data["new"]["document_root"]."/web/error")) exec("mkdir -p ".$data["new"]["document_root"]."/web/error"); + if(!is_dir($data["new"]["document_root"]."/web/error") and $data["new"]["errordocs"]) exec("mkdir -p ".$data["new"]["document_root"]."/web/error"); //if(!is_dir($data["new"]["document_root"]."/log")) exec("mkdir -p ".$data["new"]["document_root"]."/log"); if(!is_dir($data["new"]["document_root"]."/ssl")) exec("mkdir -p ".$data["new"]["document_root"]."/ssl"); if(!is_dir($data["new"]["document_root"]."/cgi-bin")) exec("mkdir -p ".$data["new"]["document_root"]."/cgi-bin"); + if(!is_dir($data["new"]["document_root"]."/tmp")) exec("mkdir -p ".$data["new"]["document_root"]."/tmp"); // Remove the symlink for the site, if site is renamed if($this->action == 'update' && $data["old"]["domain"] != '' && $data["new"]["domain"] != $data["old"]["domain"]) { if(is_dir('/var/log/ispconfig/httpd/'.$data["old"]["domain"])) exec('rm -rf /var/log/ispconfig/httpd/'.$data["old"]["domain"]); - if(is_link($data["new"]["document_root"]."/log")) exec("rm -f ".$data["new"]["document_root"]."/log"); + if(is_link($data["old"]["document_root"]."/log")) unlink($data["old"]["document_root"]."/log"); } // Create the symlink for the logfiles if(!is_dir('/var/log/ispconfig/httpd/'.$data["new"]["domain"])) exec('mkdir -p /var/log/ispconfig/httpd/'.$data["new"]["domain"]); - if(!is_link($data["new"]["document_root"]."/log")) exec("ln -s /var/log/ispconfig/httpd/".$data["new"]["domain"]." ".$data["new"]["document_root"]."/log"); + if(!is_link($data["new"]["document_root"]."/log")) { + exec("ln -s /var/log/ispconfig/httpd/".$data["new"]["domain"]." ".$data["new"]["document_root"]."/log"); + $app->log("Creating Symlink: ln -s /var/log/ispconfig/httpd/".$data["new"]["domain"]." ".$data["new"]["document_root"]."/log",LOGLEVEL_DEBUG); + } + /* + // Create the symlink for the logfiles + // This does not work as vlogger can not log trogh symlinks. + if($this->action == 'update' && $data["old"]["domain"] != '' && $data["new"]["domain"] != $data["old"]["domain"]) { + if(is_dir($data["old"]["document_root"]."/log")) exec('rm -rf '.$data["old"]["document_root"]."/log"); + if(is_link('/var/log/ispconfig/httpd/'.$data["old"]["domain"])) unlink('/var/log/ispconfig/httpd/'.$data["old"]["domain"]); + } - + // Create the symlink for the logfiles + if(!is_dir($data["new"]["document_root"]."/log")) exec('mkdir -p '.$data["new"]["document_root"]."/log"); + if(!is_link('/var/log/ispconfig/httpd/'.$data["new"]["domain"])) { + exec("ln -s ".$data["new"]["document_root"]."/log /var/log/ispconfig/httpd/".$data["new"]["domain"]); + $app->log("Creating Symlink: ln -s ".$data["new"]["document_root"]."/log /var/log/ispconfig/httpd/".$data["new"]["domain"],LOGLEVEL_DEBUG); + } + */ + // Get the client ID - $client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["new"]["sys_groupid"])); + $client = $app->dbmaster->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["new"]["sys_groupid"])); $client_id = intval($client["client_id"]); unset($client); @@ -258,6 +340,10 @@ $tmp_symlink = str_replace("[website_domain]",$data["new"]["domain"],$tmp_symlink); // Remove trailing slash if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1); + //* Remove symlink if target folder has been changed. + if($data["old"]["document_root"] != '' && $data["old"]["document_root"] != $data["new"]["document_root"] && is_link($tmp_symlink)) { + unlink($tmp_symlink); + } // create the symlinks, if not exist if(!is_link($tmp_symlink)) { exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink)); @@ -267,15 +353,40 @@ } - if($this->action == 'insert') { + if($this->action == 'insert' && $data["new"]["type"] == 'vhost') { // Copy the error pages - $error_page_path = escapeshellcmd($data["new"]["document_root"])."/web/error/"; - exec("cp /usr/local/ispconfig/server/conf/error/".substr(escapeshellcmd($conf["language"]),0,2)."/* ".$error_page_path); - exec("chmod -R +r ".$error_page_path); - + if($data["new"]["errordocs"]){ + $error_page_path = escapeshellcmd($data["new"]["document_root"])."/web/error/"; + if (file_exists("/usr/local/ispconfig/server/conf-custom/error/".substr(escapeshellcmd($conf["language"]),0,2))){ + exec("cp /usr/local/ispconfig/server/conf-custom/error/".substr(escapeshellcmd($conf["language"]),0,2)."/* ".$error_page_path); + } + else { + if (file_exists("/usr/local/ispconfig/server/conf-custom/error/400.html")){ + exec("cp /usr/local/ispconfig/server/conf-custom/error/*.html ".$error_page_path); + } + else { + exec("cp /usr/local/ispconfig/server/conf/error/".substr(escapeshellcmd($conf["language"]),0,2)."/* ".$error_page_path); + } + } + exec("chmod -R a+r ".$error_page_path); + } + // copy the standard index page - exec("cp /usr/local/ispconfig/server/conf/index/standard_index.html_".substr(escapeshellcmd($conf["language"]),0,2)." ".escapeshellcmd($data["new"]["document_root"])."/web/index.html"); - exec("chmod +r ".escapeshellcmd($data["new"]["document_root"])."/web/index.html"); + if (file_exists("/usr/local/ispconfig/server/conf-custom/index/standard_index.html_".substr(escapeshellcmd($conf["language"]),0,2))){ + exec("cp /usr/local/ispconfig/server/conf-custom/index/standard_index.html_".substr(escapeshellcmd($conf["language"]),0,2)." ".escapeshellcmd($data["new"]["document_root"])."/web/index.html"); + } + else { + if (file_exists("/usr/local/ispconfig/server/conf-custom/index/standard_index.html")){ + exec("cp /usr/local/ispconfig/server/conf-custom/index/standard_index.html ".escapeshellcmd($data["new"]["document_root"])."/web/index.html"); + } + else { + exec("cp /usr/local/ispconfig/server/conf/index/standard_index.html_".substr(escapeshellcmd($conf["language"]),0,2)." ".escapeshellcmd($data["new"]["document_root"])."/web/index.html"); + exec("cp /usr/local/ispconfig/server/conf/index/favicon.ico ".escapeshellcmd($data["new"]["document_root"])."/web/"); + exec("cp /usr/local/ispconfig/server/conf/index/robots.txt ".escapeshellcmd($data["new"]["document_root"])."/web/"); + exec("cp /usr/local/ispconfig/server/conf/index/.htaccess ".escapeshellcmd($data["new"]["document_root"])."/web/"); + } + } + exec("chmod -R a+r ".escapeshellcmd($data["new"]["document_root"])."/web/"); } // Create group and user, if not exist @@ -289,7 +400,7 @@ $username = escapeshellcmd($data["new"]["system_user"]); if($data["new"]["system_user"] != '' && !$app->system->is_user($data["new"]["system_user"])) { - exec("useradd -d ".escapeshellcmd($data["new"]["document_root"])." -g $groupname $username"); + exec("useradd -d ".escapeshellcmd($data["new"]["document_root"])." -g $groupname $username -s /bin/false"); $app->log("Adding the user: $username",LOGLEVEL_DEBUG); } @@ -306,9 +417,16 @@ } + if($this->action == 'insert') { + // Chown and chmod the directories below the document root + exec("chown -R $username:$groupname ".escapeshellcmd($data["new"]["document_root"])); - // Chown and chmod the directories - exec("chown -R $username:$groupname ".escapeshellcmd($data["new"]["document_root"])); + // The document root itself has to be owned by root + exec("chown root:root ".escapeshellcmd($data["new"]["document_root"])); + } + + // make temp direcory writable for the apache user and the website user + exec("chmod 777 ".escapeshellcmd($data["new"]["document_root"]."/tmp")); // Create the vhost config file @@ -319,6 +437,7 @@ $vhost_data = $data["new"]; $vhost_data["web_document_root"] = $data["new"]["document_root"]."/web"; + $vhost_data["web_document_root_www"] = "/var/www/".$data["new"]["domain"]."/web"; // Check if a SSL cert exists $ssl_dir = $data["new"]["document_root"]."/ssl"; @@ -346,20 +465,64 @@ $rewrite_rules[] = array( 'rewrite_domain' => $data["new"]["domain"], 'rewrite_type' => $data["new"]["redirect_type"], 'rewrite_target' => $data["new"]["redirect_path"]); + + switch($data["new"]["subdomain"]) { + case 'www': + $rewrite_rules[] = array( 'rewrite_domain' => 'www.'.$data["new"]["domain"], + 'rewrite_type' => $data["new"]["redirect_type"], + 'rewrite_target' => $data["new"]["redirect_path"]); + break; + case '*': + // TODO + //$rewrite_rules[] = array( 'rewrite_domain' => '*'.$alias["domain"], + // 'rewrite_type' => $alias["redirect_type"], + // 'rewrite_target' => $alias["redirect_path"]); + break; + } } // get alias domains (co-domains and subdomains) $aliases = $app->db->queryAllRecords("SELECT * FROM web_domain WHERE parent_domain_id = ".$data["new"]["domain_id"]." AND active = 'y'"); - $server_alias = ''; + switch($data["new"]["subdomain"]) { + case 'www': + $server_alias .= 'www.'.$data["new"]["domain"].' '; + break; + case '*': + $server_alias .= '*.'.$data["new"]["domain"].' '; + break; + } if(is_array($aliases)) { foreach($aliases as $alias) { - $server_alias .= $alias["domain"].' '; + switch($alias["subdomain"]) { + case 'www': + $server_alias .= 'www.'.$alias["domain"].' '.$alias["domain"].' '; + break; + case '*': + $server_alias .= '*.'.$alias["domain"].' '.$alias["domain"].' '; + break; + default: + $server_alias .= $alias["domain"].' '; + break; + } $app->log("Add server alias: $alias[domain]",LOGLEVEL_DEBUG); // Rewriting if($alias["redirect_type"] != '') { $rewrite_rules[] = array( 'rewrite_domain' => $alias["domain"], 'rewrite_type' => $alias["redirect_type"], 'rewrite_target' => $alias["redirect_path"]); + switch($alias["subdomain"]) { + case 'www': + $rewrite_rules[] = array( 'rewrite_domain' => 'www.'.$alias["domain"], + 'rewrite_type' => $alias["redirect_type"], + 'rewrite_target' => $alias["redirect_path"]); + break; + case '*': + // TODO + //$rewrite_rules[] = array( 'rewrite_domain' => '*'.$alias["domain"], + // 'rewrite_type' => $alias["redirect_type"], + // 'rewrite_target' => $alias["redirect_path"]); + break; + } } } } @@ -371,6 +534,104 @@ } $tpl->setLoop('redirects',$rewrite_rules); + /** + * install fast-cgi starter script and add script aliasd config + * first we create the script directory if not already created, then copy over the starter script + * settings are copied over from the server ini config for now + * TODO: Create form for fastcgi configs per site. + */ + + if ($data["new"]["php"] == "fast-cgi") + { + $fastcgi_config = $app->getconf->get_server_config($conf["server_id"], 'fastcgi'); + + $fastcgi_starter_path = str_replace("[system_user]",$data["new"]["system_user"],$fastcgi_config["fastcgi_starter_path"]); + $fastcgi_starter_path = str_replace("[client_id]",$client_id,$fastcgi_starter_path); + + if (!is_dir($fastcgi_starter_path)) + { + exec("mkdir -p ".escapeshellcmd($fastcgi_starter_path)); + exec("chown ".$data["new"]["system_user"].":".$data["new"]["system_group"]." ".escapeshellcmd($fastcgi_starter_path)); + + + $app->log("Creating fastcgi starter script directory: $fastcgi_starter_path",LOGLEVEL_DEBUG); + } + + $fcgi_tpl = new tpl(); + $fcgi_tpl->newTemplate("php-fcgi-starter.master"); + + $fcgi_tpl->setVar('php_ini_path',$fastcgi_config["fastcgi_phpini_path"]); + $fcgi_tpl->setVar('document_root',$data["new"]["document_root"]); + $fcgi_tpl->setVar('php_fcgi_children',$fastcgi_config["fastcgi_children"]); + $fcgi_tpl->setVar('php_fcgi_max_requests',$fastcgi_config["fastcgi_max_requests"]); + $fcgi_tpl->setVar('php_fcgi_bin',$fastcgi_config["fastcgi_bin"]); + + $fcgi_starter_script = escapeshellcmd($fastcgi_starter_path.$fastcgi_config["fastcgi_starter_script"]); + file_put_contents($fcgi_starter_script,$fcgi_tpl->grab()); + unset($fcgi_tpl); + + $app->log("Creating fastcgi starter script: $fcgi_starter_script",LOGLEVEL_DEBUG); + + + exec("chmod 755 $fcgi_starter_script"); + exec("chown ".$data["new"]["system_user"].":".$data["new"]["system_group"]." $fcgi_starter_script"); + + $tpl->setVar('fastcgi_alias',$fastcgi_config["fastcgi_alias"]); + $tpl->setVar('fastcgi_starter_path',$fastcgi_starter_path); + $tpl->setVar('fastcgi_starter_script',$fastcgi_config["fastcgi_starter_script"]); + + } + + /** + * install cgi starter script and add script alias to config. + * This is needed to allow cgi with suexec (to do so, we need a bin in the document-path!) + * first we create the script directory if not already created, then copy over the starter script. + * TODO: we have to fetch the data from the server-settings. + */ + + if ($data["new"]["php"] == "cgi") + { + //$cgi_config = $app->getconf->get_server_config($conf["server_id"], 'cgi'); + + $cgi_config["cgi_starter_path"] = "/var/www/php-cgi-scripts/[system_user]/"; + $cgi_config["cgi_starter_script"] = "php-cgi-starter"; + $cgi_config["cgi_bin"] = "/usr/bin/php-cgi"; + + $cgi_starter_path = str_replace("[system_user]",$data["new"]["system_user"],$cgi_config["cgi_starter_path"]); + $cgi_starter_path = str_replace("[client_id]",$client_id,$cgi_starter_path); + + if (!is_dir($cgi_starter_path)) + { + exec("mkdir -p ".escapeshellcmd($cgi_starter_path)); + exec("chown ".$data["new"]["system_user"].":".$data["new"]["system_group"]." ".escapeshellcmd($cgi_starter_path)); + + $app->log("Creating cgi starter script directory: $cgi_starter_path",LOGLEVEL_DEBUG); + } + + $cgi_tpl = new tpl(); + $cgi_tpl->newTemplate("php-cgi-starter.master"); + + // This works, because php "rewrites" a symlink to the physical path + $cgi_tpl->setVar('open_basedir', $data["new"]["document_root"]); + // This will NOT work! + //$cgi_tpl->setVar('open_basedir', "/var/www/" . $data["new"]["domain"]); + $cgi_tpl->setVar('php_cgi_bin',$cgi_config["cgi_bin"]); + + $cgi_starter_script = escapeshellcmd($cgi_starter_path.$cgi_config["cgi_starter_script"]); + file_put_contents($cgi_starter_script,$cgi_tpl->grab()); + unset($cgi_tpl); + + $app->log("Creating cgi starter script: $cgi_starter_script",LOGLEVEL_DEBUG); + + + exec("chmod 755 $cgi_starter_script"); + exec("chown ".$data["new"]["system_user"].":".$data["new"]["system_group"]." $cgi_starter_script"); + + $tpl->setVar('cgi_starter_path',$cgi_starter_path); + $tpl->setVar('cgi_starter_script',$cgi_config["cgi_starter_script"]); + + } + $vhost_file = escapeshellcmd($web_config["vhost_conf_dir"].'/'.$data["new"]["domain"].'.vhost'); file_put_contents($vhost_file,$tpl->grab()); $app->log("Writing the vhost file: $vhost_file",LOGLEVEL_DEBUG); @@ -389,11 +650,14 @@ $app->log("Removing symlink: $vhost_symlink => $vhost_file",LOGLEVEL_DEBUG); } - // remove old symlink, if domain name of the site has changed + // remove old symlink and vhost file, if domain name of the site has changed if($this->action == 'update' && $data["old"]["domain"] != '' && $data["new"]["domain"] != $data["old"]["domain"]) { $vhost_symlink = escapeshellcmd($web_config["vhost_conf_enabled_dir"].'/'.$data["old"]["domain"].'.vhost'); unlink($vhost_symlink); $app->log("Removing symlink: $vhost_symlink => $vhost_file",LOGLEVEL_DEBUG); + $vhost_file = escapeshellcmd($web_config["vhost_conf_dir"].'/'.$data["old"]["domain"].'.vhost'); + unlink($vhost_file); + $app->log("Removing File $vhost_file",LOGLEVEL_DEBUG); } // request a httpd reload when all records have been processed @@ -408,48 +672,111 @@ $app->uses("getconf"); $web_config = $app->getconf->get_server_config($conf["server_id"], 'web'); - // Deleting the vhost file, symlink and the data directory - $vhost_symlink = escapeshellcmd($web_config["vhost_conf_enabled_dir"].'/'.$data["old"]["domain"].'.vhost'); - unlink($vhost_symlink); - $app->log("Removing symlink: $vhost_symlink => $vhost_file",LOGLEVEL_DEBUG); - $vhost_file = escapeshellcmd($web_config["vhost_conf_dir"].'/'.$data["old"]["domain"].'.vhost'); - unlink($vhost_file); - $app->log("Removing vhost file: $vhost_file",LOGLEVEL_DEBUG); + if($data["old"]["type"] != "vhost" && $data["old"]["parent_domain_id"] > 0) { + //* This is a alias domain or subdomain, so we have to update the website instead + $parent_domain_id = intval($data["old"]["parent_domain_id"]); + $tmp = $app->db->queryOneRecord("SELECT * FROM web_domain WHERE domain_id = ".$parent_domain_id." AND active = 'y'"); + $data["new"] = $tmp; + $data["old"] = $tmp; + $this->action = 'update'; + // just run the update function + $this->update($event_name,$data); + + } else { + //* This is a website + // Deleting the vhost file, symlink and the data directory + $vhost_symlink = escapeshellcmd($web_config["vhost_conf_enabled_dir"].'/'.$data["old"]["domain"].'.vhost'); + unlink($vhost_symlink); + $app->log("Removing symlink: $vhost_symlink => $vhost_file",LOGLEVEL_DEBUG); - $docroot = escapeshellcmd($data["old"]["document_root"]); - if($docroot != '' && !stristr($docroot,'..')) exec("rm -rf $docroot"); - $app->log("Removing website: $docroot",LOGLEVEL_DEBUG); + $vhost_file = escapeshellcmd($web_config["vhost_conf_dir"].'/'.$data["old"]["domain"].'.vhost'); + unlink($vhost_file); + $app->log("Removing vhost file: $vhost_file",LOGLEVEL_DEBUG); - // Delete the symlinks for the sites - $client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["old"]["sys_groupid"])); - $client_id = intval($client["client_id"]); - unset($client); - $tmp_symlinks_array = explode(':',$web_config["website_symlinks"]); - if(is_array($tmp_symlinks_array)) { - foreach($tmp_symlinks_array as $tmp_symlink) { - $tmp_symlink = str_replace("[client_id]",$client_id,$tmp_symlink); - $tmp_symlink = str_replace("[website_domain]",$data["old"]["domain"],$tmp_symlink); - // Remove trailing slash - if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1); - // create the symlinks, if not exist - if(is_link($tmp_symlink)) { - unlink($tmp_symlink); - $app->log("Removing symlink: ".$tmp_symlink,LOGLEVEL_DEBUG); + $docroot = escapeshellcmd($data["old"]["document_root"]); + if($docroot != '' && !stristr($docroot,'..')) exec("rm -rf $docroot"); + + + //remove the php fastgi starter script if available + if ($data["old"]["php"] == "fast-cgi") + { + $fastcgi_starter_path = str_replace("[system_user]",$data["old"]["system_user"],$web_config["fastcgi_starter_path"]); + if (is_dir($fastcgi_starter_path)) + { + exec("rm -rf $fastcgi_starter_path"); } } - } - // end removing symlinks + //remove the php cgi starter script if available + if ($data["old"]["php"] == "cgi") + { + // TODO: fetch the date from the server-settings + $web_config["cgi_starter_path"] = "/var/www/php-cgi-scripts/[system_user]/"; + + $cgi_starter_path = str_replace("[system_user]",$data["old"]["system_user"],$web_config["cgi_starter_path"]); + if (is_dir($cgi_starter_path)) + { + exec("rm -rf $cgi_starter_path"); + } + } + + $app->log("Removing website: $docroot",LOGLEVEL_DEBUG); + + // Delete the symlinks for the sites + $client = $app->db->queryOneRecord("SELECT client_id FROM sys_group WHERE sys_group.groupid = ".intval($data["old"]["sys_groupid"])); + $client_id = intval($client["client_id"]); + unset($client); + $tmp_symlinks_array = explode(':',$web_config["website_symlinks"]); + if(is_array($tmp_symlinks_array)) { + foreach($tmp_symlinks_array as $tmp_symlink) { + $tmp_symlink = str_replace("[client_id]",$client_id,$tmp_symlink); + $tmp_symlink = str_replace("[website_domain]",$data["old"]["domain"],$tmp_symlink); + // Remove trailing slash + if(substr($tmp_symlink, -1, 1) == '/') $tmp_symlink = substr($tmp_symlink, 0, -1); + // create the symlinks, if not exist + if(is_link($tmp_symlink)) { + unlink($tmp_symlink); + $app->log("Removing symlink: ".$tmp_symlink,LOGLEVEL_DEBUG); + } + } + } + // end removing symlinks + + // Delete the log file directory + $vhost_logfile_dir = escapeshellcmd('/var/log/ispconfig/httpd/'.$data["old"]["domain"]); + if($data["old"]["domain"] != '' && !stristr($vhost_logfile_dir,'..')) exec("rm -rf $vhost_logfile_dir"); + $app->log("Removing website logfile directory: $vhost_logfile_dir",LOGLEVEL_DEBUG); + + //delete the web user + $command = 'userdel'; + $command .= ' '.$data["old"]["system_user"]; + exec($command); + } } //* This function is called when a IP on the server is inserted, updated or deleted function server_ip($event_name,$data) { global $app, $conf; - // Here we write the name virtualhost directives - // NameVirtualHost IP:80 - // NameVirtualHost IP:443 + // load the server configuration options + $app->uses("getconf"); + $web_config = $app->getconf->get_server_config($conf["server_id"], 'web'); + + $app->load('tpl'); + + $tpl = new tpl(); + $tpl->newTemplate("apache_ispconfig.conf.master"); + $records = $app->db->queryAllRecords("SELECT * FROM server_ip WHERE server_id = ".$conf["server_id"]." AND virtualhost = 'y'"); + + if(count($records) > 0) { + $tpl->setLoop('ip_adresses',$records); + } + + $vhost_file = escapeshellcmd($web_config["vhost_conf_dir"].'/ispconfig.conf'); + file_put_contents($vhost_file,$tpl->grab()); + $app->log("Writing the conf file: ispconfig.conf",LOGLEVEL_DEBUG); + unset($tpl); } -- Gitblit v1.9.1