From d635a52fd965519eecb717ea5b953a5f12ef9b88 Mon Sep 17 00:00:00 2001 From: Simon Rettberg Date: Tue, 7 Jul 2020 16:36:46 +0200 Subject: [systemstatus/sysconfig] Manage LDADP via systemd Finally got rid of our own little service manager. Status/restart handling capabilities were added to the system status page. TODO: Permissions for dnbd3, service (re)starting in general --- modules-available/sysconfig/hooks/cron.inc.php | 2 -- .../sysconfig/inc/configmodulebaseldap.inc.php | 41 +++++++++++++++++++--- modules-available/sysconfig/page.inc.php | 5 ++- 3 files changed, 40 insertions(+), 8 deletions(-) (limited to 'modules-available/sysconfig') diff --git a/modules-available/sysconfig/hooks/cron.inc.php b/modules-available/sysconfig/hooks/cron.inc.php index b518ca06..b959060d 100644 --- a/modules-available/sysconfig/hooks/cron.inc.php +++ b/modules-available/sysconfig/hooks/cron.inc.php @@ -1,7 +1,5 @@ location where the location has been deleted Database::exec("DELETE c FROM configtgz_location c LEFT JOIN location l USING (locationid) diff --git a/modules-available/sysconfig/inc/configmodulebaseldap.inc.php b/modules-available/sysconfig/inc/configmodulebaseldap.inc.php index ad3d32c5..39f4f68e 100644 --- a/modules-available/sysconfig/inc/configmodulebaseldap.inc.php +++ b/modules-available/sysconfig/inc/configmodulebaseldap.inc.php @@ -32,12 +32,43 @@ abstract class ConfigModuleBaseLdap extends ConfigModule return $list; } - protected function generateInternal($tgz, $parent) + public static function getActiveModuleIds() + { + 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 $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($command = 'start', $ids = false, $parent = null) { - $np = Trigger::ldadp($this->id(), $parent); - if ($np !== false) { - $parent = $np; + 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($tgz, $parent) + { $config = $this->moduleData; if (isset($config['certificate']) && !is_string($config['certificate'])) { unset($config['certificate']); @@ -72,7 +103,7 @@ abstract class ConfigModuleBaseLdap extends ConfigModule $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']); // TODO: Use --restart for this one only } return $task; } diff --git a/modules-available/sysconfig/page.inc.php b/modules-available/sysconfig/page.inc.php index 7f2277dc..64162294 100644 --- a/modules-available/sysconfig/page.inc.php +++ b/modules-available/sysconfig/page.inc.php @@ -343,7 +343,10 @@ class Page_SysConfig extends Page Database::exec("INSERT INTO configtgz_location (locationid, configid) VALUES (:locationid, :configid)" . " ON DUPLICATE KEY UPDATE configid = :configid", compact('locationid', 'configid')); } - Event::activeConfigChanged(); + $task = ConfigModuleBaseLdap::ldadp(); + if ($task !== false) { + TaskmanagerCallback::addCallback($task, 'ldadpStartup'); + } Util::redirect('?do=sysconfig&locationid=' . $this->currentLoc); } -- cgit v1.2.3-55-g7522