mirror of
https://github.com/Li4n0/revsuit.git
synced 2026-09-26 16:41:53 +08:00
feat: complete basic functions
Support http,dns and mysql connection. Support custom http, dns response. Support dns rebinding. Support mysql load local files and jdbc deserialize exploit.
This commit is contained in:
@@ -0,0 +1,207 @@
|
||||
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)
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user