1656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* conf_lib.c */ 2656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Written by Richard Levitte (richard@levitte.org) for the OpenSSL 3656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * project 2000. 4656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 5656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* ==================================================================== 6656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Copyright (c) 2000 The OpenSSL Project. All rights reserved. 7656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 8656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Redistribution and use in source and binary forms, with or without 9656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * modification, are permitted provided that the following conditions 10656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * are met: 11656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 12656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 1. Redistributions of source code must retain the above copyright 13656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer. 14656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 15656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 16656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * notice, this list of conditions and the following disclaimer in 17656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * the documentation and/or other materials provided with the 18656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * distribution. 19656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 20656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 3. All advertising materials mentioning features or use of this 21656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * software must display the following acknowledgment: 22656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software developed by the OpenSSL Project 23656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for use in the OpenSSL Toolkit. (http://www.OpenSSL.org/)" 24656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 25656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 4. The names "OpenSSL Toolkit" and "OpenSSL Project" must not be used to 26656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * endorse or promote products derived from this software without 27656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * prior written permission. For written permission, please contact 28656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * licensing@OpenSSL.org. 29656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 30656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 5. Products derived from this software may not be called "OpenSSL" 31656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * nor may "OpenSSL" appear in their names without prior written 32656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * permission of the OpenSSL Project. 33656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 34656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 6. Redistributions of any form whatsoever must retain the following 35656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * acknowledgment: 36656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * "This product includes software developed by the OpenSSL Project 37656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * for use in the OpenSSL Toolkit (http://www.OpenSSL.org/)" 38656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 39656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE OpenSSL PROJECT ``AS IS'' AND ANY 40656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * EXPRESSED OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 41656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR 42656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE OpenSSL PROJECT OR 43656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, 44656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT 45656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; 46656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 47656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, 48656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 49656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED 50656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * OF THE POSSIBILITY OF SUCH DAMAGE. 51656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * ==================================================================== 52656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 53656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * This product includes cryptographic software written by Eric Young 54656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * (eay@cryptsoft.com). This product includes software written by Tim 55656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * Hudson (tjh@cryptsoft.com). 56656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project * 57656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project */ 58656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 59656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <stdio.h> 60656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/crypto.h> 61656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/err.h> 62656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/conf.h> 63656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/conf_api.h> 64656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#include <openssl/lhash.h> 65656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 66656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectconst char CONF_version[]="CONF" OPENSSL_VERSION_PTEXT; 67656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 68656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectstatic CONF_METHOD *default_CONF_method=NULL; 69656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 70656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* Init a 'CONF' structure from an old LHASH */ 71656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 72221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid CONF_set_nconf(CONF *conf, LHASH_OF(CONF_VALUE) *hash) 73656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 74656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (default_CONF_method == NULL) 75656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project default_CONF_method = NCONF_default(); 76656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 77656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project default_CONF_method->init(conf); 78656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project conf->data = hash; 79656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 80656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 81656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The following section contains the "CONF classic" functions, 82656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project rewritten in terms of the new CONF interface. */ 83656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 84656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint CONF_set_default_method(CONF_METHOD *meth) 85656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 86656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project default_CONF_method = meth; 87656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 88656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 89656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 90221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromLHASH_OF(CONF_VALUE) *CONF_load(LHASH_OF(CONF_VALUE) *conf, const char *file, 91221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom long *eline) 92656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 93221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom LHASH_OF(CONF_VALUE) *ltmp; 94656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO *in=NULL; 95656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 96656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifdef OPENSSL_SYS_VMS 97656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project in=BIO_new_file(file, "r"); 98656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#else 99656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project in=BIO_new_file(file, "rb"); 100656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 101656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (in == NULL) 102656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 103656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB); 104656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 105656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 106656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 107656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ltmp = CONF_load_bio(conf, in, eline); 108656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_free(in); 109656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 110656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ltmp; 111656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 112656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 113656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_FP_API 114221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromLHASH_OF(CONF_VALUE) *CONF_load_fp(LHASH_OF(CONF_VALUE) *conf, FILE *fp, 115221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom long *eline) 116656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 117656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO *btmp; 118221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom LHASH_OF(CONF_VALUE) *ltmp; 119656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(!(btmp = BIO_new_fp(fp, BIO_NOCLOSE))) { 120656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_CONF_LOAD_FP,ERR_R_BUF_LIB); 121656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 122656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 123656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ltmp = CONF_load_bio(conf, btmp, eline); 124656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_free(btmp); 125656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ltmp; 126656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 127656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 128656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 129221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromLHASH_OF(CONF_VALUE) *CONF_load_bio(LHASH_OF(CONF_VALUE) *conf, BIO *bp, 130221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom long *eline) 131656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 132656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF ctmp; 133656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int ret; 134656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 135656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF_set_nconf(&ctmp, conf); 136656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 137656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret = NCONF_load_bio(&ctmp, bp, eline); 138656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (ret) 139656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ctmp.data; 140656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 141656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 142656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 143221304ee937bc0910948a8be1320cb8cc4eb6d36Brian CarlstromSTACK_OF(CONF_VALUE) *CONF_get_section(LHASH_OF(CONF_VALUE) *conf, 144221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const char *section) 145656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 146656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (conf == NULL) 147656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 148656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 149656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 150656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 151656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 152656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF ctmp; 153656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF_set_nconf(&ctmp, conf); 154656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NCONF_get_section(&ctmp, section); 155656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 156656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 157656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 158221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromchar *CONF_get_string(LHASH_OF(CONF_VALUE) *conf,const char *group, 159221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const char *name) 160656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 161656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (conf == NULL) 162656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 163656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NCONF_get_string(NULL, group, name); 164656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 165656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 166656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 167656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF ctmp; 168656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF_set_nconf(&ctmp, conf); 169656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NCONF_get_string(&ctmp, group, name); 170656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 171656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 172656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 173221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromlong CONF_get_number(LHASH_OF(CONF_VALUE) *conf,const char *group, 174221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstrom const char *name) 175656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 176656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int status; 177656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long result = 0; 178656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 179656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (conf == NULL) 180656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 181656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project status = NCONF_get_number_e(NULL, group, name, &result); 182656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 183656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project else 184656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 185656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF ctmp; 186656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF_set_nconf(&ctmp, conf); 187656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project status = NCONF_get_number_e(&ctmp, group, name, &result); 188656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 189656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 190656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (status == 0) 191656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 192656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* This function does not believe in errors... */ 193656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ERR_clear_error(); 194656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 195656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return result; 196656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 197656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 198221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromvoid CONF_free(LHASH_OF(CONF_VALUE) *conf) 199656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 200656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF ctmp; 201656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF_set_nconf(&ctmp, conf); 202656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project NCONF_free_data(&ctmp); 203656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 204656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 205656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_FP_API 206221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint CONF_dump_fp(LHASH_OF(CONF_VALUE) *conf, FILE *out) 207656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 208656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO *btmp; 209656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int ret; 210656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 211656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(!(btmp = BIO_new_fp(out, BIO_NOCLOSE))) { 212656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_CONF_DUMP_FP,ERR_R_BUF_LIB); 213656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 214656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 215656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret = CONF_dump_bio(conf, btmp); 216656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_free(btmp); 217656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ret; 218656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 219656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 220656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 221221304ee937bc0910948a8be1320cb8cc4eb6d36Brian Carlstromint CONF_dump_bio(LHASH_OF(CONF_VALUE) *conf, BIO *out) 222656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 223656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF ctmp; 224656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF_set_nconf(&ctmp, conf); 225656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NCONF_dump_bio(&ctmp, out); 226656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 227656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 228656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* The following section contains the "New CONF" functions. They are 229656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project completely centralised around a new CONF structure that may contain 230656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project basically anything, but at least a method pointer and a table of data. 231656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project These functions are also written in terms of the bridge functions used 232656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project by the "CONF classic" functions, for consistency. */ 233656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 234656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectCONF *NCONF_new(CONF_METHOD *meth) 235656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 236656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF *ret; 237656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 238656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (meth == NULL) 239656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project meth = NCONF_default(); 240656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 241656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret = meth->create(meth); 242656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (ret == NULL) 243656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 244656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_NEW,ERR_R_MALLOC_FAILURE); 245656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return(NULL); 246656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 247656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 248656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ret; 249656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 250656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 251656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid NCONF_free(CONF *conf) 252656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 253656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (conf == NULL) 254656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return; 255656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project conf->meth->destroy(conf); 256656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 257656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 258656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectvoid NCONF_free_data(CONF *conf) 259656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 260656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (conf == NULL) 261656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return; 262656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project conf->meth->destroy_data(conf); 263656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 264656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 265656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint NCONF_load(CONF *conf, const char *file, long *eline) 266656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 267656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (conf == NULL) 268656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 269656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_LOAD,CONF_R_NO_CONF); 270656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 271656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 272656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 273656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return conf->meth->load(conf, file, eline); 274656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 275656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 276656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_FP_API 277656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint NCONF_load_fp(CONF *conf, FILE *fp,long *eline) 278656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 279656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO *btmp; 280656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int ret; 281656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(!(btmp = BIO_new_fp(fp, BIO_NOCLOSE))) 282656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 283656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_LOAD_FP,ERR_R_BUF_LIB); 284656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 285656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 286656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret = NCONF_load_bio(conf, btmp, eline); 287656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_free(btmp); 288656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ret; 289656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 290656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 291656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 292656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint NCONF_load_bio(CONF *conf, BIO *bp,long *eline) 293656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 294656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (conf == NULL) 295656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 296656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_LOAD_BIO,CONF_R_NO_CONF); 297656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 298656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 299656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 300656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return conf->meth->load_bio(conf, bp, eline); 301656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 302656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 303656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source ProjectSTACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf,const char *section) 304656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 305656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (conf == NULL) 306656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 307656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_GET_SECTION,CONF_R_NO_CONF); 308656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 309656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 310656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 311656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (section == NULL) 312656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 313656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_GET_SECTION,CONF_R_NO_SECTION); 314656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 315656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 316656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 317656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return _CONF_get_section_values(conf, section); 318656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 319656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 320656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectchar *NCONF_get_string(const CONF *conf,const char *group,const char *name) 321656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 322656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project char *s = _CONF_get_string(conf, group, name); 323656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 324656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* Since we may get a value from an environment variable even 325656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if conf is NULL, let's check the value first */ 326656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (s) return s; 327656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 328656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (conf == NULL) 329656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 330656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_GET_STRING, 331656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE); 332656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 333656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 334656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_GET_STRING, 335656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONF_R_NO_VALUE); 336656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ERR_add_error_data(4,"group=",group," name=",name); 337656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return NULL; 338656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 339656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 340656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint NCONF_get_number_e(const CONF *conf,const char *group,const char *name, 341656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long *result) 342656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 343656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project char *str; 344656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 345656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (result == NULL) 346656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 347656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_GET_NUMBER_E,ERR_R_PASSED_NULL_PARAMETER); 348656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 349656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 350656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 351656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str = NCONF_get_string(conf,group,name); 352656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 353656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (str == NULL) 354656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 355656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 356656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project for (*result = 0;conf->meth->is_number(conf, *str);) 357656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 358656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project *result = (*result)*10 + conf->meth->to_int(conf, *str); 359656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project str++; 360656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 361656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 362656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 1; 363656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 364656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 365656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#ifndef OPENSSL_NO_FP_API 366656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint NCONF_dump_fp(const CONF *conf, FILE *out) 367656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 368656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO *btmp; 369656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int ret; 370656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if(!(btmp = BIO_new_fp(out, BIO_NOCLOSE))) { 371656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_DUMP_FP,ERR_R_BUF_LIB); 372656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 373656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 374656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ret = NCONF_dump_bio(conf, btmp); 375656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project BIO_free(btmp); 376656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ret; 377656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 378656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 379656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 380656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectint NCONF_dump_bio(const CONF *conf, BIO *out) 381656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 382656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (conf == NULL) 383656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 384656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project CONFerr(CONF_F_NCONF_DUMP_BIO,CONF_R_NO_CONF); 385656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return 0; 386656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 387656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 388656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return conf->meth->dump(conf, out); 389656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 390656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 391656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 392656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project/* This function should be avoided */ 393656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#if 0 394656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Projectlong NCONF_get_number(CONF *conf,char *group,char *name) 395656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 396656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project int status; 397656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project long ret=0; 398656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project 399656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project status = NCONF_get_number_e(conf, group, name, &ret); 400656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project if (status == 0) 401656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project { 402656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project /* This function does not believe in errors... */ 403656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project ERR_get_error(); 404656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 405656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project return ret; 406656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project } 407656d9c7f52f88b3a3daccafa7655dec086c4756eThe Android Open Source Project#endif 408