check custom database-name against supported maximum length of username/databasename of used dbms, fixes #1258

Signed-off-by: Michael Kaufmann <d00p@froxlor.org>
This commit is contained in:
Michael Kaufmann 2024-06-25 10:37:49 +02:00
parent 10e87a909a
commit 1d246fee02
No known key found for this signature in database
GPG Key ID: C121F97338D7A352
2 changed files with 7 additions and 2 deletions

View File

@ -54,7 +54,7 @@ class Mysqls extends ApiCommand implements ResourceEntity
* @param string $description
* optional, description for database
* @param string $custom_suffix
* optional, name for database
* optional, name for database if customer.mysqlprefix setting is set to "DBNAME"
* @param bool $sendinfomail
* optional, send created resource-information to customer, default: false
* @param int $customerid
@ -110,6 +110,9 @@ class Mysqls extends ApiCommand implements ResourceEntity
$dbm = new DbManager($this->logger());
if (strtoupper(Settings::Get('customer.mysqlprefix')) == 'DBNAME' && !empty($databasename)) {
if (strlen($newdb_params['loginname'] . '_' . $databasename) > Database::getSqlUsernameLength()) {
throw new Exception("Database name cannot be longer than " . (Database::getSqlUsernameLength() - strlen($newdb_params['loginname'] . '_')) . " characters.", 406);
}
$username = $dbm->createDatabase($newdb_params['loginname'] . '_' . $databasename, $password, $dbserver);
} else {
$username = $dbm->createDatabase($newdb_params['loginname'], $password, $dbserver, $newdb_params['mysql_lastaccountnumber']);

View File

@ -25,6 +25,7 @@
namespace Froxlor\Database;
use Exception;
use Froxlor\Database\Manager\DbManagerMySQL;
use Froxlor\Froxlor;
use Froxlor\FroxlorLogger;
@ -83,7 +84,7 @@ class DbManager
* @param array $mysql_access_host_array
*
* @return void
* @throws \Exception
* @throws Exception
*/
public static function correctMysqlUsers(array $mysql_access_host_array)
{
@ -150,6 +151,7 @@ class DbManager
* @param int $last_accnumber
*
* @return string|bool $username if successful or false of username is equal to the password
* @throws Exception
*/
public function createDatabase(string $loginname = null, string $password = null, int $dbserver = 0, int $last_accnumber = 0)
{