X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Fhtml%2Fpassword.php;h=07e919d4ec515830dd3eb26476480596cf7234b1;hb=5c2d01aab3c13cca9f03b4983a3a00b4ea47ae51;hp=c93410bd41a0651d899cfe96871f868affaa2c54;hpb=dc068f92a2a30deec9e67196b1b212f1ee66bbf2;p=gosa.git diff --git a/gosa-core/html/password.php b/gosa-core/html/password.php index c93410bd4..07e919d4e 100644 --- a/gosa-core/html/password.php +++ b/gosa-core/html/password.php @@ -1,91 +1,106 @@ display(get_template_path('password.tpl')); - exit(); + $smarty->display(get_template_path('password.tpl')); + exit(); } /* Load required includes */ -require_once ("../include/php_setup.inc"); -require_once ("functions.inc"); +require_once "../include/php_setup.inc"; +require_once "functions.inc"; -if(!class_exists("log")){ - require_once("class_log.inc"); +if (!class_exists("log")) { + require_once("class_log.inc"); } header("Content-type: text/html; charset=UTF-8"); -session_start(); +session::start(); /* Destroy old session if exists. - Else you will get your old session back, if you not logged out correctly. */ -if(is_array($_SESSION) && count($_SESSION)){ - session_destroy(); - session_start(); +Else you will get your old session back, if you not logged out correctly. */ +if (is_array(session::get_all()) && count(session::get_all())) { + session::destroy(); + session::start(); } /* Reset errors */ -$_SESSION['js'] = true; -$_SESSION['errors'] = ""; -$_SESSION['errorsAlreadyPosted']= array(); -$_SESSION['LastError'] = ""; +session::global_set('js', true); +session::set('errors', ""); +session::set('errorsAlreadyPosted', array()); +session::set('LastError', ""); /* Check if CONFIG_FILE is accessible */ -if (!is_readable(CONFIG_DIR."/".CONFIG_FILE)){ - echo sprintf(_("GOsa configuration %s/%s is not readable. Aborted."), CONFIG_DIR,CONFIG_FILE); - exit(); +if (!is_readable(CONFIG_DIR."/".CONFIG_FILE)) { + msg_dialog::display( + _("Fatal error"), + sprintf( + _("GOsa configuration %s/%s is not readable. Aborted."), + CONFIG_DIR, CONFIG_FILE + ), + FATAL_ERROR_DIALOG + ); + exit; } /* Parse configuration file */ $config= new config(CONFIG_DIR."/".CONFIG_FILE, $BASE_DIR); -$_SESSION['DEBUGLEVEL']= $config->data['MAIN']['DEBUGLEVEL']; -if ($_SERVER["REQUEST_METHOD"] != "POST"){ - @DEBUG (DEBUG_CONFIG, __LINE__, __FUNCTION__, __FILE__, $config->data, "config"); +session::global_set('debugLevel', $config->get_cfg_value("core","debugLevel")); +if ($_SERVER["REQUEST_METHOD"] != "POST") { + @DEBUG( + DEBUG_CONFIG, __LINE__, __FUNCTION__, __FILE__, $config->data, "config" + ); } /* Set template compile directory */ -if (isset ($config->data['MAIN']['COMPILE'])){ - $smarty->compile_dir= $config->data['MAIN']['COMPILE']; -} else { - $smarty->compile_dir= '/var/spool/gosa'; -} +$smarty->compile_dir= $config->get_cfg_value("core", + "templateCompileDirectory", '/var/spool/gosa' +); /* Check for compile directory */ -if (!(is_dir($smarty->compile_dir) && is_writable($smarty->compile_dir))){ - echo sprintf(_("Directory '%s' specified as compile directory is not accessible!"), - $smarty->compile_dir); - exit(); +if (!(is_dir($smarty->compile_dir) && is_writable($smarty->compile_dir))) { + msg_dialog::display( + _("Configuration error"), + sprintf( + _("Compile directory %s is not accessible!"), + bold($smarty->compile_dir) + ), + FATAL_ERROR_DIALOG + ); + exit; } /* Check for old files in compile directory */ clean_smarty_compile_dir($smarty->compile_dir); /* Language setup */ -if ($config->data['MAIN']['LANG'] == ""){ - $lang= get_browser_language(); +if ($config->get_cfg_value("core","language") == "") { + $lang= get_browser_language(); } else { - $lang= $config->data['MAIN']['LANG']; + $lang= $config->get_cfg_value("core","language"); } $lang.=".UTF-8"; putenv("LANGUAGE="); @@ -96,38 +111,42 @@ $GLOBALS['t_gettext_message_dir'] = $BASE_DIR.'/locale/'; /* Set the text domain as 'messages' */ $domain = 'messages'; -bindtextdomain($domain, "$BASE_DIR/locale"); +bindtextdomain($domain, LOCALE_DIR); textdomain($domain); /* Generate server list */ $servers= array(); -foreach ($config->data['LOCATIONS'] as $key => $ignored){ - $servers[$key]= $key; +foreach ($config->data['LOCATIONS'] as $key => $ignored) { + $servers[$key]= $key; } -if (isset($_POST['server'])){ - $directory= validate($_POST['server']); +if (isset($_POST['server'])) { + $directory= validate($_POST['server']); } else { - $directory= $config->data['MAIN']['DEFAULT']; + $directory= $config->data['MAIN']['DEFAULT']; - if(!isset($servers[$directory])){ - $directory = key($servers); - } + if (!isset($servers[$directory])) { + $directory = key($servers); + } } -if (isset($_GET['directory']) && isset($servers[$_GET['directory']])){ - $smarty->assign ("show_directory_chooser", false); - $directory= validate($_GET['directory']); +$smarty->assign ("title","GOsa"); +if (isset($_GET['directory']) && isset($servers[$_GET['directory']])) { + $smarty->assign("show_directory_chooser", false); + $directory= validate($_GET['directory']); } else { - $smarty->assign ("server_options", $servers); - $smarty->assign ("server_id", $directory); - $smarty->assign ("show_directory_chooser", true); + $smarty->assign("server_options", $servers); + $smarty->assign("server_id", $directory); + $smarty->assign("show_directory_chooser", true); } /* Set config to selected one */ $config->set_current($directory); -$_SESSION['config']= $config; +session::global_set('config', $config); -if ($_SERVER["REQUEST_METHOD"] != "POST"){ - @DEBUG (DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, $lang, "Setting language to"); +if ($_SERVER["REQUEST_METHOD"] != "POST") { + @DEBUG( + DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, + $lang, "Setting language to" + ); } @@ -136,165 +155,187 @@ $ssl= ""; if (!isset($_SERVER['HTTPS']) || !stristr($_SERVER['HTTPS'], "on")) { - if (empty($_SERVER['REQUEST_URI'])) { - $ssl= "https://".$_SERVER['HTTP_HOST']. - $_SERVER['PATH_INFO']; - } else { - $ssl= "https://".$_SERVER['HTTP_HOST']. - $_SERVER['REQUEST_URI']; - } + if (empty($_SERVER['REQUEST_URI'])) { + $ssl= "https://".$_SERVER['HTTP_HOST']. + $_SERVER['PATH_INFO']; + } else { + $ssl= "https://".$_SERVER['HTTP_HOST']. + $_SERVER['REQUEST_URI']; + } } /* If SSL is forced, just forward to the SSL enabled site */ -if ($config->data['MAIN']['FORCESSL'] == 'true' && $ssl != ''){ - header ("Location: $ssl"); - exit; +if ($config->get_cfg_value("core","forceSSL") == 'true' && $ssl != '') { + header("Location: $ssl"); + exit; } /* Check for selected password method */ -$method= $config->current['HASH']; -if (isset($_GET['method'])){ - $method= validate($_GET['method']); - $tmp = new passwordMethod($config); - $available = $tmp->get_available_methods(); - if (!isset($available[$method])){ - echo _("Error: Password method not available!"); - exit; - } +$method= $config->get_cfg_value("core","passwordDefaultHash", "crypt/md5"); +if (isset($_GET['method'])) { + $method= validate($_GET['method']); + $tmp = new passwordMethod($config); + $available = $tmp->get_available_methods(); + if (!isset($available[$method])) { + msg_dialog::display( + _("Password method"), + _("Error: Password method not available!"), + FATAL_ERROR_DIALOG + ); + exit; + } } /* Check for selected user... */ -if (isset($_GET['uid']) && $_GET['uid'] != ""){ - $uid= validate($_GET['uid']); - $smarty->assign('display_username', false); -} elseif (isset($_POST['uid'])){ - $uid= validate($_POST['uid']); - $smarty->assign('display_username', true); +if (isset($_GET['uid']) && $_GET['uid'] != "") { + $uid= validate($_GET['uid']); + $smarty->assign('display_username', false); +} elseif (isset($_POST['uid'])) { + $uid= validate($_POST['uid']); + $smarty->assign('display_username', true); } else { - $uid= ""; - $smarty->assign('display_username', true); + $uid= ""; + $smarty->assign('display_username', true); } $current_password= ""; $smarty->assign("changed", false); /* Got a formular answer, validate and try to log in */ -if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['apply'])){ - - /* Destroy old sessions, they cause a successfull login to relog again ...*/ - if(isset($_SESSION['_LAST_PAGE_REQUEST'])){ - $_SESSION['_LAST_PAGE_REQUEST'] = time(); - } - - $message= array(); - $current_password= $_POST['current_password']; - - /* Do new and repeated password fields match? */ - $new_password= $_POST['new_password']; - if ($_POST['new_password'] != $_POST['new_password_repeated']){ - $message[]= _("The passwords you've entered as 'New password' and 'Repeated new password' do not match."); - } else { - if ($_POST['new_password'] == ""){ - $message[]= _("The password you've entered as 'New password' is empty."); - } - } - - /* Password policy fulfilled? */ - if (isset($config->data['MAIN']['PWDIFFER'])){ - $l= $config->data['MAIN']['PWDIFFER']; - if (substr($_POST['current_password'], 0, $l) == substr($_POST['new_password'], 0, $l)){ - $message[]= _("The password used as new and current are too similar."); - } - } - if (isset($config->data['MAIN']['PWMINLEN'])){ - if (strlen($_POST['new_password']) < $config->data['MAIN']['PWMINLEN']){ - $message[]= _("The password used as new is to short."); - } - } - - /* Validate */ - if (!ereg("^[A-Za-z0-9_.-]+$", $uid)){ - $message[]= _("Please specify a valid username!"); - } elseif (mb_strlen($_POST["current_password"], 'UTF-8') == 0){ - $message[]= _("Please specify your password!"); - } else { - - /* Do we have the selected user somewhere? */ - $ui= ldap_login_user ($uid, $current_password); - - if ($ui === NULL){ - $message[]= _("Please check the username/password combination."); +if ($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['apply'])) { + + /* Destroy old sessions, they cause a successfull login to relog again ...*/ + if (session::global_is_set('_LAST_PAGE_REQUEST')) { + session::global_set('_LAST_PAGE_REQUEST', time()); + } + + $message= array(); + $current_password= $_POST['current_password']; + + /* Do new and repeated password fields match? */ + $new_password= $_POST['new_password']; + if ($_POST['new_password'] != $_POST['new_password_repeated']) { + $message[]= _("The values for 'New password' and 'Repeated new password' differ!"); + } else { + if ($_POST['new_password'] == "") { + $message[]= msgPool::required(_("New password")); + } + } + + /* Password policy fulfilled? */ + if ($config->get_cfg_value("core","passwordMinDiffer") != "") { + $l= $config->get_cfg_value("core","passwordMinDiffer"); + if (substr($_POST['current_password'], 0, $l) == + substr($_POST['new_password'], 0, $l)) { + $message[]= _("The password used as new and current are too similar!"); + } + } + if ($config->get_cfg_value("core","passwordMinLength") != "") { + if (strlen($_POST['new_password']) < + $config->get_cfg_value("core","passwordMinLength")) { + $message[]= _("The password used as new is to short!"); + } + } + if(!passwordMethod::is_harmless($_POST['new_password'])){ + $message[]= _("The password contains possibly problematic unicode characters!"); + } + + /* Validate */ + if (!tests::is_uid($uid)) { + $message[]= msgPool::invalid(_("Login")); + } elseif (mb_strlen($_POST["current_password"], 'UTF-8') == 0) { + $message[]= msgPool::required(_("Current password")); } else { - $acls = $ui->get_permissions($ui->dn,"users/password"); - if(!preg_match("/w/i",$acls)){ - $message[]= _("You have no permissions to change your password."); - } + + /* Do we have the selected user somewhere? */ + $ui= ldap_login_user($uid, $current_password); + + if ($ui === NULL) { + $message[]= _("Please check the username/password combination!"); + } else { + $acls = $ui->get_permissions($ui->dn, "users/password"); + if (!preg_match("/w/i", $acls)) { + $message[]= _("You have no permissions to change your password!"); + } + } + } + + /* Do we need to show error messages? */ + if (count($message) != 0) { + /* Show error message and continue editing */ + msg_dialog::displayChecks($message); + } else { + + /* Passed quality check, just try to change the password now */ + $output= ""; + if ($config->get_cfg_value("core","passwordHook") != "") { + exec( + $config->get_cfg_value("core","passwordHook")." ".$ui->username." ". + $_POST['current_password']." ".$_POST['new_password'], + $resarr + ); + if (count($resarr) > 0) { + $output= join('\n', $resarr); + } + } + if ($output != "") { + $message[]= sprintf( + _("External password changer reported a problem: %s"), + $output + ); + msg_dialog::displayChecks($message); + } else { + if ($method != "") { + change_password($ui->dn, $_POST['new_password'], 0, $method); + } else { + change_password($ui->dn, $_POST['new_password']); + } + gosa_log("User/password has been changed"); + $smarty->assign("changed", true); + } } - } - - /* Do we need to show error messages? */ - if (count ($message) != 0){ - /* Show error message and continue editing */ - show_errors($message); - } else { - - /* Passed quality check, just try to change the password now */ - $output= ""; - if (isset($config->data['MAIN']['EXTERNALPWDHOOK'])){ - exec($config->data['MAIN']['EXTERNALPWDHOOK']." ".$ui->username." ". - $_POST['current_password']." ".$_POST['new_password'], $resarr); - if(count($resarr) > 0) { - $output= join('\n', $resarr); - } - } - if ($output != ""){ - $message[]= _("External password changer reported a problem: ".$output); - show_errors($message); - } else { - if ($method != ""){ - change_password ($ui->dn, $_POST['new_password'], 0, $method); - } else { - change_password ($ui->dn, $_POST['new_password']); - } - gosa_log ("User/password has been changed"); - $smarty->assign("changed", true); - } - } } /* Parameter fill up */ $params= ""; -foreach (array('uid', 'method', 'directory') as $index){ - $params.= "&$index=".urlencode($$index); +foreach (array('uid', 'method', 'directory') as $index) { + $params.= "&$index=".urlencode($$index); } $params= preg_replace('/^&/', '?', $params); $smarty->assign('params', $params); /* Fill template with required values */ -$smarty->assign ('date', gmdate("D, d M Y H:i:s")); -$smarty->assign ('uid', $uid); -$smarty->assign ('password_img', get_template_path('images/password.png')); +$smarty->assign('date', gmdate("D, d M Y H:i:s")); +$smarty->assign('uid', $uid); +$smarty->assign('password_img', get_template_path('images/password.png')); /* Displasy SSL mode warning? */ -if ($ssl != "" && $config->data['MAIN']['WARNSSL'] == 'true'){ - $smarty->assign ("ssl", ""._("Warning").": "._("Session will not be encrypted.")." "._("Enter SSL session")."!"); +if ($ssl != "" && $config->get_cfg_value("core","warnSSL") == 'true') { + $smarty->assign( + "ssl", + ""._("Warning").": "._("Session will not be encrypted."). + " ". + _("Enter SSL session")."!" + ); } else { - $smarty->assign ("ssl", ""); + $smarty->assign("ssl", ""); } /* show login screen */ -$smarty->assign ("PHPSESSID", session_id()); -if (isset($_SESSION['errors'])){ - $smarty->assign("errors", $_SESSION['errors']); +$smarty->assign("JS", session::global_get('js')); +$smarty->assign("PHPSESSID", session_id()); +if (session::is_set('errors')) { + $smarty->assign("errors", session::get('errors'));; } -if ($error_collector != ""){ - $smarty->assign("php_errors", $error_collector.""); +if ($error_collector != "") { + $smarty->assign("php_errors", $error_collector.""); } else { - $smarty->assign("php_errors", ""); + $smarty->assign("php_errors", ""); } +$smarty->assign("msg_dialogs", msg_dialog::get_dialogs()); displayPWchanger(); ?>