$error";
}
if (!secpass_check_history($_SESSION['sess_user_id'], get_nfilter_request_var('password'))) {
$bad_password = true;
$errorMessage = "";
}
// Get password options for the new password
if (function_exists('password_hash')) {
$password_new = password_hash(get_nfilter_request_var('password'), PASSWORD_DEFAULT);
}else{
$password_new = '';
}
$password_old = md5(get_nfilter_request_var('password'));
// Get old password to compare against the database
if (function_exists('password_hash')) {
$current_password_new = password_hash(get_nfilter_request_var('current_password'), PASSWORD_DEFAULT);
}else{
$current_password_new = '';
}
$current_password_old = md5(get_nfilter_request_var('current_password'));
// Password and Confirmed password checks
if ($user['password'] != $current_password_new && $user['password'] != $current_password_old) {
$bad_password = true;
$errorMessage = "";
}
if ($user['password'] == $password_new || $user['password'] == $password_old) {
$bad_password = true;
$errorMessage = "";
}
if (get_nfilter_request_var('password') !== (get_nfilter_request_var('confirm'))) {
$bad_password = true;
$errorMessage = "";
}
if ($bad_password == false && get_nfilter_request_var('password') == get_nfilter_request_var('confirm') && get_nfilter_request_var('password') != '') {
// Password change is good to go
if (read_config_option('secpass_expirepass') > 0) {
db_execute_prepared("UPDATE user_auth
SET lastchange = ?
WHERE id = ?
AND realm = 0
AND enabled = 'on'",
array(time(), intval($_SESSION['sess_user_id'])));
}
$history = intval(read_config_option('secpass_history'));
if ($history > 0) {
$h = db_fetch_row_prepared("SELECT password, password_history
FROM user_auth
WHERE id = ?
AND realm = 0
AND enabled = 'on'",
array($_SESSION['sess_user_id']));
$op = $h['password'];
$h = explode('|', $h['password_history']);
while (count($h) > $history - 1) {
array_shift($h);
}
$h[] = $op;
$h = implode('|', $h);
db_execute_prepared("UPDATE user_auth
SET password_history = ? WHERE id = ? AND realm = 0 AND enabled = 'on'",
array($h, $_SESSION['sess_user_id']));
}
db_execute_prepared('INSERT IGNORE INTO user_log
(username, result, time, ip)
VALUES (?, 3, NOW(), ?)',
array($user['username'], $_SERVER['REMOTE_ADDR']));
db_execute_prepared("UPDATE user_auth
SET must_change_password = '', password = ?
WHERE id = ?",
array($password_new != '' ? $password_new:$password_old, $_SESSION['sess_user_id']));
kill_session_var('sess_change_password');
/* ok, at the point the user has been sucessfully authenticated; so we must decide what to do next */
/* if no console permissions show graphs otherwise, pay attention to user setting */
$realm_id = $user_auth_realm_filenames['index.php'];
$has_console = db_fetch_cell_prepared('SELECT realm_id
FROM user_auth_realm
WHERE user_id = ? AND realm_id = ?',
array($_SESSION['sess_user_id'], $realm_id));
if (basename(get_nfilter_request_var('ref')) == 'auth_changepassword.php' || basename(get_nfilter_request_var('ref')) == '') {
if ($has_console) {
set_request_var('ref', 'index.php');
}else{
set_request_var('ref', 'graph_view.php');
}
}
if (!empty($has_console)) {
switch ($user['login_opts']) {
case '1': /* referer */
header('Location: ' . sanitize_uri(get_nfilter_request_var('ref'))); break;
case '2': /* default console page */
header('Location: index.php'); break;
case '3': /* default graph page */
header('Location: graph_view.php'); break;
default:
api_plugin_hook_function('login_options_navigate', $user['login_opts']);
}
}else{
header('Location: graph_view.php');
}
exit;
}else{
$bad_password = true;
}
break;
}
if (api_plugin_hook_function('custom_password', OPER_MODE_NATIVE) == OPER_MODE_RESKIN) {
exit;
}
if (get_request_var('action') == 'force') {
$errorMessage = "*** " . __('Forced password change') . " ***";
}
/* Create tooltip for password complexity */
$secpass_tooltip = "" . __('Password requirements include:') . "
";
$secpass_body = '';
if (read_config_option('secpass_minlen') > 0) {
$secpass_body .= __('Must be at least %i characters in length', read_config_option('secpass_minlen'));
}
if (read_config_option('secpass_reqmixcase') == 'on') {
$secpass_body .= (strlen($secpass_body) ? '
':'') . __('Must include mixed case');
}
if (read_config_option('secpass_reqnum') == 'on') {
$secpass_body .= (strlen($secpass_body) ? '
':'') . __('Must include at least 1 number');
}
if (read_config_option('secpass_reqspec') == 'on') {
$secpass_body .= (strlen($secpass_body) ? '
':'') . __('Must include at least 1 special character');
}
if (read_config_option('secpass_history') != '0') {
$secpass_body .= (strlen($secpass_body) ? '
':'') . __('Can not be reused for %d password changes', read_config_option('secpass_history')+1);
}
$secpass_tooltip .= $secpass_body;
print "\n";
print "\n";
print "