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 2026-01-20 21:04:58 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/xmpp-dns (Old) and /work/SRC/openSUSE:Factory/.xmpp-dns.new.1928 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "xmpp-dns" Tue Jan 20 21:04:58 2026 rev:19 rq:1328217 version:0.6.0 Changes: -------- --- /work/SRC/openSUSE:Factory/xmpp-dns/xmpp-dns.changes 2025-09-29 16:35:51.155553921 +0200 +++ /work/SRC/openSUSE:Factory/.xmpp-dns.new.1928/xmpp-dns.changes 2026-01-20 21:05:04.625344477 +0100 @@ -1,0 +2,31 @@ +Tue Jan 20 09:19:28 UTC 2026 - Michael Vetter <[email protected]> + +- Update to 0.6.0: + * Add flag --client-dtls for adding arbitrary targets for C2S with direct TLS. + * Add flag --client-stls for adding arbitrary targets for C2S with StartTLS. + * Add flag --server-dtls for adding arbitrary targets for S2S with direct TLS. + * Add flag --server-stls for adding arbitrary targets for S2S with StartTLS. + +------------------------------------------------------------------- +Tue Jan 20 09:19:17 UTC 2026 - Michael Vetter <[email protected]> + +- Update to 0.5.6: + * Update link relations to version of 2025-10-14. + * Only resolve IPs when -v is set. + +------------------------------------------------------------------- +Tue Jan 20 09:18:56 UTC 2026 - Michael Vetter <[email protected]> + +- Update to 0.5.5: + * Print expiry date when certificate expires within the next 14 + days (only xmpp and xmpps connections). + * Add flag --force-fallback to enforce checks on standard ports, + even if SRV records are provided. + +------------------------------------------------------------------- +Tue Jan 20 09:18:32 UTC 2026 - Michael Vetter <[email protected]> + +- Update to 0.5.4: + * Fix calculation of remaining days for certificate expiry warning. + +------------------------------------------------------------------- Old: ---- xmpp-dns-0.5.3.tar.gz New: ---- xmpp-dns-0.6.0.tar.gz ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ xmpp-dns.spec ++++++ --- /var/tmp/diff_new_pack.8FMalc/_old 2026-01-20 21:05:05.353374587 +0100 +++ /var/tmp/diff_new_pack.8FMalc/_new 2026-01-20 21:05:05.357374753 +0100 @@ -17,7 +17,7 @@ Name: xmpp-dns -Version: 0.5.3 +Version: 0.6.0 Release: 0 Summary: A CLI tool to check XMPP SRV records License: BSD-2-Clause ++++++ _scmsync.obsinfo ++++++ --- /var/tmp/diff_new_pack.8FMalc/_old 2026-01-20 21:05:05.393376242 +0100 +++ /var/tmp/diff_new_pack.8FMalc/_new 2026-01-20 21:05:05.397376407 +0100 @@ -1,6 +1,6 @@ -mtime: 1759125629 -commit: e46bf56d47dc0e8582e5c320465cd9fb2ba77f1ba5fef36bf02a8471e4e1f5d6 +mtime: 1768902846 +commit: 19b9fc60d30a6d7d8d439f6457c9f243ba196517bdf98b8c579b5d63a6591ebf url: https://src.opensuse.org/xmpp/xmpp-dns.git -revision: e46bf56d47dc0e8582e5c320465cd9fb2ba77f1ba5fef36bf02a8471e4e1f5d6 +revision: 19b9fc60d30a6d7d8d439f6457c9f243ba196517bdf98b8c579b5d63a6591ebf projectscmsync: https://src.opensuse.org/xmpp/_ObsPrj.git ++++++ _service ++++++ --- /var/tmp/diff_new_pack.8FMalc/_old 2026-01-20 21:05:05.425377565 +0100 +++ /var/tmp/diff_new_pack.8FMalc/_new 2026-01-20 21:05:05.429377731 +0100 @@ -3,7 +3,7 @@ <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.5.3</param> + <param name="revision">v0.6.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">disable</param> <param name="versionrewrite-pattern">v(.*)</param> ++++++ build.specials.obscpio ++++++ ++++++ build.specials.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/.gitignore new/.gitignore --- old/.gitignore 1970-01-01 01:00:00.000000000 +0100 +++ new/.gitignore 2026-01-20 10:54:33.000000000 +0100 @@ -0,0 +1 @@ +.osc ++++++ vendor.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/text/unicode/bidi/core.go new/vendor/golang.org/x/text/unicode/bidi/core.go --- old/vendor/golang.org/x/text/unicode/bidi/core.go 2025-09-24 20:08:37.000000000 +0200 +++ new/vendor/golang.org/x/text/unicode/bidi/core.go 2026-01-15 20:07:10.000000000 +0100 @@ -427,13 +427,6 @@ func (i *isolatingRunSequence) Len() int { return len(i.indexes) } -func maxLevel(a, b level) level { - if a > b { - return a - } - return b -} - // Rule X10, second bullet: Determine the start-of-sequence (sos) and end-of-sequence (eos) types, // either L or R, for each isolating run sequence. func (p *paragraph) isolatingRunSequence(indexes []int) *isolatingRunSequence { @@ -474,8 +467,8 @@ indexes: indexes, types: types, level: level, - sos: typeForLevel(maxLevel(prevLevel, level)), - eos: typeForLevel(maxLevel(succLevel, level)), + sos: typeForLevel(max(prevLevel, level)), + eos: typeForLevel(max(succLevel, level)), } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2025-09-24 20:08:37.000000000 +0200 +++ new/vendor/modules.txt 2026-01-15 20:07:10.000000000 +0100 @@ -4,10 +4,10 @@ # github.com/pborman/getopt/v2 v2.1.0 ## explicit; go 1.13 github.com/pborman/getopt/v2 -# golang.org/x/net v0.44.0 +# golang.org/x/net v0.49.0 ## explicit; go 1.24.0 golang.org/x/net/idna -# golang.org/x/text v0.29.0 +# golang.org/x/text v0.33.0 ## explicit; go 1.24.0 golang.org/x/text/secure/bidirule golang.org/x/text/transform ++++++ xmpp-dns-0.5.3.tar.gz -> xmpp-dns-0.6.0.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.5.3/CHANGELOG.md new/xmpp-dns-0.6.0/CHANGELOG.md --- old/xmpp-dns-0.5.3/CHANGELOG.md 2025-09-24 20:08:37.000000000 +0200 +++ new/xmpp-dns-0.6.0/CHANGELOG.md 2026-01-15 20:07:10.000000000 +0100 @@ -1,5 +1,26 @@ # Changelog +## [0.6.0] 2026-01-15 +### Added +- Add flag `--client-dtls` for adding arbitrary targets for C2S with direct TLS. +- Add flag `--client-stls` for adding arbitrary targets for C2S with StartTLS. +- Add flag `--server-dtls` for adding arbitrary targets for S2S with direct TLS. +- Add flag `--server-stls` for adding arbitrary targets for S2S with StartTLS. + +## [0.5.6] 2026-01-11 +### Changed +- Update link relations to version of 2025-10-14. +- Only resolve IPs when `-v` is set. + +## [0.5.5] 2026-01-02 +### Added +- Print expiry date when certificate expires within the next 14 days (only xmpp and xmpps connections). +- Add flag `--force-fallback` to enforce checks on standard ports, even if SRV records are provided. + +## [0.5.4] 2025-10-14 +### Changed +- Fix calculation of remaining days for certificate expiry warning. + ## [0.5.3] 2025-09-24 ### Added - Print warning if certificate expires in less than 14 days (only xmpp and xmpps connections). diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.5.3/README.md new/xmpp-dns-0.6.0/README.md --- old/xmpp-dns-0.5.3/README.md 2025-09-24 20:08:37.000000000 +0200 +++ new/xmpp-dns-0.6.0/README.md 2026-01-15 20:07:10.000000000 +0100 @@ -33,19 +33,34 @@ ## usage ``` -Usage: xmpp-dns [-46cfstv] [--dot] [--help] [--no-color] [--resolver value] [--timeout value] [--tls-version value] [--version] [parameters ...] +Usage: xmpp-dns [-46cfstv] [--client-dtls value] [--client-stls value] [--dot] [--force-fallback] [--help] [--no-color] [--resolver value] [--server-dtls value] [--server-stls value] [--timeout value] [--tls-version value] [--version] [xmpp server] -4 Resolve IPv4. -6 Resolve IPv6. -c, --client Show client SRV records. - --dot Use DoT. - -f, --fallback Check fallback (Standard ports on A/AAAA records) if no SRV + --client-dtls=value + Add an arbitrary target for C2S with direct TLS in the form + domain:port. Can be invoked several times. + --client-stls=value + Add an arbitrary target for C2S with StartTLS in the form + domain:port. Can be invoked several times. + --dot Use DNSoverTLS (DoT), see also "--resolver". + -f, --fallback Additionally check fallback (Standard ports on A/AAAA records) if no SRV records are provided. + --force-fallback + Check fallback (Standard ports on A/AAAA records) even if + SRV records are provided. --help Show help. --no-color Don't colorize output. --resolver=value 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. + --server-dtls=value + Add an arbitrary target for S2S with direct TLS in the form + domain:port. Can be invoked several times. + --server-stls=value + Add an arbitrary target for S2S with StartTLS in the form + domain:port. Can be invoked several times. -t Test connection and certificates. --timeout=value Connection timeout in seconds. [60] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.5.3/go.mod new/xmpp-dns-0.6.0/go.mod --- old/xmpp-dns-0.5.3/go.mod 2025-09-24 20:08:37.000000000 +0200 +++ new/xmpp-dns-0.6.0/go.mod 2026-01-15 20:07:10.000000000 +0100 @@ -7,8 +7,8 @@ require ( github.com/gorilla/websocket v1.5.3 github.com/pborman/getopt/v2 v2.1.0 - golang.org/x/net v0.44.0 + golang.org/x/net v0.49.0 salsa.debian.org/mdosch/xmppsrv v0.3.3 ) -require golang.org/x/text v0.29.0 // indirect +require golang.org/x/text v0.33.0 // indirect diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.5.3/go.sum new/xmpp-dns-0.6.0/go.sum --- old/xmpp-dns-0.5.3/go.sum 2025-09-24 20:08:37.000000000 +0200 +++ new/xmpp-dns-0.6.0/go.sum 2026-01-15 20:07:10.000000000 +0100 @@ -2,9 +2,9 @@ github.com/gorilla/websocket v1.5.3/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= 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= -golang.org/x/net v0.44.0 h1:evd8IRDyfNBMBTTY5XRF1vaZlD+EmWx6x8PkhR04H/I= -golang.org/x/net v0.44.0/go.mod h1:ECOoLqd5U3Lhyeyo/QDCEVQ4sNgYsqvCZ722XogGieY= -golang.org/x/text v0.29.0 h1:1neNs90w9YzJ9BocxfsQNHKuAT4pkghyXc4nhZ6sJvk= -golang.org/x/text v0.29.0/go.mod h1:7MhJOA9CD2qZyOKYazxdYMF85OwPdEr9jTtBpO7ydH4= +golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= +golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= +golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= salsa.debian.org/mdosch/xmppsrv v0.3.3 h1:F8FGyw1Q1LkAs/UbIXd6Obd33q2CKWrIxxrzvuLSVuM= salsa.debian.org/mdosch/xmppsrv v0.3.3/go.mod h1:udWXnWFa9zkcyN9YSB/u44BCnnRDpeQ0eDy3MVLjHZQ= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.5.3/linkrel.go new/xmpp-dns-0.6.0/linkrel.go --- old/xmpp-dns-0.5.3/linkrel.go 2025-09-24 20:08:37.000000000 +0200 +++ new/xmpp-dns-0.6.0/linkrel.go 2026-01-15 20:07:10.000000000 +0100 @@ -11,7 +11,7 @@ func isKnownLinkRel(s string) bool { // https://www.iana.org/assignments/link-relations/link-relations.xhtml - // as of 2025-06-03 - linkRels := []string{"about", "acl", "alternate", "amphtml", "api-catalog", "appendix", "apple-touch-icon", "apple-touch-startup-image", "archives", "author", "blocked-by", "bookmark", "c2pa-manifest", "canonical", "chapter", "cite-as", "collection", "compression-dictionary", "contents", "convertedfrom", "copyright", "create-form", "current", "deprecation", "describedby", "describes", "disclosure", "dns-prefetch", "duplicate", "edit", "edit-form", "edit-media", "enclosure", "external", "first", "glossary", "help", "hosts", "hub", "ice-server", "icon", "index", "intervalafter", "intervalbefore", "intervalcontains", "intervaldisjoint", "intervalduring", "intervalequals", "intervalfinishedby", "intervalfinishes", "intervalin", "intervalmeets", "intervalmetby", "intervaloverlappedby", "intervaloverlaps", "intervalstartedby", "intervalstarts", "item", "last", "latest-version", "license", "linkset", "lrdd", "manifest", "mask-icon", "me", "media-feed", "memento", "micropub", "modulepreloa d", "monitor", "monitor-group", "next", "next-archive", "nofollow", "noopener", "noreferrer", "opener", "openid2.local_id", "openid2.provider", "original", "p3pv1", "payment", "pingback", "preconnect", "predecessor-version", "prefetch", "preload", "prerender", "prev", "preview", "previous", "prev-archive", "privacy-policy", "profile", "publication", "related", "restconf", "replies", "ruleinput", "search", "section", "self", "service", "service-desc", "service-doc", "service-meta", "sip-trunking-capability", "sponsored", "start", "status", "stylesheet", "subsection", "successor-version", "sunset", "tag", "terms-of-service", "timegate", "timemap", "type", "ugc", "up", "version-history", "via", "webmention", "working-copy", "working-copy-of"} + // as of 2025-10-14 + linkRels := []string{"about", "acl", "alternate", "amphtml", "api-catalog", "appendix", "apple-touch-icon", "apple-touch-startup-image", "archives", "author", "blocked-by", "bookmark", "c2pa-manifest", "canonical", "chapter", "cite-as", "collection", "compression-dictionary", "contents", "convertedfrom", "copyright", "create-form", "current", "deprecation", "describedby", "describes", "disclosure", "dns-prefetch", "duplicate", "edit", "edit-form", "edit-media", "enclosure", "external", "first", "glossary", "help", "hosts", "hub", "ice-server", "icon", "index", "intervalafter", "intervalbefore", "intervalcontains", "intervaldisjoint", "intervalduring", "intervalequals", "intervalfinishedby", "intervalfinishes", "intervalin", "intervalmeets", "intervalmetby", "intervaloverlappedby", "intervaloverlaps", "intervalstartedby", "intervalstarts", "item", "last", "latest-version", "license", "linkset", "lrdd", "manifest", "mask-icon", "me", "media-feed", "memento", "micropub", "modulepreloa d", "monitor", "monitor-group", "next", "next-archive", "nofollow", "noopener", "noreferrer", "opener", "openid2.local_id", "openid2.provider", "original", "p3pv1", "payment", "pingback", "preconnect", "predecessor-version", "prefetch", "preload", "prerender", "prev", "preview", "previous", "prev-archive", "privacy-policy", "profile", "publication", "rdap-active", "rdap-bottom", "rdap-down", "rdap-top", "rdap-up", "related", "restconf", "replies", "ruleinput", "search", "section", "self", "service", "service-desc", "service-doc", "service-meta", "sip-trunking-capability", "sponsored", "start", "status", "stylesheet", "subsection", "successor-version", "sunset", "tag", "terms-of-service", "timegate", "timemap", "type", "ugc", "up", "version-history", "via", "webmention", "working-copy", "working-copy-of"} return slices.Contains(linkRels, strings.ToLower(s)) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.5.3/main.go new/xmpp-dns-0.6.0/main.go --- old/xmpp-dns-0.5.3/main.go 2025-09-24 20:08:37.000000000 +0200 +++ new/xmpp-dns-0.6.0/main.go 2026-01-15 20:07:10.000000000 +0100 @@ -20,6 +20,7 @@ "net/url" "os" "runtime" + "strconv" "strings" "time" @@ -30,7 +31,7 @@ ) const ( - version = "0.5.3" + version = "0.6.0" nsBOSH = "urn:xmpp:alt-connections:xbosh" nsC2SdTLS = "urn:xmpp:alt-connections:tls" nsC2SQuic = "urn:xmpp:alt-connections:quic" @@ -90,12 +91,18 @@ flagTLSVersion := getopt.IntLong("tls-version", 0, 12, "Minimal TLS version. 10 (TSLv1.0), 11 (TLSv1.1), 12 (TLSv1.2) or 13 (TLSv1.3).") flagVersion := getopt.BoolLong("version", 0, "Show version information.") - flagFallback := getopt.BoolLong("fallback", 'f', "Check fallback (Standard ports on A/AAAA records)"+ + flagFallback := getopt.BoolLong("fallback", 'f', "Additionally check fallback (Standard ports on A/AAAA records)"+ " if no SRV records are provided.") + flagForceFallback := getopt.BoolLong("force-fallback", 0, "Check fallback (Standard ports on A/AAAA records)"+ + " even if SRV records are provided.") flagTimeout := getopt.IntLong("timeout", 0, 60, "Connection timeout in seconds.") flagResolver := getopt.StringLong("resolver", 0, "", "Custom resolver e.g. \"1.1.1.1\" for common DNS"+ " or \"5.1.66.255#dot.ffmuc.net\" for usage with \"--dot\".") flagDoT := getopt.BoolLong("dot", 0, "Use DNSoverTLS (DoT), see also \"--resolver\".") + flagClientDTLS := getopt.ListLong("client-dtls", 0, "Add an arbitrary target for C2S with direct TLS in the form domain:port. Can be invoked several times.") + flagClientSTLS := getopt.ListLong("client-stls", 0, "Add an arbitrary target for C2S with StartTLS in the form domain:port. Can be invoked several times.") + flagServerDTLS := getopt.ListLong("server-dtls", 0, "Add an arbitrary target for S2S with direct TLS in the form domain:port. Can be invoked several times.") + flagServerSTLS := getopt.ListLong("server-stls", 0, "Add an arbitrary target for S2S with StartTLS in the form domain:port. Can be invoked several times.") // Parse command line flags. getopt.Parse() @@ -130,18 +137,18 @@ *flagVerbose = true } - // If neither IPv4 nor Ipv6 is specified we'll use both. - if !*flagV4 && !*flagV6 { - *flagV4 = true - *flagV6 = true - } - // If either IPv4 or IPv6 is specified but the verbose flag // is not set, we'll just set it. if !*flagVerbose && (*flagV4 || *flagV6) { *flagVerbose = true } + // If neither IPv4 nor Ipv6 is specified we'll use both. + if !*flagV4 && !*flagV6 { + *flagV4 = true + *flagV6 = true + } + // If DoT is enabled a resolver must be set. if *flagDoT && *flagResolver == "" { log.Fatal("A resolver must be specified for DoT.") @@ -149,6 +156,7 @@ // Read server from command line. server := getopt.Args() + fmt.Println("args:", server) switch count := len(server); { case count == 0: log.Fatal("Please specify a server.") @@ -195,26 +203,78 @@ } if *flagClient { + var fallback bool clientRecords, err := c.LookupClient(serverASCII) if err != nil && len(clientRecords) == 0 { fmt.Println(err) if *flagFallback && *flagTest { + fallback = true fmt.Println("Trying fallback ports.") fmt.Println() - clientRecords = []xmppsrv.SRV{ - { - Type: "xmpp-client", - Target: server[0], - Port: 5222, - }, + } + } + if len(*flagClientDTLS) > 0 { + for _, cdtls := range *flagClientDTLS { + target := strings.SplitN(cdtls, ":", 2) + port, err := strconv.ParseUint(target[1], 10, 16) + if err != nil { + fmt.Println(err) + continue + } + cr := xmppsrv.SRV{ + Type: "xmpps-client", + Target: target[0], + Port: uint16(port), + } + clientRecords = append(clientRecords, cr) + } + } + if len(*flagClientSTLS) > 0 { + for _, cstls := range *flagClientSTLS { + target := strings.SplitN(cstls, ":", 2) + port, err := strconv.ParseUint(target[1], 10, 16) + if err != nil { + fmt.Println(err) + continue + } + cr := xmppsrv.SRV{ + Type: "xmpp-client", + Target: target[0], + Port: uint16(port), + } + clientRecords = append(clientRecords, cr) + } + } + if *flagForceFallback && !fallback && *flagTest { + if len(clientRecords) > 0 { + var standardPort bool + for _, r := range clientRecords { + if r.Type == "xmpp-client" && + (r.Target == server[0] || + r.Target == server[0]+".") && + r.Port == 5222 { + standardPort = true + } + } + if !standardPort { + fallback = true } } } + if fallback { + cr := xmppsrv.SRV{ + Type: "xmpp-client", + Target: server[0], + Port: 5222, + } + clientRecords = append(clientRecords, cr) + } checkRecord(clientRecords, *flagVerbose, *flagV4, *flagV6, *flagTest, server[0], &tlsConfig, timeout) } if *flagServer { + var fallback bool if *flagClient { fmt.Println() } @@ -222,16 +282,66 @@ if err != nil && len(serverRecords) == 0 { fmt.Println(err) if *flagFallback && *flagTest { + fallback = true fmt.Println("Trying fallback ports.") fmt.Println() - serverRecords = []xmppsrv.SRV{ - { - Type: "xmpp-server", - Target: serverASCII, - Port: 5269, - }, + } + } + if len(*flagServerDTLS) > 0 { + for _, sdtls := range *flagServerDTLS { + target := strings.SplitN(sdtls, ":", 2) + port, err := strconv.ParseUint(target[1], 10, 16) + if err != nil { + fmt.Println(err) + continue + } + sr := xmppsrv.SRV{ + Type: "xmpps-server", + Target: target[0], + Port: uint16(port), + } + serverRecords = append(serverRecords, sr) + } + } + if len(*flagServerSTLS) > 0 { + for _, sstls := range *flagServerSTLS { + target := strings.SplitN(sstls, ":", 2) + port, err := strconv.ParseUint(target[1], 10, 16) + if err != nil { + fmt.Println(err) + continue + } + sr := xmppsrv.SRV{ + Type: "xmpp-server", + Target: target[0], + Port: uint16(port), } + serverRecords = append(serverRecords, sr) + } + } + if *flagForceFallback && !fallback && *flagTest { + if len(serverRecords) > 0 { + var standardPort bool + for _, r := range serverRecords { + if r.Type == "xmpp-server" && + (r.Target == serverASCII || + r.Target == serverASCII+".") && + r.Port == 5269 { + standardPort = true + } + } + if !standardPort { + fallback = true + } + } + } + if fallback { + sr := xmppsrv.SRV{ + Type: "xmpp-server", + Target: serverASCII, + Port: 5269, } + serverRecords = append(serverRecords, sr) } checkRecord(serverRecords, *flagVerbose, *flagV4, *flagV6, *flagTest, server[0], &tlsConfig, timeout) @@ -293,20 +403,20 @@ switch record.Type { case "xmpp-client": startTLS("client", serverName, c, tlsConfig, timeout) - c.Close() + _ = c.Close() case "xmpps-client": tlsConfig.NextProtos = []string{"xmpp-client"} directTLS("client", serverName, c, tlsConfig, timeout) - c.Close() + _ = c.Close() case "xmpp-server": startTLS("server", serverName, c, tlsConfig, timeout) - c.Close() + _ = c.Close() case "xmpps-server": tlsConfig.NextProtos = []string{"xmpp-server"} directTLS("server", serverName, c, tlsConfig, timeout) - c.Close() + _ = c.Close() default: - c.Close() + _ = c.Close() } } } @@ -403,14 +513,14 @@ fmt.Println("Server sent failure.") return } - _, err = c.Write([]byte(fmt.Sprintf("<starttls xmlns='%s'/>", nsStartTLS))) + _, err = fmt.Fprintf(c, "<starttls xmlns='%s'/>", nsStartTLS) if err != nil { fmt.Println(statusNOK) fmt.Println(err) return } - for !(serverProceed.XMLName.Local == "proceed" && - serverProceed.Xmlns == nsStartTLS) { + for serverProceed.XMLName.Local != "proceed" && + serverProceed.Xmlns != nsStartTLS { _, err = c.Read(buf) if err != nil { fmt.Println(statusNOK) @@ -454,7 +564,7 @@ } } else { checkCertExpiry(d) - d.Close() + _ = d.Close() } } @@ -563,7 +673,6 @@ if resp.StatusCode == 404 { return } - defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return @@ -605,6 +714,7 @@ fmt.Printf("Unknown connection method: %s\n", link.Rel) } } + _ = resp.Body.Close() } } @@ -639,7 +749,6 @@ if resp.StatusCode == 404 { return } - defer resp.Body.Close() body, err := io.ReadAll(resp.Body) if err != nil { return @@ -720,7 +829,7 @@ } tlsConfig.NextProtos = []string{"xmpp-client"} directTLS("client", serverName, c, tlsConfig, timeout) - c.Close() + _ = c.Close() } } } @@ -757,7 +866,7 @@ } tlsConfig.NextProtos = []string{"xmpp-server"} directTLS("client", serverName, c, tlsConfig, timeout) - c.Close() + _ = c.Close() } } } @@ -824,6 +933,7 @@ } } } + _ = resp.Body.Close() } func checkBOSH(server string, target string, ipv4 bool, ipv6 bool, tlsConfig *tls.Config, @@ -888,7 +998,6 @@ fmt.Println(err) return } - defer resp.Body.Close() respBody, err := io.ReadAll(resp.Body) if err != nil { return @@ -923,6 +1032,7 @@ fmt.Printf("%s (%sno TLS%s)", statusNOK, colorRed, colorReset) } fmt.Println() + _ = resp.Body.Close() } func checkWebSocket(server string, target string, tlsConfig *tls.Config, timeout time.Duration, targetType string) { @@ -1086,9 +1196,10 @@ now := time.Now() switch { case time.Until(expiry).Hours() < 336: - fmt.Printf("%s[OK]%s", colorYellow, colorReset) + fmt.Printf("[%sOK%s]", colorYellow, colorReset) printTLSVersion(c.ConnectionState().Version) - fmt.Printf(" (Cert expires in %d days.)\n", int(time.Until(expiry).Hours())%24) + fmt.Printf(" (Cert expires in %d days at %s)\n", + int(time.Until(expiry).Hours())/24, expiry.Truncate(time.Second).String()) case now.Before(expiry) && now.After(start): fmt.Print(statusOK) printTLSVersion(c.ConnectionState().Version) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.5.3/man/xmpp-dns.1 new/xmpp-dns-0.6.0/man/xmpp-dns.1 --- old/xmpp-dns-0.5.3/man/xmpp-dns.1 2025-09-24 20:08:37.000000000 +0200 +++ new/xmpp-dns-0.6.0/man/xmpp-dns.1 2026-01-15 20:07:10.000000000 +0100 @@ -1,10 +1,10 @@ -.\" generated with Ronn-NG/v0.9.1 -.\" http://github.com/apjanke/ronn-ng/tree/0.9.1 -.TH "XMPP\-DNS" "1" "April 2024" "" +.\" generated with Ronn-NG/v0.10.1 +.\" http://github.com/apjanke/ronn-ng/tree/0.10.1 +.TH "XMPP\-DNS" "1" "January 2026" "" .SH "NAME" \fBxmpp\-dns\fR \- A CLI tool to check XMPP SRV records\. .SH "SYNOPSIS" -\fBxmpp\-dns\fR [\-46cfstv] [\-\-help] [\-\-no\-color] [\-\-timeout value] [\-\-tls\-version value] [\-\-version] [parameters \|\.\|\.\|\.] +\fBxmpp\-dns\fR [\-46cfstv] [\-\-client\-dtls value] [\-\-client\-stls value] [\-\-dot] [\-\-force\-fallback] [\-\-help] [\-\-no\-color] [\-\-resolver value] [\-\-server\-dtls value] [\-\-server\-stls value] [\-\-timeout value] [\-\-tls\-version value] [\-\-version] \fBxmpp\-server\fR .SH "DESCRIPTION" A little CLI tool to check SRV records for XMPP\. Beside showing the records it can also try to connect to the server and also test StartTLS and direct TLS\. .SH "OPTIONS" @@ -18,11 +18,20 @@ \fB\-c\fR, \fB\-\-client\fR Show client SRV records\. .TP +\fB\-\-client\-dtls\fR=[\fIvalue\fR] +Add an arbitrary target for C2S with direct TLS in the form \fBdomain:port\fR\. Can be invoked several times\. +.TP +\fB\-\-client\-stls\fR=[\fIvalue\fR] +Add an arbitrary target for C2S with StartTLS in the form \fBdomain:port\fR\. Can be invoked several times\. +.TP \fB\-\-dot\fR Use DoT, see also \fB\-\-resolver\fR\. .TP \fB\-f\fR, \fB\-\-fallback\fR -Check fallback (Standard ports on A/AAAA records) if no SRV records are provided\. +Check fallback (standard ports on A/AAAA records) if no SRV records are provided\. +.TP +\fB\-\-force\-fallback\fR +Additionally heck fallback (standard ports on A/AAAA records) even if SRV records are provided\. .TP \fB\-\-help\fR Show help\. @@ -36,6 +45,12 @@ \fB\-s\fR, \fB\-\-server\fR Show server SRV records\. .TP +\fB\-\-server\-dtls\fR=[\fIvalue\fR] +Add an arbitrary target for S2S with direct TLS in the form \fBdomain:port\fR\. Can be invoked several times\. +.TP +\fB\-\-server\-stls\fR=[\fIvalue\fR] +Add an arbitrary target for S2S with StartTLS in the form \fBdomain:port\fR\. Can be invoked several times\. +.TP \fB\-t\fR Test connection and certificates\. .TP @@ -55,12 +70,18 @@ There are no shell completions yet (contributions welcome) but for zsh it is possible to automatically create completions from \fB\-\-help\fR which might work good enough\. .P Just place the following in your \fB~/\.zshrc\fR or \fB~/\.zshrc\.local\fR: -.P -\fBcompdef _gnu_generic xmpp\-dns\fR +.IP "" 4 +.nf +compdef _gnu_generic xmpp\-dns +.fi +.IP "" 0 .SS "FISH" There are no shell completions yet, but FISH can generate them from the man page with following command: -.P -\fBfish_update_completions\fR +.IP "" 4 +.nf +fish_update_completions +.fi +.IP "" 0 .SH "CHAT" There is no dedicated chat for \fBxmpp\-dns\fR, but feel free to join \fIhttps://join\.jabber\.network/#go\-sendxmpp@chat\.mdosch\.de?join\fR\. .SH "AUTHOR" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.5.3/man/xmpp-dns.1.html new/xmpp-dns-0.6.0/man/xmpp-dns.1.html --- old/xmpp-dns-0.5.3/man/xmpp-dns.1.html 2025-09-24 20:08:37.000000000 +0200 +++ new/xmpp-dns-0.6.0/man/xmpp-dns.1.html 2026-01-15 20:07:10.000000000 +0100 @@ -1,8 +1,8 @@ <!DOCTYPE html> <html> <head> - <meta http-equiv='content-type' content='text/html;charset=utf8'> - <meta name='generator' content='Ronn-NG/v0.9.1 (http://github.com/apjanke/ronn-ng/tree/0.9.1)'> + <meta http-equiv='content-type' content='text/html;charset=utf-8'> + <meta name='generator' content='Ronn-NG/v0.10.1 (http://github.com/apjanke/ronn-ng/tree/0.10.1)'> <title>xmpp-dns(1) - A CLI tool to check XMPP SRV records.</title> <style type='text/css' media='all'> /* style: man */ @@ -78,7 +78,7 @@ </p> <h2 id="SYNOPSIS">SYNOPSIS</h2> -<p><code>xmpp-dns</code> [-46cfstv] [--help] [--no-color] [--timeout value] [--tls-version value] [--version] [parameters ...]</p> +<p><code>xmpp-dns</code> [-46cfstv] [--client-dtls value] [--client-stls value] [--dot] [--force-fallback] [--help] [--no-color] [--resolver value] [--server-dtls value] [--server-stls value] [--timeout value] [--tls-version value] [--version] <strong>xmpp-server</strong></p> <h2 id="DESCRIPTION">DESCRIPTION</h2> @@ -96,12 +96,20 @@ <code>-c</code>, <code>--client</code> </dt> <dd>Show client SRV records.</dd> +<dt> +<code>--client-dtls</code>=[<var>value</var>]</dt> +<dd>Add an arbitrary target for C2S with direct TLS in the form <strong>domain:port</strong>. Can be invoked several times.</dd> +<dt> +<code>--client-stls</code>=[<var>value</var>]</dt> +<dd>Add an arbitrary target for C2S with StartTLS in the form <strong>domain:port</strong>. Can be invoked several times.</dd> <dt><code>--dot</code></dt> <dd>Use DoT, see also <code>--resolver</code>.</dd> <dt> <code>-f</code>, <code>--fallback</code> </dt> -<dd>Check fallback (Standard ports on A/AAAA records) if no SRV records are provided.</dd> +<dd>Check fallback (standard ports on A/AAAA records) if no SRV records are provided.</dd> +<dt><code>--force-fallback</code></dt> +<dd>Additionally heck fallback (standard ports on A/AAAA records) even if SRV records are provided.</dd> <dt><code>--help</code></dt> <dd>Show help.</dd> <dt><code>--no-color</code></dt> @@ -112,6 +120,12 @@ <code>-s</code>, <code>--server</code> </dt> <dd>Show server SRV records.</dd> +<dt> +<code>--server-dtls</code>=[<var>value</var>]</dt> +<dd>Add an arbitrary target for S2S with direct TLS in the form <strong>domain:port</strong>. Can be invoked several times.</dd> +<dt> +<code>--server-stls</code>=[<var>value</var>]</dt> +<dd>Add an arbitrary target for S2S with StartTLS in the form <strong>domain:port</strong>. Can be invoked several times.</dd> <dt><code>-t</code></dt> <dd>Test connection and certificates.</dd> <dt> @@ -137,17 +151,15 @@ <p>Just place the following in your <code>~/.zshrc</code> or <code>~/.zshrc.local</code>:</p> -<p><code> -compdef _gnu_generic xmpp-dns -</code></p> +<pre><code>compdef _gnu_generic xmpp-dns +</code></pre> <h3 id="FISH">FISH</h3> <p>There are no shell completions yet, but FISH can generate them from the man page with following command:</p> -<p><code> -fish_update_completions -</code></p> +<pre><code>fish_update_completions +</code></pre> <h2 id="CHAT">CHAT</h2> @@ -169,7 +181,7 @@ <ol class='man-decor man-foot man foot'> <li class='tl'></li> - <li class='tc'>April 2024</li> + <li class='tc'>January 2026</li> <li class='tr'>xmpp-dns(1)</li> </ol> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/xmpp-dns-0.5.3/man/xmpp-dns.1.ronn new/xmpp-dns-0.6.0/man/xmpp-dns.1.ronn --- old/xmpp-dns-0.5.3/man/xmpp-dns.1.ronn 2025-09-24 20:08:37.000000000 +0200 +++ new/xmpp-dns-0.6.0/man/xmpp-dns.1.ronn 2026-01-15 20:07:10.000000000 +0100 @@ -3,7 +3,7 @@ ## SYNOPSIS -`xmpp-dns` [-46cfstv] [--help] [--no-color] [--timeout value] [--tls-version value] [--version] [parameters ...] +`xmpp-dns` [-46cfstv] [--client-dtls value] [--client-stls value] [--dot] [--force-fallback] [--help] [--no-color] [--resolver value] [--server-dtls value] [--server-stls value] [--timeout value] [--tls-version value] [--version] **xmpp-server** ## DESCRIPTION @@ -21,11 +21,20 @@ * `-c`, `--client`: Show client SRV records. +* `--client-dtls`=[<value>]: +Add an arbitrary target for C2S with direct TLS in the form **domain:port**. Can be invoked several times. + +* `--client-stls`=[<value>]: +Add an arbitrary target for C2S with StartTLS in the form **domain:port**. Can be invoked several times. + * `--dot`: Use DoT, see also `--resolver`. * `-f`, `--fallback`: -Check fallback (Standard ports on A/AAAA records) if no SRV records are provided. +Check fallback (standard ports on A/AAAA records) if no SRV records are provided. + +* `--force-fallback`: +Additionally heck fallback (standard ports on A/AAAA records) even if SRV records are provided. * `--help`: Show help. @@ -39,6 +48,12 @@ * `-s`, `--server`: Show server SRV records. +* `--server-dtls`=[<value>]: +Add an arbitrary target for S2S with direct TLS in the form **domain:port**. Can be invoked several times. + +* `--server-stls`=[<value>]: +Add an arbitrary target for S2S with StartTLS in the form **domain:port**. Can be invoked several times. + * `-t`: Test connection and certificates.
