diff --git a/actions/admin/settings/220.ftpserver.php b/actions/admin/settings/220.ftpserver.php new file mode 100644 index 00000000..7349687d --- /dev/null +++ b/actions/admin/settings/220.ftpserver.php @@ -0,0 +1,40 @@ + (2003-2009) + * @author Froxlor team (2010-) + * @license GPLv2 http://files.froxlor.org/misc/COPYING.txt + * @package Settings + * @version $Id: 220.ftpserver.php 1 2010-04-07 10:00:00Z monotek $ + */ + +return array( + 'groups' => array( + 'ftpserver' => array( + 'title' => $lng['admin']['ftpserversettings'], + 'fields' => array( + 'ftpserver' => array( + 'label' => $lng['admin']['ftpserver'], + 'settinggroup' => 'system', + 'varname' => 'ftpserver', + 'type' => 'option', + 'default' => 'proftpd', + 'option_mode' => 'one', + 'option_options' => array('proftpd' => 'Proftpd', 'pureftpd' => 'Pureftpd'), + 'save_method' => 'storeSettingField', + ), + ), + ), + ) +); + +?> diff --git a/admin_customers.php b/admin_customers.php index f9db7404..c4f9a05b 100644 --- a/admin_customers.php +++ b/admin_customers.php @@ -184,6 +184,11 @@ if($page == 'customers' $db->query("DELETE FROM `" . TABLE_PANEL_TRAFFIC . "` WHERE `customerid`='" . (int)$id . "'"); $db->query("DELETE FROM `" . TABLE_MAIL_USERS . "` WHERE `customerid`='" . (int)$id . "'"); $db->query("DELETE FROM `" . TABLE_MAIL_VIRTUAL . "` WHERE `customerid`='" . (int)$id . "'"); + $result = $db->query("SELECT `username` FROM `" . TABLE_FTP_USERS . "` WHERE `customerid`='" . (int)$id . "'"); + while($row = $db->fetch_array($result)) + { + $db->query("DELETE FROM `" . TABLE_FTP_QUOTATALLIES . "` WHERE `name`='" . $row['username'] . "'"); + } $db->query("DELETE FROM `" . TABLE_FTP_GROUPS . "` WHERE `customerid`='" . (int)$id . "'"); $db->query("DELETE FROM `" . TABLE_FTP_USERS . "` WHERE `customerid`='" . (int)$id . "'"); $db->query("DELETE FROM `" . TABLE_MAIL_AUTORESPONDER . "` WHERE `customerid`='" . (int)$id . "'"); @@ -592,6 +597,7 @@ if($page == 'customers' inserttask('1'); $result = $db->query("INSERT INTO `" . TABLE_FTP_USERS . "` " . "(`customerid`, `username`, `password`, `homedir`, `login_enabled`, `uid`, `gid`) " . "VALUES ('" . (int)$customerid . "', '" . $db->escape($loginname) . "', ENCRYPT('" . $db->escape($password) . "'), '" . $db->escape($documentroot) . "', 'y', '" . (int)$guid . "', '" . (int)$guid . "')"); $result = $db->query("INSERT INTO `" . TABLE_FTP_GROUPS . "` " . "(`customerid`, `groupname`, `gid`, `members`) " . "VALUES ('" . (int)$customerid . "', '" . $db->escape($loginname) . "', '" . $db->escape($guid) . "', '" . $db->escape($loginname) . "')"); + $result = $db->query("INSERT INTO `" . TABLE_FTP_QUOTATALLIES . "` (`name`, `quota_type`, `bytes_in_used`, `bytes_out_used`, `bytes_xfer_used`, `files_in_used`, `files_out_used`, `files_xfer_used`) VALUES ('" . $db->escape($loginname) . "', 'user', '0', '0', '0', '0', '0', '0')"); $log->logAction(ADM_ACTION, LOG_NOTICE, "automatically added ftp-account for user '" . $loginname . "'"); if($createstdsubdomain == '1') diff --git a/customer_ftp.php b/customer_ftp.php index 0b91151a..27fc5aa2 100644 --- a/customer_ftp.php +++ b/customer_ftp.php @@ -97,6 +97,11 @@ elseif($page == 'accounts') && $_POST['send'] == 'send') { $db->query("UPDATE `" . TABLE_FTP_USERS . "` SET `up_count`=`up_count`+'" . (int)$result['up_count'] . "', `up_bytes`=`up_bytes`+'" . (int)$result['up_bytes'] . "', `down_count`=`down_count`+'" . (int)$result['down_count'] . "', `down_bytes`=`down_bytes`+'" . (int)$result['down_bytes'] . "' WHERE `username`='" . $db->escape($userinfo['loginname']) . "'"); + $result = $db->query("SELECT `username` FROM `" . TABLE_FTP_USERS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); + while($row = $db->fetch_array($result)) + { + $db->query("DELETE FROM `" . TABLE_FTP_QUOTATALLIES . "` WHERE `name` = '" . $db->escape($row['username']) . "'"); + } $db->query("DELETE FROM `" . TABLE_FTP_USERS . "` WHERE `customerid`='" . (int)$userinfo['customerid'] . "' AND `id`='" . (int)$id . "'"); $log->logAction(USR_ACTION, LOG_INFO, "deleted ftp-account '" . $result['username'] . "'"); $db->query("UPDATE `" . TABLE_FTP_GROUPS . "` SET `members`=REPLACE(`members`,'," . $db->escape($result['username']) . "','') WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); @@ -176,6 +181,11 @@ elseif($page == 'accounts') $path = makeCorrectDir($userinfo['documentroot'] . '/' . $path); $db->query("INSERT INTO `" . TABLE_FTP_USERS . "` (`customerid`, `username`, `password`, `homedir`, `login_enabled`, `uid`, `gid`) VALUES ('" . (int)$userinfo['customerid'] . "', '" . $db->escape($username) . "', ENCRYPT('" . $db->escape($password) . "'), '" . $db->escape($path) . "', 'y', '" . (int)$userinfo['guid'] . "', '" . (int)$userinfo['guid'] . "')"); + $result = $db->query("SELECT `bytes_in_used` FROM `" . TABLE_FTP_QUOTATALLIES . "` WHERE `name` = '" . $userinfo['loginname'] . "'"); + while($row = $db->fetch_array($result)) + { + $db->query("INSERT INTO `" . TABLE_FTP_QUOTATALLIES . "` (`name`, `quota_type`, `bytes_in_used`, `bytes_out_used`, `bytes_xfer_used`, `files_in_used`, `files_out_used`, `files_xfer_used`) VALUES ('" . $db->escape($username) . "', 'user', '" . $db->escape($row[bytes_in_used]) . "', '0', '0', '0', '0', '0')"); + } $db->query("UPDATE `" . TABLE_FTP_GROUPS . "` SET `members`=CONCAT_WS(',',`members`,'" . $db->escape($username) . "') WHERE `customerid`='" . $userinfo['customerid'] . "' AND `gid`='" . (int)$userinfo['guid'] . "'"); $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `ftps_used`=`ftps_used`+1, `ftp_lastaccountnumber`=`ftp_lastaccountnumber`+1 WHERE `customerid`='" . (int)$userinfo['customerid'] . "'"); @@ -289,4 +299,4 @@ elseif($page == 'accounts') } } -?> \ No newline at end of file +?> diff --git a/install/froxlor.sql b/install/froxlor.sql index fddb2d91..aa43dac8 100644 --- a/install/froxlor.sql +++ b/install/froxlor.sql @@ -451,7 +451,7 @@ INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) V INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (18, 'system', 'vmail_homedir', '/var/customers/mail/'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (19, 'system', 'bindconf_directory', '/etc/bind/'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (20, 'system', 'bindreload_command', '/etc/init.d/bind9 reload'); -INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (22, 'panel', 'version', '0.9.6-svn5'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (22, 'panel', 'version', '0.9.6-svn6'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (23, 'system', 'hostname', 'SERVERNAME'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (24, 'login', 'maxloginattempts', '3'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (25, 'login', 'deactivatetime', '900'); @@ -567,6 +567,7 @@ INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) V INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (136, 'defaultwebsrverrhandler', 'err500', ''); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (137, 'ticket', 'default_priority', '2'); INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (138, 'system', 'mod_fcgid_defaultini', '1'); +INSERT INTO `panel_settings` (`settingid`, `settinggroup`, `varname`, `value`) VALUES (139, 'system', 'ftpserver', 'proftpd'); # -------------------------------------------------------- @@ -969,3 +970,45 @@ INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `isactive`, INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `isactive`, `desc_lng_key`) VALUES (6, 'froxlor/core', 'cron_traffic.php', '1 DAY', '1', 'cron_traffic'); INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `isactive`, `desc_lng_key`) VALUES (7, 'froxlor/ticket', 'cron_used_tickets_reset.php', '1 MONTH', '1', 'cron_ticketsreset'); INSERT INTO `cronjobs_run` (`id`, `module`, `cronfile`, `interval`, `isactive`, `desc_lng_key`) VALUES (8, 'froxlor/ticket', 'cron_ticketarchive.php', '1 MONTH', '1', 'cron_ticketarchive'); + +# -------------------------------------------------------- + +# +# Tabellenstruktur fuer Tabelle `ftp_quotalimits` +# + +CREATE TABLE IF NOT EXISTS `ftp_quotalimits` ( + `name` varchar(30) default NULL, + `quota_type` enum('user','group','class','all') NOT NULL default 'user', + `per_session` enum('false','true') NOT NULL default 'false', + `limit_type` enum('soft','hard') NOT NULL default 'hard', + `bytes_in_avail` float NOT NULL, + `bytes_out_avail` float NOT NULL, + `bytes_xfer_avail` float NOT NULL, + `files_in_avail` int(10) unsigned NOT NULL, + `files_out_avail` int(10) unsigned NOT NULL, + `files_xfer_avail` int(10) unsigned NOT NULL +) ENGINE=MyISAM; + +# +# Dumping data for table `ftp_quotalimits` +# + +INSERT INTO `ftp_quotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES ('froxlor', 'user', 'false', 'hard', 0, 0, 0, 0, 0, 0); + +# -------------------------------------------------------- + +# +# Tabellenstruktur fuer Tabelle `ftp_quotatallies` +# + +CREATE TABLE IF NOT EXISTS `ftp_quotatallies` ( + `name` varchar(30) NOT NULL, + `quota_type` enum('user','group','class','all') NOT NULL, + `bytes_in_used` float NOT NULL, + `bytes_out_used` float NOT NULL, + `bytes_xfer_used` float NOT NULL, + `files_in_used` int(10) unsigned NOT NULL, + `files_out_used` int(10) unsigned NOT NULL, + `files_xfer_used` int(10) unsigned NOT NULL +) ENGINE=MyISAM; diff --git a/install/updates/froxlor/0.9/update_0.9.inc.php b/install/updates/froxlor/0.9/update_0.9.inc.php index 6b98ea15..bd9e8a82 100644 --- a/install/updates/froxlor/0.9/update_0.9.inc.php +++ b/install/updates/froxlor/0.9/update_0.9.inc.php @@ -613,4 +613,34 @@ if(isFroxlorVersion('0.9.6-svn4')) updateToVersion('0.9.6-svn5'); } +if(isFroxlorVersion('0.9.6-svn5')) +{ + showUpdateStep("Updating from 0.9.6-svn5 to 0.9.6-svn6"); + + showUpdateStep("Adding new FTP-quota settings"); + + // add ftp server setting + $db->query("INSERT INTO `panel_settings` SET `settinggroup` = 'system', `varname` = 'ftpserver', `value` = 'proftpd';"); + + // add proftpd quota + $db->query("CREATE TABLE`ftp_quotalimits` (`name` varchar(30) default NULL, `quota_type` enum('user','group','class','all') NOT NULL default 'user', `per_session` enum('false','true') NOT NULL default 'false', `limit_type` enum('soft','hard') NOT NULL default 'hard', `bytes_in_avail` float NOT NULL, `bytes_out_avail` float NOT NULL, `bytes_xfer_avail` float NOT NULL, `files_in_avail` int(10) unsigned NOT NULL, `files_out_avail` int(10) unsigned NOT NULL, `files_xfer_avail` int(10) unsigned NOT NULL) ENGINE=MyISAM;"); + + $db->query("INSERT INTO `ftp_quotalimits` (`name`, `quota_type`, `per_session`, `limit_type`, `bytes_in_avail`, `bytes_out_avail`, `bytes_xfer_avail`, `files_in_avail`, `files_out_avail`, `files_xfer_avail`) VALUES ('froxlor', 'user', 'false', 'hard', 0, 0, 0, 0, 0, 0);"); + + $db->query("CREATE TABLE `ftp_quotatallies` (`name` varchar(30) NOT NULL, `quota_type` enum('user','group','class','all') NOT NULL, `bytes_in_used` float NOT NULL, `bytes_out_used` float NOT NULL, `bytes_xfer_used` float NOT NULL, `files_in_used` int(10) unsigned NOT NULL, `files_out_used` int(10) unsigned NOT NULL, `files_xfer_used` int(10) unsigned NOT NULL ) ENGINE=MyISAM;"); + + // fill quota tallies + $result_ftp_users = $db->query("SELECT username FROM `" . TABLE_FTP_USERS . "` WHERE 1;"); + + while($row_ftp_users = $db->fetch_array($result_ftp_users)) + { + $result_ftp_quota = $db->query("SELECT diskspace_used FROM `" . TABLE_PANEL_CUSTOMERS . "` WHERE loginname = SUBSTRING_INDEX('" . $row_ftp_users[username] . "', '" . $settings['customer']['ftpprefix'] . "', 1);"); + $row_ftp_quota = mysql_fetch_row($result_ftp_quota); + $db->query("INSERT INTO `ftp_quotatallies` (`name`, `quota_type`, `bytes_in_used`, `bytes_out_used`, `bytes_xfer_used`, `files_in_used`, `files_out_used`, `files_xfer_used`) VALUES ('" . $row_ftp_users[username] . "', 'user', '" . $row_ftp_quota[0] . "'*1024, '0', '0', '0', '0', '0');"); + } + + lastStepStatus(0); + updateToVersion('0.9.6-svn6'); +} + ?> diff --git a/lib/tables.inc.php b/lib/tables.inc.php index 7bd8d803..6df46241 100644 --- a/lib/tables.inc.php +++ b/lib/tables.inc.php @@ -19,6 +19,8 @@ define('TABLE_FTP_GROUPS', 'ftp_groups'); define('TABLE_FTP_USERS', 'ftp_users'); +define('TABLE_FTP_QUOTALIMITS', 'ftp_quotalimits'); +define('TABLE_FTP_QUOTATALLIES', 'ftp_quotatallies'); define('TABLE_MAIL_USERS', 'mail_users'); define('TABLE_MAIL_VIRTUAL', 'mail_virtual'); define('TABLE_PANEL_ADMINS', 'panel_admins'); @@ -68,7 +70,7 @@ define('PACKAGE_ENABLED', 2); // VERSION INFO -$version = '0.9.6-svn5'; +$version = '0.9.6-svn6'; $dbversion = '2'; $branding = ''; diff --git a/lng/english.lng.php b/lng/english.lng.php index d2ba0a54..e126687d 100644 --- a/lng/english.lng.php +++ b/lng/english.lng.php @@ -1383,4 +1383,12 @@ $lng['serversettings']['ticket']['default_priority'] = 'Default support-ticket p // ADDED IN FROXLOR 0.9.6-svn5 $lng['serversettings']['mod_fcgid']['defaultini'] = 'Default PHP configuration for new domains'; +// ADDED IN FROXLOR 0.9.6-svn6 +$lng['admin']['ftpserver'] = 'FTP Server'; +$lng['admin']['ftpserversettings'] = 'FTP Server settings'; +$lng['serversettings']['ftpserver']['desc'] = 'If pureftpd is selected the .ftpquota files for user quotas are created and updated daily'; + +// CHANGED IN FROXLOR 0.9.6-svn6 +$lng['serversettings']['ftpprefix']['description'] = 'Which prefix should ftp accounts have?
If you change this you also have to change the Quota SQL Query in your FTP Server config file in case you use it! '; + ?> diff --git a/lng/german.lng.php b/lng/german.lng.php index a594f466..2f0ee193 100644 --- a/lng/german.lng.php +++ b/lng/german.lng.php @@ -1379,4 +1379,12 @@ $lng['serversettings']['ticket']['default_priority'] = 'Voreingestellte Support- // ADDED IN FROXLOR 0.9.6-svn5 $lng['serversettings']['mod_fcgid']['defaultini'] = 'Voreingestellte PHP Konfiguration für neue Domains'; +// ADDED IN FROXLOR 0.9.6-svn5 +$lng['admin']['ftpserver'] = 'FTP Server'; +$lng['admin']['ftpserversettings'] = 'FTP Server Einstellungen'; +$lng['serversettings']['ftpserver']['desc'] = 'Wenn pureftpd ausgewählt ist, werden die .ftpquota Dateien für das Quota erstellt und täglich aktualisiert.'; + +// CHANGED IN FROXLOR 0.9.6-svn5 +$lng['serversettings']['ftpprefix']['description'] = 'Welchen Prefix sollen die FTP-Benutzerkonten haben?
Wenn du das änderst, musst du auch das Quota SQL Query in der FTP Server Config ändern, solltest du FTP-Quotas benutzen!'; + ?> diff --git a/scripts/jobs/cron_traffic.php b/scripts/jobs/cron_traffic.php index e34f1386..1f623e94 100644 --- a/scripts/jobs/cron_traffic.php +++ b/scripts/jobs/cron_traffic.php @@ -365,6 +365,31 @@ while($row = $db->fetch_array($result)) $diskusage = floatval($webspaceusage + $emailusage + $mysqlusage); $db->query("UPDATE `" . TABLE_PANEL_CUSTOMERS . "` SET `diskspace_used`='" . (float)$current_diskspace['all'] . "', `traffic_used`='" . (float)$sum_month_traffic['all'] . "' WHERE `customerid`='" . (int)$row['customerid'] . "'"); + + /** + * Proftpd Quota + */ + + $db->query("UPDATE `" . TABLE_FTP_QUOTATALLIES . "` SET `bytes_in_used`='" . (float)$current_diskspace['all'] . "'*1024 WHERE `name` = '" . $row['loginname'] . "' OR `name` LIKE '" . $row['loginname'] . $settings['customer']['ftpprefix'] . "%'"); + + /** + * Pureftpd Quota + */ + + if($settings['system']['ftpserver'] == "pureftpd") + { + $result_quota = $db->query("SELECT homedir FROM `" . TABLE_FTP_USERS . "` WHERE customerid = '" . $row['customerid'] . "'"); + + while($row_quota = $db->fetch_array($result_quota)) + { + $quotafile = "" . $row_quota['homedir'] . ".ftpquota"; + $fh = fopen($quotafile, 'w'); + $stringdata = "0 " . $current_diskspace['all']*1024 . ""; + fwrite($fh, $stringdata); + fclose($fh); + safe_exec('chown ' . $row['loginname'] . ':' . $row['loginname'] . ' ' . escapeshellarg($quotafile) . ''); + } + } } /** diff --git a/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_modules.conf b/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_modules.conf index 9bb7b785..26ea26d4 100644 --- a/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_modules.conf +++ b/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_modules.conf @@ -18,10 +18,10 @@ LoadModule mod_sql.c #LoadModule mod_ldap.c LoadModule mod_sql_mysql.c #LoadModule mod_sql_postgres.c -#LoadModule mod_quotatab.c +LoadModule mod_quotatab.c #LoadModule mod_quotatab_file.c #LoadModule mod_quotatab_ldap.c -#LoadModule mod_quotatab_sql.c +LoadModule mod_quotatab_sql.c #LoadModule mod_radius.c LoadModule mod_wrap.c LoadModule mod_rewrite.c diff --git a/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_proftpd.conf b/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_proftpd.conf index 33c730fa..c5d594de 100644 --- a/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_proftpd.conf +++ b/templates/misc/configfiles/debian_etch/proftpd/etc_proftpd_proftpd.conf @@ -61,3 +61,15 @@ SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b SQLLog STOR upload SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users + + +QuotaEngine on +QuotaShowQuotas on +QuotaDisplayUnits Mb +QuotaLock /var/lock/ftpd.quotatab.lock +QuotaLimitTable sql:/get-quota-limit +QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally +SQLNamedQuery get-quota-limit SELECT "ftp_users.username AS name, ftp_quotalimits.quota_type, ftp_quotalimits.per_session, ftp_quotalimits.limit_type, panel_customers.diskspace*1024 AS bytes_in_avail, ftp_quotalimits.bytes_out_avail, ftp_quotalimits.bytes_xfer_avail, ftp_quotalimits.files_in_avail, ftp_quotalimits.files_out_avail, ftp_quotalimits.files_xfer_avail FROM ftp_users, ftp_quotalimits, panel_customers WHERE ftp_users.username = '%{0}' AND panel_customers.loginname = SUBSTRING_INDEX('%{0}', 'ftp', 1) AND quota_type ='%{1}'" +SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used,bytes_out_used, bytes_xfer_used, files_in_used, files_out_used,files_xfer_used FROM ftp_quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" +SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used= files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name= '%{6}' AND quota_type = '%{7}'" ftp_quotatallies +SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4},%{5}, %{6}, %{7}" ftp_quotatallies diff --git a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_db_mysql.conf b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_db_mysql.conf index c139a7f1..22ecee5c 100644 --- a/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_db_mysql.conf +++ b/templates/misc/configfiles/debian_etch/pure-ftpd/etc_pure-ftpd_db_mysql.conf @@ -8,3 +8,4 @@ MYSQLGetPW SELECT password FROM ftp_users WHERE username="\L" AND login_ena MYSQLGetUID SELECT uid FROM ftp_users WHERE username="\L" AND login_enabled="y" MYSQLGetGID SELECT gid FROM ftp_users WHERE username="\L" AND login_enabled="y" MYSQLGetDir SELECT homedir FROM ftp_users WHERE username="\L" AND login_enabled="y" +MySQLGetQTASZ SELECT panel_customers.diskspace/1024 AS QuotaSize FROM panel_customers, ftp_users WHERE username = "\L" AND panel_customers.loginname = SUBSTRING_INDEX('\L', 'ftp', 1) diff --git a/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_modules.conf b/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_modules.conf index a3da4dbc..cc721123 100644 --- a/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_modules.conf +++ b/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_modules.conf @@ -41,7 +41,7 @@ LoadModule mod_quotatab_file.c #LoadModule mod_quotatab_ldap.c # Install proftpd-mod-pgsql or proftpd-mod-mysql to use this -#LoadModule mod_quotatab_sql.c +LoadModule mod_quotatab_sql.c LoadModule mod_quotatab_radius.c LoadModule mod_wrap.c LoadModule mod_rewrite.c diff --git a/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_sql.conf b/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_sql.conf index a90f0af4..d05bdb3f 100644 --- a/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_sql.conf +++ b/templates/misc/configfiles/debian_lenny/proftpd/etc_proftpd_sql.conf @@ -22,4 +22,16 @@ SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b SQLLog STOR upload SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users - \ No newline at end of file + +QuotaEngine on +QuotaShowQuotas on +QuotaDisplayUnits Mb +QuotaLock /var/lock/ftpd.quotatab.lock +QuotaLimitTable sql:/get-quota-limit +QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally +SQLNamedQuery get-quota-limit SELECT "ftp_users.username AS name, ftp_quotalimits.quota_type, ftp_quotalimits.per_session, ftp_quotalimits.limit_type, panel_customers.diskspace*1024 AS bytes_in_avail, ftp_quotalimits.bytes_out_avail, ftp_quotalimits.bytes_xfer_avail, ftp_quotalimits.files_in_avail, ftp_quotalimits.files_out_avail, ftp_quotalimits.files_xfer_avail FROM ftp_users, ftp_quotalimits, panel_customers WHERE ftp_users.username = '%{0}' AND panel_customers.loginname = SUBSTRING_INDEX('%{0}', 'ftp', 1) AND quota_type ='%{1}'" +SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used,bytes_out_used, bytes_xfer_used, files_in_used, files_out_used,files_xfer_used FROM ftp_quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" +SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used= files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name= '%{6}' AND quota_type = '%{7}'" ftp_quotatallies +SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4},%{5}, %{6}, %{7}" ftp_quotatallies + + diff --git a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_db_mysql.conf b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_db_mysql.conf index c139a7f1..22ecee5c 100644 --- a/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_db_mysql.conf +++ b/templates/misc/configfiles/debian_lenny/pure-ftpd/etc_pure-ftpd_db_mysql.conf @@ -8,3 +8,4 @@ MYSQLGetPW SELECT password FROM ftp_users WHERE username="\L" AND login_ena MYSQLGetUID SELECT uid FROM ftp_users WHERE username="\L" AND login_enabled="y" MYSQLGetGID SELECT gid FROM ftp_users WHERE username="\L" AND login_enabled="y" MYSQLGetDir SELECT homedir FROM ftp_users WHERE username="\L" AND login_enabled="y" +MySQLGetQTASZ SELECT panel_customers.diskspace/1024 AS QuotaSize FROM panel_customers, ftp_users WHERE username = "\L" AND panel_customers.loginname = SUBSTRING_INDEX('\L', 'ftp', 1) diff --git a/templates/misc/configfiles/freebsd/proftpd/etc_proftpd_proftpd.conf b/templates/misc/configfiles/freebsd/proftpd/etc_proftpd_proftpd.conf index aeca511a..46e7a182 100644 --- a/templates/misc/configfiles/freebsd/proftpd/etc_proftpd_proftpd.conf +++ b/templates/misc/configfiles/freebsd/proftpd/etc_proftpd_proftpd.conf @@ -28,7 +28,10 @@ Group nogroup AllowOverwrite on - QuotaEngine off + QuotaEngine on + QuotaShowQuotas on + QuotaDisplayUnits Mb + QuotaLock /var/lock/ftpd.quotatab.lock @@ -61,6 +64,13 @@ AllowOverwrite on SQLLog STOR upload SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users + + QuotaLimitTable sql:/get-quota-limit + QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally + SQLNamedQuery get-quota-limit SELECT "ftp_users.username AS name, ftp_quotalimits.quota_type, ftp_quotalimits.per_session, ftp_quotalimits.limit_type, panel_customers.diskspace*1024 AS bytes_in_avail, ftp_quotalimits.bytes_out_avail, ftp_quotalimits.bytes_xfer_avail, ftp_quotalimits.files_in_avail, ftp_quotalimits.files_out_avail, ftp_quotalimits.files_xfer_avail FROM ftp_users, ftp_quotalimits, panel_customers WHERE ftp_users.username = '%{0}' AND panel_customers.loginname = SUBSTRING_INDEX('%{0}', 'ftp', 1) AND quota_type ='%{1}'" + SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used,bytes_out_used, bytes_xfer_used, files_in_used, files_out_used,files_xfer_used FROM ftp_quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" + SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used= files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name= '%{6}' AND quota_type = '%{7}'" ftp_quotatallies + SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4},%{5}, %{6}, %{7}" ftp_quotatallies diff --git a/templates/misc/configfiles/gentoo/proftpd/etc_proftpd_proftpd.conf b/templates/misc/configfiles/gentoo/proftpd/etc_proftpd_proftpd.conf index bf6da1ec..6d46c7b2 100644 --- a/templates/misc/configfiles/gentoo/proftpd/etc_proftpd_proftpd.conf +++ b/templates/misc/configfiles/gentoo/proftpd/etc_proftpd_proftpd.conf @@ -59,6 +59,18 @@ SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b SQLLog STOR upload SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users +# Quota settings +QuotaEngine on +QuotaShowQuotas on +QuotaDisplayUnits Mb +QuotaLock /var/lock/ftpd.quotatab.lock +QuotaLimitTable sql:/get-quota-limit +QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally +SQLNamedQuery get-quota-limit SELECT "ftp_users.username AS name, ftp_quotalimits.quota_type, ftp_quotalimits.per_session, ftp_quotalimits.limit_type, panel_customers.diskspace*1024 AS bytes_in_avail, ftp_quotalimits.bytes_out_avail, ftp_quotalimits.bytes_xfer_avail, ftp_quotalimits.files_in_avail, ftp_quotalimits.files_out_avail, ftp_quotalimits.files_xfer_avail FROM ftp_users, ftp_quotalimits, panel_customers WHERE ftp_users.username = '%{0}' AND panel_customers.loginname = SUBSTRING_INDEX('%{0}', 'ftp', 1) AND quota_type ='%{1}'" +SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used,bytes_out_used, bytes_xfer_used, files_in_used, files_out_used,files_xfer_used FROM ftp_quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" +SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used= files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name= '%{6}' AND quota_type = '%{7}'" ftp_quotatallies +SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4},%{5}, %{6}, %{7}" ftp_quotatallies + # TLS settings # #TLSEngine on diff --git a/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_modules.conf b/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_modules.conf index 751e169a..abf2ecd2 100644 --- a/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_modules.conf +++ b/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_modules.conf @@ -18,10 +18,10 @@ LoadModule mod_sql.c #LoadModule mod_ldap.c LoadModule mod_sql_mysql.c #LoadModule mod_sql_postgres.c -#LoadModule mod_quotatab.c +LoadModule mod_quotatab.c #LoadModule mod_quotatab_file.c #LoadModule mod_quotatab_ldap.c -#LoadModule mod_quotatab_sql.c +LoadModule mod_quotatab_sql.c #LoadModule mod_radius.c LoadModule mod_wrap.c LoadModule mod_rewrite.c diff --git a/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_proftpd.conf b/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_proftpd.conf index 946aef93..f4205621 100644 --- a/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_proftpd.conf +++ b/templates/misc/configfiles/suse_linux_10_0/proftpd/etc_proftpd_proftpd.conf @@ -67,3 +67,14 @@ SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b SQLLog STOR upload SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users + +QuotaEngine on +QuotaShowQuotas on +QuotaDisplayUnits Mb +QuotaLock /var/lock/ftpd.quotatab.lock +QuotaLimitTable sql:/get-quota-limit +QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally +SQLNamedQuery get-quota-limit SELECT "ftp_users.username AS name, ftp_quotalimits.quota_type, ftp_quotalimits.per_session, ftp_quotalimits.limit_type, panel_customers.diskspace*1024 AS bytes_in_avail, ftp_quotalimits.bytes_out_avail, ftp_quotalimits.bytes_xfer_avail, ftp_quotalimits.files_in_avail, ftp_quotalimits.files_out_avail, ftp_quotalimits.files_xfer_avail FROM ftp_users, ftp_quotalimits, panel_customers WHERE ftp_users.username = '%{0}' AND panel_customers.loginname = SUBSTRING_INDEX('%{0}', 'ftp', 1) AND quota_type ='%{1}'" +SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used,bytes_out_used, bytes_xfer_used, files_in_used, files_out_used,files_xfer_used FROM ftp_quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" +SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used= files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name= '%{6}' AND quota_type = '%{7}'" ftp_quotatallies +SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4},%{5}, %{6}, %{7}" ftp_quotatallies diff --git a/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_modules.conf b/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_modules.conf index 9bb7b785..26ea26d4 100644 --- a/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_modules.conf +++ b/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_modules.conf @@ -18,10 +18,10 @@ LoadModule mod_sql.c #LoadModule mod_ldap.c LoadModule mod_sql_mysql.c #LoadModule mod_sql_postgres.c -#LoadModule mod_quotatab.c +LoadModule mod_quotatab.c #LoadModule mod_quotatab_file.c #LoadModule mod_quotatab_ldap.c -#LoadModule mod_quotatab_sql.c +LoadModule mod_quotatab_sql.c #LoadModule mod_radius.c LoadModule mod_wrap.c LoadModule mod_rewrite.c diff --git a/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_proftpd.conf b/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_proftpd.conf index 17bf89c6..0d2118fa 100644 --- a/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_proftpd.conf +++ b/templates/misc/configfiles/ubuntu_hardy/proftpd/etc_proftpd_proftpd.conf @@ -62,3 +62,14 @@ SQLNamedQuery download UPDATE "down_count=down_count+1, down_bytes=down_bytes+%b SQLLog STOR upload SQLNamedQuery upload UPDATE "up_count=up_count+1, up_bytes=up_bytes+%b WHERE username='%u'" ftp_users + +QuotaEngine on +QuotaShowQuotas on +QuotaDisplayUnits Mb +QuotaLock /var/lock/ftpd.quotatab.lock +QuotaLimitTable sql:/get-quota-limit +QuotaTallyTable sql:/get-quota-tally/update-quota-tally/insert-quota-tally +SQLNamedQuery get-quota-limit SELECT "ftp_users.username AS name, ftp_quotalimits.quota_type, ftp_quotalimits.per_session, ftp_quotalimits.limit_type, panel_customers.diskspace*1024 AS bytes_in_avail, ftp_quotalimits.bytes_out_avail, ftp_quotalimits.bytes_xfer_avail, ftp_quotalimits.files_in_avail, ftp_quotalimits.files_out_avail, ftp_quotalimits.files_xfer_avail FROM ftp_users, ftp_quotalimits, panel_customers WHERE ftp_users.username = '%{0}' AND panel_customers.loginname = SUBSTRING_INDEX('%{0}', 'ftp', 1) AND quota_type ='%{1}'" +SQLNamedQuery get-quota-tally SELECT "name, quota_type, bytes_in_used,bytes_out_used, bytes_xfer_used, files_in_used, files_out_used,files_xfer_used FROM ftp_quotatallies WHERE name = '%{0}' AND quota_type = '%{1}'" +SQLNamedQuery update-quota-tally UPDATE "bytes_in_used = bytes_in_used + %{0}, bytes_out_used = bytes_out_used + %{1}, bytes_xfer_used = bytes_xfer_used + %{2}, files_in_used = files_in_used + %{3}, files_out_used= files_out_used + %{4}, files_xfer_used = files_xfer_used + %{5} WHERE name= '%{6}' AND quota_type = '%{7}'" ftp_quotatallies +SQLNamedQuery insert-quota-tally INSERT "%{0}, %{1}, %{2}, %{3}, %{4},%{5}, %{6}, %{7}" ftp_quotatallies diff --git a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_db_mysql.conf b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_db_mysql.conf index c139a7f1..22ecee5c 100644 --- a/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_db_mysql.conf +++ b/templates/misc/configfiles/ubuntu_hardy/pure-ftpd/etc_pure-ftpd_db_mysql.conf @@ -8,3 +8,4 @@ MYSQLGetPW SELECT password FROM ftp_users WHERE username="\L" AND login_ena MYSQLGetUID SELECT uid FROM ftp_users WHERE username="\L" AND login_enabled="y" MYSQLGetGID SELECT gid FROM ftp_users WHERE username="\L" AND login_enabled="y" MYSQLGetDir SELECT homedir FROM ftp_users WHERE username="\L" AND login_enabled="y" +MySQLGetQTASZ SELECT panel_customers.diskspace/1024 AS QuotaSize FROM panel_customers, ftp_users WHERE username = "\L" AND panel_customers.loginname = SUBSTRING_INDEX('\L', 'ftp', 1)