Compare commits

...

6 Commits

Author SHA1 Message Date
Sarah Hoffmann
6c03099372 prepare release 4.2.4 2023-11-17 16:31:05 +01:00
Sarah Hoffmann
9f11be4c6a CI: completely remove ubuntu 18 2023-11-17 16:19:55 +01:00
Sarah Hoffmann
6d4da5123c CI: remove Ubuntu 18, no longer available on Actions 2023-11-17 16:13:36 +01:00
Sarah Hoffmann
037042f85b fix parameter use for ST_Project
Before postgis 3.4 ST_Project required a geography as input and seemed
to have implicitly converted to geography. Since 3.4 geometry input
is supported but leads to a completely different result.
2023-11-17 14:28:52 +01:00
Sarah Hoffmann
1da2192fb0 adapt to newest version of mypy 2023-11-17 10:17:25 +01:00
Sarah Hoffmann
35a5424332 improve code to collect the PostGIS version
The SQL contained an unchecked string literal, which may in theory be
used to attack the database.
2023-11-17 10:12:34 +01:00
9 changed files with 24 additions and 26 deletions

View File

@@ -37,13 +37,8 @@ jobs:
needs: create-archive needs: create-archive
strategy: strategy:
matrix: matrix:
ubuntu: [18, 20, 22] ubuntu: [20, 22]
include: include:
- ubuntu: 18
postgresql: 9.6
postgis: 2.5
pytest: pytest
php: 7.2
- ubuntu: 20 - ubuntu: 20
postgresql: 13 postgresql: 13
postgis: 3 postgis: 3

View File

@@ -20,7 +20,7 @@ project(nominatim)
set(NOMINATIM_VERSION_MAJOR 4) set(NOMINATIM_VERSION_MAJOR 4)
set(NOMINATIM_VERSION_MINOR 2) set(NOMINATIM_VERSION_MINOR 2)
set(NOMINATIM_VERSION_PATCH 3) set(NOMINATIM_VERSION_PATCH 4)
set(NOMINATIM_VERSION "${NOMINATIM_VERSION_MAJOR}.${NOMINATIM_VERSION_MINOR}.${NOMINATIM_VERSION_PATCH}") set(NOMINATIM_VERSION "${NOMINATIM_VERSION_MAJOR}.${NOMINATIM_VERSION_MINOR}.${NOMINATIM_VERSION_PATCH}")

View File

@@ -1,3 +1,7 @@
4.2.4
* fix a potential SQL injection in 'nominatim admin --collect-os-info'
* fix compatibility issue with PostGIS 3.4
4.2.3 4.2.3
* fix deletion handling for 'nominatim add-data' * fix deletion handling for 'nominatim add-data'

View File

@@ -273,8 +273,8 @@ BEGIN
END IF; END IF;
RETURN ST_Envelope(ST_Collect( RETURN ST_Envelope(ST_Collect(
ST_Project(geom, radius, 0.785398)::geometry, ST_Project(geom::geography, radius, 0.785398)::geometry,
ST_Project(geom, radius, 3.9269908)::geometry)); ST_Project(geom::geography, radius, 3.9269908)::geometry));
END; END;
$$ $$
LANGUAGE plpgsql IMMUTABLE; LANGUAGE plpgsql IMMUTABLE;

View File

@@ -69,8 +69,8 @@ class DBConnection:
self.current_params: Optional[Sequence[Any]] = None self.current_params: Optional[Sequence[Any]] = None
self.ignore_sql_errors = ignore_sql_errors self.ignore_sql_errors = ignore_sql_errors
self.conn: Optional['psycopg2.connection'] = None self.conn: Optional['psycopg2._psycopg.connection'] = None
self.cursor: Optional['psycopg2.cursor'] = None self.cursor: Optional['psycopg2._psycopg.cursor'] = None
self.connect(cursor_factory=cursor_factory) self.connect(cursor_factory=cursor_factory)
def close(self) -> None: def close(self) -> None:
@@ -78,7 +78,7 @@ class DBConnection:
""" """
if self.conn is not None: if self.conn is not None:
if self.cursor is not None: if self.cursor is not None:
self.cursor.close() # type: ignore[no-untyped-call] self.cursor.close()
self.cursor = None self.cursor = None
self.conn.close() self.conn.close()

