diff options
Diffstat (limited to 'modules-available/sysconfig/inc')
5 files changed, 48 insertions, 15 deletions
diff --git a/modules-available/sysconfig/inc/configmodule.inc.php b/modules-available/sysconfig/inc/configmodule.inc.php index 2cee37a9..b6db9c4f 100644 --- a/modules-available/sysconfig/inc/configmodule.inc.php +++ b/modules-available/sysconfig/inc/configmodule.inc.php @@ -354,7 +354,7 @@ abstract class ConfigModule // Wait for generation if requested if ($timeoutMs > 0 && isset($ret['id']) && !Taskmanager::isFinished($ret)) $ret = Taskmanager::waitComplete($ret, $timeoutMs); - if ($ret === true || (isset($ret['statusCode']) && $ret['statusCode'] === TASK_FINISHED)) { + if ($ret === true || (isset($ret['statusCode']) && $ret['statusCode'] === Taskmanager::TASK_FINISHED)) { // Already Finished if (file_exists($this->moduleArchive) && !file_exists($tmpTgz)) $tmpTgz = false; // If generateInternal succeeded and there's no tmpTgz, it means the file didn't have to be updated diff --git a/modules-available/sysconfig/inc/configmodule/adauth.inc.php b/modules-available/sysconfig/inc/configmodule/adauth.inc.php index db06a4a4..ed7b318d 100644 --- a/modules-available/sysconfig/inc/configmodule/adauth.inc.php +++ b/modules-available/sysconfig/inc/configmodule/adauth.inc.php @@ -12,5 +12,5 @@ ConfigModule::registerModule( Dictionary::translateFileModule('sysconfig', 'config-module', 'adAuth_title'), // Title Dictionary::translateFileModule('sysconfig', 'config-module', 'adAuth_description'), // Description Dictionary::translateFileModule('sysconfig', 'config-module', 'group_authentication'), // Group - true // Only one per config? + false // Only one per config? ); diff --git a/modules-available/sysconfig/inc/configmodule/ldapauth.inc.php b/modules-available/sysconfig/inc/configmodule/ldapauth.inc.php index 1a706234..e8df2877 100644 --- a/modules-available/sysconfig/inc/configmodule/ldapauth.inc.php +++ b/modules-available/sysconfig/inc/configmodule/ldapauth.inc.php @@ -19,5 +19,5 @@ ConfigModule::registerModule( Dictionary::translateFileModule('sysconfig', 'config-module', 'ldapAuth_title'), // Title Dictionary::translateFileModule('sysconfig', 'config-module', 'ldapAuth_description'), // Description Dictionary::translateFileModule('sysconfig', 'config-module', 'group_authentication'), // Group - true // Only one per config? + false // Only one per config? ); diff --git a/modules-available/sysconfig/inc/configmodulebaseldap.inc.php b/modules-available/sysconfig/inc/configmodulebaseldap.inc.php index d6fc3ed9..9364c2e3 100644 --- a/modules-available/sysconfig/inc/configmodulebaseldap.inc.php +++ b/modules-available/sysconfig/inc/configmodulebaseldap.inc.php @@ -3,12 +3,13 @@ abstract class ConfigModuleBaseLdap extends ConfigModule { - const VERSION = 2; + const VERSION = 3; private static $REQUIRED_FIELDS = array('server', 'searchbase'); private static $OPTIONAL_FIELDS = array('binddn', 'bindpw', 'home', 'ssl', 'fixnumeric', 'fingerprint', 'certificate', 'homeattr', 'shareRemapMode', 'shareRemapCreate', 'shareDocuments', 'shareDownloads', 'shareDesktop', 'shareMedia', - 'shareOther', 'shareHomeDrive', 'shareDomain', 'credentialPassthrough', 'mapping'); + 'shareOther', 'shareHomeDrive', 'shareDomain', 'credentialPassthrough', 'mapping', 'genuid', + 'ldapAttrMountOpts', 'shareHomeMountOpts'); public static function getMapping($config = false, &$empty = true) { @@ -66,6 +67,7 @@ abstract class ConfigModuleBaseLdap extends ConfigModule if (!isset($config['fixnumeric'])) { $config['fixnumeric'] = 's'; } + $config['genuid'] = isset($config['genuid']) && !empty($config['genuid']); $this->preTaskmanagerHook($config); $task = Taskmanager::submit('CreateLdapConfig', $config); if (is_array($task) && isset($task['id'])) { diff --git a/modules-available/sysconfig/inc/configtgz.inc.php b/modules-available/sysconfig/inc/configtgz.inc.php index 17c9f35d..7b042cdb 100644 --- a/modules-available/sysconfig/inc/configtgz.inc.php +++ b/modules-available/sysconfig/inc/configtgz.inc.php @@ -63,7 +63,7 @@ class ConfigTgz foreach ($moduleIds as $module) { $idstr .= ',' . (int)$module; // Casting to int should make it safe } - $res = Database::simpleQuery("SELECT moduleid, filepath, status FROM configtgz_module WHERE moduleid IN ($idstr)"); + $res = Database::simpleQuery("SELECT moduleid, moduletype, filepath, status FROM configtgz_module WHERE moduleid IN ($idstr)"); // Delete old connections Database::exec("DELETE FROM configtgz_x_module WHERE configid = :configid", array('configid' => $this->configId)); // Make connection @@ -98,8 +98,13 @@ class ConfigTgz $files = array(); // Get all config modules for system config foreach ($this->modules as $module) { - if (!empty($module['filepath']) && file_exists($module['filepath'])) + if (!empty($module['filepath']) && file_exists($module['filepath'])) { $files[] = $module['filepath']; + } + if ($module['moduletype'] === 'SshConfig') { + // HACK XXX TODO Global + SSH ugly + self::rebuildEmptyGlobalConfig(); + } } $task = self::recompress($files, $this->file); @@ -107,7 +112,7 @@ class ConfigTgz // Wait for completion if ($timeoutMs > 0 && !Taskmanager::isFailed($task) && !Taskmanager::isFinished($task)) $task = Taskmanager::waitComplete($task, $timeoutMs); - if ($task === true || (isset($task['statusCode']) && $task['statusCode'] === TASK_FINISHED)) { + if ($task === true || (isset($task['statusCode']) && $task['statusCode'] === Taskmanager::TASK_FINISHED)) { // Success! $this->markUpdated(); return true; @@ -222,13 +227,39 @@ class ConfigTgz )); $res = Database::simpleQuery("SELECT configid FROM configtgz"); while ($row = $res->fetch(PDO::FETCH_ASSOC)) { - $module = self::get($row['configid']); - if ($module !== false) { - $module->generate(); + $configTgz = self::get($row['configid']); + if ($configTgz !== false) { + $configTgz->generate(); } } // Build the global "empty" config that just includes global hooks - self::recompress([], SysConfig::GLOBAL_MINIMAL_CONFIG); + self::rebuildEmptyGlobalConfig(); + } + + /** + * Rebuild the general "empty" config that only contains global hook modules + * and forced ones. + */ + private static function rebuildEmptyGlobalConfig() + { + static $onceOnly = false; + if ($onceOnly) + return; + $onceOnly = true; + // HACK TODO XXX -- just stuff (global) ssh config into this one for now, needs proper fix :-( + $res = Database::simpleQuery("SELECT DISTINCT cm.filepath FROM configtgz_module cm + INNER JOIN configtgz_x_module cxm USING (moduleid) + INNER JOIN configtgz_location cl USING (configid) + WHERE cm.moduletype = 'SshConfig' AND cm.status = 'OK' + ORDER BY locationid ASC"); + $extra = []; + while ($row = $res->fetch(PDO::FETCH_ASSOC)) { + if (file_exists($row['filepath'])) { + $extra[] = $row['filepath']; + break; + } + } + self::recompress($extra, SysConfig::GLOBAL_MINIMAL_CONFIG); } /** @@ -258,7 +289,7 @@ class ConfigTgz foreach ($moduleIds as $module) { $idstr .= ',' . (int)$module; // Casting to int should make it safe } - $res = Database::simpleQuery("SELECT moduleid, filepath, status FROM configtgz_module WHERE moduleid IN ($idstr)"); + $res = Database::simpleQuery("SELECT moduleid, moduletype, filepath, status FROM configtgz_module WHERE moduleid IN ($idstr)"); // Make connection while ($row = $res->fetch(PDO::FETCH_ASSOC)) { Database::exec("INSERT INTO configtgz_x_module (configid, moduleid) VALUES (:configid, :moduleid)", array( @@ -281,7 +312,7 @@ class ConfigTgz $instance->configId = $ret['configid']; $instance->configTitle = $ret['title']; $instance->file = $ret['filepath']; - $ret = Database::simpleQuery("SELECT moduleid, filepath, status FROM configtgz_x_module " + $ret = Database::simpleQuery("SELECT moduleid, moduletype, filepath, status FROM configtgz_x_module " . " INNER JOIN configtgz_module USING (moduleid) " . " WHERE configid = :configid", array('configid' => $instance->configId)); $instance->modules = array(); @@ -310,7 +341,7 @@ class ConfigTgz $instance->configId = $row['configid']; $instance->configTitle = $row['title']; $instance->file = $row['filepath']; - $innerRes = Database::simpleQuery("SELECT moduleid, filepath, status FROM configtgz_x_module " + $innerRes = Database::simpleQuery("SELECT moduleid, moduletype, filepath, status FROM configtgz_x_module " . " INNER JOIN configtgz_module USING (moduleid) " . " WHERE configid = :configid", array('configid' => $instance->configId)); $instance->modules = array(); |