Close #82: Renew CA ROOT Cert

Enable renewal option in the context menu
for self-signed CA certificates
This commit is contained in:
Christian Hohnstaedt 2019-03-12 20:45:15 +01:00
parent df61840afe
commit c41bbf9b23
5 changed files with 14 additions and 8 deletions

View File

@ -911,18 +911,19 @@ void db_x509::certRenewal(QModelIndexList indexes)
try {
oldcert = static_cast<pki_x509*>(idx.internalPointer());
if (!oldcert ||
!(signer = oldcert->getSigner()) ||
if (!oldcert || !(signer = oldcert->getSigner()) ||
!(signkey = signer->getRefKey()) ||
signkey->isPubKey())
return;
CertExtend *dlg = new CertExtend(mainwin, signer);
bool renew_myself = signer == oldcert;
CertExtend *dlg = new CertExtend(mainwin,
renew_myself ? NULL : signer);
dlg->revoke->setEnabled(!renew_myself);
if (!dlg->exec()) {
delete dlg;
return;
}
if (dlg->revoke->isChecked()) {
if (dlg->revoke->isChecked() && !renew_myself) {
Revocation *revoke = new Revocation(mainwin, indexes);
doRevoke = revoke->exec();
r = revoke->getRevocation();
@ -932,6 +933,7 @@ void db_x509::certRenewal(QModelIndexList indexes)
oldcert = static_cast<pki_x509*>
(idx.internalPointer());
newcert = new pki_x509(oldcert);
newcert->pkiSource = renewed;
serial = getUniqueSerial(signer);
newcert->setRevoked(x509rev());

View File

@ -284,6 +284,7 @@ QString pki_base::pki_source_name() const
case transformed: return tr("Transformed");
case token: return tr("Token");
case legacy_db: return tr("Legacy Database");
case renewed: return tr("Renewed");
}
return QString("???");
}

View File

@ -32,7 +32,8 @@ enum pki_source {
generated,
transformed,
token,
legacy_db
legacy_db,
renewed
};
#define VIEW_item_id 0

View File

@ -39,7 +39,7 @@ void CertExtend::on_applyTime_clicked()
void CertExtend::accept()
{
if (notBefore->getDate() < signer->getNotBefore()) {
if (signer && notBefore->getDate() < signer->getNotBefore()) {
QString text = tr("The certificate will be earlier valid than the signer. This is probably not what you want.");
xcaWarning msg(this, text);
msg.addButton(QMessageBox::Ok)->setText(tr("Edit dates"));
@ -60,7 +60,7 @@ void CertExtend::accept()
notBefore->setDate(signer->getNotBefore());
}
}
if (notAfter->getDate() > signer->getNotAfter() &&
if (signer && notAfter->getDate() > signer->getNotAfter() &&
!noWellDefinedExpDate->isChecked()) {
QString text = tr("The certificate will be longer valid than the signer. This is probably not what you want.");
xcaWarning msg(this, text);

View File

@ -72,6 +72,8 @@ void CertTreeView::fillContextMenu(QMenu *menu, QMenu *subExport,
SLOT(manageRevocations()));
subCa->setEnabled(cert->canSign());
}
if (parent == cert && parent->canSign())
menu->addAction(tr("Renewal"), this, SLOT(certRenewal()));
if (sameParent && parentCanSign) {
QString n = multi ? QString(" [%1]").arg(indexes.size()) : "";
menu->addAction(tr("Renewal") +n, this, SLOT(certRenewal()));