summaryrefslogtreecommitdiff
path: root/gnu/services
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2020-11-16 11:03:19 +0100
committerLudovic Courtès <ludo@gnu.org>2020-11-16 11:21:42 +0100
commit977eb5d023cfdf8e336f1896480eea9cef5c04e9 (patch)
treeef52e8a6dd446e79c964afb83befc46daedd4335 /gnu/services
parent630602831dd93e7bc9a8e64fba958300e8cb0474 (diff)
Properly deal with build directories containing '~'.
Fixes <https://bugs.gnu.org/44626>. Reported by Vagrant Cascadian <vagrant@debian.org>. * tests/build-utils.scm ("wrap-script, simple case"): Pass SCRIPT-CONTENTS to 'display' rather than 'format'. * gnu/services/base.scm (file-system->shepherd-service-name) [valid-characters, mount-point]: New variables. Filter out invalid store file name characters from the mount point of FILE-SYSTEM.
Diffstat (limited to 'gnu/services')
-rw-r--r--gnu/services/base.scm15
1 files changed, 13 insertions, 2 deletions
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 499e50bfd7..712b3a018f 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -285,8 +285,19 @@ This service must be the root of the service dependency graph so that its
(define (file-system->shepherd-service-name file-system)
"Return the symbol that denotes the service mounting and unmounting
FILE-SYSTEM."
- (symbol-append 'file-system-
- (string->symbol (file-system-mount-point file-system))))
+ (define valid-characters
+ ;; Valid store characters; see 'checkStoreName' in the daemon.
+ (string->char-set
+ "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz+-._?="))
+
+ (define mount-point
+ (string-map (lambda (chr)
+ (if (char-set-contains? valid-characters chr)
+ chr
+ #\-))
+ (file-system-mount-point file-system)))
+
+ (symbol-append 'file-system- (string->symbol mount-point)))
(define (mapped-device->shepherd-service-name md)
"Return the symbol that denotes the shepherd service of MD, a <mapped-device>."