Commit a14e2d9d authored by Bodo Möller's avatar Bodo Möller
Browse files

New functions

    ERR_peek_last_error
    ERR_peek_last_error_line
    ERR_peek_last_error_line_data
(supersedes ERR_peek_top_error).

Rename OPENSSL_NO_OLD_DES_SUPPORT into OPENSSL_DISABLE_OLD_DES_SUPPORT
because OPENSSL_NO_... indicates disabled algorithms (according to
mkdef.pl).
parent a8b94d64
Loading
Loading
Loading
Loading
+18 −1
Original line number Diff line number Diff line
@@ -12,6 +12,23 @@
         *) applies to 0.9.6a/0.9.6b/0.9.6c and 0.9.7
         +) applies to 0.9.7 only

  +) Change BIO_new_file (crypto/bio/bss_file.c) to use new
     BIO_R_NO_SUCH_FILE error code rather than the generic
     ERR_R_SYS_LIB error code if fopen() fails with ENOENT.
     [Ben Laurie]

  +) Add new functions
          ERR_peek_last_error
          ERR_peek_last_error_line
          ERR_peek_last_error_line_data.
     These are similar to
          ERR_peek_error
          ERR_peek_error_line
          ERR_peek_error_line_data,
     but report on the latest error recorded rather than the first one
     still in the error queue.
     [Ben Laurie, Bodo Moeller]
        
  +) default_algorithms option in ENGINE config module. This allows things
     like:
     default_algorithms = ALL
@@ -209,7 +226,7 @@
     and other DES libraries that are currently used by other projects.
     The old libdes interface (including crypt()) is provided if
     <openssl/des_old.h> is included.  For now, this automatically
     happens in <openssl/des.h> unless OPENSSL_NO_OLD_DES_SUPPORT is
     happens in <openssl/des.h> unless OPENSSL_DISABLE_OLD_DES_SUPPORT is
     defined.  Note that crypt() is no longer declared in <openssl/des.h>.

     NOTE: This is a major break of an old API into a new one.  Software
