X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=gosa-core%2Finclude%2Fclass_ldap.inc;h=45ffae7f4a4b8e8901985ea8ebc611cc49f089f1;hb=4b3498ae8e78a11c7c99663d45bab6a0a14df052;hp=a0c46a7cc6de9d16ee098c506bd0b41569e23df7;hpb=a5ef7cbeb291f4e5d234627453e18f2985e01bc6;p=gosa.git diff --git a/gosa-core/include/class_ldap.inc b/gosa-core/include/class_ldap.inc index a0c46a7cc..45ffae7f4 100644 --- a/gosa-core/include/class_ldap.inc +++ b/gosa-core/include/class_ldap.inc @@ -81,18 +81,20 @@ class LDAP{ /* Function to replace all problematic characters inside a DN by \001XX, where \001 is decoded to chr(1) [ctrl+a]. It is not impossible, but very unlikely that this character is inside a DN. - + Currently used codes: - , => CO - \2C => CO - ( => OB - ) => CB - / => SL */ + , => CO + \2C => CO + ( => OB + ) => CB + / => SL */ static function convert($dn) { - if (SPECIALS_OVERRIDE === TRUE){ - return preg_replace('/,\s+/', ',', str_replace(array('\\\\,', '\\\\2C', '\(/', '/\)', '\/'), - array("\001CO", "\001CO", "\001OB", "\001CB", "\001SL"), $dn)); + if (SPECIALS_OVERRIDE == TRUE){ + $tmp= preg_replace(array("/\\\\,/", "/\\\\2C/", "/\(/", "/\)/", "/\//"), + array("\001CO", "\001CO", "\001OB", "\001CB", "\001SL"), + $dn); + return (preg_replace('/,\s+/', ',', $tmp)); } else { return ($dn); } @@ -105,20 +107,21 @@ class LDAP{ servers seem to take it the correct way. */ static function fix($dn) { - if (SPECIALS_OVERRIDE === TRUE){ - return (str_replace(array('\001CO', '\001OB', '\001CB', '\001SL'), - array('\,', '(', ')', '/'), $dn)); + if (SPECIALS_OVERRIDE == TRUE){ + return (preg_replace(array("/\001CO/", "/\001OB/", "/\001CB/", "/\001SL/"), + array("\,", "(", ")", "/"), + $dn)); } else { return ($dn); } } - /* Function to fix problematic characters in DN's that are used for search requests. I.e. member=.... */ static function prepare4filter($dn) { - return normalizeLdap(str_replace('\\\\', '\\\\\\', LDAP::fix($dn))); + $fixed= normalizeLdap(str_replace('\\\\', '\\\\\\', LDAP::fix($dn))); + return str_replace('\\,', '\\\\,', $fixed); } @@ -480,12 +483,12 @@ class LDAP{ parent => ou=department,dc=... dest_rdn => cn=herbert */ - $parent = @LDAP::fix(preg_replace("/^[^,]+,/","", @LDAP::convert($dest))); - $dest_rdn = @LDAP::fix(preg_replace("/,.*$/","",@LDAP::convert($dest))); + $parent = preg_replace("/^[^,]+,/","", $dest); + $dest_rdn = preg_replace("/,.*$/","",$dest); if($this->hascon){ if ($this->reconnect) $this->connect(); - $r= ldap_rename($this->cid,$source,$dest_rdn,$parent,TRUE); + $r= ldap_rename($this->cid,@LDAP::fix($source), @LDAP::fix($dest_rdn),@LDAP::fix($parent),TRUE); $this->error = ldap_error($this->cid); /* Check if destination dn exists, if not the @@ -616,7 +619,7 @@ class LDAP{ } else { $type= preg_replace('/^([^=]+)=.*$/', '\\1', $cdn); - $param= preg_replace('/^[^=]+=([^,]+),.*$/', '\\1', $cdn); + $param= preg_replace('/^[^=]+=([^,]+).*$/', '\\1', $cdn); $na= array(); @@ -700,6 +703,9 @@ class LDAP{ $this->add($na); if (!$this->success()){ + + print_a(array($cdn,$na)); + msg_dialog::display(_("LDAP error"), msgPool::ldaperror($this->get_error(), $cdn, LDAP_ADD, get_class())); return FALSE; } @@ -1195,7 +1201,7 @@ class LDAP{ } - function get_objectclasses() + function get_objectclasses( $force_reload = FALSE) { $objectclasses = array(); global $config; @@ -1208,8 +1214,8 @@ class LDAP{ } /* Return the cached results. */ - if(class_available('session') && session::is_set("LDAP_CACHE::get_objectclasses")){ - $objectclasses = session::get("LDAP_CACHE::get_objectclasses"); + if(class_available('session') && session::global_is_set("LDAP_CACHE::get_objectclasses") && !$force_reload){ + $objectclasses = session::global_get("LDAP_CACHE::get_objectclasses"); return($objectclasses); } @@ -1272,7 +1278,7 @@ class LDAP{ } if(class_available("session")){ - session::set("LDAP_CACHE::get_objectclasses",$objectclasses); + session::global_set("LDAP_CACHE::get_objectclasses",$objectclasses); } return $objectclasses; @@ -1303,8 +1309,8 @@ class LDAP{ function log($string) { - if (session::is_set('config')){ - $cfg = session::get('config'); + if (session::global_is_set('config')){ + $cfg = session::global_get('config'); if (isset($cfg->current['LDAPSTATS']) && preg_match('/true/i', $cfg->current['LDAPSTATS'])){ syslog (LOG_INFO, $string); }