X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=setup%2Fclass_setupStep8.inc;h=44eeefcb6430202aafdb64ffbf2c304fd9d565b6;hb=7dfb0099027c833555ea3018c40874fd314bf5f2;hp=f7dc508ef081323da6ab72c3571f1f09ef3144c1;hpb=e3bb62448b4d5a5a3bbd733d47f30bff9c3383fa;p=gosa.git diff --git a/setup/class_setupStep8.inc b/setup/class_setupStep8.inc index f7dc508ef..44eeefcb6 100644 --- a/setup/class_setupStep8.inc +++ b/setup/class_setupStep8.inc @@ -22,64 +22,180 @@ 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; + } } } }