diff options
author | Martin Willi <martin@strongswan.org> | 2007-01-08 13:40:36 +0000 |
---|---|---|
committer | Martin Willi <martin@strongswan.org> | 2007-01-08 13:40:36 +0000 |
commit | a622c992408bfc939f6f68a8b766e12624fbab0e (patch) | |
tree | 9f28b97374e335723bea68f7f76ee34ede31538c /src/charon/encoding | |
parent | e3f83e738da0973ec693d09998b5997ff470de2e (diff) | |
download | strongswan-a622c992408bfc939f6f68a8b766e12624fbab0e.tar.bz2 strongswan-a622c992408bfc939f6f68a8b766e12624fbab0e.tar.xz |
fixed crash when CA for certrequest not found
Diffstat (limited to 'src/charon/encoding')
-rw-r--r-- | src/charon/encoding/payloads/certreq_payload.c | 18 |
1 files changed, 14 insertions, 4 deletions
diff --git a/src/charon/encoding/payloads/certreq_payload.c b/src/charon/encoding/payloads/certreq_payload.c index 07d3ce2bc..86f2e3524 100644 --- a/src/charon/encoding/payloads/certreq_payload.c +++ b/src/charon/encoding/payloads/certreq_payload.c @@ -268,11 +268,21 @@ certreq_payload_t *certreq_payload_create() */ certreq_payload_t *certreq_payload_create_from_cacert(identification_t *id) { - x509_t *cacert = charon->credentials->get_ca_certificate(charon->credentials, id); - rsa_public_key_t *pubkey = cacert->get_public_key(cacert); - chunk_t keyid = pubkey->get_keyid(pubkey); + x509_t *cacert; + rsa_public_key_t *pubkey; + chunk_t keyid; + certreq_payload_t *this; + + cacert = charon->credentials->get_ca_certificate(charon->credentials, id); + if (cacert == NULL) + { + /* no such CA cert */ + return NULL; + } - certreq_payload_t *this = certreq_payload_create(); + this = certreq_payload_create(); + pubkey = cacert->get_public_key(cacert); + keyid = pubkey->get_keyid(pubkey); DBG2(DBG_IKE, "requesting certificate issued by '%D'", id); DBG2(DBG_IKE, " with keyid %#B", &keyid); |