From 9de6d1dd87cd31889b4f9e721f6245dbd1e63af7 Mon Sep 17 00:00:00 2001 From: gotoyuzo Date: Thu, 9 Oct 2003 16:20:22 +0000 Subject: * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): add optional argument to specify the DirectoryString type (ASN1::UTF8STRING by default). RFC3280 deprecates PrintableString for DirectoryString, and strongly requires to use UTF8String for all certificates issued after December, 31 2003. * ext/openssl/lib/openssl/x509.rb (X509::Name::parse): ditto. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@4733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- ChangeLog | 10 ++++++++++ ext/openssl/lib/openssl/x509.rb | 4 ++-- ext/openssl/ossl_x509name.c | 9 ++++----- 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/ChangeLog b/ChangeLog index ebc94669a..2339ce0b5 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +Fri Oct 10 01:19:00 2003 GOTOU Yuuzou + + * ext/openssl/ossl_x509name.c (ossl_x509name_initialize): add + optional argument to specify the DirectoryString type + (ASN1::UTF8STRING by default). RFC3280 deprecates PrintableString + for DirectoryString, and strongly requires to use UTF8String for + all certificates issued after December, 31 2003. + + * ext/openssl/lib/openssl/x509.rb (X509::Name::parse): ditto. + Thu Oct 9 23:50:21 2003 Nobuyoshi Nakada * eval.c (rb_thread_start_0): prevent thread from GC. diff --git a/ext/openssl/lib/openssl/x509.rb b/ext/openssl/lib/openssl/x509.rb index b8cc5bd4e..40b1a6dd1 100644 --- a/ext/openssl/lib/openssl/x509.rb +++ b/ext/openssl/lib/openssl/x509.rb @@ -64,9 +64,9 @@ module OpenSSL end # Extension class Name - def self.parse(str) + def self.parse(str, type=ASN1::UTF8STRING) ary = str.scan(/\s*([^\/,]+)\s*/).collect{|i| i[0].split("=") } - self.new(ary) + self.new(ary, type) end end # Name diff --git a/ext/openssl/ossl_x509name.c b/ext/openssl/ossl_x509name.c index 4f895f0cf..5964eec2e 100644 --- a/ext/openssl/ossl_x509name.c +++ b/ext/openssl/ossl_x509name.c @@ -9,7 +9,6 @@ * (See the file 'LICENCE'.) */ #include "ossl.h" -#include "st.h" /* For st_foreach -- ST_CONTINUE */ #define WrapX509Name(klass, obj, name) do { \ if (!name) { \ @@ -88,13 +87,13 @@ ossl_x509name_initialize(int argc, VALUE *argv, VALUE self) { X509_NAME *name; int i, type; - VALUE arg, item, key, value; + VALUE arg, str_type, item, key, value; GetX509Name(self, name); - if (rb_scan_args(argc, argv, "01", &arg) == 0) { + if (rb_scan_args(argc, argv, "02", &arg, &str_type) == 0) { return self; } - if (rb_respond_to(arg, ossl_s_to_der)){ + if (argc == 1 && rb_respond_to(arg, ossl_s_to_der)){ unsigned char *p; VALUE str = rb_funcall(arg, ossl_s_to_der, 0); StringValue(str); @@ -104,6 +103,7 @@ ossl_x509name_initialize(int argc, VALUE *argv, VALUE self) return self; } Check_Type(arg, T_ARRAY); + type = NIL_P(str_type) ? V_ASN1_UTF8STRING : NUM2INT(str_type); for (i=0; ilen; i++) { item = RARRAY(arg)->ptr[i]; Check_Type(item, T_ARRAY); @@ -114,7 +114,6 @@ ossl_x509name_initialize(int argc, VALUE *argv, VALUE self) value = RARRAY(item)->ptr[1]; StringValue(key); StringValue(value); - type = ASN1_PRINTABLE_type(RSTRING(value)->ptr, -1); if (!X509_NAME_add_entry_by_txt(name, RSTRING(key)->ptr, type, RSTRING(value)->ptr, RSTRING(value)->len, -1, 0)) { ossl_raise(eX509NameError, NULL); -- cgit