+1 −1
Original line number Diff line number Diff line
@@ -192,7 +192,7 @@ static int def_load(CONF *conf, const char *name, long *line)
#endif
	if (in == NULL)
		{
		if(ERR_GET_REASON(ERR_peek_top_error()) == BIO_R_NO_SUCH_FILE)
		if (ERR_GET_REASON(ERR_peek_last_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);
+13 −5
Original line number Diff line number Diff line
@@ -72,16 +72,18 @@ void OPENSSL_load_builtin_modules(void)
	ENGINE_add_conf_module();
	}

#if 0 /* not yet */
/* This is the automatic configuration loader: it is called automatically by
 * OpenSSL when any of a number of standard initialisation functions are called,
 * unless this is overridden by calling OPENSSL_no_config()
 */
#endif

static int openssl_configured = 0;

void OPENSSL_config(void)
	{
	int ret;
	int err_exit = 0;
	char *file;
	if (openssl_configured)
		return;
@@ -92,10 +94,17 @@ void OPENSSL_config(void)
	if (!file)
		return;

	ret=CONF_modules_load_file(file, "openssl_config", 0) <= 0
	  && ERR_GET_REASON(ERR_peek_top_error()) != CONF_R_NO_SUCH_FILE;
	ERR_clear_error();
	if (CONF_modules_load_file(file, "openssl_config", 0) <= 0)
		{
		if (ERR_GET_REASON(ERR_peek_last_error()) == CONF_R_NO_SUCH_FILE)
			ERR_clear_error();
		else
			err_exit = 1;
		}

	OPENSSL_free(file);
	if (ret)
	if (err_exit)
		{
		BIO *bio_err;
		ERR_load_crypto_strings();
@@ -109,7 +118,6 @@ void OPENSSL_config(void)
		}

	return;

	}

void OPENSSL_no_config()
+1 −1
Original line number Diff line number Diff line
@@ -66,7 +66,7 @@
#include <openssl/opensslconf.h> /* DES_LONG */
#include <openssl/e_os2.h>	/* OPENSSL_EXTERN */

#ifndef OPENSSL_NO_OLD_DES_SUPPORT
#ifndef OPENSSL_DISABLE_OLD_DES_SUPPORT
# include <openssl/des_old.h>
#endif

+31 −16
Original line number Diff line number Diff line
@@ -318,7 +318,7 @@ static int err_cmp(const void *a_void, const void *b_void);
static unsigned long pid_hash(const void *pid_void);
/* static int pid_cmp(ERR_STATE *a,ERR_STATE *pid); */
static int pid_cmp(const void *a_void,const void *pid_void);
static unsigned long get_error_values(int inc,const char **file,int *line,
static unsigned long get_error_values(int inc,int top,const char **file,int *line,
				      const char **data,int *flags);

/* The internal functions used in the "err_defaults" implementation */
@@ -666,35 +666,37 @@ void ERR_clear_error(void)


unsigned long ERR_get_error(void)
	{ return(get_error_values(1,NULL,NULL,NULL,NULL)); }
	{ return(get_error_values(1,0,NULL,NULL,NULL,NULL)); }

unsigned long ERR_get_error_line(const char **file,
	     int *line)
	{ return(get_error_values(1,file,line,NULL,NULL)); }
	{ return(get_error_values(1,0,file,line,NULL,NULL)); }

unsigned long ERR_get_error_line_data(const char **file, int *line,
	     const char **data, int *flags)
	{ return(get_error_values(1,file,line,data,flags)); }
	{ return(get_error_values(1,0,file,line,data,flags)); }

unsigned long ERR_peek_error(void)
	{ return(get_error_values(0,NULL,NULL,NULL,NULL)); }
	{ return(get_error_values(0,0,NULL,NULL,NULL,NULL)); }

unsigned long ERR_peek_top_error(void)
	{
	ERR_STATE *es=ERR_get_state();
unsigned long ERR_peek_last_error(void)
	{ return(get_error_values(0,1,NULL,NULL,NULL,NULL)); }

	return es->err_buffer[es->top];
	}
unsigned long ERR_peek_error_line(const char **file, int *line)
	{ return(get_error_values(0,0,file,line,NULL,NULL)); }

unsigned long ERR_peek_error_line(const char **file,
	     int *line)
	{ return(get_error_values(0,file,line,NULL,NULL)); }
unsigned long ERR_peek_last_error_line(const char **file, int *line)
	{ return(get_error_values(0,1,file,line,NULL,NULL)); }

unsigned long ERR_peek_error_line_data(const char **file, int *line,
	     const char **data, int *flags)
	{ return(get_error_values(0,file,line,data,flags)); }
	{ return(get_error_values(0,0,file,line,data,flags)); }

unsigned long ERR_peek_last_error_line_data(const char **file, int *line,
	     const char **data, int *flags)
	{ return(get_error_values(0,1,file,line,data,flags)); }

static unsigned long get_error_values(int inc, const char **file, int *line,
static unsigned long get_error_values(int inc, int top, const char **file, int *line,
	     const char **data, int *flags)
	{	
	int i=0;
@@ -703,8 +705,21 @@ static unsigned long get_error_values(int inc, const char **file, int *line,

	es=ERR_get_state();

	if (inc && top)
		{
		if (file) *file = "";
		if (line) *line = 0;
		if (data) *data = "";
		if (flags) *flags = 0;
			
		return ERR_R_INTERNAL_ERROR;
		}

	if (es->bottom == es->top) return 0;
	i=(es->bottom+1)%ERR_NUM_ERRORS;
	if (top)
		i=(es->bottom+1)%ERR_NUM_ERRORS; /* last error */
	else
		i=(es->bottom+1)%ERR_NUM_ERRORS; /* first error */

	ret=es->err_buffer[i];
	if (inc)
Loading