From 34a6b30b8fe69c90cab09eb85890ffdfe8fc80fd Mon Sep 17 00:00:00 2001 From: Chris F Ravenscroft Date: Mon, 3 Jul 2023 15:33:01 -0700 Subject: [PATCH] Feature: introduce legacy behavior, based on past versions (#318) --- v2/pkg/config/config.go | 1 + v2/pkg/handler/config.go | 10 ++++++++-- v2/pkg/plugins/basesqlhandler.go | 10 ++++++++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/v2/pkg/config/config.go b/v2/pkg/config/config.go index 84572cf..88bc5ae 100644 --- a/v2/pkg/config/config.go +++ b/v2/pkg/config/config.go @@ -60,6 +60,7 @@ type Behaviors struct { BlockFailedBindsFor time.Duration PruneSourceTableEvery time.Duration PruneSourcesOlderThan time.Duration + LegacyVersion int } type Capability struct { Action string diff --git a/v2/pkg/handler/config.go b/v2/pkg/handler/config.go index 4952c8f..489c53a 100644 --- a/v2/pkg/handler/config.go +++ b/v2/pkg/handler/config.go @@ -235,15 +235,21 @@ func (h configHandler) Close(boundDn string, conn net.Conn) error { } func (h configHandler) getGroupMemberDNs(gid int) []string { + var insertOuUsers string + if h.cfg.Behaviors.LegacyVersion > 0 && h.cfg.Behaviors.LegacyVersion <= 20100 { + insertOuUsers = "" + } else { + insertOuUsers = ",ou=users" + } members := make(map[string]bool) for _, u := range h.cfg.Users { if u.PrimaryGroup == gid { - dn := fmt.Sprintf("%s=%s,%s=%s,ou=users,%s", h.backend.NameFormat, u.Name, h.backend.GroupFormat, h.getGroupName(u.PrimaryGroup), h.backend.BaseDN) + dn := fmt.Sprintf("%s=%s,%s=%s%s,%s", h.backend.NameFormat, u.Name, h.backend.GroupFormat, h.getGroupName(u.PrimaryGroup), insertOuUsers, h.backend.BaseDN) members[dn] = true } else { for _, othergid := range u.OtherGroups { if othergid == gid { - dn := fmt.Sprintf("%s=%s,%s=%s,ou=users,%s", h.backend.NameFormat, u.Name, h.backend.GroupFormat, h.getGroupName(u.PrimaryGroup), h.backend.BaseDN) + dn := fmt.Sprintf("%s=%s,%s=%s%s,%s", h.backend.NameFormat, u.Name, h.backend.GroupFormat, h.getGroupName(u.PrimaryGroup), insertOuUsers, h.backend.BaseDN) members[dn] = true } } diff --git a/v2/pkg/plugins/basesqlhandler.go b/v2/pkg/plugins/basesqlhandler.go index 309185f..b050a67 100644 --- a/v2/pkg/plugins/basesqlhandler.go +++ b/v2/pkg/plugins/basesqlhandler.go @@ -350,6 +350,12 @@ func (h databaseHandler) memoizeGroups() ([]config.Group, error) { } func (h databaseHandler) getGroupMemberDNs(gid int) []string { + var insertOuUsers string + if h.cfg.Behaviors.LegacyVersion > 0 && h.cfg.Behaviors.LegacyVersion <= 20100 { + insertOuUsers = "" + } else { + insertOuUsers = ",ou=users" + } members := make(map[string]bool) rows, err := h.database.cnx.Query(` @@ -369,13 +375,13 @@ func (h databaseHandler) getGroupMemberDNs(gid int) []string { return []string{} } if u.PrimaryGroup == gid { - dn := fmt.Sprintf("%s=%s,%s=%s,ou=users,%s", h.backend.NameFormat, u.Name, h.backend.GroupFormat, h.getGroupName(u.PrimaryGroup), h.backend.BaseDN) + dn := fmt.Sprintf("%s=%s,%s=%s%s,%s", h.backend.NameFormat, u.Name, h.backend.GroupFormat, h.getGroupName(u.PrimaryGroup), insertOuUsers, h.backend.BaseDN) members[dn] = true } else { u.OtherGroups = h.commaListToIntTable(otherGroups) for _, othergid := range u.OtherGroups { if othergid == gid { - dn := fmt.Sprintf("%s=%s,%s=%s,ou=users,%s", h.backend.NameFormat, u.Name, h.backend.GroupFormat, h.getGroupName(u.PrimaryGroup), h.backend.BaseDN) + dn := fmt.Sprintf("%s=%s,%s=%s%s,%s", h.backend.NameFormat, u.Name, h.backend.GroupFormat, h.getGroupName(u.PrimaryGroup), insertOuUsers, h.backend.BaseDN) members[dn] = true } }