summaryrefslogtreecommitdiffstats
path: root/lib/kolab_api_service.php
diff options
context:
space:
mode:
Diffstat (limited to 'lib/kolab_api_service.php')
-rw-r--r--lib/kolab_api_service.php61
1 files changed, 60 insertions, 1 deletions
diff --git a/lib/kolab_api_service.php b/lib/kolab_api_service.php
index 0c7182a..1c8480f 100644
--- a/lib/kolab_api_service.php
+++ b/lib/kolab_api_service.php
@@ -28,6 +28,7 @@
*/
abstract class kolab_api_service
{
+ protected $base_dn = null;
protected $cache = array();
protected $conf;
protected $controller;
@@ -155,13 +156,31 @@ abstract class kolab_api_service
// Static attributes score
$elem_values_score = 0;
foreach ((array) $elem['attributes']['fields'] as $attr => $value) {
+ // Skip the object classes we have already compared
+ if ($attr == "objectclass") {
+ continue;
+ }
+
$v = $attributes[$attr];
+
if (is_array($value)) {
+ foreach ($value as $_value) {
+ $_value = $this->conf->expand($_value, $custom = Array('base_dn' => $this->base_dn()));
+
+ if (in_array($_value, (array)$v)) {
+ $elem_values_score++;
+ }
+ }
+
$value = implode('', $value);
+ } else {
+ $value = $this->conf->expand($_value, $custom = Array('base_dn' => $this->base_dn()));
}
+
if (is_array($v)) {
$v = implode('', $v);
}
+
$elem_values_score += intval($v == $value);
}
@@ -350,11 +369,19 @@ abstract class kolab_api_service
if (isset($type_attrs['fields'])) {
foreach ($type_attrs['fields'] as $key => $value) {
if (!is_array($value)) {
- $value2 = $this->conf->expand($value);
+ $value2 = $this->conf->expand($value, $custom = Array('base_dn' => $this->base_dn()));
if ($value !== $value2) {
Log::trace("Made value " . var_export($value, TRUE) . " in to: " . var_export($value2, TRUE));
$value = $value2;
}
+ } else {
+ foreach ($value as $_key => $_value) {
+ $_value2 = $this->conf->expand($_value, $custom = Array('base_dn' => $this->base_dn()));
+ if ($_value !== $_value2) {
+ Log::trace("Made value " . var_export($_value, TRUE) . " in to: " . var_export($_value2, TRUE));
+ $value[$_key] = $_value2;
+ }
+ }
}
if (empty($attribs[$key])) {
@@ -663,4 +690,36 @@ abstract class kolab_api_service
return $this->cache['unique_attributes'][$dn] = $result;
}
+
+ private function base_dn()
+ {
+ if (!empty($this->base_dn)) {
+ return $this->base_dn;
+ }
+
+ // Get the domain information for expansion later
+ $auth = Auth::get_instance();
+ $domain_info = $auth->domain_info($_SESSION['user']->get_domain());
+ $domain_info = $domain_info[key($domain_info)];
+ $dna = $this->conf->get('domain_name_attribute');
+
+ if (empty($dna)) {
+ $dna = 'associateddomain';
+ }
+
+ $domain = $domain_info[$dna];
+ if (is_array($domain)) {
+ $domain = $domain[0];
+ }
+
+ $dba = 'inetdomainbasedn';
+
+ if (empty($domain_info[$dba])) {
+ $this->base_dn = 'dc=' . implode('dc=,', explode('.', $domain));
+ } else {
+ $this->base_dn = $domain_info[$dba];
+ }
+
+ return $this->base_dn;
+ }
}