Version 235

... (rhbz#2113777)
This commit is contained in:
Zbigniew Jędrzejewski-Szmek 2022-08-16 16:20:17 +02:00
parent cc51fb1f04
commit 3c09b2a17b
7 changed files with 8 additions and 258 deletions

1
.gitignore vendored
View File

@ -8,3 +8,4 @@
/python-systemd-231.tar.gz /python-systemd-231.tar.gz
/python-systemd-232.tar.gz /python-systemd-232.tar.gz
/python-systemd-234.tar.gz /python-systemd-234.tar.gz
/python-systemd-235.tar.gz

View File

@ -1,22 +0,0 @@
From 63473b65d0c10268a9e2c9485313c4584027e67e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Wed, 11 Nov 2020 22:36:04 +0100
Subject: [PATCH 1/2] journal: avoid warning about deprecated constant
---
systemd/_reader.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/systemd/_reader.c b/systemd/_reader.c
index c9aa11d43c..8de7f6a963 100644
--- a/systemd/_reader.c
+++ b/systemd/_reader.c
@@ -1339,7 +1339,7 @@ init_reader(void)
PyModule_AddIntConstant(m, "LOCAL_ONLY", SD_JOURNAL_LOCAL_ONLY) ||
PyModule_AddIntConstant(m, "RUNTIME_ONLY", SD_JOURNAL_RUNTIME_ONLY) ||
PyModule_AddIntConstant(m, "SYSTEM", SD_JOURNAL_SYSTEM) ||
- PyModule_AddIntConstant(m, "SYSTEM_ONLY", SD_JOURNAL_SYSTEM_ONLY) ||
+ PyModule_AddIntConstant(m, "SYSTEM_ONLY", SD_JOURNAL_SYSTEM) ||
PyModule_AddIntConstant(m, "CURRENT_USER", SD_JOURNAL_CURRENT_USER) ||
PyModule_AddIntConstant(m, "OS_ROOT", SD_JOURNAL_OS_ROOT) ||
PyModule_AddStringConstant(m, "__version__", PACKAGE_VERSION)) {

View File

@ -1,46 +0,0 @@
From ab9f2797127b374665c37c06b02121f5dcf7d61c Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Thu, 12 Nov 2020 16:55:56 +0100
Subject: [PATCH 2/2] reader: make PY_SSIZE_T_CLEAN
---
systemd/_reader.c | 15 +++++++++++++--
1 file changed, 13 insertions(+), 2 deletions(-)
diff --git a/systemd/_reader.c b/systemd/_reader.c
index 8de7f6a963..3b6a4d0bbc 100644
--- a/systemd/_reader.c
+++ b/systemd/_reader.c
@@ -18,7 +18,12 @@
along with python-systemd; If not, see <http://www.gnu.org/licenses/>.
***/
+#define PY_SSIZE_T_CLEAN
+#pragma GCC diagnostic push
+#pragma GCC diagnostic ignored "-Wredundant-decls"
#include <Python.h>
+#pragma GCC diagnostic pop
+
#include <structmember.h>
#include <datetime.h>
#include <time.h>
@@ -710,11 +715,17 @@ PyDoc_STRVAR(Reader_add_match__doc__,
"Match is a string of the form \"FIELD=value\".");
static PyObject* Reader_add_match(Reader *self, PyObject *args, PyObject *keywds) {
char *match;
- int match_len, r;
+ Py_ssize_t match_len;
+ int r;
if (!PyArg_ParseTuple(args, "s#:add_match", &match, &match_len))
return NULL;
- r = sd_journal_add_match(self->j, match, match_len);
+ if (match_len > INT_MAX) {
+ set_error(-ENOBUFS, NULL, NULL);
+ return NULL;
+ }
+
+ r = sd_journal_add_match(self->j, match, (int) match_len);
if (set_error(r, NULL, "Invalid match") < 0)
return NULL;

View File

@ -1,25 +0,0 @@
From 21e0cee30e5550cd6c9afa8c4cdedbcfdfca8480 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Thu, 12 Nov 2020 17:08:02 +0100
Subject: [PATCH] test: make sure $NOTIFY_SOCKET is unset in test
When running the tests in Fedora's mock, the test would
fail because NOTIFY_SOCKET is set to /run/systemd/nspawn/notify, and
we get a permission error.
---
systemd/test/test_daemon.py | 2 ++
1 file changed, 2 insertions(+)
diff --git a/systemd/test/test_daemon.py b/systemd/test/test_daemon.py
index 1ddb55e94d..ff9e086e72 100644
--- a/systemd/test/test_daemon.py
+++ b/systemd/test/test_daemon.py
@@ -257,6 +257,8 @@ def test_listen_fds_default_unset():
assert listen_fds() == []
def test_notify_no_socket():
+ os.environ.pop('NOTIFY_SOCKET', None)
+
assert notify('READY=1') is False
with skip_enosys():
assert notify('FDSTORE=1', fds=[]) is False

View File

@ -1,152 +0,0 @@
diff -Naur python-systemd-234-orig/systemd/journal.py python-systemd-234/systemd/journal.py
--- python-systemd-234-orig/systemd/journal.py 2017-03-25 21:33:59.000000000 -0400
+++ python-systemd-234/systemd/journal.py 2021-09-16 15:19:58.140761181 -0400
@@ -140,7 +140,7 @@
journal.
"""
- def __init__(self, flags=None, path=None, files=None, converters=None):
+ def __init__(self, flags=None, path=None, files=None, converters=None, namespace=None):
"""Create a new Reader.
Argument `flags` defines the open flags of the journal, which can be one
@@ -149,8 +149,8 @@
and SYSTEM_ONLY opens only journal files of system services and the kernel.
Argument `path` is the directory of journal files, either a file system
- path or a file descriptor. Note that `flags`, `path`, and `files` are
- exclusive.
+ path or a file descriptor. Specify `namespace` to read from specific journal
+ namespace. Note that `flags`, `path`, `files` and `namespace` are exclusive.
Argument `converters` is a dictionary which updates the
DEFAULT_CONVERTERS to convert journal field values. Field names are used
@@ -171,7 +171,7 @@
else:
flags = 0
- super(Reader, self).__init__(flags, path, files)
+ super(Reader, self).__init__(flags, path, files, namespace)
if _sys.version_info >= (3, 3):
self.converters = _ChainMap()
if converters is not None:
diff -Naur python-systemd-234-orig/systemd/_reader.c python-systemd-234/systemd/_reader.c
--- python-systemd-234-orig/systemd/_reader.c 2021-09-16 15:19:21.536553650 -0400
+++ python-systemd-234/systemd/_reader.c 2021-09-16 15:19:58.140761181 -0400
@@ -49,6 +49,12 @@
# define HAVE_HAS_PERSISTENT_FILES
#endif
+#if LIBSYSTEMD_VERSION >= 245
+# define HAVE_JOURNAL_OPEN_NAMESPACE 1
+#else
+# define HAVE_JOURNAL_OPEN_NAMESPACE 0
+#endif
+
#if LIBSYSTEMD_VERSION >= 230
# define HAVE_JOURNAL_OPEN_DIRECTORY_FD
#else
@@ -89,17 +95,17 @@
* Convert a str or bytes object into a C-string path.
* Returns NULL on error.
*/
-static char* convert_path(PyObject *path, PyObject **bytes) {
+static char* str_converter(PyObject *str, PyObject **bytes) {
#if PY_MAJOR_VERSION >=3 && PY_MINOR_VERSION >= 1
int r;
- r = PyUnicode_FSConverter(path, bytes);
+ r = PyUnicode_FSConverter(str, bytes);
if (r == 0)
return NULL;
return PyBytes_AsString(*bytes);
#else
- return PyString_AsString(path);
+ return PyString_AsString(str);
#endif
}
@@ -146,7 +152,7 @@
char *s;
item = PySequence_ITEM(obj, i);
- s = convert_path(item, &bytes);
+ s = str_converter(item, &bytes);
if (!s)
goto cleanup;
@@ -225,7 +231,7 @@
}
PyDoc_STRVAR(Reader__doc__,
- "_Reader([flags | path | files]) -> ...\n\n"
+ "_Reader([flags | path | files | namespace]) -> ...\n\n"
"_Reader allows filtering and retrieval of Journal entries.\n"
"Note: this is a low-level interface, and probably not what you\n"
"want, use systemd.journal.Reader instead.\n\n"
@@ -236,23 +242,25 @@
"OS_ROOT is used to open the journal from directories relative to the specified\n"
"directory path or file descriptor.\n"
"\n"
- "Instead of opening the system journal, argument `path` may specify a directory\n"
- "which contains the journal. It maybe be either a file system path (a string), or\n"
- "a file descriptor (an integer). Alternatively, argument `files` may specify a list\n"
- "of journal file names. Note that `flags`, `path`, `files`, `directory_fd` are\n"
- "exclusive.\n\n"
+ "If `namespace` argument is specified, the specific journal namespace will be open\n"
+ "(supported since systemd v245). Instead of opening the system journal, argument\n"
+ "`path` may specify a directory which contains the journal. It maybe be either\n"
+ "a file system path (a string), or a file descriptor (an integer). Alternatively,\n"
+ "argument `files` may specify a list of journal file names. Note that `flags`, `path`,\n"
+ "`files`, `directory_fd`, `namespace` are exclusive.\n\n"
"_Reader implements the context manager protocol: the journal will be closed when\n"
"exiting the block.");
static int Reader_init(Reader *self, PyObject *args, PyObject *keywds) {
unsigned flags = SD_JOURNAL_LOCAL_ONLY;
- PyObject *_path = NULL, *_files = NULL;
+ PyObject *_path = NULL, *_files = NULL, *_namespace = NULL;
int r;
- static const char* const kwlist[] = {"flags", "path", "files", NULL};
- if (!PyArg_ParseTupleAndKeywords(args, keywds, "|iO&O&:__init__", (char**) kwlist,
+ static const char* const kwlist[] = {"flags", "path", "files", "namespace", NULL};
+ if (!PyArg_ParseTupleAndKeywords(args, keywds, "|iO&O&O&:__init__", (char**) kwlist,
&flags,
null_converter, &_path,
- null_converter, &_files))
+ null_converter, &_files,
+ null_converter, &_namespace))
return -1;
if (!!_path + !!_files > 1) {
@@ -279,7 +287,7 @@
char *path = NULL;
_cleanup_Py_DECREF_ PyObject *path_bytes = NULL;
- path = convert_path(_path, &path_bytes);
+ path = str_converter(_path, &path_bytes);
if (!path)
return -1;
@@ -319,6 +327,20 @@
r = -ENOSYS;
#endif
}
+ } else if (_namespace) {
+#if HAVE_JOURNAL_OPEN_NAMESPACE
+ char *namespace = NULL;
+ _cleanup_Py_DECREF_ PyObject *ns_bytes = NULL;
+ namespace = str_converter(_namespace, &ns_bytes);
+ if (!namespace)
+ return -1;
+
+ Py_BEGIN_ALLOW_THREADS
+ r = sd_journal_open_namespace(&self->j, namespace, flags);
+ Py_END_ALLOW_THREADS
+#else
+ r = -ENOSYS;
+#endif
} else {
Py_BEGIN_ALLOW_THREADS
r = sd_journal_open(&self->j, flags);

View File

@ -1,17 +1,12 @@
Name: python-systemd Name: python-systemd
Version: 234 Version: 235
Release: %autorelease Release: %autorelease
Summary: Python module wrapping systemd functionality Summary: Python module wrapping libsystemd functionality
License: LGPLv2+ License: LGPLv2+
URL: https://github.com/systemd/python-systemd URL: https://github.com/systemd/python-systemd
Source0: https://github.com/systemd/python-systemd/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz Source0: https://github.com/systemd/python-systemd/archive/v%{version}.tar.gz#/%{name}-%{version}.tar.gz
Patch0001: 0001-journal-avoid-warning-about-deprecated-constant.patch
Patch0002: 0002-reader-make-PY_SSIZE_T_CLEAN.patch
Patch0003: 0003-test-make-sure-NOTIFY_SOCKET-is-unset-in-test.patch
Patch0004: 0004-python-systemd-namespaces.patch
BuildRequires: make BuildRequires: make
BuildRequires: gcc BuildRequires: gcc
BuildRequires: systemd-devel BuildRequires: systemd-devel
@ -21,11 +16,10 @@ BuildRequires: web-assets-devel
BuildRequires: python3-pytest BuildRequires: python3-pytest
%global _description %{expand: %global _description %{expand:
Python module for native access to the systemd facilities. Python module for native access to the libsystemd facilities. Functionality
Functionality includes sending of structured messages to the journal includes sending of structured messages to the journal and reading journal
and reading journal files, querying machine and boot identifiers and a files, querying machine and boot identifiers and a lists of message identifiers
lists of message identifiers provided by systemd. Other functionality provided by systemd. Other functionality provided the library is also wrapped.}
provided by libsystemd is also wrapped.}
%description %_description %description %_description

View File

@ -1 +1 @@
SHA512 (python-systemd-234.tar.gz) = 164e34ba46827711e9c6ff9ed58b2706d9a22abfc7001de030ed7d463d8ddf783eb5fee93b207c29950a3c566018cc3f1a21a549421cf3e05c1287b433367eb2 SHA512 (python-systemd-235.tar.gz) = f1286a477200cc7b4d2c44b43452da576e8e660925711466659795775bcee44796688e1ede6cc22e61cb5b03e631c396d22f9a133327ae1147506bce09bab47f