Fix incoming axfr
This commit is contained in:
parent
77d78f3218
commit
3ca767d2eb
|
@ -223,7 +223,13 @@ Flags:
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
for e := range env {
|
for e := range env {
|
||||||
fmt.Printf("%s\n", e.RR)
|
if e.Error != nil {
|
||||||
|
fmt.Printf(";; %s\n", e.Error.Error())
|
||||||
|
break
|
||||||
|
}
|
||||||
|
for _, r := range e.RR {
|
||||||
|
fmt.Printf("%s\n", r)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
31
xfr.go
31
xfr.go
|
@ -30,10 +30,13 @@ func (t *Transfer) In(q *Msg, a string) (env chan *Envelope, err error) {
|
||||||
if t.DialTimeout != 0 {
|
if t.DialTimeout != 0 {
|
||||||
timeout = t.DialTimeout
|
timeout = t.DialTimeout
|
||||||
}
|
}
|
||||||
t.Conn, err = net.DialTimeout("tcp", a, timeout)
|
t.Conn.Conn, err = net.DialTimeout("tcp", a, timeout)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
if err := t.WriteMsg(q); err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
env = make(chan *Envelope)
|
env = make(chan *Envelope)
|
||||||
go func() {
|
go func() {
|
||||||
if q.Question[0].Qtype == TypeAXFR {
|
if q.Question[0].Qtype == TypeAXFR {
|
||||||
|
@ -57,7 +60,7 @@ func (t *Transfer) inAxfr(id uint16, c chan *Envelope) {
|
||||||
timeout = t.ReadTimeout
|
timeout = t.ReadTimeout
|
||||||
}
|
}
|
||||||
for {
|
for {
|
||||||
t.SetReadDeadline(time.Now().Add(timeout))
|
t.Conn.SetReadDeadline(time.Now().Add(timeout))
|
||||||
in, err := t.ReadMsg()
|
in, err := t.ReadMsg()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
c <- &Envelope{nil, err}
|
c <- &Envelope{nil, err}
|
||||||
|
@ -67,6 +70,7 @@ func (t *Transfer) inAxfr(id uint16, c chan *Envelope) {
|
||||||
c <- &Envelope{in.Answer, ErrId}
|
c <- &Envelope{in.Answer, ErrId}
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
println("ok")
|
||||||
if first {
|
if first {
|
||||||
if !isSOAFirst(in) {
|
if !isSOAFirst(in) {
|
||||||
c <- &Envelope{in.Answer, ErrSoa}
|
c <- &Envelope{in.Answer, ErrSoa}
|
||||||
|
@ -177,7 +181,7 @@ func (t *Transfer) ReadMsg() (*Msg, error) {
|
||||||
if err := m.Unpack(p); err != nil {
|
if err := m.Unpack(p); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
if ts := m.IsTsig(); t != nil {
|
if ts := m.IsTsig(); ts != nil && t.TsigSecret != nil {
|
||||||
if _, ok := t.TsigSecret[ts.Hdr.Name]; !ok {
|
if _, ok := t.TsigSecret[ts.Hdr.Name]; !ok {
|
||||||
return m, ErrSecret
|
return m, ErrSecret
|
||||||
}
|
}
|
||||||
|
@ -190,7 +194,7 @@ func (t *Transfer) ReadMsg() (*Msg, error) {
|
||||||
// WriteMsg write a message throught the transfer connection t.
|
// WriteMsg write a message throught the transfer connection t.
|
||||||
func (t *Transfer) WriteMsg(m *Msg) (err error) {
|
func (t *Transfer) WriteMsg(m *Msg) (err error) {
|
||||||
var out []byte
|
var out []byte
|
||||||
if ts := m.IsTsig(); t != nil {
|
if ts := m.IsTsig(); ts != nil && t.TsigSecret != nil {
|
||||||
if _, ok := t.TsigSecret[ts.Hdr.Name]; !ok {
|
if _, ok := t.TsigSecret[ts.Hdr.Name]; !ok {
|
||||||
return ErrSecret
|
return ErrSecret
|
||||||
}
|
}
|
||||||
|
@ -220,3 +224,22 @@ func isSOALast(in *Msg) bool {
|
||||||
}
|
}
|
||||||
return false
|
return false
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
// Close implements the net.Conn Close method.
|
||||||
|
func (t *Transfer) Close() error { return t.Conn.Close() }
|
||||||
|
|
||||||
|
// LocalAddr implements the net.Conn LocalAddr method.
|
||||||
|
func (t *Transfer) LocalAddr() net.Addr { return t.Conn.LocalAddr() }
|
||||||
|
|
||||||
|
// RemoteAddr implements the net.Conn RemoteAddr method.
|
||||||
|
func (t *Transfer) RemoteAddr() net.Addr { return t.Conn.RemoteAddr() }
|
||||||
|
|
||||||
|
// SetDeadline implements the net.Conn SetDeadline method.
|
||||||
|
func (t *Transfer) SetDeadline(t1 time.Time) error { return t.Conn.SetDeadline(t1) }
|
||||||
|
|
||||||
|
// SetReadDeadline implements the net.Conn SetReadDeadline method.
|
||||||
|
func (t *Transfer) SetReadDeadline(t1 time.Time) error { return t.Conn.SetReadDeadline(t1) }
|
||||||
|
|
||||||
|
// SetWriteDeadline implements the net.Conn SetWriteDeadline method.
|
||||||
|
func (t *Transfer) SetWriteDeadline(t1 time.Time) error { return t.Conn.SetWriteDeadline(t1) }
|
||||||
|
*/
|
||||||
|
|
Loading…
Reference in New Issue