conf.h revision 296465
1162852Sdes/* crypto/conf/conf.h */ 257429Smarkm/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) 392555Sdes * All rights reserved. 457429Smarkm * 557429Smarkm * This package is an SSL implementation written 657429Smarkm * by Eric Young (eay@cryptsoft.com). 757429Smarkm * The implementation was written so as to conform with Netscapes SSL. 857429Smarkm * 957429Smarkm * This library is free for commercial and non-commercial use as long as 1057429Smarkm * the following conditions are aheared to. The following conditions 1157429Smarkm * apply to all code found in this distribution, be it the RC4, RSA, 1257429Smarkm * lhash, DES, etc., code; not just the SSL code. The SSL documentation 1357429Smarkm * included with this distribution is covered by the same copyright terms 1457429Smarkm * except that the holder is Tim Hudson (tjh@cryptsoft.com). 1557429Smarkm * 1657429Smarkm * Copyright remains Eric Young's, and as such any Copyright notices in 1757429Smarkm * the code are not to be removed. 1857429Smarkm * If this package is used in a product, Eric Young should be given attribution 1957429Smarkm * as the author of the parts of the library used. 2057429Smarkm * This can be in the form of a textual message at program startup or 2157429Smarkm * in documentation (online or textual) provided with the package. 2257429Smarkm * 2357429Smarkm * Redistribution and use in source and binary forms, with or without 2457429Smarkm * modification, are permitted provided that the following conditions 2557429Smarkm * are met: 2657429Smarkm * 1. Redistributions of source code must retain the copyright 2757429Smarkm * notice, this list of conditions and the following disclaimer. 28162852Sdes * 2. Redistributions in binary form must reproduce the above copyright 29162852Sdes * notice, this list of conditions and the following disclaimer in the 30162852Sdes * documentation and/or other materials provided with the distribution. 31162852Sdes * 3. All advertising materials mentioning features or use of this software 32162852Sdes * must display the following acknowledgement: 33162852Sdes * "This product includes cryptographic software written by 34162852Sdes * Eric Young (eay@cryptsoft.com)" 3576259Sgreen * The word 'cryptographic' can be left out if the rouines from the library 3676259Sgreen * being used are not cryptographic related :-). 3757429Smarkm * 4. If you include any Windows specific code (or a derivative thereof) from 3857429Smarkm * the apps directory (application code) you must include an acknowledgement: 3957429Smarkm * "This product includes software written by Tim Hudson (tjh@cryptsoft.com)" 4060573Skris * 4176259Sgreen * THIS SOFTWARE IS PROVIDED BY ERIC YOUNG ``AS IS'' AND 4257429Smarkm * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 4392555Sdes * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 4492555Sdes * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 4592555Sdes * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 4692555Sdes * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 4792555Sdes * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 4892555Sdes * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 4992555Sdes * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 5092555Sdes * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 5192555Sdes * SUCH DAMAGE. 52137015Sdes * 53137015Sdes * The licence and distribution terms for any publically available version or 5492555Sdes * derivative of this code cannot be changed. i.e. this code cannot simply be 5592555Sdes * copied and put under another distribution licence 56137015Sdes * [including the GNU Public Licence.] 57137015Sdes */ 58137015Sdes 59137015Sdes#ifndef HEADER_CONF_H 60137015Sdes# define HEADER_CONF_H 6192555Sdes 6292555Sdes# include <openssl/bio.h> 6392555Sdes# include <openssl/lhash.h> 6492555Sdes# include <openssl/stack.h> 6592555Sdes# include <openssl/safestack.h> 6692555Sdes# include <openssl/e_os2.h> 6792555Sdes 6892555Sdes# include <openssl/ossl_typ.h> 6960573Skris 7057429Smarkm#ifdef __cplusplus 7157429Smarkmextern "C" { 7257429Smarkm#endif 7360573Skris 7460573Skristypedef struct { 7560573Skris char *section; 7692555Sdes char *name; 7792555Sdes char *value; 7892555Sdes} CONF_VALUE; 7992555Sdes 8057429SmarkmDECLARE_STACK_OF(CONF_VALUE) 8160573SkrisDECLARE_STACK_OF(CONF_MODULE) 8292555SdesDECLARE_STACK_OF(CONF_IMODULE) 8392555Sdes 8460573Skrisstruct conf_st; 8592555Sdesstruct conf_method_st; 8692555Sdestypedef struct conf_method_st CONF_METHOD; 8792555Sdes 8892555Sdesstruct conf_method_st { 8992555Sdes const char *name; 9092555Sdes CONF *(*create) (CONF_METHOD *meth); 9192555Sdes int (*init) (CONF *conf); 9292555Sdes int (*destroy) (CONF *conf); 93124208Sdes int (*destroy_data) (CONF *conf); 9492555Sdes int (*load_bio) (CONF *conf, BIO *bp, long *eline); 9592555Sdes int (*dump) (const CONF *conf, BIO *bp); 9692555Sdes int (*is_number) (const CONF *conf, char c); 9792555Sdes int (*to_int) (const CONF *conf, char c); 9892555Sdes int (*load) (CONF *conf, const char *name, long *eline); 9992555Sdes}; 10092555Sdes 10192555Sdes/* Module definitions */ 102124208Sdes 10392555Sdestypedef struct conf_imodule_st CONF_IMODULE; 10492555Sdestypedef struct conf_module_st CONF_MODULE; 10592555Sdes 10692555Sdes/* DSO module function typedefs */ 10760573Skristypedef int conf_init_func (CONF_IMODULE *md, const CONF *cnf); 10860573Skristypedef void conf_finish_func (CONF_IMODULE *md); 10960573Skris 11060573Skris# define CONF_MFLAGS_IGNORE_ERRORS 0x1 11160573Skris# define CONF_MFLAGS_IGNORE_RETURN_CODES 0x2 11260573Skris# define CONF_MFLAGS_SILENT 0x4 11357429Smarkm# define CONF_MFLAGS_NO_DSO 0x8 114124208Sdes# define CONF_MFLAGS_IGNORE_MISSING_FILE 0x10 11557429Smarkm# define CONF_MFLAGS_DEFAULT_SECTION 0x20 11657429Smarkm 11792555Sdesint CONF_set_default_method(CONF_METHOD *meth); 11857429Smarkmvoid CONF_set_nconf(CONF *conf, LHASH *hash); 11957429SmarkmLHASH *CONF_load(LHASH *conf, const char *file, long *eline); 12057429Smarkm# ifndef OPENSSL_NO_FP_API 12160573SkrisLHASH *CONF_load_fp(LHASH *conf, FILE *fp, long *eline); 12292555Sdes# endif 12357429SmarkmLHASH *CONF_load_bio(LHASH *conf, BIO *bp, long *eline); 12457429SmarkmSTACK_OF(CONF_VALUE) *CONF_get_section(LHASH *conf, const char *section); 12557429Smarkmchar *CONF_get_string(LHASH *conf, const char *group, const char *name); 12660573Skrislong CONF_get_number(LHASH *conf, const char *group, const char *name); 12792555Sdesvoid CONF_free(LHASH *conf); 12857429Smarkmint CONF_dump_fp(LHASH *conf, FILE *out); 12957429Smarkmint CONF_dump_bio(LHASH *conf, BIO *out); 13092555Sdes 13160573Skrisvoid OPENSSL_config(const char *config_name); 13257429Smarkmvoid OPENSSL_no_config(void); 13357429Smarkm 13457429Smarkm/* 13592555Sdes * New conf code. The semantics are different from the functions above. If 13692555Sdes * that wasn't the case, the above functions would have been replaced 13757429Smarkm */ 138124208Sdes 13957429Smarkmstruct conf_st { 14057429Smarkm CONF_METHOD *meth; 14157429Smarkm void *meth_data; 14292555Sdes LHASH *data; 14357429Smarkm}; 14457429Smarkm 14592555SdesCONF *NCONF_new(CONF_METHOD *meth); 14660573SkrisCONF_METHOD *NCONF_default(void); 14757429SmarkmCONF_METHOD *NCONF_WIN32(void); 14857429Smarkm# if 0 /* Just to give you an idea of what I have in 14957429Smarkm * mind */ 15092555SdesCONF_METHOD *NCONF_XML(void); 15192555Sdes# endif 15257429Smarkmvoid NCONF_free(CONF *conf); 153124208Sdesvoid NCONF_free_data(CONF *conf); 15457429Smarkm 15592555Sdesint NCONF_load(CONF *conf, const char *file, long *eline); 15660573Skris# ifndef OPENSSL_NO_FP_API 15757429Smarkmint NCONF_load_fp(CONF *conf, FILE *fp, long *eline); 15857429Smarkm# endif 15957429Smarkmint NCONF_load_bio(CONF *conf, BIO *bp, long *eline); 16057429SmarkmSTACK_OF(CONF_VALUE) *NCONF_get_section(const CONF *conf, 16192555Sdes const char *section); 16292555Sdeschar *NCONF_get_string(const CONF *conf, const char *group, const char *name); 16392555Sdesint NCONF_get_number_e(const CONF *conf, const char *group, const char *name, 16492555Sdes long *result); 16592555Sdesint NCONF_dump_fp(const CONF *conf, FILE *out); 16692555Sdesint NCONF_dump_bio(const CONF *conf, BIO *out); 16792555Sdes 16892555Sdes# if 0 /* The following function has no error 16957429Smarkm * checking, and should therefore be avoided */ 17057429Smarkmlong NCONF_get_number(CONF *conf, char *group, char *name); 17192555Sdes# else 17260573Skris# define NCONF_get_number(c,g,n,r) NCONF_get_number_e(c,g,n,r) 17357429Smarkm# endif 17457429Smarkm 17557429Smarkm/* Module functions */ 17660573Skris 17760573Skrisint CONF_modules_load(const CONF *cnf, const char *appname, 17857429Smarkm unsigned long flags); 179124208Sdesint CONF_modules_load_file(const char *filename, const char *appname, 18057429Smarkm unsigned long flags); 18157429Smarkmvoid CONF_modules_unload(int all); 18292555Sdesvoid CONF_modules_finish(void); 18357429Smarkmvoid CONF_modules_free(void); 18457429Smarkmint CONF_module_add(const char *name, conf_init_func *ifunc, 18592555Sdes conf_finish_func *ffunc); 18657429Smarkm 18757429Smarkmconst char *CONF_imodule_get_name(const CONF_IMODULE *md); 18892555Sdesconst char *CONF_imodule_get_value(const CONF_IMODULE *md); 18960573Skrisvoid *CONF_imodule_get_usr_data(const CONF_IMODULE *md); 19057429Smarkmvoid CONF_imodule_set_usr_data(CONF_IMODULE *md, void *usr_data); 19157429SmarkmCONF_MODULE *CONF_imodule_get_module(const CONF_IMODULE *md); 19257429Smarkmunsigned long CONF_imodule_get_flags(const CONF_IMODULE *md); 19360573Skrisvoid CONF_imodule_set_flags(CONF_IMODULE *md, unsigned long flags); 19460573Skrisvoid *CONF_module_get_usr_data(CONF_MODULE *pmod); 19557429Smarkmvoid CONF_module_set_usr_data(CONF_MODULE *pmod, void *usr_data); 196124208Sdes 19757429Smarkmchar *CONF_get1_default_config_file(void); 19857429Smarkm 19992555Sdesint CONF_parse_list(const char *list, int sep, int nospc, 20060573Skris int (*list_cb) (const char *elem, int len, void *usr), 20192555Sdes void *arg); 20257429Smarkm 20357429Smarkmvoid OPENSSL_load_builtin_modules(void); 20492555Sdes 20560573Skris/* BEGIN ERROR CODES */ 20692555Sdes/* 20757429Smarkm * The following lines are auto generated by the script mkerr.pl. Any changes 20857429Smarkm * made after this point may be overwritten when the script is next run. 20992555Sdes */ 21060573Skrisvoid ERR_load_CONF_strings(void); 21157429Smarkm 21257429Smarkm/* Error codes for the CONF functions. */ 21357429Smarkm 21492555Sdes/* Function codes. */ 21592555Sdes# define CONF_F_CONF_DUMP_FP 104 21657429Smarkm# define CONF_F_CONF_LOAD 100 217124208Sdes# define CONF_F_CONF_LOAD_BIO 102 21857429Smarkm# define CONF_F_CONF_LOAD_FP 103 21992555Sdes# define CONF_F_CONF_MODULES_LOAD 116 22060573Skris# define CONF_F_DEF_LOAD 120 22157429Smarkm# define CONF_F_DEF_LOAD_BIO 121 22257429Smarkm# define CONF_F_MODULE_INIT 115 22357429Smarkm# define CONF_F_MODULE_LOAD_DSO 117 22457429Smarkm# define CONF_F_MODULE_RUN 118 22592555Sdes# define CONF_F_NCONF_DUMP_BIO 105 22692555Sdes# define CONF_F_NCONF_DUMP_FP 106 22792555Sdes# define CONF_F_NCONF_GET_NUMBER 107 22892555Sdes# define CONF_F_NCONF_GET_NUMBER_E 112 22957429Smarkm# define CONF_F_NCONF_GET_SECTION 108 23057429Smarkm# define CONF_F_NCONF_GET_STRING 109 23192555Sdes# define CONF_F_NCONF_LOAD 113 23260573Skris# define CONF_F_NCONF_LOAD_BIO 110 23357429Smarkm# define CONF_F_NCONF_LOAD_FP 114 23457429Smarkm# define CONF_F_NCONF_NEW 111 23557429Smarkm# define CONF_F_STR_COPY 101 23657429Smarkm 23760573Skris/* Reason codes. */ 23857429Smarkm# define CONF_R_ERROR_LOADING_DSO 110 239124208Sdes# define CONF_R_MISSING_CLOSE_SQUARE_BRACKET 100 24057429Smarkm# define CONF_R_MISSING_EQUAL_SIGN 101 24157429Smarkm# define CONF_R_MISSING_FINISH_FUNCTION 111 24257429Smarkm# define CONF_R_MISSING_INIT_FUNCTION 112 24357429Smarkm# define CONF_R_MODULE_INITIALIZATION_ERROR 109 24457429Smarkm# define CONF_R_NO_CLOSE_BRACE 102 24557429Smarkm# define CONF_R_NO_CONF 105 24657429Smarkm# define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 24757429Smarkm# define CONF_R_NO_SECTION 107 24892555Sdes# define CONF_R_NO_SUCH_FILE 114 24960573Skris# define CONF_R_NO_VALUE 108 25057429Smarkm# define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 25157429Smarkm# define CONF_R_UNKNOWN_MODULE_NAME 113 25257429Smarkm# define CONF_R_VARIABLE_HAS_NO_VALUE 104 25357429Smarkm 25460573Skris#ifdef __cplusplus 25557429Smarkm} 256124208Sdes#endif 25757429Smarkm#endif 25857429Smarkm