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