diff options
Diffstat (limited to 'modules-available/sysconfig/inc/configmodulebaseldap.inc.php')
-rw-r--r-- | modules-available/sysconfig/inc/configmodulebaseldap.inc.php | 68 |
1 files changed, 48 insertions, 20 deletions
diff --git a/modules-available/sysconfig/inc/configmodulebaseldap.inc.php b/modules-available/sysconfig/inc/configmodulebaseldap.inc.php index ad3d32c5..770a40e6 100644 --- a/modules-available/sysconfig/inc/configmodulebaseldap.inc.php +++ b/modules-available/sysconfig/inc/configmodulebaseldap.inc.php @@ -3,15 +3,15 @@ abstract class ConfigModuleBaseLdap extends ConfigModule { - const VERSION = 3; + const VERSION = 4; private static $REQUIRED_FIELDS = array('server', 'searchbase'); - private static $OPTIONAL_FIELDS = array('binddn', 'bindpw', 'home', 'ssl', 'fixnumeric', 'fingerprint', 'certificate', 'homeattr', + private static $OPTIONAL_FIELDS = array('binddn', 'bindpw', 'home', 'ssl', 'fingerprint', 'certificate', 'homeattr', 'shareRemapMode', 'shareRemapCreate', 'shareDocuments', 'shareDownloads', 'shareDesktop', 'shareMedia', 'shareOther', 'shareHomeDrive', 'shareDomain', 'credentialPassthrough', 'mapping', 'genuid', 'ldapAttrMountOpts', 'shareHomeMountOpts', 'nohomewarn'); - public static function getMapping($config = false, &$empty = true) + public static function getMapping(array $config = null, ?bool &$empty = true): array { $list = array( ['name' => 'uid', 'field' => 'uid', 'ad' => 'sAMAccountName'], @@ -32,12 +32,43 @@ abstract class ConfigModuleBaseLdap extends ConfigModule return $list; } - protected function generateInternal($tgz, $parent) + public static function getActiveModuleIds() { - $np = Trigger::ldadp($this->id(), $parent); - if ($np !== false) { - $parent = $np; + return Database::queryColumnArray("SELECT DISTINCT moduleid FROM configtgz_module" + . " INNER JOIN configtgz_x_module USING (moduleid)" + . " INNER JOIN configtgz USING (configid)" + . " INNER JOIN configtgz_location USING (configid)" + . " WHERE moduletype IN ('AdAuth', 'LdapAuth')"); + } + + /** + * Launch all ldadp instances that need to be running. + * + * @param string $command start, restart, check + * @param bool|int|int[] $ids list of IDs to run command on, or false meaning "all" + * @param string|null $parent if not NULL, this will be the parent task of the launch-task + * @return boolean|string false on error, id of task otherwise + */ + public static function ldadp(string $command = 'start', $ids = false, string $parent = null) + { + if ($ids === false) { + $ids = self::getActiveModuleIds(); + } elseif (!is_array($ids)) { + $ids = [$ids]; } + $task = Taskmanager::submit('LdadpLauncher', array( + 'ids' => $ids, + 'command' => $command, + 'parentTask' => $parent, + 'failOnParentFail' => false + )); + if (!isset($task['id'])) + return false; + return $task['id']; + } + + protected function generateInternal(string $tgz, ?string $parent) + { $config = $this->moduleData; if (isset($config['certificate']) && !is_string($config['certificate'])) { unset($config['certificate']); @@ -64,15 +95,14 @@ abstract class ConfigModuleBaseLdap extends ConfigModule if (!isset($config['shareHomeDrive'])) { $config['shareHomeDrive'] = 'H:'; } - if (!isset($config['fixnumeric'])) { - $config['fixnumeric'] = 's'; - } - $config['genuid'] = isset($config['genuid']) && !empty($config['genuid']); + // This is now always on, as we mask it transparently in our lightdm greeter + $config['fixnumeric'] = 'true'; + $config['genuid'] = !empty($config['genuid']); $config['nohomewarn'] = isset($config['nohomewarn']) ? (int)$config['nohomewarn'] : 0; $this->preTaskmanagerHook($config); $task = Taskmanager::submit('CreateLdapConfig', $config); if (is_array($task) && isset($task['id'])) { - Trigger::ldadp(null, $task['id']); + self::ldadp('restart', $this->id(), $task['id']); } return $task; } @@ -81,25 +111,23 @@ abstract class ConfigModuleBaseLdap extends ConfigModule * Hook called before running CreateLdapConfig task with the * configuration to be passed to the task. Passed by reference * so it can be modified. - * - * @param array $config */ - protected function preTaskmanagerHook(&$config) + protected function preTaskmanagerHook(array &$config) { } - protected function moduleVersion() + protected function moduleVersion(): int { return self::VERSION; } - protected function validateConfig() + protected function validateConfig(): bool { // Check if required fields are filled - return Util::hasAllKeys($this->moduleData, self::$REQUIRED_FIELDS); + return ArrayUtil::hasAllKeys($this->moduleData, self::$REQUIRED_FIELDS); } - public function setData($key, $value) + public function setData(string $key, $value): bool { if (!in_array($key, self::$REQUIRED_FIELDS) && !in_array($key, self::$OPTIONAL_FIELDS)) return false; @@ -112,7 +140,7 @@ abstract class ConfigModuleBaseLdap extends ConfigModule /** * Server IP changed - rebuild all AD modules. */ - public function event_serverIpChanged() + public function event_serverIpChanged(): void { $this->generate(false); } |