summary refs log tree commit diff
diff options
context:
space:
mode:
authorSergey Trofimov <sarg@sarg.org.ru>2023-03-10 16:00:56 +0100
committerAndrew Tropin <andrew@trop.in>2023-03-13 17:06:19 +0400
commitd1edb26388ca4dab4b435a686cd059d97c113c3e (patch)
treedaa34ac3f90766fb6a972090e6c90b74161fdfed
parent377c8143e7cd5e3bf3e1e8d53ba443f91c88239c (diff)
downloadguix-d1edb26388ca4dab4b435a686cd059d97c113c3e.tar.gz
services: dns: Extend dnsmasq-configuration.
* gnu/service/dns.scm: (<dnsmasq-configuration>)[servers-file]: Add.
(<dnsmasq-configuration>)[tftp-secure?]: Fix typo in parameter name.
* doc/guix.texi: Document (<dnsmasq-configuration>)[servers-file].

Signed-off-by: Andrew Tropin <andrew@trop.in>
-rw-r--r--doc/guix.texi4
-rw-r--r--gnu/services/dns.scm124
2 files changed, 69 insertions, 59 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index b545751e1b..e448bee284 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -31528,6 +31528,10 @@ in @var{servers}.
 @item @code{servers} (default: @code{'()})
 Specify IP address of upstream servers directly.
 
+@item @code{servers-file} (default: @code{#f})
+Specify file containing upstream servers. This file is re-read when dnsmasq receives SIGHUP.
+Could be either a string or a file-like object.
+
 @item @code{addresses} (default: @code{'()})
 For each entry, specify an IP address to return for any host in the
 given domains.  Queries in the domains are never forwarded and always
diff --git a/gnu/services/dns.scm b/gnu/services/dns.scm
index 32fb8c0664..837e3fe6f7 100644
--- a/gnu/services/dns.scm
+++ b/gnu/services/dns.scm
@@ -754,6 +754,8 @@ cache.size = 100 * MB
                     (default #f))       ;boolean
   (servers          dnsmasq-configuration-servers
                     (default '()))      ;list of string
+  (servers-file     dnsmasq-configuration-servers-file
+                    (default #f))       ;string|file-like
   (addresses        dnsmasq-configuration-addresses
                     (default '()))      ;list of string
   (cache-size       dnsmasq-configuration-cache-size
@@ -792,7 +794,7 @@ cache.size = 100 * MB
      port local-service? listen-addresses
      resolv-file no-resolv?
      forward-private-reverse-lookup? query-servers-in-order?
-     servers addresses
+     servers addresses servers-file
      cache-size negative-cache?
      cpe-id
      tftp-enable? tftp-no-fail?
@@ -805,76 +807,80 @@ cache.size = 100 * MB
      (requirement '(networking))
      (documentation "Run the dnsmasq DNS server.")
      (start #~(make-forkexec-constructor
-               '(#$(file-append package "/sbin/dnsmasq")
-                 "--keep-in-foreground"
-                 "--pid-file=/run/dnsmasq.pid"
-                 #$@(if no-hosts?
-                        '("--no-hosts")
+               (list
+                #$(file-append package "/sbin/dnsmasq")
+                "--keep-in-foreground"
+                "--pid-file=/run/dnsmasq.pid"
+                #$@(if no-hosts?
+                       '("--no-hosts")
                         '())
-                 #$(format #f "--port=~a" port)
-                 #$@(if local-service?
-                        '("--local-service")
+                #$(format #f "--port=~a" port)
+                #$@(if local-service?
+                       '("--local-service")
                         '())
-                 #$@(map (cut format #f "--listen-address=~a" <>)
-                         listen-addresses)
-                 #$(format #f "--resolv-file=~a" resolv-file)
-                 #$@(if no-resolv?
-                        '("--no-resolv")
+                #$@(map (cut format #f "--listen-address=~a" <>)
+                        listen-addresses)
+                #$(format #f "--resolv-file=~a" resolv-file)
+                #$@(if no-resolv?
+                       '("--no-resolv")
                         '())
-                 #$@(if forward-private-reverse-lookup?
-                        '()
+                #$@(if forward-private-reverse-lookup?
+                       '()
                         '("--bogus-priv"))
-                 #$@(if query-servers-in-order?
-                        '("--strict-order")
+                #$@(if query-servers-in-order?
+                       '("--strict-order")
                         '())
-                 #$@(map (cut format #f "--server=~a" <>)
-                         servers)
-                 #$@(map (cut format #f "--address=~a" <>)
-                         addresses)
-                 #$(format #f "--cache-size=~a" cache-size)
-                 #$@(if negative-cache?
-                        '()
+                #$@(if servers-file
+                       (list #~(string-append "--servers-file=" #$servers-file))
+                       '())
+                #$@(map (cut format #f "--server=~a" <>)
+                        servers)
+                #$@(map (cut format #f "--address=~a" <>)
+                        addresses)
+                #$(format #f "--cache-size=~a" cache-size)
+                #$@(if negative-cache?
+                       '()
                         '("--no-negcache"))
-                 #$@(if cpe-id
-                        (list (format #f "--add-cpe-id=~a" cpe-id))
+                #$@(if cpe-id
+                       (list (format #f "--add-cpe-id=~a" cpe-id))
+                       '())
+                #$@(if tftp-enable?
+                       '("--enable-tftp")
                         '())
-                 #$@(if tftp-enable?
-                        '("--enable-tftp")
+                #$@(if tftp-no-fail?
+                       '("--tftp-no-fail")
                         '())
-                 #$@(if tftp-no-fail?
-                        '("--tftp-no-fail")
+                #$@(if tftp-single-port?
+                       '("--tftp-single-port")
                         '())
-                 #$@(if tftp-single-port?
-                        '("--tftp-single-port")
+                #$@(if tftp-secure?
+                       '("--tftp-secure")
                         '())
-                 #$@(if tftp-secure?
-                        '("--tftp-secure?")
+                #$@(if tftp-max
+                       (list (format #f "--tftp-max=~a" tftp-max))
+                       '())
+                #$@(if tftp-mtu
+                       (list (format #f "--tftp-mtu=~a" tftp-mtu))
+                       '())
+                #$@(if tftp-no-blocksize?
+                       '("--tftp-no-blocksize")
                         '())
-                 #$@(if tftp-max
-                        (list (format #f "--tftp-max=~a" tftp-max))
+                #$@(if tftp-lowercase?
+                       '("--tftp-lowercase")
                         '())
-                 #$@(if tftp-mtu
-                        (list (format #f "--tftp-mtu=~a" tftp-mtu))
-                        '())
-                 #$@(if tftp-no-blocksize?
-                        '("--tftp-no-blocksize")
-                        '())
-                 #$@(if tftp-lowercase?
-                        '("--tftp-lowercase")
-                        '())
-                 #$@(if tftp-port-range
-                        (list (format #f "--tftp-port-range=~a"
-                                      tftp-port-range))
-                        '())
-                 #$@(if tftp-root
-                        (list (format #f "--tftp-root=~a" tftp-root))
-                        '())
-                 #$@(if tftp-unique-root
-                        (list
-                         (if (> (length tftp-unique-root) 0)
-                             (format #f "--tftp-unique-root=~a" tftp-unique-root)
-                             (format #f "--tftp-unique-root")))
-                        '()))
+                #$@(if tftp-port-range
+                       (list (format #f "--tftp-port-range=~a"
+                                     tftp-port-range))
+                       '())
+                #$@(if tftp-root
+                       (list (format #f "--tftp-root=~a" tftp-root))
+                       '())
+                #$@(if tftp-unique-root
+                       (list
+                        (if (> (length tftp-unique-root) 0)
+                            (format #f "--tftp-unique-root=~a" tftp-unique-root)
+                            (format #f "--tftp-unique-root")))
+                       '()))
                #:pid-file "/run/dnsmasq.pid"))
      (stop #~(make-kill-destructor)))))