OpenCoverage

eng_cnf.c

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

Generated by Squish Coco 4.2.2