Properly generate new DN.

This fixes issue #5581 by properly parsing the old DN and replacing the
first part with the new DN.
This commit is contained in:
Daniël Franke
2023-02-16 12:41:29 +01:00
committed by Ralf Haferkamp
parent 92923f6801
commit 92f4d60a06
2 changed files with 41 additions and 11 deletions
+27 -1
View File
@@ -493,7 +493,17 @@ func (i *LDAP) changeUserName(ctx context.Context, dn, originalUserName, newUser
return nil, err
}
u, err := i.getUserByDN(fmt.Sprintf("%s,%s", newDN, i.userBaseDN))
parsed, err := ldap.ParseDN(dn)
if err != nil {
return nil, err
}
newFullDN, err := replaceDN(parsed, newDN)
if err != nil {
return nil, err
}
u, err := i.getUserByDN(newFullDN)
if err != nil {
return nil, err
}
@@ -730,3 +740,19 @@ func (i *LDAP) expandLDAPAttributeEntries(ctx context.Context, e *ldap.Entry, at
return result, nil
}
func replaceDN(fullDN *ldap.DN, newDN string) (string, error) {
if len(fullDN.RDNs) == 0 {
return "", fmt.Errorf("Can't operate on an empty dn")
}
if len(fullDN.RDNs) == 1 {
return newDN, nil
}
for _, part := range fullDN.RDNs[1:] {
newDN += "," + part.String()
}
return newDN, nil
}