Probleme mit der Gruppenabfrage bei OpenLDAP-Anbindung
Wenn die LDAP-Gruppen nicht über "memberof" gebildet werden, sondern, wie in OpenLDAP üblich über "member", dann funktioniert die aktuelle Methode nicht. Außerdem wird die DN der Gruppe als Wert des Attributs erwartet, jedoch kann es möglich sein, dass es ein passendes Attribut mit dem kurzen Gruppennamen, z.B. Attribut "cn" mit dem Namen der Gruppe als Wert, zur Verfügung steht.
Alternative Konfiguration zur Abfrage der Gruppenzugehörigkeiten von den Gruppen aus:
...
'usergroups' => ['ldap_base' => 'OU=groups,DC=test,DC=de', 'ldap_filter' => '(&(objectClass=groupOfNames)(member=uid=$,ou=people,dc=test,dc=de))', 'ldap_attributes' => ['cn']],
...
Patch
diff -Naur secdoc.old/assets/ajax/Utils.class.php secdoc/assets/ajax/Utils.class.php
--- secdoc.old/assets/ajax/Utils.class.php 2022-05-05 15:33:10.000000000 +0200
+++ secdoc/assets/ajax/Utils.class.php 2022-05-25 17:33:24.784861828 +0200
@@ -303,10 +303,15 @@
if($ldap_use && ($dataSources['usergroups'] === 'ldap' || $dataSources['usergroups'] === 'ldap+db')) {
# LDAP Abfrage durchführen
$result = self::getfromLDAP($ldap_configs['usergroups']['ldap_base'], str_replace('$', ldap_escape($userId), $ldap_configs['usergroups']['ldap_filter']), $ldap_configs['usergroups']['ldap_attributes']);
+ $group_attr = $ldap_configs['usergroups']['ldap_attributes'][0];
- if(is_array($result) && array_key_exists('count', $result) && $result['count'] > 0) {
- foreach($result[0]['memberof'] as $group) {
+ if(is_array($result) && array_key_exists('count', $result)) {
+ for($i=0; $i<$result['count']; $i++) {
+ $group = $result[$i][$group_attr];
+ // DN based attribute
if(is_string($group)) array_push($foundGroups, explode('=', explode(',', $group)[0])[1]);
+ // short attribute
+ if(is_array($group)) array_push($foundGroups, $group[0]);
}
}
}
von Timo Scheuer