32 static function plInfo ()
35 'plShortName' => _(
'ACL'),
36 'plDescription' => _(
'Manage access control lists'),
39 'description' => _(
'ACL').
' & '._(
'ACL roles'),
40 'objectClass' => [
'gosaAcl',
'gosaRole']
45 'plProvidedAcls' => []
56 if (!is_array($role)) {
59 unset($role[
'count']);
61 foreach ($role as $aclTemplate) {
62 $list = explode(
':', $aclTemplate, 2);
63 $result[$list[0]] = static::extractACL($list[1]);
76 $list = explode(
':', $acl);
77 if (count($list) == 6) {
78 list($index, $type, $role, $members, $userfilter, $targetfilter) = $list;
79 $userfilter = base64_decode($userfilter);
80 $targetfilter = base64_decode($targetfilter);
81 } elseif (count($list) == 5) {
82 list($index, $type, $role, $members, $userfilter) = $list;
83 $userfilter = base64_decode($userfilter);
86 list($index, $type, $role, $members) = $list;
94 'userfilter' => $userfilter,
95 'targetfilter' => $targetfilter,
97 'acl' => base64_decode($role),
102 if (!in_array($type, [
'subtree',
'base'])) {
105 _(
"Unkown ACL type \"%s\"!\nYou might need to run \"fusiondirectory-configuration-manager --migrate-acls\" to migrate your acls to the new format."),
128 $ma = explode(
',', $ms);
131 $ldap = $config->get_ldap_link();
132 foreach ($ma as $memberdn) {
134 $dn = base64_decode($memberdn);
137 trigger_error(
'Empty dn found in members of ACL');
141 $ldap->cat($dn, [
'cn',
'objectClass',
'description',
'uid']);
144 if ($ldap->count()) {
145 $attrs = $ldap->fetch();
146 if (
in_array_ics(
'inetOrgPerson', $attrs[
'objectClass'])) {
147 $a[
'U:'.$dn] = $attrs[
'cn'][0].
' ['.$attrs[
'uid'][0].
']';
148 } elseif (
in_array_ics(
'organizationalRole', $attrs[
'objectClass'])) {
149 $a[
'R:'.$dn] = $attrs[
'cn'][0];
150 if (isset($attrs[
'description'][0])) {
151 $a[
'R:'.$dn] .=
' ['.$attrs[
'description'][0].
']';
154 $a[
'G:'.$dn] = $attrs[
'cn'][0];
155 if (isset($attrs[
'description'][0])) {
156 $a[
'G:'.$dn] .=
' ['.$attrs[
'description'][0].
']';
161 $a[
'U:'.$dn] = sprintf(_(
"Unknown entry '%s'!"), $dn);
164 $a[
'G:*'] = sprintf(_(
"All users"));
179 $as = preg_replace(
'/^[^:]+:[^:]+:[^:]*:([^:]*).*$/',
'\1', $acl);
180 $aa = explode(
',', $as);
184 foreach ($aa as $sacl) {
187 $ao = explode(
'#', $sacl);
189 foreach ($ao as $idx => $ssacl) {
192 $object = preg_replace(
'/^([^;]+);.*$/',
'\1', $ssacl);
193 $gacl = preg_replace(
'/^[^;]+;(.*)$/',
'\1', $ssacl);
205 list($field, $facl) = explode(
';', $ssacl);
htmlescape(string $str)
Escape string for HTML output.
in_array_ics($value, array $items)
Check if a value exists in an array (case-insensitive)
This class contains all the function needed to manage acl.
static explodeRole($role)
Explode a role.
Parent class for all errors in FusionDirectory.
static explodeACL($acl)
Explode an acl.
static extractACL(string $acl)
Extract an acl.
static extractMembers(string $ms)
Extract members of an acl.