From d1edb26388ca4dab4b435a686cd059d97c113c3e Mon Sep 17 00:00:00 2001 From: Sergey Trofimov Date: Fri, 10 Mar 2023 16:00:56 +0100 Subject: [PATCH] services: dns: Extend dnsmasq-configuration. * gnu/service/dns.scm: ()[servers-file]: Add. ()[tftp-secure?]: Fix typo in parameter name. * doc/guix.texi: Document ()[servers-file]. Signed-off-by: Andrew Tropin --- doc/guix.texi | 4 ++ gnu/services/dns.scm | 124 +++++++++++++++++++++++-------------------- 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)))))