mirror of
https://github.com/chris2511/xca.git
synced 2026-09-14 11:06:19 +05:00
autoimport from cmdline
This commit is contained in:
parent
abbf284e53
commit
01c8b89edd
2
lib/db.h
2
lib/db.h
@ -55,11 +55,11 @@ class db
|
||||
|
||||
void init_header(db_header_t *db, int ver, int len, enum pki_type type,
|
||||
QString name);
|
||||
bool verify_magic(void);
|
||||
void convert_header(db_header_t *h);
|
||||
void fileIOerr(QString s);
|
||||
|
||||
public:
|
||||
bool verify_magic(void);
|
||||
off_t head_offset;
|
||||
db(QString, int mode = S_IRUSR | S_IWUSR);
|
||||
~db();
|
||||
|
||||
@ -40,7 +40,7 @@ QString pki_crl::getFriendlyClassName()
|
||||
return tr("certificate revokation list");
|
||||
}
|
||||
|
||||
void pki_crl::fload(const QString fname )
|
||||
void pki_crl::fload(const QString fname)
|
||||
{
|
||||
FILE *fp = fopen(QString2filename(fname), "r");
|
||||
X509_CRL *_crl;
|
||||
|
||||
@ -13,9 +13,11 @@
|
||||
#include "pki_pkcs7.h"
|
||||
#include "pki_pkcs12.h"
|
||||
#include "pki_crl.h"
|
||||
#include "load_obj.h"
|
||||
#include "exception.h"
|
||||
#include "func.h"
|
||||
#include "widgets/MainWindow.h"
|
||||
#include <qlist.h>
|
||||
|
||||
pki_multi::pki_multi(const QString name)
|
||||
:pki_base(name)
|
||||
@ -146,3 +148,33 @@ void pki_multi::fromPEM_BIO(BIO *bio, QString name)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void pki_multi::probeAnything(const QString fname)
|
||||
{
|
||||
pki_base *item = NULL;
|
||||
load_base *lb;
|
||||
QList<load_base *> lbs;
|
||||
|
||||
lbs << new load_cert() << new load_pkcs7() << new load_pkcs12()
|
||||
<< new load_crl() << new load_req() << new load_key();
|
||||
|
||||
fload(fname);
|
||||
if (multi.count() > 0)
|
||||
return;
|
||||
|
||||
foreach(lb, lbs) {
|
||||
try {
|
||||
item = lb->loadItem(fname);
|
||||
if (item) {
|
||||
multi.append(item);
|
||||
return;
|
||||
}
|
||||
} catch (errorEx &err) {
|
||||
; // ignore
|
||||
}
|
||||
}
|
||||
while (!lbs.isEmpty())
|
||||
delete lbs.takeFirst();
|
||||
|
||||
#warning delete lbs
|
||||
}
|
||||
|
||||
@ -24,7 +24,9 @@ class pki_multi: public pki_base
|
||||
~pki_multi();
|
||||
void fromPEM_BIO(BIO *bio, QString name);
|
||||
void fload(const QString fname);
|
||||
void probeAnything(const QString fname);
|
||||
pki_base *pull();
|
||||
|
||||
};
|
||||
|
||||
#endif
|
||||
|
||||
@ -77,8 +77,8 @@ pki_pkcs12::pki_pkcs12(const QString fname, pem_password_cb *cb)
|
||||
key->bogusEncryptKey();
|
||||
}
|
||||
PKCS12_free(pkcs12);
|
||||
}
|
||||
else fopen_error(fname);
|
||||
} else
|
||||
fopen_error(fname);
|
||||
}
|
||||
|
||||
pki_pkcs12::~pki_pkcs12()
|
||||
|
||||
@ -99,7 +99,7 @@ void pki_x509::fload(const QString fname)
|
||||
cert = _cert;
|
||||
autoIntName();
|
||||
if (getIntName().isEmpty())
|
||||
setIntName(rmslashdot(fname));
|
||||
setIntName(rmslashdot(fname));
|
||||
trust = 1;
|
||||
efftrust = 1;
|
||||
}
|
||||
|
||||
@ -82,24 +82,27 @@ void MainWindow::init_menu()
|
||||
scardList += token;
|
||||
}
|
||||
|
||||
void MainWindow::changeDB(QString fname)
|
||||
{
|
||||
if (fname.isEmpty())
|
||||
return;
|
||||
close_database();
|
||||
homedir = fname.mid(0, fname.lastIndexOf(QDir::separator()));
|
||||
dbfile = fname;
|
||||
init_database();
|
||||
}
|
||||
|
||||
void MainWindow::new_database()
|
||||
{
|
||||
load_db l;
|
||||
QString selectedFilter;
|
||||
QString fname = QFileDialog::getSaveFileName(this, l.caption, homedir,
|
||||
l.filter, &selectedFilter, QFileDialog::DontConfirmOverwrite);
|
||||
|
||||
if (fname.isEmpty())
|
||||
return;
|
||||
|
||||
close_database();
|
||||
homedir = fname.mid(0, fname.lastIndexOf(QDir::separator()) );
|
||||
// make sure that, if the 3 letter extension was left selected
|
||||
// in Qt's OS X file open dialog,
|
||||
// the filename actually ends with that extension.
|
||||
// Otherwise usability breaks in jarring ways.
|
||||
dbfile = getFullFilename(fname, selectedFilter);
|
||||
init_database();
|
||||
changeDB(getFullFilename(fname, selectedFilter));
|
||||
}
|
||||
|
||||
void MainWindow::load_database()
|
||||
@ -107,14 +110,7 @@ void MainWindow::load_database()
|
||||
load_db l;
|
||||
QString fname = QFileDialog::getOpenFileName(this, l.caption, homedir,
|
||||
l.filter);
|
||||
|
||||
if (fname.isEmpty())
|
||||
return;
|
||||
|
||||
close_database();
|
||||
homedir = fname.mid(0, fname.lastIndexOf(QDir::separator()) );
|
||||
dbfile = fname;
|
||||
init_database();
|
||||
changeDB(fname);
|
||||
}
|
||||
|
||||
void MainWindow::import_dbdump()
|
||||
|
||||
@ -271,30 +271,39 @@ void MainWindow::read_cmdline()
|
||||
{
|
||||
int cnt = 1, opt = 0, force_load = 0;
|
||||
char *arg = NULL;
|
||||
pki_base *item = NULL;
|
||||
load_base *lb = NULL;
|
||||
exitApp = 0;
|
||||
ImportMulti *dlgi = new ImportMulti(this);
|
||||
while (cnt < qApp->argc()) {
|
||||
arg = qApp->argv()[cnt];
|
||||
if (arg[0] == '-') { // option
|
||||
if (lb)
|
||||
delete lb;
|
||||
opt = 1; lb = NULL;
|
||||
opt = 1;
|
||||
switch (arg[1]) {
|
||||
case 'c' : lb = new load_cert(); break;
|
||||
case 'r' : lb = new load_req(); break;
|
||||
case 'k' : lb = new load_key(); break;
|
||||
case 'p' : lb = new load_pkcs12(); break;
|
||||
case '7' : lb = new load_pkcs7(); break;
|
||||
case 'l' : lb = new load_crl(); break;
|
||||
case 't' : lb = new load_temp(); break;
|
||||
case 'P' : lb = new load_pem(); break;
|
||||
case 'd' : force_load=1; break;
|
||||
case 'v' : cmd_version(); opt=0; break;
|
||||
case 'x' : exitApp = 1; opt=0; break;
|
||||
case 'h' : cmd_help(NULL); opt=0; break;
|
||||
default : cmd_help(CCHAR(tr("no such option: %1").arg(arg)));
|
||||
case 'c':
|
||||
case 'r':
|
||||
case 'k':
|
||||
case 'p':
|
||||
case '7':
|
||||
case 'l':
|
||||
case 't':
|
||||
case 'P':
|
||||
break;
|
||||
case 'd':
|
||||
force_load=1;
|
||||
break;
|
||||
case 'v':
|
||||
cmd_version();
|
||||
opt=0;
|
||||
break;
|
||||
case 'x':
|
||||
exitApp = 1;
|
||||
opt=0;
|
||||
break;
|
||||
case 'h':
|
||||
cmd_help(NULL);
|
||||
opt=0;
|
||||
break;
|
||||
default:
|
||||
cmd_help(CCHAR(tr("no such option: %1").arg(arg)));
|
||||
}
|
||||
if (arg[2] != '\0' && opt==1) {
|
||||
arg+=2;
|
||||
@ -304,28 +313,12 @@ void MainWindow::read_cmdline()
|
||||
}
|
||||
}
|
||||
QString file = filename2QString(arg);
|
||||
if (lb) {
|
||||
item = NULL;
|
||||
try {
|
||||
item = lb->loadItem(file);
|
||||
dlgi->addItem(item);
|
||||
}
|
||||
catch (errorEx &err) {
|
||||
if (item) {
|
||||
delete item;
|
||||
item = NULL;
|
||||
}
|
||||
}
|
||||
if (force_load) {
|
||||
changeDB(file);
|
||||
} else {
|
||||
if (QFile::exists(file) || force_load) {
|
||||
dbfile = file;
|
||||
homedir = dbfile.left(dbfile.lastIndexOf(QDir::separator()));
|
||||
init_database();
|
||||
} else {
|
||||
cmd_help(CCHAR(tr("Database file does not exist: '%1'").arg(arg)));
|
||||
}
|
||||
pki_multi *pki = probeAnything(file);
|
||||
dlgi->addItem(pki);
|
||||
}
|
||||
|
||||
cnt++;
|
||||
}
|
||||
dlgi->execute(1); /* force showing of import dialog */
|
||||
@ -850,3 +843,20 @@ void MainWindow::connNewX509(NewX509 *nx)
|
||||
connect( nx, SIGNAL(showReq(QString)), reqs, SLOT(showItem(QString)));
|
||||
}
|
||||
|
||||
pki_multi *MainWindow::probeAnything(QString file)
|
||||
{
|
||||
pki_multi *pki = new pki_multi();
|
||||
|
||||
if (file.endsWith(".xdb")) {
|
||||
try {
|
||||
db mydb(file);
|
||||
mydb.verify_magic();
|
||||
changeDB(file);
|
||||
return pki;
|
||||
} catch (errorEx &err) {
|
||||
}
|
||||
}
|
||||
pki->probeAnything(file);
|
||||
return pki;
|
||||
}
|
||||
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
#define DBFILE "xca.xdb"
|
||||
|
||||
class db_x509;
|
||||
class pki_multi;
|
||||
|
||||
class MainWindow: public QMainWindow, public Ui::MainWindow
|
||||
{
|
||||
@ -46,6 +47,7 @@ class MainWindow: public QMainWindow, public Ui::MainWindow
|
||||
NIDlist *read_nidlist(QString name);
|
||||
QLabel *statusLabel;
|
||||
QString homedir;
|
||||
void changeDB(QString fname);
|
||||
|
||||
public:
|
||||
static db_x509 *certs;
|
||||
@ -81,6 +83,7 @@ class MainWindow: public QMainWindow, public Ui::MainWindow
|
||||
void setItemEnabled(bool enable);
|
||||
QString updateDbPassword(QString newdb, char *pass);
|
||||
void enableTokenMenu(bool enable);
|
||||
pki_multi *probeAnything(QString file);
|
||||
|
||||
public slots:
|
||||
void init_database();
|
||||
|
||||
Loading…
Reference in New Issue
Block a user