diff options
5 files changed, 315 insertions, 84 deletions
diff --git a/modules-available/sysconfig/addmodule_adauth.inc.php b/modules-available/sysconfig/addmodule_adauth.inc.php index 1e76f108..b855761a 100644 --- a/modules-available/sysconfig/addmodule_adauth.inc.php +++ b/modules-available/sysconfig/addmodule_adauth.inc.php @@ -55,9 +55,9 @@ class AdAuth_CheckConnection extends AddModule_Base $ports = array(389, 3268); } $this->scanTask = Taskmanager::submit('PortScan', array( - 'host' => $this->server, - 'ports' => $ports, - 'certificate' => Request::post('certificate', '') + 'host' => $this->server, + 'ports' => $ports, + 'certificate' => Request::post('certificate', '') )); if (!isset($this->scanTask['id'])) { AddModule_Base::setStep('AdAuth_Start'); // Continues with AdAuth_Start for render() @@ -108,7 +108,7 @@ class AdAuth_SelfSearch extends AddModule_Base $bindpw = Request::post('bindpw'); $ssl = Request::post('ssl', 'off') === 'on'; if ($ssl && !Request::post('fingerprint')) { - Message::addError('main.error-read', 'fingerprint'); + Message::addError('error-read', 'fingerprint'); AddModule_Base::setStep('AdAuth_Start'); // Continues with AdAuth_Start for render() return; } @@ -129,11 +129,11 @@ class AdAuth_SelfSearch extends AddModule_Base $user = $out[1]; $this->originalBindDn = str_replace('/', '\\', $binddn); $selfSearch = Taskmanager::submit('LdapSearch', array( - 'server' => $uri, - 'searchbase' => $searchbase, - 'binddn' => $this->originalBindDn, - 'bindpw' => $bindpw, - 'filter' => "sAMAccountName=$user" + 'server' => $uri, + 'searchbase' => $searchbase, + 'binddn' => $this->originalBindDn, + 'bindpw' => $bindpw, + 'filter' => "sAMAccountName=$user" )); if (!isset($selfSearch['id'])) { AddModule_Base::setStep('AdAuth_Start'); // Continues with AdAuth_Start for render() @@ -185,7 +185,7 @@ class AdAuth_HomeAttrCheck extends AddModule_Base $bindpw = Request::post('bindpw'); $ssl = Request::post('ssl', 'off') === 'on'; if ($ssl && !Request::post('fingerprint')) { - Message::addError('main.error-read', 'fingerprint'); + Message::addError('error-read', 'fingerprint'); AddModule_Base::setStep('AdAuth_Start'); // Continues with AdAuth_Start for render() return; } @@ -219,22 +219,22 @@ class AdAuth_HomeAttrCheck extends AddModule_Base protected function renderInternal() { Render::addDialog(Dictionary::translateFile('config-module', 'adAuth_title'), false, 'ad-selfsearch', array_merge($this->taskIds, array( - 'edit' => Request::post('edit'), - 'title' => Request::post('title'), - 'server' => Request::post('server'), - 'port' => Request::post('port'), - 'searchbase' => Request::post('searchbase'), - 'binddn' => Request::post('binddn'), - 'bindpw' => Request::post('bindpw'), - 'home' => Request::post('home'), - 'homeattr' => Request::post('homeattr'), - 'ssl' => Request::post('ssl') === 'on', - 'fingerprint' => Request::post('fingerprint'), - 'certificate' => Request::post('certificate', ''), - 'originalbinddn' => Request::post('originalbinddn'), - 'tryHomeAttr' => true, - 'prev' => 'AdAuth_Start', - 'next' => 'AdAuth_CheckCredentials' + 'edit' => Request::post('edit'), + 'title' => Request::post('title'), + 'server' => Request::post('server'), + 'port' => Request::post('port'), + 'searchbase' => Request::post('searchbase'), + 'binddn' => Request::post('binddn'), + 'bindpw' => Request::post('bindpw'), + 'home' => Request::post('home'), + 'homeattr' => Request::post('homeattr'), + 'ssl' => Request::post('ssl') === 'on', + 'fingerprint' => Request::post('fingerprint'), + 'certificate' => Request::post('certificate', ''), + 'originalbinddn' => Request::post('originalbinddn'), + 'tryHomeAttr' => true, + 'prev' => 'AdAuth_Start', + 'next' => 'AdAuth_CheckCredentials' )) ); } @@ -255,7 +255,7 @@ class AdAuth_CheckCredentials extends AddModule_Base $bindpw = Request::post('bindpw'); $ssl = Request::post('ssl', 'off') === 'on'; if ($ssl && !Request::post('fingerprint')) { - Message::addError('main.error-read', 'fingerprint'); + Message::addError('error-read', 'fingerprint'); AddModule_Base::setStep('AdAuth_Start'); // Continues with AdAuth_Start for render() return; } @@ -271,10 +271,10 @@ class AdAuth_CheckCredentials extends AddModule_Base $uri = "ldap://$server:$port/"; } $ldapSearch = Taskmanager::submit('LdapSearch', array( - 'server' => $uri, - 'searchbase' => $searchbase, - 'binddn' => $binddn, - 'bindpw' => $bindpw + 'server' => $uri, + 'searchbase' => $searchbase, + 'binddn' => $binddn, + 'bindpw' => $bindpw )); if (!isset($ldapSearch['id'])) { AddModule_Base::setStep('AdAuth_Start'); // Continues with AdAuth_Start for render() @@ -290,36 +290,37 @@ class AdAuth_CheckCredentials extends AddModule_Base protected function renderInternal() { Render::addDialog(Dictionary::translateFile('config-module', 'adAuth_title'), false, 'ad_ldap-checkcredentials', array_merge($this->taskIds, array( - 'edit' => Request::post('edit'), - 'title' => Request::post('title'), - 'server' => Request::post('server') . ':' . Request::post('port'), - 'searchbase' => Request::post('searchbase'), - 'binddn' => Request::post('binddn'), - 'bindpw' => Request::post('bindpw'), - 'home' => Request::post('home'), - 'homeattr' => Request::post('homeattr'), - 'ssl' => Request::post('ssl') === 'on', - 'fingerprint' => Request::post('fingerprint'), - 'certificate' => Request::post('certificate', ''), - 'originalbinddn' => Request::post('originalbinddn'), - 'prev' => 'AdAuth_Start', - 'next' => 'AdAuth_Finish' + 'edit' => Request::post('edit'), + 'title' => Request::post('title'), + 'server' => Request::post('server') . ':' . Request::post('port'), + 'searchbase' => Request::post('searchbase'), + 'binddn' => Request::post('binddn'), + 'bindpw' => Request::post('bindpw'), + 'home' => Request::post('home'), + 'homeattr' => Request::post('homeattr'), + 'ssl' => Request::post('ssl') === 'on', + 'fingerprint' => Request::post('fingerprint'), + 'certificate' => Request::post('certificate', ''), + 'originalbinddn' => Request::post('originalbinddn'), + 'prev' => 'AdAuth_Start', + 'next' => 'AdAuth_HomeDir' )) ); } } -class AdAuth_Finish extends AddModule_Base +class AdAuth_HomeDir extends AddModule_Base { - private $taskIds; + private $searchbase; + private $binddn; protected function preprocessInternal() { - $binddn = Request::post('binddn'); - $searchbase = Request::post('searchbase'); - if (empty($searchbase)) { + $this->binddn = Request::post('binddn'); + $this->searchbase = Request::post('searchbase'); + if (empty($this->searchbase)) { // If no search base was given, determine it from the dn $originalBindDn = str_replace('\\', '/', trim(Request::post('originalbinddn'))); if (!preg_match('#^([^/]+)/[^/]+$#', $originalBindDn, $out)) { @@ -327,25 +328,81 @@ class AdAuth_Finish extends AddModule_Base Util::redirect('?do=SysConfig&action=addmodule&step=AdAuth_Start'); } // $out[1] is the domain // Find the domain in the dn - $i = mb_stripos($binddn, '=' . $out[1] . ','); + $i = mb_stripos($this->binddn, '=' . $out[1] . ','); if ($i === false) { Message::addError('main.value-invalid', 'binddn', $out[1]); Util::redirect('?do=SysConfig&action=addmodule&step=AdAuth_Start'); } // Now find ',' before it so we get the key - $i = mb_strrpos(mb_substr($binddn, 0, $i), ','); + $i = mb_strrpos(mb_substr($this->binddn, 0, $i), ','); if ($i === false) $i = -1; - $searchbase = mb_substr($binddn, $i + 1); + $this->searchbase = mb_substr($this->binddn, $i + 1); } else { $somedn = Request::post('somedn', false); if (!empty($somedn)) { - $i = stripos($somedn, $searchbase); + $i = stripos($somedn, $this->searchbase); if ($i !== false) { - $searchbase = substr($somedn, $i, strlen($searchbase)); + $this->searchbase = substr($somedn, $i, strlen($this->searchbase)); } } } + } + + protected function renderInternal() + { + $data = array( + 'edit' => Request::post('edit'), + 'title' => Request::post('title'), + 'server' => Request::post('server'), + 'searchbase' => $this->searchbase, + 'binddn' => $this->binddn, + 'bindpw' => Request::post('bindpw'), + 'home' => Request::post('home'), + 'homeattr' => Request::post('homeattr'), + 'ssl' => Request::post('ssl') === 'on', + 'fingerprint' => Request::post('fingerprint'), + 'certificate' => Request::post('certificate', ''), + 'originalbinddn' => Request::post('originalbinddn'), + 'prev' => 'AdAuth_Start', + 'next' => 'AdAuth_Finish' + ); + if ($this->edit !== false) { + foreach (self::getAttributes() as $key) { + if ($this->edit->getData($key)) { + $data[$key . '_c'] = 'checked="checked"'; + } + } + $data['shareRemapMode_' . $this->edit->getData('shareRemapMode')] = 'selected="selected"'; + $letter = $this->edit->getData('shareHomeDrive'); + } else { + $data['shareDownloads'] = $data['shareMedia'] = $data['shareDocuments'] = 'selected="selected"'; + $letter = 'H:'; + } + $data['drives'] = array(); + foreach (range('D', 'Z') as $l) { + $data['drives'][] = array( + 'drive' => $l . ':', + 'selected' => (strtoupper($letter{0}) === $l) ? 'selected="selected"' : '' + ); + } + Render::addDialog(Dictionary::translateFile('config-module', 'adAuth_title'), false, 'ad_ldap-homedir', $data); + } + + public static function getAttributes() + { + return array('shareRemapMode', 'shareRemapCreate', 'shareDocuments', 'shareDownloads', 'shareDesktop', 'shareMedia', 'shareOther', 'shareHomeDrive'); + } + +} + +class AdAuth_Finish extends AddModule_Base +{ + + private $taskIds; + + protected function preprocessInternal() + { $title = Request::post('title'); if (empty($title)) $title = 'AD: ' . Request::post('server'); @@ -355,13 +412,24 @@ class AdAuth_Finish extends AddModule_Base $module = $this->edit; $ssl = Request::post('ssl', 'off') === 'on'; $module->setData('server', Request::post('server')); - $module->setData('searchbase', $searchbase); - $module->setData('binddn', $binddn); + $module->setData('searchbase', Request::post('searchbase')); + $module->setData('binddn', Request::post('binddn')); $module->setData('bindpw', Request::post('bindpw')); $module->setData('home', Request::post('home')); $module->setData('homeattr', Request::post('homeattr')); $module->setData('certificate', Request::post('certificate')); $module->setData('ssl', $ssl); + foreach (AdAuth_HomeDir::getAttributes() as $key) { + $value = Request::post($key); + if (is_numeric($value)) { + settype($value, 'integer'); + } elseif ($value === 'on') { + $value = 1; + } elseif ($value === false) { + $value = 0; + } + $module->setData($key, $value); + } if ($ssl) { $module->setData('fingerprint', Request::post('fingerprint', '')); } else { @@ -386,7 +454,7 @@ class AdAuth_Finish extends AddModule_Base 'tm-config' => $tgz, ); } - + private function stopOldInstance() { if ($this->edit === false) diff --git a/modules-available/sysconfig/addmodule_ldapauth.inc.php b/modules-available/sysconfig/addmodule_ldapauth.inc.php index c2e4e1c2..a6ac145c 100644 --- a/modules-available/sysconfig/addmodule_ldapauth.inc.php +++ b/modules-available/sysconfig/addmodule_ldapauth.inc.php @@ -21,7 +21,7 @@ class LdapAuth_Start extends AddModule_Base $data['server'] = $out[1]; } $data['step'] = 'LdapAuth_CheckConnection'; - Render::addDialog(Dictionary::translate('config-module', 'ldapAuth_title'), false, 'ldap-start', $data); + Render::addDialog(Dictionary::translateFile('config-module', 'ldapAuth_title'), false, 'ldap-start', $data); } } @@ -51,9 +51,9 @@ class LdapAuth_CheckConnection extends AddModule_Base $ports = array(389, 3268); } $this->scanTask = Taskmanager::submit('PortScan', array( - 'host' => $this->server, - 'ports' => $ports, - 'certificate' => Request::post('certificate', '') + 'host' => $this->server, + 'ports' => $ports, + 'certificate' => Request::post('certificate', '') )); if (!isset($this->scanTask['id'])) { AddModule_Base::setStep('LdapAuth_Start'); // Continues with LdapAuth_Start for render() @@ -77,7 +77,7 @@ class LdapAuth_CheckConnection extends AddModule_Base ); $data['prev'] = 'LdapAuth_Start'; $data['next'] = 'LdapAuth_CheckCredentials'; - Render::addDialog(Dictionary::translate('config-module', 'ldapAuth_title'), false, 'ad_ldap-checkconnection', $data); + Render::addDialog(Dictionary::translateFile('config-module', 'ldapAuth_title'), false, 'ad_ldap-checkconnection', $data); } } @@ -96,7 +96,7 @@ class LdapAuth_CheckCredentials extends AddModule_Base $bindpw = Request::post('bindpw'); $ssl = Request::post('ssl', 'off') === 'on'; if ($ssl && !Request::post('fingerprint')) { - Message::addError('main.error-read', 'fingerprint'); + Message::addError('error-read', 'fingerprint'); AddModule_Base::setStep('LdapAuth_Start'); // Continues with LdapAuth_Start for render() return; } @@ -113,12 +113,12 @@ class LdapAuth_CheckCredentials extends AddModule_Base $uri = "ldap://$server/"; } $ldapSearch = Taskmanager::submit('LdapSearch', array( - 'parentTask' => $parent, - 'server' => $uri, - 'searchbase' => $searchbase, - 'binddn' => $binddn, - 'bindpw' => $bindpw, - 'plainldap' => true, + 'parentTask' => $parent, + 'server' => $uri, + 'searchbase' => $searchbase, + 'binddn' => $binddn, + 'bindpw' => $bindpw, + 'plainldap' => true, )); if (!isset($ldapSearch['id'])) { AddModule_Base::setStep('LdapAuth_Start'); // Continues with LdapAuth_Start for render() @@ -133,21 +133,85 @@ class LdapAuth_CheckCredentials extends AddModule_Base protected function renderInternal() { - Render::addDialog(Dictionary::translate('config-module', 'ldapAuth_title'), false, 'ad_ldap-checkcredentials', array_merge($this->taskIds, array( + Render::addDialog(Dictionary::translateFile('config-module', 'ldapAuth_title'), false, 'ad_ldap-checkcredentials', array_merge($this->taskIds, array( + 'edit' => Request::post('edit'), + 'title' => Request::post('title'), + 'server' => Request::post('server') . ':' . Request::post('port'), + 'searchbase' => Request::post('searchbase'), + 'binddn' => Request::post('binddn'), + 'bindpw' => Request::post('bindpw'), + 'home' => Request::post('home'), + 'ssl' => Request::post('ssl') === 'on', + 'fingerprint' => Request::post('fingerprint'), + 'certificate' => Request::post('certificate', ''), + 'prev' => 'LdapAuth_Start', + 'next' => 'LdapAuth_HomeDir' + )) + ); + } + +} + +class LdapAuth_HomeDir extends AddModule_Base +{ + + private $searchbase; + + protected function preprocessInternal() + { + $this->searchbase = Request::post('searchbase'); + $somedn = Request::post('somedn', false); + if (!empty($somedn)) { + $i = stripos($somedn, $this->searchbase); + if ($i !== false) { + $this->searchbase = substr($somedn, $i, strlen($this->searchbase)); + } + } + } + + protected function renderInternal() + { + $data = array( 'edit' => Request::post('edit'), 'title' => Request::post('title'), - 'server' => Request::post('server') . ':' . Request::post('port'), - 'searchbase' => Request::post('searchbase'), + 'server' => Request::post('server'), + 'searchbase' => $this->searchbase, 'binddn' => Request::post('binddn'), 'bindpw' => Request::post('bindpw'), 'home' => Request::post('home'), + 'homeattr' => Request::post('homeattr'), 'ssl' => Request::post('ssl') === 'on', 'fingerprint' => Request::post('fingerprint'), 'certificate' => Request::post('certificate', ''), + 'originalbinddn' => Request::post('originalbinddn'), 'prev' => 'LdapAuth_Start', 'next' => 'LdapAuth_Finish' - )) ); + if ($this->edit !== false) { + foreach (self::getAttributes() as $key) { + if ($this->edit->getData($key)) { + $data[$key . '_c'] = 'checked="checked"'; + } + } + $data['shareRemapMode_' . $this->edit->getData('shareRemapMode')] = 'selected="selected"'; + $letter = $this->edit->getData('shareHomeDrive'); + } else { + $data['shareDownloads'] = $data['shareMedia'] = $data['shareDocuments'] = 'selected="selected"'; + $letter = 'H:'; + } + $data['drives'] = array(); + foreach (range('D', 'Z') as $l) { + $data['drives'][] = array( + 'drive' => $l . ':', + 'selected' => (strtoupper($letter{0}) === $l) ? 'selected="selected"' : '' + ); + } + Render::addDialog(Dictionary::translateFile('config-module', 'ldapAuth_title'), false, 'ad_ldap-homedir', $data); + } + + public static function getAttributes() + { + return array('shareRemapMode', 'shareRemapCreate', 'shareDocuments', 'shareDownloads', 'shareDesktop', 'shareMedia', 'shareOther', 'shareHomeDrive'); } } @@ -168,13 +232,6 @@ class LdapAuth_Finish extends AddModule_Base $module = ConfigModule::getInstance('LdapAuth'); else $module = $this->edit; - $somedn = Request::post('somedn', false); - if (!empty($somedn)) { - $i = stripos($somedn, $searchbase); - if ($i !== false) { - $searchbase = substr($somedn, $i, strlen($searchbase)); - } - } $ssl = Request::post('ssl', 'off') === 'on'; $module->setData('server', Request::post('server')); $module->setData('searchbase', $searchbase); @@ -183,6 +240,17 @@ class LdapAuth_Finish extends AddModule_Base $module->setData('home', Request::post('home')); $module->setData('certificate', Request::post('certificate')); $module->setData('ssl', $ssl); + foreach (LdapAuth_HomeDir::getAttributes() as $key) { + $value = Request::post($key); + if (is_numeric($value)) { + settype($value, 'integer'); + } elseif ($value === 'on') { + $value = 1; + } elseif ($value === false) { + $value = 0; + } + $module->setData($key, $value); + } if ($ssl) { $module->setData('fingerprint', Request::post('fingerprint', '')); } else { @@ -207,7 +275,7 @@ class LdapAuth_Finish extends AddModule_Base 'tm-config' => $tgz, ); } - + private function stopOldInstance() { if ($this->edit === false) @@ -228,7 +296,7 @@ class LdapAuth_Finish extends AddModule_Base protected function renderInternal() { - Render::addDialog(Dictionary::translate('config-module', 'ldapAuth_title'), false, 'ldap-finish', $this->taskIds); + Render::addDialog(Dictionary::translateFile('config-module', 'ldapAuth_title'), false, 'ldap-finish', $this->taskIds); } } diff --git a/modules-available/sysconfig/lang/de/template-tags.json b/modules-available/sysconfig/lang/de/template-tags.json index c1cf8be8..1914fd9b 100644 --- a/modules-available/sysconfig/lang/de/template-tags.json +++ b/modules-available/sysconfig/lang/de/template-tags.json @@ -33,19 +33,26 @@ "lang_download": "Herunterladen", "lang_downloadLong": "Dieses Modul \"so wie es ist\" herunterladen.", "lang_editLong": "Modul oder Konfiguration bearbeiten.", + "lang_folderRedirection": "Folder Redirection", "lang_generateModule": "Modul erzeugen", + "lang_handlingNotes": "Hier k\u00f6nnen Sie festlegen, wie Netzwerk-Shares (inkl. des Home-Verzeichnisses) an Virtuelle Maschinen durchgereicht werden. In \u00e4lteren Versionen von bwLehrpool wurden die VMware Shared Folders genutzt, was mit bestimmten file servern Probleme verursachen konnte. Der neue native Modus funktioniert deutlich besser, ist aber bei Windows-G\u00e4sten darauf angewiesen, dass (1) der file server smb\/cifs spricht (z.B. Windows Server, Samba unter Linux) und (2) die openslx.exe im Autostart eingebunden ist (bei den bwLehrpool Vorlagen bereits der Fall). Der native Modus mit Fallback auf VMware ist experimentell und kann dazu f\u00fchren, dass die VM in regelm\u00e4\u00dfigen Abst\u00e4nden H\u00e4nger hat. WICHTIG: Bitte w\u00e4hlen Sie einen Laufwerksbuchstaben, der in den eingesetzten VMs verf\u00fcgbar ist, da ansonsten auf einen anderen Buchstaben ausgewichen werden muss.", "lang_helpHomeAttrHead": "Name des Home-Verzeichnis-Attributs", "lang_helpHomeAttrText": "Hier k\u00f6nnen Sie alternativ zum fest vorgegebenem Template des Home-Verzeichnis Servers den Attributsnamen im Active Directory angeben, der diesen Pfad bereitstellt. Normalerweise ist dies \"homeDirectory\". Wird das Feld leer gelassen, versucht der Assistent, das Attribut selbstst\u00e4ndig zu ermitteln. Falls das Einbinden der Home-Verzeichnisse anschlie\u00dfend nicht funktioniert, \u00fcberpr\u00fcfen Sie bitte den Client-Log (Status->Client Log) und den LDAP-Proxy-Log (Status->Server Status).", "lang_helpModuleConfiguration": "Konfigurationsmodule sind die Bausteine, aus denen eine Systemkonfiguration erstellt wird. Hier lassen sich sowohl generische Module durch einen Wizard anlegen, als auch komplett eigene Module erstellen (fortgeschritten, Linuxkenntnisse erforderlich).", "lang_helpSystemConfiguration": "\u00dcber eine Systemkonfiguration wird die grundlegende Lokalisierung des bwLehrpool-Systems durchgef\u00fchrt. Dazu geh\u00f6ren Aspekte wie das Authentifizierungsverfahren f\u00fcr Benutzer (z.B. Active Directory, LDAP), Druckerkonfiguration, Home-Verzeichnisse, etc. Eine Systemkonfiguration setzt sich aus einem oder mehreren Konfigurationsmodulen zusammen, welche im angrenzenden Panel verwaltet werden k\u00f6nnen.", "lang_homeAttr": "Home-Attribut", "lang_homeAttributeExplanation": "Bitte w\u00e4hlen Sie das Attribut, welches das Home-Verzeichnis der User enth\u00e4lt.", + "lang_homedirHandling": "(Home-)Verzeichnis Einbindung", "lang_ldapStarted": "Der LDAP-Proxy wurde gestartet", "lang_ldapText1": "Mit diesem Wizard k\u00f6nnen Sie Authentifizierung gegen einen LDAP-Server einrichten.", "lang_ldapText2": "Zu diesem Zweck wird ein LDAP-Proxy auf dem Satelliten-Server gestartet. Dies bedeutet, dass der LDAP-Server von diesem Server aus erreichbar sein muss. Die Pool-PCs hingegen m\u00fcssen nicht direkt mit dem LDAP-Server kommunizieren k\u00f6nnen.", "lang_legend": "Legende", "lang_listenPort": "Listen port", "lang_listenPortInfo": "Der Port, auf dem der sshd lauscht. Der offizielle Standard ist 22.", + "lang_mapModeNative": "Nativ direkt in der VM einbinden [openslx.exe]", + "lang_mapModeNativeFallback": "Nativ in der VM einbinden; Fallback auf VMware Shared Folders", + "lang_mapModeNone": "Verzeichnisse nicht durchreichen", + "lang_mapModeVmware": "VMware Shared Folders [VMwareTools]", "lang_moduleChoose": "Bitte w\u00e4hlen Sie aus, welche Art Konfigurationsmodul Sie erstellen m\u00f6chten.", "lang_moduleConfiguration": "Konfigurationsmodule", "lang_moduleName": "Modulname", @@ -63,6 +70,7 @@ "lang_rebuild": "Neu generieren", "lang_rebuildLong": "Modul oder Konfiguration neu generieren. Das entsprechende Modul bzw. Konfiguration ist aktuell und sollte nicht neu generiert werden m\u00fcssen.", "lang_rebuildOutdatedLong": "Modul oder Konfiguration neu generieren. Das entsprechende Modul bzw. Konfiguration ist veraltet oder nicht vorhanden.", + "lang_redirectionWarning": "ACHTUNG: Diese Funktion ist experimentell. Sie biegt nach dem Starten mittels openslx.exe die ausgew\u00e4hlten Verzeichnisse auf das Home-Verzeichnis des angemeldeten Benutzers um (getestet mit Windows 7 und 10). Da hierzu undokumentierte Windows-Einstellungen zur Laufzeit ge\u00e4ndert werden ist nicht garantiert, dass diese Methode in sp\u00e4teren Versionen\/Updates von Windows noch funktioniert. Wir empfehlen, stattdessen die Verzeichnisse - sofern gew\u00fcnscht - bereits in der Vorlage auf den oben konfigurierten Laufwerksbuchstaben des Home-Verzeichnisses umzukonfigurieren.", "lang_restartWizard": "Wizard neu starten", "lang_rootKey": "root pubkey (\u00f6ffentlicher Schl\u00fcssel)", "lang_rootKeyInfo": "Tragen Sie hier den \u00f6ffentlichen Schl\u00fcssel eines Schl\u00fcsselpaars ein, mit dem Sie sich als root-Benutzer an den Clients anmelden wollen. Lassen Sie das Feld leer, um diese Funktion nicht zu verwenden.", @@ -70,6 +78,14 @@ "lang_selectFile": "Bitte w\u00e4hlen Sie ein Archiv", "lang_selectHomeAttribute": "Home-Attribut", "lang_selfSignedNote": "Das Zertifikat des Servers scheint selbst signiert zu sein. Wenn Sie fortfahren wird versucht, die Zertifikatskette vom Server abzufragen. Dies ist in den meisten F\u00e4llen erfolgreich, sollte aber nur getan werden wenn Sie wissen, dass das Zertifikat des Servers von einer unbekannten CA signiert wurde. Falls die Authentifizierung anschlie\u00dfend nicht funktioniert, \u00fcberpr\u00fcfen Sie die LDAP-Proxy Logs auf der Serverstatus-Seite.", + "lang_shareDesktop": "Desktop (Achtung: Vom Dozent angelegte Verkn\u00fcpfungen nicht sichtbar!)", + "lang_shareDocuments": "Eigene Dokumente", + "lang_shareDownloads": "Downloads", + "lang_shareHomeDrive": "Home-Verzeichnis Buchstabe (Windows)", + "lang_shareMapCreate": "Ordner auf dem Netzlaufwerk bei Bedarf anlegen", + "lang_shareMedia": "Eigene Musik, Videos, Bilder", + "lang_shareOther": "Andere (Saved Games, Kontakte, Favoriten, ...)", + "lang_shareRemapMode": "Einbindemodus", "lang_show": "Ansehen", "lang_showLong": "Inhalt des Moduls anzeigen.", "lang_skip": "Weiter", diff --git a/modules-available/sysconfig/lang/en/template-tags.json b/modules-available/sysconfig/lang/en/template-tags.json index 2e42d1f5..c333f6af 100644 --- a/modules-available/sysconfig/lang/en/template-tags.json +++ b/modules-available/sysconfig/lang/en/template-tags.json @@ -70,7 +70,7 @@ "lang_rebuild": "Rebuild", "lang_rebuildLong": "Rebuild module or configuration.", "lang_rebuildOutdatedLong": "Rebuild module or configuration. The module\/configuration is outdated or missing and should be regenerated.", - "lang_redirectionWarning": "WARNING: This feature is experimental. It remaps the selected folders after the VM booted (via openslx.exe) to the logged in user's home drive. This might cause problems with applications that start before the pathes are patched, as they will see the old unpatched settings. This also doesn't work fully on Windows 10. If you want to reliably remap these directories, it's recommended to change their locations in the VM before uploading it.", + "lang_redirectionWarning": "WARNING: This feature is experimental. It remaps the selected folders after the VM booted (via openslx.exe) to the logged in user's home drive. This might cause problems with applications that start before the pathes are patched, as they will see the old unpatched settings. Please note that this is usign undocumented or unsupported techniques to achieve this goal. It is not guaranteed that this method will work in future versions or updates of Windows. If you want to reliably remap these directories, you might want to change their locations in the VM before uploading it.", "lang_restartWizard": "Restart wizard", "lang_rootKey": "root pubkey", "lang_rootKeyInfo": "Here you can add the public key of a keypair that you want to use for authentication as root-user. Leave this field blank to disable the feature.", diff --git a/modules-available/sysconfig/templates/ad_ldap-homedir.html b/modules-available/sysconfig/templates/ad_ldap-homedir.html new file mode 100644 index 00000000..c6250175 --- /dev/null +++ b/modules-available/sysconfig/templates/ad_ldap-homedir.html @@ -0,0 +1,79 @@ +<div class="slx-bold"> + {{lang_homedirHandling}} +</div> +<div><i>{{lang_handlingNotes}}</i></div> + +<!-- 'shareRemapMode', 'shareRemapCreate', 'shareDocuments', 'shareDownloads', 'shareDesktop', 'shareMedia', 'shareOther' --> + +<form method="post" class="form-horizontal" action="?do=SysConfig&action=addmodule&step={{next}}"> + <input type="hidden" name="token" value="{{token}}"> + <input type="hidden" name="edit" value="{{edit}}"> + <input name="title" value="{{title}}" type="hidden"> + <input name="server" value="{{server}}" type="hidden"> + <input name="searchbase" value="{{searchbase}}" type="hidden"> + <input name="binddn" value="{{binddn}}" type="hidden"> + <input name="bindpw" value="{{bindpw}}" type="hidden"> + <input name="home" value="{{home}}" type="hidden"> + <input name="homeattr" value="{{homeattr}}" type="hidden"> + {{#ssl}} + <input name="ssl" value="on" type="hidden"> + <input type="hidden" name="certificate" value="{{certificate}}"> + {{/ssl}} + <input name="fingerprint" value="{{fingerprint}}" type="hidden"> + + <div class="form-group row"> + <label for="inputshareRemapMode" class="control-label col-xs-4">{{lang_shareRemapMode}}</label> + <div class="col-xs-8"> + <select class="form-control" id="inputshareRemapMode" name="shareRemapMode"> + <option value="0" {{shareRemapMode_0}}>{{lang_mapModeNone}}</option> + <option value="1" {{shareRemapMode_1}}>{{lang_mapModeNative}}</option> + <option value="3" {{shareRemapMode_3}}>{{lang_mapModeVmware}}</option> + <option value="2" {{shareRemapMode_2}}>{{lang_mapModeNativeFallback}}</option> + </select> + </div> + </div> + <div class="form-group row"> + <label for="inputshareHomeDrive" class="control-label col-xs-4">{{lang_shareHomeDrive}}</label> + <div class="col-xs-8"> + <select class="form-control" id="inputshareHomeDrive" name="shareHomeDrive"> + {{#drives}} + <option {{selected}}>{{drive}}</option> + {{/drives}} + </select> + </div> + </div> + <hr> + <div class="slx-bold">{{lang_folderRedirection}}</div> + <div><i>{{lang_redirectionWarning}}</i></div> + <div> + <label class="control-label"><input type="checkbox" name="shareDocuments" {{shareDocuments_c}}> {{lang_shareDocuments}}</label> + </div> + <div> + <label class="control-label"><input type="checkbox" name="shareDownloads" {{shareDownloads_c}}> {{lang_shareDownloads}}</label> + </div> + <div> + <label class="control-label"><input type="checkbox" name="shareDesktop" {{shareDesktop_c}}> {{lang_shareDesktop}}</label> + </div> + <div> + <label class="control-label"><input type="checkbox" name="shareMedia" {{shareMedia_c}}> {{lang_shareMedia}}</label> + </div> + <div> + <label class="control-label"><input type="checkbox" name="shareOther" {{shareOther_c}}> {{lang_shareOther}}</label> + </div> + <div class="row"> + <div class="col-xs-2"></div> + <div class="col-xs-10"> + <label class="control-label"><input type="checkbox" name="shareRemapCreate" {{shareRemapCreate_c}}> {{lang_shareMapCreate}}</label> + </div> + </div> + <!--hr> + <div class="slx-bold">{{lang_additionalFolders}}</div> + <div><i>{{lang_addFoldersInfo}}</i></div> + + <br> + <div><i>{{lang_driveLetterNote}}</i></div--> + <div class="pull-right"> + <button type="submit" class="btn btn-primary">{{lang_next}} »</button> + </div> + <div class="clearfix"></div> +</form>
\ No newline at end of file |