X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=include%2Fclass_ldap.inc;h=17ae13ff4071b267c4f606dbe63bf5e69bfc1197;hb=cf52f2875e8d24c2985898e38bfe03acf8900e44;hp=3c0dfe2572e3606cb58443bae0bfc1d11335d1df;hpb=8274ffa6c471ccfd87487f3114289a341c03acf5;p=gosa.git diff --git a/include/class_ldap.inc b/include/class_ldap.inc index 3c0dfe257..17ae13ff4 100644 --- a/include/class_ldap.inc +++ b/include/class_ldap.inc @@ -445,7 +445,7 @@ class LDAP{ */ function copy_FAI_resource_recursive($sourcedn,$destinationdn,$destinationName,$type="branch",$is_first = true,$depth=0) { - error_reporting(E_ALL); + error_reporting(E_ALL | E_STRICT); if($is_first){ echo "

".sprintf(_("Creating copy of %s"),"".@LDAP::fix($sourcedn)."")."

"; @@ -573,7 +573,7 @@ class LDAP{ } if($this->error != "Success"){ - /* Some error occured */ + /* Some error occurred */ print "---------------------------------------------"; print $this->get_error()."
"; print $sourcedn."
"; @@ -644,24 +644,24 @@ class LDAP{ { global $config; - /* Ignore create_missing trees if the base equals target */ + $real_path= substr($target, 0, strlen($target) - strlen($this->basedn) -1 ); + if ($target == $this->basedn){ - return; + $l= array("dummy"); + } else { + $l= array_reverse(gosa_ldap_explode_dn($real_path)); } - - $real_path= substr($target, 0, strlen($target) - strlen($this->basedn) -1 ); - $l= array_reverse(gosa_ldap_explode_dn($real_path)); unset($l['count']); $cdn= $this->basedn; $tag= ""; /* Load schema if available... */ - if(isset($config->data['MAIN']['SCHEMA_CHECK'])){ - $classes= $this->get_objectclasses(); - } + $classes= $this->get_objectclasses(); foreach ($l as $part){ - $cdn= "$part,$cdn"; + if ($part != "dummy"){ + $cdn= "$part,$cdn"; + } /* Ignore referrals */ $found= false; @@ -694,7 +694,7 @@ class LDAP{ $na= array(); /* Automatic or traditional? */ - if(isset($config->data['MAIN']['SCHEMA_CHECK'])){ + if(count($classes)){ /* Get name of first matching objectClass */ $ocname= ""; @@ -772,11 +772,18 @@ class LDAP{ } $this->cd($cdn); $this->add($na); + show_ldap_error($this->get_error(), sprintf(_("Creating subtree '%s' failed."),$cdn)); + if (!preg_match('/success/i', $this->error)){ + return FALSE; + } } } + + return TRUE; } + function recursive_remove() { $delarray= array(); @@ -850,7 +857,7 @@ class LDAP{ $url= preg_replace('!\?\?.*$!', '', $url); $server= preg_replace('!^([^:]+://[^/]+)/.*$!', '\\1', $url); - if ($referrals == NULL){ + if ($referrals === NULL){ $referrals= $this->referrals; } @@ -1105,6 +1112,13 @@ class LDAP{ */ function import_single_entry($str_attr,$modify,$delete) { + global $config; + + if(!$config){ + trigger_error("Can't import ldif, can't read config object."); + } + + if($this->reconnect) $this->connect(); $ret = false; @@ -1182,7 +1196,8 @@ class LDAP{ /* Create missing trees */ $this->cd ($this->basedn); - $this->create_missing_trees($data['dn']); + $this->cd($config->current['BASE']); + $this->create_missing_trees(preg_replace("/^[^,]+,/","",$data['dn'])); $this->cd($data['dn']); $dn = $data['dn']; @@ -1247,7 +1262,15 @@ class LDAP{ function get_objectclasses() { $objectclasses = array(); - + global $config; + + /* Only read schema if it is allowed */ + if(isset($config) && preg_match("/config/i",get_class($config))){ + if(!isset($config->data['MAIN']['SCHEMA_CHECK']) || !preg_match("/true/i",$config->data['MAIN']['SCHEMA_CHECK'])){ + return($objectclasses); + } + } + # Get base to look for schema $sr = @ldap_read ($this->cid, NULL, "objectClass=*", array("subschemaSubentry")); if(!$sr){ @@ -1310,7 +1333,6 @@ class LDAP{ } } - return $objectclasses; } @@ -1360,6 +1382,7 @@ class LDAP{ } } + function get_naming_contexts($server, $admin= "", $password= "") { /* Build LDAP connection */ @@ -1371,13 +1394,43 @@ class LDAP{ $r= ldap_bind ($ds, $admin, $password); /* Get base to look for naming contexts */ - $sr = @ldap_read ($ds, "", "objectClass=*", array("namingContexts")); + $sr = @ldap_read ($ds, "", "objectClass=*", array("+")); $attr= @ldap_get_entries($ds,$sr); - + return ($attr[0]['namingcontexts']); } + function get_root_dse($server, $admin= "", $password= "") + { + /* Build LDAP connection */ + $ds= ldap_connect ($server); + if (!$ds) { + die ("Can't bind to LDAP. No check possible!"); + } + ldap_set_option($ds, LDAP_OPT_PROTOCOL_VERSION, 3); + $r= ldap_bind ($ds, $admin, $password); + + /* Get base to look for naming contexts */ + $sr = @ldap_read ($ds, "", "objectClass=*", array("+")); + $attr= @ldap_get_entries($ds,$sr); + + /* Return empty array, if nothing was set */ + if (!isset($attr[0])){ + return array(); + } + + /* Rework array... */ + $result= array(); + for ($i= 0; $i<$attr[0]['count']; $i++){ + $result[$attr[0][$i]]= $attr[0][$attr[0][$i]]; + unset($result[$attr[0][$i]]['count']); + } + + return ($result); + } + + } // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: