Code

Updated ACL handling in groups
[gosa.git] / gosa-core / include / class_ldap.inc
index 463f6b9e1251fa3461a01ca4a5b2baf592bb0e17..a1b6a87022d1cf05efebaac63ecfcb7ae7340ce0 100644 (file)
@@ -210,7 +210,7 @@ class LDAP{
     } else {
       $basedn = LDAP::convert($basedn);
     }
-    return(ereg_replace("[^,]*[,]*[ ]*(.*)", "\\1", $basedn));
+    return(preg_replace("/[^,]*[,]*[ ]*(.*)/", "$1", $basedn));
   }
 
   
@@ -276,13 +276,12 @@ class LDAP{
     }
   }
 
-  function cat($srp, $dn,$attrs= array("*"))
+  function cat($srp, $dn,$attrs= array("*"), $filter = "(objectclass=*)")
   {
     if($this->hascon){
       if ($this->reconnect) $this->connect();
 
       $this->clearResult($srp);
-      $filter = "(objectclass=*)";
       $this->sr[$srp] = @ldap_read($this->cid, LDAP::fix($dn), $filter,$attrs);
       $this->error = @ldap_error($this->cid);
       $this->resetResult($srp);
@@ -663,7 +662,8 @@ class LDAP{
 
       } else {
         $type= preg_replace('/^([^=]+)=.*$/', '\\1', $cdn);
-        $param= preg_replace('/^[^=]+=([^,]+).*$/', '\\1', $cdn);
+        $param= LDAP::fix(preg_replace('/^[^=]+=([^,]+).*$/', '\\1', $cdn));
+        $param=preg_replace(array('/\\\\,/','/\\\\"/'),array(',','"'),$param);
 
         $na= array();
 
@@ -673,7 +673,7 @@ class LDAP{
           /* Get name of first matching objectClass */
           $ocname= "";
           foreach($classes as $class){
-            if (isset($class['MUST']) && $class['MUST'] == "$type"){
+            if (isset($class['MUST']) && in_array($type, $class['MUST'])){
 
               /* Look for first classes that is structural... */
               if (isset($class['STRUCTURAL'])){
@@ -970,9 +970,9 @@ class LDAP{
   {
     if($this->reconnect) $this->connect();
 
-    /* First we have to splitt the string ito detect empty lines
+    /* First we have to split the string into empty lines.
        An empty line indicates an new Entry */
-    $entries = split("\n",$str_attr);
+    $entries = preg_split("/\n/",$str_attr);
 
     $data = "";
     $cnt = 0; 
@@ -1013,9 +1013,9 @@ class LDAP{
         /* Append lines ... */
         if(!empty($tmp2)) {
           /* check if we need base64_decode for this line */
-          if(ereg("::",$tmp2))
+          if(strstr($tmp2, "::") !== false)
           {
-            $encoded = split("::",$entry);
+            $encoded = explode("::",$entry);
             $attr  = trim($encoded[0]);
             $value = base64_decode(trim($encoded[1]));
             /* Add linenumber */
@@ -1038,11 +1038,11 @@ class LDAP{
        
        Now we check every insertblock and try to insert */
     foreach ( $all as $single) {
-      $lineone = split("\n",$single);  
-      $ndn = split("#", $lineone[0]);
+      $lineone = preg_split("/\n/",$single);  
+      $ndn = explode("#", $lineone[0]);
       $line = base64_decode($ndn[1]);
 
-      $dnn = split (":",$line,2);
+      $dnn = explode (":",$line,2);
       $current_line = $ndn[0];
       $dn    = $dnn[0];
       $value = $dnn[1];
@@ -1104,7 +1104,7 @@ class LDAP{
     if($this->reconnect) $this->connect();
 
     $ret = false;
-    $rows= split("\n",$str_attr);
+    $rows= preg_split("/\n/",$str_attr);
     $data= false;
 
     foreach($rows as $row) {
@@ -1116,13 +1116,13 @@ class LDAP{
 
           /* We are using line numbers 
              Because there is a # before a : */
-          $tmp1= split("#",$row);
+          $tmp1= explode("#",$row);
           $current_line= $tmp1[0];
           $row= base64_decode($tmp1[1]);
         }
 
         /* Split the line into  attribute  and value */
-        $attr   = split(":", $row,2);
+        $attr   = explode(":", $row,2);
         $attr[0]= trim($attr[0]);  /* attribute */
         $attr[1]= $attr[1];  /* value */
 
@@ -1225,7 +1225,7 @@ class LDAP{
   
   function importcsv($str)
   {
-    $lines = split("\n",$str);
+    $lines = preg_split("/\n/",$str);
     foreach($lines as $line)
     {
       /* continue if theres a comment */
@@ -1237,9 +1237,9 @@ class LDAP{
       $line= str_replace ("\t"  ,"," ,$line);
       echo $line;
 
-      $cells = split(",",$line )  ;
+      $cells = explode(",",$line )  ;
       $linet= str_replace ("\t\t",",",$line);
-      $cells = split("\t",$line);
+      $cells = preg_split("/\t/",$line);
       $count = count($cells);  
     }
 
@@ -1283,7 +1283,7 @@ class LDAP{
         continue;
       }
       $name= "OID";
-      $pattern= split(' ', $val);
+      $pattern= explode(' ', $val);
       $ocname= preg_replace("/^.* NAME\s+\(*\s*'([^']+)'\s*\)*.*$/", '\\1', $val);
       $objectclasses[$ocname]= array();
 
@@ -1295,7 +1295,11 @@ class LDAP{
                     break;
 
           case ')': if ($name != ""){
-                      $objectclasses[$ocname][$name]= $this->value2container($value);
+                      $v = $this->value2container($value);
+                      if(in_array($name, array('MUST', 'MAY')) && !is_array($v)){
+                        $v = array($v);
+                      }
+                      $objectclasses[$ocname][$name]= $v;
                     }
                     $name= "";
                     $value= "";
@@ -1310,7 +1314,11 @@ class LDAP{
           case 'MUST':
           case 'MAY':
                     if ($name != ""){
-                      $objectclasses[$ocname][$name]= $this->value2container($value);
+                      $v = $this->value2container($value);
+                      if(in_array($name, array('MUST', 'MAY')) && !is_array($v)){
+                        $v = array($v);
+                      }
+                      $objectclasses[$ocname][$name]= $v;
                     }
                     $name= $chunk;
                     $value= "";
@@ -1363,10 +1371,10 @@ class LDAP{
 
   /* added by Guido Serra aka Zeph <zeph@purotesto.it> */
   function getCn($dn){
-    $simple= split(",", $dn);
+    $simple= explode(",", $dn);
 
     foreach($simple as $piece) {
-      $partial= split("=", $piece);
+      $partial= explode("=", $piece);
 
       if($partial[0] == "cn"){
         return $partial[1];