summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSimon Rettberg2014-10-16 14:35:39 +0200
committerSimon Rettberg2014-10-16 14:35:39 +0200
commitfd00aabfae44d2b5dc2a6e554ef8884fe5615d4d (patch)
tree5fe59827a58bf614a939793c32258ee6afcced5e
parentShow notice in menu bar if setup is incomplete (diff)
downloadslx-admin-fd00aabfae44d2b5dc2a6e554ef8884fe5615d4d.tar.gz
slx-admin-fd00aabfae44d2b5dc2a6e554ef8884fe5615d4d.tar.xz
slx-admin-fd00aabfae44d2b5dc2a6e554ef8884fe5615d4d.zip
AD-Setup now supports short name domain\account instead of just DN
-rw-r--r--lang/de/templates/sysconfig/ad-start.json6
-rw-r--r--modules/sysconfig/addmodule_ad.inc.php84
-rw-r--r--templates/sysconfig/ad-checkconnection.html32
-rw-r--r--templates/sysconfig/ad-start.html30
4 files changed, 97 insertions, 55 deletions
diff --git a/lang/de/templates/sysconfig/ad-start.json b/lang/de/templates/sysconfig/ad-start.json
index cf4aa59d..b7cfd856 100644
--- a/lang/de/templates/sysconfig/ad-start.json
+++ b/lang/de/templates/sysconfig/ad-start.json
@@ -1,7 +1,7 @@
{
- "lang_adText1": "Zum Einrichten der Benutzerauthentifizierung \u00fcber ein Active Directory wird neben der Adresse des anzusprechenden Servers ein dedizierter Benutzer im AD ben\u00f6tigt, \u00fcber welchen das AD angesprochen wird.",
+ "lang_adText1": "Zum Einrichten der Benutzerauthentifizierung \u00fcber ein Active Directory wird neben der Adresse des anzusprechenden Servers ein dedizierter Benutzer im AD ben\u00f6tigt, \u00fcber welchen das AD angesprochen wird. Der Benutzer sollte in der gleichen Dom\u00e4ne sein, wie die Benutzer, die sich sp\u00e4ter an den Arbeitsstationen anmelden werden. Ansonsten ist es notwendig, die Suchbasis anzugeben.",
"lang_adText2": "Dieser Benutzer ben\u00f6tigt keine besonderen Rechte, Sie k\u00f6nnen diesem Benutzer zur Sicherheit auch die Rechte zum Anmelden entziehen. Der Benutzer muss lediglich ausreichende Berechtigungen haben, um einen LDAP-Bind am AD durchzuf\u00fchren, und nach Benutzern zu suchen.",
- "lang_adText3": "Im Folgenden muss der Distinguished Name des Benutzers angegeben werden. Diesen k\u00f6nnen Sie ermitteln, indem Sie das Kommandozeilenprogramm dsquery auf einem Domain Controller wie folgt aufrufen:",
+ "lang_adText3": "Normalerweise k\u00f6nnen Sie als Bind DN die Kurzform im Format dom\u00e4ne\\benutzer angeben. Wenn dies nicht funktioniert, m\u00fcssen Sie den DN des Benutzers ermitteln. Z.B. unter Eingabe des folgenden Befehls auf einem DC:",
"lang_adText4": "Nach Eingabe aller ben\u00f6tigten Daten wird im n\u00e4chsten Schritt \u00fcberpr\u00fcft, ob die Kommunikation mit dem AD m\u00f6glich ist.",
"lang_bindDN": "Bind DN",
"lang_close": "Schlie\u00dfen",
@@ -9,7 +9,7 @@
"lang_password": "Passwort",
"lang_searchBase": "Suchbasis",
"lang_userDirectory": "Benutzerverzeichnis",
- "lang_userDirectoryInfo1": "Optionale Angabe: Wenn die Clients f\u00fcr die Benutzer ein eigenes Verzeichnis (Homeverzeichnis, Benutzerverzeichnis) von einem Server einbinden sollen, geben Sie bitte hier das Format in UNC-Notation an, also z.B. ",
+ "lang_userDirectoryInfo1": "Optionale Angabe: Wenn die Clients f\u00fcr die Benutzer ein eigenes Verzeichnis (Homeverzeichnis, Benutzerverzeichnis) von einem Server einbinden sollen, geben Sie bitte hier das Format in UNC-Notation an, also z.B.",
"lang_userDirectoryInfo2": "%s ist dabei ein Platzhalter f\u00fcr den Login-Namen des Benutzers.",
"lang_userDirectoryInfo3": "Das Verzeichnis wird mit den gleichen Zugangsdaten eingebunden, die der Benutzer beim Login angibt. (D.h. kein Kerberos Support o.\u00e4.)"
} \ No newline at end of file
diff --git a/modules/sysconfig/addmodule_ad.inc.php b/modules/sysconfig/addmodule_ad.inc.php
index a85c5d06..e188a54b 100644
--- a/modules/sysconfig/addmodule_ad.inc.php
+++ b/modules/sysconfig/addmodule_ad.inc.php
@@ -4,8 +4,7 @@
* Wizard for setting up active directory integration for authentication.
*/
-Page_SysConfig::addModule('AD_AUTH', 'AdModule_Start', Dictionary::translate('lang_adAuthentication'),
- Dictionary::translate('lang_adModule'), Dictionary::translate('lang_authentication'), true
+Page_SysConfig::addModule('AD_AUTH', 'AdModule_Start', Dictionary::translate('lang_adAuthentication'), Dictionary::translate('lang_adModule'), Dictionary::translate('lang_authentication'), true
);
class AdModule_Start extends AddModule_Base
@@ -29,25 +28,45 @@ class AdModule_Start extends AddModule_Base
class AdModule_CheckConnection extends AddModule_Base
{
+
private $taskIds;
+ private $originalBindDn;
protected function preprocessInternal()
{
$server = Request::post('server');
- $searchbase = Request::post('searchbase');
+ $searchbase = Request::post('searchbase', '');
$binddn = Request::post('binddn');
$bindpw = Request::post('bindpw');
- if (empty($server) || empty($searchbase) || empty($binddn)) {
+ if (empty($server) || empty($binddn)) {
Message::addError('empty-field');
AddModule_Base::setStep('AdModule_Start'); // Continues with AdModule_Start for render()
return;
}
+ $parent = null;
+ $this->originalBindDn = '';
+ if (preg_match('#^\w+[/\\\\](\w+)$#', $binddn, $out)) {
+ $user = $out[1];
+ $this->originalBindDn = str_replace('/', '\\', $binddn);
+ $selfSearch = Taskmanager::submit('LdapSearch', array(
+ 'server' => $server,
+ 'searchbase' => $searchbase,
+ 'binddn' => $this->originalBindDn,
+ 'bindpw' => $bindpw,
+ 'username' => $user
+ ));
+ if (!isset($selfSearch['id'])) {
+ AddModule_Base::setStep('AdModule_Start'); // Continues with AdModule_Start for render()
+ return;
+ }
+ $parent = $selfSearch['id'];
+ }
$ldapSearch = Taskmanager::submit('LdapSearch', array(
- 'home' => Request::post('home'),
- 'server' => $server,
- 'searchbase' => $searchbase,
- 'binddn' => $binddn,
- 'bindpw' => $bindpw
+ 'parentTask' => $parent,
+ 'server' => $server,
+ 'searchbase' => $searchbase,
+ 'binddn' => $binddn,
+ 'bindpw' => $bindpw
));
if (!isset($ldapSearch['id'])) {
AddModule_Base::setStep('AdModule_Start'); // Continues with AdModule_Start for render()
@@ -56,18 +75,20 @@ class AdModule_CheckConnection extends AddModule_Base
$this->taskIds = array(
'tm-search' => $ldapSearch['id']
);
+ if (isset($selfSearch['id']))
+ $this->taskIds['self-search'] = $selfSearch['id'];
}
-
+
protected function renderInternal()
{
- Render::addDialog(Dictionary::translate('lang_adAuthentication'), false, 'sysconfig/ad-checkconnection',
- array_merge($this->taskIds, array(
- 'server' => Request::post('server'),
- 'searchbase' => Request::post('searchbase'),
- 'binddn' => Request::post('binddn'),
- 'bindpw' => Request::post('bindpw'),
- 'home' => Request::post('home'),
- 'step' => 'AdModule_Finish'
+ Render::addDialog(Dictionary::translate('lang_adAuthentication'), false, 'sysconfig/ad-checkconnection', array_merge($this->taskIds, array(
+ 'server' => Request::post('server'),
+ 'searchbase' => Request::post('searchbase'),
+ 'binddn' => Request::post('binddn'),
+ 'bindpw' => Request::post('bindpw'),
+ 'home' => Request::post('home'),
+ 'originalbinddn' => $this->originalBindDn,
+ 'step' => 'AdModule_Finish'
))
);
}
@@ -81,12 +102,22 @@ class AdModule_Finish extends AddModule_Base
protected function preprocessInternal()
{
- $config = ConfigModule::insertAdConfig('AD: ' . Request::post('server'),
- Request::post('server'),
- Request::post('searchbase'),
- Request::post('binddn'),
- Request::post('bindpw', ''),
- Request::post('home', '')
+ $binddn = Request::post('binddn');
+ $searchbase = Request::post('searchbase');
+ if (empty($searchbase)) {
+ $originalBindDn = Request::post('originalbinddn');
+ if (!preg_match('#^(\w+)[/\\\\]\w+$#', $originalBindDn, $out)) {
+ Message::addError('value-invalid', 'binddn', $originalBindDn);
+ Util::redirect('?do=SysConfig&action=addmodule&step=AdModule_Start');
+ }
+ $i = mb_stripos($binddn, '=' . $out[1] . ',');
+ if ($i === false) {
+ Message::addError('value-invalid', $binddn, $out[1]);
+ Util::redirect('?do=SysConfig&action=addmodule&step=AdModule_Start');
+ }
+ $searchbase = mb_substr($binddn, $i + 1);
+ }
+ $config = ConfigModule::insertAdConfig('AD: ' . Request::post('server'), Request::post('server'), $searchbase, $binddn, Request::post('bindpw', ''), Request::post('home', '')
);
$config['proxyip'] = Property::getServerIp();
$tgz = Taskmanager::submit('CreateAdConfig', $config);
@@ -98,11 +129,10 @@ class AdModule_Finish extends AddModule_Base
'tm-config' => $tgz['id'],
);
}
-
+
protected function renderInternal()
{
- Render::addDialog(Dictionary::translate('lang_adAuthentication'), false, 'sysconfig/ad-finish',
- $this->taskIds
+ Render::addDialog(Dictionary::translate('lang_adAuthentication'), false, 'sysconfig/ad-finish', $this->taskIds
);
}
diff --git a/templates/sysconfig/ad-checkconnection.html b/templates/sysconfig/ad-checkconnection.html
index e321dc6e..eb4afea2 100644
--- a/templates/sysconfig/ad-checkconnection.html
+++ b/templates/sysconfig/ad-checkconnection.html
@@ -3,6 +3,7 @@
</p>
<div id="zeug">
+ <div data-tm-id="{{self-search}}" data-tm-log="messages" data-tm-callback="selfCb">LDAP Self-Query</div>
<div data-tm-id="{{tm-search}}" data-tm-log="messages" data-tm-callback="ldapCb">LDAP Test-Query</div>
</div>
<br>
@@ -22,22 +23,33 @@
<input type="hidden" name="token" value="{{token}}">
<input name="server" value="{{server}}" type="hidden">
<input name="searchbase" value="{{searchbase}}" type="hidden">
- <input name="binddn" value="{{binddn}}" type="hidden">
+ <input id="setdn" name="binddn" value="{{binddn}}" type="hidden">
<input name="bindpw" value="{{bindpw}}" type="hidden">
<input name="home" value="{{home}}" type="hidden">
+ <input name="originalbinddn" value="{{binddn}}" type="hidden">
<button id="nextbutton" type="submit" class="btn btn-primary">{{lang_skip}} &raquo;</button>
</form>
</div>
<script type="text/javascript">
-function ldapCb(task)
-{
- if (!task || !task.statusCode)
- return;
- if (task.statusCode === 'TASK_FINISHED') {
- $('#nextbutton').html('Weiter &raquo;');
+ function ldapCb(task)
+ {
+ if (!task || !task.statusCode)
+ return;
+ if (task.statusCode === 'TASK_FINISHED') {
+ $('#nextbutton').html('Weiter &raquo;');
+ }
+ if (task.statusCode === 'TASK_ERROR' || task.statusCode === 'PARENT_FAILED') {
+ $('#nextbutton').html('Trotzdem weiter &raquo;');
+ }
}
- if (task.statusCode === 'TASK_ERROR' || task.statusCode === 'PARENT_FAILED') {
- $('#nextbutton').html('Trotzdem weiter &raquo;');
+ function selfCb(task)
+ {
+ if (!task || !task.statusCode)
+ return;
+ if (task.statusCode === 'TASK_FINISHED' && task.data && task.data.dn) {
+ $('#setdn').val(task.data.dn);
+ } else {
+ $('#nextbutton').html('Trotzdem weiter &raquo;');
+ }
}
-}
</script>
diff --git a/templates/sysconfig/ad-start.html b/templates/sysconfig/ad-start.html
index c3606825..f14f639b 100644
--- a/templates/sysconfig/ad-start.html
+++ b/templates/sysconfig/ad-start.html
@@ -13,32 +13,32 @@
<form role="form" method="post" action="?do=SysConfig&amp;action=addmodule&amp;step={{step}}">
<input type="hidden" name="token" value="{{token}}">
<div class="input-group">
- <span class="input-group-addon slx-ga">Server </span>
+ <span class="input-group-addon slx-ga">Server *</span>
<input tabindex="1" name="server" value="{{server}}" type="text" class="form-control" placeholder="dc0.institution.example.com">
- <span class="input-group-btn">
+ <!--span class="input-group-btn">
<a class="btn btn-default"><span class="glyphicon glyphicon-question-sign"></span></a>
- </span>
+ </span-->
</div>
<div class="input-group">
- <span class="input-group-addon slx-ga">{{lang_searchBase}}</span>
- <input tabindex="2" name="searchbase" value="{{searchbase}}" type="text" class="form-control" placeholder="dc=windows,dc=hs-beispiel,dc=de">
- <span class="input-group-btn">
+ <span class="input-group-addon slx-ga">{{lang_bindDN}} *</span>
+ <input tabindex="2" name="binddn" value="{{binddn}}" type="text" class="form-control" placeholder="domain\bwlp *ODER* CN=bwlp,OU=Benutzer,DC=domain,DC=hs-beispiel,DC=de">
+ <!--span class="input-group-btn">
<a class="btn btn-default"><span class="glyphicon glyphicon-question-sign"></span></a>
- </span>
+ </span-->
</div>
<div class="input-group">
- <span class="input-group-addon slx-ga">{{lang_bindDN}}</span>
- <input tabindex="3" name="binddn" value="{{binddn}}" type="text" class="form-control" placeholder="CN=bwlehrpool user,OU=Benutzer,OU=Gruppe XYZ,DC=windows,DC=hs-beispiel,DC=de">
- <span class="input-group-btn">
+ <span class="input-group-addon slx-ga">{{lang_password}} *</span>
+ <input tabindex="3" name="bindpw" value="{{bindpw}}" type="text" class="form-control" placeholder="{{lang_password}}">
+ <!--span class="input-group-btn">
<a class="btn btn-default"><span class="glyphicon glyphicon-question-sign"></span></a>
- </span>
+ </span-->
</div>
<div class="input-group">
- <span class="input-group-addon slx-ga">{{lang_password}}</span>
- <input tabindex="4" name="bindpw" value="{{bindpw}}" type="text" class="form-control" placeholder="{{lang_password}}">
- <span class="input-group-btn">
+ <span class="input-group-addon slx-ga">{{lang_searchBase}}</span>
+ <input tabindex="4" name="searchbase" value="{{searchbase}}" type="text" class="form-control" placeholder="dc=windows,dc=hs-beispiel,dc=de">
+ <!--span class="input-group-btn">
<a class="btn btn-default"><span class="glyphicon glyphicon-question-sign"></span></a>
- </span>
+ </span-->
</div>
<br>
<div class="input-group">