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'],
},
]
#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"
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;
#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"
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);
--- /dev/null
+/* 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;
+}
--- /dev/null
+/* SPDX-License-Identifier: LGPL-2.1-or-later */
+
+int vsock_open_or_warn(int *ret);