diff options
| author | Ludovic Courtès <ludo@gnu.org> | 2018-06-20 10:00:44 +0200 |
|---|---|---|
| committer | Ludovic Courtès <ludo@gnu.org> | 2018-06-20 10:05:18 +0200 |
| commit | 76c321d8e85683091ecbcd3afe8c56fb7c45c00a (patch) | |
| tree | d98d2452f448db71465ef920ad34a3be9856a5c1 /gnu | |
| parent | 661c237b4d8e670e73ea946179a94a3b956bb90e (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.scm | 6 | ||||
| -rw-r--r-- | gnu/tests/base.scm | 71 |
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 | ||
| 542 | non-ASCII names from /tmp.") | ||
| 543 | (value (run-cleanup-test name)))) | ||
| 544 | |||
| 545 | |||
| 546 | ;;; | ||
| 476 | ;;; Mcron. | 547 | ;;; Mcron. |
| 477 | ;;; | 548 | ;;; |
| 478 | 549 | ||
