+ function session_get_schema_version($nocache = false) {
+ global $schema_version;
+
+ if (!$schema_version) {
+ $result = Db::get()->query("SELECT schema_version FROM ttrss_version");
+ $version = Db::get()->fetch_result($result, 0, "schema_version");
+ $schema_version = $version;
+ return $version;
+ } else {
+ return $schema_version;
+ }
+ }
+
+ function validate_session() {
+ if (SINGLE_USER_MODE) return true;
+
+ if (VERSION != $_SESSION["version"]) return false;
+
+ $check_ip = $_SESSION['ip_address'];
+
+ switch (SESSION_CHECK_ADDRESS) {
+ case 0:
+ $check_ip = '';
+ break;
+ case 1:
+ $check_ip = substr($check_ip, 0, strrpos($check_ip, '.')+1);
+ break;
+ case 2:
+ $check_ip = substr($check_ip, 0, strrpos($check_ip, '.'));
+ $check_ip = substr($check_ip, 0, strrpos($check_ip, '.')+1);
+ break;
+ };
+
+ if ($check_ip && strpos($_SERVER['REMOTE_ADDR'], $check_ip) !== 0) {
+ $_SESSION["login_error_msg"] =
+ __("Session failed to validate (incorrect IP)");
+ return false;
+ }
+
+ if ($_SESSION["ref_schema_version"] != session_get_schema_version(true))
+ return false;
+
+ if (sha1($_SERVER['HTTP_USER_AGENT']) != $_SESSION["user_agent"])
+ return false;
+
+ if ($_SESSION["uid"]) {
+ $result = Db::get()->query(
+ "SELECT pwd_hash FROM ttrss_users WHERE id = '".$_SESSION["uid"]."'");
+
+ // user not found
+ if (Db::get()->num_rows($result) == 0) {
+ return false;
+ } else {
+ $pwd_hash = Db::get()->fetch_result($result, 0, "pwd_hash");