mirror of
https://git.savannah.gnu.org/git/guix.git
synced 2026-04-06 13:10:33 +02:00
build: syscalls: Add setns.
* guix/build/syscalls.scm (setns): New procedure.
* tests/syscalls.scm ("setns"): New test.
squash: setns
This commit is contained in:
committed by
David Thompson
parent
8950ed11c6
commit
43ace6ea76
@@ -90,6 +90,32 @@
|
||||
((_ . status)
|
||||
(= 42 (status:exit-val status))))))))
|
||||
|
||||
(test-assert "setns"
|
||||
(match (clone (logior CLONE_NEWUSER SIGCHLD))
|
||||
(0 (primitive-exit 0))
|
||||
(clone-pid
|
||||
(match (pipe)
|
||||
((in . out)
|
||||
(match (primitive-fork)
|
||||
(0
|
||||
(close in)
|
||||
;; Join the user namespace.
|
||||
(call-with-input-file (user-namespace clone-pid)
|
||||
(lambda (port)
|
||||
(setns (port->fdes port) 0)))
|
||||
(write 'done out)
|
||||
(close out)
|
||||
(primitive-exit 0))
|
||||
(fork-pid
|
||||
(close out)
|
||||
;; Wait for the child process to join the namespace.
|
||||
(read in)
|
||||
(let ((result (and (equal? (readlink (user-namespace clone-pid))
|
||||
(readlink (user-namespace fork-pid))))))
|
||||
;; Clean up.
|
||||
(waitpid clone-pid)
|
||||
(waitpid fork-pid)
|
||||
result))))))))
|
||||
|
||||
(test-assert "all-network-interfaces"
|
||||
(match (all-network-interfaces)
|
||||
|
||||
Reference in New Issue
Block a user