mirror of
https://github.com/chris2511/xca.git
synced 2026-09-12 19:51:05 +05:00
sql: better handle SQL errors during insert
Don't pop-up a success message, but delete the item, if an SQL error occures during insert.
This commit is contained in:
parent
5fbd35ab68
commit
703d9c0ba7
@ -205,7 +205,7 @@ void database_model::importOldDatabase(const QString &dbname)
|
||||
if (r && r->issuedCerts() > 0)
|
||||
r->setDone();
|
||||
qDebug() << "load old:" << pki->getIntName();
|
||||
db->insertPKI(pki);
|
||||
pki = db->insertPKI(pki);
|
||||
}
|
||||
next:
|
||||
if (mydb.next())
|
||||
|
||||
@ -234,7 +234,7 @@ void db_base::sortIndicatorChanged(int logicalIndex, Qt::SortOrder order)
|
||||
allHeaders[logicalIndex]->sortIndicator = order;
|
||||
}
|
||||
|
||||
void db_base::insertPKI(pki_base *pki)
|
||||
pki_base *db_base::insertPKI(pki_base *pki)
|
||||
{
|
||||
QString filename = pki->getFilename();
|
||||
if (!filename.isEmpty()) {
|
||||
@ -242,19 +242,23 @@ void db_base::insertPKI(pki_base *pki)
|
||||
pki->setFilename(QString());
|
||||
}
|
||||
Transaction;
|
||||
if (!TransBegin())
|
||||
return;
|
||||
if (!TransBegin()) {
|
||||
delete pki;
|
||||
return NULL;
|
||||
}
|
||||
QSqlError e = pki->insertSql();
|
||||
if (e.isValid()) {
|
||||
XCA_SQLERROR(e);
|
||||
TransRollback();
|
||||
return;
|
||||
delete pki;
|
||||
return NULL;
|
||||
}
|
||||
Store.add(pki->getSqlItemId(), pki);
|
||||
inToCont(pki);
|
||||
TransCommit();
|
||||
restart_timer();
|
||||
emit columnsContentChanged();
|
||||
return pki;
|
||||
}
|
||||
|
||||
QString db_base::pem2QString(QModelIndexList indexes) const
|
||||
@ -380,8 +384,7 @@ pki_base *db_base::getByReference(pki_base *refpki)
|
||||
|
||||
pki_base *db_base::insert(pki_base *item)
|
||||
{
|
||||
insertPKI(item);
|
||||
return item;
|
||||
return insertPKI(item);
|
||||
}
|
||||
|
||||
void db_base::dump(const QString &dir) const
|
||||
|
||||
@ -66,7 +66,7 @@ class db_base: public QAbstractItemModel
|
||||
db_base(const char *classname);
|
||||
virtual void updateHeaders();
|
||||
virtual ~db_base();
|
||||
virtual void insertPKI(pki_base *pki);
|
||||
virtual pki_base *insertPKI(pki_base *pki);
|
||||
pki_base *getByName(QString desc);
|
||||
pki_base *getByReference(pki_base *refpki);
|
||||
virtual void loadContainer();
|
||||
|
||||
@ -54,7 +54,7 @@ void db_crl::revokeCerts(pki_crl *crl)
|
||||
db_x509 *certs = Database.model<db_x509>();
|
||||
x509revList revlist;
|
||||
|
||||
if (!certs)
|
||||
if (!certs || !crl)
|
||||
return;
|
||||
|
||||
pki_x509 *signer = crl->getIssuer();
|
||||
@ -108,9 +108,11 @@ pki_base *db_crl::insert(pki_base *item)
|
||||
}
|
||||
Transaction;
|
||||
if (TransBegin()) {
|
||||
insertPKI(crl);
|
||||
revokeCerts(crl);
|
||||
TransCommit();
|
||||
crl = dynamic_cast<pki_crl *>(insertPKI(crl));
|
||||
if (crl) {
|
||||
revokeCerts(crl);
|
||||
TransCommit();
|
||||
}
|
||||
}
|
||||
return crl;
|
||||
}
|
||||
@ -210,12 +212,12 @@ pki_crl *db_crl::newCrl(const crljob &task)
|
||||
err = q.lastError();
|
||||
if (err.isValid())
|
||||
throw errorEx(tr("Database error: %1").arg(err.text()));
|
||||
insertPKI(crl);
|
||||
crl = dynamic_cast<pki_crl *>(insertPKI(crl));
|
||||
err = db.lastError();
|
||||
if (err.isValid())
|
||||
throw errorEx(tr("Database error: %1").arg(err.text()));
|
||||
TransCommit();
|
||||
createSuccess((crl));
|
||||
createSuccess(crl);
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
XCA_ERROR(err);
|
||||
|
||||
@ -149,9 +149,7 @@ pki_base* db_key::insert(pki_base *item)
|
||||
deletePKI(index(oldkey));
|
||||
}
|
||||
}
|
||||
insertPKI(lkey);
|
||||
|
||||
return lkey;
|
||||
return insertPKI(lkey);
|
||||
}
|
||||
|
||||
pki_key *db_key::newKey(const keyjob &task, const QString &name)
|
||||
|
||||
@ -326,8 +326,7 @@ pki_base *db_x509::insert(pki_base *item)
|
||||
delete cert;
|
||||
return NULL;
|
||||
}
|
||||
insertPKI(cert);
|
||||
return cert;
|
||||
return insertPKI(cert);
|
||||
}
|
||||
|
||||
void db_x509::load(void)
|
||||
@ -517,7 +516,7 @@ pki_x509 *db_x509::newCert(NewX509 *dlg)
|
||||
// set the comment field
|
||||
cert->setComment(dlg->comment->toPlainText());
|
||||
cert->pkiSource = dlg->getPkiSource();
|
||||
cert = (pki_x509*)insert(cert);
|
||||
cert = dynamic_cast<pki_x509*>(insert(cert));
|
||||
createSuccess(cert);
|
||||
if (cert && clientkey->isToken()) {
|
||||
pki_scard *card = (pki_scard*)clientkey;
|
||||
@ -887,7 +886,7 @@ void db_x509::certRenewal(QModelIndexList indexes)
|
||||
|
||||
// and finally sign the cert
|
||||
newcert->sign(signkey, oldcert->getDigest());
|
||||
newcert = (pki_x509 *)insert(newcert);
|
||||
newcert = dynamic_cast<pki_x509 *>(insert(newcert));
|
||||
createSuccess(newcert);
|
||||
}
|
||||
if (doRevoke)
|
||||
|
||||
@ -53,8 +53,7 @@ pki_base *db_x509req::insert(pki_base *item)
|
||||
delete req;
|
||||
return NULL;
|
||||
}
|
||||
insertPKI(req);
|
||||
return req;
|
||||
return insertPKI(req);
|
||||
}
|
||||
|
||||
void db_x509req::newItem()
|
||||
|
||||
@ -85,7 +85,8 @@ void TempTreeView::newItem()
|
||||
if (temp) {
|
||||
temp->pkiSource = generated;
|
||||
if (runTempDlg(temp)) {
|
||||
temps()->insertPKI(temp);
|
||||
temp = dynamic_cast<pki_temp *>(
|
||||
temps()->insertPKI(temp));
|
||||
temps()->createSuccess(temp);
|
||||
} else {
|
||||
delete temp;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user