systemd/0001-ssh-generator-split-out-common-helper-function.patch
2025-12-17 16:21:00 +01:00

155 lines
5.2 KiB
Diff

From cf18131f96868cd92bf923a4d953b7bbd6e32541 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
Date: Tue, 18 Nov 2025 11:19:41 +0100
Subject: [PATCH 1/3] ssh-generator: split out common helper function
(cherry picked from commit 7e8fe8e29f31e2c35d16ab10b8d7a5d582b38b8c)
---
src/ssh-generator/meson.build | 17 ++++++++++++++---
src/ssh-generator/ssh-generator.c | 15 ++++-----------
src/ssh-generator/ssh-issue.c | 16 ++++------------
src/ssh-generator/ssh-util.c | 23 +++++++++++++++++++++++
src/ssh-generator/ssh-util.h | 3 +++
5 files changed, 48 insertions(+), 26 deletions(-)
create mode 100644 src/ssh-generator/ssh-util.c
create mode 100644 src/ssh-generator/ssh-util.h
diff --git a/src/ssh-generator/meson.build b/src/ssh-generator/meson.build
index f281a25184..a7162e9b86 100644
--- a/src/ssh-generator/meson.build
+++ b/src/ssh-generator/meson.build
@@ -3,15 +3,26 @@
executables += [
generator_template + {
'name' : 'systemd-ssh-generator',
- 'sources' : files('ssh-generator.c'),
+ 'sources' : files(
+ 'ssh-generator.c',
+ 'ssh-util.c',
+ ),
+ 'extract' : files(
+ 'ssh-util.c',
+ ),
},
libexec_template + {
'name' : 'systemd-ssh-proxy',
- 'sources' : files('ssh-proxy.c'),
+ 'sources' : files(
+ 'ssh-proxy.c',
+ ),
},
libexec_template + {
'name' : 'systemd-ssh-issue',
- 'sources' : files('ssh-issue.c'),
+ 'sources' : files(
+ 'ssh-issue.c',
+ ),
+ 'objects' : ['systemd-ssh-generator'],
},
]
diff --git a/src/ssh-generator/ssh-generator.c b/src/ssh-generator/ssh-generator.c
index 778807938b..bf807196ee 100644
--- a/src/ssh-generator/ssh-generator.c
+++ b/src/ssh-generator/ssh-generator.c
@@ -17,6 +17,7 @@
#include "socket-netlink.h"
#include "socket-util.h"
#include "special.h"
+#include "ssh-util.h"
#include "string-util.h"
#include "strv.h"
#include "virt.h"
@@ -211,17 +212,9 @@ static int add_vsock_socket(
return 0;
}
- _cleanup_close_ int vsock_fd = socket(AF_VSOCK, SOCK_STREAM|SOCK_CLOEXEC, 0);
- if (vsock_fd < 0) {
- if (ERRNO_IS_NOT_SUPPORTED(errno)) {
- log_debug("Not creating AF_VSOCK ssh listener, since AF_VSOCK is not available.");
- return 0;
- }
-
- return log_error_errno(errno, "Unable to test if AF_VSOCK is available: %m");
- }
-
- vsock_fd = safe_close(vsock_fd);
+ r = vsock_open_or_warn(/* ret= */ NULL);
+ if (r <= 0)
+ return r;
/* Determine the local CID so that we can log it to help users to connect to this VM */
unsigned local_cid;
diff --git a/src/ssh-generator/ssh-issue.c b/src/ssh-generator/ssh-issue.c
index 68ad66bfd0..9ad9a997bd 100644
--- a/src/ssh-generator/ssh-issue.c
+++ b/src/ssh-generator/ssh-issue.c
@@ -16,6 +16,7 @@
#include "parse-argument.h"
#include "pretty-print.h"
#include "socket-util.h"
+#include "ssh-util.h"
#include "string-util.h"
#include "tmpfile-util.h"
#include "virt.h"
@@ -135,18 +136,9 @@ static int acquire_cid(unsigned *ret_cid) {
return 0;
}
- _cleanup_close_ int vsock_fd = socket(AF_VSOCK, SOCK_STREAM|SOCK_CLOEXEC, 0);
- if (vsock_fd < 0) {
- if (ERRNO_IS_NOT_SUPPORTED(errno)) {
- log_debug("Not creating issue file, since AF_VSOCK is not available.");
- *ret_cid = 0;
- return 0;
- }
-
- return log_error_errno(errno, "Unable to test if AF_VSOCK is available: %m");
- }
-
- vsock_fd = safe_close(vsock_fd);
+ r = vsock_open_or_warn(/* ret= */ NULL);
+ if (r <= 0)
+ return r;
unsigned local_cid;
r = vsock_get_local_cid(&local_cid);
diff --git a/src/ssh-generator/ssh-util.c b/src/ssh-generator/ssh-util.c
new file mode 100644
index 0000000000..5723a2bf2a
--- /dev/null
+++ b/src/ssh-generator/ssh-util.c
@@ -0,0 +1,23 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+#include <sys/socket.h>
+#include <unistd.h>
+
+#include "errno-util.h"
+#include "log.h"
+#include "ssh-util.h"
+
+int vsock_open_or_warn(int *ret) {
+ int fd = RET_NERRNO(socket(AF_VSOCK, SOCK_STREAM|SOCK_CLOEXEC, 0));
+ if (ERRNO_IS_NEG_NOT_SUPPORTED(fd))
+ log_debug_errno(fd, "AF_VSOCK is not available, ignoring: %m");
+ else if (fd < 0)
+ return log_error_errno(fd, "Unable to test if AF_VSOCK is available: %m");
+
+ if (ret)
+ *ret = fd;
+ else
+ close(fd);
+
+ return fd >= 0;
+}
diff --git a/src/ssh-generator/ssh-util.h b/src/ssh-generator/ssh-util.h
new file mode 100644
index 0000000000..60984a5401
--- /dev/null
+++ b/src/ssh-generator/ssh-util.h
@@ -0,0 +1,3 @@
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+int vsock_open_or_warn(int *ret);