diff options
Diffstat (limited to 'src/gmcerts.c')
-rw-r--r-- | src/gmcerts.c | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/src/gmcerts.c b/src/gmcerts.c index 923987b1..3c10fff2 100644 --- a/src/gmcerts.c +++ b/src/gmcerts.c | |||
@@ -271,7 +271,9 @@ static void loadIdentityFromCertificate_GmCerts_(iGmCerts *d, const iString *crt | |||
271 | iBlock *finger = fingerprint_TlsCertificate(cert); | 271 | iBlock *finger = fingerprint_TlsCertificate(cert); |
272 | iGmIdentity *ident = findIdentity_GmCerts_(d, finger); | 272 | iGmIdentity *ident = findIdentity_GmCerts_(d, finger); |
273 | if (!ident) { | 273 | if (!ident) { |
274 | /* User-provided certificate. */ | ||
274 | ident = new_GmIdentity(); | 275 | ident = new_GmIdentity(); |
276 | ident->flags |= imported_GmIdentityFlag; | ||
275 | iDate today; | 277 | iDate today; |
276 | initCurrent_Date(&today); | 278 | initCurrent_Date(&today); |
277 | set_String(&ident->notes, collect_String(format_Date(&today, "Imported on %b %d, %Y"))); | 279 | set_String(&ident->notes, collect_String(format_Date(&today, "Imported on %b %d, %Y"))); |
@@ -390,6 +392,14 @@ iBool checkTrust_GmCerts(iGmCerts *d, iRangecc domain, const iTlsCertificate *ce | |||
390 | return iTrue; | 392 | return iTrue; |
391 | } | 393 | } |
392 | 394 | ||
395 | iGmIdentity *identity_GmCerts(iGmCerts *d, unsigned int id) { | ||
396 | return at_PtrArray(&d->idents, id); | ||
397 | } | ||
398 | |||
399 | const iGmIdentity *constIdentity_GmCerts(const iGmCerts *d, unsigned int id) { | ||
400 | return constAt_PtrArray(&d->idents, id); | ||
401 | } | ||
402 | |||
393 | const iGmIdentity *identityForUrl_GmCerts(const iGmCerts *d, const iString *url) { | 403 | const iGmIdentity *identityForUrl_GmCerts(const iGmCerts *d, const iString *url) { |
394 | iConstForEach(PtrArray, i, &d->idents) { | 404 | iConstForEach(PtrArray, i, &d->idents) { |
395 | const iGmIdentity *ident = i.ptr; | 405 | const iGmIdentity *ident = i.ptr; |
@@ -438,6 +448,18 @@ iGmIdentity *newIdentity_GmCerts(iGmCerts *d, int flags, iDate validUntil, const | |||
438 | return id; | 448 | return id; |
439 | } | 449 | } |
440 | 450 | ||
451 | void deleteIdentity_GmCerts(iGmCerts *d, iGmIdentity *identity) { | ||
452 | /* Only delete the files if we created them. */ | ||
453 | if (!(identity->flags & (temporary_GmIdentityFlag | imported_GmIdentityFlag))) { | ||
454 | const char *finger = cstrCollect_String(hexEncode_Block(&identity->fingerprint)); | ||
455 | const char *filename = concatPath_CStr(cstr_String(&d->saveDir), format_CStr("idents/%s", finger)); | ||
456 | remove(format_CStr("%s.crt", filename)); | ||
457 | remove(format_CStr("%s.key", filename)); | ||
458 | } | ||
459 | removeOne_PtrArray(&d->idents, identity); | ||
460 | collect_GmIdentity(identity); | ||
461 | } | ||
462 | |||
441 | const iPtrArray *identities_GmCerts(const iGmCerts *d) { | 463 | const iPtrArray *identities_GmCerts(const iGmCerts *d) { |
442 | return &d->idents; | 464 | return &d->idents; |
443 | } | 465 | } |