summaryrefslogtreecommitdiff
path: root/gnu
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2018-06-20 10:00:44 +0200
committerLudovic Courtès <ludo@gnu.org>2018-06-20 10:05:18 +0200
commit76c321d8e85683091ecbcd3afe8c56fb7c45c00a (patch)
treed98d2452f448db71465ef920ad34a3be9856a5c1 /gnu
parent661c237b4d8e670e73ea946179a94a3b956bb90e (diff)
services: cleanup: Expect file names to be UTF-8-encoded.
Fixes <https://bugs.gnu.org/26353>. Reported by Danny Milosavljevic <dannym@scratchpost.org>. * gnu/services.scm (cleanup-gexp): Add 'setenv' and 'setlocale' calls before 'delete-file-recursively'. * gnu/tests/base.scm (%cleanup-os, %test-cleanup): New variables. (run-cleanup-test): New procedure.
Diffstat (limited to 'gnu')
-rw-r--r--gnu/services.scm6
-rw-r--r--gnu/tests/base.scm71
2 files changed, 77 insertions, 0 deletions
diff --git a/gnu/services.scm b/gnu/services.scm
index 3162c6ba05f..55ad5c93688 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -394,8 +394,14 @@ boot."
394 (delete-file "/etc/passwd.lock") 394 (delete-file "/etc/passwd.lock")
395 (delete-file "/etc/.pwd.lock") ;from 'lckpwdf' 395 (delete-file "/etc/.pwd.lock") ;from 'lckpwdf'
396 396
397 ;; Force file names to be decoded as UTF-8. See
398 ;; <https://bugs.gnu.org/26353>.
399 (setenv "GUIX_LOCPATH"
400 #+(file-append glibc-utf8-locales "/lib/locale"))
401 (setlocale LC_CTYPE "en_US.utf8")
397 (delete-file-recursively "/tmp") 402 (delete-file-recursively "/tmp")
398 (delete-file-recursively "/var/run") 403 (delete-file-recursively "/var/run")
404
399 (mkdir "/tmp") 405 (mkdir "/tmp")
400 (chmod "/tmp" #o1777) 406 (chmod "/tmp" #o1777)
401 (mkdir "/var/run") 407 (mkdir "/var/run")
diff --git a/gnu/tests/base.scm b/gnu/tests/base.scm
index 05c846264d5..d209066a744 100644
--- a/gnu/tests/base.scm
+++ b/gnu/tests/base.scm
@@ -30,6 +30,8 @@
30 #:use-module (gnu services mcron) 30 #:use-module (gnu services mcron)
31 #:use-module (gnu services shepherd) 31 #:use-module (gnu services shepherd)
32 #:use-module (gnu services networking) 32 #:use-module (gnu services networking)
33 #:use-module (gnu packages base)
34 #:use-module (gnu packages bash)
33 #:use-module (gnu packages imagemagick) 35 #:use-module (gnu packages imagemagick)
34 #:use-module (gnu packages ocr) 36 #:use-module (gnu packages ocr)
35 #:use-module (gnu packages package-management) 37 #:use-module (gnu packages package-management)
@@ -37,11 +39,13 @@
37 #:use-module (gnu packages tmux) 39 #:use-module (gnu packages tmux)
38 #:use-module (guix gexp) 40 #:use-module (guix gexp)
39 #:use-module (guix store) 41 #:use-module (guix store)
42 #:use-module (guix monads)
40 #:use-module (guix packages) 43 #:use-module (guix packages)
41 #:use-module (srfi srfi-1) 44 #:use-module (srfi srfi-1)
42 #:export (run-basic-test 45 #:export (run-basic-test
43 %test-basic-os 46 %test-basic-os
44 %test-halt 47 %test-halt
48 %test-cleanup
45 %test-mcron 49 %test-mcron
46 %test-nss-mdns)) 50 %test-nss-mdns))
47 51
@@ -473,6 +477,73 @@ in a loop. See <http://bugs.gnu.org/26931>.")
473 477
474 478
475;;; 479;;;
480;;; Cleanup of /tmp, /var/run, etc.
481;;;
482
483(define %cleanup-os
484 (simple-operating-system
485 (simple-service 'dirty-things
486 boot-service-type
487 (with-monad %store-monad
488 (let ((script (plain-file
489 "create-utf8-file.sh"
490 (string-append
491 "echo $0: dirtying /tmp...\n"
492 "set -e; set -x\n"
493 "touch /witness\n"
494 "exec touch /tmp/λαμβδα"))))
495 (with-imported-modules '((guix build utils))
496 (return #~(begin
497 (setenv "PATH"
498 #$(file-append coreutils "/bin"))
499 (invoke #$(file-append bash "/bin/sh")
500 #$script)))))))))
501
502(define (run-cleanup-test name)
503 (define os
504 (marionette-operating-system %cleanup-os
505 #:imported-modules '((gnu services herd)
506 (guix combinators))))
507 (define test
508 (with-imported-modules '((gnu build marionette))
509 #~(begin
510 (use-modules (gnu build marionette)
511 (srfi srfi-64)
512 (ice-9 match))
513
514 (define marionette
515 (make-marionette (list #$(virtual-machine os))))
516
517 (mkdir #$output)
518 (chdir #$output)
519
520 (test-begin "cleanup")
521
522 (test-assert "dirty service worked"
523 (marionette-eval '(file-exists? "/witness") marionette))
524
525 (test-equal "/tmp cleaned up"
526 '("." "..")
527 (marionette-eval '(begin
528 (use-modules (ice-9 ftw))
529 (scandir "/tmp"))
530 marionette))
531
532 (test-end)
533 (exit (= (test-runner-fail-count (test-runner-current)) 0)))))
534
535 (gexp->derivation "cleanup" test))
536
537(define %test-cleanup
538 ;; See <https://bugs.gnu.org/26353>.
539 (system-test
540 (name "cleanup")
541 (description "Make sure the 'cleanup' service can remove files with
542non-ASCII names from /tmp.")
543 (value (run-cleanup-test name))))
544
545
546;;;
476;;; Mcron. 547;;; Mcron.
477;;; 548;;;
478 549