diff --git a/Makefile.in b/Makefile.in
index 40e75741..6b506318 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -27,8 +27,6 @@ SUBDIRS=ui lib widgets view
all: $(SUBDIRS) xca
-re: clean all
-
xca: $(OBJS)
$(CC) $(LDFLAGS) $(OBJS) $(LIBS) -o xca
@echo -e "\n\n\nOk, compilation was successfull. \nNow do as root: 'make install'\n"
diff --git a/Rules.mak b/Rules.mak
new file mode 100644
index 00000000..e55a1389
--- /dev/null
+++ b/Rules.mak
@@ -0,0 +1,20 @@
+# recompile all
+re: clean all
+
+# how to create a moc_* file
+moc_%.cpp: %.h %.cpp
+ $(MOC) $< -o $@
+
+# how to create the headerfile from the *.ui
+%.h: %.ui
+ $(UIC) -o $@ $<
+
+# same for the *.cpp file from the *.ui
+%.cpp: %.h %.ui
+ $(UIC) -o $@ -impl $^
+
+# default compile rule
+%.o: %.cpp
+ $(CC) $(CPPFLAGS) $(CFLAGS) -c $< -o $@
+
+.SECONDARY:
diff --git a/lib/pki_crl.cpp b/lib/pki_crl.cpp
index d93bfa25..0e7b59b7 100644
--- a/lib/pki_crl.cpp
+++ b/lib/pki_crl.cpp
@@ -265,6 +265,7 @@ void pki_crl::updateView()
QListViewItem *c = getLvi();
if (!c) return;
c->setPixmap(0, *icon);
+ c->setText(0, getIntName());
c->setText(1, getIssuerName().getEntryByNid(NID_commonName));
c->setText(2, QString::number(numRev()));
}
diff --git a/lib/pki_temp.cpp b/lib/pki_temp.cpp
index 77b35e97..967d3a88 100644
--- a/lib/pki_temp.cpp
+++ b/lib/pki_temp.cpp
@@ -272,6 +272,8 @@ void pki_temp::loadTemp(QString fname)
}
if (fread(&size, sizeof(size), 1, fp) != 1)
openssl_error(tr("Template file content error"));
+ if (size > 65535)
+ openssl_error(tr("Template file content error"));
p = (unsigned char *)OPENSSL_malloc(size);
if (fread(p, 1, size, fp) != size) {
OPENSSL_free(p);
diff --git a/lib/pki_x509.cpp b/lib/pki_x509.cpp
index 477712d3..e2db1ee8 100644
--- a/lib/pki_x509.cpp
+++ b/lib/pki_x509.cpp
@@ -265,16 +265,20 @@ void pki_x509::fromData(unsigned char *p, int size)
int version, sCert, sRev, sLastCrl;
unsigned char *p1 = p;
version = intFromData(&p1);
- if (version >=1 || version <= 3) {
+ if (version >=1 || version <= 4) {
sCert = intFromData(&p1);
cert = d2i_X509(NULL, &p1, sCert);
trust = intFromData(&p1);
sRev = intFromData(&p1);
if (sRev) {
- revoked= d2i_ASN1_TIME(NULL, &p1, sRev);
+ ASN1_TIME *time;
+ if (version != 3) isrevoked = true;
+ time = d2i_ASN1_TIME(NULL, &p1, sRev);
+ revoked = time;
+ OPENSSL_free(time);
}
else {
- revoked = NULL;
+ isrevoked = false;
}
if (version == 1) {
@@ -295,6 +299,8 @@ void pki_x509::fromData(unsigned char *p, int size)
lastCrl.d2i(p1, sLastCrl);
}
}
+ // version 4 saves a NULL as revoked
+ // version 3 did save a recent date :-((
}
else { // old version
cert = d2i_X509(NULL, &p, size);
@@ -308,11 +314,12 @@ void pki_x509::fromData(unsigned char *p, int size)
unsigned char *pki_x509::toData(int *size)
{
-#define PKI_DB_VERSION (int)3
+#define PKI_DB_VERSION (int)4
unsigned char *p, *p1;
int sCert = i2d_X509(cert, NULL);
int sRev = revoked.derSize();
int sLastCrl = lastCrl.derSize();
+ if (!isrevoked) sRev = 0;
// calculate the needed size
*size = caTemplate.length() + 1 + sCert + sRev + sLastCrl + (7 * sizeof(int));
openssl_error();
@@ -395,7 +402,7 @@ bool pki_x509::verify(pki_x509 *signer)
}
-pki_key *pki_x509::getPubKey()
+pki_key *pki_x509::getPubKey() const
{
EVP_PKEY *pkey = X509_get_pubkey(cert);
openssl_error();
diff --git a/lib/pki_x509.h b/lib/pki_x509.h
index f5cedb23..28272b17 100644
--- a/lib/pki_x509.h
+++ b/lib/pki_x509.h
@@ -103,7 +103,7 @@ class pki_x509 : public pki_x509super
bool canSign();
void writeCert(const QString fname, bool PEM, bool append = false);
bool verify(pki_x509 *signer);
- pki_key *getPubKey(); // will be created temporarily and must be freed
+ pki_key *getPubKey() const;
void setPubKey(pki_key *key);
pki_x509 *getSigner();
void delSigner(pki_x509 *s);
diff --git a/lib/pki_x509req.cpp b/lib/pki_x509req.cpp
index 931c0946..45bc064a 100644
--- a/lib/pki_x509req.cpp
+++ b/lib/pki_x509req.cpp
@@ -182,7 +182,7 @@ int pki_x509req::verify()
return x;
}
-pki_key *pki_x509req::getPubKey()
+pki_key *pki_x509req::getPubKey() const
{
EVP_PKEY *pkey = X509_REQ_get_pubkey(request);
pki_key *key = new pki_key(pkey);
diff --git a/lib/pki_x509req.h b/lib/pki_x509req.h
index 3b0dd00c..77f5e598 100644
--- a/lib/pki_x509req.h
+++ b/lib/pki_x509req.h
@@ -75,7 +75,7 @@ class pki_x509req : public pki_x509super
x509name getSubject() const;
void writeReq(const QString fname, bool PEM);
int verify();
- pki_key *getPubKey();
+ pki_key *getPubKey() const;
void createReq(pki_key *key, const x509name &dn, const EVP_MD *md);
void updateView();
QString getSigAlg();
diff --git a/lib/pki_x509super.cpp b/lib/pki_x509super.cpp
index 1525a552..0ff78fcd 100644
--- a/lib/pki_x509super.cpp
+++ b/lib/pki_x509super.cpp
@@ -68,7 +68,7 @@ pki_x509super::~pki_x509super()
x509name pki_x509super::getSubject() const
{
x509name x;
- printf("ERROR VIRTUAL");
+ printf("ERROR VIRTUAL getSubject() %s\n", class_name.latin1());
openssl_error();
return x;
}
@@ -81,7 +81,7 @@ int pki_x509super::verify()
pki_key *pki_x509super::getPubKey() const
{
- printf("ERROR VIRTUAL");
+ printf("ERROR VIRTUAL getPubKey() %s\n", class_name.latin1());
return NULL;
}
diff --git a/lib/pki_x509super.h b/lib/pki_x509super.h
index 6b2fceaf..48ba8c88 100644
--- a/lib/pki_x509super.h
+++ b/lib/pki_x509super.h
@@ -67,7 +67,7 @@ class pki_x509super : public pki_base
virtual ~pki_x509super();
virtual x509name getSubject() const;
virtual int verify();
- pki_key *getPubKey() const;
+ virtual pki_key *getPubKey() const;
pki_key *getRefKey() const;
void setRefKey(pki_key *ref);
void delRefKey(pki_key *ref);
diff --git a/ui/MainWindow.ui b/ui/MainWindow.ui
index 362378d8..6779d36b 100644
--- a/ui/MainWindow.ui
+++ b/ui/MainWindow.ui
@@ -12,7 +12,7 @@
0
0
- 775
+ 820
534
@@ -853,86 +853,6 @@
title
Settings
-
- QGroupBox
-
- name
- GroupBox1
-
-
- geometry
-
- 11
- 11
- 720
- 173
-
-
-
- title
- Distinguished Name
-
-
-
- margin
- 11
-
-
- spacing
- 6
-
-
- QLineEdit
-
- name
- LineEdit1
-
-
-
- QLineEdit
-
- name
- LineEdit2
-
-
-
- QLineEdit
-
- name
- LineEdit3
-
-
-
- QListView
-
- name
- ListView1
-
-
-
- QPushButton
-
- name
- PushButton32
-
-
- text
- add
-
-
-
- QPushButton
-
- name
- PushButton31
-
-
- text
- remove
-
-
-
-
@@ -1024,7 +944,7 @@
7
7
- image1
+ image0
CertView
@@ -1038,7 +958,7 @@
7
7
- image0
+ image1
TempView
@@ -1052,7 +972,7 @@
7
7
- image0
+ image1
CrlView
@@ -1066,17 +986,17 @@
7
7
- image1
+ image0
image0
- 789c7dd7595323470c00e0777e850bbd6da59419db73552a0f1c86057c82cd95ca83e630186363c0184c2aff3d9a96d44b52496a96856f5bd3526bba07efcfdf1ad7c35ee3dbcf3baf6b5acf8a46714f2f8d6fe5db62b1fdedf75fffd8d96d361bfc27cc924673f7a79d5d0a1b45a3ffb4ac6ac0330382b4be9c53731838bfd40e83fa723e55a7a18bc7c039f53e33375d3c4a3c4b4c4fde999b0f6bd7a31a7febedc6e9ca396b5afe8db7d40bea54e79bd56e85ada015bafbf7d569db198e9db376202697afcdf19aef5ddcd6fbf1d95bc6af9dc97ba54e35df81b71bc7ae59f33f789373208e82581ece7deda8e9c7e7e22888647ce4ece7c317711468fc8759e2e1bb3ad3f596de2e3ecfcd3aff83b71ba74eedb81965ba5e32eb3888e350eb3f77261fbf16fbf189daf2dd98757ce62deb59899330c9ddf8c69cb6dc78563b69c5a1d483a15ae783476f99ef539c84ea57e73c09b55ffbe644e6dfaa33cd7f543b6d25b6feb1388d643eec99b5be776fb9df3d8f34b77828d5a5c4d3ab396bbbf93ae24cef8723735638bbf396b5d348eac35775a9f51e8bb348d64373b3ce776896f9e8ceb94823ed47e22debcdd4367f20e6fba5deadbad4f90bb3cc8f4762d27a696926c95f9873371fb8f3466d7b3ed414a7a5ee97489c69bfe9426df50dcd5a4f68967a61e12df94fc464cfebd1acf5f7cd24f7e7def23cf6d495da9d07f2fd8337b5d5bf1567a5ec0792f90a9f6fa3ae241f8ebc65fcc3acfd9a88f3aa889cddfb246f2776de5231e97ec8c1acfdb9516b3ea8bca53f67e23cd6fd7761d67a0666a90763b5d6477b66a90fdd7ecacbb4d4f32bf94bb2f374a2ae74ff2666797ed415737ef1a759f39daa2b7dbe03b3aeaf63d6feb5bc4be72b7161eb199aa5fedcedd722e2fa64bff4c5363f5d8a8b58f753cfacfd3a376b3f2ebc25ff81ba12933baf85ef0fb5d4953827b3be0f56e23cd6fe3d9be5bc8cd66aabf74d6cf5c0526dfb69ecedea41ada7d47ae9c55cbacf17e87edf9711ef17377f8eea4acf6b5b6cfdc1b5daf6c7bbb8b4febc794bfea6b994facc95e677efdbb2b2fc14ab353f44e252f3c39d59df0f43b3e6fff496f52ecc921f73b59dd72bb3de9f98b5de5b6fa9776cae6267f7feab62ab1f4ec485ada712977a1e90bc657f2dcdbadf0a71a5e7050fcc921fc82cf909bd65bca7aed46df3d4c583eb6f55d9fec207b5f57be42dfd5e9bb57e10fbfdb010fb7a8fbd653d7b66edffbeb7f4f3516dcfa334eb798eccb21ebc34eb7a9ec4d3584cd3dad3d8d683736f39df1fe2428d3371a9ef4bacc4953d8fa959df3f7db3d673279edafbe7de5bde0f53b3aebf6dd6fa2fbda7ce03f5548ceefdc1d0784cd553dd0f5db38e4fbca7f2fe4040c21c0b2cf9aa708a7778cf5f15cef001e7f8880b1e23febe94f701aef0195ff015d7f8861b7cc70fdce227ffbc87fbee3ac043ece0111ecbf9c5133cc533ec620ffb38c0217f8df01c2f708c137f5de2154abfaff1066f31c0109bd8c236461cd7e4f898ef4bbedc9122e9fc19de0202f01d6f404018f117df013914d883122a560453b893f9e1decd1fc00c1e600e8fb080653d233cf13d2b3c836778e1bf5f7121fb1bde60c3f3bcc3076ce11347b007f52a275c59130ee0103a7004c7f05dea81138e3f8533e8420ffa6ede01c70cbf542ed721caefdf119ce3695d3d5cf07cdc1398705dff88874bb8d2fae770cdf1c8d5dcc02d0e610c016c208426b47ef407dabc6e793fc590400a19f46140c831235871938872ee524bd7dde6cf1ffc1b47ce07ddd13d7e72d505cde881e6d8a7477e0e13eeed983b34a6052de98956d21f8e7fe6bc6d9ee305de794fd4f93f6041af30a73594e49e096de81d1fe57cd196bbb54f9fb4c4ad74c8f5e812c73cef0c37b4075bdaa703d96f74080975e8888ee93b9dd0299d51977ad4a7010d6944e774c1dfc75cfd842ee5f31cef32bd38fb95db75cf74cdabb8a15b0af869177291d4137eb9bad4840e85d8e5758750518babf932fef77868b94f8df5cff7dccfdafcdf9aff89eff0c9e9ff88e72bc115dff51ff1bcc614075fe3e182e2af157d8d77d5642a8befe4c88ff9dfe33b39f153723fe739f746fe3dc98b1f15edfef9cbce5fa057e358
+ 789c7dd7595323371000e0777e858b7edb4a757c8fa75279e0302ce0136cae541e7a2e30c6c680319854fe7b7afad09254929ae5f8504b6ab5a481fdf95be57ad4af7cfb79e7754deb595a49efe9a5f22d7b5b2cb6bffdfeeb1f3bbbf57a85ffd5e2a852dffd6967976a95b432785ae625e09901d54ef9883bee5a55fc52ba562d1ff1a9b9539378ac8a3bc167ee7a4dacf12c353d05c7321e962e5b2dfe3658dae94a1cd76b36ff2658f305736ce3cd4a376ae523fdf7cd7153160fc762969a64be66bde1f3bdabcb9f483ecfc1da7e2da6e095996cbe836069c79edbe67f08267155ddaab71bd2ffbe74ab1edae7eaf291f6b1388c872feab287c47fb8351ebe9b2d9eb260894f12b78dff102cedd42ddd6eb46c3d446e6b0775f988cfc549885fab43fbd49cd87c376e6b9f052792ff4a1d3522316ddc9da6b4c7a5a3469991d4a366b6f1e03158c7fb54973f11bf8a793cabd7be3bd2fe5b7362f31f95ee34a3c4d63f51779a3a1ef6dd96df7b702af1b21f9dd4e32133a71a4fafee588c5d756cfde1c81dabe5be716b53f3c357736af91eabe3a6ae87e66e1befd0ade3d19d98b3b17a44c1baded8ece357d5e50832ffd69cdaf8a95bc7c72335b5acffd24d993875272de92ff78da36d7fa8aeeea4765e5aead8ea4d1766cf6fe4b67c6a6ecd1716c1bafe13753983f8d16df90fdca4f925c1923fec9933b3dc07cabc7ef066f6fcb7ea38d5f3403a5e16e6db98339d0fc7c1323e7eb8ad5e537592a56db1bc4f12aeb6d5afa32e2b2af71fdc569f1bb3cd0779b0eecf993ab1fce0c26df90cdd9a0fb6cd961fedb9353f94f394703decfeeafc3cbbdda7137366e73772ebfe514f9dd87ed0a7dbe63b3567b6bf43b7adafebb6fa358275ffaed4bc3dba9e915bf34fe4bca66dce4ff76fa0f6f1e9529db6ed3cf5dd56af73b7d5e322587f3f1f987335c97d4d73af0f35cc993a21b7bd0f56eac4f69b9edd7a5fc66bb3e7fba6f67c6069cecd9360c9072d9fccf2a51777a6edf2fb9e936be97e2568ceecbe36d55e1f5c9b6d3e7c57675e9fb7601dbfeece343f776ef3cbfb36cb7d7e6a9b6d7e68a9339b1feedcf67e18b96dfecf605defc2adf36362ceedbe5eb9ad7fe4b67c6f8335df893b8fc4f2fecb23cf1f4ed4a9e547b93acbedfd4bc15acfa5dbce5baace23cbefc0adf303b9757ec2e042dafbe6c2dc7417120f52dfbcf0f3850f66aff73858ebbd765bfea00ee761a10ef91e07eb7af6dc56fffd60ade7a3b9b0fe99dbee73cbadebc14bb7ade7495d446a2a4a1791af07e7c17abf3fd4696ef9cfd47c9ed4b99af3d1fc0bb7bd7f066ecbe74ecd3368bef7c1fa7e2adcb6fea6dbf2bf0cd6fd1a9a0b35cafba308ebc38eb9b0f3d0735bfb34b8d0f7070212269862c64f8e05dee13d7fe438c3079ce3232eb88df8eb52df07b8c2677cc1575ce31b6ef01d3f708b9ffcfd1eeecb738087d8c5233cd6fb8b27788a67d8c33e0e708823fe18e3395ee004a7e1b9c42bd4f7dd35dee02d56b186756c60135b1c57e7f836f78bbef4e820d9f831de0202708f3720206cf107f7800452ec430639ab0505dce9f8702fe35761060f30874758c0b21c119eb8cf0acfe0195ef8f32b2ef47cc31b6c789c77f8802d7ce218f6a05ce59433abc3011c42178ee018be6b3e70c2f1a770063de8c340c61d72cce84be6fa1ca2de9f319ce369993d5cf0785c1398725eff88874bb8b2fce770cdf1c8d9dcc02d8e600255d8400dead0f8511f68f2baf53cb621820ec430802121c78c61c545224ab84a0d5b779352fefb40df8705ddd13d7e72d629cde881e638a047de8729d776c2159ad08296f4442bad0fc73ff3bc4d1ee305def94c94f37fc0825e614e6bc848f68436f48e8f7abf68cbd5daa74f5ae2562b2435bac4098f3bc30dedc196f6e940cf1b1d42445d3aa263fa4e27744a67d4a33e0d6848231ad3395df0d709673fa54bfd7b8e4f993d3cfb959cba67bae655dcd02d5579b7537d48f3a97d797a54872ed5b0c7ebae414e0dcee64bfbdfe3a1c1ff056bc9f7f75ccfd26d8afe27becb3767f0239e9f0857dceb3fe2798d1d1c7e8d870b6a7fcde86bbc64139b3cbe9b206ff3bfc77713e25d92ef93846ba33f8f92f44746bb7ffeb2f3171196e795
image1
- 789c6dd2c10ac2300c00d07bbf2234b7229d1be245fc04c5a3201e4615f430059d0711ff5ddb2e6bb236ec90eed134cb5a19d8ef36602af5ecdbfeeac05dda0798d3abebde87e3faa374d3807fa0d633a52d38d8de6f679fe33fc776e196f53cd010188256a3600a292882096246517815ca99884606e18044a3a40d91824820924265a7923a2e8bcd05f33db1173e002913175f2a6be6d3294871a2d95fa00e8a94ee017b69d339d90df1e77c57ea072ede6758
+ 789c6dd2c10ac2300c00d07bbf2234b7229d1ddec44f503c0ae2a154410f53d0ed20e2bf6bdb656dd6861dd23d9a66591b0587fd1654235ebded6f0edcd53e419d87ae7b1f4f9b8f906d0bfe012317426a70b07bdc2f3ec77f8ed6b89559061a0343d06a124cc105596482585094bc0ae599b04646c9018926491b2205e140c485cace25755c175d0a967b622ff900b8cc9c7d29af594ea722d589167f813aa852ba07d94b9dce296e883fe7bb163f23896753
diff --git a/view/CertView.cpp b/view/CertView.cpp
index 866665ce..e302d159 100644
--- a/view/CertView.cpp
+++ b/view/CertView.cpp
@@ -999,7 +999,7 @@ void CertView::importKey(pki_key *key)
void CertView::importCert(pki_x509 *cert)
{
- insert(cert);
+ db->insert(cert);
}
void CertView::showKey(QString name)
diff --git a/view/CrlView.cpp b/view/CrlView.cpp
index 101d53dc..45a18053 100644
--- a/view/CrlView.cpp
+++ b/view/CrlView.cpp
@@ -55,6 +55,8 @@
#include
#include
#include "widgets/CrlDetail.h"
+#include "widgets/KeyDetail.h"
+#include "widgets/CertDetail.h"
#include "lib/pki_crl.h"
#include "widgets/MainWindow.h"
#include "widgets/clicklabel.h"
@@ -68,15 +70,50 @@ CrlView::CrlView(QWidget * parent, const char * name, WFlags f)
}
-void CrlView::dlg_showCert(QListViewItem *i)
+void CrlView::showCert(QListViewItem *i)
{
- emit showCert(i->text(0));
+ showCert(i->text(0));
}
-void CrlView::dlg_showCert(QString name)
+void CrlView::showCert(QString name)
{
- emit showCert(name);
-}
+ pki_base *item = MainWindow::certs->getByName(name);
+ if (!item) return;
+ CertDetail *dlg=NULL;
+ try {
+ dlg = new CertDetail(this,0,true);
+ dlg->setCert((pki_x509 *)item);
+ connect( dlg->privKey, SIGNAL( doubleClicked(QString) ),
+ this, SLOT( showKey(QString) ));
+ connect( dlg->signCert, SIGNAL( doubleClicked(QString) ),
+ this, SLOT( showCert(QString) ));
+
+ dlg->exec();
+ }
+ catch (errorEx &err) {
+ Error(err);
+ }
+ if (dlg)
+ delete dlg;
+ return ;
+}
+
+void CrlView::showKey(QString name)
+{
+ pki_key *key = (pki_key *)MainWindow::keys->getByName(name);
+ KeyDetail *dlg = NULL;
+ if (!key) return;
+ try {
+ dlg = new KeyDetail(this, 0, true, 0 );
+ dlg->setKey(key);
+ dlg->exec();
+ }
+ catch (errorEx &err) {
+ Error(err);
+ }
+ if (dlg)
+ delete dlg;
+}
void CrlView::showItem(pki_base *item, bool import)
{
@@ -86,9 +123,9 @@ void CrlView::showItem(pki_base *item, bool import)
dlg = new CrlDetail(this,0,true);
dlg->setCrl((pki_crl *)item);
connect( dlg->certList, SIGNAL( doubleClicked(QListViewItem*) ),
- this, SLOT( dlg_showCert(QListViewItem *) ));
+ this, SLOT( showCert(QListViewItem *) ));
connect( dlg->issuerIntName, SIGNAL( doubleClicked(QString) ),
- this, SLOT( dlg_showCert(QString) ));
+ this, SLOT( showCert(QString) ));
dlg->exec();
}
@@ -223,7 +260,7 @@ pki_crl *CrlView::newItem(pki_x509 *cert)
crl->sign(cert->getRefKey(), EVP_md5());
MainWindow::certs->updatePKI(cert);
// FIXME: set Last update
- insert(crl);
+ db->insert(crl);
updateView();
}
catch (errorEx &err) {
diff --git a/view/CrlView.h b/view/CrlView.h
index 191a5ac3..dc8df141 100644
--- a/view/CrlView.h
+++ b/view/CrlView.h
@@ -78,11 +78,9 @@ class CrlView : public XcaListView
void writeCrl_pem();
void writeCrl_der();
private slots:
- void dlg_showCert(QListViewItem *i);
- void dlg_showCert(QString name);
-
- signals:
- void showCert(QString name);
+ void showCert(QListViewItem *i);
+ void showCert(QString name);
+ void showKey(QString name);
};
#endif
diff --git a/view/XcaListView.cpp b/view/XcaListView.cpp
index 699aec8a..b2e20b45 100644
--- a/view/XcaListView.cpp
+++ b/view/XcaListView.cpp
@@ -286,7 +286,6 @@ void XcaListView::newItem(void) { CERR("Virtual called..."); }
void XcaListView::deleteItem(void) { CERR("Virtual called..."); }
void XcaListView::load(void) { CERR("Virtual called..."); }
void XcaListView::store(void) { CERR("Virtual called..."); }
-pki_base *XcaListView::insert(pki_base *) { CERR("Virtual called..."); return NULL; }
void XcaListView::popupMenu(QListViewItem *, QPoint const &, int) { CERR("Virtual called..."); }
void XcaListView::showItem(pki_base *, bool) { CERR("Virtual called...");}
diff --git a/view/XcaListView.h b/view/XcaListView.h
index 6932a98d..4f161f55 100644
--- a/view/XcaListView.h
+++ b/view/XcaListView.h
@@ -89,7 +89,6 @@ class XcaListView : public QListView
void showItem(QListViewItem *item);
virtual void load();
virtual void store();
- virtual pki_base *insert(pki_base *item);
virtual void popupMenu(QListViewItem *item, const QPoint &pt, int x);
void startRename();
void renameDialog();