155 lines
5.2 KiB
Diff
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);
|