mirror of
https://github.com/documize/community.git
synced 2025-07-20 21:59:42 +02:00
parent
a64a219ce8
commit
8fa8a3657c
1 changed files with 41 additions and 2 deletions
|
@ -172,9 +172,9 @@ func executeGroupFilter(c lm.LDAPConfig) (u []lm.LDAPUser, err error) {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get CN element from DN.
|
||||||
for _, entry := range rawMembers {
|
for _, entry := range rawMembers {
|
||||||
// get CN element from DN
|
parts := splitDN(entry)
|
||||||
parts := strings.Split(entry, ",")
|
|
||||||
if len(parts) == 0 {
|
if len(parts) == 0 {
|
||||||
continue
|
continue
|
||||||
}
|
}
|
||||||
|
@ -204,6 +204,45 @@ func executeGroupFilter(c lm.LDAPConfig) (u []lm.LDAPUser, err error) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// splitDN handles splitting of DN string whilst respecting
|
||||||
|
// escaped comma characters.
|
||||||
|
//
|
||||||
|
// DN values can contain escaped commas like in two ways:
|
||||||
|
//
|
||||||
|
// \,
|
||||||
|
// \\5c,
|
||||||
|
//
|
||||||
|
// Relevant notes:
|
||||||
|
|
||||||
|
// https://docs.oracle.com/cd/E19424-01/820-4811/gdxpo/index.html#6ng8i269q
|
||||||
|
// https://devblogs.microsoft.com/scripting/how-can-i-work-with-a-cn-that-has-a-comma-in-it/
|
||||||
|
//
|
||||||
|
// Example:
|
||||||
|
|
||||||
|
// CN=Surname\, Name,OU=Something,OU=AD-Example,OU=Examaple,DC=example,DC=example,DC=com
|
||||||
|
//
|
||||||
|
// When we split on comma, here is our logic:
|
||||||
|
//
|
||||||
|
// 1. We replace any escaped comma values with a special character sequence, in this case !?!
|
||||||
|
// 2. We string.split on comma as per usual.
|
||||||
|
// 3. We put back the original escaped comma values.
|
||||||
|
func splitDN(dn string) []string {
|
||||||
|
var r string
|
||||||
|
r = strings.ReplaceAll(dn, "\\5c,", "!!1!!")
|
||||||
|
r = strings.ReplaceAll(dn, "\\,", "!!2!!")
|
||||||
|
|
||||||
|
sp := strings.Split(r, ",")
|
||||||
|
|
||||||
|
for i := range sp {
|
||||||
|
val := sp[i]
|
||||||
|
r2 := strings.ReplaceAll(val, "!!1!!", "\\5c,")
|
||||||
|
r2 = strings.ReplaceAll(val, "!!2!!", "\\,")
|
||||||
|
sp[i] = r2
|
||||||
|
}
|
||||||
|
|
||||||
|
return sp
|
||||||
|
}
|
||||||
|
|
||||||
// extractUser build user record from LDAP result attributes.
|
// extractUser build user record from LDAP result attributes.
|
||||||
func extractUser(c lm.LDAPConfig, e *ld.Entry) (u lm.LDAPUser) {
|
func extractUser(c lm.LDAPConfig, e *ld.Entry) (u lm.LDAPUser) {
|
||||||
u.Firstname = e.GetAttributeValue(c.AttributeUserFirstname)
|
u.Firstname = e.GetAttributeValue(c.AttributeUserFirstname)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue