Pull request 2210: AG-32341-client-duplicate-uids
Squashed commit of the following: commit 6f83ec8a4f0dfb2360912116a48d35d1f7df7f66 Merge: 2fea9c06a2383ab57cAuthor: Stanislav Chzhen <s.chzhen@adguard.com> Date: Fri Apr 26 19:23:15 2024 +0300 Merge branch 'master' into AG-32341-client-duplicate-uids commit 2fea9c06af9a0b349e612620292bc629f514fead Merge: 672a30ce4b9d5e5ba0Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Fri Apr 26 14:00:49 2024 +0300 Merge branch 'master' into AG-32341-client-duplicate-uids commit 672a30ce402f51819d741ea92ec5283eea4e6813 Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Fri Apr 26 13:59:59 2024 +0300 all: upd chlog commit 7c2b26e3ece123d67d0377f816003600408b5e94 Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Wed Apr 24 21:08:47 2024 +0300 all: imp chlog commit fcca9afe0cdb3d23e6fc653dd334161cbc6d832a Author: Stanislav Chzhen <s.chzhen@adguard.com> Date: Wed Apr 24 18:56:34 2024 +0300 all: fix client duplicate uids
This commit is contained in:
@@ -6,6 +6,7 @@ import (
|
||||
"net/netip"
|
||||
|
||||
"github.com/AdguardTeam/AdGuardHome/internal/aghalg"
|
||||
"github.com/AdguardTeam/golibs/errors"
|
||||
)
|
||||
|
||||
// macKey contains MAC as byte array of 6, 8, or 20 bytes.
|
||||
@@ -82,15 +83,25 @@ func (ci *Index) Add(c *Persistent) {
|
||||
ci.uidToClient[c.UID] = c
|
||||
}
|
||||
|
||||
// ErrDuplicateUID is an error returned by [Index.Clashes] when adding a
|
||||
// persistent client with a UID that already exists in an index.
|
||||
const ErrDuplicateUID errors.Error = "duplicate uid"
|
||||
|
||||
// Clashes returns an error if the index contains a different persistent client
|
||||
// with at least a single identifier contained by c. c must be non-nil.
|
||||
func (ci *Index) Clashes(c *Persistent) (err error) {
|
||||
_, ok := ci.uidToClient[c.UID]
|
||||
if ok {
|
||||
return ErrDuplicateUID
|
||||
}
|
||||
|
||||
for _, id := range c.ClientIDs {
|
||||
existing, ok := ci.clientIDToUID[id]
|
||||
var existing UID
|
||||
existing, ok = ci.clientIDToUID[id]
|
||||
if ok && existing != c.UID {
|
||||
p := ci.uidToClient[existing]
|
||||
|
||||
return fmt.Errorf("another client %q uses the same ID %q", p.Name, id)
|
||||
return fmt.Errorf("another client %q uses the same ClientID %q", p.Name, id)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user