Code

Detect type of LDAP server (Sun LDAP and OpenLDAP for now) on login
authorwolffc <wolffc@594d385d-05f5-0310-b6e9-bd551577e9d8>
Mon, 13 Sep 2010 14:46:28 +0000 (14:46 +0000)
committerwolffc <wolffc@594d385d-05f5-0310-b6e9-bd551577e9d8>
Mon, 13 Sep 2010 14:46:28 +0000 (14:46 +0000)
by querying the Root DSE. Use this information to choose appropriate
escaping of commas (\, vs. \2C) in filters in order to update object
group memberships during renames and moves of systems.

git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.6-lhm@19649 594d385d-05f5-0310-b6e9-bd551577e9d8

trunk/gosa-core/html/index.php
trunk/gosa-core/include/class_plugin.inc
trunk/gosa-plugins/systems/admin/systems/class_divListSystem.inc

index f247a370e46ff81187efe132c56d2c8d95f6895a..629266e27dd8bfe89c21b14a70ede523681c788a 100644 (file)
@@ -286,6 +286,24 @@ if (($_SERVER["REQUEST_METHOD"] == "POST" && isset($_POST['login'])) || $htacces
     }
   }
 
+  /* Determine LDAP server comma escaping style */
+  if (!isset($config->comma_escape_style)) {
+    $comma_escape_style = "unknown";
+    $ldap = $config->get_ldap_link();
+    $ldap->cd("");
+    $ldap->cat("");
+    $attrs = $ldap->fetch();
+    if (isset($attrs["vendorName"]) && $attrs["vendorName"][0] == "Sun Microsystems, Inc.") {
+      $comma_escape_style = "comma";
+    }
+    for($i = 0 ; $i < $attrs['objectClass']['count']; $i++){
+      if ($attrs['objectClass'][$i] == "OpenLDAProotDSE") {
+        $comma_escape_style = "2C";
+      }
+    }
+    $config->comma_escape_style = $comma_escape_style;
+  }
+
   /* Check for locking area */
   $ldap->cat($config->get_cfg_value("config"), array("dn"));
   $attrs= $ldap->fetch();
index d517efd5bd5465425a3c7acc09b1f00a8c740f60..75690a7f5d7e04ddc91a73eb1ad7bf6363aac3e6 100644 (file)
@@ -957,7 +957,12 @@ class plugin
     /* Walk through all objectGroups and check if there are 
         members matching the source dn 
      */
-    $src_dn=str_replace('\\,', '\\2C', LDAP::fix($src_dn));
+    if ($this->config->comma_escape_style == "comma" ||
+        $this->config->comma_escape_style == "unknown") {
+      $src_dn=LDAP::fix($src_dn);
+    } else {
+      $src_dn=str_replace('\\,', '\\2C', LDAP::fix($src_dn));
+    }
     foreach($ogroups as $ogroup){
       if(isset($ogroup['member'])){
 
index e2178ec8c35420471e55b21e2ac0ece615118650..a48afab157d12de76ef2ebb859d9faf1dadf67ed 100644 (file)
@@ -398,7 +398,12 @@ class divListSystem extends MultiSelectWindow
       $cnts[$type] ++;
 
       /* Create each field */
-      $filtered_dn = str_replace('\\,', '\\2C', LDAP::fix($val['dn']));
+      if ($this->config->comma_escape_style == "comma" ||
+          $this->config->comma_escape_style == "unknown") {
+        $filtered_dn = LDAP::fix($val['dn']);
+      } else {
+        $filtered_dn = str_replace('\\,', '\\2C', LDAP::fix($val['dn']));
+      }
       $field0 = array("string" => "<input type='checkbox' id='item_selected_".$key."' name='item_selected_".$key."'>" ,
           "attach" => "style='width:20px;'");
       $field1 = array("string" => sprintf($img['img'],$val['dn']),