static const apr_crypto_driver_t *get_driver(abts_case *tc, apr_pool_t *pool, const char *name, const apr_array_header_t *params) { const apr_crypto_driver_t *driver = NULL; const apu_err_t *err = NULL; apr_status_t rv; rv = apr_crypto_init(pool, params); ABTS_ASSERT(tc, "failed to init apr_crypto", rv == APR_SUCCESS); rv = apr_crypto_get_driver(pool, name, &driver, params, &err); if (APR_SUCCESS != rv && err) { ABTS_NOT_IMPL(tc, err->msg); return NULL; } if (APR_ENOTIMPL == rv) { ABTS_NOT_IMPL(tc, (char *)driver); return NULL; } ABTS_ASSERT(tc, "failed to apr_crypto_get_driver", rv == APR_SUCCESS); ABTS_ASSERT(tc, "apr_crypto_get_driver returned NULL", driver != NULL); if (!driver || rv) { return NULL; } return driver; }
/** * Test initialisation. */ static void test_crypto_init(abts_case *tc, void *data) { apr_pool_t *pool = NULL; apr_status_t rv; apr_pool_create(&pool, NULL); rv = apr_crypto_init(pool, NULL); ABTS_ASSERT(tc, "failed to init apr_crypto", rv == APR_SUCCESS); apr_pool_destroy(pool); }
/* Don't call this function directly! Use svn_atomic__init_once(). */ static svn_error_t * crypto_init(void *baton, apr_pool_t *any_pool) { /* NOTE: this function will locate the topmost ancestor of ANY_POOL for its cleanup handlers. We don't have to worry about ANY_POOL being cleared. */ apr_status_t apr_err = apr_crypto_init(any_pool); if (apr_err) return svn_error_wrap_apr(apr_err, _("Failed to initialize cryptography " "subsystem")); return SVN_NO_ERROR; }
/** * Initialise the SSL in the post_config hook. */ static int session_crypto_init(apr_pool_t *p, apr_pool_t *plog, apr_pool_t *ptemp, server_rec *s) { const apr_crypto_driver_t *driver = NULL; apr_crypto_t *f = NULL; session_crypto_conf *conf = ap_get_module_config(s->module_config, &session_crypto_module); /* session_crypto_init() will be called twice. Don't bother * going through all of the initialization on the first call * because it will just be thrown away.*/ if (ap_state_query(AP_SQ_MAIN_STATE) == AP_SQ_MS_CREATE_PRE_CONFIG) { return OK; } if (conf->library) { const apu_err_t *err = NULL; apr_status_t rv; rv = apr_crypto_init(p); if (APR_SUCCESS != rv) { ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(01843) "APR crypto could not be initialised"); return rv; } rv = apr_crypto_get_driver(&driver, conf->library, conf->params, &err, p); if (APR_EREINIT == rv) { ap_log_error(APLOG_MARK, APLOG_WARNING, rv, s, APLOGNO(01844) "warning: crypto for '%s' was already initialised, " "using existing configuration", conf->library); rv = APR_SUCCESS; } if (APR_SUCCESS != rv && err) { ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(01845) "%s", err->msg); return rv; } if (APR_ENOTIMPL == rv) { ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(01846) "The crypto library '%s' could not be found", conf->library); return rv; } if (APR_SUCCESS != rv || !driver) { ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(01847) "The crypto library '%s' could not be loaded", conf->library); return rv; } rv = apr_crypto_make(&f, driver, conf->params, p); if (APR_SUCCESS != rv) { ap_log_error(APLOG_MARK, APLOG_ERR, rv, s, APLOGNO(01848) "The crypto library '%s' could not be initialised", conf->library); return rv; } ap_log_error(APLOG_MARK, APLOG_INFO, rv, s, APLOGNO(01849) "The crypto library '%s' was loaded successfully", conf->library); apr_pool_userdata_set((const void *)f, CRYPTO_KEY, apr_pool_cleanup_null, s->process->pconf); } return OK; }