| | |
| | | $res = null; |
| | | if ($this->conn && $dn) |
| | | { |
| | | $this->_debug("C: Read [dn: ".base64_decode($dn)."] [(objectclass=*)]"); |
| | | $dn = base64_decode($dn); |
| | | |
| | | if ($this->ldap_result = @ldap_read($this->conn, base64_decode($dn), '(objectclass=*)', array_values($this->fieldmap))) |
| | | $this->_debug("C: Read [dn: $dn] [(objectclass=*)]"); |
| | | |
| | | if ($this->ldap_result = @ldap_read($this->conn, $dn, '(objectclass=*)', array_values($this->fieldmap))) |
| | | $entry = ldap_first_entry($this->conn, $this->ldap_result); |
| | | else |
| | | $this->_debug("S: ".ldap_error($this->conn)); |
| | |
| | | $rec = array_change_key_case($rec, CASE_LOWER); |
| | | |
| | | // Add in the dn for the entry. |
| | | $rec['dn'] = base64_decode($dn); |
| | | $rec['dn'] = $dn; |
| | | $res = $this->_ldap2result($rec); |
| | | $this->result = new rcube_result_set(1); |
| | | $this->result->add($res); |
| | |
| | | } // end foreach |
| | | |
| | | // Build the new entries DN. |
| | | $dn = $this->prop['LDAP_rdn'].'='.$newentry[$this->prop['LDAP_rdn']].','.$this->prop['base_dn']; |
| | | $dn = $this->prop['LDAP_rdn'].'='.rcube_ldap::quote_string($newentry[$this->prop['LDAP_rdn']], true) |
| | | .','.$this->prop['base_dn']; |
| | | |
| | | $this->_debug("C: Add [dn: $dn]: ".print_r($newentry, true)); |
| | | |
| | |
| | | if (!empty($replacedata)) { |
| | | // Handle RDN change |
| | | if ($replacedata[$this->prop['LDAP_rdn']]) { |
| | | $newdn = $this->prop['LDAP_rdn'].'='.$replacedata[$this->prop['LDAP_rdn']].','.$this->prop['base_dn']; |
| | | $newdn = $this->prop['LDAP_rdn'].'=' |
| | | .rcube_ldap::quote_string($replacedata[$this->prop['LDAP_rdn']], true) |
| | | .','.$this->prop['base_dn']; |
| | | if ($dn != $newdn) { |
| | | $newrdn = $this->prop['LDAP_rdn'].'='.$replacedata[$this->prop['LDAP_rdn']]; |
| | | $newrdn = $this->prop['LDAP_rdn'].'=' |
| | | .rcube_ldap::quote_string($replacedata[$this->prop['LDAP_rdn']], true); |
| | | unset($replacedata[$this->prop['LDAP_rdn']]); |
| | | } |
| | | } |
| | |
| | | /** |
| | | * @static |
| | | */ |
| | | function quote_string($str) |
| | | function quote_string($str, $dn=false) |
| | | { |
| | | return strtr($str, array('*'=>'\2a', '('=>'\28', ')'=>'\29', '\\'=>'\5c')); |
| | | if ($dn) |
| | | $replace = array(','=>'\2c', '='=>'\3d', '+'=>'\2b', '<'=>'\3c', |
| | | '>'=>'\3e', ';'=>'\3b', '\\'=>'\5c', '"'=>'\22', '#'=>'\23'); |
| | | else |
| | | $replace = array('*'=>'\2a', '('=>'\28', ')'=>'\29', '\\'=>'\5c', |
| | | '/'=>'\2f'); |
| | | |
| | | return strtr($str, $replace); |
| | | } |
| | | |
| | | } |