1c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* eng_cnf.c */ 2c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* Written by Stephen Henson (steve@openssl.org) for the OpenSSL 3c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * project 2001. 4c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 5c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* ==================================================================== 6c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Copyright (c) 2001 The OpenSSL Project. All rights reserved. 7c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 8c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Redistribution and use in source and binary forms, with or without 9c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * modification, are permitted provided that the following conditions 10c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * are met: 11c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 12c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 1. Redistributions of source code must retain the above copyright 13c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * notice, this list of conditions and the following disclaimer. 14c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 15c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 2. Redistributions in binary form must reproduce the above copyright 16c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * notice, this list of conditions and the following disclaimer in 17c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * the documentation and/or other materials provided with the 18c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * distribution. 19c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 20c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 3. All advertising materials mentioning features or use of this 21c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * software must display the following acknowledgment: 22c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * "This product includes software developed by the OpenSSL Project 23c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 24c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 25c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 26c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * endorse or promote products derived from this software without 27c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * prior written permission. For written permission, please contact 28c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * licensing@OpenSSL.org. 29c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 30c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 5. Products derived from this software may not be called "OpenSSL" 31c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * nor may "OpenSSL" appear in their names without prior written 32c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * permission of the OpenSSL Project. 33c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 34c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 6. Redistributions of any form whatsoever must retain the following 35c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * acknowledgment: 36c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * "This product includes software developed by the OpenSSL Project 37c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 38c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 39c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 40c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 42c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 43c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 45c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 46c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 48c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 49c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 50c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * OF THE POSSIBILITY OF SUCH DAMAGE. 51c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * ==================================================================== 52c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 53c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * This product includes cryptographic software written by Eric Young 54c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * (eay@cryptsoft.com). This product includes software written by Tim 55c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * Hudson (tjh@cryptsoft.com). 56c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * 57c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 58c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 59c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include "eng_int.h" 60c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#include <openssl/conf.h> 61c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 62c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* #define ENGINE_CONF_DEBUG */ 63c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 64c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org/* ENGINE config module */ 65c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 66c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic char *skip_dot(char *name) 67c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 68c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org char *p; 69c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org p = strchr(name, '.'); 70c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (p) 71c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return p + 1; 72c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return name; 73c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 74c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 75c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic STACK_OF(ENGINE) *initialized_engines = NULL; 76c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 77c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic int int_engine_init(ENGINE *e) 78c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 79c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!ENGINE_init(e)) 80c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return 0; 81c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!initialized_engines) 82c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org initialized_engines = sk_ENGINE_new_null(); 83c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!initialized_engines || !sk_ENGINE_push(initialized_engines, e)) 84c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 85c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ENGINE_finish(e); 86c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return 0; 87c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 88c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return 1; 89c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 90c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 91c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 92c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic int int_engine_configure(char *name, char *value, const CONF *cnf) 93c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 94c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org int i; 95c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org int ret = 0; 96c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org long do_init = -1; 97c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org STACK_OF(CONF_VALUE) *ecmds; 98c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org CONF_VALUE *ecmd = NULL; 99c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org char *ctrlname, *ctrlvalue; 100c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ENGINE *e = NULL; 101c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org int soft = 0; 102c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 103c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org name = skip_dot(name); 104c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef ENGINE_CONF_DEBUG 105c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org fprintf(stderr, "Configuring engine %s\n", name); 106c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif 107c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org /* Value is a section containing ENGINE commands */ 108c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ecmds = NCONF_get_section(cnf, value); 109c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 110c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!ecmds) 111c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 112c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ENGINEerr(ENGINE_F_INT_ENGINE_CONFIGURE, ENGINE_R_ENGINE_SECTION_ERROR); 113c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return 0; 114c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 115c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 116c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org for (i = 0; i < sk_CONF_VALUE_num(ecmds); i++) 117c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 118c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ecmd = sk_CONF_VALUE_value(ecmds, i); 119c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ctrlname = skip_dot(ecmd->name); 120c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ctrlvalue = ecmd->value; 121c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef ENGINE_CONF_DEBUG 122c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org fprintf(stderr, "ENGINE conf: doing ctrl(%s,%s)\n", ctrlname, ctrlvalue); 123c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif 124c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 125c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org /* First handle some special pseudo ctrls */ 126c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 127c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org /* Override engine name to use */ 128c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!strcmp(ctrlname, "engine_id")) 129c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org name = ctrlvalue; 130c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org else if (!strcmp(ctrlname, "soft_load")) 131c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org soft = 1; 132c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org /* Load a dynamic ENGINE */ 133c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org else if (!strcmp(ctrlname, "dynamic_path")) 134c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 135c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org e = ENGINE_by_id("dynamic"); 136c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!e) 137c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 138c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!ENGINE_ctrl_cmd_string(e, "SO_PATH", ctrlvalue, 0)) 139c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 140c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!ENGINE_ctrl_cmd_string(e, "LIST_ADD", "2", 0)) 141c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 142c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!ENGINE_ctrl_cmd_string(e, "LOAD", NULL, 0)) 143c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 144c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 145c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org /* ... add other pseudos here ... */ 146c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org else 147c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 148c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org /* At this point we need an ENGINE structural reference 149c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * if we don't already have one. 150c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 151c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!e) 152c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 153c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org e = ENGINE_by_id(name); 154c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!e && soft) 155c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 156c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ERR_clear_error(); 157c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return 1; 158c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 159c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!e) 160c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 161c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 162c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org /* Allow "EMPTY" to mean no value: this allows a valid 163c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org * "value" to be passed to ctrls of type NO_INPUT 164c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org */ 165c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!strcmp(ctrlvalue, "EMPTY")) 166c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ctrlvalue = NULL; 167c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!strcmp(ctrlname, "init")) 168c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 169c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!NCONF_get_number_e(cnf, value, "init", &do_init)) 170c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 171c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (do_init == 1) 172c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 173c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!int_engine_init(e)) 174c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 175c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 176c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org else if (do_init != 0) 177c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 178c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ENGINEerr(ENGINE_F_INT_ENGINE_CONFIGURE, ENGINE_R_INVALID_INIT_VALUE); 179c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 180c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 181c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 182c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org else if (!strcmp(ctrlname, "default_algorithms")) 183c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 184c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!ENGINE_set_default_string(e, ctrlvalue)) 185c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 186c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 187c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org else if (!ENGINE_ctrl_cmd_string(e, 188c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ctrlname, ctrlvalue, 0)) 189c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 190c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 191c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 192c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 193c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 194c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 195c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (e && (do_init == -1) && !int_engine_init(e)) 196c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 197c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ecmd = NULL; 198c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org goto err; 199c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 200c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ret = 1; 201c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org err: 202c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (ret != 1) 203c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 204c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ENGINEerr(ENGINE_F_INT_ENGINE_CONFIGURE, ENGINE_R_ENGINE_CONFIGURATION_ERROR); 205c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (ecmd) 206c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ERR_add_error_data(6, "section=", ecmd->section, 207c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ", name=", ecmd->name, 208c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ", value=", ecmd->value); 209c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 210c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (e) 211c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ENGINE_free(e); 212c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return ret; 213c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 214c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 215c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 216c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic int int_engine_module_init(CONF_IMODULE *md, const CONF *cnf) 217c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 218c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org STACK_OF(CONF_VALUE) *elist; 219c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org CONF_VALUE *cval; 220c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org int i; 221c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#ifdef ENGINE_CONF_DEBUG 222c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org fprintf(stderr, "Called engine module: name %s, value %s\n", 223c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org CONF_imodule_get_name(md), CONF_imodule_get_value(md)); 224c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org#endif 225c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org /* Value is a section containing ENGINEs to configure */ 226c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org elist = NCONF_get_section(cnf, CONF_imodule_get_value(md)); 227c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 228c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!elist) 229c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 230c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ENGINEerr(ENGINE_F_INT_ENGINE_MODULE_INIT, ENGINE_R_ENGINES_SECTION_ERROR); 231c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return 0; 232c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 233c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 234c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org for (i = 0; i < sk_CONF_VALUE_num(elist); i++) 235c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 236c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org cval = sk_CONF_VALUE_value(elist, i); 237c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org if (!int_engine_configure(cval->name, cval->value, cnf)) 238c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return 0; 239c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 240c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 241c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org return 1; 242c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 243c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 244c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgstatic void int_engine_module_finish(CONF_IMODULE *md) 245c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 246c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ENGINE *e; 247c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org while ((e = sk_ENGINE_pop(initialized_engines))) 248c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org ENGINE_finish(e); 249c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org sk_ENGINE_free(initialized_engines); 250c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org initialized_engines = NULL; 251c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 252c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 253c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org 254c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.orgvoid ENGINE_add_conf_module(void) 255c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org { 256c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org CONF_module_add("engines", 257c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org int_engine_module_init, 258c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org int_engine_module_finish); 259c9490d33b98b7affb729b5f1db13cb0a348471aagl@chromium.org } 260