From 838fb6924d2d406335fa0f4770ad9764fc7b068e Mon Sep 17 00:00:00 2001 From: Christian Hohnstaedt Date: Sun, 29 Nov 2009 12:28:31 +0100 Subject: [PATCH] add information to requests, wether they are already signed or not - look for a certificate with the public key of the request to decide whether it is already handled or not. --- img/done.png | Bin 0 -> 759 bytes img/imgres.rcc | 1 + lib/db_base.cpp | 3 +-- lib/db_x509.cpp | 6 ++++++ lib/db_x509req.cpp | 17 ++++++++++++++++- lib/db_x509req.h | 1 + lib/db_x509super.cpp | 15 +++++++++++---- lib/db_x509super.h | 2 +- lib/pki_base.cpp | 2 +- lib/pki_base.h | 2 +- lib/pki_crl.cpp | 4 ++-- lib/pki_crl.h | 2 +- lib/pki_evp.cpp | 4 +++- lib/pki_evp.h | 2 +- lib/pki_scard.cpp | 4 ++-- lib/pki_scard.h | 2 +- lib/pki_temp.cpp | 4 ++-- lib/pki_temp.h | 2 +- lib/pki_x509.cpp | 4 +++- lib/pki_x509.h | 2 +- lib/pki_x509req.cpp | 29 +++++++++++++++++++++++------ lib/pki_x509req.h | 7 +++++-- widgets/MainWindow.cpp | 1 + 23 files changed, 85 insertions(+), 31 deletions(-) create mode 100644 img/done.png diff --git a/img/done.png b/img/done.png new file mode 100644 index 0000000000000000000000000000000000000000..26f41be77cc558622f1833f74be8b0b931d5a75d GIT binary patch literal 759 zcmVPx#24YJ`L;(K){{a7>y{D4^000SaNLh0L01FcU01FcV0GgZ_00007bV*G`2iXf8 z5d$=XhfqKO00MVOL_t(I%cavzXq;6P#_``fd1p)=CT-G%DQ*I7ROpu!QEIX1reL~I zR8Z7~Ah_@|?WPN{)>MjC)W(7!S|K$GK`8YDT1Bi2QClt4mY7hJU|~$@*g9%7GnvfH zb_LrXqDkPJZ_B84+|lDH(&8|TC6J1CVsS*h9~l5)9< z-f>r|-|=L>d;ZBa?(p?me9KLtq_;GsFkN&AG8-EKJ%m?l>zA!sJg|7It-r106%Su< z_v@wfxm{=a?ex)gU#$zRds+|AK28{zu^ado$P2Z&#Z}Eqnx9&I>*`gbiTNaL~eqUzBTS3 z=&1)b`B24e2Ga}DH+L@YTwA%a@?hz7sVm$VVk>2>x5o8)b!iC#2l1nwV&9k)nqxZ)xdjX)P`-UR`c3Z&Y%hj7P1t&_cl}k;4uc)}v2hHtf8fpRwL-i;v`- z6-)_61Y?4ns;pqIqDO3+Z-z}i$2NR{Wd=>k%j$9s2&y7eB3XQ9$cX2R$~X3SA9KjZ zrVR;x5Dco?t?XVe*8QA09nPg|9d%Zxlw}s-oX97J{q6}T{Q-{sU*P?CSI#1*OxvJU z#&;q=dDDLT|Esx+fhTG)7}w?(XKZjz)?YRol6N~s8Ueye468~yuGs=b?|I*s9>Bi& p9maEJS6~hL1WWY@D)W@D)8DiO-5W^Nb4&mL002ovPDHLkV1gs5S-k)N literal 0 HcmV?d00001 diff --git a/img/imgres.rcc b/img/imgres.rcc index f21e2105..e9fb1cd4 100644 --- a/img/imgres.rcc +++ b/img/imgres.rcc @@ -21,5 +21,6 @@ template.png validcertkey.png validcert.png + done.png diff --git a/lib/db_base.cpp b/lib/db_base.cpp index a0c821b1..7abd3941 100644 --- a/lib/db_base.cpp +++ b/lib/db_base.cpp @@ -395,8 +395,7 @@ QVariant db_base::data(const QModelIndex &index, int role) const case Qt::DisplayRole: return item->column_data(index.column()); case Qt::DecorationRole: - if (!index.column()) - return item->getIcon(); + return item->getIcon(index.column()); } return QVariant(); } diff --git a/lib/db_x509.cpp b/lib/db_x509.cpp index d702f778..c98bc995 100644 --- a/lib/db_x509.cpp +++ b/lib/db_x509.cpp @@ -186,6 +186,12 @@ void db_x509::inToCont(pki_base *pki) } } findKey(cert); + pki_key *pub = cert->getPubKey(); + pki_x509req *req = (pki_x509req *)mainwin->reqs->findByByPubKey(pub); + delete pub; + if (req) { + req->setDone(); + } calcEffTrust(); } diff --git a/lib/db_x509req.cpp b/lib/db_x509req.cpp index 8589b0b1..bea02991 100644 --- a/lib/db_x509req.cpp +++ b/lib/db_x509req.cpp @@ -18,7 +18,7 @@ db_x509req::db_x509req(QString DBfile, MainWindow *mw) :db_x509super(DBfile, mw) { - headertext << "Name" << "Subject"; + headertext << tr("Name") << tr("Subject") << tr("Signed"); delete_txt = tr("Delete the request(s)"); view = mw->reqView; class_name = "requests"; @@ -81,6 +81,21 @@ void db_x509req::newItem(pki_temp *temp) } } +void db_x509req::inToCont(pki_base *pki) +{ + pki_x509req *req = (pki_x509req *)pki; + db_base::inToCont(pki); + findKey(req); + if (!mainwin->certs) + return; + pki_key *pub = req->getPubKey(); + pki_x509super *cert = mainwin->certs->findByByPubKey(pub); + delete pub; + if (cert) { + req->setDone(); + } +} + void db_x509req::load(void) { load_req l; diff --git a/lib/db_x509req.h b/lib/db_x509req.h index dddf5614..b2c8f3ec 100644 --- a/lib/db_x509req.h +++ b/lib/db_x509req.h @@ -23,6 +23,7 @@ class db_x509req: public db_x509super pki_base* insert(pki_base *item); pki_base *newPKI(db_header_t *head = NULL); void showContextMenu(QContextMenuEvent *e, const QModelIndex &index); + void inToCont(pki_base *pki); public slots: void newItem(pki_temp *temp = NULL); diff --git a/lib/db_x509super.cpp b/lib/db_x509super.cpp index 38959090..6eb78425 100644 --- a/lib/db_x509super.cpp +++ b/lib/db_x509super.cpp @@ -44,9 +44,16 @@ pki_key *db_x509super::findKey(pki_x509super *ref) return key; } -void db_x509super::inToCont(pki_base *pki) +pki_x509super *db_x509super::findByByPubKey(pki_key *refkey) { - db_base::inToCont(pki); - findKey((pki_x509super *)pki); + FOR_ALL_pki(pki, pki_x509super) { + pki_key *key = pki->getPubKey(); + if (!key) + continue; + bool match = refkey->compare(key); + delete key; + if (match) + return pki; + } + return NULL; } - diff --git a/lib/db_x509super.h b/lib/db_x509super.h index 9f7dbfff..aae834b9 100644 --- a/lib/db_x509super.h +++ b/lib/db_x509super.h @@ -19,7 +19,7 @@ class db_x509super: public db_base public: db_x509super(QString db, MainWindow *mw); pki_key *findKey(pki_x509super *ref); - void inToCont(pki_base *pki); + pki_x509super *findByByPubKey(pki_key *refkey); public slots: void delKey(pki_key *delkey); diff --git a/lib/pki_base.cpp b/lib/pki_base.cpp index c4ab0763..dadade1f 100644 --- a/lib/pki_base.cpp +++ b/lib/pki_base.cpp @@ -206,7 +206,7 @@ QVariant pki_base::column_data(int col) { return QVariant("invalid"); } -QVariant pki_base::getIcon() +QVariant pki_base::getIcon(int column) { return QVariant(); } diff --git a/lib/pki_base.h b/lib/pki_base.h index 60f2cb22..3fb38ca5 100644 --- a/lib/pki_base.h +++ b/lib/pki_base.h @@ -63,7 +63,7 @@ class pki_base : public QObject pki_base *takeFirst(); int columns(); virtual QVariant column_data(int col); - virtual QVariant getIcon(); + virtual QVariant getIcon(int column); const char *className() { return class_name; }; uint32_t intFromData(const unsigned char **p); virtual void fromPEM_BIO(BIO *, QString) {}; diff --git a/lib/pki_crl.cpp b/lib/pki_crl.cpp index 12f6c2d3..1835be38 100644 --- a/lib/pki_crl.cpp +++ b/lib/pki_crl.cpp @@ -286,9 +286,9 @@ QVariant pki_crl::column_data(int col) return QVariant(); } -QVariant pki_crl::getIcon() +QVariant pki_crl::getIcon(int column) { - return QVariant(*icon); + return column == 0 ? QVariant(*icon) : QVariant(); } void pki_crl::oldFromData(unsigned char *p, int size) diff --git a/lib/pki_crl.h b/lib/pki_crl.h index 0a958ae6..31fed2dc 100644 --- a/lib/pki_crl.h +++ b/lib/pki_crl.h @@ -56,7 +56,7 @@ class pki_crl: public pki_base x509v3ext getExtByNid(int nid); a1int getVersion(); QVariant column_data(int col); - QVariant getIcon(); + QVariant getIcon(int column); }; #endif diff --git a/lib/pki_evp.cpp b/lib/pki_evp.cpp index b048dfed..3077c23c 100644 --- a/lib/pki_evp.cpp +++ b/lib/pki_evp.cpp @@ -710,8 +710,10 @@ QVariant pki_evp::column_data(int col) return QVariant(); } -QVariant pki_evp::getIcon() +QVariant pki_evp::getIcon(int column) { + if (column != 0) + return QVariant(); int pixnum= isPubKey() ? 1 : 0; return QVariant(*icon[pixnum]); } diff --git a/lib/pki_evp.h b/lib/pki_evp.h index c5a142d2..107e8f1c 100644 --- a/lib/pki_evp.h +++ b/lib/pki_evp.h @@ -76,7 +76,7 @@ class pki_evp: public pki_key int verify(); const EVP_MD *getDefaultMD(); QVariant column_data(int col); - QVariant getIcon(); + QVariant getIcon(int column); }; #endif diff --git a/lib/pki_scard.cpp b/lib/pki_scard.cpp index d8bf71f9..46ac90ed 100644 --- a/lib/pki_scard.cpp +++ b/lib/pki_scard.cpp @@ -607,8 +607,8 @@ QString pki_scard::length() return bit_length + " bit"; } -QVariant pki_scard::getIcon() +QVariant pki_scard::getIcon(int column) { - return QVariant(*icon[0]); + return column == 0 ? QVariant(*icon[0]) : QVariant(); } diff --git a/lib/pki_scard.h b/lib/pki_scard.h index 46a87ef7..227f5aeb 100644 --- a/lib/pki_scard.h +++ b/lib/pki_scard.h @@ -52,7 +52,7 @@ class pki_scard: public pki_key void changeSoPin(); int verify(); bool isScard(); - QVariant getIcon(); + QVariant getIcon(int column); QList getMech_list() { return mech_list; }; void setMech_list(QList ml) { mech_list = ml; }; QList possibleHashNids(); diff --git a/lib/pki_temp.cpp b/lib/pki_temp.cpp index e5c10794..44fb706e 100644 --- a/lib/pki_temp.cpp +++ b/lib/pki_temp.cpp @@ -298,9 +298,9 @@ QVariant pki_temp::column_data(int col) return QVariant(); } -QVariant pki_temp::getIcon() +QVariant pki_temp::getIcon(int column) { - return QVariant(*icon); + return column == 0 ? QVariant(*icon) : QVariant(); } void pki_temp::oldFromData(unsigned char *p, int size ) diff --git a/lib/pki_temp.h b/lib/pki_temp.h index c9dcaec7..15bd861c 100644 --- a/lib/pki_temp.h +++ b/lib/pki_temp.h @@ -43,7 +43,7 @@ class pki_temp: public pki_base bool compare(pki_base *ref); void writeTemp(QString fname); QVariant column_data(int col); - QVariant getIcon(); + QVariant getIcon(int column); }; #endif diff --git a/lib/pki_x509.cpp b/lib/pki_x509.cpp index a6d7ea4b..dc71279b 100644 --- a/lib/pki_x509.cpp +++ b/lib/pki_x509.cpp @@ -716,9 +716,11 @@ QVariant pki_x509::column_data(int col) } -QVariant pki_x509::getIcon() +QVariant pki_x509::getIcon(int column) { int pixnum = 0; + if (column != 0) + return QVariant(); if (getRefKey()) { pixnum += 1; diff --git a/lib/pki_x509.h b/lib/pki_x509.h index 8dba38d1..5291073f 100644 --- a/lib/pki_x509.h +++ b/lib/pki_x509.h @@ -105,7 +105,7 @@ class pki_x509 : public pki_x509super const EVP_MD *getDigest(); extList getExt(); QVariant column_data(int col); - QVariant getIcon(); + QVariant getIcon(int column); }; #endif diff --git a/lib/pki_x509req.cpp b/lib/pki_x509req.cpp index a8581f00..b106669b 100644 --- a/lib/pki_x509req.cpp +++ b/lib/pki_x509req.cpp @@ -16,7 +16,7 @@ #include #include -QPixmap *pki_x509req::icon[3] = { NULL, NULL, NULL }; +QPixmap *pki_x509req::icon[4] = { NULL, NULL, NULL, NULL }; pki_x509req::pki_x509req(const QString name) : pki_x509super(name) @@ -28,7 +28,8 @@ pki_x509req::pki_x509req(const QString name) spki = NULL; dataVersion=1; pkiType=x509_req; - cols=2; + cols=3; + done = false; } pki_x509req::~pki_x509req() @@ -445,14 +446,30 @@ QVariant pki_x509req::column_data(int col) return QVariant(getIntName()); case 1: return QVariant(getSubject().getEntryByNid(NID_commonName)); + case 2: + return QVariant(done ? tr("Signed") : tr("Unhandled")); } return QVariant(); } -QVariant pki_x509req::getIcon() +QVariant pki_x509req::getIcon(int column) { - int pixnum = 0; - if (getRefKey() != NULL ) pixnum = 1; - if (spki != NULL) pixnum = 2; + int pixnum = -1; + + switch (column) { + case 0: + pixnum = 0; + if (getRefKey() != NULL ) + pixnum = 1; + if (spki != NULL) + pixnum = 2; + break; + case 2: + if (done) + pixnum = 3; + break; + } + if (pixnum == -1) + return QVariant(); return QVariant(*icon[pixnum]); } diff --git a/lib/pki_x509req.h b/lib/pki_x509req.h index 61dd83ad..c732720e 100644 --- a/lib/pki_x509req.h +++ b/lib/pki_x509req.h @@ -29,10 +29,11 @@ class pki_x509req : public pki_x509super protected: X509_REQ *request; NETSCAPE_SPKI *spki; + bool done; public: extList getV3ext(); - static QPixmap *icon[3]; + static QPixmap *icon[4]; pki_x509req(QString name = ""); void fromPEM_BIO(BIO *bio, QString name); void fload(const QString fname); @@ -60,7 +61,9 @@ class pki_x509req : public pki_x509super void set_spki(NETSCAPE_SPKI *_spki); ASN1_IA5STRING *spki_challange(); QVariant column_data(int col); - QVariant getIcon(); + QVariant getIcon(int column); + void setDone() { done = true; } + bool getDone() { return done; } }; #endif diff --git a/widgets/MainWindow.cpp b/widgets/MainWindow.cpp index f9a7131a..1d22e77e 100644 --- a/widgets/MainWindow.cpp +++ b/widgets/MainWindow.cpp @@ -247,6 +247,7 @@ void MainWindow::init_images() pki_x509req::icon[0] = loadImg("req.png"); pki_x509req::icon[1] = loadImg("reqkey.png"); pki_x509req::icon[2] = loadImg("spki.png"); + pki_x509req::icon[3] = loadImg("done.png"); pki_x509::icon[0] = loadImg("validcert.png"); pki_x509::icon[1] = loadImg("validcertkey.png"); pki_x509::icon[2] = loadImg("invalidcert.png");