Skip to content

Commit 295bd9c

Browse files
author
Marius Burkard
committed
Merge branch 'stable-3.1'
2 parents 322132c + 5512af5 commit 295bd9c

File tree

6 files changed

+40
-46
lines changed

6 files changed

+40
-46
lines changed

install/install.php

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -702,9 +702,6 @@
702702
$inst->configure_pureftpd();
703703
}
704704

705-
swriteln('Detect IP addresses');
706-
$inst->detect_ips();
707-
708705
//** Configure DNS
709706
if(strtolower($inst->simple_query('Configure DNS Server', array('y', 'n'), 'y','configure_dns')) == 'y') {
710707
$conf['services']['dns'] = true;

install/sql/incremental/upd_dev_collection.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -220,3 +220,5 @@ ALTER TABLE `client_template` ADD COLUMN `limit_directive_snippets` ENUM( 'n', '
220220
ALTER TABLE `sys_user`
221221
ADD COLUMN `lost_password_hash` VARCHAR(50) NOT NULL DEFAULT '',
222222
ADD COLUMN `lost_password_reqtime` DATETIME NULL default NULL;
223+
224+
ALTER TABLE `web_database` ADD COLUMN `quota_exceeded` enum('n','y') NOT NULL DEFAULT 'n' AFTER `database_quota`;

install/sql/ispconfig3.sql

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1856,6 +1856,7 @@ CREATE TABLE `web_database` (
18561856
`database_name` varchar(64) DEFAULT NULL,
18571857
`database_name_prefix` varchar(50) NOT NULL default '',
18581858
`database_quota` int(11) unsigned DEFAULT NULL,
1859+
`quota_exceeded` enum('n','y') NOT NULL DEFAULT 'n',
18591860
`last_quota_notification` date NULL default NULL,
18601861
`database_user_id` int(11) unsigned DEFAULT NULL,
18611862
`database_ro_user_id` int(11) unsigned DEFAULT NULL,

interface/web/sites/database_edit.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -262,7 +262,6 @@ function onSubmit() {
262262
}
263263
unset($tmp);
264264
}
265-
266265
}
267266
} else {
268267
// check if client of database parent domain is client of db user!

server/lib/classes/cron.d/100-monitor_database_size.inc.php

Lines changed: 17 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -78,16 +78,29 @@ public function onRunJob() {
7878
$state = 'ok';
7979

8080
/** Fetch the data of all databases into an array */
81-
$databases = $app->db->queryAllRecords("SELECT database_name, sys_groupid FROM web_database WHERE server_id = ? GROUP BY sys_groupid, database_name ASC", $server_id);
81+
$databases = $app->db->queryAllRecords("SELECT database_id, database_name, sys_groupid, database_quota, quota_exceeded FROM web_database WHERE server_id = ? GROUP BY sys_groupid, database_name ASC", $server_id);
8282

8383
if(is_array($databases) && !empty($databases)) {
8484

8585
$data = array();
8686

8787
for ($i = 0; $i < sizeof($databases); $i++) {
88-
$data[$i]['database_name']= $databases[$i]['database_name'];
89-
$data[$i]['size'] = $app->db->getDatabaseSize($databases[$i]['database_name']);
90-
$data[$i]['sys_groupid'] = $databases[$i]['sys_groupid'];
88+
$rec = $databases[$i];
89+
90+
$data[$i]['database_name']= $rec['database_name'];
91+
$data[$i]['size'] = $app->db->getDatabaseSize($rec['database_name']);
92+
$data[$i]['sys_groupid'] = $rec['sys_groupid'];
93+
94+
$quota = $rec['database_quota'] * 1024 * 1024;
95+
if (!is_numeric($quota)) continue;
96+
97+
if($quota < 0 || $quota > $data[$i]['size']) {
98+
if($rec['quota_exceeded'] == 'y') {
99+
$app->dbmaster->datalogUpdate('web_database', array('quota_exceeded' => 'n'), 'database_id', $rec['database_id']);
100+
}
101+
} elseif($rec['quota_exceeded'] == 'n') {
102+
$app->dbmaster->datalogUpdate('web_database', array('quota_exceeded' => 'y'), 'database_id', $rec['database_id']);
103+
}
91104
}
92105

93106
$res = array();

server/plugins-available/mysql_clientdb_plugin.inc.php

Lines changed: 20 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -71,9 +71,10 @@ function onLoad() {
7171

7272
}
7373

74-
function process_host_list($action, $database_name, $database_user, $database_password, $host_list, $link, $database_rename_user = '', $user_read_only = false) {
74+
function process_host_list($action, $database_name, $database_user, $database_password, $host_list, $link, $database_rename_user = '', $user_access_mode = 'rw') {
7575
global $app;
76-
76+
77+
if(!$user_access_mode) $user_access_mode = 'rw';
7778
$action = strtoupper($action);
7879

7980
// set to all hosts if none given
@@ -101,7 +102,6 @@ function process_host_list($action, $database_name, $database_user, $database_pa
101102
$valid = true;
102103
if($db_host == '%' || $db_host == 'localhost') {
103104
$valid = true;
104-
// } elseif(preg_match("/^[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}(\.)[0-9]{1,3}$/", $db_host)) {
105105
} elseif(preg_match("/^((25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/", $db_host)) {
106106
$groups = explode('.', $db_host);
107107
foreach($groups as $group){
@@ -113,10 +113,14 @@ function process_host_list($action, $database_name, $database_user, $database_pa
113113
}
114114

115115
if($valid == false) continue;
116-
116+
117+
$grants = 'ALL';
118+
if($user_access_mode == 'r') $grants = 'SELECT';
119+
elseif($user_access_mode == 'rd') $grants = 'SELECT, DELETE, ALTER, DROP';
120+
117121
if($action == 'GRANT') {
118-
if(!$link->query("GRANT " . ($user_read_only ? "SELECT" : "ALL") . " ON `".$link->escape_string($database_name)."`.* TO '".$link->escape_string($database_user)."'@'$db_host' IDENTIFIED BY PASSWORD '".$link->escape_string($database_password)."';")) $success = false;
119-
$app->log("GRANT " . ($user_read_only ? "SELECT" : "ALL") . " ON `".$link->escape_string($database_name)."`.* TO '".$link->escape_string($database_user)."'@'$db_host' IDENTIFIED BY PASSWORD '".$link->escape_string($database_password)."'; success? " . ($success ? 'yes' : 'no'), LOGLEVEL_DEBUG);
122+
if(!$link->query("GRANT " . $grants . " ON `".$link->escape_string($database_name)."`.* TO '".$link->escape_string($database_user)."'@'$db_host' IDENTIFIED BY PASSWORD '".$link->escape_string($database_password)."';")) $success = false;
123+
$app->log("GRANT " . $grants . " ON `".$link->escape_string($database_name)."`.* TO '".$link->escape_string($database_user)."'@'$db_host' IDENTIFIED BY PASSWORD '".$link->escape_string($database_password)."'; success? " . ($success ? 'yes' : 'no'), LOGLEVEL_DEBUG);
120124
} elseif($action == 'REVOKE') {
121125
if(!$link->query("REVOKE ALL PRIVILEGES ON `".$link->escape_string($database_name)."`.* FROM '".$link->escape_string($database_user)."'@'$db_host' IDENTIFIED BY PASSWORD '".$link->escape_string($database_password)."';")) $success = false;
122126
} elseif($action == 'DROP') {
@@ -219,11 +223,11 @@ function db_insert($event_name, $data) {
219223

220224
if($db_user) {
221225
if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
222-
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link);
226+
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link, '', ($data['new']['quota_exceeded'] == 'y' ? 'rd' : 'rw'));
223227
}
224228
if($db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
225229
if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
226-
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $host_list, $link, '', true);
230+
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $host_list, $link, '', 'r');
227231
}
228232

229233
}
@@ -396,11 +400,11 @@ function db_update($event_name, $data) {
396400
if($data['new']['active'] == 'y') {
397401
if($db_user) {
398402
if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
399-
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link);
403+
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link, '', ($data['new']['quota_exceeded'] == 'y' ? 'rd' : 'rw'));
400404
}
401405
if($db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
402406
if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
403-
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $host_list, $link, '', true);
407+
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $host_list, $link, '', 'r');
404408
}
405409
} else if($data['new']['active'] == 'n' && $data['old']['active'] == 'y') { // revoke database user, if inactive
406410
if($old_db_user) {
@@ -411,10 +415,6 @@ function db_update($event_name, $data) {
411415
$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_user_id'], $old_host_list);
412416
if($drop_or_revoke_user['drop_hosts'] != '') $this->process_host_list('DROP', $data['old']['database_name'], $old_db_user['database_user'], $old_db_user['database_password'], $drop_or_revoke_user['drop_hosts'], $link);
413417
if($drop_or_revoke_user['revoke_hosts'] != '') $this->process_host_list('REVOKE', $data['old']['database_name'], $old_db_user['database_user'], $old_db_user['database_password'], $drop_or_revoke_user['revoke_hosts'], $link);
414-
415-
416-
//$this->process_host_list('DROP', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $old_host_list, $link);
417-
//$this->process_host_list('REVOKE', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $old_host_list, $link);
418418
}
419419

420420
}
@@ -426,9 +426,6 @@ function db_update($event_name, $data) {
426426
$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_ro_user_id'], $old_host_list);
427427
if($drop_or_revoke_user['drop_hosts'] != '') $this->process_host_list('DROP', $data['old']['database_name'], $old_db_ro_user['database_user'], $old_db_ro_user['database_password'], $drop_or_revoke_user['drop_hosts'], $link);
428428
if($drop_or_revoke_user['revoke_hosts'] != '') $this->process_host_list('REVOKE', $data['old']['database_name'], $old_db_ro_user['database_user'], $old_db_ro_user['database_password'], $drop_or_revoke_user['revoke_hosts'], $link);
429-
430-
//$this->process_host_list('DROP', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $old_host_list, $link);
431-
//$this->process_host_list('REVOKE', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $old_host_list, $link);
432429
}
433430
}
434431
// Database is not active, so stop processing here
@@ -447,15 +444,12 @@ function db_update($event_name, $data) {
447444
$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_user_id'], $old_host_list);
448445
if($drop_or_revoke_user['drop_hosts'] != '') $this->process_host_list('DROP', $data['old']['database_name'], $old_db_user['database_user'], $old_db_user['database_password'], $drop_or_revoke_user['drop_hosts'], $link);
449446
if($drop_or_revoke_user['revoke_hosts'] != '') $this->process_host_list('REVOKE', $data['old']['database_name'], $old_db_user['database_user'], $old_db_user['database_password'], $drop_or_revoke_user['revoke_hosts'], $link);
450-
451-
//$this->process_host_list('DROP', $data['new']['database_name'], $old_db_user['database_user'], $old_db_user['database_password'], $old_host_list, $link);
452-
//$this->process_host_list('REVOKE', $data['new']['database_name'], $old_db_user['database_user'], $old_db_user['database_password'], $old_host_list, $link);
453447
}
454448
}
455449
}
456450
if($db_user) {
457451
if($db_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
458-
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link);
452+
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $host_list, $link, '', ($data['new']['quota_exceeded'] == 'y' ? 'rd' : 'rw'));
459453
}
460454
}
461455
if($data['new']['database_ro_user_id'] != $data['old']['database_ro_user_id']) {
@@ -468,36 +462,30 @@ function db_update($event_name, $data) {
468462
$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_user_id'], $old_host_list);
469463
if($drop_or_revoke_user['drop_hosts'] != '') $this->process_host_list('DROP', $data['old']['database_name'], $old_db_ro_user['database_user'], $old_db_ro_user['database_password'], $drop_or_revoke_user['drop_hosts'], $link);
470464
if($drop_or_revoke_user['revoke_hosts'] != '') $this->process_host_list('REVOKE', $data['old']['database_name'], $old_db_ro_user['database_user'], $old_db_ro_user['database_password'], $drop_or_revoke_user['revoke_hosts'], $link);
471-
472-
//$this->process_host_list('DROP', $data['new']['database_name'], $old_db_user['database_user'], $old_db_user['database_password'], $old_host_list, $link);
473-
//$this->process_host_list('REVOKE', $data['new']['database_name'], $old_db_user['database_user'], $old_db_user['database_password'], $old_host_list, $link);
474465
}
475466
}
476467
}
477468
if($db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
478469
if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
479-
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $host_list, $link, '', true);
470+
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $host_list, $link, '', 'r');
480471
}
481472
}
482473

