diff options
| author | Christine Dodrill <me@christine.website> | 2019-04-08 16:05:06 +0000 |
|---|---|---|
| committer | Christine Dodrill <me@christine.website> | 2019-04-08 16:12:50 +0000 |
| commit | f5e9eded374394b7510b2492dc729d7952083a53 (patch) | |
| tree | 6f196022eee050068151a4971734f0b3940b60f2 | |
| parent | 9f53168d9af58b206fadbb1636e9ea0772f8730f (diff) | |
| download | x-1.0.3.tar.xz x-1.0.3.zip | |
dnsd: include user agent with requestsv1.0.3
| -rw-r--r-- | cmd/dnsd/main.go | 16 | ||||
| -rw-r--r-- | web/user_agent.go | 22 | ||||
| -rw-r--r-- | web/user_agent_test.go | 2 |
3 files changed, 35 insertions, 5 deletions
diff --git a/cmd/dnsd/main.go b/cmd/dnsd/main.go index eefa518..d6e4df4 100644 --- a/cmd/dnsd/main.go +++ b/cmd/dnsd/main.go @@ -9,7 +9,9 @@ import ( "os/signal" "syscall" "time" + "fmt" + "github.com/Xe/x/web" "github.com/Xe/x/internal" "github.com/miekg/dns" "github.com/mmikulicic/stringlist" @@ -75,6 +77,12 @@ func main() { log.Printf("conf: -forward-server=%s", *server) rrs := []dns.RR{} + ns := []dns.RR{} + + txt, err := dns.NewRR("user-agent. 10 CH TXT " + fmt.Sprintf("%q", web.GenUserAgent())) + if err != nil { + log.Fatal(err) + } for _, zurl := range *zoneURLs { resp, err := http.Get(zurl) @@ -88,6 +96,11 @@ func main() { zp := dns.NewZoneParser(reader, "", zurl) for rr, ok := zp.Next(); ok; rr, ok = zp.Next() { rrs = append(rrs, rr) + + if rr.Header().Rrtype == dns.TypeNS { + ns = append(ns, rr) + } + i++ } @@ -126,6 +139,9 @@ func main() { for _, a := range resolver(*server, q.Name, q.Qtype) { answers = append(answers, a) } + } else { + m.Ns = ns + m.Extra = []dns.RR{txt} } for _, a := range answers { m.Answer = append(m.Answer, a) diff --git a/web/user_agent.go b/web/user_agent.go index 8e4bd4c..99885a4 100644 --- a/web/user_agent.go +++ b/web/user_agent.go @@ -4,16 +4,30 @@ import ( "fmt" "net/http" "os" - "path/filepath" "runtime" + "time" + + "github.com/celrenheit/sandflake" +) + +var ( + startID = sandflake.Next() + hostname = "<unknown>" + started = time.Now() ) func init() { http.DefaultTransport = &userAgentTransport{http.DefaultTransport} + + name, _ := os.Hostname() + if name != "" { + hostname = name + } } -func genUserAgent() string { - return fmt.Sprintf("github.com-Xe-x (%s/%s/%s; %s/bot; +https://github.com/Xe/x/blob/master/web/x.md)", runtime.Version(), runtime.GOOS, runtime.GOARCH, filepath.Base(os.Args[0])) +// GenUserAgent creates a unique User-Agent string for outgoing HTTP requests. +func GenUserAgent() string { + return fmt.Sprintf("github.com-Xe-x (%s/%s/%s; %s; +https://github.com/Xe/x/blob/master/web/x.md) Alive (%s; sandflake) Hostname/%s Started (%s)", runtime.Version(), runtime.GOOS, runtime.GOARCH, os.Args[0], startID.String(), hostname, started.Format(time.RFC3339)) } type userAgentTransport struct { @@ -21,6 +35,6 @@ type userAgentTransport struct { } func (uat userAgentTransport) RoundTrip(r *http.Request) (*http.Response, error) { - r.Header.Set("User-Agent", genUserAgent()) + r.Header.Set("User-Agent", GenUserAgent()) return uat.rt.RoundTrip(r) } diff --git a/web/user_agent_test.go b/web/user_agent_test.go index e2ffca0..c2ecb6e 100644 --- a/web/user_agent_test.go +++ b/web/user_agent_test.go @@ -3,7 +3,7 @@ package web import "testing" func TestGenUserAgent(t *testing.T) { - ua := genUserAgent() + ua := GenUserAgent() if ua == "" { t.Fatal("no user agent generated") } |
