X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_acl.inc;h=f5b26e32f21effdef7c567bee067226cc8355290;hb=382443db9d291ebe40f97a94534a0913f7c0a6ef;hp=999a20b9553b2a559472312b2281f442e512fb64;hpb=05a8ba147d2012224298d81473e4ae523d3fa6e0;p=gosa.git diff --git a/include/class_acl.inc b/include/class_acl.inc index 999a20b95..f5b26e32f 100644 --- a/include/class_acl.inc +++ b/include/class_acl.inc @@ -31,7 +31,7 @@ class acl extends plugin var $savedAclContents= array(); var $myAclObjects = array(); - function acl ($config, $parent, $dn= NULL) + function acl (&$config, $parent, $dn= NULL) { /* Include config object */ plugin::plugin($config, $dn); @@ -41,13 +41,13 @@ class acl extends plugin if (isset($this->attrs['gosaAclEntry'])){ for ($i= 0; $i<$this->attrs['gosaAclEntry']['count']; $i++){ $acl= $this->attrs['gosaAclEntry'][$i]; - $this->gosaAclEntry= array_merge($this->gosaAclEntry, $this->explodeACL($acl)); + $this->gosaAclEntry= array_merge($this->gosaAclEntry, acl::explodeACL($acl)); } } ksort($this->gosaAclEntry); /* Save parent - we've to know more about it than other plugins... */ - $this->parent= $parent; + $this->parent= &$parent; /* Container? */ if (preg_match('/^(o|ou|c|l|dc)=/i', $dn)){ @@ -103,7 +103,7 @@ class acl extends plugin $this->roles[$role_id]['acls'] =array(); for ($i= 0; $i < $attrs['gosaAclTemplate']['count']; $i++){ $acl= $attrs['gosaAclTemplate'][$i]; - $this->roles[$role_id]['acls'] = array_merge($this->roles[$role_id]['acls'],$this->explodeACL($acl)); + $this->roles[$role_id]['acls'] = array_merge($this->roles[$role_id]['acls'],acl::explodeACL($acl)); } $this->roles[$role_id]['description'] = $dsc; $this->roles[$role_id]['cn'] = $attrs['cn'][0]; @@ -113,7 +113,7 @@ class acl extends plugin $tmp= get_global('plist'); $plist= $tmp->info; $cats = array(); - if (isset($this->parent) && $this->parent != NULL){ + if (isset($this->parent) && $this->parent !== NULL){ $oc= array(); foreach ($this->parent->by_object as $key => $obj){ $oc= array_merge($oc, $obj->objectclasses); @@ -397,7 +397,7 @@ class acl extends plugin if ($this->dialogState == 'head'){ /* Draw list */ - $aclList= new DivSelectBox("aclList"); + $aclList= new divSelectBox("aclList"); $aclList->SetHeight(450); /* Fill in entries */ @@ -418,7 +418,7 @@ class acl extends plugin if ($this->dialogState == 'create'){ /* Draw list */ - $aclList= new DivSelectBox("aclList"); + $aclList= new divSelectBox("aclList"); $aclList->SetHeight(150); /* Add settings for all categories to the (permanent) list */ @@ -554,7 +554,7 @@ class acl extends plugin function buildRoleSelector($list) { - $D_List =new DivSelectBox("Acl_Roles"); + $D_List =new divSelectBox("Acl_Roles"); $selected = $this->aclContents; if(!is_string($this->aclContents) || !isset($list[$this->aclContents])){ @@ -774,7 +774,7 @@ class acl extends plugin } - function explodeACL($acl) + static function explodeACL($acl) { list($index, $type)= split(':', $acl); $a= array( $index => array("type" => $type, @@ -805,7 +805,7 @@ class acl extends plugin } - function extractMembers($acl,$role = FALSE) + static function extractMembers($acl,$role = FALSE) { global $config; $a= array(); @@ -849,7 +849,7 @@ class acl extends plugin } - function extractACL($acl) + static function extractACL($acl) { /* Rip acl off the string, seperate by ',' and place it in an array */ $as= preg_replace('/^[^:]+:[^:]+:[^:]*:(.*)$/', '\1', $acl); @@ -961,6 +961,16 @@ class acl extends plugin return FALSE; } + + function PrepareForCopyPaste($source) + { + plugin::PrepareForCopyPaste($source); + + $dn = $source['dn']; + $acl_c = new acl($this->config, $this->parent,$dn); + $this->gosaAclEntry = $acl_c->gosaAclEntry; + } + function save() { @@ -1069,6 +1079,87 @@ class acl extends plugin $this->handle_post_events("remove",array("uid" => $this->uid)); } + + /* Return plugin informations for acl handling */ + static function plInfo() + { + return (array( + "plShortName" => _("ACL"), + "plDescription" => _("ACL")._("Access control list").")", + "plSelfModify" => FALSE, + "plDepends" => array(), + "plPriority" => 0, + "plSection" => array("administration"), + "plCategory" => array("acl" => array("description" => _("ACL")." & "._("ACL roles"), + "objectClass" => array("gosaAcl","gosaRole"))), + "plProvidedAcls"=> array( + "cn" => _("Role name"), + "description" => _("Role description")) + + )); + } + + + /* Remove acls defined for $src */ + function remove_acl() + { + $this->remove_acl_for_dn($this->dn); + } + + + /* Remove acls defined for $src */ + function remove_acl_for_dn($src = "") + { + if($src == ""){ + $src = $this->dn; + } + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=gosaAcl)(gosaAclEntry=*".base64_encode($src)."*))",array("gosaAclEntry","dn")); + while($attrs = $ldap->fetch()){ + $acl = new acl($this->config,$this->parent,$attrs['dn']); + foreach($acl->gosaAclEntry as $id => $entry){ + foreach($entry['members'] as $m_id => $member){ + if($m_id == "U:".$src){ + unset($acl->gosaAclEntry[$id]['members'][$m_id]); + gosa_log("modify","users/acl",$attrs['dn'],array(),sprintf("Removed acl for user %s on object %s.",$src,$attrs['dn'])); + } + if($m_id == "G:".$src){ + unset($acl->gosaAclEntry[$id]['members'][$m_id]); + gosa_log("modify","groups/acl",$attrs['dn'],array(),sprintf("Removed acl for group %s on object %s.",$src,$attrs['dn'])); + } + } + } + $acl -> save(); + } + } + + function update_acl_membership($src,$dst) + { + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->config->current['BASE']); + $ldap->search("(&(objectClass=gosaAcl)(gosaAclEntry=*".base64_encode($src)."*))",array("gosaAclEntry","dn")); + while($attrs = $ldap->fetch()){ + $acl = new acl($this->config,$this->parent,$attrs['dn']); + foreach($acl->gosaAclEntry as $id => $entry){ + foreach($entry['members'] as $m_id => $member){ + if($m_id == "U:".$src){ + unset($acl->gosaAclEntry[$id]['members'][$m_id]); + $new = "U:".$dst; + $acl->gosaAclEntry[$id]['members'][$new] = $new; + gosa_log("modify","users/acl",$attrs['dn'],array(),sprintf("Updated acl for user %s on object %s.",$src,$attrs['dn'])); + } + if($m_id == "G:".$src){ + unset($acl->gosaAclEntry[$id]['members'][$m_id]); + $new = "G:".$dst; + $acl->gosaAclEntry[$id]['members'][$new] = $new; + gosa_log("modify","groups/acl",$attrs['dn'],array(),sprintf("Updated acl for group %s on object %s.",$src,$attrs['dn'])); + } + } + } + $acl -> save(); + } + } } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: