diff options
author | djm <> | 2010-10-01 22:59:01 +0000 |
---|---|---|
committer | djm <> | 2010-10-01 22:59:01 +0000 |
commit | fe047d8b632246cb2db3234a0a4f32e5c318857b (patch) | |
tree | 939b752540947d33507b3acc48d76a8bfb7c3dc3 /src/lib/libcrypto/conf/conf_api.c | |
parent | 2ea67f4aa254b09ded62e6e14fc893bbe6381579 (diff) | |
download | openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.tar.gz openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.tar.bz2 openbsd-fe047d8b632246cb2db3234a0a4f32e5c318857b.zip |
resolve conflicts, fix local changes
Diffstat (limited to 'src/lib/libcrypto/conf/conf_api.c')
-rw-r--r-- | src/lib/libcrypto/conf/conf_api.c | 134 |
1 files changed, 63 insertions, 71 deletions
diff --git a/src/lib/libcrypto/conf/conf_api.c b/src/lib/libcrypto/conf/conf_api.c index 909d72b4b8..22617e5fa1 100644 --- a/src/lib/libcrypto/conf/conf_api.c +++ b/src/lib/libcrypto/conf/conf_api.c | |||
@@ -69,16 +69,12 @@ | |||
69 | #include <openssl/conf_api.h> | 69 | #include <openssl/conf_api.h> |
70 | #include "e_os.h" | 70 | #include "e_os.h" |
71 | 71 | ||
72 | static void value_free_hash(CONF_VALUE *a, LHASH *conf); | 72 | static void value_free_hash_doall_arg(CONF_VALUE *a, |
73 | static void value_free_stack(CONF_VALUE *a,LHASH *conf); | 73 | LHASH_OF(CONF_VALUE) *conf); |
74 | static IMPLEMENT_LHASH_DOALL_ARG_FN(value_free_hash, CONF_VALUE *, LHASH *) | 74 | static void value_free_stack_doall(CONF_VALUE *a); |
75 | static IMPLEMENT_LHASH_DOALL_ARG_FN(value_free_stack, CONF_VALUE *, LHASH *) | 75 | static IMPLEMENT_LHASH_DOALL_ARG_FN(value_free_hash, CONF_VALUE, |
76 | /* We don't use function pointer casting or wrapper functions - but cast each | 76 | LHASH_OF(CONF_VALUE)) |
77 | * callback parameter inside the callback functions. */ | 77 | static IMPLEMENT_LHASH_DOALL_FN(value_free_stack, CONF_VALUE) |
78 | /* static unsigned long hash(CONF_VALUE *v); */ | ||
79 | static unsigned long hash(const void *v_void); | ||
80 | /* static int cmp_conf(CONF_VALUE *a,CONF_VALUE *b); */ | ||
81 | static int cmp_conf(const void *a_void,const void *b_void); | ||
82 | 78 | ||
83 | /* Up until OpenSSL 0.9.5a, this was get_section */ | 79 | /* Up until OpenSSL 0.9.5a, this was get_section */ |
84 | CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section) | 80 | CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section) |
@@ -88,7 +84,7 @@ CONF_VALUE *_CONF_get_section(const CONF *conf, const char *section) | |||
88 | if ((conf == NULL) || (section == NULL)) return(NULL); | 84 | if ((conf == NULL) || (section == NULL)) return(NULL); |
89 | vv.name=NULL; | 85 | vv.name=NULL; |
90 | vv.section=(char *)section; | 86 | vv.section=(char *)section; |
91 | v=(CONF_VALUE *)lh_retrieve(conf->data,&vv); | 87 | v=lh_CONF_VALUE_retrieve(conf->data,&vv); |
92 | return(v); | 88 | return(v); |
93 | } | 89 | } |
94 | 90 | ||
@@ -118,7 +114,7 @@ int _CONF_add_string(CONF *conf, CONF_VALUE *section, CONF_VALUE *value) | |||
118 | return 0; | 114 | return 0; |
119 | } | 115 | } |
120 | 116 | ||
121 | v = (CONF_VALUE *)lh_insert(conf->data, value); | 117 | v = lh_CONF_VALUE_insert(conf->data, value); |
122 | if (v != NULL) | 118 | if (v != NULL) |
123 | { | 119 | { |
124 | (void)sk_CONF_VALUE_delete_ptr(ts,v); | 120 | (void)sk_CONF_VALUE_delete_ptr(ts,v); |
@@ -141,24 +137,24 @@ char *_CONF_get_string(const CONF *conf, const char *section, const char *name) | |||
141 | { | 137 | { |
142 | vv.name=(char *)name; | 138 | vv.name=(char *)name; |
143 | vv.section=(char *)section; | 139 | vv.section=(char *)section; |
144 | v=(CONF_VALUE *)lh_retrieve(conf->data,&vv); | 140 | v=lh_CONF_VALUE_retrieve(conf->data,&vv); |
145 | if (v != NULL) return(v->value); | 141 | if (v != NULL) return(v->value); |
146 | if (strcmp(section,"ENV") == 0) | 142 | if (strcmp(section,"ENV") == 0) |
147 | { | 143 | { |
148 | p=Getenv(name); | 144 | p=getenv(name); |
149 | if (p != NULL) return(p); | 145 | if (p != NULL) return(p); |
150 | } | 146 | } |
151 | } | 147 | } |
152 | vv.section="default"; | 148 | vv.section="default"; |
153 | vv.name=(char *)name; | 149 | vv.name=(char *)name; |
154 | v=(CONF_VALUE *)lh_retrieve(conf->data,&vv); | 150 | v=lh_CONF_VALUE_retrieve(conf->data,&vv); |
155 | if (v != NULL) | 151 | if (v != NULL) |
156 | return(v->value); | 152 | return(v->value); |
157 | else | 153 | else |
158 | return(NULL); | 154 | return(NULL); |
159 | } | 155 | } |
160 | else | 156 | else |
161 | return(Getenv(name)); | 157 | return(getenv(name)); |
162 | } | 158 | } |
163 | 159 | ||
164 | #if 0 /* There's no way to provide error checking with this function, so | 160 | #if 0 /* There's no way to provide error checking with this function, so |
@@ -182,6 +178,34 @@ long _CONF_get_number(CONF *conf, char *section, char *name) | |||
182 | } | 178 | } |
183 | #endif | 179 | #endif |
184 | 180 | ||
181 | static unsigned long conf_value_hash(const CONF_VALUE *v) | ||
182 | { | ||
183 | return (lh_strhash(v->section)<<2)^lh_strhash(v->name); | ||
184 | } | ||
185 | static IMPLEMENT_LHASH_HASH_FN(conf_value, CONF_VALUE) | ||
186 | |||
187 | static int conf_value_cmp(const CONF_VALUE *a, const CONF_VALUE *b) | ||
188 | { | ||
189 | int i; | ||
190 | |||
191 | if (a->section != b->section) | ||
192 | { | ||
193 | i=strcmp(a->section,b->section); | ||
194 | if (i) return(i); | ||
195 | } | ||
196 | |||
197 | if ((a->name != NULL) && (b->name != NULL)) | ||
198 | { | ||
199 | i=strcmp(a->name,b->name); | ||
200 | return(i); | ||
201 | } | ||
202 | else if (a->name == b->name) | ||
203 | return(0); | ||
204 | else | ||
205 | return((a->name == NULL)?-1:1); | ||
206 | } | ||
207 | static IMPLEMENT_LHASH_COMP_FN(conf_value, CONF_VALUE) | ||
208 | |||
185 | int _CONF_new_data(CONF *conf) | 209 | int _CONF_new_data(CONF *conf) |
186 | { | 210 | { |
187 | if (conf == NULL) | 211 | if (conf == NULL) |
@@ -189,7 +213,7 @@ int _CONF_new_data(CONF *conf) | |||
189 | return 0; | 213 | return 0; |
190 | } | 214 | } |
191 | if (conf->data == NULL) | 215 | if (conf->data == NULL) |
192 | if ((conf->data = lh_new(hash, cmp_conf)) == NULL) | 216 | if ((conf->data = lh_CONF_VALUE_new()) == NULL) |
193 | { | 217 | { |
194 | return 0; | 218 | return 0; |
195 | } | 219 | } |
@@ -200,105 +224,73 @@ void _CONF_free_data(CONF *conf) | |||
200 | { | 224 | { |
201 | if (conf == NULL || conf->data == NULL) return; | 225 | if (conf == NULL || conf->data == NULL) return; |
202 | 226 | ||
203 | conf->data->down_load=0; /* evil thing to make sure the 'OPENSSL_free()' | 227 | lh_CONF_VALUE_down_load(conf->data)=0; /* evil thing to make |
204 | * works as expected */ | 228 | * sure the 'OPENSSL_free()' works as |
205 | lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(value_free_hash), | 229 | * expected */ |
206 | conf->data); | 230 | lh_CONF_VALUE_doall_arg(conf->data, |
231 | LHASH_DOALL_ARG_FN(value_free_hash), | ||
232 | LHASH_OF(CONF_VALUE), conf->data); | ||
207 | 233 | ||
208 | /* We now have only 'section' entries in the hash table. | 234 | /* We now have only 'section' entries in the hash table. |
209 | * Due to problems with */ | 235 | * Due to problems with */ |
210 | 236 | ||
211 | lh_doall_arg(conf->data, LHASH_DOALL_ARG_FN(value_free_stack), | 237 | lh_CONF_VALUE_doall(conf->data, LHASH_DOALL_FN(value_free_stack)); |
212 | conf->data); | 238 | lh_CONF_VALUE_free(conf->data); |
213 | lh_free(conf->data); | ||
214 | } | 239 | } |
215 | 240 | ||
216 | static void value_free_hash(CONF_VALUE *a, LHASH *conf) | 241 | static void value_free_hash_doall_arg(CONF_VALUE *a, LHASH_OF(CONF_VALUE) *conf) |
217 | { | 242 | { |
218 | if (a->name != NULL) | 243 | if (a->name != NULL) |
219 | { | 244 | (void)lh_CONF_VALUE_delete(conf,a); |
220 | a=(CONF_VALUE *)lh_delete(conf,a); | ||
221 | } | ||
222 | } | 245 | } |
223 | 246 | ||
224 | static void value_free_stack(CONF_VALUE *a, LHASH *conf) | 247 | static void value_free_stack_doall(CONF_VALUE *a) |
225 | { | 248 | { |
226 | CONF_VALUE *vv; | 249 | CONF_VALUE *vv; |
227 | STACK *sk; | 250 | STACK_OF(CONF_VALUE) *sk; |
228 | int i; | 251 | int i; |
229 | 252 | ||
230 | if (a->name != NULL) return; | 253 | if (a->name != NULL) return; |
231 | 254 | ||
232 | sk=(STACK *)a->value; | 255 | sk=(STACK_OF(CONF_VALUE) *)a->value; |
233 | for (i=sk_num(sk)-1; i>=0; i--) | 256 | for (i=sk_CONF_VALUE_num(sk)-1; i>=0; i--) |
234 | { | 257 | { |
235 | vv=(CONF_VALUE *)sk_value(sk,i); | 258 | vv=sk_CONF_VALUE_value(sk,i); |
236 | OPENSSL_free(vv->value); | 259 | OPENSSL_free(vv->value); |
237 | OPENSSL_free(vv->name); | 260 | OPENSSL_free(vv->name); |
238 | OPENSSL_free(vv); | 261 | OPENSSL_free(vv); |
239 | } | 262 | } |
240 | if (sk != NULL) sk_free(sk); | 263 | if (sk != NULL) sk_CONF_VALUE_free(sk); |
241 | OPENSSL_free(a->section); | 264 | OPENSSL_free(a->section); |
242 | OPENSSL_free(a); | 265 | OPENSSL_free(a); |
243 | } | 266 | } |
244 | 267 | ||
245 | /* static unsigned long hash(CONF_VALUE *v) */ | ||
246 | static unsigned long hash(const void *v_void) | ||
247 | { | ||
248 | CONF_VALUE *v = (CONF_VALUE *)v_void; | ||
249 | return((lh_strhash(v->section)<<2)^lh_strhash(v->name)); | ||
250 | } | ||
251 | |||
252 | /* static int cmp_conf(CONF_VALUE *a, CONF_VALUE *b) */ | ||
253 | static int cmp_conf(const void *a_void,const void *b_void) | ||
254 | { | ||
255 | int i; | ||
256 | CONF_VALUE *a = (CONF_VALUE *)a_void; | ||
257 | CONF_VALUE *b = (CONF_VALUE *)b_void; | ||
258 | |||
259 | if (a->section != b->section) | ||
260 | { | ||
261 | i=strcmp(a->section,b->section); | ||
262 | if (i) return(i); | ||
263 | } | ||
264 | |||
265 | if ((a->name != NULL) && (b->name != NULL)) | ||
266 | { | ||
267 | i=strcmp(a->name,b->name); | ||
268 | return(i); | ||
269 | } | ||
270 | else if (a->name == b->name) | ||
271 | return(0); | ||
272 | else | ||
273 | return((a->name == NULL)?-1:1); | ||
274 | } | ||
275 | |||
276 | /* Up until OpenSSL 0.9.5a, this was new_section */ | 268 | /* Up until OpenSSL 0.9.5a, this was new_section */ |
277 | CONF_VALUE *_CONF_new_section(CONF *conf, const char *section) | 269 | CONF_VALUE *_CONF_new_section(CONF *conf, const char *section) |
278 | { | 270 | { |
279 | STACK *sk=NULL; | 271 | STACK_OF(CONF_VALUE) *sk=NULL; |
280 | int ok=0,i; | 272 | int ok=0,i; |
281 | CONF_VALUE *v=NULL,*vv; | 273 | CONF_VALUE *v=NULL,*vv; |
282 | 274 | ||
283 | if ((sk=sk_new_null()) == NULL) | 275 | if ((sk=sk_CONF_VALUE_new_null()) == NULL) |
284 | goto err; | 276 | goto err; |
285 | if ((v=(CONF_VALUE *)OPENSSL_malloc(sizeof(CONF_VALUE))) == NULL) | 277 | if ((v=OPENSSL_malloc(sizeof(CONF_VALUE))) == NULL) |
286 | goto err; | 278 | goto err; |
287 | i=strlen(section)+1; | 279 | i=strlen(section)+1; |
288 | if ((v->section=(char *)OPENSSL_malloc(i)) == NULL) | 280 | if ((v->section=OPENSSL_malloc(i)) == NULL) |
289 | goto err; | 281 | goto err; |
290 | 282 | ||
291 | memcpy(v->section,section,i); | 283 | memcpy(v->section,section,i); |
292 | v->name=NULL; | 284 | v->name=NULL; |
293 | v->value=(char *)sk; | 285 | v->value=(char *)sk; |
294 | 286 | ||
295 | vv=(CONF_VALUE *)lh_insert(conf->data,v); | 287 | vv=lh_CONF_VALUE_insert(conf->data,v); |
296 | assert(vv == NULL); | 288 | assert(vv == NULL); |
297 | ok=1; | 289 | ok=1; |
298 | err: | 290 | err: |
299 | if (!ok) | 291 | if (!ok) |
300 | { | 292 | { |
301 | if (sk != NULL) sk_free(sk); | 293 | if (sk != NULL) sk_CONF_VALUE_free(sk); |
302 | if (v != NULL) OPENSSL_free(v); | 294 | if (v != NULL) OPENSSL_free(v); |
303 | v=NULL; | 295 | v=NULL; |
304 | } | 296 | } |