diff --git a/lib/db_key.cpp b/lib/db_key.cpp index f2b24aad..79ea75f5 100644 --- a/lib/db_key.cpp +++ b/lib/db_key.cpp @@ -49,7 +49,7 @@ QStringList db_key::get0PrivateDesc() QStringList x; x.clear(); FOR_ALL_pki(pki, pki_key) { - if (pki->isPrivKey() && pki->getUcount() == 0) + if (pki->isPrivKey() && (pki->getUcount() == 0 || mainwin->multiple_key_use)) x.append(pki->getIntNameWithType()); } return x; diff --git a/ui/Options.ui b/ui/Options.ui index 16049da5..f2ea52dc 100644 --- a/ui/Options.ui +++ b/ui/Options.ui @@ -112,7 +112,7 @@ p, li { white-space: pre-wrap; } - + Allow multiple use of keys diff --git a/widgets/MW_database.cpp b/widgets/MW_database.cpp index d6cce65b..e6aa603a 100644 --- a/widgets/MW_database.cpp +++ b/widgets/MW_database.cpp @@ -78,12 +78,27 @@ void MainWindow::init_database() free(p); } } + mydb.first(); if (!mydb.find(setting, "default_hash")) { if ((p = (char *)mydb.load(NULL))) { hashBox::setDefault(p); free(p); } } + mydb.first(); + if (!mydb.find(setting, "mandatory_dn")) { + if ((p = (char *)mydb.load(NULL))) { + mandatory_dn = p; + free(p); + } + } + mydb.first(); + if (!mydb.find(setting, "multiple_key_use")) { + if ((p = (char *)mydb.load(NULL))) { + multiple_key_use = *p ? true : false; + free(p); + } + } } catch (errorEx &err) { Error(err); return; diff --git a/widgets/MW_menu.cpp b/widgets/MW_menu.cpp index 0eee771b..4f2b1868 100644 --- a/widgets/MW_menu.cpp +++ b/widgets/MW_menu.cpp @@ -134,8 +134,10 @@ void MainWindow::import_dbdump() void MainWindow::setOptions() { - Options *opt = new Options(this); + unsigned char bol; + Options *opt = new Options(this, mandatory_dn); + opt->multiple_use->setChecked(multiple_key_use); if (!opt->exec()) return; @@ -145,8 +147,13 @@ void MainWindow::setOptions() setting, "default_hash"); hashBox::setDefault(alg); - QString mandatory = opt->getDnString(); - printf("DNString = %s\n", CCHAR(mandatory)); - mydb.set((const unsigned char *)CCHAR(mandatory), mandatory.length()+1, 1, - setting, "mandatory_dn"); + mandatory_dn = opt->getDnString(); + printf("DNString = %s\n", CCHAR(mandatory_dn)); + mydb.set((const unsigned char *)CCHAR(mandatory_dn), + mandatory_dn.length()+1, 1, setting, "mandatory_dn"); + + + multiple_key_use = opt->multiple_use->isChecked(); + bol = multiple_key_use ? 1 : 0; + mydb.set(&bol, sizeof(bol), 1, setting, "multiple_key_use"); } diff --git a/widgets/MainWindow.cpp b/widgets/MainWindow.cpp index 13f936e1..86d36e18 100644 --- a/widgets/MainWindow.cpp +++ b/widgets/MainWindow.cpp @@ -53,6 +53,8 @@ MainWindow::MainWindow(QWidget *parent ) statusBar()->addWidget(dbindex, 1); force_load = 0; + multiple_key_use = false; + mandatory_dn = ""; setupUi(this); setWindowTitle(tr(XCA_TITLE)); diff --git a/widgets/MainWindow.h b/widgets/MainWindow.h index 1771a183..0606d855 100644 --- a/widgets/MainWindow.h +++ b/widgets/MainWindow.h @@ -34,6 +34,7 @@ class MainWindow: public QMainWindow, public Ui::MainWindow QString workingdir; QList wdList; QList acList; + QString mandatory_dn; protected: void init_images(); @@ -54,6 +55,7 @@ class MainWindow: public QMainWindow, public Ui::MainWindow int exitApp; QString dbfile; QLabel *dbindex; + bool multiple_key_use; MainWindow(QWidget *parent); virtual ~MainWindow(); diff --git a/widgets/Options.cpp b/widgets/Options.cpp index 3f77e87e..3cb18c3c 100644 --- a/widgets/Options.cpp +++ b/widgets/Options.cpp @@ -8,20 +8,29 @@ #include "Options.h" #include -Options::Options(QWidget *parent) +Options::Options(QWidget *parent, QString dn) :QDialog(parent) { + QStringList dnl = dn.split(","); + if (dn.isEmpty()) + dnl.clear(); NIDlist dn_nid = *MainWindow::dn_nid; setWindowTitle(tr(XCA_TITLE)); setupUi(this); for (int i=0; i < dn_nid.count(); i++) extDNobj->addItem(OBJ_nid2ln(dn_nid[i])); + + for (int i=0; i < dnl.count(); i++) { + int nid; + nid = OBJ_sn2nid(CCHAR(dnl[i])); + extDNlist->insertItem(0, OBJ_nid2ln(nid)); + } } void Options::on_extDNadd_clicked() { - extDNlist->insertItem(0, extDNobj->currentText()); + extDNlist->addItem(extDNobj->currentText()); } void Options::on_extDNdel_clicked() { diff --git a/widgets/Options.h b/widgets/Options.h index b135439a..32435dda 100644 --- a/widgets/Options.h +++ b/widgets/Options.h @@ -17,7 +17,7 @@ class Options: public QDialog, public Ui::Options { Q_OBJECT public: - Options(QWidget *parent); + Options(QWidget *parent, QString dn); public slots: void on_extDNadd_clicked(); void on_extDNdel_clicked();