From 2e8819dfa8ccf4ae8c53b2202e82c419deb60f17 Mon Sep 17 00:00:00 2001 From: Patrick Linstruth Date: Mon, 8 Oct 2018 18:09:45 -0700 Subject: [PATCH] Fixed problems with MySQL user management --- utils/rddbconfig/createdb.cpp | 45 ++++++++++++++++++++++++++++++--- utils/rddbconfig/rddbconfig.cpp | 7 ++++- 2 files changed, 47 insertions(+), 5 deletions(-) diff --git a/utils/rddbconfig/createdb.cpp b/utils/rddbconfig/createdb.cpp index ab6cde05..d049410a 100644 --- a/utils/rddbconfig/createdb.cpp +++ b/utils/rddbconfig/createdb.cpp @@ -35,7 +35,7 @@ CreateDb::CreateDb(QString host,QString database,QString username,QString passwo db_pass=password; } -bool CreateDb::create(QWidget *parent,QString *err_str,RDConfig *config) +bool CreateDb::create(QWidget *parent,QString *err_str,RDConfig *rd_config) { QString sql; @@ -43,7 +43,7 @@ bool CreateDb::create(QWidget *parent,QString *err_str,RDConfig *config) // Open Database // if (!db.isOpen()){ - db=QSqlDatabase::addDatabase(config->mysqlDriver(),"createDb"); + db=QSqlDatabase::addDatabase(rd_config->mysqlDriver(),"createDb"); if(!db.isValid()) { *err_str+= QString(QObject::tr("Couldn't initialize MySql driver!")); return true; @@ -78,8 +78,41 @@ bool CreateDb::create(QWidget *parent,QString *err_str,RDConfig *config) } delete q; - sql=QString().sprintf("grant all on * to %s identified by \"%s\"", - (const char *)db_user,(const char *)db_pass); + // + // Drop any existing 'rduser'@'%' and 'rduser'@'localhost' users + // + sql=QString().sprintf("drop user '%s'@'%%'",(const char *)rd_config->mysqlUsername()); + q=new QSqlQuery(sql,db); + delete q; + sql=QString().sprintf("drop user '%s'@'localhost'",(const char *)rd_config->mysqlUsername()); + q=new QSqlQuery(sql,db); + delete q; + + sql=QString("flush privileges"); + q=new QSqlQuery(sql,db); + delete q; + + sql=QString().sprintf("create user '%s'@'%%' identified by \"%s\"", + (const char *)rd_config->mysqlUsername(),(const char *)rd_config->mysqlPassword()); + q=new QSqlQuery(sql,db); + if (!q->isActive()) { + *err_str+=QString().sprintf("Could not create user: '%s'@'%%'",(const char *)sql); + return true; + } + delete q; + + sql=QString().sprintf("create user '%s'@'localhost' identified by \"%s\"", + (const char *)rd_config->mysqlUsername(),(const char *)rd_config->mysqlPassword()); + q=new QSqlQuery(sql,db); + if (!q->isActive()) { + *err_str+=QString().sprintf("Could not create user: '%s'@'localhost'",(const char *)sql); + return true; + } + delete q; + + sql=QString().sprintf("grant SELECT, INSERT, UPDATE, DELETE, CREATE, DROP,\ + INDEX, ALTER, LOCK TABLES on %s.* to %s", + (const char *)db_name, (const char *)rd_config->mysqlUsername()); q=new QSqlQuery(sql,db); if (!q->isActive()) { *err_str+=QString().sprintf("Could not set permissions: %s",(const char *)sql); @@ -87,6 +120,10 @@ bool CreateDb::create(QWidget *parent,QString *err_str,RDConfig *config) } delete q; + sql=QString("flush privileges"); + q=new QSqlQuery(sql,db); + delete q; + QProcess rddbmgrProcess(parent); QStringList args; args << QString("--create"); diff --git a/utils/rddbconfig/rddbconfig.cpp b/utils/rddbconfig/rddbconfig.cpp index 85a25693..e09f54ee 100644 --- a/utils/rddbconfig/rddbconfig.cpp +++ b/utils/rddbconfig/rddbconfig.cpp @@ -176,7 +176,6 @@ void MainWidget::updateLabels() db = new Db(&err_msg,rd_config); if (!db->isOpen()) { - QMessageBox::information(this,tr("Cannot Open Database"),tr("Unable to open database. The connection parameters of the [Mysql] section of rd.conf may be incorrect or you may need to create a new database.")); label_schema->setVisible(false); db_backup_button->setEnabled(false); db_restore_button->setEnabled(false); @@ -234,6 +233,8 @@ void MainWidget::createData() delete db_create; + updateLabels(); + startDaemons(); } @@ -348,7 +349,9 @@ void MainWidget::resizeEvent(QResizeEvent *e) void MainWidget::stopDaemons() { if(system("/usr/bin/systemctl status rivendell")==0) { + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); system("/usr/bin/systemctl stop rivendell"); + QApplication::restoreOverrideCursor(); db_daemon_start_needed=true; } } @@ -357,7 +360,9 @@ void MainWidget::stopDaemons() void MainWidget::startDaemons() { if(db_daemon_start_needed) { + QApplication::setOverrideCursor(QCursor(Qt::WaitCursor)); system("/usr/bin/systemctl start rivendell"); + QApplication::restoreOverrideCursor(); } }