aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/engine/eng_list.c
diff options
context:
space:
mode:
authorNils Larsch <nils@openssl.org>2005-08-06 10:46:19 +0000
committerNils Larsch <nils@openssl.org>2005-08-06 10:46:19 +0000
commit9a1a5b8785f38481d55c32d8c1fec2d840389d3e (patch)
treeb31574c6b3618f00065431c6ce30d0e06e29d824 /crypto/engine/eng_list.c
parentf3b656b246f45a0159aea9c38634a9f72f98d31d (diff)
downloadopenssl-9a1a5b8785f38481d55c32d8c1fec2d840389d3e.tar.gz
avoid infinite recursion if dynamic engine isn't loaded
Submitted by: Jonathon Green <jonathon_au@yahoo.com>
Diffstat (limited to 'crypto/engine/eng_list.c')
-rw-r--r--crypto/engine/eng_list.c24
1 files changed, 14 insertions, 10 deletions
diff --git a/crypto/engine/eng_list.c b/crypto/engine/eng_list.c
index f337e0f3bc..bd511944ba 100644
--- a/crypto/engine/eng_list.c
+++ b/crypto/engine/eng_list.c
@@ -394,19 +394,23 @@ ENGINE *ENGINE_by_id(const char *id)
#else
/* EEK! Experimental code starts */
if(iterator) return iterator;
+ /* Prevent infinite recusrion if we're looking for the dynamic engine. */
+ if (strcmp(id, "dynamic"))
+ {
#ifdef OPENSSL_SYS_VMS
- if((load_dir = getenv("OPENSSL_ENGINES")) == 0) load_dir = "SSLROOT:[ENGINES]";
+ if((load_dir = getenv("OPENSSL_ENGINES")) == 0) load_dir = "SSLROOT:[ENGINES]";
#else
- if((load_dir = getenv("OPENSSL_ENGINES")) == 0) load_dir = ENGINESDIR;
+ if((load_dir = getenv("OPENSSL_ENGINES")) == 0) load_dir = ENGINESDIR;
#endif
- iterator = ENGINE_by_id("dynamic");
- if(!iterator || !ENGINE_ctrl_cmd_string(iterator, "ID", id, 0) ||
- !ENGINE_ctrl_cmd_string(iterator, "DIR_LOAD", "2", 0) ||
- !ENGINE_ctrl_cmd_string(iterator, "DIR_ADD",
- load_dir, 0) ||
- !ENGINE_ctrl_cmd_string(iterator, "LOAD", NULL, 0))
- goto notfound;
- return iterator;
+ iterator = ENGINE_by_id("dynamic");
+ if(!iterator || !ENGINE_ctrl_cmd_string(iterator, "ID", id, 0) ||
+ !ENGINE_ctrl_cmd_string(iterator, "DIR_LOAD", "2", 0) ||
+ !ENGINE_ctrl_cmd_string(iterator, "DIR_ADD",
+ load_dir, 0) ||
+ !ENGINE_ctrl_cmd_string(iterator, "LOAD", NULL, 0))
+ goto notfound;
+ return iterator;
+ }
notfound:
ENGINEerr(ENGINE_F_ENGINE_BY_ID,ENGINE_R_NO_SUCH_ENGINE);
ERR_add_error_data(2, "id=", id);