summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSergey Trofimov <sarg@sarg.org.ru>2025-10-06 16:57:06 +0200
committerLudovic Courtès <ludo@gnu.org>2025-10-13 14:48:27 +0200
commita16d6225ee519cb7031d1610784daefe99b570e8 (patch)
treecac5fc260e48f7761f16852873ce4b9491300568
parent9da40e7bc3ac957395977748274893702e7207f3 (diff)
nss: Allow selecting IP protocol for mDNS lookups.
* gnu/system/nss.scm (mdns-host-lookup-nss): New procedure. * doc/guix.texi (Name Service Switch): Document it. Change-Id: Ie4ff4aab6bf41eb2cec69b78a8427594b20bc954 Signed-off-by: Ludovic Courtès <ludo@gnu.org>
-rw-r--r--doc/guix.texi9
-rw-r--r--gnu/system/nss.scm41
2 files changed, 34 insertions, 16 deletions
diff --git a/doc/guix.texi b/doc/guix.texi
index 23062498106..652db050cbb 100644
--- a/doc/guix.texi
+++ b/doc/guix.texi
@@ -46289,6 +46289,15 @@ This is the name service switch configuration with support for host name
lookup over multicast DNS (mDNS) for host names ending in @code{.local}.
@end defvar
+Furthermore, mDNS lookups could be restricted to IPv4 or IPv6 protocols
+using the procedure @code{mdns-host-lookup-nss}.
+
+@deffn {Procedure} mdns-host-lookup-nss @
+ [#:ipv6? #t] [#:ipv4? #t]
+Return a @code{name-service-switch} object with mDNS lookup restricted
+to specified protocols.
+@end deffn
+
The reference for name service switch configuration is given below. It
is a direct mapping of the configuration file format of the C library , so
please refer to the C library manual for more information (@pxref{NSS
diff --git a/gnu/system/nss.scm b/gnu/system/nss.scm
index 673b96c7132..e46840713fe 100644
--- a/gnu/system/nss.scm
+++ b/gnu/system/nss.scm
@@ -27,6 +27,7 @@
name-service
lookup-specification
+ mdns-host-lookup-nss
%default-nss
%mdns-host-lookup-nss
@@ -152,26 +153,34 @@
;; Default NSS configuration.
(name-service-switch))
-(define %mdns-host-lookup-nss
- (name-service-switch
- (hosts (list %files ;first, check /etc/hosts
+(define* (mdns-host-lookup-nss #:key (ipv6? #t) (ipv4? #t))
+ (let ((flavour (cond
+ ((and ipv6? ipv4?) "mdns")
+ (ipv6? "mdns6")
+ (ipv4? "mdns4")
+ (#t (error "No protocols enabled for mDNS lookups.")))))
+ (name-service-switch
+ (hosts (list %files ;first, check /etc/hosts
- ;; If the above did not succeed, try with 'mdns_minimal'.
- (name-service
- (name "mdns_minimal")
+ ;; If the above did not succeed, try with 'mdns_minimal'.
+ (name-service
+ (name (string-append flavour "_minimal"))
- ;; 'mdns_minimal' is authoritative for '.local'. When it
- ;; returns "not found", no need to try the next methods.
- (reaction (lookup-specification
- (not-found => return))))
+ ;; 'mdns_minimal' is authoritative for '.local'. When it
+ ;; returns "not found", no need to try the next methods.
+ (reaction (lookup-specification
+ (not-found => return))))
- ;; Then fall back to DNS.
- (name-service
- (name "dns"))
+ ;; Then fall back to DNS.
+ (name-service
+ (name "dns"))
- ;; Finally, try with the "full" 'mdns'.
- (name-service
- (name "mdns"))))))
+ ;; Finally, try with the "full" 'mdns'.
+ (name-service
+ (name flavour)))))))
+
+
+(define %mdns-host-lookup-nss (mdns-host-lookup-nss))
;;;