From 7fb58720fb3a3ec7a754bad455dea06d20cbbbbe Mon Sep 17 00:00:00 2001 From: Frank Denis Date: Sat, 23 Sep 2023 18:37:52 +0200 Subject: [PATCH] Add -include-relays option to include relays in -list and -list-all --- dnscrypt-proxy/config.go | 40 ++++++++++++++++++++++++++++++++++++++-- dnscrypt-proxy/main.go | 1 + 2 files changed, 39 insertions(+), 2 deletions(-) diff --git a/dnscrypt-proxy/config.go b/dnscrypt-proxy/config.go index b88c1eb1..3d721e56 100644 --- a/dnscrypt-proxy/config.go +++ b/dnscrypt-proxy/config.go @@ -290,6 +290,7 @@ type ConfigFlags struct { Resolve *string List *bool ListAll *bool + IncludeRelays *bool JSONOutput *bool Check *bool ConfigFile *string @@ -742,7 +743,7 @@ func ConfigLoad(proxy *Proxy, flags *ConfigFlags) error { } } if *flags.List || *flags.ListAll { - if err := config.printRegisteredServers(proxy, *flags.JSONOutput); err != nil { + if err := config.printRegisteredServers(proxy, *flags.JSONOutput, *flags.IncludeRelays); err != nil { return err } os.Exit(0) @@ -778,8 +779,43 @@ func ConfigLoad(proxy *Proxy, flags *ConfigFlags) error { return nil } -func (config *Config) printRegisteredServers(proxy *Proxy, jsonOutput bool) error { +func (config *Config) printRegisteredServers(proxy *Proxy, jsonOutput bool, includeRelays bool) error { var summary []ServerSummary + if includeRelays { + for _, registeredRelay := range proxy.registeredRelays { + addrStr, port := registeredRelay.stamp.ServerAddrStr, stamps.DefaultPort + var hostAddr string + hostAddr, port = ExtractHostAndPort(addrStr, port) + addrs := make([]string, 0) + if (registeredRelay.stamp.Proto == stamps.StampProtoTypeDoH || registeredRelay.stamp.Proto == stamps.StampProtoTypeODoHTarget) && + len(registeredRelay.stamp.ProviderName) > 0 { + providerName := registeredRelay.stamp.ProviderName + var host string + host, port = ExtractHostAndPort(providerName, port) + addrs = append(addrs, host) + } + if len(addrStr) > 0 { + addrs = append(addrs, hostAddr) + } + serverSummary := ServerSummary{ + Name: registeredRelay.name, + Proto: registeredRelay.stamp.Proto.String(), + IPv6: strings.HasPrefix(addrStr, "["), + Ports: []int{port}, + Addrs: addrs, + DNSSEC: registeredRelay.stamp.Props&stamps.ServerInformalPropertyDNSSEC != 0, + NoLog: registeredRelay.stamp.Props&stamps.ServerInformalPropertyNoLog != 0, + NoFilter: registeredRelay.stamp.Props&stamps.ServerInformalPropertyNoFilter != 0, + Description: registeredRelay.description, + Stamp: registeredRelay.stamp.String(), + } + if jsonOutput { + summary = append(summary, serverSummary) + } else { + fmt.Println(serverSummary.Name) + } + } + } for _, registeredServer := range proxy.registeredServers { addrStr, port := registeredServer.stamp.ServerAddrStr, stamps.DefaultPort var hostAddr string diff --git a/dnscrypt-proxy/main.go b/dnscrypt-proxy/main.go index 53b99901..37b00279 100644 --- a/dnscrypt-proxy/main.go +++ b/dnscrypt-proxy/main.go @@ -51,6 +51,7 @@ func main() { flags.Resolve = flag.String("resolve", "", "resolve a DNS name (string can be or ,)") flags.List = flag.Bool("list", false, "print the list of available resolvers for the enabled filters") flags.ListAll = flag.Bool("list-all", false, "print the complete list of available resolvers, ignoring filters") + flags.IncludeRelays = flag.Bool("include-relays", false, "include the list of available relays in the output of -list and -list-all") flags.JSONOutput = flag.Bool("json", false, "output list as JSON") flags.Check = flag.Bool("check", false, "check the configuration file and exit") flags.ConfigFile = flag.String("config", DefaultConfigFileName, "Path to the configuration file")