Changeset c3ba0e5 in github


Ignore:
Timestamp:
Sep 13, 2011 8:52:34 AM (21 months ago)
Author:
alecpl <alec@…>
Branches:
master, HEAD, courier-fix, dev-browser-capabilities, pdo, release-0.7, release-0.8
Children:
140abb0
Parents:
43e5ae6
Message:
  • Fix encoding of LDAP contacts identifiers (#1488079)
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • CHANGELOG

    r43e5ae6 rc3ba0e5  
    22=========================== 
    33 
     4- Fix encoding of LDAP contacts identifiers (#1488079) 
    45- jQuery 1.6.4 
    56- Make date/time format user configurable; drop 'date_today' config option 
  • program/include/rcube_ldap.php

    r6f45fa5 rc3ba0e5  
    66 | This file is part of the Roundcube Webmail client                     | 
    77 | Copyright (C) 2006-2011, The Roundcube Dev Team                       | 
     8 | Copyright (C) 2011, Kolab Systems AG                                  | 
    89 | Licensed under the GNU GPL                                            | 
    910 |                                                                       | 
     
    1415 | Author: Thomas Bruederli <roundcube@gmail.com>                        | 
    1516 |         Andreas Dick <andudi (at) gmx (dot) ch>                       | 
     17 |         Aleksander Machniak <machniak@kolabsys.com>                   | 
    1618 +-----------------------------------------------------------------------+ 
    1719 
     
    186188                else 
    187189                  $d = $this->mail_domain; 
    188                  
     190 
    189191                $dc = 'dc='.strtr($d, array('.' => ',dc=')); // hierarchal domain string 
    190192 
     
    455457                foreach ($entries as $entry) 
    456458                { 
    457                     if ($this->group_members[base64_encode($entry['dn'])]) 
     459                    if ($this->group_members[self::dn_encode($entry['dn'])]) 
    458460                    { 
    459461                        $members[] = $entry; 
     
    615617        if ($this->conn && $dn) 
    616618        { 
    617             $dn = base64_decode($dn); 
     619            $dn = self::dn_decode($dn); 
    618620 
    619621            $this->_debug("C: Read [dn: $dn] [(objectclass=*)]"); 
     
    714716        $this->_debug("S: OK"); 
    715717 
     718        $dn = self::dn_encode($dn); 
     719 
    716720        // add new contact to the selected group 
    717721        if ($this->groups) 
    718             $this->add_to_group($this->group_id, base64_encode($dn)); 
    719  
    720         return base64_encode($dn); 
     722            $this->add_to_group($this->group_id, $dn); 
     723 
     724        return $dn; 
    721725    } 
    722726 
     
    739743        $replacedata = array(); 
    740744        $deletedata = array(); 
    741          
     745 
    742746        // flatten composite fields in $record 
    743747        if (is_array($record['address'])) { 
     
    777781        } // end foreach 
    778782 
    779         $dn = base64_decode($id); 
     783        $dn = self::dn_decode($id); 
    780784 
    781785        // Update the entry as required. 
     
    834838            $this->_debug("S: OK"); 
    835839 
     840            $dn    = self::dn_encode($dn); 
     841            $newdn = self::dn_encode($newdn); 
     842 
    836843            // change the group membership of the contact 
    837844            if ($this->groups) 
    838845            { 
    839                 $group_ids = $this->get_record_groups(base64_encode($dn)); 
     846                $group_ids = $this->get_record_groups($dn); 
    840847                foreach ($group_ids as $group_id) 
    841848                { 
    842                     $this->remove_from_group($group_id, base64_encode($dn)); 
    843                     $this->add_to_group($group_id, base64_encode($newdn)); 
     849                    $this->remove_from_group($group_id, $dn); 
     850                    $this->add_to_group($group_id, $newdn); 
    844851                } 
    845852            } 
    846             return base64_encode($newdn); 
     853 
     854            return $newdn; 
    847855        } 
    848856 
     
    867875 
    868876        foreach ($ids as $id) { 
    869             $dn = base64_decode($id); 
     877            $dn = self::dn_decode($id); 
    870878            $this->_debug("C: Delete [dn: $dn]"); 
    871879            // Delete the record. 
     
    879887 
    880888            // remove contact from all groups where he was member 
    881             if ($this->groups) 
    882             { 
    883                 $group_ids = $this->get_record_groups(base64_encode($dn)); 
    884                 foreach ($group_ids as $group_id) 
    885                 { 
    886                     $this->remove_from_group($group_id, base64_encode($dn)); 
     889            if ($this->groups) { 
     890                $dn = self::dn_encode($dn); 
     891                $group_ids = $this->get_record_groups($dn); 
     892                foreach ($group_ids as $group_id) { 
     893                    $this->remove_from_group($group_id, $dn); 
    887894                } 
    888895            } 
     
    968975 
    969976        if ($rec['dn']) 
    970             $out[$this->primary_key] = base64_encode($rec['dn']); 
     977            $out[$this->primary_key] = self::dn_encode($rec['dn']); 
    971978 
    972979        foreach ($this->fieldmap as $rf => $lf) 
     
    10681075            { 
    10691076                if (!empty($cache_members[$i])) 
    1070                     $members[base64_encode($cache_members[$i])] = 1; 
     1077                    $members[self::dn_encode($cache_members[$i])] = 1; 
    10711078            } 
    10721079            $this->group_members = $members; 
     
    11271134            if (!$search || strstr(strtolower($group_name), strtolower($search))) 
    11281135            { 
    1129                 $group_id = base64_encode($group_name); 
     1136                $group_id = self::dn_encode($group_name); 
    11301137                $groups[$group_id]['ID'] = $group_id; 
    11311138                $groups[$group_id]['name'] = $group_name; 
     
    11531160        $base_dn = $this->groups_base_dn; 
    11541161        $new_dn = "cn=$group_name,$base_dn"; 
    1155         $new_gid = base64_encode($group_name); 
     1162        $new_gid = self::dn_encode($group_name); 
    11561163 
    11571164        $new_entry = array( 
     
    12231230        $old_dn = "cn=$group_name,$base_dn"; 
    12241231        $new_rdn = "cn=$new_name"; 
    1225         $new_gid = base64_encode($new_name); 
     1232        $new_gid = self::dn_encode($new_name); 
    12261233 
    12271234        $this->_debug("C: Rename [dn: $old_dn] [dn: $new_rdn]"); 
     
    12581265        $new_attrs = array(); 
    12591266        foreach (explode(",", $contact_ids) as $id) 
    1260             $new_attrs['member'][] = base64_decode($id); 
     1267            $new_attrs['member'][] = self::dn_decode($id); 
    12611268 
    12621269        $this->_debug("C: Add [dn: $group_dn]: ".print_r($new_attrs, true)); 
     
    12931300        $del_attrs = array(); 
    12941301        foreach (explode(",", $contact_ids) as $id) 
    1295             $del_attrs['member'][] = base64_decode($id); 
     1302            $del_attrs['member'][] = self::dn_decode($id); 
    12961303 
    12971304        $this->_debug("C: Delete [dn: $group_dn]: ".print_r($del_attrs, true)); 
     
    13241331 
    13251332        $base_dn = $this->groups_base_dn; 
    1326         $contact_dn = base64_decode($contact_id); 
     1333        $contact_dn = self::dn_decode($contact_id); 
    13271334        $filter = strtr("(member=$contact_dn)", array('\\' => '\\\\')); 
    13281335 
     
    13431350        { 
    13441351            $group_name = $ldap_data[$i]['cn'][0]; 
    1345             $group_id = base64_encode($group_name); 
     1352            $group_id = self::dn_encode($group_name); 
    13461353            $groups[$group_id] = $group_id; 
    13471354        } 
     
    14021409     * create ber encoding for sort control 
    14031410     * 
    1404      * @pararm array List of cols to sort by 
     1411     * @param array List of cols to sort by 
    14051412     * @return string BER encoded option value 
    14061413     */ 
     
    14561463     * Returns ascii string encoded in hex 
    14571464     */ 
    1458     private static function _string2hex($str) { 
     1465    private static function _string2hex($str) 
     1466    { 
    14591467        $hex = ''; 
    14601468        for ($i=0; $i < strlen($str); $i++) 
     
    14631471    } 
    14641472 
     1473    /** 
     1474     * HTML-safe DN string encoding 
     1475     * 
     1476     * @param string $str DN string 
     1477     * 
     1478     * @return string Encoded HTML identifier string 
     1479     */ 
     1480    static function dn_encode($str) 
     1481    { 
     1482        // @TODO: to make output string shorter we could probably 
     1483        //        remove dc=* items from it 
     1484        return rtrim(strtr(base64_encode($str), '+/', '-_'), '='); 
     1485    } 
     1486 
     1487    /** 
     1488     * Decodes DN string encoded with _dn_encode() 
     1489     * 
     1490     * @param string $str Encoded HTML identifier string 
     1491     * 
     1492     * @return string DN string 
     1493     */ 
     1494    static function dn_decode($str) 
     1495    { 
     1496        $str = str_pad(strtr($str, '-_', '+/'), strlen($str) % 4, '=', STR_PAD_RIGHT); 
     1497        return base64_decode($str); 
     1498    } 
    14651499} 
Note: See TracChangeset for help on using the changeset viewer.