Code

Added modified menu templates, removed unused templates
[gosa.git] / include / class_ldap.inc
index 3c0dfe2572e3606cb58443bae0bfc1d11335d1df..17ae13ff4071b267c4f606dbe63bf5e69bfc1197 100644 (file)
@@ -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 "<h2>".sprintf(_("Creating copy of %s"),"<i>".@LDAP::fix($sourcedn)."</i>")."</h2>";
@@ -573,7 +573,7 @@ class LDAP{
           }
 
           if($this->error != "Success"){
-            /* Some error occured */
+            /* Some error occurred */
             print "---------------------------------------------";
             print $this->get_error()."<br>";
             print $sourcedn."<br>";
@@ -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: