diff --git a/img/done.png b/img/done.png
new file mode 100644
index 00000000..26f41be7
Binary files /dev/null and b/img/done.png differ
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");