diff options
author | Dmitry Stogov <dmitry@php.net> | 2007-07-11 12:18:14 +0000 |
---|---|---|
committer | Dmitry Stogov <dmitry@php.net> | 2007-07-11 12:18:14 +0000 |
commit | 1ad841d53a48cfb411d9ea33955b756abe315d2c (patch) | |
tree | 14cfd446cda179ceb17d1de5b92d7f8c13ee4f0d /ext/openssl/openssl.c | |
parent | 3067f6a9370074b663385c056cad814da6be3447 (diff) | |
download | php-git-1ad841d53a48cfb411d9ea33955b756abe315d2c.tar.gz |
mproced openssl_x509_parse() to return extensions in readable form
Diffstat (limited to 'ext/openssl/openssl.c')
-rw-r--r-- | ext/openssl/openssl.c | 21 |
1 files changed, 17 insertions, 4 deletions
diff --git a/ext/openssl/openssl.c b/ext/openssl/openssl.c index d33bd38409..032c9c25c6 100644 --- a/ext/openssl/openssl.c +++ b/ext/openssl/openssl.c @@ -999,8 +999,10 @@ PHP_FUNCTION(openssl_x509_parse) char * tmpstr; zval * subitem; X509_EXTENSION *extension; - ASN1_OCTET_STRING *extdata; char *extname; + BIO *bio_out; + BUF_MEM *bio_buf; + char buf[256]; if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "Z|b", &zcert, &useshortnames) == FAILURE) { return; @@ -1082,9 +1084,20 @@ PHP_FUNCTION(openssl_x509_parse) for (i = 0; i < X509_get_ext_count(cert); i++) { extension = X509_get_ext(cert, i); - extdata = X509_EXTENSION_get_data(extension); - extname = (char *)OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(extension))); - add_assoc_asn1_string(subitem, extname, extdata); + if (OBJ_obj2nid(X509_EXTENSION_get_object(extension)) != NID_undef) { + extname = (char *)OBJ_nid2sn(OBJ_obj2nid(X509_EXTENSION_get_object(extension))); + } else { + OBJ_obj2txt(buf, sizeof(buf)-1, X509_EXTENSION_get_object(extension), 1); + extname = buf; + } + bio_out = BIO_new(BIO_s_mem()); + if (X509V3_EXT_print(bio_out, extension, 0, 0)) { + BIO_get_mem_ptr(bio_out, &bio_buf); + add_assoc_stringl(subitem, extname, bio_buf->data, bio_buf->length, 1); + } else { + add_assoc_asn1_string(subitem, extname, X509_EXTENSION_get_data(extension)); + } + BIO_free(bio_out); } add_assoc_zval(return_value, "extensions", subitem); |