Code

Added support for master-key encrypted passwords in gosa.conf
[gosa.git] / include / class_ldap.inc
index 4ee33cbab9431186c3dacabfa42a90061ae46c13..b5a5026b0db14e3e5014bc137be276b1c6d93795 100644 (file)
@@ -32,6 +32,8 @@ class LDAP{
   var $referrals= array();
   var $max_ldap_query_time = 0;   // 0, empty or negative values will disable this check 
 
+  var $re = NULL;  
+
   function LDAP($binddn,$bindpw, $hostname, $follow_referral= FALSE, $tls= FALSE)
   {
     global $config;
@@ -59,14 +61,17 @@ class LDAP{
      Currently used codes:
       ,   => CO
       \2C => CO
+      \22 => TO
+      \"  => TO
+      \+  => PL
       (   => OB
       )   => CB
       /   => SL                                                                  */
   function convert($dn)
   {
     if (SPECIALS_OVERRIDE == TRUE){
-      $tmp= preg_replace(array("/\\\\,/", "/\\\\2C/", "/\(/", "/\)/", "/\//"),
-                           array("\001CO", "\001CO", "\001OB", "\001CB", "\001SL"),
+      $tmp= preg_replace(array("/\\\\,/", "/\\\\2C/", "/\(/", "/\)/", "/\//", "/\\\\22/", '/\\\\"/', "/\\\\3D/", "/\\\\2B/", '/\\\\+/'),
+                           array("\001CO", "\001CO", "\001OB", "\001CB", "\001SL", "\001TO", "\001TO", "\001GL", "\001PL", "\001PL"),
                            $dn);
       return (preg_replace('/,\s+/', ',', $tmp));
     } else {
@@ -82,8 +87,8 @@ class LDAP{
   function fix($dn)
   {
     if (SPECIALS_OVERRIDE == TRUE){
-      return (preg_replace(array("/\001CO/", "/\001OB/", "/\001CB/", "/\001SL/"),
-                           array("\,", "(", ")", "/"),
+      return (preg_replace(array("/\001CO/", "/\001OB/", "/\001CB/", "/\001SL/", "/\001TO/", "/\001PL/", "/\001GL/"),
+                           array("\,", "(", ")", "/", '\"', "\+", "="),
                            $dn));
     } else {
       return ($dn);
@@ -91,6 +96,14 @@ class LDAP{
   }
 
 
+  /* Function to fix problematic characters in DN's that are used for search
+     requests. I.e. member=....                                               */
+  function prepare4filter($dn)
+  {
+        return normalizeLdap(preg_replace('/\\\\/', '\\\\\\', @LDAP::fix($dn)));
+  }
+
+
   function connect()
   {
     $this->hascon=false;
@@ -182,7 +195,6 @@ class LDAP{
       if ($this->reconnect) $this->connect();
 
       $start = microtime();
-   
       $this->clearResult();
       $this->sr = @ldap_search($this->cid, $this->fix($this->basedn), $filter, $attrs);
       $this->error = @ldap_error($this->cid);
@@ -210,6 +222,7 @@ class LDAP{
   {
     if($this->hascon){
       if ($this->reconnect) $this->connect();
+
       $this->clearResult();
       if ($basedn == "")
         $basedn = $this->basedn;
@@ -244,6 +257,7 @@ class LDAP{
   {
     if($this->hascon){
       if ($this->reconnect) $this->connect();
+
       $start = microtime();
       $this->clearResult();
       $filter = "(objectclass=*)";
@@ -589,7 +603,7 @@ class LDAP{
           }
 
           if($this->error != "Success"){
-            /* Some error occured */
+            /* Some error occurred */
             print "---------------------------------------------";
             print $this->get_error()."<br>";
             print $sourcedn."<br>";
@@ -744,6 +758,7 @@ class LDAP{
           /* Assemble_entry */
           if ($tag != ""){
             $na['objectClass']= array($ocname, "gosaAdministrativeUnitTag");
+            $na["gosaUnitTag"]= $tag;
           } else {
             $na['objectClass']= array($ocname);
           }
@@ -1278,8 +1293,8 @@ function gen_xls ($dn, $filter= "(objectClass=*)", $attributes= array('*'), $rec
   
   function get_objectclasses_old()
   {
-         $objectclasses = array();
-       
+    $objectclasses = array();
+
          # Get base to look for schema 
          $sr           = @ldap_read ($this->cid, NULL, "objectClass=*", array("subschemaSubentry"));
          $attr         = @ldap_get_entries($this->cid,$sr);
@@ -1311,8 +1326,15 @@ function gen_xls ($dn, $filter= "(objectClass=*)", $attributes= array('*'), $rec
 
   function get_objectclasses()
   {
+    global $config;
     $objectclasses = array();
 
+    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){