mirror of
https://github.com/chris2511/xca.git
synced 2026-09-12 19:51:05 +05:00
database transactions implemented
exceptionhandling completed
This commit is contained in:
parent
43211bf1b1
commit
b26f3dcdb1
@ -88,7 +88,8 @@ MainWindow::MainWindow(QWidget *parent, const char *name )
|
||||
}
|
||||
dbfile = baseDir + QDir::separator() + dbfile;
|
||||
#endif
|
||||
dbenv = new DbEnv(DB_CXX_NO_EXCEPTIONS | DB_INIT_TXN );
|
||||
dbenv = new DbEnv(DB_CXX_NO_EXCEPTIONS);
|
||||
dbenv->open(NULL, DB_RECOVER | DB_INIT_TXN | DB_INIT_MPOOL | DB_INIT_LOG | DB_INIT_LOCK | DB_CREATE , 0600 );
|
||||
ERR_load_crypto_strings();
|
||||
OpenSSL_add_all_algorithms();
|
||||
settings = new db_base(dbenv, dbfile.latin1(), "settings");
|
||||
@ -132,6 +133,7 @@ MainWindow::~MainWindow()
|
||||
delete(certs);
|
||||
delete(temps);
|
||||
delete(settings);
|
||||
dbenv->close(0);
|
||||
}
|
||||
|
||||
|
||||
@ -284,4 +286,11 @@ void MainWindow::Error(errorEx &err)
|
||||
QMessageBox::warning(this,tr(XCA_TITLE), tr("The following error occured:") + "\n" +
|
||||
QString::fromLatin1(err.getCString()));
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::crashApp()
|
||||
{
|
||||
pki_base * nullpointer = NULL;
|
||||
CERR("------> CRASHING the Application <----------");
|
||||
nullpointer->getDescription();
|
||||
}
|
||||
|
||||
|
||||
@ -194,6 +194,7 @@ class MainWindow: public MainWindow_UI
|
||||
void setCrlDays();
|
||||
void setTemplate();
|
||||
void genCrl();
|
||||
void crashApp();
|
||||
signals:
|
||||
void keyDone(QString name);
|
||||
};
|
||||
|
||||
@ -64,18 +64,23 @@ void MainWindow::newReq(pki_temp *temp)
|
||||
delete dlg;
|
||||
return;
|
||||
}
|
||||
pki_key *key = (pki_key *)keys->getSelectedPKI(dlg->keyList->currentText().latin1());
|
||||
string cn = dlg->commonName->text().latin1();
|
||||
string c = dlg->countryName->text().latin1();
|
||||
string l = dlg->localityName->text().latin1();
|
||||
string st = dlg->stateOrProvinceName->text().latin1();
|
||||
string o = dlg->organisationName->text().latin1();
|
||||
string ou = dlg->organisationalUnitName->text().latin1();
|
||||
string email = dlg->emailAddress->text().latin1();
|
||||
string desc = dlg->description->text().latin1();
|
||||
pki_x509req *req = new pki_x509req(key, cn,c,l,st,o,ou,email,desc, "");
|
||||
insertReq(req);
|
||||
keys->updateView();
|
||||
try {
|
||||
pki_key *key = (pki_key *)keys->getSelectedPKI(dlg->keyList->currentText().latin1());
|
||||
string cn = dlg->commonName->text().latin1();
|
||||
string c = dlg->countryName->text().latin1();
|
||||
string l = dlg->localityName->text().latin1();
|
||||
string st = dlg->stateOrProvinceName->text().latin1();
|
||||
string o = dlg->organisationName->text().latin1();
|
||||
string ou = dlg->organisationalUnitName->text().latin1();
|
||||
string email = dlg->emailAddress->text().latin1();
|
||||
string desc = dlg->description->text().latin1();
|
||||
pki_x509req *req = new pki_x509req(key, cn,c,l,st,o,ou,email,desc, "");
|
||||
insertReq(req);
|
||||
keys->updateView();
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -94,7 +99,7 @@ void MainWindow::showDetailsReq(QListViewItem *item)
|
||||
void MainWindow::showDetailsReq(pki_x509req *req)
|
||||
{
|
||||
if (!req) return;
|
||||
if (opensslError(req)) return;
|
||||
try {
|
||||
ReqDetail_UI *dlg = new ReqDetail_UI(this,0,true);
|
||||
dlg->descr->setText(req->getDescription().c_str());
|
||||
dlg->setCaption(tr(XCA_TITLE));
|
||||
@ -117,28 +122,44 @@ void MainWindow::showDetailsReq(pki_x509req *req)
|
||||
dlg->dnOU->setText(req->getDN(NID_organizationalUnitName).c_str());
|
||||
dlg->dnEmail->setText(req->getDN(NID_pkcs9_emailAddress).c_str());
|
||||
dlg->image->setPixmap(*csrImg);
|
||||
if ( !dlg->exec()) {
|
||||
delete dlg;
|
||||
return;
|
||||
}
|
||||
string ndesc = dlg->descr->text().latin1();
|
||||
if (ndesc != req->getDescription()) {
|
||||
reqs->renamePKI(req, ndesc);
|
||||
if (dlg->exec()) {
|
||||
string ndesc = dlg->descr->text().latin1();
|
||||
if (ndesc != req->getDescription()) {
|
||||
reqs->renamePKI(req, ndesc);
|
||||
}
|
||||
}
|
||||
delete dlg;
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::deleteReq()
|
||||
{
|
||||
pki_x509req *req = (pki_x509req *)reqs->getSelectedPKI();
|
||||
pki_x509req *req;
|
||||
try {
|
||||
req = (pki_x509req *)reqs->getSelectedPKI();
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!req) return;
|
||||
if (opensslError(req)) return;
|
||||
if (QMessageBox::information(this,tr(XCA_TITLE),
|
||||
tr("Really want to delete the Certificate signing request") +":\n'" +
|
||||
QString::fromLatin1(req->getDescription().c_str()) +
|
||||
"'\n", "Delete", "Cancel")
|
||||
) return;
|
||||
reqs->deletePKI(req);
|
||||
keys->updateView();
|
||||
try {
|
||||
pki_key *pkey = req->getKey();
|
||||
reqs->deletePKI(req);
|
||||
if (pkey) keys->updateViewPKI(pkey);
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::loadReq()
|
||||
@ -155,15 +176,28 @@ void MainWindow::loadReq()
|
||||
delete dlg;
|
||||
if (s.isEmpty()) return;
|
||||
s=QDir::convertSeparators(s);
|
||||
pki_x509req *req = new pki_x509req(s.latin1());
|
||||
if (opensslError(req)) return;
|
||||
insertReq(req);
|
||||
keys->updateView();
|
||||
try {
|
||||
pki_x509req *req = new pki_x509req(s.latin1());
|
||||
insertReq(req);
|
||||
pki_key *pkey = req->getKey();
|
||||
if (pkey) keys->updateViewPKI(pkey);
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::writeReq()
|
||||
{
|
||||
pki_x509req *req = (pki_x509req *)reqs->getSelectedPKI();
|
||||
pki_x509req *req;
|
||||
try {
|
||||
req = (pki_x509req *)reqs->getSelectedPKI();
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!req) return;
|
||||
QStringList filt;
|
||||
filt.append("PKCS#10 CSR ( *.pem *.der )");
|
||||
@ -179,16 +213,23 @@ void MainWindow::writeReq()
|
||||
delete dlg;
|
||||
if (s.isEmpty()) return;
|
||||
s=QDir::convertSeparators(s);
|
||||
if (opensslError(req)) return;
|
||||
|
||||
req->writeReq(s.latin1(),true);
|
||||
if (opensslError(req)) return;
|
||||
try {
|
||||
req->writeReq(s.latin1(),true);
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
}
|
||||
}
|
||||
|
||||
void MainWindow::insertReq(pki_x509req *req)
|
||||
{
|
||||
if (opensslError(req)) return;
|
||||
pki_x509 *oldreq = (pki_x509 *)reqs->findPKI(req);
|
||||
pki_x509 *oldreq;
|
||||
try {
|
||||
oldreq = (pki_x509 *)reqs->findPKI(req);
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
}
|
||||
if (oldreq) {
|
||||
QMessageBox::information(this,tr(XCA_TITLE),
|
||||
tr("The certificate signing request already exists in the database as") +":\n'" +
|
||||
@ -197,8 +238,13 @@ void MainWindow::insertReq(pki_x509req *req)
|
||||
delete(req);
|
||||
return;
|
||||
}
|
||||
reqs->findKey(req);
|
||||
reqs->insertPKI(req);
|
||||
try {
|
||||
reqs->findKey(req);
|
||||
reqs->insertPKI(req);
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@ -223,20 +269,30 @@ void MainWindow::showPopupReq(QListViewItem *item, const QPoint &pt, int x) {
|
||||
|
||||
void MainWindow::renameReq(QListViewItem *item, int col, const QString &text)
|
||||
{
|
||||
pki_base *pki = reqs->getSelectedPKI(item);
|
||||
string txt = text.latin1();
|
||||
reqs->renamePKI(pki, txt);
|
||||
try {
|
||||
pki_base *pki = reqs->getSelectedPKI(item);
|
||||
string txt = text.latin1();
|
||||
reqs->renamePKI(pki, txt);
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
void MainWindow::startRenameReq()
|
||||
{
|
||||
try {
|
||||
#ifdef qt3
|
||||
pki_base *pki = reqs->getSelectedPKI();
|
||||
if (!pki) return;
|
||||
QListViewItem *item = (QListViewItem *)pki->getPointer();
|
||||
item->startRename(0);
|
||||
pki_base *pki = reqs->getSelectedPKI();
|
||||
if (!pki) return;
|
||||
QListViewItem *item = (QListViewItem *)pki->getPointer();
|
||||
item->startRename(0);
|
||||
#else
|
||||
renamePKI(reqs);
|
||||
renamePKI(reqs);
|
||||
#endif
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
Error(err);
|
||||
}
|
||||
}
|
||||
|
||||
@ -12,7 +12,7 @@
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>776</width>
|
||||
<width>772</width>
|
||||
<height>604</height>
|
||||
</rect>
|
||||
</property>
|
||||
@ -843,13 +843,9 @@
|
||||
<name>name</name>
|
||||
<cstring>PushButton13_2_2_5</cstring>
|
||||
</property>
|
||||
<property stdset="1">
|
||||
<name>enabled</name>
|
||||
<bool>false</bool>
|
||||
</property>
|
||||
<property stdset="1">
|
||||
<name>text</name>
|
||||
<string>Import</string>
|
||||
<string>C R A S H</string>
|
||||
</property>
|
||||
</widget>
|
||||
<widget>
|
||||
@ -1133,24 +1129,12 @@
|
||||
<receiver>MainWindow_UI</receiver>
|
||||
<slot>deleteTemp()</slot>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>PushButton25_2_2</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>MainWindow_UI</receiver>
|
||||
<slot>alterTemp()</slot>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>tempList</sender>
|
||||
<signal>rightButtonPressed(QListViewItem*,const QPoint&,int)</signal>
|
||||
<receiver>MainWindow_UI</receiver>
|
||||
<slot>showPopupTemp(QListViewItem *, const QPoint &, int)</slot>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>tempList</sender>
|
||||
<signal>doubleClicked(QListViewItem*)</signal>
|
||||
<receiver>MainWindow_UI</receiver>
|
||||
<slot>alterTemp()</slot>
|
||||
</connection>
|
||||
<connection>
|
||||
<sender>PushButton13_2_2</sender>
|
||||
<signal>clicked()</signal>
|
||||
@ -1175,7 +1159,13 @@
|
||||
<receiver>MainWindow_UI</receiver>
|
||||
<slot>newSerTemp()</slot>
|
||||
</connection>
|
||||
<slot access="public">alterTemp()</slot>
|
||||
<connection>
|
||||
<sender>PushButton13_2_2_5</sender>
|
||||
<signal>clicked()</signal>
|
||||
<receiver>MainWindow_UI</receiver>
|
||||
<slot>crashApp()</slot>
|
||||
</connection>
|
||||
<slot access="public">crashApp()</slot>
|
||||
<slot access="public">deleteCert()</slot>
|
||||
<slot access="public">deleteKey()</slot>
|
||||
<slot access="public">deleteReq()</slot>
|
||||
|
||||
@ -74,10 +74,10 @@ db_base::~db_base()
|
||||
}
|
||||
|
||||
|
||||
Dbc *db_base::getCursor()
|
||||
Dbc *db_base::getCursor(DbTxn *tid)
|
||||
{
|
||||
Dbc *cursor;
|
||||
if (int x = data->cursor(NULL, &cursor, 0)) {
|
||||
if (int x = data->cursor(tid, &cursor, 0)) {
|
||||
data->err(x,"DB new Cursor");
|
||||
return NULL;
|
||||
}
|
||||
@ -197,8 +197,10 @@ void db_base::putInt(string key, int dat)
|
||||
|
||||
void db_base::loadContainer()
|
||||
{
|
||||
DbTxn *tid = NULL;
|
||||
dbenv->txn_begin(NULL, &tid, 0);
|
||||
unsigned char *p;
|
||||
Dbc *cursor = getCursor();
|
||||
Dbc *cursor = getCursor(tid);
|
||||
Dbt *k = new Dbt();
|
||||
Dbt *d = new Dbt();
|
||||
string desc;
|
||||
@ -226,6 +228,8 @@ void db_base::loadContainer()
|
||||
delete (d);
|
||||
freeCursor(cursor);
|
||||
preprocess();
|
||||
tid->commit(0);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -249,10 +253,16 @@ bool db_base::updateView()
|
||||
|
||||
bool db_base::insertPKI(pki_base *pki)
|
||||
{
|
||||
bool s = _writePKI(pki, false);
|
||||
DbTxn *tid = NULL;
|
||||
dbenv->txn_begin(NULL, &tid, 0);
|
||||
bool s = _writePKI(pki, false, tid);
|
||||
if (s) {
|
||||
inToCont(pki);
|
||||
updateView();
|
||||
tid->commit(0);
|
||||
}
|
||||
else {
|
||||
tid->abort();
|
||||
}
|
||||
return s;
|
||||
}
|
||||
@ -294,7 +304,7 @@ bool db_base::_writePKI(pki_base *pki, bool overwrite, DbTxn *tid)
|
||||
}
|
||||
|
||||
|
||||
bool db_base::_removePKI(pki_base *pki, DbTxn *tid = NULL)
|
||||
bool db_base::_removePKI(pki_base *pki, DbTxn *tid)
|
||||
{
|
||||
string desc = pki->getDescription();
|
||||
return removeItem(desc, tid);
|
||||
@ -314,12 +324,18 @@ bool db_base::removeItem(string key, DbTxn *tid)
|
||||
|
||||
bool db_base::deletePKI(pki_base *pki)
|
||||
{
|
||||
bool s = _removePKI(pki);
|
||||
DbTxn *tid = NULL;
|
||||
dbenv->txn_begin(NULL, &tid, 0);
|
||||
bool s = _removePKI(pki, tid);
|
||||
if (s) {
|
||||
remFromCont(pki);
|
||||
updateView();
|
||||
tid->commit(0);
|
||||
delete(pki);
|
||||
}
|
||||
else {
|
||||
tid->abort();
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
@ -327,24 +343,24 @@ bool db_base::renamePKI(pki_base *pki, string desc)
|
||||
{
|
||||
string oldname = pki->getDescription();
|
||||
DbTxn *tid = NULL;
|
||||
//dbenv->txn_begin(NULL, &tid, 0);
|
||||
dbenv->txn_begin(NULL, &tid, 0);
|
||||
if (! _removePKI(pki, tid)) {
|
||||
//tid->abort();
|
||||
tid->abort();
|
||||
return false;
|
||||
}
|
||||
pki->setDescription(desc);
|
||||
if (! _writePKI(pki, false, tid)) {
|
||||
//tid->abort();
|
||||
tid->abort();
|
||||
return false;
|
||||
}
|
||||
// rename the pki in the listView .....
|
||||
QListViewItem * item = (QListViewItem *)pki->getPointer();
|
||||
if (!item) {
|
||||
//tid->abort();
|
||||
tid->abort();
|
||||
return false;
|
||||
}
|
||||
item->setText(0, pki->getDescription().c_str());
|
||||
//tid->commit(0);
|
||||
tid->commit(0);
|
||||
updateViewPKI(pki);
|
||||
return true;
|
||||
}
|
||||
@ -363,8 +379,16 @@ void db_base::inToCont(pki_base *pki)
|
||||
|
||||
bool db_base::updatePKI(pki_base *pki)
|
||||
{
|
||||
bool s = _writePKI(pki, true);
|
||||
if (s) updateViewPKI(pki);
|
||||
DbTxn *tid = NULL;
|
||||
dbenv->txn_begin(NULL, &tid, 0);
|
||||
bool s = _writePKI(pki, true, tid);
|
||||
if (s) {
|
||||
updateViewPKI(pki);
|
||||
tid->commit(0);
|
||||
}
|
||||
else {
|
||||
tid->abort();
|
||||
}
|
||||
return s;
|
||||
}
|
||||
|
||||
|
||||
@ -90,9 +90,9 @@ class db_base: public QObject
|
||||
DbEnv *dbenv;
|
||||
QListView *listView;
|
||||
QList<pki_base> container;
|
||||
bool _writePKI(pki_base *pki, bool overwrite, DbTxn *tid = NULL);
|
||||
bool _writePKI(pki_base *pki, bool overwrite, DbTxn *tid );
|
||||
bool _removePKI(pki_base *pki, DbTxn *tid );
|
||||
bool removeItem(string k, DbTxn *tid = NULL);
|
||||
bool removeItem(string k, DbTxn *tid);
|
||||
public:
|
||||
db_base(DbEnv *dbe, string DBfile, string db);
|
||||
virtual ~db_base();
|
||||
@ -115,7 +115,7 @@ class db_base: public QObject
|
||||
virtual void preprocess() {return;}
|
||||
virtual void remFromCont(pki_base *pki);
|
||||
virtual void inToCont(pki_base *pki);
|
||||
Dbc *getCursor();
|
||||
Dbc *getCursor(DbTxn *tid);
|
||||
bool freeCursor(Dbc *cursor);
|
||||
void *getData(void* key, int length, int *dsize);
|
||||
void *getData(string key, int *dsize);
|
||||
|
||||
Loading…
Reference in New Issue
Block a user