diff --git a/include/class_objects.inc b/include/class_objects.inc index 4ca155d8f45a2fc7b8a0ba1558fe1112cafcd077..89cb37d5e0384aa5863c1891cc4a21148f0d9b62 100644 --- a/include/class_objects.inc +++ b/include/class_objects.inc @@ -65,18 +65,22 @@ class objects $attrsAcls = []; if ($attrs === NULL) { - $attrs = []; - foreach ($types as $type) { - $infos = static::infos($type); - if ($infos['mainAttr']) { - $attrs[] = $infos['mainAttr']; + if ($templateSearch) { + $attrs = 'cn'; + } else { + $attrs = []; + foreach ($types as $type) { + $infos = static::infos($type); + if ($infos['mainAttr']) { + $attrs[] = $infos['mainAttr']; + } + } + $attrs = array_unique($attrs); + if (count($attrs) == 1) { + $attrs = $attrs[0]; + } elseif (count($attrs) == 0) { + $attrs = ['dn' => 'raw']; } - } - $attrs = array_unique($attrs); - if (count($attrs) == 1) { - $attrs = $attrs[0]; - } elseif (count($attrs) == 0) { - $attrs = ['dn' => 'raw']; } } elseif ($checkAcl) { if (is_array($attrs)) { @@ -100,13 +104,13 @@ class objects if (is_array($attrs)) { $search_attrs = array_keys($attrs); - if ($templateSearch) { - $search_attrs[] = 'fdTemplateField'; - $search_attrs[] = 'cn'; - } } else { $search_attrs = [$attrs]; } + if ($templateSearch) { + $search_attrs[] = 'fdTemplateField'; + $search_attrs[] = 'cn'; + } try { $ldap = static::search($types, $search_attrs, $ou, $filter, $checkAcl, $scope, $templateSearch, $partialFilterAcls, $sizeLimit); @@ -171,6 +175,27 @@ class objects if (count($result[$key]) === 0) { unset($result[$key]); } + } elseif ($templateSearch) { + if ($attrs == 'cn') { + if ( + isset($fetched_attrs['cn']) && + (!$checkAcl || (strpos($ui->get_permissions($key, $tplAcl, 'template_cn'), 'r') !== FALSE)) + ) { + $result[$key] = $fetched_attrs['cn'][0]; + } + } else { + if (isset($attrsAcls[$attrs]) && + (strpos($ui->get_permissions($key, $attrsAcls[$attrs][0], $attrsAcls[$attrs][1]), 'r') === FALSE)) { + continue; + } + foreach ($fetched_attrs['fdTemplateField'] as $templateField) { + list($attr, $value) = explode(':', $templateField, 2); + if ($attrs == $attr) { + $result[$key] = $value; + break; + } + } + } } elseif (isset($fetched_attrs[$attrs])) { if (isset($attrsAcls[$attrs]) && (strpos($ui->get_permissions($key, $attrsAcls[$attrs][0], $attrsAcls[$attrs][1]), 'r') === FALSE)) {