Aleix Conchillo Flaque <[EMAIL PROTECTED]> writes:

> 
>     ENGINE*
>     setup(char const* engine)
>     {
>         if (::ENGINE_by_id(engine) == NULL)
>         {
>             return NULL;
>         }
> 
>       ENGINE* e = ::ENGINE_by_id("dynamic");
>       if (e)
>         {
>             if (!::ENGINE_ctrl_cmd_string(e, "SO_PATH", engine.c_str(), 0)
>                 || !::ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0))
>             {
>                 // fails in here
>                 e = NULL;
>             }
>         }
>       return e;
>     }
> 

i found the error. by the way, a dummy one. ENGINE_by_id already loads
the shared library, so the function should look like this:

    ENGINE*
    setup(std::string const& engine)
    {
        ENGINE* e = NULL;
        if ((e = ::ENGINE_by_id(engine.c_str())) == NULL)
        {
            return NULL;
        }

        std::string err;
        // if engine was not found try to load the shared library
        if (e == NULL)
        {
            e = ::ENGINE_by_id("dynamic");
            if ((e == NULL)
                || !::ENGINE_ctrl_cmd_string(e, "SO_PATH", engine.c_str(), 0)
                || !::ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0))
            {
                err = "Unable to load engine dynamic library: " + engine;
                ::ENGINE_free(e);
                e = NULL;
            }
        }

        if (e == NULL)
        {
            throw engine_exception(err);
        }
        return e;
    }


regards,

aleix

______________________________________________________________________
OpenSSL Project                                 http://www.openssl.org
User Support Mailing List                    [EMAIL PROTECTED]
Automated List Manager                           [EMAIL PROTECTED]

Reply via email to