add setting for a custom system group for all customer-users (required libnss-extrausers); fixes #953

Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
Michael Kaufmann 2021-07-30 12:16:37 +02:00
parent 86939a64da
commit 4c507232c7
No known key found for this signature in database
GPG Key ID: 08A83830520FCECB
15 changed files with 84 additions and 42 deletions

View File

@ -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',

View File

@ -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')
),
)
)
)

View File

@ -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`;

View File

@ -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');
}

View File

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

View File

@ -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 = '';

View File

@ -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;
}
}

View File

@ -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í';

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -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';

View File

@ -529,7 +529,6 @@ $lng['traffic']['distribution'] = '<font color="#019522">FTP</font> | <font colo
$lng['traffic']['sumhttp'] = 'Resumo Tráfego de HTTP em';
$lng['traffic']['sumftp'] = 'Resumo Tráfego de FTP em';
$lng['traffic']['summail'] = 'Resumo Tráfego de HTTP em';
$lng['serversettings']['no_robots']['title'] = 'Aceitar robôs de procura na index de seuFroxlor';
$lng['admin']['loggersettings'] = 'Configurações de Logs';
$lng['serversettings']['logger']['enable'] = 'Habilitar/Desabilitar Logs';
$lng['serversettings']['logger']['severity'] = 'Nível de Logs';

View File

@ -3,10 +3,8 @@
<head>
<meta charset="utf-8" />
<meta http-equiv="Default-Style" content="text/css" />
<if \Froxlor\Settings::Get('panel.no_robots') == '0'>
<meta name="robots" content="noindex, nofollow, noarchive" />
<meta name="GOOGLEBOT" content="nosnippet" />
</if>
<script type="text/javascript" src="js/jquery.min.js"></script>
<script type="text/javascript" src="js/jquery-ui.min.js"></script>
<script type="text/javascript" src="js/jquery.tablesorter.min.js"></script>