[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
05/07: services: openssh: Listen on both IPv4 and IPv6.
From: |
guix-commits |
Subject: |
05/07: services: openssh: Listen on both IPv4 and IPv6. |
Date: |
Sun, 22 May 2022 15:59:05 -0400 (EDT) |
civodul pushed a commit to branch master
in repository guix.
commit d2b3400f79ffaed3357650307376ab69a7ec3b1b
Author: Ludovic Courtès <ludo@gnu.org>
AuthorDate: Sun May 22 20:12:27 2022 +0200
services: openssh: Listen on both IPv4 and IPv6.
Fixes <https://issues.guix.gnu.org/55335>.
Reported by Christopher Baines <mail@cbaines.net>.
* gnu/services/ssh.scm (openssh-shepherd-service)[inetd-style?]: New
variable.
<start>: Use it. When using 'make-inetd-constructor', pass a list of
endpoints as is possible with the Shepherd 0.9.1.
<stop>: Adjust accordingly.
* gnu/tests/ssh.scm (run-ssh-test)["wait for port 22"]: Rename to...
["wait for port 22, IPv4"]: ... this.
["wait for port 22, IPv6"]: New test.
---
gnu/services/ssh.scm | 21 +++++++++++++++++----
gnu/tests/ssh.scm | 12 +++++++++++-
2 files changed, 28 insertions(+), 5 deletions(-)
diff --git a/gnu/services/ssh.scm b/gnu/services/ssh.scm
index 7fbbe383e5..be5d029374 100644
--- a/gnu/services/ssh.scm
+++ b/gnu/services/ssh.scm
@@ -528,19 +528,32 @@ of user-name/file-like tuples."
#~(list (string-append #$(openssh-configuration-openssh config)
"/sbin/sshd")
"-D" "-f" #$(openssh-config-file config)))
+ (define inetd-style?
+ ;; Whether to use 'make-inetd-constructor'. That procedure appeared in
+ ;; Shepherd 0.9.0, but in 0.9.0, 'make-inetd-constructor' wouldn't let us
+ ;; pass a list of endpoints, and it wouldn't let us define a service
+ ;; listening on both IPv4 and IPv6, hence the conditional below.
+ #~(and (defined? 'make-inetd-constructor)
+ (not (string=? (@ (shepherd config) Version) "0.9.0"))))
+
(list (shepherd-service
(documentation "OpenSSH server.")
(requirement '(syslogd loopback))
(provision '(ssh-daemon ssh sshd))
- (start #~(if (defined? 'make-inetd-constructor)
+
+ (start #~(if #$inetd-style?
(make-inetd-constructor
(append #$openssh-command '("-i"))
- (make-socket-address AF_INET INADDR_ANY
- #$port-number)
+ (list (endpoint
+ (make-socket-address AF_INET INADDR_ANY
+ #$port-number))
+ (endpoint
+ (make-socket-address AF_INET6 IN6ADDR_ANY
+ #$port-number)))
#:max-connections #$max-connections)
(make-forkexec-constructor #$openssh-command
#:pid-file #$pid-file)))
- (stop #~(if (defined? 'make-inetd-destructor)
+ (stop #~(if #$inetd-style?
(make-inetd-destructor)
(make-kill-destructor)))
(auto-start? (openssh-auto-start? config)))))
diff --git a/gnu/tests/ssh.scm b/gnu/tests/ssh.scm
index e3dd601603..3f550db5ea 100644
--- a/gnu/tests/ssh.scm
+++ b/gnu/tests/ssh.scm
@@ -136,9 +136,19 @@ root with an empty password."
(= pid (wait-for-file #$pid-file marionette))
pid)))
- (test-assert "wait for port 22"
+ (test-assert "wait for port 22, IPv4"
(wait-for-tcp-port 22 marionette))
+ (test-assert "wait for port 22, IPv6"
+ ;; Make sure it's also available as IPv6.
+ ;; See <https://issues.guix.gnu.org/55335>.
+ (wait-for-tcp-port 22 marionette
+ #:address
+ `(make-socket-address
+ AF_INET6
+ (inet-pton AF_INET6 "::1")
+ 22)))
+
;; Connect to the guest over SSH. Make sure we can run a shell
;; command there.
(test-equal "shell command"
- branch master updated (f0e9048e98 -> 81f7bb1691), guix-commits, 2022/05/22
- 04/07: marionette: Add #:address parameter to 'wait-for-tcp-port'., guix-commits, 2022/05/22
- 03/07: gnu: shepherd: Update to 0.9.1., guix-commits, 2022/05/22
- 05/07: services: openssh: Listen on both IPv4 and IPv6.,
guix-commits <=
- 06/07: gnu: parted: Reintroduce version 3.4., guix-commits, 2022/05/22
- 01/07: gnu: guile-fibers@1.1: Update to c25dcb9., guix-commits, 2022/05/22
- 02/07: gnu: guile-fibers: Add 'upstream-name' property., guix-commits, 2022/05/22
- 07/07: gnu: guile-parted: Depend on Parted 3.4., guix-commits, 2022/05/22