Doesnt work yet
This commit is contained in:
parent
ea180d5051
commit
fd12b8a946
20
TODO
20
TODO
|
@ -1,25 +1,12 @@
|
|||
Todo:
|
||||
* responder rework, like the http package http.Handler
|
||||
responder.HandlerTCP
|
||||
* os.Error in Pack()/Unpack() or Log??? - again look at http
|
||||
* wildcards, in sig gen, sig checking
|
||||
* Private key file parsing use io.Reader (or the like)
|
||||
- NewReader, NewWriter?
|
||||
* Private key file parsing use io.Reader (or the like) - NewReader, NewWriter?
|
||||
* IP6 testing - in resolver and also in responder code
|
||||
extend Responder interface with ipv6?
|
||||
* Test impl of nameserver, with a small zone, 1 KSK and online signing
|
||||
* NSEC and nsec3 closest encloser helper functions
|
||||
* Tsig generation for replies (request MAC)
|
||||
* pack/Unpack smaller
|
||||
|
||||
From http package:
|
||||
|
||||
func HandleFunc(pattern string, handler func(ResponseWriter, *Request))
|
||||
HandleFunc registers the handler function for the given pattern
|
||||
in the DefaultServeMux.
|
||||
|
||||
func ListenAndServe(addr string, handler Handler) os.Error
|
||||
|
||||
* pack/Unpack smaller. EDNS 'n stuff can be folded in
|
||||
|
||||
Longer term:
|
||||
* Parsing from strings, going with goyacc and own lexer
|
||||
|
@ -41,6 +28,3 @@ Funkensturm:
|
|||
* use exp/eval - to inteprete the config file??
|
||||
* TCP how to handle stuff like AXFR
|
||||
* use package log
|
||||
|
||||
log packet
|
||||
|
||||
|
|
|
@ -27,6 +27,11 @@ import (
|
|||
"net"
|
||||
)
|
||||
|
||||
type Server struct {
|
||||
// timeout and other stuff
|
||||
Timeout int
|
||||
}
|
||||
|
||||
// Every nameserver implements the Hander interface. It defines
|
||||
// the kind of nameserver
|
||||
type Handler interface {
|
||||
|
|
102
server_test.go
102
server_test.go
|
@ -1,30 +1,27 @@
|
|||
package responder
|
||||
package dns
|
||||
|
||||
import (
|
||||
"os"
|
||||
"testing"
|
||||
"fmt"
|
||||
"dns"
|
||||
"net"
|
||||
"time"
|
||||
)
|
||||
|
||||
type myserv Server
|
||||
type server Server
|
||||
|
||||
func createpkg(id uint16, tcp bool, remove net.Addr) []byte {
|
||||
m := new(dns.Msg)
|
||||
m := new(Msg)
|
||||
m.MsgHdr.Id = id
|
||||
m.MsgHdr.Authoritative = true
|
||||
m.MsgHdr.AuthenticatedData = false
|
||||
m.MsgHdr.RecursionAvailable = true
|
||||
m.MsgHdr.Response = true
|
||||
m.MsgHdr.Opcode = dns.OpcodeQuery
|
||||
m.MsgHdr.Rcode = dns.RcodeSuccess
|
||||
m.Question = make([]dns.Question, 1)
|
||||
m.Question[0] = dns.Question{"miek.nl.", dns.TypeTXT, dns.ClassINET}
|
||||
m.Answer = make([]dns.RR, 1)
|
||||
t := new(dns.RR_TXT)
|
||||
t.Hdr = dns.RR_Header{Name: "miek.nl.", Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: 3600}
|
||||
m.MsgHdr.Opcode = OpcodeQuery
|
||||
m.MsgHdr.Rcode = RcodeSuccess
|
||||
m.Question = make([]Question, 1)
|
||||
m.Question[0] = Question{"miek.nl.", TypeTXT, ClassINET}
|
||||
m.Answer = make([]RR, 1)
|
||||
t := new(RR_TXT)
|
||||
t.Hdr = RR_Header{Name: "miek.nl.", Rrtype: TypeTXT, Class: ClassINET, Ttl: 3600}
|
||||
if tcp {
|
||||
t.Txt = "Dit is iets anders TCP"
|
||||
} else {
|
||||
|
@ -35,8 +32,8 @@ func createpkg(id uint16, tcp bool, remove net.Addr) []byte {
|
|||
return out
|
||||
}
|
||||
|
||||
func (s *myserv) ResponderUDP(c *net.UDPConn, a net.Addr, in []byte) {
|
||||
inmsg := new(dns.Msg)
|
||||
func (h *server) ServeUDP(c *net.UDPConn, a net.Addr, in []byte) {
|
||||
inmsg := new(Msg)
|
||||
inmsg.Unpack(in)
|
||||
if inmsg.MsgHdr.Response == true {
|
||||
// Uh... answering to an response??
|
||||
|
@ -45,16 +42,12 @@ func (s *myserv) ResponderUDP(c *net.UDPConn, a net.Addr, in []byte) {
|
|||
}
|
||||
out := createpkg(inmsg.MsgHdr.Id, false, a)
|
||||
SendUDP(out, c, a)
|
||||
// Meta.QLen/RLen/QueryStart/QueryEnd can be filled in at
|
||||
// this point for logging purposses or anything else
|
||||
}
|
||||
|
||||
func (s *myserv) ResponderTCP(c *net.TCPConn, in []byte) {
|
||||
inmsg := new(dns.Msg)
|
||||
func (h *server) ServeTCP(c *net.TCPConn, in []byte) {
|
||||
inmsg := new(Msg)
|
||||
inmsg.Unpack(in)
|
||||
if inmsg.MsgHdr.Response == true {
|
||||
// Uh... answering to an response??
|
||||
// dont think so
|
||||
return
|
||||
}
|
||||
out := createpkg(inmsg.MsgHdr.Id, true, c.RemoteAddr())
|
||||
|
@ -62,65 +55,29 @@ func (s *myserv) ResponderTCP(c *net.TCPConn, in []byte) {
|
|||
}
|
||||
|
||||
func TestResponder(t *testing.T) {
|
||||
/* udp servertje */
|
||||
su := new(Server)
|
||||
su.Address = "127.0.0.1"
|
||||
su.Port = "8053"
|
||||
var us *myserv
|
||||
uch := make(chan os.Error)
|
||||
go su.NewResponder(us, uch)
|
||||
|
||||
/* tcp servertje */
|
||||
st := new(Server)
|
||||
st.Address = "127.0.0.1"
|
||||
st.Port = "8053"
|
||||
st.Tcp = true
|
||||
var ts *myserv
|
||||
tch := make(chan os.Error)
|
||||
go st.NewResponder(ts, tch)
|
||||
var h server
|
||||
go ListenAndServeTCP("127.0.0.1:8053", h.(Handler))
|
||||
go ListenAndServeUDP("127.0.0.1:8053", h.(Handler))
|
||||
time.Sleep(1 * 1e9)
|
||||
uch <- nil
|
||||
tch <- nil
|
||||
}
|
||||
|
||||
/*
|
||||
func TestReflectorResponder(t *testing.T) {
|
||||
stop := make(chan os.Error)
|
||||
s := new(Server)
|
||||
s.Port = "8053"
|
||||
s.Address = "127.0.0.1"
|
||||
|
||||
stoptcp := make(chan os.Error)
|
||||
stcp := new(Server)
|
||||
stcp.Port = "8053"
|
||||
stcp.Address = "127.0.0.1"
|
||||
stcp.Tcp = true
|
||||
|
||||
go stcp.NewResponder(Reflector, stoptcp)
|
||||
go s.NewResponder(Reflector, stop)
|
||||
|
||||
time.Sleep(1 * 1e9)
|
||||
stop <- nil
|
||||
stoptcp <- nil
|
||||
}
|
||||
*/
|
||||
|
||||
type servtsig Server
|
||||
|
||||
func createpkgtsig(id uint16, tcp bool, remove net.Addr) []byte {
|
||||
m := new(dns.Msg)
|
||||
m := new(Msg)
|
||||
m.MsgHdr.Id = id
|
||||
m.MsgHdr.Authoritative = true
|
||||
m.MsgHdr.AuthenticatedData = false
|
||||
m.MsgHdr.RecursionAvailable = true
|
||||
m.MsgHdr.Response = true
|
||||
m.MsgHdr.Opcode = dns.OpcodeQuery
|
||||
m.MsgHdr.Rcode = dns.RcodeSuccess
|
||||
m.Question = make([]dns.Question, 1)
|
||||
m.Question[0] = dns.Question{"miek.nl.", dns.TypeTXT, dns.ClassINET}
|
||||
m.Answer = make([]dns.RR, 1)
|
||||
t := new(dns.RR_TXT)
|
||||
t.Hdr = dns.RR_Header{Name: "miek.nl.", Rrtype: dns.TypeTXT, Class: dns.ClassINET, Ttl: 3600}
|
||||
m.MsgHdr.Opcode = OpcodeQuery
|
||||
m.MsgHdr.Rcode = RcodeSuccess
|
||||
m.Question = make([]Question, 1)
|
||||
m.Question[0] = Question{"miek.nl.", TypeTXT, ClassINET}
|
||||
m.Answer = make([]RR, 1)
|
||||
t := new(RR_TXT)
|
||||
t.Hdr = RR_Header{Name: "miek.nl.", Rrtype: TypeTXT, Class: ClassINET, Ttl: 3600}
|
||||
if tcp {
|
||||
t.Txt = "Dit is iets anders TCP"
|
||||
} else {
|
||||
|
@ -132,7 +89,7 @@ func createpkgtsig(id uint16, tcp bool, remove net.Addr) []byte {
|
|||
}
|
||||
|
||||
func (s *servtsig) ResponderUDP(c *net.UDPConn, a net.Addr, in []byte) {
|
||||
inmsg := new(dns.Msg)
|
||||
inmsg := new(Msg)
|
||||
inmsg.Unpack(in)
|
||||
fmt.Printf("%v\n", inmsg)
|
||||
if inmsg.MsgHdr.Response == true {
|
||||
|
@ -142,7 +99,7 @@ func (s *servtsig) ResponderUDP(c *net.UDPConn, a net.Addr, in []byte) {
|
|||
}
|
||||
rr := inmsg.Extra[len(inmsg.Extra)-1]
|
||||
switch t := rr.(type) {
|
||||
case *dns.RR_TSIG:
|
||||
case *RR_TSIG:
|
||||
v := t.Verify(inmsg, "awwLOtRfpGE+rRKF2+DEiw==")
|
||||
println(v)
|
||||
}
|
||||
|
@ -155,7 +112,7 @@ func (s *servtsig) ResponderUDP(c *net.UDPConn, a net.Addr, in []byte) {
|
|||
}
|
||||
|
||||
func (s *servtsig) ResponderTCP(c *net.TCPConn, in []byte) {
|
||||
inmsg := new(dns.Msg)
|
||||
inmsg := new(Msg)
|
||||
inmsg.Unpack(in)
|
||||
if inmsg.MsgHdr.Response == true {
|
||||
// Uh... answering to an response??
|
||||
|
@ -167,7 +124,6 @@ func (s *servtsig) ResponderTCP(c *net.TCPConn, in []byte) {
|
|||
}
|
||||
|
||||
func TestResponderTsig(t *testing.T) {
|
||||
/* udp servertje */
|
||||
su := new(Server)
|
||||
su.Address = "127.0.0.1"
|
||||
su.Port = "8053"
|
||||
|
@ -175,7 +131,6 @@ func TestResponderTsig(t *testing.T) {
|
|||
uch := make(chan os.Error)
|
||||
go su.NewResponder(us, uch)
|
||||
|
||||
/* tcp servertje */
|
||||
st := new(Server)
|
||||
st.Address = "127.0.0.1"
|
||||
st.Port = "8053"
|
||||
|
@ -187,3 +142,4 @@ func TestResponderTsig(t *testing.T) {
|
|||
uch <- nil
|
||||
tch <- nil
|
||||
}
|
||||
*/
|
||||
|
|
Loading…
Reference in New Issue