X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_plugin.inc;h=0691c206073d220480c29269e45c8d395ee68038;hb=30d939bbc772a9b8cdd9704e8034101e957ab972;hp=f58df50bc33d19a46ec9aa802fbeb7934a3d6f22;hpb=058b337f6b9d73fda1a3d46eb04d8719e6a4bb9e;p=gosa.git diff --git a/gosa-core/include/class_plugin.inc b/gosa-core/include/class_plugin.inc index f58df50bc..0691c2060 100644 --- a/gosa-core/include/class_plugin.inc +++ b/gosa-core/include/class_plugin.inc @@ -139,7 +139,7 @@ class plugin \param dn Distinguished name to initialize plugin from \sa plugin() */ - function plugin (&$config, $dn= NULL, $parent= NULL) + function plugin (&$config, $dn= NULL, $object= NULL) { /* Configuration is fine, allways */ $this->config= &$config; @@ -167,8 +167,8 @@ class plugin if ($dn !== NULL){ /* Load data to 'attrs' and save 'dn' */ - if ($parent !== NULL){ - $this->attrs= $parent->attrs; + if ($object !== NULL){ + $this->attrs= $object->attrs; } else { $ldap= $this->config->get_ldap_link(); $ldap->cat ($dn); @@ -263,7 +263,9 @@ class plugin /* Reset Lock message POST/GET check array, to prevent perg_match errors*/ session::set('LOCK_VARS_TO_USE',array()); - session::set('LOCK_VARS_USED',array()); + session::set('LOCK_VARS_USED_GET',array()); + session::set('LOCK_VARS_USED_POST',array()); + session::set('LOCK_VARS_USED_REQUEST',array()); } /*! \brief execute plugin @@ -744,6 +746,39 @@ class plugin } } + + /* Create unique DN */ + function create_unique_dn2($data, $base) + { + $ldap= $this->config->get_ldap_link(); + $base= preg_replace("/^,*/", "", $base); + + /* Try to use plain entry first */ + $dn= "$data,$base"; + $attribute= preg_replace('/=.*$/', '', $data); + $ldap->cat ($dn, array('dn')); + if (!$ldap->fetch()){ + return ($dn); + } + + /* Look for additional attributes */ + foreach ($this->attributes as $attr){ + if ($attr == $attribute || $this->$attr == ""){ + continue; + } + + $dn= "$data+$attr=".$this->$attr.",$base"; + $ldap->cat ($dn, array('dn')); + if (!$ldap->fetch()){ + return ($dn); + } + } + + /* None found */ + return ("none"); + } + + /* Create unique DN */ function create_unique_dn($attribute, $base) { @@ -774,6 +809,7 @@ class plugin return ("none"); } + function rebind($ldap, $referral) { $credentials= LDAP::get_credentials($referral, $this->config->current['REFERRAL']); @@ -851,6 +887,9 @@ class plugin /* FAIvariable=.../..., cn=.. could not be saved, because the attribute FAIvariable was different to the dn FAIvariable=..., cn=... */ + + if(!is_array($new['objectClass'])) $new['objectClass'] = array($new['objectClass']); + if(in_array_ics("FAIdebconfInfo",$new['objectClass'])){ $new['FAIvariable'] = $ldap->fix($new['FAIvariable']); } @@ -940,55 +979,44 @@ class plugin array("dn","objectClass"),GL_SUBSEARCH | GL_NO_ACL_CHECK); foreach($leaf_objs as $obj){ $new_dn = $obj['dn']; - $old_dn = preg_replace("/".preg_quote($dst_dn, '/')."$/i",$src_dn,$new_dn); + $old_dn = preg_replace("/".preg_quote(LDAP::convert($dst_dn), '/')."$/i",$src_dn,LDAP::convert($new_dn)); $this->update_acls($old_dn,$new_dn); } - /* Get all objectGroups defined in this database. - and check if there is an entry matching the source dn, - if this is the case, then update this objectgroup to use the new dn. - */ - $ogroups = get_sub_list("(&(objectClass=gosaGroupOfNames)(member=*))","ogroups", - array(get_ou("ogroupRDN")),$this->config->current['BASE'],array("member"), - GL_SUBSEARCH | GL_NO_ACL_CHECK) ; + // Migrate objectgroups if needed + $ogroups = get_sub_list("(&(objectClass=gosaGroupOfNames)(member=".LDAP::prepare4filter(LDAP::fix($src_dn))."))","ogroups", array(get_ou("ogroupRDN")),$this->config->current['BASE'],array("dn"), GL_SUBSEARCH | GL_NO_ACL_CHECK); - /* Walk through all objectGroups and check if there are - members matching the source dn - */ + // Walk through all objectGroups foreach($ogroups as $ogroup){ - if(isset($ogroup['member'])){ - - /* Reset class object, this will be initialized with class_ogroup on demand - */ - $o_ogroup = NULL; - for($i = 0 ; $i < $ogroup['member']['count'] ; $i ++){ - $c_mem = $ogroup['member'][$i]; - if(preg_match("/".preg_quote($src_dn, '/')."$/i",$c_mem)){ - $d_mem = preg_replace("/".preg_quote($src_dn, '/')."$/i",$dst_dn,$ogroup['member'][$i]); - if($o_ogroup == NULL){ - $o_ogroup = new ogroup($this->config,$ogroup['dn']); - } - unset($o_ogroup->member[$c_mem]); - $o_ogroup->member[$d_mem]= $d_mem; - } - } - - /* Save object group if there were changes made on the membership */ - if($o_ogroup != NULL){ - $o_ogroup->save(); - } + // Migrate old to new dn + $o_ogroup= new ogroup($this->config,$ogroup['dn']); + if (isset($o_group->member[$src_dn])) { + unset($o_ogroup->member[$src_dn]); } + $o_ogroup->member[$dst_dn]= $dst_dn; + + // Save object group + $o_ogroup->save(); } - /* Update roles to use the new entry dn - */ - $ldap = $this->config->get_ldap_link(); - $ldap->cd($this->config->current['BASE']); - $ldap->search("(&(objectClass=organizationalRole)". - "(roleOccupant=".LDAP::prepare4filter($src_dn)."))"); - while($attrs = $ldap->fetch()){ - $role = new roleGeneric($this->config,$attrs['dn']); - $key = array_search($src_dn,$role->roleOccupant); + // Migrate rfc groups if needed + $groups = get_sub_list("(&(objectClass=posixGroup)(member=".LDAP::prepare4filter(LDAP::fix($src_dn))."))","groups", array(get_ou("groupRDN")),$this->config->current['BASE'],array("dn"), GL_SUBSEARCH | GL_NO_ACL_CHECK); + + // Walk through all POSIX groups + foreach($groups as $group){ + + // Migrate old to new dn + $o_group= new group($this->config,$group['dn']); + $o_group->save(); + } + + /* Update roles to use the new entry dn */ + $roles = get_sub_list("(&(objectClass=organizationalRole)(roleOccupant=".LDAP::prepare4filter(LDAP::fix($src_dn))."))","roles", array(get_ou("roleRDN")),$this->config->current['BASE'],array("dn"), GL_SUBSEARCH | GL_NO_ACL_CHECK); + + // Walk through all roles + foreach($roles as $role){ + $role = new roleGeneric($this->config,$role['dn']); + $key= array_search($src_dn, $role->roleOccupant); if($key !== FALSE){ $role->roleOccupant[$key] = $dst_dn; $role->save(); @@ -1124,11 +1152,8 @@ class plugin if (isset($source[$var])){ if(isset($source[$var]['count'])){ if($source[$var]['count'] > 1){ - $this->$var = array(); - $tmp = array(); - for($i = 0 ; $i < $source[$var]['count']; $i++){ - $tmp = $source[$var][$i]; - } + $tmp= $source[$var]; + unset($tmp['count']); $this->$var = $tmp; }else{ $this->$var = $source[$var][0]; @@ -1329,57 +1354,7 @@ class plugin There will also be some errors psoted, if the configuration failed */ function snapshotEnabled() { - $config = $this->config; - if($config->get_cfg_value("enableSnapshots") == "true"){ - - /* Check if the snapshot_base is defined */ - if ($config->get_cfg_value("snapshotBase") == ""){ - - /* Send message if not done already */ - if(!session::is_set("snapshotFailMessageSend")){ - session::set("snapshotFailMessageSend",TRUE); - msg_dialog::display(_("Configuration error"), - sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."), - "snapshotBase"), ERROR_DIALOG); - } - return(FALSE); - } - - /* Check if the snapshot_base is defined */ - if (!is_callable("gzcompress")){ - - /* Send message if not done already */ - if(!session::is_set("snapshotFailMessageSend")){ - session::set("snapshotFailMessageSend",TRUE); - msg_dialog::display(_("Configuration error"), - sprintf(_("The snapshot functionality is enabled, but the required compression module is missing. Please install '%s'."),"php5-zip / php5-gzip"), ERROR_DIALOG); - } - return(FALSE); - } - - /* check if there are special server configurations for snapshots */ - if ($config->get_cfg_value("snapshotURI") != ""){ - - /* check if all required vars are available to create a new ldap connection */ - $missing = ""; - foreach(array("snapshotURI","snapshotAdminDn","snapshotAdminPassword","snapshotBase") as $var){ - if($config->get_cfg_value($var) == ""){ - $missing .= $var." "; - - /* Send message if not done already */ - if(!session::is_set("snapshotFailMessageSend")){ - session::set("snapshotFailMessageSend",TRUE); - msg_dialog::display(_("Configuration error"), - sprintf(_("The snapshot functionality is enabled, but the required variable '%s' is not set."), - $missing), ERROR_DIALOG); - } - return(FALSE); - } - } - } - return(TRUE); - } - return(FALSE); + return $this->config->snapshotEnabled(); } @@ -1866,9 +1841,10 @@ class plugin /* Copy needed attributes */ foreach ($this->attributes as $val){ $found= array_key_ics($val, $this->multi_attrs); + if ($found != ""){ - if(isset($this->multi_attrs["$found"][0])){ - $this->$val= $this->multi_attrs["$found"][0]; + if(isset($this->multi_attrs["$val"][0])){ + $this->$val= $this->multi_attrs["$val"][0]; } } } @@ -1920,7 +1896,9 @@ class plugin /* Reset Lock message POST/GET check array, to prevent perg_match errors*/ session::set('LOCK_VARS_TO_USE',array()); - session::set('LOCK_VARS_USED',array()); + session::set('LOCK_VARS_USED_GET',array()); + session::set('LOCK_VARS_USED_POST',array()); + session::set('LOCK_VARS_USED_REQUEST',array()); return("Multiple edit is currently not implemented for this plugin."); } @@ -2078,10 +2056,10 @@ class plugin /* Check permissions for each category, if there is at least one category which support read or paste permissions for the given base, then display the specific actions. */ - $readable = $pasteable = TRUE; + $readable = $pasteable = false; foreach($category as $cat){ - $readable |= $ui->get_category_permissions($base,$cat); - $pasteable|= $ui->is_pasteable($base,$cat); + $readable= $readable || preg_match('/r/', $ui->get_category_permissions($base, $cat)); + $pasteable= $pasteable || $ui->is_pasteable($base, $cat) == 1; } if(($cut || $copy) && isset($this->CopyPasteHandler) && is_object($this->CopyPasteHandler)){