mirror of
https://github.com/Li4n0/revsuit.git
synced 2026-09-21 22:30:46 +08:00
Support http,dns and mysql connection. Support custom http, dns response. Support dns rebinding. Support mysql load local files and jdbc deserialize exploit.
208 lines
4.2 KiB
Go
208 lines
4.2 KiB
Go
package newdns
|
|
|
|
import (
|
|
"io"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
func TestZoneValidate(t *testing.T) {
|
|
table := []struct {
|
|
zne Zone
|
|
err string
|
|
}{
|
|
{
|
|
zne: Zone{
|
|
Name: "foo",
|
|
},
|
|
err: "name not fully qualified: foo",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "foo",
|
|
},
|
|
err: "master server not full qualified: foo",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
},
|
|
err: "missing name servers",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
AllNameServers: []string{
|
|
"foo",
|
|
},
|
|
},
|
|
err: "name server not fully qualified: foo",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n2.example.com.",
|
|
AllNameServers: []string{
|
|
"n1.example.com.",
|
|
},
|
|
},
|
|
err: "master name server not listed as name server: n2.example.com.",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
AllNameServers: []string{
|
|
"n1.example.com.",
|
|
},
|
|
},
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
AllNameServers: []string{
|
|
"n1.example.com.",
|
|
},
|
|
AdminEmail: "[email protected]",
|
|
},
|
|
err: "admin email cannot be converted to a domain name: [email protected]",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
AllNameServers: []string{
|
|
"n1.example.com.",
|
|
},
|
|
Refresh: 1,
|
|
Retry: 2,
|
|
},
|
|
err: "retry must be less than refresh: 2",
|
|
},
|
|
{
|
|
zne: Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "n1.example.com.",
|
|
AllNameServers: []string{
|
|
"n1.example.com.",
|
|
},
|
|
Expire: 1,
|
|
Retry: 2,
|
|
},
|
|
err: "expire must be bigger than the sum of refresh and retry: 1",
|
|
},
|
|
}
|
|
|
|
for i, item := range table {
|
|
err := item.zne.Validate()
|
|
if err != nil {
|
|
assert.EqualValues(t, item.err, err.Error(), i)
|
|
} else {
|
|
assert.Equal(t, item.err, "", item)
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestZoneLookup(t *testing.T) {
|
|
zone := Zone{
|
|
Name: "example.com.",
|
|
MasterNameServer: "ns1.example.com.",
|
|
AllNameServers: []string{
|
|
"ns1.example.com.",
|
|
"ns2.example.com.",
|
|
},
|
|
Handler: func(name,remoteAddr string) ([]Set, error) {
|
|
if name == "error" {
|
|
return nil, io.EOF
|
|
}
|
|
|
|
if name == "invalid1" {
|
|
return []Set{
|
|
{Name: "foo"},
|
|
}, nil
|
|
}
|
|
|
|
if name == "invalid2" {
|
|
return []Set{
|
|
{Name: "foo.", Type: A, Records: []Record{{Address: "1.2.3.4"}}},
|
|
}, nil
|
|
}
|
|
|
|
if name == "multiple" {
|
|
return []Set{
|
|
{Name: "foo.example.com.", Type: A, Records: []Record{{Address: "1.2.3.4"}}},
|
|
{Name: "foo.example.com.", Type: A, Records: []Record{{Address: "1.2.3.4"}}},
|
|
}, nil
|
|
}
|
|
|
|
if name == "" {
|
|
return []Set{
|
|
{Name: "example.com.", Type: CNAME, Records: []Record{{Address: "cool.com."}}},
|
|
}, nil
|
|
}
|
|
|
|
if name == "cname" {
|
|
return []Set{
|
|
{Name: "cname.example.com.", Type: A, Records: []Record{{Address: "1.2.3.4"}}},
|
|
{Name: "cname.example.com.", Type: CNAME, Records: []Record{{Address: "cool.com."}}},
|
|
}, nil
|
|
}
|
|
|
|
return nil, nil
|
|
},
|
|
}
|
|
|
|
err := zone.Validate()
|
|
assert.NoError(t, err)
|
|
|
|
table := []struct {
|
|
name string
|
|
err string
|
|
}{
|
|
{
|
|
name: "foo",
|
|
err: "invalid name: foo",
|
|
},
|
|
{
|
|
name: "foo.",
|
|
err: "name does not belong to zone: foo.",
|
|
},
|
|
{
|
|
name: "error.example.com.",
|
|
err: "zone handler error: EOF",
|
|
},
|
|
{
|
|
name: "invalid1.example.com.",
|
|
err: "invalid set: invalid name: foo",
|
|
},
|
|
{
|
|
name: "invalid2.example.com.",
|
|
err: "set does not belong to zone: foo.",
|
|
},
|
|
{
|
|
name: "multiple.example.com.",
|
|
err: "multiple sets for same type",
|
|
},
|
|
{
|
|
name: "example.com.",
|
|
err: "invalid CNAME set at apex: example.com.",
|
|
},
|
|
{
|
|
name: "cname.example.com.",
|
|
err: "other sets with CNAME set: cname.example.com.",
|
|
},
|
|
}
|
|
|
|
for i, item := range table {
|
|
res, exists, err := zone.Lookup(item.name, "127.0.0.1", A)
|
|
assert.Equal(t, item.err, err.Error(), i)
|
|
assert.False(t, exists, i)
|
|
assert.Nil(t, res, i)
|
|
}
|
|
}
|