From 0fc5cf0870c0c9e4240e118ee7a86e5d8b4a6891 Mon Sep 17 00:00:00 2001 From: Ben Laurie Date: Tue, 22 Jan 2002 22:29:58 +0000 Subject: [PATCH] Make no config file not an error. Move /dev/crypto config to ctrl. --- crypto/bio/bio.h | 2 +- crypto/bio/bio_err.c | 1 + crypto/bio/bss_file.c | 5 ++++- crypto/conf/conf.h | 1 + crypto/conf/conf_def.c | 5 ++++- crypto/conf/conf_err.c | 1 + crypto/conf/conf_mall.c | 5 +++-- crypto/engine/hw_openbsd_dev_crypto.c | 32 +++++++++++++++++++-------- crypto/err/err.c | 7 ++++++ crypto/err/err.h | 1 + 10 files changed, 46 insertions(+), 14 deletions(-) diff --git a/crypto/bio/bio.h b/crypto/bio/bio.h index 4fa420a6b0..44861f393a 100644 --- a/crypto/bio/bio.h +++ b/crypto/bio/bio.h @@ -618,7 +618,6 @@ int BIO_vsnprintf(char *buf, size_t n, const char *format, va_list args); * made after this point may be overwritten when the script is next run. */ void ERR_load_BIO_strings(void); - /* Error codes for the BIO functions. */ /* Function codes. */ @@ -673,6 +672,7 @@ void ERR_load_BIO_strings(void); #define BIO_R_NO_HOSTNAME_SPECIFIED 112 #define BIO_R_NO_PORT_DEFINED 113 #define BIO_R_NO_PORT_SPECIFIED 114 +#define BIO_R_NO_SUCH_FILE 128 #define BIO_R_NULL_PARAMETER 115 #define BIO_R_TAG_MISMATCH 116 #define BIO_R_UNABLE_TO_BIND_SOCKET 117 diff --git a/crypto/bio/bio_err.c b/crypto/bio/bio_err.c index 927b1ac476..99ca3cd0da 100644 --- a/crypto/bio/bio_err.c +++ b/crypto/bio/bio_err.c @@ -120,6 +120,7 @@ static ERR_STRING_DATA BIO_str_reasons[]= {BIO_R_NO_HOSTNAME_SPECIFIED ,"no hostname specified"}, {BIO_R_NO_PORT_DEFINED ,"no port defined"}, {BIO_R_NO_PORT_SPECIFIED ,"no port specified"}, +{BIO_R_NO_SUCH_FILE ,"no such file"}, {BIO_R_NULL_PARAMETER ,"null parameter"}, {BIO_R_TAG_MISMATCH ,"tag mismatch"}, {BIO_R_UNABLE_TO_BIND_SOCKET ,"unable to bind socket"}, diff --git a/crypto/bio/bss_file.c b/crypto/bio/bss_file.c index 0dee7fa348..e3af936374 100644 --- a/crypto/bio/bss_file.c +++ b/crypto/bio/bss_file.c @@ -103,7 +103,10 @@ BIO *BIO_new_file(const char *filename, const char *mode) { SYSerr(SYS_F_FOPEN,get_last_sys_error()); ERR_add_error_data(5,"fopen('",filename,"','",mode,"')"); - BIOerr(BIO_F_BIO_NEW_FILE,ERR_R_SYS_LIB); + if(errno == ENOENT) + BIOerr(BIO_F_BIO_NEW_FILE,BIO_R_NO_SUCH_FILE); + else + BIOerr(BIO_F_BIO_NEW_FILE,ERR_R_SYS_LIB); return(NULL); } if ((ret=BIO_new(BIO_s_file_internal())) == NULL) diff --git a/crypto/conf/conf.h b/crypto/conf/conf.h index a0bbeb4d58..a179a5f612 100644 --- a/crypto/conf/conf.h +++ b/crypto/conf/conf.h @@ -232,6 +232,7 @@ void ERR_load_CONF_strings(void); #define CONF_R_NO_CONF 105 #define CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE 106 #define CONF_R_NO_SECTION 107 +#define CONF_R_NO_SUCH_FILE 114 #define CONF_R_NO_VALUE 108 #define CONF_R_UNABLE_TO_CREATE_NEW_SECTION 103 #define CONF_R_UNKNOWN_MODULE_NAME 113 diff --git a/crypto/conf/conf_def.c b/crypto/conf/conf_def.c index 04d128bc75..20b0760fcd 100644 --- a/crypto/conf/conf_def.c +++ b/crypto/conf/conf_def.c @@ -192,7 +192,10 @@ static int def_load(CONF *conf, const char *name, long *line) #endif if (in == NULL) { - CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB); + if(ERR_GET_REASON(ERR_peek_top_error()) == BIO_R_NO_SUCH_FILE) + CONFerr(CONF_F_CONF_LOAD,CONF_R_NO_SUCH_FILE); + else + CONFerr(CONF_F_CONF_LOAD,ERR_R_SYS_LIB); return 0; } diff --git a/crypto/conf/conf_err.c b/crypto/conf/conf_err.c index e1bd8b3b2c..ee07bfe9d9 100644 --- a/crypto/conf/conf_err.c +++ b/crypto/conf/conf_err.c @@ -100,6 +100,7 @@ static ERR_STRING_DATA CONF_str_reasons[]= {CONF_R_NO_CONF ,"no conf"}, {CONF_R_NO_CONF_OR_ENVIRONMENT_VARIABLE ,"no conf or environment variable"}, {CONF_R_NO_SECTION ,"no section"}, +{CONF_R_NO_SUCH_FILE ,"no such file"}, {CONF_R_NO_VALUE ,"no value"}, {CONF_R_UNABLE_TO_CREATE_NEW_SECTION ,"unable to create new section"}, {CONF_R_UNKNOWN_MODULE_NAME ,"unknown module name"}, diff --git a/crypto/conf/conf_mall.c b/crypto/conf/conf_mall.c index 814d5df877..59c7cfb966 100644 --- a/crypto/conf/conf_mall.c +++ b/crypto/conf/conf_mall.c @@ -92,9 +92,10 @@ void OPENSSL_config(void) if (!file) return; - ret = CONF_modules_load_file(file, "openssl_config", 0); + ret=CONF_modules_load_file(file, "openssl_config", 0) <= 0 + && ERR_GET_REASON(ERR_peek_top_error()) != CONF_R_NO_SUCH_FILE; OPENSSL_free(file); - if (ret <= 0) + if (ret) { BIO *bio_err; ERR_load_crypto_strings(); diff --git a/crypto/engine/hw_openbsd_dev_crypto.c b/crypto/engine/hw_openbsd_dev_crypto.c index 8085323ed1..f946389b8a 100644 --- a/crypto/engine/hw_openbsd_dev_crypto.c +++ b/crypto/engine/hw_openbsd_dev_crypto.c @@ -96,12 +96,25 @@ static const char dev_crypto_name[] = "OpenBSD /dev/crypto"; static long allow_misaligned; -static int init_conf(CONF_IMODULE *md,const CONF *conf) +#define DEV_CRYPTO_CMD_ALLOW_MISALIGNED ENGINE_CMD_BASE +static const ENGINE_CMD_DEFN dev_crypto_cmd_defns[]= { - if(!NCONF_get_number(conf,CONF_imodule_get_value(md),"allow_misaligned", - &allow_misaligned)) - return 0; - printf("allow misaligned=%ld\n",allow_misaligned); + { DEV_CRYPTO_CMD_ALLOW_MISALIGNED, + "allow_misaligned", + "Permit misaligned data to be used", + ENGINE_CMD_FLAG_NUMERIC }, + { 0, NULL, NULL, 0 } + }; + +static int dev_crypto_ctrl(ENGINE *e, int cmd, long i, void *p, void (*f)()) + { + switch(cmd) + { + case DEV_CRYPTO_CMD_ALLOW_MISALIGNED: + allow_misaligned=i; + printf("allow misaligned=%ld\n",allow_misaligned); + break; + } return 1; } @@ -110,11 +123,12 @@ static ENGINE *engine_openbsd_dev_crypto(void) { ENGINE *engine=ENGINE_new(); - CONF_module_add(dev_crypto_id,init_conf,NULL); if(!ENGINE_set_id(engine, dev_crypto_id) || - !ENGINE_set_name(engine, dev_crypto_name) || - !ENGINE_set_ciphers(engine, dev_crypto_ciphers) || - !ENGINE_set_digests(engine, dev_crypto_digests)) + !ENGINE_set_name(engine, dev_crypto_name) || + !ENGINE_set_ciphers(engine, dev_crypto_ciphers) || + !ENGINE_set_digests(engine, dev_crypto_digests) || + !ENGINE_set_ctrl_function(engine, dev_crypto_ctrl) || + !ENGINE_set_cmd_defns(engine, dev_crypto_cmd_defns)) { ENGINE_free(engine); return NULL; diff --git a/crypto/err/err.c b/crypto/err/err.c index f38d1a61da..1b1e9bbcb0 100644 --- a/crypto/err/err.c +++ b/crypto/err/err.c @@ -679,6 +679,13 @@ unsigned long ERR_get_error_line_data(const char **file, int *line, unsigned long ERR_peek_error(void) { return(get_error_values(0,NULL,NULL,NULL,NULL)); } +unsigned long ERR_peek_top_error(void) + { + ERR_STATE *es=ERR_get_state(); + + return es->err_buffer[es->top]; + } + unsigned long ERR_peek_error_line(const char **file, int *line) { return(get_error_values(0,file,line,NULL,NULL)); } diff --git a/crypto/err/err.h b/crypto/err/err.h index c20546be51..4456e0e971 100644 --- a/crypto/err/err.h +++ b/crypto/err/err.h @@ -243,6 +243,7 @@ unsigned long ERR_get_error_line(const char **file,int *line); unsigned long ERR_get_error_line_data(const char **file,int *line, const char **data, int *flags); unsigned long ERR_peek_error(void ); +unsigned long ERR_peek_top_error(void); unsigned long ERR_peek_error_line(const char **file,int *line); unsigned long ERR_peek_error_line_data(const char **file,int *line, const char **data,int *flags); -- GitLab