Alternc  latest
Alternc logiel libre pour l'hébergement
alternc_fix_myadm_users.php
Go to the documentation of this file.
1 #!/usr/bin/php
2 <?php
3 
4  /* Fix the $uid_myadm mysql users access.
5  This script is idempotent and can be launch anytime
6  usually after an AlternC upgrade
7  */
8 
9 $f=@fopen("/etc/alternc/my.cnf","rb");
10 if (!$f) {
11  echo "Can't open /etc/alternc/my.cnf !\n";
12  exit(1);
13 }
14 $mdb=""; $mhost=""; $muser=""; $mpass="";
15 
16 while ($s=fgets($f,1024)) {
17  if (preg_match('#database="([^"]*)#',$s,$mat)) {
18  $mdb=$mat[1];
19  }
20  if (preg_match('#host="([^"]*)#',$s,$mat)) {
21  $mhost=$mat[1];
22  }
23  if (preg_match('#user="([^"]*)#',$s,$mat)) {
24  $muser=$mat[1];
25  }
26  if (preg_match('#password="([^"]*)#',$s,$mat)) {
27  $mpass=$mat[1];
28  }
29 }
30 fclose($f);
31 if (!$mdb || !$mhost || !$muser || !$mpass) {
32  echo "Can't find data in /etc/alternc/my.cnf\n";
33  exit(1);
34 }
35 
36 function create_pass($length = 8){
37  $chars = "1234567890abcdefghijkmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ";
38  $i = 0;
39  $password = "";
40  while ($i <= $length) {
41  $password .= @$chars{mt_rand(0,strlen($chars))};
42  $i++;
43  }
44  return $password;
45 }
46 
47 require_once("/usr/share/alternc/panel/class/db_mysql.php");
49 if (!$db) {
50  echo "Can't connect to MySQL !\n";
51  exit(1);
52 }
53 
54 // Fix a bug in 3.0.0
55 $db->query("UPDATE dbusers SET enable='ACTIVATED' WHERE name!=CONCAT(uid,'_myadm');");
56 
57 $db->query("SELECT * FROM db_servers");
58 $srv=array();
59 $client=array();
60 while ($db->next_record()) {
61  $c=$db->Record;
62  $srv[$c["id"]]=new DB_Sql("mysql",$c["host"],$c["login"],$c["password"]);
63  if (!$srv[$c["id"]]) {
64  echo "Can't connect to server having id ".$c["id"]." at host ".$c["host"]." EXITING !\n";
65  exit();
66  }
67  $client[$c["id"]]=$c["client"];
68 }
69 
70 $r=$db->query("SELECT uid, login, db_server_id FROM membres;");
71 while ($db->next_record()) {
72  $c=$db->Record;
73  $membres[$c["uid"]]=array($c["login"],$c["db_server_id"]);
74 }
75 
76 foreach($membres as $uid => $data) {
77  $membre=$data[0];
78  $srvid=$data[1];
79  $db->query("SELECT * FROM dbusers WHERE uid=$uid AND NAME='".$uid."_myadm';");
80  if (!$db->next_record()) {
81  echo "Creating user ".$uid."_myadm for login ".$membre."\n";
82  $pass=create_pass(8);
83  $db->query("INSERT INTO dbusers SET uid=$uid, name='".$uid."_myadm', password='$pass', enable='ADMIN';");
84  if (is_array($db->last_error())) echo implode("\n",$db->last_error());
85  } else {
86  $pass=$ok["password"];
87  }
88  echo "Granting rights to user ".$uid."_myadm for login ".$membre." ... ";
89  // Now granting him access to all user's databases
90  $srv[$srvid]->query("GRANT USAGE ON *.* TO '".$uid."_myadm'@'".$client[$srvid]."' IDENTIFIED BY '$pass';");
91  if (is_array($srv[$srvid]->last_error())) echo implode("\n",$srv[$srvid]->last_error());
92  $t=$db->query("SELECT * FROM db WHERE uid=$uid;");
93  if (is_array($db->last_error())) echo implode("\n",$db->last_error());
94  while ($db->next_record()) {
95  $d=$db->Record;
96  $srv[$srvid]->query("GRANT ALL ON ".$d["db"].".* TO '".$uid."_myadm'@'".$client[$srvid]."';");
97  echo " ".$d["db"];
98  if (is_array($srv[$srvid]->last_error())) echo implode("\n",$srv[$srvid]->last_error());
99  }
100  echo "\n";
101 }
102 
exit
Definition: adm_doadd.php:70
if(! $mdb||! $mhost||! $muser||! $mpass) create_pass($length=8)
if(! $f) $mdb
while($db->next_record()) $r
$c
Definition: bootstrap.php:47
$d
Mysql Database class.
Definition: db_mysql.php:27
$uid
$password
Definition: bootstrap.php:85
foreach($domaines_user as $domaine) $t
$i
if(!isset($delete)) $ok
Definition: ssl_delete.php:41