diff --git a/include/class_ldap.inc b/include/class_ldap.inc index d7bd98c2d2c7194418d15057c4836e3d1cd7152c..b7c7485facdba386c890c535603974214dcad472 100644 --- a/include/class_ldap.inc +++ b/include/class_ldap.inc @@ -930,20 +930,24 @@ class LDAP /* Automatic or traditional? */ if (count($classes)) { - /* Get name of first matching objectClass */ - $ocname = ""; - foreach ($classes as $class) { - if (isset($class['MUST']) && in_array($type, $class['MUST'])) { - - /* Look for first classes that is structural... */ - if (isset($class['STRUCTURAL'])) { - $ocname = $class['NAME']; - break; - } - - /* Look for classes that are auxiliary... */ - if (isset($class['AUXILIARY'])) { - $ocname = $class['NAME']; + if ($type == 'l') { + /* Locality has l as MAY so autodetection fails */ + $ocname = 'locality'; + } else { + /* Get name of first matching objectClass */ + $ocname = ''; + foreach ($classes as $class) { + if (isset($class['MUST']) && in_array($type, $class['MUST'])) { + /* Look for first classes that is structural... */ + if (isset($class['STRUCTURAL'])) { + $ocname = $class['NAME']; + break; + } + + /* Look for classes that are auxiliary... */ + if (isset($class['AUXILIARY'])) { + $ocname = $class['NAME']; + } } } } @@ -966,14 +970,18 @@ class LDAP $na[$type] = $param; // Fill in MUST values - but do not overwrite existing ones. - if (is_array($classes[$ocname]['MUST'])) { - foreach ($classes[$ocname]['MUST'] as $attr) { - if (isset($na[$attr]) && !empty($na[$attr])) { - continue; + $oc = $ocname; + do { + if (isset($classes[$oc]['MUST']) && is_array($classes[$oc]['MUST'])) { + foreach ($classes[$oc]['MUST'] as $attr) { + if (isset($na[$attr]) && !empty($na[$attr])) { + continue; + } + $na[$attr] = 'filled'; } - $na[$attr] = 'filled'; } - } + $oc = ($classes[$oc]['SUP'] ?? NULL); + } while ($oc); } else { /* Use alternative add... */ switch ($type) {