simplify mysql user creation flow
if dbuser exists try a different one, owncloud/core#108 changed outdated comment corrected length calculation changed indentation for else clauses
This commit is contained in:
parent
e2b504e61d
commit
e6609d0970
|
@ -12,37 +12,51 @@ class MySQL extends AbstractDatabase {
|
|||
throw new \DatabaseSetupException($this->trans->t('MySQL/MariaDB username and/or password not valid'),
|
||||
$this->trans->t('You need to enter either an existing account or the administrator.'));
|
||||
}
|
||||
//user already specified in config
|
||||
$oldUser=\OC_Config::getValue('dbuser', false);
|
||||
|
||||
//this should be enough to check for admin rights in mysql
|
||||
$query="SELECT user FROM mysql.user WHERE user='$this->dbuser'";
|
||||
if(mysql_query($query, $connection)) {
|
||||
//use the admin login data for the new database user
|
||||
//we don't have a dbuser specified in config
|
||||
if($this->dbuser!=$oldUser) {
|
||||
//add prefix to the admin username to prevent collisions
|
||||
$adminUser=substr('oc_'.$username, 0, 16);
|
||||
|
||||
//add prefix to the mysql user name to prevent collisions
|
||||
$this->dbuser=substr('oc_'.$username, 0, 16);
|
||||
if($this->dbuser!=$oldUser) {
|
||||
//hash the password so we don't need to store the admin config in the config file
|
||||
$this->dbpassword=\OC_Util::generateRandomBytes(30);
|
||||
$i = 1;
|
||||
while(true) {
|
||||
//this should be enough to check for admin rights in mysql
|
||||
$query="SELECT user FROM mysql.user WHERE user='$adminUser'";
|
||||
|
||||
$this->createDBUser($connection);
|
||||
$result = mysql_query($query, $connection);
|
||||
|
||||
\OC_Config::setValue('dbuser', $this->dbuser);
|
||||
\OC_Config::setValue('dbpassword', $this->dbpassword);
|
||||
}
|
||||
//current dbuser has admin rights
|
||||
if($result) {
|
||||
//new dbuser does not exist
|
||||
if(mysql_num_rows($result) === 0) {
|
||||
//use the admin login data for the new database user
|
||||
$this->dbuser=$adminUser;
|
||||
|
||||
//create the database
|
||||
$this->createDatabase($connection);
|
||||
//create a random password so we don't need to store the admin password in the config file
|
||||
$this->dbpassword=\OC_Util::generateRandomBytes(30);
|
||||
|
||||
$this->createDBUser($connection);
|
||||
|
||||
break;
|
||||
} else {
|
||||
//repeat with different username
|
||||
$length=strlen((string)$i);
|
||||
$adminUser=substr('oc_'.$username, 0, 16 - $length).$i;
|
||||
$i++;
|
||||
}
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
};
|
||||
|
||||
\OC_Config::setValue('dbuser', $this->dbuser);
|
||||
\OC_Config::setValue('dbpassword', $this->dbpassword);
|
||||
}
|
||||
else {
|
||||
if($this->dbuser!=$oldUser) {
|
||||
\OC_Config::setValue('dbuser', $this->dbuser);
|
||||
\OC_Config::setValue('dbpassword', $this->dbpassword);
|
||||
}
|
||||
|
||||
//create the database
|
||||
$this->createDatabase($connection);
|
||||
}
|
||||
//create the database
|
||||
$this->createDatabase($connection);
|
||||
|
||||
//fill the database if needed
|
||||
$query='select count(*) from information_schema.tables'
|
||||
|
|
Loading…
Reference in New Issue