View File

@@ -31,7 +31,7 @@ class Cursor(psycopg2.extras.DictCursor):
""" Query execution that logs the SQL query when debugging is enabled. """ Query execution that logs the SQL query when debugging is enabled.
""" """
if LOG.isEnabledFor(logging.DEBUG): if LOG.isEnabledFor(logging.DEBUG):
LOG.debug(self.mogrify(query, args).decode('utf-8')) # type: ignore[no-untyped-call] LOG.debug(self.mogrify(query, args).decode('utf-8'))
super().execute(query, args) super().execute(query, args)

View File

@@ -118,4 +118,4 @@ class CopyBuffer:
""" """
if self.buffer.tell() > 0: if self.buffer.tell() > 0:
self.buffer.seek(0) self.buffer.seek(0)
cur.copy_from(self.buffer, table, columns=columns) # type: ignore[no-untyped-call] cur.copy_from(self.buffer, table, columns=columns)

View File

@@ -12,14 +12,13 @@ import os
import subprocess import subprocess
import sys import sys
from pathlib import Path from pathlib import Path
from typing import List, Optional, Tuple, Union, cast from typing import List, Optional, Tuple, Union
import psutil import psutil
from psycopg2.extensions import make_dsn, parse_dsn from psycopg2.extensions import make_dsn, parse_dsn
from nominatim.config import Configuration from nominatim.config import Configuration
from nominatim.db.connection import connect from nominatim.db.connection import connect
from nominatim.typing import DictCursorResults
from nominatim.version import version_str from nominatim.version import version_str
@@ -107,15 +106,15 @@ def report_system_information(config: Configuration) -> None:
postgresql_ver: str = convert_version(conn.server_version_tuple()) postgresql_ver: str = convert_version(conn.server_version_tuple())
with conn.cursor() as cur: with conn.cursor() as cur:
cur.execute(f""" num = cur.scalar("SELECT count(*) FROM pg_catalog.pg_database WHERE datname=%s",
SELECT datname FROM pg_catalog.pg_database (parse_dsn(config.get_libpq_dsn())['dbname'], ))
WHERE datname='{parse_dsn(config.get_libpq_dsn())['dbname']}'""") nominatim_db_exists = num == 1 if isinstance(num, int) else False
nominatim_db_exists = cast(Optional[DictCursorResults], cur.fetchall())
if nominatim_db_exists: if nominatim_db_exists:
with connect(config.get_libpq_dsn()) as conn: with connect(config.get_libpq_dsn()) as conn:
postgis_ver: str = convert_version(conn.postgis_version_tuple()) postgis_ver: str = convert_version(conn.postgis_version_tuple())
else: else:
postgis_ver = "Unable to connect to database" postgis_ver = "Unable to connect to database"
postgresql_config: str = get_postgresql_config(int(float(postgresql_ver))) postgresql_config: str = get_postgresql_config(int(float(postgresql_ver)))

View File

@@ -25,7 +25,7 @@ from typing import Optional, Tuple
# patch level when cherry-picking the commit with the migration. # patch level when cherry-picking the commit with the migration.
# #
# Released versions always have a database patch level of 0. # Released versions always have a database patch level of 0.
NOMINATIM_VERSION = (4, 2, 3, 0) NOMINATIM_VERSION = (4, 2, 4, 0)
POSTGRESQL_REQUIRED_VERSION = (9, 6) POSTGRESQL_REQUIRED_VERSION = (9, 6)
POSTGIS_REQUIRED_VERSION = (2, 2) POSTGIS_REQUIRED_VERSION = (2, 2)