Issue #5548 has been reported by Yui NARUSE.

----------------------------------------
Bug #5548: OpenSSL::Engine can't load some old engines/new engines
http://redmine.ruby-lang.org/issues/5548

Author: Yui NARUSE
Status: Assigned
Priority: Normal
Assignee: Martin Bosslet
Category: 
Target version: 
ruby -v: ruby 2.0.0dev (2011-11-01 trunk 33605) [i386-netbsdelf5.99.56]


Current ext/openssl is missing a check for ENGINE_load_dynamic(),
and doesn't have checks/functions for new engines.

diff --git a/ext/openssl/extconf.rb b/ext/openssl/extconf.rb
index 8d8cee3..8f13121 100644
--- a/ext/openssl/extconf.rb
+++ b/ext/openssl/extconf.rb
@@ -118,6 +118,8 @@ if have_header("openssl/engine.h")
   have_func("ENGINE_get_digest")
   have_func("ENGINE_get_cipher")
   have_func("ENGINE_cleanup")
+
+  have_func("ENGINE_load_dynamic")
   have_func("ENGINE_load_4758cca")
   have_func("ENGINE_load_aep")
   have_func("ENGINE_load_atalla")
@@ -126,6 +128,12 @@ if have_header("openssl/engine.h")
   have_func("ENGINE_load_nuron")
   have_func("ENGINE_load_sureware")
   have_func("ENGINE_load_ubsec")
+  have_func("ENGINE_load_padlock")
+  have_func("ENGINE_load_capi")
+  have_func("ENGINE_load_gmp")
+  have_func("ENGINE_load_gost")
+  have_func("ENGINE_load_cryptodev")
+  have_func("ENGINE_load_aesni")
 end
 have_func("DH_generate_parameters_ex")
 have_func("DSA_generate_parameters_ex")
diff --git a/ext/openssl/ossl_engine.c b/ext/openssl/ossl_engine.c
index 79f51b8..829680c 100644
--- a/ext/openssl/ossl_engine.c
+++ b/ext/openssl/ossl_engine.c
@@ -64,29 +64,47 @@ ossl_engine_s_load(int argc, VALUE *argv, VALUE klass)
 #if HAVE_ENGINE_LOAD_DYNAMIC
     OSSL_ENGINE_LOAD_IF_MATCH(dynamic);
 #endif
-#if HAVE_ENGINE_LOAD_CSWIFT
-    OSSL_ENGINE_LOAD_IF_MATCH(cswift);
+#if HAVE_ENGINE_LOAD_4758CCA
+    OSSL_ENGINE_LOAD_IF_MATCH(4758cca);
 #endif
-#if HAVE_ENGINE_LOAD_CHIL
-    OSSL_ENGINE_LOAD_IF_MATCH(chil);
+#if HAVE_ENGINE_LOAD_AEP
+    OSSL_ENGINE_LOAD_IF_MATCH(aep);
 #endif
 #if HAVE_ENGINE_LOAD_ATALLA
     OSSL_ENGINE_LOAD_IF_MATCH(atalla);
 #endif
+#if HAVE_ENGINE_LOAD_CHIL
+    OSSL_ENGINE_LOAD_IF_MATCH(chil);
+#endif
+#if HAVE_ENGINE_LOAD_CSWIFT
+    OSSL_ENGINE_LOAD_IF_MATCH(cswift);
+#endif
 #if HAVE_ENGINE_LOAD_NURON
     OSSL_ENGINE_LOAD_IF_MATCH(nuron);
 #endif
+#if HAVE_ENGINE_LOAD_SUREWARE
+    OSSL_ENGINE_LOAD_IF_MATCH(sureware);
+#endif
 #if HAVE_ENGINE_LOAD_UBSEC
     OSSL_ENGINE_LOAD_IF_MATCH(ubsec);
 #endif
-#if HAVE_ENGINE_LOAD_AEP
-    OSSL_ENGINE_LOAD_IF_MATCH(aep);
+#if HAVE_ENGINE_LOAD_PADLOCK
+    OSSL_ENGINE_LOAD_IF_MATCH(padlock);
 #endif
-#if HAVE_ENGINE_LOAD_SUREWARE
-    OSSL_ENGINE_LOAD_IF_MATCH(sureware);
+#if HAVE_ENGINE_LOAD_CAPI
+    OSSL_ENGINE_LOAD_IF_MATCH(capi);
 #endif
-#if HAVE_ENGINE_LOAD_4758CCA
-    OSSL_ENGINE_LOAD_IF_MATCH(4758cca);
+#if HAVE_ENGINE_LOAD_GMP
+    OSSL_ENGINE_LOAD_IF_MATCH(gmp);
+#endif
+#if HAVE_ENGINE_LOAD_GOST
+    OSSL_ENGINE_LOAD_IF_MATCH(gost);
+#endif
+#if HAVE_ENGINE_LOAD_CRYPTODEV
+    OSSL_ENGINE_LOAD_IF_MATCH(cryptodev);
+#endif
+#if HAVE_ENGINE_LOAD_AESNI
+    OSSL_ENGINE_LOAD_IF_MATCH(aesni);
 #endif
 #endif
 #ifdef HAVE_ENGINE_LOAD_OPENBSD_DEV_CRYPTO


-- 
http://redmine.ruby-lang.org