;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2016 David Craven ;;; Copyright © 2019 Ludovic Courtès ;;; Copyright © 2019 Jesse Gildersleve ;;; Copyright © 2020 Jakub Kądziołka ;;; ;;; This file is part of GNU Guix. ;;; ;;; GNU Guix is free software; you can redistribute it and/or modify it ;;; under the terms of the GNU General Public License as published by ;;; the Free Software Foundation; either version 3 of the License, or (at ;;; your option) any later version. ;;; ;;; GNU Guix is distributed in the hope that it will be useful, but ;;; WITHOUT ANY WARRANTY; without even the implied warranty of ;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ;;; GNU General Public License for more details. ;;; ;;; You should have received a copy of the GNU General Public License ;;; along with GNU Guix. If not, see . (define-module (gnu
aboutsummaryrefslogtreecommitdiff
;;; GNU Guix --- Functional package management for GNU
;;; Copyright © 2018 Arun Isaac <arunisaac@systemreboot.net>
;;;
;;; This file is part of GNU Guix.
;;;
;;; GNU Guix is free software; you can redistribute it and/or modify it
;;; under the terms of the GNU General Public License as published by
;;; the Free Software Foundation; either version 3 of the License, or (at
;;; your option) any later version.
;;;
;;; GNU Guix is distributed in the hope that it will be useful, but
;;; WITHOUT ANY WARRANTY; without even the implied warranty of
;;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
;;; GNU General Public License for more details.
;;;
;;; You should have received a copy of the GNU General Public License
;;; along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.

(define-module (gnu tests security-token)
  #:use-module (gnu tests)
  #:use-module (gnu system vm)
  #:use-module (gnu services)
  #:use-module (gnu services security-token)
  #:use-module (guix gexp)
  #:export (%test-pcscd))

(define %pcscd-os
  (simple-operating-system
   (service pcscd-service-type)))

(define* (run-pcscd-test)
  "Run tests of 'pcscd-service-type'."
  (define os
    (marionette-operating-system
     %pcscd-os
     #:imported-modules '((gnu services herd))
     #:requirements '(pcscd)))

  (define test
    (with-imported-modules '((gnu build marionette))
      #~(begin
          (use-modules (srfi srfi-64)
                       (gnu build marionette))
          (define marionette
            (make-marionette (list #$(virtual-machine os))))

          (test-runner-current (system-test-runner #$output))
          (test-begin "pcscd")

          (test-assert "pcscd is alive"
            (marionette-eval
             '(begin
                (use-modules (gnu services herd)
                             (srfi srfi-1))

                (live-service-running
                 (find (lambda (live)
                         (memq 'pcscd (live-service-provision live)))
                       (current-services))))
             marionette))

          (test-end))))

  (gexp->derivation "pcscd" test))

(define %test-pcscd
  (system-test
   (name "pcscd")
   (description "Test a running pcscd daemon.")
   (value (run-pcscd-test))))
(default (xinitrc))) (xsessions-directory sddm-configuration-xsessions-directory (default "/run/current-system/profile/share/xsessions")) (minimum-vt sddm-configuration-minimum-vt (default 7)) ;; [Autologin] (auto-login-user sddm-configuration-auto-login-user (default "")) ;; valid values are xfce.desktop gnome.desktop weston.desktop hawaii.desktop (auto-login-session sddm-configuration-auto-login-session (default "")) (relogin? sddm-configuration-relogin? (default #f))) (define (sddm-configuration-file config) (mixed-text-file "sddm.conf" " [General] DisplayServer=" (sddm-configuration-display-server config) " Numlock=" (sddm-configuration-numlock config) " HaltCommand=" (sddm-configuration-halt-command config) " RebootCommand=" (sddm-configuration-reboot-command config) " [Users] DefaultPath=" (sddm-configuration-default-path config) " MinimumUid=" (number->string (sddm-configuration-minimum-uid config))" MaximumUid=" (number->string (sddm-configuration-maximum-uid config))" RememberLastUser=" (if (sddm-configuration-remember-last-user? config) "true" "false") " RememberLastSession=" (if (sddm-configuration-remember-last-session? config) "true" "false") " HideUsers=" (sddm-configuration-hide-users config) " Hideshells=" (sddm-configuration-hide-shells config) " [Theme] Current=" (sddm-configuration-theme config) " ThemeDir=" (sddm-configuration-themes-directory config) " FacesDir=" (sddm-configuration-faces-directory config) " [Wayland] SessionCommand=" (sddm-configuration-session-command config) " SessionDir=" (sddm-configuration-sessions-directory config) " [X11] ServerPath=" (xorg-start-command (sddm-configuration-xorg config)) " XauthPath=" (sddm-configuration-xauth-path config) " XephyrPath=" (sddm-configuration-xephyr-path config) " DisplayCommand=" (sddm-configuration-xdisplay-start config) " DisplayStopCommand=" (sddm-configuration-xdisplay-stop config) " SessionCommand=" (sddm-configuration-xsession-command config) " SessionDir=" (sddm-configuration-xsessions-directory config) " MinimumVT=" (number->string (sddm-configuration-minimum-vt config)) " ServerArguments=" (string-join (xorg-configuration-server-arguments (sddm-configuration-xorg config))) " [Autologin] User=" (sddm-configuration-auto-login-user config) " Session=" (sddm-configuration-auto-login-session config) " Relogin=" (if (sddm-configuration-relogin? config) "true" "false") " ")) (define (sddm-shepherd-service config) "Return a for sddm with CONFIG." (define sddm-command #~(list (string-append #$(sddm-configuration-sddm config) "/bin/sddm"))) (list (shepherd-service (documentation "SDDM display manager.") (requirement '(user-processes elogind)) (provision '(xorg-server display-manager)) (start #~(make-forkexec-constructor #$sddm-command)) (stop #~(make-kill-destructor))))) (define (sddm-etc-service config) (list `("sddm.conf" ,(sddm-configuration-file config)))) (define (sddm-pam-service config) "Return a PAM service for @command{sddm}." (pam-service (name "sddm") (auth (list (pam-entry (control "requisite") (module "pam_nologin.so")) (pam-entry (control "required") (module "pam_env.so")) (pam-entry (control "required") (module "pam_succeed_if.so") (arguments (list (string-append "uid >= " (number->string (sddm-configuration-minimum-uid config))) "quiet"))) ;; should be factored out into system-auth (pam-entry (control "required") (module "pam_unix.so")))) (account (list ;; should be factored out into system-account (pam-entry (control "required") (module "pam_unix.so")))) (password (list ;; should be factored out into system-password (pam-entry (control "required") (module "pam_unix.so") (arguments (list "sha512" "shadow" "try_first_pass"))))) (session (list ;; lfs has a required pam_limits.so ;; should be factored out into system-session (pam-entry (control "required") (module "pam_unix.so")))))) (define (sddm-greeter-pam-service) "Return a PAM service for @command{sddm-greeter}." (pam-service (name "sddm-greeter") (auth (list ;; Load environment from /etc/environment and ~/.pam_environment (pam-entry (control "required") (module "pam_env.so")) ;; Always let the greeter start without authentication (pam-entry (control "required") (module "pam_permit.so")))) (account (list ;; No action required for account management (pam-entry (control "required") (module "pam_permit.so")))) (password (list ;; Can't change password (pam-entry (control "required") (module "pam_deny.so")))) (session (list ;; Setup session (pam-entry (control "required") (module "pam_unix.so")))))) (define (sddm-autologin-pam-service config) "Return a PAM service for @command{sddm-autologin}" (pam-service (name "sddm-autologin") (auth (list (pam-entry (control "requisite") (module "pam_nologin.so")) (pam-entry (control "required") (module "pam_succeed_if.so") (arguments (list (string-append "uid >= " (number->string (sddm-configuration-minimum-uid config))) "quiet"))) (pam-entry (control "required") (module "pam_permit.so")))) (account (list (pam-entry (control "include") (module "sddm")))) (password (list (pam-entry (control "required") (module "pam_deny.so")))) (session (list (pam-entry (control "include") (module "sddm")))))) (define (sddm-pam-services config) (list (sddm-pam-service config) (sddm-greeter-pam-service) (sddm-autologin-pam-service config))) (define %sddm-accounts (list (user-group (name "sddm") (system? #t)) (user-account (name "sddm") (group "sddm") (system? #t) (comment "SDDM user") (home-directory "/var/lib/sddm") (shell (file-append shadow "/sbin/nologin"))))) ;; Add default themes to profile (define sddm-profile-service (compose list sddm-configuration-sddm)) (define sddm-service-type (handle-xorg-configuration sddm-configuration (service-type (name 'sddm) (extensions (list (service-extension shepherd-root-service-type sddm-shepherd-service) (service-extension etc-service-type sddm-etc-service) (service-extension pam-root-service-type sddm-pam-services) (service-extension account-service-type (const %sddm-accounts)) (service-extension profile-service-type sddm-profile-service))) (default-value (sddm-configuration)) (description "Run SDDM, a display and log-in manager for X11 and Wayland.")))) (define-deprecated (sddm-service #:optional (config (sddm-configuration))) sddm-service-type "Run the @uref{https://github.com/sddm/sddm,SDDM display manager} with the given @var{config}, a @code{} object." (service sddm-service-type config))