assign ("logo", image(get_template_path("images/logo.png"))); $smarty->assign ("date", date("l, dS F Y H:i:s O")); $smarty->display(get_template_path('password.tpl')); exit(); } /* Load required includes */ require_once "../include/php_setup.inc"; require_once "functions.inc"; if (!class_exists("log")) { require_once("class_log.inc"); } header("Content-type: text/html; charset=UTF-8"); 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::get_all()) && count(session::get_all())) { session::destroy(); session::start(); } /* Reset errors */ 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)) { 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); /* Generate server list */ $servers= array(); foreach ($config->data['LOCATIONS'] as $key => $ignored) { $servers[$key]= $key; } if (isset($_POST['server'])) { $directory= get_post('server'); }elseif (isset($_GET['directory'])) { $directory= $_GET['directory']; } else { $directory= $config->data['MAIN']['DEFAULT']; if (!isset($servers[$directory])) { $directory = key($servers); } } // Set location and reload the configRegistry - we've now access to the ldap. if(isset($servers[$directory])){ $config->set_current($directory); $config->check_and_reload(); $config->configRegistry->reload(TRUE); } session::global_set('plist', new pluglist($config, $ui)); 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 */ $smarty->compile_dir= $config->get_cfg_value("core", "templateCompileDirectory"); /* Check for compile directory */ 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->get_cfg_value("core","language") == "") { $lang= get_browser_language(); } else { $lang= $config->get_cfg_value("core","language"); } $lang.=".UTF-8"; putenv("LANGUAGE="); putenv("LANG=$lang"); setlocale(LC_ALL, $lang); $GLOBALS['t_language']= $lang; $GLOBALS['t_gettext_message_dir'] = $BASE_DIR.'/locale/'; /* Set the text domain as 'messages' */ $domain = 'messages'; bindtextdomain($domain, LOCALE_DIR); textdomain($domain); $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); } /* Set config to selected one */ $config->set_current($directory); session::global_set('config', $config); if ($_SERVER["REQUEST_METHOD"] != "POST") { @DEBUG( DEBUG_TRACE, __LINE__, __FUNCTION__, __FILE__, $lang, "Setting language to" ); } /* Check for SSL connection */ $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 SSL is forced, just forward to the SSL enabled site */ if ($config->get_cfg_value("core","forceSSL") == 'true' && $ssl != '') { header("Location: $ssl"); exit; } /* Check for selected password method */ $method= $config->get_cfg_value("core","passwordDefaultHash"); if (isset($_GET['method'])) { $method= validate($_GET['method']); $tmp = new passwordMethod($config, "dummy"); $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= get_post('uid'); $smarty->assign('display_username', true); } else { $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 (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 { /* Do we have the selected user somewhere? */ $ui= ldap_login_user($uid, $current_password); /* Load ocMapping into userinfo */ $tmp= new acl($config, NULL, $ui->dn); $ui->ocMapping= $tmp->ocMapping; $ui->loadACL(); 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); } } } /* Parameter fill up */ $params= ""; 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')); /* Displasy SSL mode warning? */ 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", ""); } /* show login screen */ $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.""); } else { $smarty->assign("php_errors", ""); } $smarty->assign("msg_dialogs", msg_dialog::get_dialogs()); displayPWchanger(); ?> // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: