diff options
author | gotoyuzo <gotoyuzo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-09-17 09:05:02 +0000 |
---|---|---|
committer | gotoyuzo <gotoyuzo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2003-09-17 09:05:02 +0000 |
commit | 30103702c367c5cdaa18b6a622f3916cec6c701e (patch) | |
tree | c236089aa9c6b4183729735e221606a9b536d217 /ext/openssl/ossl.c | |
parent | 12196ee24fce0e601106036e67526819cac07291 (diff) |
* ext/openssl: all files are reviewed to simplify and avoid memory leak.
* ext/openssl/extconf.rb: add check for assert.h.
* ext/openssl/ossl.c (ossl_buf2str): new function to convert
C buffer to String and free buffer.
* ext/openssl/ossl.c (ossl_x509_ary2sk): new function to convert
Array of OpenSSL::X509 to STACK_OF(X509) with exception safe.
* ext/openssl/ossl.c (ossl_to_der, ossl_to_der_if_possible): new
functions to convert object to DER string.
* ext/openssl/ossl.h: ditto.
* ext/openssl/ossl_bio.c (ossl_membio2str): new function to convert
BIO to String object and free BIO.
* ext/openssl/ossl_bio.h: ditto.
* ext/openssl/ossl_pkcs7.c (ossl_pkcs7_to_der): add for "to_der".
* ext/openssl/ossl_x509name.c (ossl_x509name_to_der): ditto.
* ext/openssl/ossl_x509ext.c (ossl_x509ext_to_der): ditto.
* ext/openssl/ossl_x509ext.c (create_ext_from_array): removed
and reimplement in openssl/x509.rb.
* ext/openssl/ossl_x509attr.c: reimplemented and disable some
method temporarily. this class doesn't work fine without ASN.1
data support;-) I'll rewrite in near future.
* ext/openssl/lib/openssl/x509.c (X509::Attribute): get rid off
unused code.
* ext/openssl/lib/openssl/x509.c (X509::ExtensionFactory): refine all.
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@4558 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'ext/openssl/ossl.c')
-rw-r--r-- | ext/openssl/ossl.c | 66 |
1 files changed, 64 insertions, 2 deletions
diff --git a/ext/openssl/ossl.c b/ext/openssl/ossl.c index b90ea10780..f4a3fc4c99 100644 --- a/ext/openssl/ossl.c +++ b/ext/openssl/ossl.c @@ -48,7 +48,7 @@ string2hex(char *buf, int buf_len, char **hexbuf, int *hexbuf_len) * Data Conversion */ STACK_OF(X509) * -ossl_x509_ary2sk(VALUE ary) +ossl_x509_ary2sk0(VALUE ary) { STACK_OF(X509) *sk; VALUE val; @@ -74,7 +74,20 @@ ossl_x509_ary2sk(VALUE ary) STACK_OF(X509) * ossl_protect_x509_ary2sk(VALUE ary, int *status) { - return (STACK_OF(X509)*)rb_protect((VALUE(*)_((VALUE)))ossl_x509_ary2sk, ary, status); + return (STACK_OF(X509)*)rb_protect((VALUE(*)_((VALUE)))ossl_x509_ary2sk0, + ary, status); +} + +STACK_OF(X509) * +ossl_x509_ary2sk(VALUE ary) +{ + STACK_OF(X509) *sk; + int status = 0; + + sk = ossl_protect_x509_ary2sk(ary, &status); + if(status) rb_jump_tag(status); + + return sk; } #if 0 @@ -107,6 +120,26 @@ OSSL_SK2ARY(x509, X509) OSSL_SK2ARY(x509crl, X509_CRL) #endif +static VALUE +ossl_str_new(int size) +{ + return rb_str_new(0, size); +} + +VALUE +ossl_buf2str(char *buf, int len) +{ + VALUE str; + int status = 0; + + str = rb_protect((VALUE(*)_(()))ossl_str_new, len, &status); + memcpy(RSTRING(str)->ptr, buf, len); + OPENSSL_free(buf); + if(status) rb_jump_tag(status); + + return str; +} + /* * our default PEM callback */ @@ -215,6 +248,30 @@ VALUE mOSSL; VALUE eOSSLError; /* + * Convert to DER string + */ +ID ossl_s_to_der; + +VALUE +ossl_to_der(VALUE obj) +{ + VALUE tmp; + + tmp = rb_funcall(obj, ossl_s_to_der, 0); + StringValue(tmp); + + return tmp; +} + +VALUE +ossl_to_der_if_possible(VALUE obj) +{ + if(rb_respond_to(obj, ossl_s_to_der)) + return ossl_to_der(obj); + return obj; +} + +/* * Errors */ void @@ -357,6 +414,11 @@ Init_openssl() rb_define_module_function(mOSSL, "debug=", ossl_debug_set, 1); /* + * Get ID of to_der + */ + ossl_s_to_der = rb_intern("to_der"); + + /* * Init components */ Init_ossl_bn(); |