$error"; } if (!secpass_check_history($_SESSION['sess_user_id'], get_nfilter_request_var('password'))) { $bad_password = true; $errorMessage = "" . __('You can not use a previously entered password!') . ""; } // 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 = "" . __('Your current password is not correct. Please try again.') . ""; } if ($user['password'] == $password_new || $user['password'] == $password_old) { $bad_password = true; $errorMessage = "" . __('Your new password can not be the same as the old password. Please try again.') . ""; } if (get_nfilter_request_var('password') !== (get_nfilter_request_var('confirm'))) { $bad_password = true; $errorMessage = "" . __('Your new passwords do not match, please retype.') . ""; } 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 "\n"; print "\t" . __('Change Password') . "\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\t\n"; print "\n"; print "\n"; print "
" . __('Change Password') . "

" . __('Please enter your current password and your new
Cacti password.') . "

" . __('Current password') . "
" . __('New password') . " " . display_tooltip($secpass_tooltip) ."
" . __('Confirm new password') . "
" . $errorMessage . "
" . __('Version %1$s | %2$s', $version, COPYRIGHT_YEARS_SHORT) . "
\n";