unofficial mirror of guix-patches@gnu.org 
 help / color / mirror / code / Atom feed
From: "Ludovic Courtès" <ludo@gnu.org>
To: 69340@debbugs.gnu.org
Cc: "Ludovic Courtès" <ludo@gnu.org>
Subject: [bug#69340] [PATCH] system, home: Validate ‘services’ field value.
Date: Fri, 23 Feb 2024 21:30:34 +0100	[thread overview]
Message-ID: <f23f108051950fa0d7a2022630789a51a3de755d.1708720176.git.ludo@gnu.org> (raw)

This guides newcomers who might stick a single (service …) form
in this field.

* gnu/services.scm (validate-service-list): New macro.
(%validate-service-list): New procedure.
* gnu/system.scm (<operating-system>)[services]: Add ‘sanitize’.
* gnu/home.scm (<home-environment>)[services]: Add ‘sanitize’.

Change-Id: I9e29bd9a078e87b627ab766fd669ba9de79f8473
---
 gnu/home.scm     |  5 +++--
 gnu/services.scm | 19 ++++++++++++++++++-
 gnu/system.scm   |  5 +++--
 3 files changed, 24 insertions(+), 5 deletions(-)

Hi!

The goal here is to recognize this likely pitfall for newcomers
and to guide them.

Thoughts?

Ludo'.

diff --git a/gnu/home.scm b/gnu/home.scm
index 2fefe7ba53..b390c8d534 100644
--- a/gnu/home.scm
+++ b/gnu/home.scm
@@ -1,6 +1,6 @@
 ;;; GNU Guix --- Functional package management for GNU
 ;;; Copyright © 2021 Andrew Tropin <andrew@trop.in>
-;;; Copyright © 2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2022, 2024 Ludovic Courtès <ludo@gnu.org>
 ;;;
 ;;; This file is part of GNU Guix.
 ;;;
@@ -67,7 +67,8 @@ (define-record-type* <home-environment> home-environment
                                 this-home-environment)))
 
   (services           home-environment-user-services
-                      (default '()))
+                      (default '())
+                      (sanitize validate-service-list))
 
   (location           home-environment-location            ; <location>
                       (default (and=> (current-source-location)
diff --git a/gnu/services.scm b/gnu/services.scm
index 59481af10f..88593e8091 100644
--- a/gnu/services.scm
+++ b/gnu/services.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2015-2023 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2015-2024 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
 ;;; Copyright © 2020 Jan (janneke) Nieuwenhuizen <janneke@gnu.org>
 ;;; Copyright © 2020, 2021 Ricardo Wurmus <rekado@elephly.net>
@@ -91,6 +91,8 @@ (define-module (gnu services)
             for-home
             for-home?
 
+            validate-service-list
+
             service-error?
             missing-value-service-error?
             missing-value-service-error-type
@@ -1271,4 +1273,19 @@ (define-syntax-rule (for-home exp ...)
   (syntax-parameterize ((for-home? (identifier-syntax #t)))
     exp ...))
 
+(define-with-syntax-properties (validate-service-list (value properties))
+  (%validate-service-list value properties))
+
+(define (%validate-service-list value properties)
+  (match value
+    (((? service?) ...) value)
+    (_
+     (raise
+      (make-compound-condition
+       (condition
+        (&error-location
+         (location (source-properties->location properties))))
+       (formatted-message
+        (G_ "'services' field must contain a list of services")))))))
+
 ;;; services.scm ends here.
diff --git a/gnu/system.scm b/gnu/system.scm
index aede35775e..aef81d8ccf 100644
--- a/gnu/system.scm
+++ b/gnu/system.scm
@@ -1,5 +1,5 @@
 ;;; GNU Guix --- Functional package management for GNU
-;;; Copyright © 2013-2022 Ludovic Courtès <ludo@gnu.org>
+;;; Copyright © 2013-2022, 2024 Ludovic Courtès <ludo@gnu.org>
 ;;; Copyright © 2015 Mark H Weaver <mhw@netris.org>
 ;;; Copyright © 2015, 2016 Alex Kost <alezost@gmail.com>
 ;;; Copyright © 2016 Chris Marusich <cmmarusich@gmail.com>
@@ -294,7 +294,8 @@ (define-record-type* <operating-system> operating-system
                                 this-operating-system)))
   (services operating-system-user-services        ; list of services
             (thunked)                     ;allow for system-dependent services
-            (default %base-services))
+            (default %base-services)
+            (sanitize validate-service-list))
 
   (pam-services operating-system-pam-services     ; list of PAM services
                 (default (base-pam-services)))

base-commit: b386c11e7804e0b577411d930b60f1e0a4a0382c
-- 
2.41.0





             reply	other threads:[~2024-02-23 21:58 UTC|newest]

Thread overview: 2+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-02-23 20:30 Ludovic Courtès [this message]
2024-03-22 10:43 ` bug#69340: [PATCH] system, home: Validate ‘services’ field value Ludovic Courtès

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://guix.gnu.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=f23f108051950fa0d7a2022630789a51a3de755d.1708720176.git.ludo@gnu.org \
    --to=ludo@gnu.org \
    --cc=69340@debbugs.gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/guix.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).