From c91ab412df35a869193f716d0cdf37e49033b496 Mon Sep 17 00:00:00 2001 From: cajus Date: Mon, 21 Apr 2008 08:24:55 +0000 Subject: [PATCH] Added alternative password reading git-svn-id: https://oss.gonicus.de/repositories/gosa/trunk@10578 594d385d-05f5-0310-b6e9-bd551577e9d8 --- gosa-core/include/class_config.inc | 57 ++++++++++++++++++++++++++---- 1 file changed, 51 insertions(+), 6 deletions(-) diff --git a/gosa-core/include/class_config.inc b/gosa-core/include/class_config.inc index a4d7888fa..3ff6be3f5 100644 --- a/gosa-core/include/class_config.inc +++ b/gosa-core/include/class_config.inc @@ -220,7 +220,7 @@ class config { /* Build new connection */ $this->ldap= ldap_init ($this->current['SERVER'], $this->current['BASE'], - $this->current['ADMIN'], $this->current['PASSWORD']); + $this->get_admin_dn(), $this->get_admin_password()); /* Check for connection */ if (is_null($this->ldap) || (is_int($this->ldap) && $this->ldap == 0)){ @@ -321,6 +321,13 @@ class config { /* Convert BASE to have escaped special characters */ $this->current['BASE']= @LDAP::convert($this->current['BASE']); + /* Load server informations */ + $this->load_servers(); + } + + + function update_credentials_from_config() + { /* Parse LDAP referral informations */ if (!isset($this->current['ADMIN']) || !isset($this->current['PASSWORD'])){ $url= $this->current['SERVER']; @@ -329,10 +336,50 @@ class config { $this->current['PASSWORD']= $referral['PASSWORD']; } - /* Load server informations */ - $this->load_servers(); + /* Bail out if problematic */ + if (!isset($this->current['ADMIN']) || !isset($this->current['PASSWORD'])){ + msg_dialog::display(_("Configuration error"), _("Cannot find any administrative LDAP credentials!"), FATAL_ERROR_DIALOG); + exit; + } + } + + + function encode_server_url($url, $base, $val) + { + return (preg_replace("/_+/", "_", "HTTP_".strtr(strtoupper($url."_".md5($base)."_$val"), "-:/", "___"))); } + + function get_admin_dn() + { + $enc= $this->encode_server_url($this->current['SERVER'], $this->current['BASE'], "ADMIN"); + + /* Answer from http request */ + if (isset($_SERVER[$enc])){ + return $_SERVER[$enc]; + } + + /* Answer in old style for compatibility */ + $this->update_credentials_from_config(); + return $this->current['ADMIN']; + } + + + function get_admin_password() + { + $enc= $this->encode_server_url($this->current['SERVER'], $this->current['BASE'], "PASSWORD"); + + /* Answer from http request */ + if (isset($_SERVER[$enc])){ + return $_SERVER[$enc]; + } + + /* Answer in old style for compatibility */ + $this->update_credentials_from_config(); + return $this->current['PASSWORD']; + } + + function load_servers () { /* Only perform actions if current is set */ @@ -378,9 +425,7 @@ class config { if ($ldap->count()){ $attrs= $ldap->fetch(); $this->data['SERVERS']['KERBEROS']= array( 'SERVER' => $attrs['cn'][0], - 'REALM' => $attrs['goKrbRealm'][0], - 'ADMIN' => $attrs['goKrbAdmin'][0], - 'PASSWORD' => $attrs['goKrbPassword'][0]); + 'REALM' => $attrs['goKrbRealm'][0]); } /* Get cups server. FIXME: only one is supported currently */ -- 2.30.2