/usr/share/php/Horde/Kolab/Server/Structure/Ldap.php is in php-horde-kolab-server 2.0.2-2.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 | <?php
/**
* A structural handler for the tree of objects stored in LDAP.
*
* PHP version 5
*
* @category Kolab
* @package Kolab_Server
* @author Gunnar Wrobel <wrobel@pardus.de>
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
/**
* This class provides methods to deal with the LDAP tree structure.
*
* Copyright 2008-2013 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @category Kolab
* @package Kolab_Server
* @author Gunnar Wrobel <wrobel@pardus.de>
* @license http://www.horde.org/licenses/lgpl21 LGPL 2.1
* @link http://pear.horde.org/index.php?package=Kolab_Server
*/
class Horde_Kolab_Server_Structure_Ldap extends Horde_Kolab_Server_Structure_Base
{
/**
* Returns the set of objects supported by this structure.
*
* @return array An array of supported objects.
*/
public function getSupportedObjects()
{
return array(
'Horde_Kolab_Server_Object',
);
}
/**
* Returns the set of search operations supported by this object type.
*
* @return array An array of supported search operations.
*/
public function getSearchOperations()
{
$searches = array(
'Horde_Kolab_Server_Search_Operation_Guid',
'Horde_Kolab_Server_Search_Operation_Attributes',
'Horde_Kolab_Server_Search_Operation_Children',
'Horde_Kolab_Server_Search_Operation_Guidforcn',
);
return $searches;
}
/**
* Determine the type of an object by its tree position and other
* parameters.
*
* @param string $guid The GUID of the object to examine.
*
* @return string The class name of the corresponding object type.
*
* @throws Horde_Kolab_Server_Exception If the object type is unknown.
*/
public function determineType($guid)
{
$ocs = $this->getObjectClasses($guid);
return $this->_determineType($guid, $ocs);
}
/**
* Determine the type of an object by its tree position and other
* parameters.
*
* @param string $guid The GUID of the object to examine.
* @param array $ocs The object classes of the object to examine.
*
* @return string The class name of the corresponding object type.
*
* @throws Horde_Kolab_Server_Exception If the object type is unknown.
*/
protected function _determineType($guid, array $ocs)
{
$ocs = array_reverse($ocs);
foreach ($ocs as $oc) {
try {
$class_name = 'Horde_Kolab_Server_Object_' . ucfirst(strtolower($oc));
Horde_Kolab_Server_Object_Factory::loadClass($class_name);
return $class_name;
} catch (Horde_Kolab_Server_Exception $e) {
}
}
throw new Horde_Kolab_Server_Exception(
sprintf("Unknown object type for GUID %s.", $guid),
Horde_Kolab_Server_Exception::SYSTEM
);
}
/**
* Generates a GUID for the given information.
*
* @param string $type The class name of the object to create.
* @param string $id The id of the object.
* @param array $info Any additional information about the object to create.
*
* @return string The GUID.
*/
public function generateServerGuid($type, $id, array $info)
{
return sprintf('%s,%s', $id, $this->getComposite()->server->getBaseGuid());
}
/**
* Get the LDAP object classes for the given GUID.
*
* This is meant to be a shortcut for the structure handler. It should be
* used when determining the object type.
*
* @param string $guid GUID of the object.
*
* @return array An array of object classes.
*
* @throws Horde_Kolab_Server_Exception If the object has no
* object classes.
*/
protected function getObjectClasses($guid)
{
$object = $this->getComposite()->server->read(
$guid, array('objectClass')
);
if (!isset($object['objectClass'])) {
throw new Horde_Kolab_Server_Exception(
sprintf(
"The object %s has no %s attribute!",
$guid, 'objectClass'
),
Horde_Kolab_Server_Exception::SYSTEM
);
}
$result = array_map(
'strtolower',
$object['objectClass']
);
return $result;
}
public function getExternalAttribute(
$name,
Horde_Kolab_Server_Object_Interface $object
) {
$class = ucfirst(strtolower($name));
$object_attribute_class = 'Horde_Kolab_Server_Object_Attribute_'
. $class;
$structure_attribute_class = 'Horde_Kolab_Server_Structure_Attribute_'
. $class;
if (class_exists($structure_attribute_class)) {
$structure_attribute = new $structure_attribute_class($object, $name);
} else {
switch ($name) {
case 'Firstnamelastname':
$structure_attribute = new Horde_Kolab_Server_Structure_Attribute_Double(
$object, array('givenName', 'sn')
);
break;
default:
$structure_attribute = new Horde_Kolab_Server_Structure_Attribute_Value(
$object, $name
);
break;
}
}
switch ($name) {
case 'objectClass':
$structure_attribute = new Horde_Kolab_Server_Structure_Attribute_Locked(
$structure_attribute
);
default:
break;
}
if (class_exists($object_attribute_class)) {
$object_attribute = new $object_attribute_class($structure_attribute, $name);
} else {
switch ($name) {
default:
$object_attribute = new Horde_Kolab_Server_Object_Attribute_Value(
$structure_attribute, $name
);
break;
}
}
/* case 'Guid': */
/* return 'dn'; */
/* case 'Uid': */
/* return 'uid'; */
/* case 'Mail': */
/* return 'mail'; */
/* case 'Alias': */
/* return 'alias'; */
/* case 'Delegate': */
/* return 'kolabDelegate'; */
/* case 'Firstnamelastname': */
/* return array('givenName', 'sn'); */
/* case 'Openldapaci': */
/* return 'openLDAPaci'; */
/* case 'Kolabhomeserver': */
/* return 'kolabHomeServer'; */
/* case 'Kolabfreebusyhost': */
/* //@todo: rename to kolabFreeBusyService(Url) */
/* return 'kolabFreeBusyServer'; */
/* case 'Createtimestamp': */
/* case 'Createtimestampdate': */
/* return 'createTimeStamp'; */
/* case 'Modifytimestamp': */
/* case 'Modifytimestampdate': */
/* return 'modifyTimeStamp'; */
/* case 'Id': */
/* return null; */
/* default: */
/* throw new Horde_Kolab_Server_Exception( */
/* sprintf('Undefined internal attribute "%s"', $external) */
/* ); */
/* } */
return $object_attribute;
}
/**
* Maps the external attribute name to its internal counterpart(s).
*
* @param string $external The external attribute name.
*
* @return string The internal attribute name(s).
*/
private function _mapExternalToInternal($external)
{
switch ($external) {
case 'Guid':
return 'dn';
case 'Uid':
return 'uid';
case 'Mail':
return 'mail';
case 'Alias':
return 'alias';
case 'Delegate':
return 'kolabDelegate';
case 'Firstnamelastname':
return array('givenName', 'sn');
case 'Openldapaci':
return 'openLDAPaci';
case 'Kolabhomeserver':
return 'kolabHomeServer';
case 'Kolabfreebusyhost':
//@todo: rename to kolabFreeBusyService(Url)
return 'kolabFreeBusyServer';
case 'Createtimestamp':
case 'Createtimestampdate':
return 'createTimeStamp';
case 'Modifytimestamp':
case 'Modifytimestampdate':
return 'modifyTimeStamp';
case 'Id':
return null;
default:
return $external;
}
}
/**
* Maps the external attribute name to its internal counterpart.
*
* @param string $external The external attribute name.
*
* @return string The internal attribute name.
*/
public function mapExternalToInternalAttribute($external)
{
$internal = $this->_mapExternalToInternal($external);
if (is_string($internal)) {
return $internal;
} else if (is_array($internal)) {
throw new Horde_Kolab_Server_Exception('Multiple internal attributes!');
} else if ($internal === null) {
throw new Horde_Kolab_Server_Exception('No internal attribute mapping!');
}
throw new Horde_Kolab_Server_Exception(
sprintf(
'Invalid internal attribute mapping: %s',
print_r($internal, true)
)
);
}
/**
* Maps the external attribute names to their internal counterparts.
*
* @param string $external The external attribute names.
*
* @return string The internal attribute names.
*/
public function mapExternalToInternalAttributes(array $external)
{
$result = array();
foreach ($external as $attribute) {
$internal = $this->_mapExternalToInternal($attribute);
$result = array_merge($result, (array) $internal);
}
$result = array_unique($result);
return $result;
}
}
|