(address . bug-guix@gnu.org)
* gnu/services/base.scm (guix-service-type): Validate `substitute-urls' field.
Change-Id: I11ed74304ab02ae550db5479be9f02601857f294
---
If you forget to write "https://" when specifying a substitute URL in
guix-configuration, the system will end up in a bad state where any
`guix pull` or `guix reconfigure` operation immediately fail. It's
difficult to fix, so validate the field to avoid the problem.
gnu/services/base.scm | 12 ++++++++++--
1 file changed, 10 insertions(+), 2 deletions(-)
Toggle diff (41 lines)
diff --git a/gnu/services/base.scm b/gnu/services/base.scm
index 85160bd3ab..da26b86c83 100644
--- a/gnu/services/base.scm
+++ b/gnu/services/base.scm
@@ -99,6 +99,7 @@ (define-module (gnu services base)
#:use-module (srfi srfi-35)
#:use-module (ice-9 match)
#:use-module (ice-9 format)
+ #:use-module (web uri)
#:re-export (user-processes-service-type ;backwards compatibility
%default-substitute-urls)
#:export (fstab-service-type
@@ -2075,6 +2076,11 @@ (define (guix-extension-merge a b)
(chroot-directories (append (guix-extension-chroot-directories a)
(guix-extension-chroot-directories b)))))
+(define (validate-substitute-url url-str)
+ (if (string->uri url-str)
+ url-str
+ (error "Not a valid substitute URL: " url-str)))
+
(define guix-service-type
(service-type
(name 'guix)
@@ -2093,8 +2099,10 @@ (define guix-service-type
(inherit config)
(authorized-keys (append (guix-extension-authorized-keys extension)
(guix-configuration-authorized-keys config)))
- (substitute-urls (append (guix-extension-substitute-urls extension)
- (guix-configuration-substitute-urls config)))
+ (substitute-urls
+ (map validate-substitute-url
+ (append (guix-extension-substitute-urls extension)
+ (guix-configuration-substitute-urls config))))
(build-machines
(and (or (guix-configuration-build-machines config)
(pair? (guix-extension-build-machines extension)))
base-commit: 9901416233867233192b63fde7f616751127b189
--
2.41.0