diff options
author | Martin Willi <martin@revosec.ch> | 2010-12-09 11:50:50 +0100 |
---|---|---|
committer | Martin Willi <martin@revosec.ch> | 2011-01-05 16:46:00 +0100 |
commit | dbfbbec368fbe77e0615968448b0fef765356ec8 (patch) | |
tree | 13d6c5114629f9507e43c2fd2f5ac973034a6bd0 /src | |
parent | a199ef15e655df84800879e61bb170bb178da1e3 (diff) | |
download | strongswan-dbfbbec368fbe77e0615968448b0fef765356ec8.tar.bz2 strongswan-dbfbbec368fbe77e0615968448b0fef765356ec8.tar.xz |
Added name constraint enumerator to x509 interface
Diffstat (limited to 'src')
-rw-r--r-- | src/libstrongswan/credentials/certificates/x509.h | 8 | ||||
-rw-r--r-- | src/libstrongswan/plugins/openssl/openssl_x509.c | 1 | ||||
-rw-r--r-- | src/libstrongswan/plugins/x509/x509_cert.c | 30 |
3 files changed, 38 insertions, 1 deletions
diff --git a/src/libstrongswan/credentials/certificates/x509.h b/src/libstrongswan/credentials/certificates/x509.h index cadb40199..ec6a33578 100644 --- a/src/libstrongswan/credentials/certificates/x509.h +++ b/src/libstrongswan/credentials/certificates/x509.h @@ -128,6 +128,14 @@ struct x509_t { * @return enumerator over ipAddrBlocks as traffic_selector_t* */ enumerator_t* (*create_ipAddrBlock_enumerator)(x509_t *this); + + /** + * Create an enumerator over name constraints. + * + * @param perm TRUE for permitted, FALSE for excluded subtrees + * @return enumerator over subtrees as identification_t + */ + enumerator_t* (*create_name_constraint_enumerator)(x509_t *this, bool perm); }; #endif /** X509_H_ @}*/ diff --git a/src/libstrongswan/plugins/openssl/openssl_x509.c b/src/libstrongswan/plugins/openssl/openssl_x509.c index 1630d8faf..b6a06d015 100644 --- a/src/libstrongswan/plugins/openssl/openssl_x509.c +++ b/src/libstrongswan/plugins/openssl/openssl_x509.c @@ -579,6 +579,7 @@ static private_openssl_x509_t *create_empty() .create_crl_uri_enumerator = _create_crl_uri_enumerator, .create_ocsp_uri_enumerator = _create_ocsp_uri_enumerator, .create_ipAddrBlock_enumerator = _create_ipAddrBlock_enumerator, + .create_name_constraint_enumerator = (void*)enumerator_create_empty, }, }, .subjectAltNames = linked_list_create(), diff --git a/src/libstrongswan/plugins/x509/x509_cert.c b/src/libstrongswan/plugins/x509/x509_cert.c index 23c0262a2..cf85fe995 100644 --- a/src/libstrongswan/plugins/x509/x509_cert.c +++ b/src/libstrongswan/plugins/x509/x509_cert.c @@ -132,6 +132,16 @@ struct private_x509_cert_t { linked_list_t *ipAddrBlocks; /** + * List of permitted name constraints + */ + linked_list_t *permitted_names; + + /** + * List of exluced name constraints + */ + linked_list_t *excluded_names; + + /** * certificate's embedded public key */ public_key_t *public_key; @@ -1465,6 +1475,16 @@ METHOD(x509_t, create_ipAddrBlock_enumerator, enumerator_t*, return this->ipAddrBlocks->create_enumerator(this->ipAddrBlocks); } +METHOD(x509_t, create_name_constraint_enumerator, enumerator_t*, + private_x509_cert_t *this, bool perm) +{ + if (perm) + { + return this->permitted_names->create_enumerator(this->permitted_names); + } + return this->excluded_names->create_enumerator(this->excluded_names); +} + METHOD(certificate_t, destroy, void, private_x509_cert_t *this) { @@ -1474,7 +1494,12 @@ METHOD(certificate_t, destroy, void, offsetof(identification_t, destroy)); this->crl_uris->destroy_function(this->crl_uris, (void*)crl_uri_destroy); this->ocsp_uris->destroy_function(this->ocsp_uris, free); - this->ipAddrBlocks->destroy_offset(this->ipAddrBlocks, offsetof(traffic_selector_t, destroy)); + this->ipAddrBlocks->destroy_offset(this->ipAddrBlocks, + offsetof(traffic_selector_t, destroy)); + this->permitted_names->destroy_offset(this->permitted_names, + offsetof(identification_t, destroy)); + this->excluded_names->destroy_offset(this->excluded_names, + offsetof(identification_t, destroy)); DESTROY_IF(this->issuer); DESTROY_IF(this->subject); DESTROY_IF(this->public_key); @@ -1524,6 +1549,7 @@ static private_x509_cert_t* create_empty(void) .create_crl_uri_enumerator = _create_crl_uri_enumerator, .create_ocsp_uri_enumerator = _create_ocsp_uri_enumerator, .create_ipAddrBlock_enumerator = _create_ipAddrBlock_enumerator, + .create_name_constraint_enumerator = _create_name_constraint_enumerator, }, }, .version = 1, @@ -1531,6 +1557,8 @@ static private_x509_cert_t* create_empty(void) .crl_uris = linked_list_create(), .ocsp_uris = linked_list_create(), .ipAddrBlocks = linked_list_create(), + .permitted_names = linked_list_create(), + .excluded_names = linked_list_create(), .pathLenConstraint = X509_NO_PATH_LEN_CONSTRAINT, .ref = 1, ); |