avoid infinite recursion if dynamic engine isn't loaded

Submitted by: Jonathon Green <jonathon_au@yahoo.com>
This commit is contained in:
Nils Larsch
2005-08-06 10:34:35 +00:00
parent 222f224664
commit d7e35e0371

View File

@@ -394,19 +394,23 @@ ENGINE *ENGINE_by_id(const char *id)
#else #else
/* EEK! Experimental code starts */ /* EEK! Experimental code starts */
if(iterator) return iterator; if(iterator) return iterator;
/* Prevent infinite recusrion if we're looking for the dynamic engine. */
if (strcmp(id, "dynamic"))
{
#ifdef OPENSSL_SYS_VMS #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 #else
if((load_dir = getenv("OPENSSL_ENGINES")) == 0) load_dir = ENGINESDIR; if((load_dir = getenv("OPENSSL_ENGINES")) == 0) load_dir = ENGINESDIR;
#endif #endif
iterator = ENGINE_by_id("dynamic"); iterator = ENGINE_by_id("dynamic");
if(!iterator || !ENGINE_ctrl_cmd_string(iterator, "ID", id, 0) || 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_LOAD", "2", 0) ||
!ENGINE_ctrl_cmd_string(iterator, "DIR_ADD", !ENGINE_ctrl_cmd_string(iterator, "DIR_ADD",
load_dir, 0) || load_dir, 0) ||
!ENGINE_ctrl_cmd_string(iterator, "LOAD", NULL, 0)) !ENGINE_ctrl_cmd_string(iterator, "LOAD", NULL, 0))
goto notfound; goto notfound;
return iterator; return iterator;
}
notfound: notfound:
ENGINEerr(ENGINE_F_ENGINE_BY_ID,ENGINE_R_NO_SUCH_ENGINE); ENGINEerr(ENGINE_F_ENGINE_BY_ID,ENGINE_R_NO_SUCH_ENGINE);
ERR_add_error_data(2, "id=", id); ERR_add_error_data(2, "id=", id);