From 4c507232c752e35e03eda5e11c2ca901ae4114d6 Mon Sep 17 00:00:00 2001 From: Michael Kaufmann Date: Fri, 30 Jul 2021 12:16:37 +0200 Subject: [PATCH] add setting for a custom system group for all customer-users (required libnss-extrausers); fixes #953 Signed-off-by: Michael Kaufmann --- actions/admin/settings/100.panel.php | 8 ------ actions/admin/settings/210.security.php | 15 ++++++++++- install/froxlor.sql | 5 ++-- .../updates/froxlor/0.10/update_0.10.inc.php | 11 ++++++++ lib/Froxlor/Cron/System/Extrausers.php | 24 ++++++++++++++--- lib/Froxlor/Froxlor.php | 2 +- lib/Froxlor/Validate/Check.php | 26 +++++++++++++++++++ lng/czech.lng.php | 4 --- lng/dutch.lng.php | 4 --- lng/english.lng.php | 8 +++--- lng/french.lng.php | 4 --- lng/german.lng.php | 8 +++--- lng/italian.lng.php | 4 --- lng/portugues.lng.php | 1 - templates/Sparkle/header.tpl | 2 -- 15 files changed, 84 insertions(+), 42 deletions(-) diff --git a/actions/admin/settings/100.panel.php b/actions/admin/settings/100.panel.php index 9195c9c0..e7a248cb 100644 --- a/actions/admin/settings/100.panel.php +++ b/actions/admin/settings/100.panel.php @@ -77,14 +77,6 @@ return array( 'default' => false, 'save_method' => 'storeSettingField' ), - 'panel_no_robots' => array( - 'label' => $lng['serversettings']['no_robots'], - 'settinggroup' => 'panel', - 'varname' => 'no_robots', - 'type' => 'bool', - 'default' => true, - 'save_method' => 'storeSettingField' - ), 'panel_paging' => array( 'label' => $lng['serversettings']['paging'], 'settinggroup' => 'panel', diff --git a/actions/admin/settings/210.security.php b/actions/admin/settings/210.security.php index 62542c67..1cecb59e 100644 --- a/actions/admin/settings/210.security.php +++ b/actions/admin/settings/210.security.php @@ -82,7 +82,20 @@ return array( 'string_emptyallowed' => true, 'default' => '', 'save_method' => 'storeSettingField' - ) + ), + 'system_froxlorusergroup' => array( + 'label' => $lng['serversettings']['froxlorusergroup'], + 'settinggroup' => 'system', + 'varname' => 'froxlorusergroup', + 'type' => 'string', + 'default' => '', + 'save_method' => 'storeSettingField', + 'plausibility_check_method' => array( + '\\Froxlor\\Validate\\Check', + 'checkLocalGroup' + ), + 'visible' => \Froxlor\Settings::Get('system.nssextrausers') + ), ) ) ) diff --git a/install/froxlor.sql b/install/froxlor.sql index 5b7e8274..3f793925 100644 --- a/install/froxlor.sql +++ b/install/froxlor.sql @@ -679,6 +679,8 @@ opcache.interned_strings_buffer'), ('system', 'soaemail', ''), ('system', 'domaindefaultalias', '0'), ('system', 'createstdsubdom_default', '1'), + ('system', 'froxlorusergroup', ''), + ('system', 'froxlorusergroup_gid', ''), ('api', 'enabled', '0'), ('2fa', 'enabled', '1'), ('panel', 'decimal_places', '4'), @@ -691,7 +693,6 @@ opcache.interned_strings_buffer'), ('panel', 'paging', '20'), ('panel', 'natsorting', '1'), ('panel', 'sendalternativemail', '0'), - ('panel', 'no_robots', '1'), ('panel', 'allow_domain_change_admin', '0'), ('panel', 'allow_domain_change_customer', '0'), ('panel', 'frontend', 'froxlor'), @@ -721,7 +722,7 @@ opcache.interned_strings_buffer'), ('panel', 'logo_overridetheme', '0'), ('panel', 'logo_overridecustom', '0'), ('panel', 'version', '0.10.27'), - ('panel', 'db_version', '202107260'); + ('panel', 'db_version', '202107300'); DROP TABLE IF EXISTS `panel_tasks`; diff --git a/install/updates/froxlor/0.10/update_0.10.inc.php b/install/updates/froxlor/0.10/update_0.10.inc.php index aac737f2..0eb6d0e2 100644 --- a/install/updates/froxlor/0.10/update_0.10.inc.php +++ b/install/updates/froxlor/0.10/update_0.10.inc.php @@ -903,3 +903,14 @@ if (\Froxlor\Froxlor::isDatabaseVersion('202107210')) { lastStepStatus(0); \Froxlor\Froxlor::updateToDbVersion('202107260'); } + +if (\Froxlor\Froxlor::isDatabaseVersion('202107260')) { + showUpdateStep("Removing setting for search-engine allow yes/no", true); + Database::query("DELETE FROM `" . TABLE_PANEL_SETTINGS . "` WHERE `settinggroup` = 'panel' AND `varname` = 'no_robots'"); + lastStepStatus(0); + showUpdateStep("Adding setting to have all froxlor customers in a local group", true); + Settings::AddNew("system.froxlorusergroup", ''); + Settings::AddNew("system.froxlorusergroup_gid", ''); + lastStepStatus(0); + \Froxlor\Froxlor::updateToDbVersion('202107300'); +} diff --git a/lib/Froxlor/Cron/System/Extrausers.php b/lib/Froxlor/Cron/System/Extrausers.php index e3029be7..4cc79fbd 100644 --- a/lib/Froxlor/Cron/System/Extrausers.php +++ b/lib/Froxlor/Cron/System/Extrausers.php @@ -2,6 +2,7 @@ namespace Froxlor\Cron\System; use Froxlor\Database\Database; +use Froxlor\Settings; /** * This file is part of the Froxlor project. @@ -25,12 +26,13 @@ class Extrausers // passwd $passwd = '/var/lib/extrausers/passwd'; $sql = "SELECT customerid,username,'x' as password,uid,gid,'Froxlor User' as comment,homedir,shell, login_enabled FROM ftp_users ORDER BY uid, LENGTH(username) ASC"; - self::generateFile($passwd, $sql, $cronlog); + $users_list = []; + self::generateFile($passwd, $sql, $cronlog, $users_list); // group $group = '/var/lib/extrausers/group'; $sql = "SELECT groupname,'x' as password,gid,members FROM ftp_groups ORDER BY gid ASC"; - self::generateFile($group, $sql, $cronlog); + self::generateFile($group, $sql, $cronlog, $users_list); // shadow $shadow = '/var/lib/extrausers/shadow'; @@ -44,7 +46,7 @@ class Extrausers @chmod('/var/lib/extrausers/shadow', 0640); } - private static function generateFile($file, $query, &$cronlog) + private static function generateFile($file, $query, &$cronlog, &$result_list = null) { $type = basename($file); $cronlog->logAction(\Froxlor\FroxlorLogger::CRON_ACTION, LOG_NOTICE, 'Creating ' . $type . ' file'); @@ -74,6 +76,9 @@ class Extrausers $u['comment'] = 'Locked Froxlor User'; } $line = $u['username'] . ':' . $u['password'] . ':' . $u['uid'] . ':' . $u['gid'] . ':' . $u['comment'] . ':' . $u['homedir'] . ':' . $u['shell'] . PHP_EOL; + if (is_array($result_list)) { + $result_list[] = $u['username']; + } break; case 'group': $line = $u['groupname'] . ':' . $u['password'] . ':' . $u['gid'] . ':' . $u['members'] . PHP_EOL; @@ -84,6 +89,19 @@ class Extrausers } $data_content .= $line; } + + // check for local group to generate + if ($type == 'group' && Settings::Get('system.froxlorusergroup') != '') { + $guid = intval(Settings::Get('system.froxlorusergroup_gid')); + if (empty($guid)) { + $guid = intval(Settings::Get('system.lastguid')) + 1; + Settings::Set('system.lastguid', $guid, true); + Settings::Set('system.froxlorusergroup_gid', $guid, true); + } + $line = Settings::Get('system.froxlorusergroup') . ':x:' . $guid . ':' . implode(',', $result_list) . PHP_EOL; + $data_content .= $line; + } + if (file_put_contents($file, $data_content) !== false) { $cronlog->logAction(\Froxlor\FroxlorLogger::CRON_ACTION, LOG_NOTICE, 'Succesfully wrote ' . $type . ' file'); } else { diff --git a/lib/Froxlor/Froxlor.php b/lib/Froxlor/Froxlor.php index f5d799fd..6e5a7952 100644 --- a/lib/Froxlor/Froxlor.php +++ b/lib/Froxlor/Froxlor.php @@ -10,7 +10,7 @@ final class Froxlor const VERSION = '0.10.27'; // Database version (YYYYMMDDC where C is a daily counter) - const DBVERSION = '202107260'; + const DBVERSION = '202107300'; // Distribution branding-tag (used for Debian etc.) const BRANDING = ''; diff --git a/lib/Froxlor/Validate/Check.php b/lib/Froxlor/Validate/Check.php index 430e2e86..d5c1400f 100644 --- a/lib/Froxlor/Validate/Check.php +++ b/lib/Froxlor/Validate/Check.php @@ -207,4 +207,30 @@ class Check } return $returnvalue; } + + public static function checkLocalGroup($fieldname, $fielddata, $newfieldvalue, $allnewfieldvalues) + { + if (empty($newfieldvalue) || $fielddata == $newfieldvalue) { + $returnvalue = [ + self::FORMFIELDS_PLAUSIBILITY_CHECK_OK + ]; + } elseif (function_exists('posix_getgrnam') && posix_getgrnam($newfieldvalue) == false) { + if (Validate::validateUsername($newfieldvalue, Settings::Get('panel.unix_names'), 32)) { + $returnvalue = [ + self::FORMFIELDS_PLAUSIBILITY_CHECK_OK + ]; + } else { + $returnvalue = [ + self::FORMFIELDS_PLAUSIBILITY_CHECK_ERROR, + 'local_group_invalid' + ]; + } + } else { + $returnvalue = [ + self::FORMFIELDS_PLAUSIBILITY_CHECK_ERROR, + 'local_group_exists' + ]; + } + return $returnvalue; + } } diff --git a/lng/czech.lng.php b/lng/czech.lng.php index 18f5dbd9..0b429793 100644 --- a/lng/czech.lng.php +++ b/lng/czech.lng.php @@ -625,10 +625,6 @@ $lng['traffic']['sumhttp'] = 'Celkový HTTP-Provoz'; $lng['traffic']['sumftp'] = 'Celkový FTP-Provoz'; $lng['traffic']['summail'] = 'Celkový Mail-Provoz'; -// ADDED IN 1.2.19-svn4.5 - -$lng['serversettings']['no_robots']['title'] = 'Povolit vyhledávacím enginům idexovat tuto froxlor instalaci'; - // ADDED IN 1.2.19-svn6 $lng['admin']['loggersettings'] = 'Log nastavení'; diff --git a/lng/dutch.lng.php b/lng/dutch.lng.php index 87b4dc5b..e1c3bf7d 100644 --- a/lng/dutch.lng.php +++ b/lng/dutch.lng.php @@ -558,10 +558,6 @@ $lng['traffic']['sumhttp'] = 'Samenvatting HTTP-verkeer in'; $lng['traffic']['sumftp'] = 'Samenvatting FTP-verkeer in'; $lng['traffic']['summail'] = 'Samenvatting Mail-verkeer in'; -// ADDED IN 1.2.19-svn4.5 - -$lng['serversettings']['no_robots']['title'] = 'Zoekmachines toestaan uw Froxlor-installatie te indexeren'; - // ADDED IN 1.2.19-svn6 $lng['admin']['loggersettings'] = 'Instellingen voor logs'; diff --git a/lng/english.lng.php b/lng/english.lng.php index 330f8b14..e7fb8413 100644 --- a/lng/english.lng.php +++ b/lng/english.lng.php @@ -626,10 +626,6 @@ $lng['traffic']['sumhttp'] = 'Total HTTP-Traffic'; $lng['traffic']['sumftp'] = 'Total FTP-Traffic'; $lng['traffic']['summail'] = 'Total Mail-Traffic'; -// ADDED IN 1.2.19-svn4.5 - -$lng['serversettings']['no_robots']['title'] = 'Allow searchengine-robots to index your Froxlor installation'; - // ADDED IN 1.2.19-svn6 $lng['admin']['loggersettings'] = 'Log settings'; @@ -2128,3 +2124,7 @@ $lng['serversettings']['logo_overridetheme']['description'] = 'This needs to be $lng['serversettings']['logo_overridecustom']['title'] = 'Overwrite custom logo (logo_custom.png and logo_custom_login.png) defined in theme by "Logo Image" (Header and Login, see below)'; $lng['serversettings']['logo_overridecustom']['description'] = 'Set this to "true" if you want to ignore theme-specific custom logos for header and login and use "Logo Image"'; $lng['serversettings']['createstdsubdom_default']['title'] = 'Preselected value for "'.$lng['admin']['stdsubdomain_add'].'" when creating a customer'; +$lng['serversettings']['froxlorusergroup']['title'] = 'Custom system group for all customer users'; +$lng['serversettings']['froxlorusergroup']['description'] = 'Usage of libnss-extrausers (system-settings) is required for this to take effect. An empty value skips creation or removes existing group.'; +$lng['error']['local_group_exists'] = 'The given group already exists on the system.'; +$lng['error']['local_group_invalid'] = 'The given group name is invalid'; diff --git a/lng/french.lng.php b/lng/french.lng.php index 1e18a049..9920fa95 100644 --- a/lng/french.lng.php +++ b/lng/french.lng.php @@ -598,10 +598,6 @@ $lng['traffic']['sumhttp'] = 'Trafic HTTP total entrant'; $lng['traffic']['sumftp'] = 'Trafic FTP total entrant'; $lng['traffic']['summail'] = 'Trafic E-mail total entrant'; -// ADDED IN 1.2.19-svn4.5 - -$lng['serversettings']['no_robots']['title'] = 'Permettre aux robots des moteurs de recherche d\'indexer l\'installation de Froxlor'; - // ADDED IN 1.2.19-svn6 $lng['admin']['loggersettings'] = 'Paramètres des logs'; diff --git a/lng/german.lng.php b/lng/german.lng.php index c7e75603..a13bf8e0 100644 --- a/lng/german.lng.php +++ b/lng/german.lng.php @@ -619,10 +619,6 @@ $lng['traffic']['sumhttp'] = 'Gesamt HTTP-Traffic'; $lng['traffic']['sumftp'] = 'Gesamt FTP-Traffic'; $lng['traffic']['summail'] = 'Gesamt Mail-Traffic'; -// ADDED IN 1.2.19-svn4.5 - -$lng['serversettings']['no_robots']['title'] = 'Erlaube die Indizierung Ihrer Froxlor-Installation durch Suchmaschinen'; - // ADDED IN 1.2.19-svn6 $lng['admin']['loggersettings'] = 'Log-Einstellungen'; @@ -1774,3 +1770,7 @@ $lng['serversettings']['logo_overridetheme']['description'] = 'Ist die Nutzung e $lng['serversettings']['logo_overridecustom']['title'] = 'Überschreibe benutzerdefinierte Theme-Logos (logo_custom.png und logo_custom_login.png) mit "Logo Bold" (Header und Login, siehe unten)'; $lng['serversettings']['logo_overridecustom']['description'] = 'Ist diese Einstellung aktiv, werden benutzerdefinierte Logos im Theme-Ordner mit dem "Logo Bild" ersetzt'; $lng['serversettings']['createstdsubdom_default']['title'] = 'Standardwert für "'.$lng['admin']['stdsubdomain_add'].'" bei Erstellung eines Kunden'; +$lng['serversettings']['froxlorusergroup']['title'] = 'Benutzerdefinierte Gruppe für alle Kunden-Benutzer'; +$lng['serversettings']['froxlorusergroup']['description'] = 'Voraussetzung hierfür ist die Nutzung von libnss-extrausers (System-Einstellungen). Ein leerer Wert bedeutet, es wird keine Gruppe erstellt, bzw. vorhandene Gruppe wird entfernt.'; +$lng['error']['local_group_exists'] = 'Die angegebene Gruppe existiert bereits auf dem System'; +$lng['error']['local_group_invalid'] = 'Der angegebene Gruppen-Name ist nicht gültig'; diff --git a/lng/italian.lng.php b/lng/italian.lng.php index 851e6d87..d56ec21c 100644 --- a/lng/italian.lng.php +++ b/lng/italian.lng.php @@ -584,10 +584,6 @@ $lng['traffic']['sumhttp'] = 'Sommatoria Traffico in ingresso HTTP'; $lng['traffic']['sumftp'] = 'Sommatoria Traffico in ingresso FTP'; $lng['traffic']['summail'] = 'Sommatoria Traffico in ingresso Mail'; -// ADDED IN 1.2.19-svn4.5 - -$lng['serversettings']['no_robots']['title'] = 'Permetti ai robot dei motori di ricerca di indicizzare l\'installazione di Froxlor'; - // ADDED IN 1.2.19-svn6 $lng['admin']['loggersettings'] = 'Impostazioni Log'; diff --git a/lng/portugues.lng.php b/lng/portugues.lng.php index 6191a3aa..e97c3e95 100644 --- a/lng/portugues.lng.php +++ b/lng/portugues.lng.php @@ -529,7 +529,6 @@ $lng['traffic']['distribution'] = 'FTP | - -