;;; GNU Guix --- Functional package management for GNU ;;; Copyright © 2017 Christopher Baines ;;; Copyright © 2018 Clément Lassieur ;;; ;;; 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 tests rsync) #:use-module (gnu packages rsync) #:use-module (gnu tests) #:use-module (gnu system) #:use-module (gnu system file-systems) #:use-module (gnu system shadow) #:use-module (gnu system vm) #:use-module (gnu services) #:use-module (gnu services rsync) #:use-module (gnu services networking) #:use-module (guix gexp) #:use-module (guix store) #:export (%test-rsync)) (define* (run-rsync-test rsync-os #:optional (rsync-port 873)) "Run tests in %RSYNC-OS, which has rsync running and listening on PORT." (define os (marionette-operating-system rsync-os #:imported-modules '((gnu services herd) (guix combinators)))) (define vm (virtual-machine (operating-system os) (port-forwardings '()))) (define test (with-imported-modules '((gnu build marionette)) #~(begin (use-modules (srfi srfi-11) (srfi srfi-64) (gnu build marionette)) (define marionette (make-marionette (list #$vm))) (mkdir #$output) (chdir #$output) (test-begin "rsync") ;; Wait for rsync to be up and running. (test-assert "service running" (marionette-eval '(begin (use-modules (gnu services herd)) ;; Make sure the 'rsync' command is found. (setenv "PATH" "/run/current-system/profile/bin") (start-service 'rsync)) marionette)) ;; Make sure the PID file is created. (test-assert "PID file" (marionette-eval '(file-exists? "/var/run/rsyncd/rsyncd.pid") marionette)) (test-assert "Test file copied to share" (marionette-eval '(begin (call-with-output-file "/tmp/input" (lambda (port) (display "test-file-contents\n" port))) (zero? (system* "rsync" "/tmp/input" (string-append "rsync://localhost:" (number->string #$rsync-port) "/files/input")))) marionette)) (test-equal "Test file correctly received from share" "test-file-contents" (marionette-eval '(begin (use-modules (ice-9 rdelim)) (zero? (system* "rsync" (string-append "rsync://localhost:" (number->string #$rsync-port) "/files/input") "/tmp/output")) (call-with-input-file "/tmp/output" (lambda (port) (read-line port)))) marionette)) (test-end) (exit (= (test-runner-fail-count (test-runner-current)) 0))))) (gexp->derivation "rsync-test" test)) (define* %rsync-os ;; Return operating system under test. (let ((base-os (simple-operating-system (service dhcp-client-service-type) (service rsync-service-type)))) (operating-system (inherit base-os) (packages (cons* rsync (operating-system-packages base-os)))))) (define %test-rsync (system-test (name "rsync") (description "Connect to a running RSYNC server.") (value (run-rsync-test %rsync-os)))) on logic....This commit adds allocation logic for subid ranges. Subid ranges are ranges of contiguous subids that are mapped to a user in the host system. This patch implements a flexible allocation algorithm allowing users that do not want (or need) to specify details of the subid ranges that they are requesting to avoid doing so, while upholding requests of users that need to have specific ranges. * gnu/build/accounts.scm (%subordinate-id-min): New variable; (%subordinate-id-max): new variable; (%subordinate-id-count): new variable; (subordinate-id?): new variable; (&subordinate-id-error): new variable; (&subordinate-id-overflow-error): new variable; (&illegal-subid-range-error): new variable; (&specific-subid-range-expected-error): new variable; (&generic-subid-range-expected-error): new variable; (within-interval?): new variable; (allocate-unused-range): new variable; (allocate-generic-range): new variable; (allocate-specific-range): new variable; (reserve-subids): new variable; (range->entry): new variable; (entry->range): new variable; (allocate-subids): new variable; (subuid+subgid-databases): new variable. * gnu/system/accounts.scm (subid-range-end): New variable; (subid-range-has-start?): new variable; (subid-range-less): new variable. * test/accounts.scm: Test them. Change-Id: I8de1fd7cfe508b9c76408064d6f498471da0752d Co-Authored-By: Ludovic Courtès <ludo@gnu.org> Signed-off-by: Giacomo Leidi <goodoldpaul@autistici.org> Signed-off-by: Ludovic Courtès <ludo@gnu.org> Giacomo Leidi 2024-12-18accounts: Add /etc/subuid and /etc/subgid support....This commit adds a new record type, <subid-entry> and serializers and deserializers for it in (gnu build accounts). Each instance of this record represents one line in either /etc/subuid or /etc/subgid. Since Shadow uses the same representation for both files, it should be ok if we do it as well. This commit adds also <subid-range>, a user facing representation of <subid-entry>. It is supposed to be usable directly in OS configurations. * gnu/build/accounts.scm (subid-entry): New record; (write-subgid): add serializer for subgids; (write-subuid): add serializer for subuids; (read-subgid): add serializer for subgids; (read-subuid): add serializer for subuids. * gnu/system/accounts.scm (subid-range): New record. * test/accounts.scm: Test them. Change-Id: I6b037e40e354c069bf556412bb5b626bd3ea1b2c Signed-off-by: Giacomo Leidi <goodoldpaul@autistici.org> Signed-off-by: Ludovic Courtès <ludo@gnu.org> Giacomo Leidi