summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorgotoyuzo <gotoyuzo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-10-09 16:20:22 +0000
committergotoyuzo <gotoyuzo@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>2003-10-09 16:20:22 +0000
commit80549d5f17e09173251204f08d288a71bad39256 (patch)
tree8dbfe93b8b90f5cb9cf60050ba91ea3351359bfa
parent67a98cd52f380857d3aea57cfb26dde38bdbaa97 (diff)
* 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@4733 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r--ChangeLog10
-rw-r--r--ext/openssl/lib/openssl/x509.rb4
-rw-r--r--ext/openssl/ossl_x509name.c9
3 files changed, 16 insertions, 7 deletions
diff --git a/ChangeLog b/ChangeLog
index ebc94669a0..2339ce0b51 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,13 @@
+Fri Oct 10 01:19:00 2003 GOTOU Yuuzou <gotoyuzo@notwork.org>
+
+ * 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 <nobu@ruby-lang.org>
* 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 b8cc5bd4ed..40b1a6dd15 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 4f895f0cfd..5964eec2ee 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; i<RARRAY(arg)->len; 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);