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 |
-
-