* [hardknott 3/9] Use old override syntax
[not found] <cover.1639853918.git.akuster808@gmail.com>
@ 2021-12-18 18:59 ` Armin Kuster
2021-12-18 18:59 ` [hardknott 4/9] postgresql: fix CVE-2021-23214,CVE-2021-23222 Armin Kuster
` (5 subsequent siblings)
6 siblings, 0 replies; 7+ messages in thread
From: Armin Kuster @ 2021-12-18 18:59 UTC (permalink / raw)
To: openembedded-devel
From: Otto Esko <otto.esko@gmail.com>
- can-utils and dstat recipes were using the colon override syntax
introduced in honister
- revert back to underline override notation
Signed-off-by: Otto Esko <otto.esko@gmail.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
---
meta-oe/recipes-extended/socketcan/can-utils_git.bb | 2 +-
meta-oe/recipes-support/dstat/dstat_0.7.4.bb | 2 +-
2 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/meta-oe/recipes-extended/socketcan/can-utils_git.bb b/meta-oe/recipes-extended/socketcan/can-utils_git.bb
index 95086ad211..06c3182dba 100644
--- a/meta-oe/recipes-extended/socketcan/can-utils_git.bb
+++ b/meta-oe/recipes-extended/socketcan/can-utils_git.bb
@@ -48,5 +48,5 @@ ALTERNATIVE_LINK_NAME[cansequence] = "${bindir}/cansequence"
# busybox ip fails to configure can interfaces, so we need iproute2 to do so.
# See details in http://www.armadeus.com/wiki/index.php?title=CAN_bus_Linux_driver.
-RRECOMMENDS:${PN} += "iproute2"
+RRECOMMENDS_${PN} += "iproute2"
diff --git a/meta-oe/recipes-support/dstat/dstat_0.7.4.bb b/meta-oe/recipes-support/dstat/dstat_0.7.4.bb
index bc73f639bd..18c3cdf82c 100644
--- a/meta-oe/recipes-support/dstat/dstat_0.7.4.bb
+++ b/meta-oe/recipes-support/dstat/dstat_0.7.4.bb
@@ -21,4 +21,4 @@ do_install() {
oe_runmake 'DESTDIR=${D}' install
}
-RDEPENDS:${PN} += "python3-core python3-misc python3-resource python3-shell python3-six python3-unixadmin"
+RDEPENDS_${PN} += "python3-core python3-misc python3-resource python3-shell python3-six python3-unixadmin"
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [hardknott 4/9] postgresql: fix CVE-2021-23214,CVE-2021-23222
[not found] <cover.1639853918.git.akuster808@gmail.com>
2021-12-18 18:59 ` [hardknott 3/9] Use old override syntax Armin Kuster
@ 2021-12-18 18:59 ` Armin Kuster
2021-12-18 18:59 ` [hardknott 5/9] sdbus-c++: don't fetch googletest during do_configure Armin Kuster
` (4 subsequent siblings)
6 siblings, 0 replies; 7+ messages in thread
From: Armin Kuster @ 2021-12-18 18:59 UTC (permalink / raw)
To: openembedded-devel
From: Changqing Li <changqing.li@windriver.com>
Signed-off-by: Changqing Li <changqing.li@windriver.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
---
.../postgresql/files/CVE-2021-23214.patch | 116 ++++++++++++++++
.../postgresql/files/CVE-2021-23222.patch | 131 ++++++++++++++++++
.../recipes-dbs/postgresql/postgresql_13.4.bb | 2 +
3 files changed, 249 insertions(+)
create mode 100644 meta-oe/recipes-dbs/postgresql/files/CVE-2021-23214.patch
create mode 100644 meta-oe/recipes-dbs/postgresql/files/CVE-2021-23222.patch
diff --git a/meta-oe/recipes-dbs/postgresql/files/CVE-2021-23214.patch b/meta-oe/recipes-dbs/postgresql/files/CVE-2021-23214.patch
new file mode 100644
index 0000000000..58bf810626
--- /dev/null
+++ b/meta-oe/recipes-dbs/postgresql/files/CVE-2021-23214.patch
@@ -0,0 +1,116 @@
+From 24c2b9e42edb6d2f4ef2cead3b0aa1d6196adfce Mon Sep 17 00:00:00 2001
+From: Tom Lane <tgl@sss.pgh.pa.us>
+Date: Mon, 8 Nov 2021 11:01:43 -0500
+Subject: [PATCH 2/2] Reject extraneous data after SSL or GSS encryption
+ handshake.
+
+The server collects up to a bufferload of data whenever it reads data
+from the client socket. When SSL or GSS encryption is requested
+during startup, any additional data received with the initial
+request message remained in the buffer, and would be treated as
+already-decrypted data once the encryption handshake completed.
+Thus, a man-in-the-middle with the ability to inject data into the
+TCP connection could stuff some cleartext data into the start of
+a supposedly encryption-protected database session.
+
+This could be abused to send faked SQL commands to the server,
+although that would only work if the server did not demand any
+authentication data. (However, a server relying on SSL certificate
+authentication might well not do so.)
+
+To fix, throw a protocol-violation error if the internal buffer
+is not empty after the encryption handshake.
+
+Our thanks to Jacob Champion for reporting this problem.
+
+Security: CVE-2021-23214
+
+Upstream-Status: Backport[https://github.com/postgres/postgres/commit/28e24125541545483093819efae9bca603441951]
+CVE: CVE-2021-23214
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+
+---
+ src/backend/libpq/pqcomm.c | 11 +++++++++++
+ src/backend/postmaster/postmaster.c | 23 ++++++++++++++++++++++-
+ src/include/libpq/libpq.h | 1 +
+ 3 files changed, 34 insertions(+), 1 deletion(-)
+
+diff --git a/src/backend/libpq/pqcomm.c b/src/backend/libpq/pqcomm.c
+index ee2cd86..4dd1c02 100644
+--- a/src/backend/libpq/pqcomm.c
++++ b/src/backend/libpq/pqcomm.c
+@@ -1183,6 +1183,17 @@ pq_getstring(StringInfo s)
+ }
+ }
+
++/* -------------------------------
++ * pq_buffer_has_data - is any buffered data available to read?
++ *
++ * This will *not* attempt to read more data.
++ * --------------------------------
++ */
++bool
++pq_buffer_has_data(void)
++{
++ return (PqRecvPointer < PqRecvLength);
++}
+
+ /* --------------------------------
+ * pq_startmsgread - begin reading a message from the client.
+diff --git a/src/backend/postmaster/postmaster.c b/src/backend/postmaster/postmaster.c
+index 5775fc0..1fcc3f8 100644
+--- a/src/backend/postmaster/postmaster.c
++++ b/src/backend/postmaster/postmaster.c
+@@ -2049,6 +2049,17 @@ retry1:
+ return STATUS_ERROR;
+ #endif
+
++ /*
++ * At this point we should have no data already buffered. If we do,
++ * it was received before we performed the SSL handshake, so it wasn't
++ * encrypted and indeed may have been injected by a man-in-the-middle.
++ * We report this case to the client.
++ */
++ if (pq_buffer_has_data())
++ ereport(FATAL,
++ (errcode(ERRCODE_PROTOCOL_VIOLATION),
++ errmsg("received unencrypted data after SSL request"),
++ errdetail("This could be either a client-software bug or evidence of an attempted man-in-the-middle attack.")));
+ /*
+ * regular startup packet, cancel, etc packet should follow, but not
+ * another SSL negotiation request, and a GSS request should only
+@@ -2080,7 +2091,17 @@ retry1:
+ if (GSSok == 'G' && secure_open_gssapi(port) == -1)
+ return STATUS_ERROR;
+ #endif
+-
++ /*
++ * At this point we should have no data already buffered. If we do,
++ * it was received before we performed the GSS handshake, so it wasn't
++ * encrypted and indeed may have been injected by a man-in-the-middle.
++ * We report this case to the client.
++ */
++ if (pq_buffer_has_data())
++ ereport(FATAL,
++ (errcode(ERRCODE_PROTOCOL_VIOLATION),
++ errmsg("received unencrypted data after GSSAPI encryption request"),
++ errdetail("This could be either a client-software bug or evidence of an attempted man-in-the-middle attack.")));
+ /*
+ * regular startup packet, cancel, etc packet should follow, but not
+ * another GSS negotiation request, and an SSL request should only
+diff --git a/src/include/libpq/libpq.h b/src/include/libpq/libpq.h
+index b115247..9969692 100644
+--- a/src/include/libpq/libpq.h
++++ b/src/include/libpq/libpq.h
+@@ -73,6 +73,7 @@ extern int pq_getbyte(void);
+ extern int pq_peekbyte(void);
+ extern int pq_getbyte_if_available(unsigned char *c);
+ extern int pq_putbytes(const char *s, size_t len);
++extern bool pq_buffer_has_data(void);
+
+ /*
+ * prototypes for functions in be-secure.c
+--
+2.17.1
+
diff --git a/meta-oe/recipes-dbs/postgresql/files/CVE-2021-23222.patch b/meta-oe/recipes-dbs/postgresql/files/CVE-2021-23222.patch
new file mode 100644
index 0000000000..42b78539b4
--- /dev/null
+++ b/meta-oe/recipes-dbs/postgresql/files/CVE-2021-23222.patch
@@ -0,0 +1,131 @@
+From 79125ead2a6a234086844bb42f06d49603fe6ca0 Mon Sep 17 00:00:00 2001
+From: Tom Lane <tgl@sss.pgh.pa.us>
+Date: Mon, 8 Nov 2021 11:14:56 -0500
+Subject: [PATCH 1/2] libpq: reject extraneous data after SSL or GSS encryption
+ handshake.
+
+libpq collects up to a bufferload of data whenever it reads data from
+the socket. When SSL or GSS encryption is requested during startup,
+any additional data received with the server's yes-or-no reply
+remained in the buffer, and would be treated as already-decrypted data
+once the encryption handshake completed. Thus, a man-in-the-middle
+with the ability to inject data into the TCP connection could stuff
+some cleartext data into the start of a supposedly encryption-protected
+database session.
+
+This could probably be abused to inject faked responses to the
+client's first few queries, although other details of libpq's behavior
+make that harder than it sounds. A different line of attack is to
+exfiltrate the client's password, or other sensitive data that might
+be sent early in the session. That has been shown to be possible with
+a server vulnerable to CVE-2021-23214.
+
+To fix, throw a protocol-violation error if the internal buffer
+is not empty after the encryption handshake.
+
+Our thanks to Jacob Champion for reporting this problem.
+
+Security: CVE-2021-23222
+
+Upstream-Status: Backport[https://github.com/postgres/postgres/commit/160c0258802d10b0600d7671b1bbea55d8e17d45]
+CVE: CVE-2021-23222
+
+Signed-off-by: Changqing Li <changqing.li@windriver.com>
+---
+ doc/src/sgml/protocol.sgml | 28 ++++++++++++++++++++++++++++
+ src/interfaces/libpq/fe-connect.c | 26 ++++++++++++++++++++++++++
+ 2 files changed, 54 insertions(+)
+
+diff --git a/doc/src/sgml/protocol.sgml b/doc/src/sgml/protocol.sgml
+index e26619e1b5..b692648fca 100644
+--- a/doc/src/sgml/protocol.sgml
++++ b/doc/src/sgml/protocol.sgml
+@@ -1471,6 +1471,20 @@ SELCT 1/0;<!-- this typo is intentional -->
+ and proceed without requesting <acronym>SSL</acronym>.
+ </para>
+
++ <para>
++ When <acronym>SSL</acronym> encryption can be performed, the server
++ is expected to send only the single <literal>S</literal> byte and then
++ wait for the frontend to initiate an <acronym>SSL</acronym> handshake.
++ If additional bytes are available to read at this point, it likely
++ means that a man-in-the-middle is attempting to perform a
++ buffer-stuffing attack
++ (<ulink url="https://www.postgresql.org/support/security/CVE-2021-23222/">CVE-2021-23222</ulink>).
++ Frontends should be coded either to read exactly one byte from the
++ socket before turning the socket over to their SSL library, or to
++ treat it as a protocol violation if they find they have read additional
++ bytes.
++ </para>
++
+ <para>
+ An initial SSLRequest can also be used in a connection that is being
+ opened to send a CancelRequest message.
+@@ -1532,6 +1546,20 @@ SELCT 1/0;<!-- this typo is intentional -->
+ encryption.
+ </para>
+
++ <para>
++ When <acronym>GSSAPI</acronym> encryption can be performed, the server
++ is expected to send only the single <literal>G</literal> byte and then
++ wait for the frontend to initiate a <acronym>GSSAPI</acronym> handshake.
++ If additional bytes are available to read at this point, it likely
++ means that a man-in-the-middle is attempting to perform a
++ buffer-stuffing attack
++ (<ulink url="https://www.postgresql.org/support/security/CVE-2021-23222/">CVE-2021-23222</ulink>).
++ Frontends should be coded either to read exactly one byte from the
++ socket before turning the socket over to their GSSAPI library, or to
++ treat it as a protocol violation if they find they have read additional
++ bytes.
++ </para>
++
+ <para>
+ An initial GSSENCRequest can also be used in a connection that is being
+ opened to send a CancelRequest message.
+diff --git a/src/interfaces/libpq/fe-connect.c b/src/interfaces/libpq/fe-connect.c
+index f80f4e98d8..57aee95183 100644
+--- a/src/interfaces/libpq/fe-connect.c
++++ b/src/interfaces/libpq/fe-connect.c
+@@ -3076,6 +3076,19 @@ keep_going: /* We will come back to here until there is
+ pollres = pqsecure_open_client(conn);
+ if (pollres == PGRES_POLLING_OK)
+ {
++ /*
++ * At this point we should have no data already buffered.
++ * If we do, it was received before we performed the SSL
++ * handshake, so it wasn't encrypted and indeed may have
++ * been injected by a man-in-the-middle.
++ */
++ if (conn->inCursor != conn->inEnd)
++ {
++ appendPQExpBufferStr(&conn->errorMessage,
++ libpq_gettext("received unencrypted data after SSL response\n"));
++ goto error_return;
++ }
++
+ /* SSL handshake done, ready to send startup packet */
+ conn->status = CONNECTION_MADE;
+ return PGRES_POLLING_WRITING;
+@@ -3175,6 +3188,19 @@ keep_going: /* We will come back to here until there is
+ pollres = pqsecure_open_gss(conn);
+ if (pollres == PGRES_POLLING_OK)
+ {
++ /*
++ * At this point we should have no data already buffered.
++ * If we do, it was received before we performed the GSS
++ * handshake, so it wasn't encrypted and indeed may have
++ * been injected by a man-in-the-middle.
++ */
++ if (conn->inCursor != conn->inEnd)
++ {
++ appendPQExpBufferStr(&conn->errorMessage,
++ libpq_gettext("received unencrypted data after GSSAPI encryption response\n"));
++ goto error_return;
++ }
++
+ /* All set for startup packet */
+ conn->status = CONNECTION_MADE;
+ return PGRES_POLLING_WRITING;
+--
+2.17.1
+
diff --git a/meta-oe/recipes-dbs/postgresql/postgresql_13.4.bb b/meta-oe/recipes-dbs/postgresql/postgresql_13.4.bb
index f63d23dbef..2ed0fa49bb 100644
--- a/meta-oe/recipes-dbs/postgresql/postgresql_13.4.bb
+++ b/meta-oe/recipes-dbs/postgresql/postgresql_13.4.bb
@@ -7,6 +7,8 @@ SRC_URI += "\
file://0001-Add-support-for-RISC-V.patch \
file://0001-Improve-reproducibility.patch \
file://0001-configure.in-bypass-autoconf-2.69-version-check.patch \
+ file://CVE-2021-23214.patch \
+ file://CVE-2021-23222.patch \
"
SRC_URI[sha256sum] = "ea93e10390245f1ce461a54eb5f99a48d8cabd3a08ce4d652ec2169a357bc0cd"
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [hardknott 5/9] sdbus-c++: don't fetch googletest during do_configure
[not found] <cover.1639853918.git.akuster808@gmail.com>
2021-12-18 18:59 ` [hardknott 3/9] Use old override syntax Armin Kuster
2021-12-18 18:59 ` [hardknott 4/9] postgresql: fix CVE-2021-23214,CVE-2021-23222 Armin Kuster
@ 2021-12-18 18:59 ` Armin Kuster
2021-12-18 18:59 ` [hardknott 6/9] sdbus-c++-libsystemd: Avoid hard dependency on rsync Armin Kuster
` (3 subsequent siblings)
6 siblings, 0 replies; 7+ messages in thread
From: Armin Kuster @ 2021-12-18 18:59 UTC (permalink / raw)
To: openembedded-devel
From: Martin Jansa <Martin.Jansa@gmail.com>
* with PTEST_ENABLED it enables with-tests PACKAGECONFIG which
instead of using system googletest gmock, tries to fetch googletest
from github and fails because branch was recently renamed from master to main
| -- Found PkgConfig: /OE/tmp-glibc/work/qemux86-oe-linux/sdbus-c++/0.8.3-r0/recipe-sysroot-native/usr/bin/pkg-config (found version "0.29.2")
| -- Checking for module 'libsystemd>=236'
| -- Found libsystemd, version 249
| -- Building with tests
| Fetching googletest...
| [1/9] Creating directories for 'googletest-populate'
| [1/9] Performing download step (git clone) for 'googletest-populate'
| Cloning into 'googletest-src'...
| fatal: invalid reference: master
| CMake Error at googletest-subbuild/googletest-populate-prefix/tmp/googletest-populate-gitclone.cmake:40 (message):
| Failed to checkout tag: 'master'
|
|
| FAILED: googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-download
| cd /OE/tmp-glibc/work/qemux86-oe-linux/sdbus-c++/0.8.3-r0/build/_deps && /OE/tmp-glibc/work/qemux86-oe-linux/sdbus-c++/0.8.3-r0/recipe-sysroot-native/usr/bin/cmake -P /OE/tmp-glibc/work/qemux86-oe-linux/sdbus-c++/0.8.3-r0/build/_deps/googletest-subbuild/googletest-populate-prefix/tmp/googletest-populate-gitclone.cmake && /OE/tmp-glibc/work/qemux86-oe-linux/sdbus-c++/0.8.3-r0/recipe-sysroot-native/usr/bin/cmake -E touch /OE/tmp-glibc/work/qemux86-oe-linux/sdbus-c++/0.8.3-r0/build/_deps/googletest-subbuild/googletest-populate-prefix/src/googletest-populate-stamp/googletest-populate-download
| ninja: build stopped: subcommand failed.
|
| CMake Error at /OE/tmp-glibc/work/qemux86-oe-linux/sdbus-c++/0.8.3-r0/recipe-sysroot-native/usr/share/cmake-3.19/Modules/FetchContent.cmake:989 (message):
| Build step for googletest failed: 1
| Call Stack (most recent call first):
| /OE/tmp-glibc/work/qemux86-oe-linux/sdbus-c++/0.8.3-r0/recipe-sysroot-native/usr/share/cmake-3.19/Modules/FetchContent.cmake:1118:EVAL:2 (__FetchContent_directPopulate)
| /OE/tmp-glibc/work/qemux86-oe-linux/sdbus-c++/0.8.3-r0/recipe-sysroot-native/usr/share/cmake-3.19/Modules/FetchContent.cmake:1118 (cmake_language)
| tests/CMakeLists.txt:17 (FetchContent_Populate)
|
|
| -- Configuring incomplete, errors occurred!
* unfortunately this backported patch fixes the fetching failure, because
it uses release-${GOOGLETEST_VERSION} tag instead of now non-existent
master branch, but is not enough to prevent fetching from github during
do_configure:
-- Building with tests
-- Could NOT find GTest (missing: GTest_DIR)
-- Checking for module 'gmock>=1.10.0'
-- No package 'gmock' found
Fetching googletest...
we also need to add googletest dependency to with-tests PACKAGECONFIG was fixed in meta-oe/master with the upgrade to 1.0.0:
https://github.com/openembedded/meta-openembedded/commit/b26b66e5da92718b4e99a57fbfaaef9e751c3cfe#diff-48a847e7323703994fd2ce0fcb731ff860fa955a77cdfe39d71a9cc84a042c06L15
then it's ok and not fetching:
-- Building with tests
-- Looking for pthread.h
-- Looking for pthread.h - found
Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
---
...d-googletest-in-the-system-before-do.patch | 96 +++++++++++++++++++
.../recipes-core/sdbus-c++/sdbus-c++_0.8.3.bb | 9 +-
2 files changed, 102 insertions(+), 3 deletions(-)
create mode 100644 meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.8.3/0001-Try-to-first-find-googletest-in-the-system-before-do.patch
diff --git a/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.8.3/0001-Try-to-first-find-googletest-in-the-system-before-do.patch b/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.8.3/0001-Try-to-first-find-googletest-in-the-system-before-do.patch
new file mode 100644
index 0000000000..89cb593e60
--- /dev/null
+++ b/meta-oe/recipes-core/sdbus-c++/sdbus-c++-0.8.3/0001-Try-to-first-find-googletest-in-the-system-before-do.patch
@@ -0,0 +1,96 @@
+From b073e1c2b9a8138da83300f598b9a56fc9762b4b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Stanislav=20Angelovi=C4=8D?= <angelovic.s@gmail.com>
+Date: Mon, 16 Nov 2020 17:05:36 +0100
+Subject: [PATCH] Try to first find googletest in the system before downloading
+ it (#125)
+
+Upstream-Status: Backport [d6fdaca]
+Signed-off-by: Martin Jansa <Martin.Jansa@gmail.com>
+
+---
+ tests/CMakeLists.txt | 62 ++++++++++++++++++++++++++++----------------
+ 1 file changed, 40 insertions(+), 22 deletions(-)
+
+diff --git a/tests/CMakeLists.txt b/tests/CMakeLists.txt
+index 97f7c1a..7ecc327 100644
+--- a/tests/CMakeLists.txt
++++ b/tests/CMakeLists.txt
+@@ -2,26 +2,44 @@
+ # DOWNLOAD AND BUILD OF GOOGLETEST
+ #-------------------------------
+
+-include(FetchContent)
+-
+-message("Fetching googletest...")
+-FetchContent_Declare(googletest
+- GIT_REPOSITORY https://github.com/google/googletest.git
+- GIT_TAG master
+- GIT_SHALLOW 1
+- UPDATE_COMMAND "")
+-
+-#FetchContent_MakeAvailable(googletest) # Not available in CMake 3.13 :-( Let's do it manually:
+-FetchContent_GetProperties(googletest)
+-if(NOT googletest_POPULATED)
+- FetchContent_Populate(googletest)
+- set(gtest_force_shared_crt ON CACHE INTERNAL "" FORCE)
+- set(BUILD_GMOCK ON CACHE INTERNAL "" FORCE)
+- set(INSTALL_GTEST OFF CACHE INTERNAL "" FORCE)
+- set(BUILD_SHARED_LIBS_BAK ${BUILD_SHARED_LIBS})
+- set(BUILD_SHARED_LIBS OFF)
+- add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
+- set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_BAK})
++set(GOOGLETEST_VERSION 1.10.0 CACHE STRING "Version of gmock to use")
++set(GOOGLETEST_GIT_REPO "https://github.com/google/googletest.git" CACHE STRING "A git repo to clone and build googletest from if gmock is not found in the system")
++
++find_package(GTest ${GOOGLETEST_VERSION} CONFIG)
++if (NOT TARGET GTest::gmock)
++ # Try pkg-config if GTest was not found through CMake config
++ find_package(PkgConfig)
++ if (PkgConfig_FOUND)
++ pkg_check_modules(GMock IMPORTED_TARGET GLOBAL gmock>=${GOOGLETEST_VERSION})
++ if(TARGET PkgConfig::GMock)
++ add_library(GTest::gmock ALIAS PkgConfig::GMock)
++ endif()
++ endif()
++ # GTest was not found in the system, build it on our own
++ if (NOT TARGET GTest::gmock)
++ include(FetchContent)
++
++ message("Fetching googletest...")
++ FetchContent_Declare(googletest
++ GIT_REPOSITORY ${GOOGLETEST_GIT_REPO}
++ GIT_TAG release-${GOOGLETEST_VERSION}
++ GIT_SHALLOW 1
++ UPDATE_COMMAND "")
++
++ #FetchContent_MakeAvailable(googletest) # Not available in CMake 3.13 :-( Let's do it manually:
++ FetchContent_GetProperties(googletest)
++ if(NOT googletest_POPULATED)
++ FetchContent_Populate(googletest)
++ set(gtest_force_shared_crt ON CACHE INTERNAL "" FORCE)
++ set(BUILD_GMOCK ON CACHE INTERNAL "" FORCE)
++ set(INSTALL_GTEST OFF CACHE INTERNAL "" FORCE)
++ set(BUILD_SHARED_LIBS_BAK ${BUILD_SHARED_LIBS})
++ set(BUILD_SHARED_LIBS OFF)
++ add_subdirectory(${googletest_SOURCE_DIR} ${googletest_BINARY_DIR})
++ set(BUILD_SHARED_LIBS ${BUILD_SHARED_LIBS_BAK})
++ add_library(GTest::gmock ALIAS gmock)
++ endif()
++ endif()
+ endif()
+
+ #-------------------------------
+@@ -87,11 +105,11 @@ include_directories(${CMAKE_CURRENT_SOURCE_DIR})
+
+ add_executable(sdbus-c++-unit-tests ${UNITTESTS_SRCS})
+ target_compile_definitions(sdbus-c++-unit-tests PRIVATE LIBSYSTEMD_VERSION=${LIBSYSTEMD_VERSION})
+-target_link_libraries(sdbus-c++-unit-tests sdbus-c++-objlib gmock gmock_main)
++target_link_libraries(sdbus-c++-unit-tests sdbus-c++-objlib GTest::gmock)
+
+ add_executable(sdbus-c++-integration-tests ${INTEGRATIONTESTS_SRCS})
+ target_compile_definitions(sdbus-c++-integration-tests PRIVATE LIBSYSTEMD_VERSION=${LIBSYSTEMD_VERSION})
+-target_link_libraries(sdbus-c++-integration-tests sdbus-c++ gmock gmock_main)
++target_link_libraries(sdbus-c++-integration-tests sdbus-c++ GTest::gmock)
+
+ # Manual performance and stress tests
+ option(ENABLE_PERF_TESTS "Build and install manual performance tests (default OFF)" OFF)
diff --git a/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.3.bb b/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.3.bb
index 98829765c2..a8bf43c874 100644
--- a/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.3.bb
+++ b/meta-oe/recipes-core/sdbus-c++/sdbus-c++_0.8.3.bb
@@ -12,13 +12,16 @@ PACKAGECONFIG ??= "${@bb.utils.contains('DISTRO_FEATURES', 'systemd', 'with-exte
${@bb.utils.contains('PTEST_ENABLED', '1', 'with-tests', '', d)}"
PACKAGECONFIG[with-builtin-libsystemd] = ",,sdbus-c++-libsystemd,libcap"
PACKAGECONFIG[with-external-libsystemd] = ",,systemd,libsystemd"
-PACKAGECONFIG[with-tests] = "-DBUILD_TESTS=ON -DTESTS_INSTALL_PATH=${libdir}/${BPN}/tests,-DBUILD_TESTS=OFF"
+PACKAGECONFIG[with-tests] = "-DBUILD_TESTS=ON -DTESTS_INSTALL_PATH=${libdir}/${BPN}/tests,-DBUILD_TESTS=OFF,googletest gmock"
DEPENDS += "expat"
SRCREV = "6e8e5aadb674cccea5bdd55141db5dad887fbacd"
-SRC_URI = "git://github.com/Kistler-Group/sdbus-cpp.git;protocol=https;branch=master"
-SRC_URI += "file://run-ptest"
+
+SRC_URI = "git://github.com/Kistler-Group/sdbus-cpp.git;protocol=https;branch=master \
+ file://0001-Try-to-first-find-googletest-in-the-system-before-do.patch \
+ file://run-ptest \
+"
EXTRA_OECMAKE = "-DBUILD_CODE_GEN=ON \
-DBUILD_DOC=ON \
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [hardknott 6/9] sdbus-c++-libsystemd: Avoid hard dependency on rsync
[not found] <cover.1639853918.git.akuster808@gmail.com>
` (2 preceding siblings ...)
2021-12-18 18:59 ` [hardknott 5/9] sdbus-c++: don't fetch googletest during do_configure Armin Kuster
@ 2021-12-18 18:59 ` Armin Kuster
2021-12-18 19:00 ` [hardknott 7/9] syslog-ng: adjust control socket location Armin Kuster
` (2 subsequent siblings)
6 siblings, 0 replies; 7+ messages in thread
From: Armin Kuster @ 2021-12-18 18:59 UTC (permalink / raw)
To: openembedded-devel
From: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
(cherry picked from commit dcb8ab6169bd93440137bbd4703171987ecd3a15)
[Fixup for hardknott context]
Signed-off-by: Armin Kuster <akuster808@gmail.com>
---
...d25119a495009ea62f79e5daec34cc464628.patch | 53 +++++++++++++++++++
.../sdbus-c++/sdbus-c++-libsystemd_243.bb | 7 +--
2 files changed, 57 insertions(+), 3 deletions(-)
create mode 100644 meta-oe/recipes-core/sdbus-c++/sdbus-c++-libsystemd-243/7c5fd25119a495009ea62f79e5daec34cc464628.patch
diff --git a/meta-oe/recipes-core/sdbus-c++/sdbus-c++-libsystemd-243/7c5fd25119a495009ea62f79e5daec34cc464628.patch b/meta-oe/recipes-core/sdbus-c++/sdbus-c++-libsystemd-243/7c5fd25119a495009ea62f79e5daec34cc464628.patch
new file mode 100644
index 0000000000..ae449791f1
--- /dev/null
+++ b/meta-oe/recipes-core/sdbus-c++/sdbus-c++-libsystemd-243/7c5fd25119a495009ea62f79e5daec34cc464628.patch
@@ -0,0 +1,53 @@
+From 7c5fd25119a495009ea62f79e5daec34cc464628 Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
+Date: Mon, 12 Apr 2021 14:03:32 +0200
+Subject: [PATCH] meson: do not fail if rsync is not installed with meson
+ 0.57.2
+
+https://github.com/mesonbuild/meson/issues/8641
+
+Our CI started to fail. Even if the change is reverted in meson,
+we need a quick workaround here.
+
+Upstream-Status: Backport
+Signed-off-by: Alexander Kanavin <alex.kanavin@gmail.com>
+---
+ man/meson.build | 25 ++++++++++++++-----------
+ 1 file changed, 14 insertions(+), 11 deletions(-)
+
+diff --git a/man/meson.build b/man/meson.build
+index 3cae8446cda..f9c4b83dc81 100644
+--- a/man/meson.build
++++ b/man/meson.build
+@@ -184,17 +184,20 @@ html = custom_target(
+ depends : html_pages,
+ command : ['echo'])
+
+-run_target(
+- 'doc-sync',
+- depends : man_pages + html_pages,
+- command : ['rsync', '-rlv',
+- '--delete-excluded',
+- '--include=man',
+- '--include=*.html',
+- '--exclude=*',
+- '--omit-dir-times',
+- meson.current_build_dir(),
+- get_option('www-target')])
++rsync = find_program('rsync', required : false)
++if rsync.found()
++ run_target(
++ 'doc-sync',
++ depends : man_pages + html_pages,
++ command : [rsync, '-rlv',
++ '--delete-excluded',
++ '--include=man',
++ '--include=*.html',
++ '--exclude=*',
++ '--omit-dir-times',
++ meson.current_build_dir(),
++ get_option('www-target')])
++endif
+
+ ############################################################
+
diff --git a/meta-oe/recipes-core/sdbus-c++/sdbus-c++-libsystemd_243.bb b/meta-oe/recipes-core/sdbus-c++/sdbus-c++-libsystemd_243.bb
index c52024130e..59d6f352c8 100644
--- a/meta-oe/recipes-core/sdbus-c++/sdbus-c++-libsystemd_243.bb
+++ b/meta-oe/recipes-core/sdbus-c++/sdbus-c++-libsystemd_243.bb
@@ -12,9 +12,10 @@ DEPENDS += "gperf-native gettext-native util-linux libcap"
SRCREV = "efb536d0cbe2e58f80e501d19999928c75e08f6a"
SRCBRANCH = "v243-stable"
-SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=https;branch=${SRCBRANCH}"
-
-SRC_URI += "file://static-libsystemd-pkgconfig.patch"
+SRC_URI = "git://github.com/systemd/systemd-stable.git;protocol=https;branch=${SRCBRANCH} \
+ file://static-libsystemd-pkgconfig.patch \
+ file://7c5fd25119a495009ea62f79e5daec34cc464628.patch \
+ "
# patches needed by musl
SRC_URI_append_libc-musl = " ${SRC_URI_MUSL}"
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [hardknott 7/9] syslog-ng: adjust control socket location
[not found] <cover.1639853918.git.akuster808@gmail.com>
` (3 preceding siblings ...)
2021-12-18 18:59 ` [hardknott 6/9] sdbus-c++-libsystemd: Avoid hard dependency on rsync Armin Kuster
@ 2021-12-18 19:00 ` Armin Kuster
2021-12-18 19:00 ` [hardknott 8/9] libteam: switch to python3 Armin Kuster
2021-12-18 19:00 ` [hardknott 9/9] redis: add back missing patch Armin Kuster
6 siblings, 0 replies; 7+ messages in thread
From: Armin Kuster @ 2021-12-18 19:00 UTC (permalink / raw)
To: openembedded-devel
From: Changqing Li <changqing.li@windriver.com>
Commit [1] changed the pidfile dir to /var/run/syslog-ng. This also changed
the location where the control socket is searched for, causing the following
error with systemd:
root@qemux86-64:~# syslog-ng-ctl config
Error connecting control socket, socket='/var/run/syslog-ng/syslog-ng.ctl',
error='No such file or directory'
Update the systemd service file to point to the new location.
[1] 00d1d63e4f7f ("syslog-ng: provide correct PID directory location to
restart/stop syslog-ng daemon")
(master rev: b57d824fdf822a4c3fdb153b92063f88705e3a6b)
Signed-off-by: lmorales <luisalejandro.moralespena@windriver.com>
Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
Signed-off-by: Khem Raj <raj.khem@gmail.com>
Signed-off-by: Ovidiu Panait <ovidiu.panait@windriver.com>
Signed-off-by: Changqing Li <changqing.li@windriver.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
---
.../files/syslog-ng.service-the-syslog-ng-service.patch | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/meta-oe/recipes-support/syslog-ng/files/syslog-ng.service-the-syslog-ng-service.patch b/meta-oe/recipes-support/syslog-ng/files/syslog-ng.service-the-syslog-ng-service.patch
index 0e1d09492b..7334800304 100644
--- a/meta-oe/recipes-support/syslog-ng/files/syslog-ng.service-the-syslog-ng-service.patch
+++ b/meta-oe/recipes-support/syslog-ng/files/syslog-ng.service-the-syslog-ng-service.patch
@@ -38,7 +38,7 @@ index 0ccc2b9..7f08c0e 100644
-CONTROL_FILE=/var/run/syslog-ng.ctl
-PID_FILE=/var/run/syslog-ng.pid
+PERSIST_FILE=@LOCALSTATEDIR@/lib/syslog-ng/syslog-ng.persist
-+CONTROL_FILE=@LOCALSTATEDIR@/lib/syslog-ng/syslog-ng.ctl
++CONTROL_FILE=@LOCALSTATEDIR@/run/syslog-ng/syslog-ng.ctl
+PID_FILE=@LOCALSTATEDIR@/run/syslog-ng.pid
OTHER_OPTIONS="--enable-core"
--
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [hardknott 8/9] libteam: switch to python3
[not found] <cover.1639853918.git.akuster808@gmail.com>
` (4 preceding siblings ...)
2021-12-18 19:00 ` [hardknott 7/9] syslog-ng: adjust control socket location Armin Kuster
@ 2021-12-18 19:00 ` Armin Kuster
2021-12-18 19:00 ` [hardknott 9/9] redis: add back missing patch Armin Kuster
6 siblings, 0 replies; 7+ messages in thread
From: Armin Kuster @ 2021-12-18 19:00 UTC (permalink / raw)
To: openembedded-devel
From: Mingli Yu <mingli.yu@windriver.com>
The original fix for team_basic_test.py only change the interpreter
to python3, but still some error as below:
# ./run-ptest
File "/usr/lib64/libteam/ptest/./team_basic_test.py", line 35
print "Usage: team_basic_test.py [OPTION...]"
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print(...)?
# ./run-ptest
RUN #1
# "ip link add testteamx type team"
# "teamnl testteamx getoption mode"
# "ip link del testteamx"
# "modprobe -r team_mode_loadbalance team_mode_roundrobin team_mode_activebackup team_mode_broadcast team"
Traceback (most recent call last):
File "/usr/lib64/libteam/ptest/./team_basic_test.py", line 206, in <module>
main()
File "/usr/lib64/libteam/ptest/./team_basic_test.py", line 203, in main
btest.run()
File "/usr/lib64/libteam/ptest/./team_basic_test.py", line 180, in run
self._run_one_loop(i + 1)
File "/usr/lib64/libteam/ptest/./team_basic_test.py", line 173, in _run_one_loop
self._run_one_mode(mode_name)
File "/usr/lib64/libteam/ptest/./team_basic_test.py", line 101, in _run_one_mode
cmd_exec("teamnl %s getoption mode" % team_name, "*NOMODE*")
File "/usr/lib64/libteam/ptest/./team_basic_test.py", line 80, in cmd_exec
raise CmdExecUnexpectedOutputException(output, expected_output)
__main__.CmdExecUnexpectedOutputException: Command execution output unexpected: "b'*NOMODE*'" != "*NOMODE*"
So rework team_basic_test.py to fix the above issue.
Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
---
...team_basic_test.py-switch-to-python3.patch | 101 ++++++++++++++++++
...asic_test.py-use-python3-interpreter.patch | 28 -----
.../recipes-support/libteam/libteam_1.31.bb | 2 +-
3 files changed, 102 insertions(+), 29 deletions(-)
create mode 100644 meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-switch-to-python3.patch
delete mode 100644 meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-use-python3-interpreter.patch
diff --git a/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-switch-to-python3.patch b/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-switch-to-python3.patch
new file mode 100644
index 0000000000..69276aba91
--- /dev/null
+++ b/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-switch-to-python3.patch
@@ -0,0 +1,101 @@
+From 06050e79655f0fa7d9daeda1fbd3a9a2c7736841 Mon Sep 17 00:00:00 2001
+From: Mingli Yu <mingli.yu@windriver.com>
+Date: Thu, 2 Dec 2021 15:08:25 +0800
+Subject: [PATCH] team_basic_test.py: switch to python3
+
+Switch the script team_basic_test.py to python3
+
+Upstream-Status: Submitted [https://github.com/jpirko/libteam/pull/63]
+
+Signed-off-by: Mingli Yu <mingli.yu@windriver.com>
+---
+ scripts/team_basic_test.py | 28 ++++++++++++++--------------
+ 1 file changed, 14 insertions(+), 14 deletions(-)
+
+diff --git a/scripts/team_basic_test.py b/scripts/team_basic_test.py
+index faabd18..0b64af2 100755
+--- a/scripts/team_basic_test.py
++++ b/scripts/team_basic_test.py
+@@ -1,4 +1,4 @@
+-#! /usr/bin/env python
++#! /usr/bin/env python3
+ """
+ Basic test.
+
+@@ -32,11 +32,11 @@ def usage():
+ """
+ Print usage of this app
+ """
+- print "Usage: team_basic_test.py [OPTION...]"
+- print ""
+- print " -h, --help print this message"
+- print " -c, --loop-count=NUMBER number of loops (default 1)"
+- print " -p, --port=NETDEV port device (can be defined multiple times)"
++ print("Usage: team_basic_test.py [OPTION...]")
++ print("")
++ print(" -h, --help print this message")
++ print(" -c, --loop-count=NUMBER number of loops (default 1)")
++ print(" -p, --port=NETDEV port device (can be defined multiple times)")
+ sys.exit()
+
+ class CmdExecFailedException(Exception):
+@@ -55,15 +55,15 @@ class CmdExecUnexpectedOutputException(Exception):
+ return "Command execution output unexpected: \"%s\" != \"%s\"" % (self.__output, self.__expected_output)
+
+ def print_output(out_type, string):
+- print("%s:\n"
++ print(("%s:\n"
+ "----------------------------\n"
+ "%s"
+- "----------------------------" % (out_type, string))
++ "----------------------------" % (out_type, string)))
+
+ def cmd_exec(cmd, expected_output=None, cleaner=False):
+ cmd = cmd.rstrip(" ")
+ if not cleaner:
+- print("# \"%s\"" % cmd)
++ print(("# \"%s\"" % cmd))
+ subp = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE,
+ stderr=subprocess.PIPE)
+ (data_stdout, data_stderr) = subp.communicate()
+@@ -74,7 +74,7 @@ def cmd_exec(cmd, expected_output=None, cleaner=False):
+ if data_stderr:
+ print_output("Stderr", data_stderr)
+ raise CmdExecFailedException(subp.returncode)
+- output = data_stdout.rstrip()
++ output = (data_stdout.rstrip()).decode()
+ if expected_output:
+ if output != expected_output:
+ raise CmdExecUnexpectedOutputException(output, expected_output)
+@@ -166,7 +166,7 @@ TEAM_PORT_CONFIG='{"prio": 10}'
+ os.removedirs("/tmp/team_test/")
+
+ def _run_one_loop(self, run_nr):
+- print "RUN #%d" % (run_nr)
++ print("RUN #%d" % (run_nr))
+ self._created_teams = []
+ try:
+ for mode_name in self._team_modes:
+@@ -176,7 +176,7 @@ TEAM_PORT_CONFIG='{"prio": 10}'
+ cmd_exec("modprobe -r team_mode_loadbalance team_mode_roundrobin team_mode_activebackup team_mode_broadcast team");
+
+ def run(self):
+- for i in xrange(self._loop_count):
++ for i in range(self._loop_count):
+ self._run_one_loop(i + 1)
+
+ def main():
+@@ -186,8 +186,8 @@ def main():
+ "hc:p:",
+ ["help", "loop-count=", "port="]
+ )
+- except getopt.GetoptError, err:
+- print str(err)
++ except getopt.GetoptError as err:
++ print(str(err))
+ usage()
+
+ btest = TeamBasicTest()
+--
+2.17.1
+
diff --git a/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-use-python3-interpreter.patch b/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-use-python3-interpreter.patch
deleted file mode 100644
index e27e4f3291..0000000000
--- a/meta-oe/recipes-support/libteam/libteam/0001-team_basic_test.py-use-python3-interpreter.patch
+++ /dev/null
@@ -1,28 +0,0 @@
-From 571c141b434dff13494c6a3afe621f63a8e610e9 Mon Sep 17 00:00:00 2001
-From: Andrey Zhizhikin <andrey.z@gmail.com>
-Date: Mon, 27 Jan 2020 14:29:34 +0000
-Subject: [PATCH] team_basic_test.py: use python3 interpreter
-
-Use python3 since python2 is EOL and has been removed from several
-distributions.
-
-Upstream-Status: Pending
-
-Signed-off-by: Andrey Zhizhikin <andrey.z@gmail.com>
----
- scripts/team_basic_test.py | 2 +-
- 1 file changed, 1 insertion(+), 1 deletion(-)
-
-diff --git a/scripts/team_basic_test.py b/scripts/team_basic_test.py
-index b05be9e..ad980e8 100755
---- a/scripts/team_basic_test.py
-+++ b/scripts/team_basic_test.py
-@@ -1,4 +1,4 @@
--#! /usr/bin/env python
-+#! /usr/bin/env python3
- """
- Basic test.
-
---
-2.17.1
-
diff --git a/meta-oe/recipes-support/libteam/libteam_1.31.bb b/meta-oe/recipes-support/libteam/libteam_1.31.bb
index eb59c1e3e9..764eb6fb74 100644
--- a/meta-oe/recipes-support/libteam/libteam_1.31.bb
+++ b/meta-oe/recipes-support/libteam/libteam_1.31.bb
@@ -11,7 +11,7 @@ SRC_URI = "git://github.com/jpirko/libteam;branch=master;protocol=https \
file://0001-include-sys-select.h-for-fd_set-definition.patch \
file://0002-teamd-Re-adjust-include-header-order.patch \
file://0001-team_basic_test.py-disable-RedHat-specific-test.patch \
- file://0001-team_basic_test.py-use-python3-interpreter.patch \
+ file://0001-team_basic_test.py-switch-to-python3.patch \
file://run-ptest \
"
SRCREV = "3ee12c6d569977cf1cd30d0da77807a07aa77158"
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [hardknott 9/9] redis: add back missing patch
[not found] <cover.1639853918.git.akuster808@gmail.com>
` (5 preceding siblings ...)
2021-12-18 19:00 ` [hardknott 8/9] libteam: switch to python3 Armin Kuster
@ 2021-12-18 19:00 ` Armin Kuster
6 siblings, 0 replies; 7+ messages in thread
From: Armin Kuster @ 2021-12-18 19:00 UTC (permalink / raw)
To: openembedded-devel
From: Changqing Li <changqing.li@windriver.com>
Signed-off-by: Changqing Li <changqing.li@windriver.com>
Signed-off-by: Armin Kuster <akuster808@gmail.com>
---
meta-oe/recipes-extended/redis/redis_6.2.6.bb | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/meta-oe/recipes-extended/redis/redis_6.2.6.bb b/meta-oe/recipes-extended/redis/redis_6.2.6.bb
index c129e61988..202fce16bb 100644
--- a/meta-oe/recipes-extended/redis/redis_6.2.6.bb
+++ b/meta-oe/recipes-extended/redis/redis_6.2.6.bb
@@ -13,7 +13,11 @@ SRC_URI = "http://download.redis.io/releases/${BP}.tar.gz \
file://hiredis-use-default-CC-if-it-is-set.patch \
file://lua-update-Makefile-to-use-environment-build-setting.patch \
file://oe-use-libc-malloc.patch \
+ file://0001-src-Do-not-reset-FINAL_LIBS.patch \
+ file://GNU_SOURCE.patch \
+ file://0006-Define-correct-gregs-for-RISCV32.patch \
"
+
SRC_URI[sha256sum] = "5b2b8b7a50111ef395bf1c1d5be11e6e167ac018125055daa8b5c2317ae131ab"
inherit autotools-brokensep update-rc.d systemd useradd
--
2.25.1
^ permalink raw reply related [flat|nested] 7+ messages in thread