all: upd chlog
This commit is contained in:
parent
0736b97bdd
commit
507cb9bc7b
|
@ -25,9 +25,11 @@ NOTE: Add new changes BELOW THIS COMMENT.
|
|||
|
||||
### Added
|
||||
|
||||
- Ability to edit static leases on *DHCP settings* page ([#1700]).
|
||||
- Ability to specify for how long clients should cache a filtered response,
|
||||
using the *Blocked response TTL* field on the *DNS settings* page ([#4569]).
|
||||
|
||||
[#1700]: https://github.com/AdguardTeam/AdGuardHome/issues/1700
|
||||
[#4569]: https://github.com/AdguardTeam/AdGuardHome/issues/4569
|
||||
|
||||
### Fixed
|
||||
|
|
|
@ -242,3 +242,78 @@ func TestServer_HandleUpdateStaticLease(t *testing.T) {
|
|||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestServer_HandleUpdateStaticLease_validation(t *testing.T) {
|
||||
const (
|
||||
leaseV4Name = "static-client-v4"
|
||||
leaseV4MAC = "44:44:44:44:44:44"
|
||||
|
||||
anotherV4Name = "another-client-v4"
|
||||
anotherV4MAC = "55:55:55:55:55:55"
|
||||
)
|
||||
|
||||
leaseV4IP := netip.MustParseAddr("192.168.10.10")
|
||||
anotherV4IP := netip.MustParseAddr("192.168.10.20")
|
||||
|
||||
leases := []*leaseStatic{{
|
||||
HWAddr: leaseV4MAC,
|
||||
IP: leaseV4IP,
|
||||
Hostname: leaseV4Name,
|
||||
}, {
|
||||
HWAddr: anotherV4MAC,
|
||||
IP: anotherV4IP,
|
||||
Hostname: anotherV4Name,
|
||||
}}
|
||||
|
||||
s, err := Create(&ServerConfig{
|
||||
Enabled: true,
|
||||
Conf4: *defaultV4ServerConf(),
|
||||
Conf6: V6ServerConf{},
|
||||
DataDir: t.TempDir(),
|
||||
ConfigModified: func() {},
|
||||
})
|
||||
require.NoError(t, err)
|
||||
|
||||
for _, l := range leases {
|
||||
w := handleLease(t, l, s.handleDHCPAddStaticLease)
|
||||
assert.Equal(t, http.StatusOK, w.Code)
|
||||
}
|
||||
|
||||
testCases := []struct {
|
||||
lease *leaseStatic
|
||||
name string
|
||||
want string
|
||||
}{{
|
||||
name: "v4_unknown_mac",
|
||||
lease: &leaseStatic{
|
||||
HWAddr: "aa:aa:aa:aa:aa:aa",
|
||||
IP: leaseV4IP,
|
||||
Hostname: leaseV4Name,
|
||||
},
|
||||
want: "dhcpv4: updating static lease: can't find lease aa:aa:aa:aa:aa:aa\n",
|
||||
}, {
|
||||
name: "update_v4_same_ip",
|
||||
lease: &leaseStatic{
|
||||
HWAddr: leaseV4MAC,
|
||||
IP: anotherV4IP,
|
||||
Hostname: leaseV4Name,
|
||||
},
|
||||
want: "dhcpv4: updating static lease: ip address is not unique\n",
|
||||
}, {
|
||||
name: "update_v4_same_name",
|
||||
lease: &leaseStatic{
|
||||
HWAddr: leaseV4MAC,
|
||||
IP: leaseV4IP,
|
||||
Hostname: anotherV4Name,
|
||||
},
|
||||
want: "dhcpv4: updating static lease: hostname is not unique\n",
|
||||
}}
|
||||
|
||||
for _, tc := range testCases {
|
||||
t.Run(tc.name, func(t *testing.T) {
|
||||
w := handleLease(t, tc.lease, s.handleDHCPUpdateStaticLease)
|
||||
assert.Equal(t, http.StatusBadRequest, w.Code)
|
||||
assert.Equal(t, tc.want, w.Body.String())
|
||||
})
|
||||
}
|
||||
}
|
||||
|
|
|
@ -309,9 +309,15 @@ func (s *v4Server) rmDynamicLease(lease *Lease) (err error) {
|
|||
return nil
|
||||
}
|
||||
|
||||
// ErrDupHostname is returned by addLease when the added lease has a not empty
|
||||
// non-unique hostname.
|
||||
const ErrDupHostname = errors.Error("hostname is not unique")
|
||||
const (
|
||||
// ErrDupHostname is returned by addLease, validateStaticLease when the
|
||||
// modified lease has a not empty non-unique hostname.
|
||||
ErrDupHostname = errors.Error("hostname is not unique")
|
||||
|
||||
// ErrDupIP is returned by addLease, validateStaticLease when the modified
|
||||
// lease has a non-unique IP address.
|
||||
ErrDupIP = errors.Error("ip address is not unique")
|
||||
)
|
||||
|
||||
// addLease adds a dynamic or static lease.
|
||||
func (s *v4Server) addLease(l *Lease) (err error) {
|
||||
|
@ -485,6 +491,11 @@ func (s *v4Server) validateStaticLease(l *Lease) (err error) {
|
|||
return ErrDupHostname
|
||||
}
|
||||
|
||||
dup, ok = s.ipIndex[l.IP]
|
||||
if ok && !bytes.Equal(dup.HWAddr, l.HWAddr) {
|
||||
return ErrDupIP
|
||||
}
|
||||
|
||||
l.Hostname = hostname
|
||||
|
||||
if gwIP := s.conf.GatewayIP; gwIP == l.IP {
|
||||
|
|
Loading…
Reference in New Issue