diff --git a/lib/db_base.cpp b/lib/db_base.cpp index 81fa1f5c..4bd6378f 100644 --- a/lib/db_base.cpp +++ b/lib/db_base.cpp @@ -79,10 +79,10 @@ db_base::db_base(QString db, MainWindow *mw) db_base::~db_base() { - FOR_ALL_pki(pki, pki_base) { - rootItem->takeChild(pki); - delete pki; - } +// FOR_ALL_pki(pki, pki_base) { +// rootItem->takeChild(pki); +// delete pki; +// } delete rootItem; } @@ -270,7 +270,7 @@ void db_base::storeSelectedItems(XcaTreeView* view) currentIdx = QModelIndex(); } -void db_base::insertSortChild(pki_base *parent, pki_base *child) +void db_base::insertChild(pki_base *parent, pki_base *child) { int row; QModelIndex idx = QModelIndex(); @@ -281,15 +281,14 @@ void db_base::insertSortChild(pki_base *parent, pki_base *child) if (parent != rootItem) idx = index(parent); - row = parent->alphabeticRow(child->getIntName()); - beginInsertRows(idx, row, row); - parent->insert(row, child); + beginInsertRows(idx, 0, 0); + parent->append(child); endInsertRows(); } void db_base::inToCont(pki_base *pki) { - insertSortChild(rootItem, pki); + insertChild(rootItem, pki); } pki_base *db_base::getByName(QString desc) @@ -406,8 +405,9 @@ int db_base::columnCount(const QModelIndex &parent) const if (headertext.count()) return headertext.count(); item = rootItem; + } else { + item = static_cast(parent.internalPointer()); } - item = static_cast(parent.internalPointer()); return item->columns(); } diff --git a/lib/db_base.h b/lib/db_base.h index 0cf3c00b..a4f9c6b8 100644 --- a/lib/db_base.h +++ b/lib/db_base.h @@ -121,7 +121,7 @@ class db_base: public QAbstractItemModel void showSelectedItems(XcaTreeView *view); void storeSelectedItems(XcaTreeView *view); void load_default(load_base &load); - void insertSortChild(pki_base *parent, pki_base *child); + void insertChild(pki_base *parent, pki_base *child); virtual void showItem(const QModelIndex &index) {}; public slots: diff --git a/lib/db_x509.cpp b/lib/db_x509.cpp index 39c61411..bbe7e0ff 100644 --- a/lib/db_x509.cpp +++ b/lib/db_x509.cpp @@ -59,6 +59,7 @@ #include #include +bool db_x509::treeview = true; db_x509::db_x509(QString DBfile, MainWindow *mw) :db_x509super(DBfile, mw) @@ -135,7 +136,7 @@ void db_x509::remFromCont(QModelIndex &idx) printf("Child: %s\n", CCHAR(child->getIntName())); child->delSigner((pki_x509*)pki); new_parent = findSigner(child); - insertSortChild(new_parent, child); + insertChild(new_parent, child); } return; } @@ -150,6 +151,34 @@ void db_x509::preprocess() } +void db_x509::changeView() +{ + pki_base *temproot = new pki_base(); + int rows = rowCount(QModelIndex()); + beginRemoveRows(QModelIndex(), 0, rows); + pki_base *pki = rootItem; + pki_base *parent; + while(pki && pki->childCount()) { + pki = pki->takeFirst(); + while(pki != rootItem && !pki->childCount()) { + parent = pki->getParent(); + temproot->append(pki); + printf("Processing %s\n",CCHAR(pki->getIntName())); + pki = parent; + } + } + endRemoveRows(); + + treeview = !treeview; + if (treeview) + mainwin->BNviewState->setText(tr("Plain View")); + else + mainwin->BNviewState->setText(tr("Tree View")); + + printf("ChildCount=%d\n", temproot->childCount()); + while((temproot->childCount())) + inToCont(temproot->takeFirst()); +} void db_x509::calcEffTrust() { @@ -157,42 +186,33 @@ void db_x509::calcEffTrust() pki->calcEffTrust(); } -#if 0 -void db_x509::insertPKI(pki_base *refpki) -{ - pki_x509 *x = (pki_x509 *)refpki; - findSigner(x); /* sets the signer if found for this cert */ - FOR_ALL_pki(pki, pki_x509) /* sets this cert as signer the certs */ - pki->verify(x); - db_base::insertPKI(refpki); -} -#endif void db_x509::inToCont(pki_base *pki) { pki_x509 *cert = (pki_x509*)pki; findSigner(cert); pki_base *root = cert->getSigner(); - QModelIndex idx = QModelIndex(); + if (!treeview) + root = rootItem; - insertSortChild(root, pki); + insertChild(root, pki); + if (treeview) { + /* search for dangling certificates, which signer this is */ + // printf("New Certificate: %s\n", CCHAR(pki->getIntName())); + FOR_ALL_pki(client, pki_x509) { + //printf("client %s ?\n", CCHAR(client->getIntName())); + if (client->getSigner() == NULL) { + //printf("examining client %s\n", CCHAR(client->getIntName())); + if (client->verify(cert)) { + int row = client->row(); + // printf("Client cert found: %s(%d)%p -> %s(%d)%p\n", CCHAR(pki->getIntName()), pki->childCount(), pki, CCHAR(client->getIntName()), client->childCount(), client); + beginRemoveRows(QModelIndex(), row, row); + rootItem->takeChild(client); + endRemoveRows(); - idx = index(pki); - /* search for dangling certificates, which signer this is */ - // printf("New Certificate: %s\n", CCHAR(pki->getIntName())); - FOR_ALL_pki(client, pki_x509) { - //printf("client %s ?\n", CCHAR(client->getIntName())); - if (client->getSigner() == NULL) { - //printf("examining client %s\n", CCHAR(client->getIntName())); - if (client->verify(cert)) { - int row = client->row(); - // printf("Client cert found: %s(%d)%p -> %s(%d)%p\n", CCHAR(pki->getIntName()), pki->childCount(), pki, CCHAR(client->getIntName()), client->childCount(), client); - beginRemoveRows(QModelIndex(), row, row); - rootItem->takeChild(client); - endRemoveRows(); - - insertSortChild(pki, client); - client = (pki_x509*)rootItem->iterate(); + insertChild(pki, client); + client = (pki_x509*)rootItem->iterate(); + } } } } diff --git a/lib/db_x509.h b/lib/db_x509.h index 804aece3..56419499 100644 --- a/lib/db_x509.h +++ b/lib/db_x509.h @@ -65,51 +65,53 @@ class db_x509: public db_x509super Q_OBJECT protected: - QPixmap *certicon[4]; + QPixmap *certicon[4]; + static bool treeview; public: - db_x509(QString DBfile, MainWindow *mw); - pki_base *newPKI(); - pki_x509 *findSigner(pki_x509 *client); - bool updateView(); - void updateViewAll(); - void updateViewPKI(pki_base *pki); - void remFromCont(QModelIndex &idx); - void preprocess(); - QStringList getPrivateDesc(); - QStringList getSignerDesc(); - void calcEffTrust(); - QList getIssuedCerts(const pki_x509 *issuer); - QList getCerts(bool onlyTrusted); - a1int searchSerial(pki_x509 *signer); - void writeAllCerts(const QString fname, bool onlyTrusted); - pki_x509 *getByIssSerial(const pki_x509 *issuer, const a1int &a); - pki_x509 *getBySubject(const x509name &xname, pki_x509 *last = NULL); - pki_base *insert(pki_base *item); - void newCert(NewX509 *dlg); - void writePKCS12(pki_x509 *cert, QString s, bool chain); - void writePKCS7(pki_x509 *cert, QString s, int type); - void showContextMenu(QContextMenuEvent *e, const QModelIndex &index); - void inToCont(pki_base *pki); + db_x509(QString DBfile, MainWindow *mw); + pki_base *newPKI(); + pki_x509 *findSigner(pki_x509 *client); + bool updateView(); + void updateViewAll(); + void updateViewPKI(pki_base *pki); + void remFromCont(QModelIndex &idx); + void preprocess(); + QStringList getPrivateDesc(); + QStringList getSignerDesc(); + void calcEffTrust(); + QList getIssuedCerts(const pki_x509 *issuer); + QList getCerts(bool onlyTrusted); + a1int searchSerial(pki_x509 *signer); + void writeAllCerts(const QString fname, bool onlyTrusted); + pki_x509 *getByIssSerial(const pki_x509 *issuer, const a1int &a); + pki_x509 *getBySubject(const x509name &xname, pki_x509 *last = NULL); + pki_base *insert(pki_base *item); + void newCert(NewX509 *dlg); + void writePKCS12(pki_x509 *cert, QString s, bool chain); + void writePKCS7(pki_x509 *cert, QString s, int type); + void showContextMenu(QContextMenuEvent *e, const QModelIndex &index); + void inToCont(pki_base *pki); + void changeView(); public slots: - void load(void); - void newItem(void); - void revokeCert(const x509rev &revok, const pki_x509 *issuer); - void store(); - void showItem(const QModelIndex &index); - void setMultiTrust(QAbstractItemView* view); - void setTrust(); - void extendCert(); - void revoke(); - void unRevoke(); - void genCrl(); - void caProperties(); - void toRequest(); - void newCert(pki_temp *); - void newCert(pki_x509req *); - void loadPKCS12(); - void loadPKCS7(); + void load(void); + void newItem(void); + void revokeCert(const x509rev &revok, const pki_x509 *issuer); + void store(); + void showItem(const QModelIndex &index); + void setMultiTrust(QAbstractItemView* view); + void setTrust(); + void extendCert(); + void revoke(); + void unRevoke(); + void genCrl(); + void caProperties(); + void toRequest(); + void newCert(pki_temp *); + void newCert(pki_x509req *); + void loadPKCS12(); + void loadPKCS7(); }; #endif diff --git a/lib/pki_base.cpp b/lib/pki_base.cpp index 1b190dc9..7e0f644a 100644 --- a/lib/pki_base.cpp +++ b/lib/pki_base.cpp @@ -78,6 +78,8 @@ enum pki_type pki_base::getType() pki_base::~pki_base(void) { + while((childCount())) + delete takeFirst(); pki_counter--; } @@ -198,19 +200,6 @@ int pki_base::childCount() return childItems.count(); } -int pki_base::alphabeticRow(QString name) -{ - int i; - for (i=0; i< childItems.size(); i++) { - //printf("CMP: '%s:%s'\n", CCHAR(childItems.at(i)->getIntName()), - // CCHAR(name)); - if (childItems.at(i)->getIntName() > name) { - break; - } - } - return i; -} - int pki_base::row(void) const { if (parent) diff --git a/lib/pki_base.h b/lib/pki_base.h index f7cec68b..cc4c9069 100644 --- a/lib/pki_base.h +++ b/lib/pki_base.h @@ -104,7 +104,6 @@ class pki_base : public QObject pki_base *iterate(pki_base *pki = NULL); void takeChild(pki_base *pki); pki_base *takeFirst(); - int alphabeticRow(QString name); int columns(); virtual QVariant column_data(int col); virtual QVariant getIcon(); diff --git a/widgets/MW_database.cpp b/widgets/MW_database.cpp index a6feb670..5edc6a70 100644 --- a/widgets/MW_database.cpp +++ b/widgets/MW_database.cpp @@ -319,6 +319,12 @@ void MainWindow::on_BNimportPKCS7_clicked(void) certs->loadPKCS7(); } +void MainWindow::on_BNviewState_clicked(void) +{ + if(certs) + certs->changeView(); +} + /* Template buttons */ void MainWindow::on_BNdeleteTemp_clicked(void) { diff --git a/widgets/MainWindow.h b/widgets/MainWindow.h index f393d11c..555b4430 100644 --- a/widgets/MainWindow.h +++ b/widgets/MainWindow.h @@ -70,91 +70,92 @@ class MainWindow: public QMainWindow, public Ui::MainWindow { Q_OBJECT - private: - QString workingdir; + private: + QString workingdir; - protected: - void init_images(); - void init_menu(); - int force_load; - NIDlist *read_nidlist(QString name); - QLabel *statusLabel; + protected: + void init_images(); + void init_menu(); + int force_load; + NIDlist *read_nidlist(QString name); + QLabel *statusLabel; - public: - static db_x509 *certs; - static db_x509req *reqs; - static db_key *keys; - static db_temp *temps; - static db_crl *crls; - static db_base *settings; - static QPixmap *keyImg, *csrImg, *certImg, *tempImg, *nsImg, *revImg, *appIco; - static NIDlist *eku_nid, *dn_nid, *aia_nid; - int exitApp; - QString dbfile; + public: + static db_x509 *certs; + static db_x509req *reqs; + static db_key *keys; + static db_temp *temps; + static db_crl *crls; + static db_base *settings; + static QPixmap *keyImg, *csrImg, *certImg, *tempImg, *nsImg, *revImg, *appIco; + static NIDlist *eku_nid, *dn_nid, *aia_nid; + int exitApp; + QString dbfile; - MainWindow(QWidget *parent); - virtual ~MainWindow(); - void loadSettings(); - void saveSettings(); - int initPass(); - void read_cmdline(); - static int passRead(char *buf, int size, int rwflag, void *userdata); - static int passWrite(char *buf, int size, int rwflag, void *userdata); - //static void Qt::SocketError(errorEx &err); - static void Error(errorEx &err); - void cmd_help(const char* msg); + MainWindow(QWidget *parent); + virtual ~MainWindow(); + void loadSettings(); + void saveSettings(); + int initPass(); + void read_cmdline(); + static int passRead(char *buf, int size, int rwflag, void *userdata); + static int passWrite(char *buf, int size, int rwflag, void *userdata); + //static void Qt::SocketError(errorEx &err); + static void Error(errorEx &err); + void cmd_help(const char* msg); - QString getPath(); - void setPath(QString path); - bool mkDir(QString dir); + QString getPath(); + void setPath(QString path); + bool mkDir(QString dir); - public slots: - void init_database(); - void load_database(); - void close_database(); - void dump_database(); - void connNewX509(NewX509 *nx); - void about(); - void help(); - void import_dbdump(); + public slots: + void init_database(); + void load_database(); + void close_database(); + void dump_database(); + void connNewX509(NewX509 *nx); + void about(); + void help(); + void import_dbdump(); - private slots: - void on_keyView_doubleClicked(const QModelIndex &m); - void on_reqView_doubleClicked(const QModelIndex &m); - void on_certView_doubleClicked(const QModelIndex &m); - void on_tempView_doubleClicked(const QModelIndex &m); - void on_crlView_doubleClicked(const QModelIndex &m); + private slots: + void on_keyView_doubleClicked(const QModelIndex &m); + void on_reqView_doubleClicked(const QModelIndex &m); + void on_certView_doubleClicked(const QModelIndex &m); + void on_tempView_doubleClicked(const QModelIndex &m); + void on_crlView_doubleClicked(const QModelIndex &m); - void on_BNnewKey_clicked(void); - void on_BNdeleteKey_clicked(void); - void on_BNdetailsKey_clicked(void); - void on_BNimportKey_clicked(void); - void on_BNexportKey_clicked(void); - void on_BNimportPFX_clicked(void); + void on_BNnewKey_clicked(void); + void on_BNdeleteKey_clicked(void); + void on_BNdetailsKey_clicked(void); + void on_BNimportKey_clicked(void); + void on_BNexportKey_clicked(void); + void on_BNimportPFX_clicked(void); - void on_BNnewReq_clicked(void); - void on_BNdeleteReq_clicked(void); - void on_BNdetailsReq_clicked(void); - void on_BNimportReq_clicked(void); - void on_BNexportReq_clicked(void); + void on_BNnewReq_clicked(void); + void on_BNdeleteReq_clicked(void); + void on_BNdetailsReq_clicked(void); + void on_BNimportReq_clicked(void); + void on_BNexportReq_clicked(void); - void on_BNnewCert_clicked(void); - void on_BNdeleteCert_clicked(void); - void on_BNdetailsCert_clicked(void); - void on_BNimportCert_clicked(void); - void on_BNexportCert_clicked(void); - void on_BNimportPKCS12_clicked(void); - void on_BNimportPKCS7_clicked(void); + void on_BNnewCert_clicked(void); + void on_BNdeleteCert_clicked(void); + void on_BNdetailsCert_clicked(void); + void on_BNimportCert_clicked(void); + void on_BNexportCert_clicked(void); + void on_BNimportPKCS12_clicked(void); + void on_BNimportPKCS7_clicked(void); + void on_BNviewState_clicked(void); - void on_BNnewTemp_clicked(void); - void on_BNdeleteTemp_clicked(void); - void on_BNchangeTemp_clicked(void); - void on_BNimportTemp_clicked(void); - void on_BNexportTemp_clicked(void); + void on_BNnewTemp_clicked(void); + void on_BNdeleteTemp_clicked(void); + void on_BNchangeTemp_clicked(void); + void on_BNimportTemp_clicked(void); + void on_BNexportTemp_clicked(void); - void on_BNdeleteCrl_clicked(void); - void on_BNdetailsCrl_clicked(void); - void on_BNimportCrl_clicked(void); - void on_BNexportCrl_clicked(void); + void on_BNdeleteCrl_clicked(void); + void on_BNdetailsCrl_clicked(void); + void on_BNimportCrl_clicked(void); + void on_BNexportCrl_clicked(void); }; #endif