Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package xmpp-dns for openSUSE:Factory checked in at 2022-08-22 12:02:02 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xmpp-dns (Old) and /work/SRC/openSUSE:Factory/.xmpp-dns.new.2083 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xmpp-dns" Mon Aug 22 12:02:02 2022 rev:2 rq:998585 version:0.3.1 Changes: -------- --- /work/SRC/openSUSE:Factory/xmpp-dns/xmpp-dns.changes 2022-08-05 19:51:51.789589240 +0200 +++ /work/SRC/openSUSE:Factory/.xmpp-dns.new.2083/xmpp-dns.changes 2022-08-22 12:02:03.945360734 +0200 @@ -1,0 +2,9 @@ +Mon Aug 22 08:39:21 UTC 2022 - Michael Vetter <mvet...@suse.com> + +- Update to 0.3.1: + * Print error details if SRV lookup fails. + * Print error details if IP lookup fails. + * Respect CNAME records. + * Detect CNAME loops (max. 5 CNAMEs) (via xmppsrv >= 0.2.4) + +------------------------------------------------------------------- Old: ---- xmpp-dns-0.3.0.tar.gz New: ---- xmpp-dns-0.3.1.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xmpp-dns.spec ++++++ --- /var/tmp/diff_new_pack.Je1deb/_old 2022-08-22 12:02:04.693362379 +0200 +++ /var/tmp/diff_new_pack.Je1deb/_new 2022-08-22 12:02:04.697362388 +0200 @@ -17,7 +17,7 @@ Name: xmpp-dns -Version: 0.3.0 +Version: 0.3.1 Release: 0 Summary: A CLI tool to check XMPP SRV records License: BSD-2-Clause ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Je1deb/_old 2022-08-22 12:02:04.737362476 +0200 +++ /var/tmp/diff_new_pack.Je1deb/_new 2022-08-22 12:02:04.741362485 +0200 @@ -3,9 +3,9 @@ <param name="url">https://salsa.debian.org/mdosch/xmpp-dns.git</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v0.3.0</param> + <param name="revision">v0.3.1</param> <param name="versionformat">@PARENT_TAG@</param> - <param name="changesgenerate">enable</param> + <param name="changesgenerate">disable</param> <param name="versionrewrite-pattern">v(.*)</param> </service> <service name="set_version" mode="disabled"> ++++++ vendor.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2022-08-04 13:29:21.000000000 +0200 +++ new/vendor/modules.txt 2022-08-22 10:39:04.000000000 +0200 @@ -1,6 +1,6 @@ # github.com/pborman/getopt/v2 v2.1.0 ## explicit github.com/pborman/getopt/v2 -# salsa.debian.org/mdosch/xmppsrv v0.2.2 +# salsa.debian.org/mdosch/xmppsrv v0.2.4 ## explicit salsa.debian.org/mdosch/xmppsrv diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/salsa.debian.org/mdosch/xmppsrv/.gitlab-ci.yml new/vendor/salsa.debian.org/mdosch/xmppsrv/.gitlab-ci.yml --- old/vendor/salsa.debian.org/mdosch/xmppsrv/.gitlab-ci.yml 2022-08-04 13:29:21.000000000 +0200 +++ new/vendor/salsa.debian.org/mdosch/xmppsrv/.gitlab-ci.yml 2022-08-22 10:39:04.000000000 +0200 @@ -38,4 +38,4 @@ - tags script: - | - release-cli create --name "Release $CI_COMMIT_TAG" --tag-name $CI_COMMIT_TAG --description="`cat CHANGELOG.md`" + release-cli create --name "Release $CI_COMMIT_TAG" --tag-name $CI_COMMIT_TAG --description="`head -n $(expr "$(grep -nm2 "^## " CHANGELOG.md|awk '(NR>1) {print $1}'|cut -f1 -d:) - 2"|bc) CHANGELOG.md`" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/salsa.debian.org/mdosch/xmppsrv/CHANGELOG.md new/vendor/salsa.debian.org/mdosch/xmppsrv/CHANGELOG.md --- old/vendor/salsa.debian.org/mdosch/xmppsrv/CHANGELOG.md 2022-08-04 13:29:21.000000000 +0200 +++ new/vendor/salsa.debian.org/mdosch/xmppsrv/CHANGELOG.md 2022-08-22 10:39:04.000000000 +0200 @@ -1,5 +1,18 @@ # Changelog +## [0.2.4] +### Changed +- The changes are the same as in 0.2.3 but a new release is created as not all changes were in 0.2.3 due to a misstake in the release process. + +## [0.2.3] +### Added +- Add CNAME lookup. + +### Changed +- Check resolver IP for validity. +- Improve error strings. +- Always return the error if one of the lookups failed. + ## [0.2.2] ### Changed - Added error handling for wrong resolver and DoT configuration. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/salsa.debian.org/mdosch/xmppsrv/xmppsrv.go new/vendor/salsa.debian.org/mdosch/xmppsrv/xmppsrv.go --- old/vendor/salsa.debian.org/mdosch/xmppsrv/xmppsrv.go 2022-08-04 13:29:21.000000000 +0200 +++ new/vendor/salsa.debian.org/mdosch/xmppsrv/xmppsrv.go 2022-08-22 10:39:04.000000000 +0200 @@ -8,6 +8,7 @@ "context" "crypto/tls" "errors" + "fmt" "math/rand" "net" "sort" @@ -47,6 +48,98 @@ return o[i].Priority < o[j].Priority } +func getCNAME(server string) (string, error) { + var cname string + // Lookup CNAME + for i := 0; i <= 5; i++ { + cname, err := net.LookupCNAME(server) + // Return the requested domain unchanged if the + // CNAME record can't be resolved. This can + // happen if there is no CNAME record and no + // A/AAAA record. But there could still be SRV + // records. + if cname == "" { + return server, nil + } + if cname == server { + return cname, err + } + server = cname + } + return cname, errors.New("CNAME loop detected") +} + +func getCNAMEDoT(server string, resolver string) (string, error) { + var cname string + var err error + var d tls.Dialer + s := strings.Split(resolver, "#") + if len(s) != 2 { + return cname, errors.New("wrong DoT server syntax") + } + ip := net.ParseIP(s[0]) + if ip == nil { + return cname, errors.New("invalid resolver IP") + } + dnsServer := net.JoinHostPort(s[0], "853") + d.Config = &tls.Config{ + ServerName: s[1], + } + r := &net.Resolver{ + Dial: func(cont context.Context, network, address string) (net.Conn, error) { + return d.DialContext(cont, "tcp", dnsServer) + }, + } + for i := 0; i <= 5; i++ { + cname, err = r.LookupCNAME(context.Background(), server) + // Return the requested domain unchanged if the + // CNAME record can't be resolved. This can + // happen if there is no CNAME record and no + // A/AAAA record. But there could still be SRV + // records. + if cname == "" { + return server, nil + } + if cname == server { + return cname, err + } + server = cname + } + return cname, errors.New("CNAME loop detected") +} + +func getCNAMECustomResolver(server string, resolver string) (string, error) { + var cname string + var err error + var d net.Dialer + ip := net.ParseIP(resolver) + if ip == nil { + return cname, errors.New("invalid resolver IP") + } + dnsServer := net.JoinHostPort(resolver, "53") + r := &net.Resolver{ + Dial: func(cont context.Context, network, address string) (net.Conn, error) { + return d.DialContext(cont, "udp", dnsServer) + }, + } + for i := 0; i <= 5; i++ { + cname, err = r.LookupCNAME(context.Background(), server) + // Return the requested domain unchanged if the + // CNAME record can't be resolved. This can + // happen if there is no CNAME record and no + // A/AAAA record. But there could still be SRV + // records. + if cname == "" { + return server, nil + } + if cname == server { + return cname, err + } + server = cname + } + return cname, errors.New("CNAME loop detected") +} + func getSRVDoT(server string, srvType string, resolver string) ([]SRV, error) { var records []SRV @@ -56,6 +149,10 @@ if len(s) != 2 { return records, errors.New("wrong DoT server syntax") } + ip := net.ParseIP(s[0]) + if ip == nil { + return records, errors.New("invalid resolver IP") + } dnsServer := net.JoinHostPort(s[0], "853") d.Config = &tls.Config{ ServerName: s[1], @@ -84,6 +181,10 @@ var records []SRV var err error var d net.Dialer + ip := net.ParseIP(resolver) + if ip == nil { + return records, errors.New("invalid resolver IP") + } dnsServer := net.JoinHostPort(resolver, "53") r := &net.Resolver{ Dial: func(cont context.Context, network, address string) (net.Conn, error) { @@ -125,6 +226,11 @@ // LookupXmppServer returns the xmpp-server SRV records. func LookupXmppServer(server string) ([]SRV, error) { + // Look up CNAME + cname, err := getCNAME(server) + if err == nil { + server = cname + } // Look up xmpp-server SRV records, err := getSRV(server, "xmpp-server") return records, err @@ -132,15 +238,28 @@ // LookupXmppServer returns the xmpp-server SRV records. func (c *Config) LookupXmppServer(server string) ([]SRV, error) { + var cname string var records []SRV var err error // Look up xmpp-server SRV switch { case c.Resolver == "": + cname, err = getCNAME(server) + if err == nil { + server = cname + } records, err = getSRV(server, "xmpp-server") case c.Resolver != "" && !c.DoT: + cname, err = getCNAMECustomResolver(server, c.Resolver) + if err == nil { + server = cname + } records, err = getSRVCustomResolver(server, "xmpp-server", c.Resolver) case c.Resolver != "" && c.DoT: + cname, err = getCNAMEDoT(server, c.Resolver) + if err == nil { + server = cname + } records, err = getSRVDoT(server, "xmpp-server", c.Resolver) default: return records, errors.New("xmppsrv: invalid resolver setting") @@ -151,24 +270,62 @@ // LookupXmppsServer returns the xmpps-server SRV records. func LookupXmppsServer(server string) ([]SRV, error) { + // Look up CNAME + cname, err := getCNAME(server) + if err == nil { + server = cname + } // Look up xmpps-server SRV records, err := getSRV(server, "xmpps-server") return records, err } +// LookupCNAME returns the final target name. +func (c *Config) LookupCNAME(server string) (string, error) { + var cname string + var err error + switch { + case c.Resolver == "": + // Look up CNAME + cname, err = getCNAME(server) + case c.Resolver != "" && !c.DoT: + // Look up CNAME + cname, err = getCNAMECustomResolver(server, c.Resolver) + case c.Resolver != "" && c.DoT: + // Look up CNMAE + cname, err = getCNAMEDoT(server, c.Resolver) + default: + return cname, errors.New("xmppsrv: invalid resolver setting") + } + return cname, err +} + // LookupXmppsServer returns the xmpps-server SRV records. func (c *Config) LookupXmppsServer(server string) ([]SRV, error) { + var cname string var records []SRV var err error switch { case c.Resolver == "": + cname, err = getCNAME(server) + if err == nil { + server = cname + } // Look up xmpps-server SRV records, err = getSRV(server, "xmpps-server") case c.Resolver != "" && !c.DoT: + cname, err = getCNAMECustomResolver(server, c.Resolver) + if err == nil { + server = cname + } // Look up xmpps-server SRV records, err = getSRVCustomResolver(server, "xmpps-server", c.Resolver) case c.Resolver != "" && c.DoT: + cname, err = getCNAMEDoT(server, c.Resolver) + if err == nil { + server = cname + } // Look up xmpps-server SRV records, err = getSRVDoT(server, "xmpps-server", c.Resolver) default: @@ -179,6 +336,11 @@ // LookupXmppClient returns the xmpp-server SRV records. func LookupXmppClient(server string) ([]SRV, error) { + // Look up CNAME + cname, err := getCNAME(server) + if err == nil { + server = cname + } // Look up xmpp-client SRV records, err := getSRV(server, "xmpp-client") return records, err @@ -186,17 +348,30 @@ // LookupXmppClient returns the xmpp-server SRV records. func (c *Config) LookupXmppClient(server string) ([]SRV, error) { + var cname string var records []SRV var err error switch { case c.Resolver == "": + cname, err = getCNAME(server) + if err == nil { + server = cname + } // Look up xmpp-client SRV records, err = getSRV(server, "xmpp-client") case c.Resolver != "" && !c.DoT: + cname, err = getCNAMECustomResolver(server, c.Resolver) + if err == nil { + server = cname + } // Look up xmpp-client SRV records, err = getSRVCustomResolver(server, "xmpp-client", c.Resolver) case c.Resolver != "" && c.DoT: + cname, err = getCNAMEDoT(server, c.Resolver) + if err == nil { + server = cname + } // Look up xmpp-client SRV records, err = getSRVDoT(server, "xmpp-client", c.Resolver) default: @@ -207,6 +382,11 @@ // LookupXmppsClient returns the xmpp-server SRV records. func LookupXmppsClient(server string) ([]SRV, error) { + // Look up CNAME + cname, err := getCNAME(server) + if err == nil { + server = cname + } // Look up xmpps-client SRV records, err := getSRV(server, "xmpps-client") return records, err @@ -214,17 +394,30 @@ // LookupXmppsClient returns the xmpp-server SRV records. func (c *Config) LookupXmppsClient(server string) ([]SRV, error) { + var cname string var records []SRV var err error switch { case c.Resolver == "": + cname, err = getCNAME(server) + if err == nil { + server = cname + } // Look up xmpps-client SRV records, err = getSRV(server, "xmpps-client") case c.Resolver != "" && !c.DoT: + cname, err = getCNAMECustomResolver(server, c.Resolver) + if err == nil { + server = cname + } // Look up xmpps-client SRV records, err = getSRVCustomResolver(server, "xmpps-client", c.Resolver) case c.Resolver != "" && c.DoT: + cname, err = getCNAMEDoT(server, c.Resolver) + if err == nil { + server = cname + } // Look up xmpps-client SRV records, err = getSRVDoT(server, "xmpps-client", c.Resolver) default: @@ -237,12 +430,17 @@ // priority and weight. func LookupClient(server string) ([]SRV, error) { var records, records2 []SRV - var err error + var err, err2 error rand.Seed(time.Now().UnixNano()) + // Look up CNAME + cname, err := getCNAME(server) + if err == nil { + server = cname + } // Look up xmpp-client SRV - records, _ = getSRV(server, "xmpp-client") + records, err = getSRV(server, "xmpp-client") // Look up xmpps-client SRV records. - records2, _ = getSRV(server, "xmpps-client") + records2, err2 = getSRV(server, "xmpps-client") switch rand.Intn(2) { case 0: records = append(records, records2...) @@ -251,6 +449,15 @@ default: records = append(records, records2...) } + switch { + case err != nil && err2 != nil: + return records, fmt.Errorf("failure in xmpp-client lookup: %v\n"+ + "failure in xmpps-client lookup: %v", err, err2) + case err != nil: + return records, err + case err2 != nil: + return records, err2 + } switch len(records) { case 0: return records, errors.New("no client records found") @@ -267,25 +474,38 @@ // LookupClient returns the xmpp-client and xmpps-client SRV records sorted by // priority and weight. func (c *Config) LookupClient(server string) ([]SRV, error) { + var cname string var records, records2 []SRV - var err error + var err, err2 error rand.Seed(time.Now().UnixNano()) switch { case c.Resolver == "": + cname, err = getCNAME(server) + if err == nil { + server = cname + } // Look up xmpp-client SRV - records, _ = getSRV(server, "xmpp-client") + records, err = getSRV(server, "xmpp-client") // Look up xmpps-client SRV records. - records2, _ = getSRV(server, "xmpps-client") + records2, err2 = getSRV(server, "xmpps-client") case c.Resolver != "" && !c.DoT: + cname, err = getCNAMECustomResolver(server, c.Resolver) + if err == nil { + server = cname + } // Look up xmpp-client SRV - records, _ = getSRVCustomResolver(server, "xmpp-client", c.Resolver) + records, err = getSRVCustomResolver(server, "xmpp-client", c.Resolver) // Look up xmpps-client SRV records. - records2, _ = getSRVCustomResolver(server, "xmpps-client", c.Resolver) + records2, err2 = getSRVCustomResolver(server, "xmpps-client", c.Resolver) case c.Resolver != "" && c.DoT: + cname, err = getCNAMEDoT(server, c.Resolver) + if err == nil { + server = cname + } // Look up xmpp-client SRV - records, _ = getSRVDoT(server, "xmpp-client", c.Resolver) + records, err = getSRVDoT(server, "xmpp-client", c.Resolver) // Look up xmpps-client SRV records. - records2, _ = getSRVDoT(server, "xmpps-client", c.Resolver) + records2, err2 = getSRVDoT(server, "xmpps-client", c.Resolver) default: return records, errors.New("xmppsrv: invalid resolver setting") } @@ -297,6 +517,15 @@ default: records = append(records, records2...) } + switch { + case err != nil && err2 != nil: + return records, fmt.Errorf("failure in xmpp-client lookup: %v\n"+ + "failure in xmpps-client lookup: %v", err, err2) + case err != nil: + return records, err + case err2 != nil: + return records, err2 + } switch len(records) { case 0: return records, errors.New("no client records found") @@ -313,12 +542,16 @@ // LookupServer returns the xmpp-server and xmpps-server SRV records sorted by // priority and weight. func LookupServer(server string) ([]SRV, error) { - var err error + var err, err2 error rand.Seed(time.Now().UnixNano()) + cname, err := getCNAME(server) + if err == nil { + server = cname + } // Look up xmpp-client SRV - records, _ := getSRV(server, "xmpp-server") + records, err := getSRV(server, "xmpp-server") // Look up xmpps-client SRV records. - records2, _ := getSRV(server, "xmpps-server") + records2, err2 := getSRV(server, "xmpps-server") switch rand.Intn(2) { case 0: records = append(records, records2...) @@ -327,6 +560,15 @@ default: records = append(records, records2...) } + switch { + case err != nil && err2 != nil: + return records, fmt.Errorf("failure in xmpp-server lookup: %v\n"+ + "failure in xmpps-server lookup: %v", err, err2) + case err != nil: + return records, err + case err2 != nil: + return records, err2 + } switch len(records) { case 0: return records, errors.New("no server records found") @@ -343,27 +585,40 @@ // LookupServer returns the xmpp-server and xmpps-server SRV records sorted by // priority and weight. func (c *Config) LookupServer(server string) ([]SRV, error) { + var cname string var records, records2 []SRV - var err error + var err, err2 error rand.Seed(time.Now().UnixNano()) switch { case c.Resolver == "": + cname, err = getCNAME(server) + if err == nil { + server = cname + } // Look up xmpp-client SRV - records, _ = getSRV(server, "xmpp-server") + records, err = getSRV(server, "xmpp-server") // Look up xmpps-client SRV records. - records2, _ = getSRV(server, "xmpps-server") + records2, err2 = getSRV(server, "xmpps-server") case c.Resolver != "" && !c.DoT: + cname, err = getCNAMECustomResolver(server, c.Resolver) + if err == nil { + server = cname + } // Look up xmpp-client SRV - records, _ = getSRVCustomResolver(server, "xmpp-server", + records, err = getSRVCustomResolver(server, "xmpp-server", c.Resolver) // Look up xmpps-client SRV records. - records2, _ = getSRVCustomResolver(server, "xmpps-server", + records2, err2 = getSRVCustomResolver(server, "xmpps-server", c.Resolver) case c.Resolver != "" && c.DoT: + cname, err = getCNAMEDoT(server, c.Resolver) + if err == nil { + server = cname + } // Look up xmpp-client SRV - records, _ = getSRVDoT(server, "xmpp-server", c.Resolver) + records, err = getSRVDoT(server, "xmpp-server", c.Resolver) // Look up xmpps-client SRV records. - records2, _ = getSRVDoT(server, "xmpps-server", c.Resolver) + records2, err2 = getSRVDoT(server, "xmpps-server", c.Resolver) default: return records, errors.New("xmppsrv: invalid resolver setting") } @@ -375,6 +630,15 @@ default: records = append(records, records2...) } + switch { + case err != nil && err2 != nil: + return records, fmt.Errorf("failure in xmpp-server lookup: %v\n"+ + "failure in xmpps-server lookup: %v", err, err2) + case err != nil: + return records, err + case err2 != nil: + return records, err2 + } switch len(records) { case 0: return records, errors.New("no server records found") ++++++ xmpp-dns-0.3.0.tar.gz -> xmpp-dns-0.3.1.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.3.0/.gitlab-ci.yml new/xmpp-dns-0.3.1/.gitlab-ci.yml --- old/xmpp-dns-0.3.0/.gitlab-ci.yml 2022-07-24 15:57:14.000000000 +0200 +++ new/xmpp-dns-0.3.1/.gitlab-ci.yml 2022-08-21 12:45:40.000000000 +0200 @@ -38,12 +38,12 @@ - tags script: - echo "${CI_JOB_ID}" > CI_JOB_ID.txt - - env GOOS=linux GOARCH=amd64 go build -buildmode=pie -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/linux-amd64/xmpp-dns - - env GOOS=linux GOARCH=arm64 go build -buildmode=pie -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/linux-arm64/xmpp-dns - - env GOOS=linux GOARCH=386 go build -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/linux-386/xmpp-dns - - env GOOS=linux GOARCH=arm go build -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/linux-arm/xmpp-dns - - env GOOS=windows GOARCH=386 go build -buildmode=pie -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/win386/xmpp-dns.exe - - env GOOS=windows GOARCH=amd64 go build -buildmode=pie -ldflags "-extldflags '-static'" -o $CI_PROJECT_DIR/win64/xmpp-dns.exe + - env GOOS=linux GOARCH=amd64 go build -buildmode=pie -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/linux-amd64/xmpp-dns + - env GOOS=linux GOARCH=arm64 go build -buildmode=pie -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/linux-arm64/xmpp-dns + - env GOOS=linux GOARCH=386 go build -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/linux-386/xmpp-dns + - env GOOS=linux GOARCH=arm go build -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/linux-arm/xmpp-dns + - env GOOS=windows GOARCH=386 go build -buildmode=pie -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/win386/xmpp-dns.exe + - env GOOS=windows GOARCH=amd64 go build -buildmode=pie -ldflags "-s -w -extldflags '-static'" -o $CI_PROJECT_DIR/win64/xmpp-dns.exe artifacts: paths: - linux-amd64/xmpp-dns diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.3.0/CHANGELOG.md new/xmpp-dns-0.3.1/CHANGELOG.md --- old/xmpp-dns-0.3.0/CHANGELOG.md 2022-07-24 15:57:14.000000000 +0200 +++ new/xmpp-dns-0.3.1/CHANGELOG.md 2022-08-21 12:45:40.000000000 +0200 @@ -1,5 +1,12 @@ # Changelog +## [0.3.1] +### Changed +- Print error details if SRV lookup fails. +- Print error details if IP lookup fails. +- Respect CNAME records. +- Detect CNAME loops (max. 5 CNAMEs) (via xmppsrv >= 0.2.4) + ## [0.3.0] ### Added - Possibility to specify the DNS resolver. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.3.0/README.md new/xmpp-dns-0.3.1/README.md --- old/xmpp-dns-0.3.0/README.md 2022-07-24 15:57:14.000000000 +0200 +++ new/xmpp-dns-0.3.1/README.md 2022-08-21 12:45:40.000000000 +0200 @@ -47,7 +47,7 @@ --help Show help. --no-color Don't colorize output. --resolver=value - Custom resolver e.g. "1.1.1.1" for common DNSor + Custom resolver e.g. "1.1.1.1" for common DNS or "5.1.66.255#dot.ffmuc.net" for usage with "--dot". -s, --server Show server SRV records. -t Test connection and certificates. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.3.0/go.mod new/xmpp-dns-0.3.1/go.mod --- old/xmpp-dns-0.3.0/go.mod 2022-07-24 15:57:14.000000000 +0200 +++ new/xmpp-dns-0.3.1/go.mod 2022-08-21 12:45:40.000000000 +0200 @@ -4,5 +4,5 @@ require ( github.com/pborman/getopt/v2 v2.1.0 - salsa.debian.org/mdosch/xmppsrv v0.2.2 + salsa.debian.org/mdosch/xmppsrv v0.2.4 ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.3.0/go.sum new/xmpp-dns-0.3.1/go.sum --- old/xmpp-dns-0.3.0/go.sum 2022-07-24 15:57:14.000000000 +0200 +++ new/xmpp-dns-0.3.1/go.sum 2022-08-21 12:45:40.000000000 +0200 @@ -1,4 +1,4 @@ github.com/pborman/getopt/v2 v2.1.0 h1:eNfR+r+dWLdWmV8g5OlpyrTYHkhVNxHBdN2cCrJmOEA= github.com/pborman/getopt/v2 v2.1.0/go.mod h1:4NtW75ny4eBw9fO1bhtNdYTlZKYX5/tBLtsOpwKIKd0= -salsa.debian.org/mdosch/xmppsrv v0.2.2 h1:A6LF2J1GL8Ayrz2bJeSKqW8UmQnQAZ0CdETDlEBjNEI= -salsa.debian.org/mdosch/xmppsrv v0.2.2/go.mod h1:udWXnWFa9zkcyN9YSB/u44BCnnRDpeQ0eDy3MVLjHZQ= +salsa.debian.org/mdosch/xmppsrv v0.2.4 h1:ZroUkfml+kxgO+BFocVoVvYqJgk03D9oT1alXoFIyE4= +salsa.debian.org/mdosch/xmppsrv v0.2.4/go.mod h1:udWXnWFa9zkcyN9YSB/u44BCnnRDpeQ0eDy3MVLjHZQ= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.3.0/main.go new/xmpp-dns-0.3.1/main.go --- old/xmpp-dns-0.3.0/main.go 2022-07-24 15:57:14.000000000 +0200 +++ new/xmpp-dns-0.3.1/main.go 2022-08-21 12:45:40.000000000 +0200 @@ -19,7 +19,7 @@ ) const ( - version = "0.3.0" + version = "0.3.1" ) var ( @@ -108,6 +108,12 @@ DoT: *flagDoT, } + // Lookup CNAME + target, err := c.LookupCNAME(server[0]) + if err != nil { + log.Fatal(err) + } + // Timeout timeout := time.Duration(*flagTimeout * 1000000000) @@ -136,26 +142,26 @@ } if *flagClient { - clientRecords, err := c.LookupClient(server[0]) - if err != nil { - fmt.Println("No client SRV records found.") + clientRecords, err := c.LookupClient(target) + if err != nil && len(clientRecords) == 0 { + fmt.Println(err) if *flagFallback && *flagTest { fmt.Println("Trying fallback ports.") fmt.Println() clientRecords = []xmppsrv.SRV{ { Type: "xmpp-client", - Target: server[0], + Target: target, Port: 5222, }, { Type: "xmpps-client", - Target: server[0], + Target: target, Port: 5223, }, { Type: "xmpps-client", - Target: server[0], + Target: target, Port: 443, }, } @@ -169,21 +175,21 @@ if *flagClient { fmt.Println() } - serverRecords, err := c.LookupServer(server[0]) - if err != nil { - fmt.Println("No server SRV records found.") + serverRecords, err := c.LookupServer(target) + if err != nil && len(serverRecords) == 0 { + fmt.Println(err) if *flagFallback && *flagTest { fmt.Println("Trying fallback ports.") fmt.Println() serverRecords = []xmppsrv.SRV{ { Type: "xmpp-server", - Target: server[0], + Target: target, Port: 5269, }, { Type: "xmpps-server", - Target: server[0], + Target: target, Port: 5270, }, } @@ -216,9 +222,12 @@ func printIP(record xmppsrv.SRV, ipv4 bool, ipv6 bool, test bool, tlsConfig *tls.Config, timeout time.Duration) { addresses, err := net.LookupIP(record.Target) - if err != nil || len(addresses) == 0 { + switch { + case err != nil: + fmt.Println("No IP addresses found for", record.Target, err) + case len(addresses) == 0: fmt.Println("No IP addresses found for", record.Target) - } else { + default: var c net.Conn addresses = removeDuplicates(addresses) for _, address := range addresses {