Unsupported scripts and control panel web app for a hosting company
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

database.php 7.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. <?PHP
  2. require_once('lib/dashboard.php');
  3. require_once('lib/common.php');
  4. require_once('lib/account.php');
  5. checkAccess(HAS_HOSTING);
  6. if (isset($_POST['action'])) {
  7. if ($_POST['action'] == 'adduser' && isset($_POST['dbuser']) && isset($_POST['dbpass'])) {
  8. if (strlen(USER.'_'.$_POST['dbuser']) <= 16) {
  9. $sql = 'INSERT INTO db_users (user_id, dbuser_name) VALUES ('.UID.', \'';
  10. $sql .= USER.'_'.m($_POST['dbuser']).'\')';
  11. $res = mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  12. if (mysql_affected_rows() > 0) {
  13. //GRANT USAGE ON * . * TO 'test'@'localhost' IDENTIFIED BY '***' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0 MAX_UPDATES_PER_HOUR 0 ;
  14. logger::log('Database user created: '.$_POST['dbuser'],logger::info);
  15. $sql = 'GRANT USAGE ON *.* to \''.USER.'_';
  16. $sql .= m($_POST['dbuser']).'\'@\'localhost\'';
  17. $sql .= ' IDENTIFIED BY \''.m($_POST['dbpass']).'\'';
  18. $sql .= ' WITH MAX_QUERIES_PER_HOUR 0 MAX_CONNECTIONS_PER_HOUR 0';
  19. $sql .= ' MAX_UPDATES_PER_HOUR 0';
  20. $l = mysql_connect('localhost', 'root', 'mysql32159');;
  21. mysql_select_db('admin', $l);
  22. mysql_query($sql,$l) or mf(__FILE__, __LINE__, $sql);
  23. mysql_close($l);
  24. $_redodb = true; require('lib/database.php'); unset($_redodb);
  25. } else {
  26. define('MESSAGE', 'Unable to add. Please raise a ticket.');
  27. }
  28. } else {
  29. define('MESSAGE', 'The total length of MySQL usernames (including \''.USER.'_\') must be sixteen characters or under.');
  30. }
  31. } elseif ($_POST['action'] == 'adddb' && isset($_POST['newdb'])) {
  32. $sql = 'INSERT INTO db_dbs (user_id, db_name) VALUES ('.UID.', \'';
  33. $sql .= USER.'_'.m($_POST['newdb']).'\')';
  34. $res = mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  35. if (mysql_affected_rows() > 0) {
  36. //GRANT ALL PRIVILEGES ON `admin` . * TO 'md87'@'localhost' WITH GRANT OPTION ;
  37. logger::log('Database created: '.$_POST['newdb'], logger::info);
  38. $sql = 'CREATE DATABASE `'.USER.'_'.m($_POST['newdb']).'`';
  39. $l = mysql_connect('localhost', 'root', 'mysql32159');;
  40. mysql_select_db('admin', $l);
  41. mysql_query($sql,$l) or mf(__FILE__, __LINE__, $sql);
  42. $sql = 'GRANT ALL PRIVILEGES ON `'.USER.'_'.m($_POST['newdb']).'`.* TO \''.USER.'\'@\'localhost\'';
  43. mysql_query($sql,$l) or mf(__FILE__, __LINE__, $sql);
  44. mysql_close($l);
  45. $_redodb = true; require('lib/database.php'); unset($_redodb);
  46. } else {
  47. define('MESSAGE', 'Unable to add. Please raise a ticket.');
  48. }
  49. } elseif ($_POST['action'] == 'perms') {
  50. $sql = 'SELECT dbuser_id, dbuser_name FROM db_users WHERE user_id = '.UID;
  51. $res = mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  52. $users = array();
  53. while ($row = mysql_fetch_array($res)) {
  54. $users[($row[0])] = $row[1];
  55. }
  56. $sql = 'SELECT db_id, db_name FROM db_dbs WHERE user_id = '.UID;
  57. $res = mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  58. $dbs = array();
  59. while ($row = mysql_fetch_array($res)) {
  60. $dbs[($row[0])] = str_replace('_','\_',$row[1]);
  61. }
  62. $sql = 'SELECT db_perms.dbuser_id, db_id FROM db_perms NATURAL JOIN db_users WHERE user_id = '.UID;
  63. $res = mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  64. $perms = array();
  65. while ($row = mysql_fetch_array($res)) {
  66. if (!isset($perms[($row[0])])) { $perms[($row[0])] = array(); }
  67. $perms[($row[0])][($row[1])] = true;
  68. }
  69. $remove = $perms; $add = array();
  70. foreach ($_POST as $k => $v) {
  71. if ($v != 'on' && $v != 'checked') { continue; }
  72. $bits = explode('_', $k);
  73. if ($bits[0] != 'dbp') { continue; }
  74. if (!isset($dbs[($bits[1])])) { continue; }
  75. if (!isset($users[($bits[2])])) { continue; }
  76. if (isset($remove[($bits[2])][($bits[1])])) {
  77. unset($remove[($bits[2])][($bits[1])]);
  78. } else {
  79. if (!isset($add[($bits[2])])) { $add[($bits[2])] = array(); }
  80. $add[($bits[2])][($bits[1])] = true;
  81. }
  82. }
  83. $l = mysql_connect('localhost', 'root', 'mysql32159');;
  84. mysql_select_db('admin', $l);
  85. mysql_query($sql,$l) or mf(__FILE__, __LINE__, $sql);
  86. foreach ($remove as $user => $dat) {
  87. foreach ($dat as $db => $true) {
  88. $sql = 'DELETE FROM db_perms WHERE dbuser_id = '.$user.' AND db_id = '.$db;
  89. mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  90. $sql = 'REVOKE ALL PRIVILEGES ON `'.$dbs[$db].'`.* FROM \''.$users[$user].'\'@\'localhost\'';
  91. mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  92. logger::log('Revoked db permission: '.$users[$user].' on '.$dbs[$db],logger::info);
  93. }
  94. }
  95. foreach ($add as $user => $dat) {
  96. foreach ($dat as $db => $true) {
  97. $sql = 'INSERT INTO db_perms (dbuser_id, db_id) VALUES ('.$user.', '.$db.')';
  98. mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  99. $sql = 'GRANT ALL PRIVILEGES ON `'.$dbs[$db].'`.* TO \''.$users[$user].'\'@\'localhost\'';
  100. mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  101. logger::log('Added db permission: '.$users[$user].' on '.$dbs[$db], logger::info);
  102. }
  103. }
  104. mysql_close($l);
  105. $_redodb = true; require('lib/database.php'); unset($_redodb);
  106. header('Location: '.CP_PATH.'database');
  107. exit;
  108. }
  109. }
  110. if (isset($_POST['delete'])) {
  111. if (isset($_POST['confirm'])) {
  112. $sql = 'SELECT db_id, db_name FROM db_dbs WHERE user_id = '.UID.' AND (0';
  113. foreach ($_POST as $k => $v) {
  114. if (substr($k,0,2) == 'db' && ctype_digit(substr($k,2))) {
  115. $sql .= ' OR db_id = '.m(substr($k,2));
  116. }
  117. }
  118. $sql .= ')';
  119. $res = mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  120. $targets = array();
  121. while ($row = mysql_fetch_array($res)) {
  122. $sql = 'DELETE FROM db_perms WHERE db_id = '.$row['db_id'];
  123. mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  124. $sql = 'DELETE FROM db_dbs WHERE db_id = '.$row['db_id'];
  125. mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  126. logger::log('Deleted MySQL database: '.$row['db_name'], logger::info);
  127. $targets[] = $row['db_name'];
  128. }
  129. $l = mysql_connect('localhost', 'root', 'mysql32159');;
  130. mysql_select_db('admin', $l);
  131. foreach ($targets as $db) {
  132. $sql = 'DROP DATABASE `'.m($db).'`';
  133. mysql_query($sql,$l) or mf(__FILE__, __LINE__, $sql);
  134. }
  135. mysql_close($l);
  136. $_redodb = true; require('lib/database.php'); unset($_redodb);
  137. header('Location: '.CP_PATH.'database');
  138. exit;
  139. } else {
  140. define('MESSAGE', 'Please confirm database deletion');
  141. }
  142. } elseif (isset($_POST['userdelete'])) {
  143. if (isset($_POST['confirm'])) {
  144. $sql = 'SELECT dbuser_id, dbuser_name FROM db_users WHERE user_id = '.UID.' AND (0';
  145. foreach ($_POST as $k => $v) {
  146. if (substr($k,0,4) == 'user' && ctype_digit(substr($k,4))) {
  147. $sql .= ' OR dbuser_id = '.m(substr($k,4));
  148. }
  149. }
  150. $sql .= ')';
  151. $res = mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  152. $targets = array();
  153. while ($row = mysql_fetch_array($res)) {
  154. $sql = 'DELETE FROM db_perms WHERE dbuser_id = '.$row['dbuser_id'];
  155. mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  156. $sql = 'DELETE FROM db_users WHERE dbuser_id = '.$row['dbuser_id'];
  157. mysql_query($sql) or mf(__FILE__, __LINE__, $sql);
  158. logger::log('Deleted MySQL user: '.$row['dbuser_name'], logger::info);
  159. $targets[] = $row['dbuser_name'];
  160. }
  161. $l = mysql_connect('localhost', 'root', 'mysql32159');;
  162. mysql_select_db('admin', $l);
  163. foreach ($targets as $db) {
  164. $sql = 'DROP USER \''.m($db)."'@'localhost'";
  165. mysql_query($sql,$l) or mf(__FILE__, __LINE__, $sql);
  166. }
  167. mysql_close($l);
  168. $_redodb = true; require('lib/database.php'); unset($_redodb);
  169. header('Location: '.CP_PATH.'database');
  170. exit;
  171. } else {
  172. define('MESSAGE', 'Please confirm user deletion');
  173. }
  174. }
  175. define('TITLE', 'Databases');
  176. addDashboardItem('Useful links', 'phpMyAdmin', 'phpMyAdmin');
  177. require_once('lib/header.php');
  178. require_once('pages/dbusers.php');
  179. require_once('pages/dbdbs.php');
  180. require_once('pages/dbperms.php');
  181. require_once('lib/footer.php');
  182. ?>