guix_mirror_bot pushed a commit to branch master
in repository guix.

commit 633ed510fa733861cd4b717c5a4e34bf5be7ef8e
Author: Ludovic Courtès <[email protected]>
AuthorDate: Fri Jun 6 16:00:15 2025 +0200

    tests: guix-daemon: Check that build processes can chown to “kvm”.
    
    * gnu/tests/base.scm (guix-daemon-test-cases)[chown-snippet]: New
    variable.
    ["kvm GID mapped"]: New test.
    
    Change-Id: I0ce7a9250539766628eb2459d60abce7c05a36ee
---
 gnu/tests/base.scm | 37 +++++++++++++++++++++++++++++++++++++
 1 file changed, 37 insertions(+)

diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index f96d781b52..659b754802 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -1116,6 +1116,32 @@ non-ASCII names from /tmp.")
 evaluated in MARIONETTE, a gexp denoting a marionette (system under test).
 Assume that an unprivileged account for 'user' exists on the system under
 test."
+  (define chown-snippet
+    ;; XXX: This snippet exists primarily so that #$output is understood in
+    ;; the right context.
+    '(object->string
+      `(begin
+         (use-modules (guix)
+                      (gnu packages bootstrap))
+         (computed-file "chown-to-supplementary-group"
+                        #~(begin
+                            (use-modules (srfi srfi-1))
+
+                            ',(gettimeofday)      ;nonce
+                            (let* ((groups (getgroups))
+                                   (other (find (lambda (gid)
+                                                  (not (= gid (getgid))))
+                                                (vector->list groups))))
+                              (format #t "attempting to chown \
+to supplementary group ~a...~%" other)
+                              (pk 'supplementary-groups (getgroups)
+                                  'gid (getgid) 'other other)
+                              (force-output)
+                              (mkdir "test")
+                              (chown "test" (getuid) other)
+                              (mkdir #$output)))
+                        #:guile %bootstrap-guile))))
+
   #~(begin
       (test-equal "guix describe"
         0
@@ -1143,6 +1169,17 @@ test."
                                hello))
                          #$marionette))
 
+      (test-equal "kvm GID mapped"
+        0
+        ;; The "kvm" group should be among the supplementary groups of the
+        ;; build user.  Try to chown a file to that group; this fails with
+        ;; EINVAL when running the unprivileged guix-daemon and the "kvm" GID
+        ;; is not mapped in its user namespace.  See
+        ;; <https://bugs.gnu.org/77862>.
+        (marionette-eval
+         '(system* "guix" "build" "--no-grafts" "-e" #$chown-snippet)
+         #$marionette))
+
       (test-equal "guix install hello"
         0
         ;; Check that ~/.guix-profile & co. are properly created.

Reply via email to