Code

Updated setup step 4 to support 100% width
[gosa.git] / setup / class_setupStep8.inc
index f7dc508ef081323da6ab72c3571f1f09ef3144c1..44eeefcb6430202aafdb64ffbf2c304fd9d565b6 100644 (file)
 
 class setup_step_8 extends setup_step
 {
-  var $create_backup = TRUE;
-  var $gosa_conf_name = "/gosa.conf";
+  var $create_backup    = TRUE;
+  var $gosa_conf_contrib   = "/gosa.conf";
+  var $cfg_file_written = FALSE;
+  var $last_backup_name = "";
 
   function setup_step_8()
+  {
+    $this->update_strings();
+  }
+
+  
+  function update_strings()
   {
     $this->s_title      = _("Configuration file");
-    $this->s_title_long = _("In this step the configuration file will be created.");
-    $this->s_info       = _("Saving configuration file");
+    $this->s_info       = _("In this step the configuration file will be created.");
+    $this->s_title_long = _("Saving configuration file");
   }
 
 
+  function get_conf_data()
+  {
+    $smarty = get_smarty();
+    $smarty->assign("cv",$this->parent->captured_values);
+    $str =  $smarty->fetch(CONFIG_TEMPLATE_DIR.$this->gosa_conf_contrib);
+    return($str);
+  }  
+
+
   function execute()
   {
 
+    $info= posix_getgrgid(posix_getgid());
+    $webgroup = $info['name'];
+      
+    
     /* Check if there is currently an active gosa.conf 
      */
-    $exists = file_exists(CONFIG_DIR.$this->gosa_conf_name); 
+    $exists = file_exists(CONFIG_DIR."/".CONFIG_FILE); 
 
     /* Check if existing config file is writeable */
     if($exists){
-      $writeable = is_writeable(CONFIG_DIR.$this->gosa_conf_name);
+      $writeable = is_writeable(CONFIG_DIR."/".CONFIG_FILE);
     }else{
       $writeable = is_writeable(CONFIG_DIR);
     }
 
-    $smarty = get_smarty();
-  
-    $info= posix_getgrgid(posix_getgid());
-    $smarty->assign("webgroup", $info['name']);
+    /* Redirect to GOsa login */
+    if(isset($_POST['use_gosa'])){
+      session_destroy();
+      header("Location: index.php");
+      exit();
+    }
+
+    /* Downlaod config */
+    if(isset($_POST['getconf'])){
+
+      header("Expires: Mon, 26 Jul 1997 05:00:00 GMT");
+      header("Last-Modified: ".gmdate("D, d M Y H:i:s")." GMT");
+      header("Cache-Control: no-cache");
+      header("Pragma: no-cache");
+      header("Cache-Control: post-check=0, pre-check=0");
+      header("Content-type: text/plain");
+     
+      if (preg_match('/MSIE 5.5/', $_SERVER['HTTP_USER_AGENT']) ||
+          preg_match('/MSIE 6.0/', $_SERVER['HTTP_USER_AGENT'])){
+        header('Content-Disposition: filename="'.CONFIG_FILE.'"');
+      } else {
+        header('Content-Disposition: attachment; filename="'.CONFIG_FILE.'"');
+      }
+
+      $str = $this->get_conf_data();
+      $str = preg_replace("/\n[ ]*\n/","",$str);
+
+      echo $this->get_conf_data();
+      exit();
+    }
+   
+    
+    /* Try to save configuration */
+    $abort    = FALSE;
+    $err_msg  = "";
+    if(isset($_POST['saveconf'])){
+      if($exists && $this->create_backup){
+        if(!$this->create_backup()){
+          $abort = TRUE;
+          $err_msg = _("Could not create requested configuration file backup. Aborted writing config file. Please check folder permission and try again. Or use the manual method if this can not be fixed anyway.");
+        }
+      }
+    
+      if(!$abort){
+        
+        /* Try to create file handle */
+        $fp = @fopen(CONFIG_DIR."/".CONFIG_FILE, "w");
+    
+        if(!$fp){
+          $err_msg = sprintf(_("Can not create handle on file '%s', the configuration could not be written. Please check folder permission and try again. Or use the manual method if this can not be fixed anyway."),CONFIG_DIR."/".CONFIG_FILE);
+          $abort  =TRUE;
+        }else{
+
+          $data = $this->get_conf_data();
+          if(!fwrite($fp,$data)){
+            $err_msg = sprintf(_("Can not write file '%s'. Please check folder permission and try again. Or use the manual method if this can not be fixed anyway."),CONFIG_DIR."/".CONFIG_FILE);
+            $abort  =TRUE;
+          }else{
+            
+            @chgrp(CONFIG_DIR."/".CONFIG_FILE,$webgroup);
+            @chown(CONFIG_DIR."/".CONFIG_FILE,"root");
+            @chmod(CONFIG_DIR."/".CONFIG_FILE,0640);    
+          }
+        }
+      }
+    } 
+
+
+    if($exists && $this->is_world_readable(CONFIG_DIR."/".CONFIG_FILE)){
+      $err_msg = _("Your configuration file is currently world readable. This is a big security risk. Please updated the file permissions as shown in the manual configuration part below.");
+    }
 
-    $smarty->assign("gosa_conf_name" , $this->gosa_conf_name);
+    $smarty = get_smarty();
+    $smarty->assign("save_requested", isset($_POST['saveconf']));
+    $smarty->assign("err_msg",$err_msg);
+    $smarty->assign("webgroup", $webgroup);
     $smarty->assign("create_backup" , $this->create_backup);
     $smarty->assign("CONFIG_DIR",CONFIG_DIR);
-  
-    $smarty->assign("msg_permissions",sprintf(_("The following file(s), folders(s) must be writeable for the web-user '%s'."),$info['name']));
+    $smarty->assign("CONFIG_FILE" , CONFIG_FILE);
     $smarty->assign("exists",$exists);
+
+    $smarty->assign("msg1", sprintf(_("If you want the setup routine to write the configuration file, use the 'Save configuration' button below. If you prefer to copy the '%s' manually to '%s' you can download the configuration file by using the 'Download configuration' button."), CONFIG_FILE,CONFIG_DIR));
+
+    $smarty->assign("msg2", sprintf(_("After placing the file under %s, place make sure that the webserver user is able to read %s, while other users shouldn't. You may want to execute these commands to achieve this requirement"),CONFIG_DIR,CONFIG_FILE));
+
+    $smarty->assign("last_backup_name",$this->last_backup_name);
     $smarty->assign("writeable",$writeable);
     $smarty->assign("cv",$this->parent->captured_values);
+    $smarty->assign("msg_permissions",
+      sprintf(_("The following file(s), folders(s) must be writeable for the web-user '%s'."),$info['name']));
     return($smarty -> fetch (get_template_path("../setup/setup_step8.tpl")));
   }
 
 
+  /* check if given file is world readable */
+  function is_world_readable($file)
+  {
+    clearstatcache();
+    $p = fileperms($file);
+    $w_r = (decbin($p & 4) == TRUE);
+    return($w_r);
+  }
+
+
   /* Create a backup of the currently existing configuration file. 
    */
   function create_backup()
   {
-    if(is_writeable(CONFIG_DIR) && is_writeable(CONFIG_DIR.$this->gosa_conf_name)){
-      $src = CONFIG_DIR.$this->gosa_conf_name;
-      $dst = CONFIG_DIR.$this->gosa_conf_name."_".date("Ymd");
+    $info= posix_getgrgid(posix_getgid());
+    $webgroup = $info['name'];
+    if(is_writeable(CONFIG_DIR) && is_writeable(CONFIG_DIR."/".CONFIG_FILE)){
+      $src = CONFIG_DIR."/".CONFIG_FILE;
+      $dst = CONFIG_DIR."/".CONFIG_FILE."_".date("Ymd");
       $dst_backup= $dst;
       $i = 1;
       while(file_exists($dst)){
         $dst = $dst_backup."-".$i;
         $i ++;
       }
-      return(rename($src,$dst));
+      if(copy($src,$dst)){
+        $this->last_backup_name = $dst;
+        @chgrp($dst,$webgroup);
+        @chown($dst,"root");
+        @chmod($dst,0640);    
+        return(TRUE);
+      }else{
+        return(FALSE);
+      }
     }else{
       return(FALSE);
     }
@@ -98,10 +214,12 @@ class setup_step_8 extends setup_step
       }
 
       /* Backup toggle */
-      if(isset($_POST['create_backup'])){
-        $this->create_backup = TRUE;
-      }else{
-        $this->create_backup = FALSE;
+      if(isset($_POST['create_backup_visible'])){
+        if(isset($_POST['create_backup'])){
+          $this->create_backup = TRUE;
+        }else{
+          $this->create_backup = FALSE;
+        }
       }
     }
   }