xaver
2011-09-14 bfc22ec9af89c240cbce16c1f8abb17547cd4b3d
server/plugins-available/apache2_plugin.inc.php
@@ -357,7 +357,13 @@
      // 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');
//         exec("ln -s /var/log/ispconfig/httpd/".$data["new"]["domain"]." ".$data["new"]["document_root"]."/log");
         if ($web_config["website_symlinks_rel"] == 'y') {
            $this->create_relative_link("/var/log/ispconfig/httpd/".$data["new"]["domain"], $data["new"]["document_root"]."/log");
         } else {
            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);
      }
      /*
@@ -413,7 +419,13 @@
            }
            // create the symlinks, if not exist
            if(!is_link($tmp_symlink)) {
               exec('ln -s '.escapeshellcmd($data['new']['document_root']).'/ '.escapeshellcmd($tmp_symlink));
//               exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink));
               if ($web_config["website_symlinks_rel"] == 'y') {
                  $this->create_relative_link(escapeshellcmd($data["new"]["document_root"]), escapeshellcmd($tmp_symlink));
               } else {
                  exec("ln -s ".escapeshellcmd($data["new"]["document_root"])."/ ".escapeshellcmd($tmp_symlink));
               }
               $app->log('Creating symlink: ln -s '.$data['new']['document_root'].'/ '.$tmp_symlink,LOGLEVEL_DEBUG);
            }
         }
@@ -488,6 +500,7 @@
            }
         }
         exec('chmod -R a+r '.$error_page_path);
         exec('chown -R '.$data['new']['system_user'].':'.$data['new']['system_group'].' '.$error_page_path);
      }  // end copy error docs
      // Create group and user, if not exist
@@ -819,6 +832,7 @@
         $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']);
         $tpl->setVar('fastcgi_config_syntax',$fastcgi_config['fastcgi_config_syntax']);
      }
@@ -895,24 +909,48 @@
      */
      $this->_patchVhostWebdav($vhost_file, $data['new']['document_root'] . '/webdav');
      // Set the symlink to enable the vhost
      //* Set the symlink to enable the vhost
      //* First we check if there is a old type of symlink and remove it
      $vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/'.$data['new']['domain'].'.vhost');
      if(is_link($vhost_symlink)) unlink($vhost_symlink);
      //* Remove old or changed symlinks
      if($data['new']['subdomain'] != $data['old']['subdomain'] or $data['new']['active'] == 'n') {
         $vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost');
         if(is_link($vhost_symlink)) {
            unlink($vhost_symlink);
            $app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file,LOGLEVEL_DEBUG);
         }
         $vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost');
         if(is_link($vhost_symlink)) {
            unlink($vhost_symlink);
            $app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file,LOGLEVEL_DEBUG);
         }
      }
      //* New symlink
      if($data['new']['subdomain'] == '*') {
         $vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['new']['domain'].'.vhost');
      } else {
         $vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['new']['domain'].'.vhost');
      }
      if($data['new']['active'] == 'y' && !is_link($vhost_symlink)) {
         symlink($vhost_file,$vhost_symlink);
         $app->log('Creating symlink: '.$vhost_symlink.'->'.$vhost_file,LOGLEVEL_DEBUG);
      }
      // Remove the symlink, if site is inactive
      if($data['new']['active'] == 'n' && is_link($vhost_symlink)) {
         unlink($vhost_symlink);
         $app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file,LOGLEVEL_DEBUG);
      }
      // 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_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/900-'.$data['old']['domain'].'.vhost');
         if(is_link($vhost_symlink)) {
            unlink($vhost_symlink);
            $app->log('Removing symlink: '.$vhost_symlink.'->'.$vhost_file,LOGLEVEL_DEBUG);
         }
         $vhost_symlink = escapeshellcmd($web_config['vhost_conf_enabled_dir'].'/100-'.$data['old']['domain'].'.vhost');
         if(is_link($vhost_symlink)) {
            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);
@@ -1432,6 +1470,31 @@
      }
   }
   public function create_relative_link($f, $t) {
      // $from already exists
      $from = realpath($f);
      // realpath requires the traced file to exist - so, lets touch it first, then remove
      @unlink($t); touch($t);
      $to = realpath($t);
      @unlink($t);
      // Remove from the left side matching path elements from $from and $to
      // and get path elements counts
      $a1 = explode('/', $from); $a2 = explode('/', $to);
      for ($c = 0; $a1[$c] == $a2[$c]; $c++) {
         unset($a1[$c]); unset($a2[$c]);
      }
      $cfrom = implode('/', $a1);
      // Check if a path is fully a subpath of another - no way to create symlink in the case
      if (count($a1) == 0 || count($a2) == 0) return false;
      // Add ($cnt_to-1) number of "../" elements to left side of $cfrom
      for ($c = 0; $c < (count($a2)-1); $c++) { $cfrom = '../'.$cfrom; }
      return symlink($cfrom, $to);
   }
} // end class