$error"; break; } // Check user password history if (!secpass_check_history($user_id, $password)) { $bad_password = true; $errorMessage = "" . __('You cannot use a previously entered password!') . ''; break; } // Password and Confirmed password checks if ($password !== $password_confirm) { $bad_password = true; $errorMessage = "" . __('Your new passwords do not match, please retype.') . ''; break; } // Compare current password with stored password if ((!empty($user['password']) || !empty($current_password)) && !compat_password_verify($current_password, $user['password'])) { $bad_password = true; $errorMessage = "" . __('Your current password is not correct. Please try again.') . ''; break; } // Check new password does not match stored password if (compat_password_verify($password, $user['password'])) { $bad_password = true; $errorMessage = "" . __('Your new password cannot be the same as the old password. Please try again.') . ''; break; } // If password isn't blank, password change is good to go if ($password != '') { 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(), $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($user_id)); $op = $h['password']; $h = explode('|', $h['password_history']); while (cacti_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, $user_id)); } db_execute_prepared('INSERT IGNORE INTO user_log (username, result, time, ip) VALUES (?, 3, NOW(), ?)', array($user['username'], get_client_addr())); db_check_password_length(); db_execute_prepared("UPDATE user_auth SET must_change_password = '', password = ? WHERE id = ?", array(compat_password_hash($password,PASSWORD_DEFAULT), $user_id)); // Clear the auth cache for the user $token = ''; if (isset($_SERVER['HTTP_COOKIE']) && strpos($_SERVER['HTTP_COOKIE'], 'cacti_remembers') !== false) { $parts = explode(';', $_SERVER['HTTP_COOKIE']); foreach ($parts as $p) { if (strpos($p, 'cacti_remembers') !== false) { $pparts = explode('%2C', $p); if (isset($pparts[1])) { $token = $pparts[1]; break; } } } } if ($token != '') { $sql_where = 'AND token != ' . db_qstr(hash('sha512', $token, false)); } else { $sql_where = ''; } db_execute_prepared("DELETE FROM user_auth_cache WHERE user_id = ? $sql_where", array($_SESSION[SESS_USER_ID])); kill_session_var(SESS_CHANGE_PASSWORD); raise_message('password_success'); /* ok, at the point the user has been successfully 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($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 %d characters in length', read_config_option('secpass_minlen')); } if (read_config_option('secpass_reqmixcase') == 'on') { $secpass_body .= ($secpass_body != '' ? '
':'') . __('Must include mixed case'); } if (read_config_option('secpass_reqnum') == 'on') { $secpass_body .= ($secpass_body != '' ? '
':'') . __('Must include at least 1 number'); } if (read_config_option('secpass_reqspec') == 'on') { $secpass_body .= ($secpass_body != '' ? '
':'') . __('Must include at least 1 special character'); } if (read_config_option('secpass_history') != '0') { $secpass_body .= ($secpass_body != '' ? '
':'') . __('Cannot be reused for %d password changes', read_config_option('secpass_history') + 1); } $secpass_tooltip .= $secpass_body; $selectedTheme = get_selected_theme(); $skip_current = (empty($user['password'])); if (isset_request_var('ref')) { $ref_parts = parse_url(get_nfilter_request_var('ref')); $valid = true; if (isset($ref_parts['user']) || isset($ref_parts['pass'])) { $valid = false; } elseif (!isset($ref_parts['host'])) { $value = true; } elseif (isset($ref_parts['host'])) { $server_addr = $_SERVER['SERVER_ADDR']; if (!filter_var($_SERVER['SERVER_NAME'], FILTER_VALIDATE_IP)) { $server_info = dns_get_record($_SERVER['SERVER_NAME'], DNS_ANY); $server_ref = gethostbyname($ref_parts['host']); if ($server_ref != $server_addr) { $valid = false; } if (!$valid && sizeof($server_info)) { foreach($server_info as $record) { if (isset($record['host']) && $record['host'] == $server_ref) { $valid = true; break; } elseif (isset($record['target']) && $record['target'] == $server_ref) { $valid = true; break; } elseif (isset($record['id']) && $record['ip'] == $server_addr) { $valid = true; break; } } } } else { $server_ip = gethostbyname($_SERVER['SERVER_NAME']); $server_ref = gethostbyname($ref_parts['host']); if ($server_ip == $server_ref) { $valid = true; } } } else { $valid = false; } if (!$valid) { cacti_log('WARNING: User attempted to access Cacti from unknown URL', false, 'AUTH'); raise_message('problems_with_page', __('There are problems with the Change Password page. Contact your Cacti administrator right away.'), MESSAGE_LEVEL_ERROR); header('Location:index.php'); exit; } } if ($skip_current) { $title_message = __('Please enter your current password and your new
Cacti password.'); } else { $title_message = __('Please enter your new Cacti password.'); } html_auth_header('change_password', __('Change Password'), __('Change Password'), $title_message); ?> '> '> '> ":'';?> var password_change = $('#password_change').is(':checked'); $(function() { $('#current').focus(); /* clear passwords */ $('#password').val(''); $('#password_confirm').val(''); }); ");