]> source.dussan.org Git - nextcloud-server.git/commitdiff
LDAP: no whitespaces after the , in the DNs, resolves conflicts with some servers
authorArthur Schiwon <blizzz@owncloud.com>
Mon, 14 May 2012 10:25:10 +0000 (12:25 +0200)
committerArthur Schiwon <blizzz@owncloud.com>
Mon, 14 May 2012 10:25:33 +0000 (12:25 +0200)
apps/user_ldap/lib_ldap.php

index e8d91d0e037163fa562b88c581de36858aeb9c0b..b2d8167379508a7bf9f2250e8d18b03bdde88911 100755 (executable)
@@ -185,6 +185,7 @@ class OC_LDAP {
        }
 
        static public function dn2ocname($dn, $ldapname = null, $isUser = true) {
+               $dn = self::sanitizeDN($dn);
                $table = self::getMapTable($isUser);
                if($isUser) {
                        $nameAttribute = self::conf('ldapUserDisplayName');
@@ -362,6 +363,7 @@ class OC_LDAP {
         */
        static private function mapComponent($dn, $ocname, $isUser = true) {
                $table = self::getMapTable($isUser);
+               $dn = self::sanitizeDN($dn);
 
                $sqliteAdjustment = '';
                $dbtype = OCP\Config::getSystemValue('dbtype');
@@ -488,7 +490,7 @@ class OC_LDAP {
                                                        if($key != 'dn'){
                                                                $selection[$i][$key] = $item[$key][0];
                                                        } else {
-                                                               $selection[$i][$key] = $item[$key];
+                                                               $selection[$i][$key] = self::sanitizeDN($item[$key]);
                                                        }
                                                }
 
@@ -503,7 +505,11 @@ class OC_LDAP {
                                        $key = strtolower($attr[0]);
 
                                        if(isset($item[$key])) {
-                                               $selection[] = $item[$key];
+                                               if($key == 'dn') {
+                                                       $selection[] = self::sanitizeDN($item[$key]);
+                                               } else {
+                                                       $selection[] = $item[$key];
+                                               }
                                        }
                                }
 
@@ -514,6 +520,13 @@ class OC_LDAP {
                return $findings;
        }
 
+       static private function sanitizeDN($dn) {
+               //OID sometimes gives back DNs with whitespace after the comma a la "uid=foo, cn=bar, dn=..." We need to tackle this!
+               $dn = preg_replace('/,\s+/',',',$dn);
+
+               return $dn;
+       }
+
        /**
         * @brief combines the input filters with AND
         * @param $filters array, the filters to connect