|
|
|
|
@ -12,38 +12,52 @@ 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); |
|
|
|
|
} |
|
|
|
|
else { |
|
|
|
|
if($this->dbuser!=$oldUser) { |
|
|
|
|
\OC_Config::setValue('dbuser', $this->dbuser); |
|
|
|
|
\OC_Config::setValue('dbpassword', $this->dbpassword); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//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); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
//create the database |
|
|
|
|
$this->createDatabase($connection); |
|
|
|
|
|
|
|
|
|
//fill the database if needed |
|
|
|
|
$query='select count(*) from information_schema.tables' |
|
|
|
|
." where table_schema='".$this->dbname."' AND table_name = '".$this->tableprefix."users';"; |
|
|
|
|
|