Fix the examples
This commit is contained in:
parent
87845a9cb1
commit
ae3aedec99
|
@ -5,7 +5,7 @@ axfr \
|
||||||
reflect \
|
reflect \
|
||||||
funkensturm \
|
funkensturm \
|
||||||
xfrprx \
|
xfrprx \
|
||||||
ds2key \
|
key2ds \
|
||||||
|
|
||||||
all:
|
all:
|
||||||
for i in $(EXAMPLES); do gomake -C $$i; done
|
for i in $(EXAMPLES); do gomake -C $$i; done
|
||||||
|
|
|
@ -9,7 +9,6 @@ package main
|
||||||
import (
|
import (
|
||||||
"os"
|
"os"
|
||||||
"flag"
|
"flag"
|
||||||
"net"
|
|
||||||
"fmt"
|
"fmt"
|
||||||
"dns"
|
"dns"
|
||||||
"os/signal"
|
"os/signal"
|
||||||
|
@ -142,30 +141,15 @@ func doFunkensturm(pkt *dns.Msg) ([]byte, os.Error) {
|
||||||
return out, nil
|
return out, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func replyUDP(c *net.UDPConn, a net.Addr, i *dns.Msg) {
|
func reply(c *dns.Conn, i *dns.Msg) {
|
||||||
out, err := doFunkensturm(i)
|
out, err := doFunkensturm(i)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
fmt.Fprintf(os.Stderr, "Error: %s\n", err.String())
|
fmt.Fprintf(os.Stderr, "Error: %s\n", err.String())
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
if out != nil {
|
if out != nil {
|
||||||
dns.SendUDP(out, c, a)
|
c.Write(out)
|
||||||
}
|
}
|
||||||
// nothing is send back
|
|
||||||
}
|
|
||||||
|
|
||||||
func replyTCP(c *net.TCPConn, a net.Addr, i *dns.Msg) {
|
|
||||||
out, err := doFunkensturm(i)
|
|
||||||
if err != nil {
|
|
||||||
fmt.Fprintf(os.Stderr, "Error: %s\n", err.String())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if out != nil {
|
|
||||||
dns.SendTCP(out, c, a)
|
|
||||||
}
|
|
||||||
// nothing is send back
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// split 127.0.0.1:53 into components
|
// split 127.0.0.1:53 into components
|
||||||
|
@ -180,29 +164,13 @@ func splitAddrPort(s string) (a, p string) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func tcp(addr string, e chan os.Error) {
|
func tcp(addr string, e chan os.Error) {
|
||||||
a, err := net.ResolveTCPAddr(addr)
|
err := dns.ListenAndServeTCP(addr, reply)
|
||||||
if err != nil {
|
|
||||||
e <- err
|
|
||||||
}
|
|
||||||
l, err := net.ListenTCP("tcp", a)
|
|
||||||
if err != nil {
|
|
||||||
e <- err
|
|
||||||
}
|
|
||||||
err = dns.ServeTCP(l, replyTCP)
|
|
||||||
e <- err
|
e <- err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func udp(addr string, e chan os.Error) {
|
func udp(addr string, e chan os.Error) {
|
||||||
a, err := net.ResolveUDPAddr(addr)
|
err := dns.ListenAndServeUDP(addr, reply)
|
||||||
if err != nil {
|
|
||||||
e <- err
|
|
||||||
}
|
|
||||||
l, err := net.ListenUDP("udp", a)
|
|
||||||
if err != nil {
|
|
||||||
e <- err
|
|
||||||
}
|
|
||||||
err = dns.ServeUDP(l, replyUDP)
|
|
||||||
e <- err
|
e <- err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,35 +27,35 @@ import (
|
||||||
|
|
||||||
func reply(c *dns.Conn, in *dns.Msg) []byte {
|
func reply(c *dns.Conn, in *dns.Msg) []byte {
|
||||||
m := new(dns.Msg)
|
m := new(dns.Msg)
|
||||||
m.SetReply(in.MsgHdr.Id)
|
m.SetReply(in)
|
||||||
|
|
||||||
m.Question = make([]dns.Question, 1)
|
m.Question = make([]dns.Question, 1)
|
||||||
m.Answer = make([]dns.RR, 1)
|
m.Answer = make([]dns.RR, 1)
|
||||||
m.Extra = make([]dns.RR, 1)
|
m.Extra = make([]dns.RR, 1)
|
||||||
|
|
||||||
// Copy the question.
|
// Copy the question.
|
||||||
m.Question[0] = in.Question[0]
|
m.Question[0] = in.Question[0]
|
||||||
|
|
||||||
// Some foo to check if we are called through ip6 or ip4.
|
// Some foo to check if we are called through ip6 or ip4.
|
||||||
// We add the correct reply RR.
|
// We add the correct reply RR.
|
||||||
var ad net.IP
|
var ad net.IP
|
||||||
if c.UDP != nil {
|
if c.UDP != nil {
|
||||||
ad = c.Addr.(*net.UDPAddr).IP
|
ad = c.Addr.(*net.UDPAddr).IP
|
||||||
} else {
|
} else {
|
||||||
ad = c.Addr.(*net.TCPAddr).IP
|
ad = c.Addr.(*net.TCPAddr).IP
|
||||||
}
|
}
|
||||||
|
|
||||||
if ad.To4() != nil {
|
if ad.To4() != nil {
|
||||||
r := new(dns.RR_A)
|
r := new(dns.RR_A)
|
||||||
r.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 0}
|
r.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeA, Class: dns.ClassINET, Ttl: 0}
|
||||||
r.A = ad
|
r.A = ad
|
||||||
m.Answer[0] = r
|
m.Answer[0] = r
|
||||||
} else {
|
} else {
|
||||||
r := new(dns.RR_AAAA)
|
r := new(dns.RR_AAAA)
|
||||||
r.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: 0}
|
r.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeAAAA, Class: dns.ClassINET, Ttl: 0}
|
||||||
r.AAAA = ad
|
r.AAAA = ad
|
||||||
m.Answer[0] = r
|
m.Answer[0] = r
|
||||||
}
|
}
|
||||||
|
|
||||||
t := new(dns.RR_TXT)
|
t := new(dns.RR_TXT)
|
||||||
t.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: 0}
|
t.Hdr = dns.RR_Header{Name: "whoami.miek.nl.", Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: 0}
|
||||||
|
@ -67,12 +67,12 @@ func reply(c *dns.Conn, in *dns.Msg) []byte {
|
||||||
m.Extra[0] = t
|
m.Extra[0] = t
|
||||||
|
|
||||||
b, _ := m.Pack()
|
b, _ := m.Pack()
|
||||||
return b
|
return b
|
||||||
}
|
}
|
||||||
|
|
||||||
func handle(c *dns.Conn, in *dns.Msg) {
|
func handle(c *dns.Conn, in *dns.Msg) {
|
||||||
if in.MsgHdr.Response == true {
|
if in.MsgHdr.Response == true {
|
||||||
return // We don't do responses
|
return // We don't do responses
|
||||||
}
|
}
|
||||||
answer := reply(c, in)
|
answer := reply(c, in)
|
||||||
c.Write(answer)
|
c.Write(answer)
|
||||||
|
@ -85,7 +85,7 @@ func tcp(addr string, e chan os.Error) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func udp(addr string, e chan os.Error) {
|
func udp(addr string, e chan os.Error) {
|
||||||
err := dns.ListenAndServeUDP(addr, handle)
|
err := dns.ListenAndServeUDP(addr, handle)
|
||||||
e <- err
|
e <- err
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue