tests: ssh: Add Dropbear test.

* gnu/tests/ssh.scm (run-ssh-test): Try authenticating with
'userauth-none!' when 'userauth-password!' fails.
(%test-dropbear): New variable.
This commit is contained in:
Ludovic Courtès 2016-10-03 15:18:51 +02:00
parent 0e59885060
commit 2b4363891c
No known key found for this signature in database
GPG Key ID: 090B11993D9AEBB5
1 changed files with 35 additions and 11 deletions

View File

@ -31,7 +31,8 @@
#:use-module (guix gexp) #:use-module (guix gexp)
#:use-module (guix store) #:use-module (guix store)
#:use-module (guix monads) #:use-module (guix monads)
#:export (%test-openssh)) #:export (%test-openssh
%test-dropbear))
(define %base-os (define %base-os
(operating-system (operating-system
@ -74,6 +75,7 @@ empty-password logins."
%load-path))) %load-path)))
(use-modules (gnu build marionette) (use-modules (gnu build marionette)
(srfi srfi-26)
(srfi srfi-64) (srfi srfi-64)
(ice-9 match) (ice-9 match)
(ssh session) (ssh session)
@ -139,16 +141,27 @@ empty-password logins."
#:log-verbosity 'protocol))) #:log-verbosity 'protocol)))
(match (connect! session) (match (connect! session)
('ok ('ok
(match (pk 'auth (userauth-password! session "")) ;; Try the simple authentication methods. Dropbear
('success ;; requires 'none' when there are no passwords, whereas
;; FIXME: 'get-server-public-key' segfaults. ;; OpenSSH accepts 'password' with an empty password.
;; (get-server-public-key session) (let loop ((methods (list (cut userauth-password! <> "")
(let ((channel (make-channel session))) (cut userauth-none! <>))))
(channel-open-session channel) (match methods
(channel-request-exec channel (()
"echo hello > /root/witness") (error "all the authentication methods failed"))
(and (zero? (channel-get-exit-status channel)) ((auth rest ...)
(wait-for-file "/root/witness"))))))))) (match (pk 'auth (auth session))
('success
;; FIXME: 'get-server-public-key' segfaults.
;; (get-server-public-key session)
(let ((channel (make-channel session)))
(channel-open-session channel)
(channel-request-exec channel
"echo hello > /root/witness")
(and (zero? (channel-get-exit-status channel))
(wait-for-file "/root/witness"))))
('denied
(loop rest))))))))))
(test-end) (test-end)
(exit (= (test-runner-fail-count (test-runner-current)) 0))))) (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
@ -167,3 +180,14 @@ empty-password logins."
(permit-root-login #t) (permit-root-login #t)
(allow-empty-passwords? #t))) (allow-empty-passwords? #t)))
"/var/run/sshd.pid")))) "/var/run/sshd.pid"))))
(define %test-dropbear
(system-test
(name "dropbear")
(description "Connect to a running Dropbear SSH daemon.")
(value (run-ssh-test name
(service dropbear-service-type
(dropbear-configuration
(root-login? #t)
(allow-empty-passwords? #t)))
"/var/run/dropbear.pid"))))