1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95
|
<?php
/**
* This is a utility class, every method is static.
*
* $Horde: framework/LDAP/LDAP.php,v 1.5.12.10 2006/01/01 21:28:23 jan Exp $
*
* Copyright 1999-2006 Chuck Hagenbuch <chuck@horde.org>
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.fsf.org/copyleft/lgpl.html.
*
* @author Chuck Hagenbuch <chuck@horde.org>
* @since Horde 2.2
* @package Horde_LDAP
*/
class Horde_LDAP {
/**
* Return a boolean expression using the specified operator.
*
* @static
*
* @param string $lhs The attribute to test.
* @param string $op The operator.
* @param string $rhs The comparison value.
*
* @return string The LDAP search fragment.
*/
function buildClause($lhs, $op, $rhs)
{
switch ($op) {
case 'LIKE':
return empty($rhs) ?
sprintf('(%s=*)', $lhs) :
sprintf('(%s=*%s*)', $lhs, Horde_LDAP::quote($rhs));
default:
return sprintf('(%s%s%s)', $lhs, $op, Horde_LDAP::quote($rhs));
}
}
/**
* Escape characters with special meaning in LDAP searches.
*
* @static
*
* @param string $clause The string to escape.
*
* @return string The escaped string.
*/
function quote($clause)
{
return str_replace(array('\\', '(', ')', '*', "\0"),
array('\\5c', '\(', '\)', '\*', "\\00"),
$clause);
}
/**
* Take an array of DN elements and properly quote it according to RFC
* 1485.
*
* @static
*
* @param array $parts An array of tuples containing the attribute
* name and that attribute's value which make
* up the DN. Example:
*
* $parts = array(0 => array('cn', 'John Smith'),
* 1 => array('dc', 'example'),
* 2 => array('dc', 'com'));
*
* @return string The properly quoted string DN.
*/
function quoteDN($parts)
{
$dn = '';
$count = count($parts);
for ($i = 0; $i < $count; $i++) {
if ($i > 0) {
$dn .= ',';
}
$dn .= $parts[$i][0] . '=';
// See if we need to quote the value.
if (preg_match('/^\s|\s$|\s\s|[,+="\r\n<>#;]/', $parts[$i][1])) {
$dn .= '"' . str_replace('"', '\\"', $parts[$i][1]) . '"';
} else {
$dn .= $parts[$i][1];
}
}
return $dn;
}
}
|