483474
//* Remote access option has changed.
484475
if($data['new']['remote_access'] != $data['old']['remote_access']) {
485476

486-
//* revoke old priveliges
487-
//mysql_query("REVOKE ALL PRIVILEGES ON ".mysql_real_escape_string($data["new"]["database_name"],$link).".* FROM '".mysql_real_escape_string($data["new"]["database_user"],$link)."';",$link);
488-
489477
//* set new priveliges
490478
if($data['new']['remote_access'] == 'y') {
491479
if($db_user) {
492480
if($db_user['database_user'] == 'root'){
493481
$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
494482
} else {
495-
$this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $data['new']['remote_ips'], $link);
483+
$this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $data['new']['remote_ips'], $link, '', ($data['new']['quota_exceeded'] == 'y' ? 'rd' : 'rw'));
496484
}
497485
}
498486
if($db_ro_user && $data['new']['database_user_id'] != $data['new']['database_ro_user_id']) {
499487
if($db_ro_user['database_user'] == 'root') $app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
500-
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $data['new']['remote_ips'], $link, '', true);
488+
else $this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $data['new']['remote_ips'], $link, '', 'r');
501489
}
502490
} else {
503491
if($old_db_user) {
@@ -508,9 +496,6 @@ function db_update($event_name, $data) {
508496
$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_user_id'], $data['old']['remote_ips']);
509497
if($drop_or_revoke_user['drop_hosts'] != '') $this->process_host_list('DROP', $data['old']['database_name'], $old_db_user['database_user'], $old_db_user['database_password'], $drop_or_revoke_user['drop_hosts'], $link);
510498
if($drop_or_revoke_user['revoke_hosts'] != '') $this->process_host_list('REVOKE', $data['old']['database_name'], $old_db_user['database_user'], $old_db_user['database_password'], $drop_or_revoke_user['revoke_hosts'], $link);
511-
512-
//$this->process_host_list('DROP', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $data['old']['remote_ips'], $link);
513-
//$this->process_host_list('REVOKE', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $data['old']['remote_ips'], $link);
514499
}
515500
}
516501
if($old_db_ro_user && $data['old']['database_user_id'] != $data['old']['database_ro_user_id']) {
@@ -521,9 +506,6 @@ function db_update($event_name, $data) {
521506
$drop_or_revoke_user = $this->drop_or_revoke_user($data['old']['database_id'], $data['old']['database_ro_user_id'], $data['old']['remote_ips']);
522507
if($drop_or_revoke_user['drop_hosts'] != '') $this->process_host_list('DROP', $data['old']['database_name'], $old_db_ro_user['database_user'], $old_db_ro_user['database_password'], $drop_or_revoke_user['drop_hosts'], $link);
523508
if($drop_or_revoke_user['revoke_hosts'] != '') $this->process_host_list('REVOKE', $data['old']['database_name'], $old_db_ro_user['database_user'], $old_db_ro_user['database_password'], $drop_or_revoke_user['revoke_hosts'], $link);
524-
525-
//$this->process_host_list('DROP', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $data['old']['remote_ips'], $link);
526-
//$this->process_host_list('REVOKE', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $data['old']['remote_ips'], $link);
527509
}
528510
}
529511
}
@@ -544,7 +526,7 @@ function db_update($event_name, $data) {
544526
if($db_user['database_user'] == 'root'){
545527
$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
546528
} else {
547-
$this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $data['new']['remote_ips'], $link);
529+
$this->process_host_list('GRANT', $data['new']['database_name'], $db_user['database_user'], $db_user['database_password'], $data['new']['remote_ips'], $link, '', ($data['new']['quota_exceeded'] == 'y' ? 'rd' : 'rw'));
548530
}
549531
}
550532

@@ -563,7 +545,7 @@ function db_update($event_name, $data) {
563545
if($db_ro_user['database_user'] == 'root'){
564546
$app->log('User root not allowed for Client databases', LOGLEVEL_WARNING);
565547
} else {
566-
$this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $data['new']['remote_ips'], $link, '', true);
548+
$this->process_host_list('GRANT', $data['new']['database_name'], $db_ro_user['database_user'], $db_ro_user['database_password'], $data['new']['remote_ips'], $link, '', 'r');
567549
}
568550
}
569551
}

0 commit comments

Comments
 (0)