summary refs log tree commit diff
diff options
context:
space:
mode:
authorLudovic Courtès <ludo@gnu.org>2022-10-04 09:44:18 +0200
committerLudovic Courtès <ludo@gnu.org>2022-10-04 18:15:35 +0200
commitf83622f17d21d684e431fe14731349b952411368 (patch)
tree289bc9768296268208cbacfe52db22de6c7e2ecd
parent5bc4b8e8e3960d431d66e3e4ac97f196059a875b (diff)
downloadguix-f83622f17d21d684e431fe14731349b952411368.tar.gz
services: anonip: Bail out when the input is not a FIFO.
* gnu/services/web.scm (anonip-shepherd-service)[start]: Accept zero
arguments.  Define 'spawn'.  Print a message and return #f when #$INPUT
does not denote a FIFO.
-rw-r--r--gnu/services/web.scm60
1 files changed, 34 insertions, 26 deletions
diff --git a/gnu/services/web.scm b/gnu/services/web.scm
index e347f5dbcc..e5ab1a1180 100644
--- a/gnu/services/web.scm
+++ b/gnu/services/web.scm
@@ -1438,32 +1438,40 @@ files.")
       (documentation
        "Anonimyze the given log file location with anonip.")
       (start
-       #~(lambda _
-           (unless (file-exists? #$input)
-             (mknod #$input 'fifo #o600 0))
-           (let ((pid
-                  (fork+exec-command
-                   (append
-                    (list #$(file-append (anonip-configuration-anonip config)
-                                         "/bin/anonip")
-                          (string-append "--input=" #$input)
-                          (string-append "--output=" #$output))
-                    (if #$(anonip-configuration-skip-private? config)
-                        '("--skip-private") (list))
-                    '#$(optional anonip-configuration-column "--column")
-                    '#$(optional anonip-configuration-ipv4mask "--ipv4mask")
-                    '#$(optional anonip-configuration-ipv6mask "--ipv6mask")
-                    '#$(optional anonip-configuration-increment "--increment")
-                    '#$(optional anonip-configuration-replacement
-                                 "--replacement")
-                    '#$(optional anonip-configuration-delimiter "--delimiter")
-                    '#$(optional anonip-configuration-regex "--regex"))
-                   ;; Run in a UTF-8 locale
-                   #:environment-variables
-                   (list (string-append "GUIX_LOCPATH=" #$glibc-utf8-locales
-                                        "/lib/locale")
-                         "LC_ALL=en_US.utf8"))))
-             pid)))
+       #~(lambda ()
+           (define (spawn)
+             (fork+exec-command
+              (append
+               (list #$(file-append (anonip-configuration-anonip config)
+                                    "/bin/anonip")
+                     (string-append "--input=" #$input)
+                     (string-append "--output=" #$output))
+               (if #$(anonip-configuration-skip-private? config)
+                   '("--skip-private") (list))
+               '#$(optional anonip-configuration-column "--column")
+               '#$(optional anonip-configuration-ipv4mask "--ipv4mask")
+               '#$(optional anonip-configuration-ipv6mask "--ipv6mask")
+               '#$(optional anonip-configuration-increment "--increment")
+               '#$(optional anonip-configuration-replacement
+                            "--replacement")
+               '#$(optional anonip-configuration-delimiter "--delimiter")
+               '#$(optional anonip-configuration-regex "--regex"))
+              ;; Run in a UTF-8 locale
+              #:environment-variables
+              (list (string-append "GUIX_LOCPATH=" #$glibc-utf8-locales
+                                   "/lib/locale")
+                    "LC_ALL=en_US.utf8")))
+
+           (let ((stat (stat #$input #f)))
+             (cond ((not stat)
+                    (mknod #$input 'fifo #o600 0)
+                    (spawn))
+                   ((eq? 'fifo (stat:type stat))
+                    (spawn))
+                   (else
+                    (format #t "'~a' is not a FIFO; bailing out~%"
+                            #$input)
+                    #f)))))
       (stop #~(make-kill-destructor))))))
 
 (define anonip-service-type