aboutsummaryrefslogtreecommitdiffstats
path: root/crypto/err
diff options
context:
space:
mode:
authorRalf S. Engelschall <rse@openssl.org>1998-12-21 10:56:39 +0000
committerRalf S. Engelschall <rse@openssl.org>1998-12-21 10:56:39 +0000
commit58964a492275ca9a59a0cd9c8155cb2491b4b909 (patch)
treec7b16876a5789463bbbb468ef4829c8129b3d718 /crypto/err
parentd02b48c63a58ea4367a0e905979f140b7d090f86 (diff)
downloadopenssl-58964a492275ca9a59a0cd9c8155cb2491b4b909.tar.gz
Import of old SSLeay release: SSLeay 0.9.0b
Diffstat (limited to 'crypto/err')
-rw-r--r--crypto/err/Makefile.ssl2
-rw-r--r--crypto/err/err.c238
-rw-r--r--crypto/err/err.h72
-rw-r--r--crypto/err/err_all.c3
-rw-r--r--crypto/err/err_code.pl117
-rw-r--r--crypto/err/err_genc.pl77
-rw-r--r--crypto/err/err_prn.c27
-rw-r--r--crypto/err/ssleay.ec57
8 files changed, 399 insertions, 194 deletions
diff --git a/crypto/err/Makefile.ssl b/crypto/err/Makefile.ssl
index 9e1e451e59..57c87eb041 100644
--- a/crypto/err/Makefile.ssl
+++ b/crypto/err/Makefile.ssl
@@ -2,7 +2,7 @@
# SSLeay/crypto/err/Makefile
#
-DIR= error
+DIR= err
TOP= ../..
CC= cc
INCLUDES= -I.. -I../../include
diff --git a/crypto/err/err.c b/crypto/err/err.c
index 6eec77a154..a65192493a 100644
--- a/crypto/err/err.c
+++ b/crypto/err/err.c
@@ -1,5 +1,5 @@
/* crypto/err/err.c */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
@@ -73,11 +73,16 @@ static unsigned long err_hash(ERR_STRING_DATA *a);
static int err_cmp(ERR_STRING_DATA *a, ERR_STRING_DATA *b);
static unsigned long pid_hash(ERR_STATE *pid);
static int pid_cmp(ERR_STATE *a,ERR_STATE *pid);
+static unsigned long get_error_values(int inc,char **file,int *line,
+ char **data,int *flags);
+static void ERR_STATE_free(ERR_STATE *s);
#else
static unsigned long err_hash();
static int err_cmp();
static unsigned long pid_hash();
static int pid_cmp();
+static void ERR_STATE_free();
+ERR_STATE *s;
#endif
#ifndef NO_ERR
@@ -147,6 +152,27 @@ static ERR_STRING_DATA ERR_str_reasons[]=
};
#endif
+#define err_clear_data(p,i) \
+ if (((p)->err_data[i] != NULL) && \
+ (p)->err_data_flags[i] & ERR_TXT_MALLOCED) \
+ { \
+ Free((p)->err_data[i]); \
+ (p)->err_data[i]=NULL; \
+ } \
+ (p)->err_data_flags[i]=0;
+
+static void ERR_STATE_free(s)
+ERR_STATE *s;
+ {
+ int i;
+
+ for (i=0; i<ERR_NUM_ERRORS; i++)
+ {
+ err_clear_data(s,i);
+ }
+ Free(s);
+ }
+
void ERR_load_ERR_strings()
{
static int init=1;
@@ -211,6 +237,8 @@ void ERR_free_strings()
CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
}
+/********************************************************/
+
void ERR_put_error(lib,func,reason,file,line)
int lib,func,reason;
char *file;
@@ -226,117 +254,109 @@ int line;
es->err_buffer[es->top]=ERR_PACK(lib,func,reason);
es->err_file[es->top]=file;
es->err_line[es->top]=line;
+ err_clear_data(es,es->top);
}
void ERR_clear_error()
{
- int i;
ERR_STATE *es;
es=ERR_get_state();
+#if 0
+ /* hmm... is this needed */
for (i=0; i<ERR_NUM_ERRORS; i++)
{
es->err_buffer[i]=0;
es->err_file[i]=NULL;
es->err_line[i]= -1;
+ err_clear_data(es,i);
}
+#endif
es->top=es->bottom=0;
}
-unsigned long ERR_peek_error()
- {
- int i;
- ERR_STATE *es;
-
- /* should be fine since only one thread should ever be playing
- * with the value returned from this call */
- es=ERR_get_state();
-
- if (es->bottom == es->top) return(0);
- i=(es->bottom+1)%ERR_NUM_ERRORS;
-
-
- return(es->err_buffer[i]);
- }
unsigned long ERR_get_error()
- {
- int i;
- unsigned long ret;
- ERR_STATE *es;
+ { return(get_error_values(1,NULL,NULL,NULL,NULL)); }
- es=ERR_get_state();
-
- if (es->bottom == es->top) return(0);
- i=(es->bottom+1)%ERR_NUM_ERRORS;
- es->bottom=i;
- ret=es->err_buffer[i];
- es->err_buffer[i]=0;
+unsigned long ERR_get_error_line(file,line)
+char **file;
+int *line;
+ { return(get_error_values(1,file,line,NULL,NULL)); }
+unsigned long ERR_get_error_line_data(file,line,data,flags)
+char **file;
+int *line;
+char **data;
+int *flags;
+ { return(get_error_values(1,file,line,data,flags)); }
- return(ret);
- }
+unsigned long ERR_peek_error()
+ { return(get_error_values(0,NULL,NULL,NULL,NULL)); }
unsigned long ERR_peek_error_line(file,line)
char **file;
int *line;
- {
- int i=0;
- ERR_STATE *es;
-
- es=ERR_get_state();
-
- if (es->bottom == es->top)
- {
- return(0);
- }
-
- i=(es->bottom+1)%ERR_NUM_ERRORS;
- if (es->err_file[i] == NULL)
- {
- *file="NA";
- *line=0;
- }
- else
- {
- *file=es->err_file[i];
- *line=es->err_line[i];
- }
+ { return(get_error_values(0,file,line,NULL,NULL)); }
- return(es->err_buffer[i]);
- }
+unsigned long ERR_peek_error_line_data(file,line,data,flags)
+char **file;
+int *line;
+char **data;
+int *flags;
+ { return(get_error_values(0,file,line,data,flags)); }
-unsigned long ERR_get_error_line(file,line)
+static unsigned long get_error_values(inc,file,line,data,flags)
+int inc;
char **file;
int *line;
- {
- int i;
- unsigned long ret;
+char **data;
+int *flags;
+ {
+ int i=0;
ERR_STATE *es;
+ unsigned long ret;
es=ERR_get_state();
- if (es->bottom == es->top)
- return(0);
-
+ if (es->bottom == es->top) return(0);
i=(es->bottom+1)%ERR_NUM_ERRORS;
- es->bottom=i;
- ret= es->err_buffer[i];
- if (es->err_file[i] == NULL)
+
+ ret=es->err_buffer[i];
+ if (inc)
{
- *file="NA";
- *line=0;
+ es->bottom=i;
+ es->err_buffer[i]=0;
}
- else
+
+ if ((file != NULL) && (line != NULL))
{
- *file=es->err_file[i];
- *line=es->err_line[i];
+ if (es->err_file[i] == NULL)
+ {
+ *file="NA";
+ if (line != NULL) *line=0;
+ }
+ else
+ {
+ *file=es->err_file[i];
+ if (line != NULL) *line=es->err_line[i];
+ }
}
- es->err_buffer[i]=0;
- es->err_file[i]=NULL;
- es->err_line[i]= -1;
+ if (data != NULL)
+ {
+ if (es->err_data[i] == NULL)
+ {
+ *data="";
+ if (flags != NULL) *flags=0;
+ }
+ else
+ {
+ *data=es->err_data[i];
+ if (flags != NULL) *flags=es->err_data_flags[i];
+ }
+ }
return(ret);
}
@@ -498,14 +518,16 @@ unsigned long pid;
tmp.pid=pid;
CRYPTO_w_lock(CRYPTO_LOCK_ERR);
p=(ERR_STATE *)lh_delete(thread_hash,(char *)&tmp);
- if (p != NULL) Free(p);
CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
+
+ if (p != NULL) ERR_STATE_free(p);
}
ERR_STATE *ERR_get_state()
{
static ERR_STATE fallback;
ERR_STATE *ret=NULL,tmp,*tmpp;
+ int i;
unsigned long pid;
pid=(unsigned long)CRYPTO_thread_id();
@@ -539,12 +561,80 @@ ERR_STATE *ERR_get_state()
ret->pid=pid;
ret->top=0;
ret->bottom=0;
+ for (i=0; i<ERR_NUM_ERRORS; i++)
+ {
+ ret->err_data[i]=NULL;
+ ret->err_data_flags[i]=0;
+ }
CRYPTO_w_lock(CRYPTO_LOCK_ERR);
tmpp=(ERR_STATE *)lh_insert(thread_hash,(char *)ret);
CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
if (tmpp != NULL) /* old entry - should not happen */
- Free(tmpp);
+ {
+ ERR_STATE_free(tmpp);
+ }
}
return(ret);
}
+int ERR_get_next_error_library()
+ {
+ static int value=ERR_LIB_USER;
+
+ return(value++);
+ }
+
+void ERR_set_error_data(data,flags)
+char *data;
+int flags;
+ {
+ ERR_STATE *es;
+ int i;
+
+ es=ERR_get_state();
+
+ i=es->top;
+ if (i == 0)
+ i=ERR_NUM_ERRORS-1;
+
+ es->err_data[i]=data;
+ es->err_data_flags[es->top]=flags;
+ }
+
+void ERR_add_error_data( VAR_PLIST(int , num))
+VAR_ALIST
+ {
+ VAR_BDEFN(args, int, num);
+ int i,n,s;
+ char *str,*p,*a;
+
+ s=64;
+ str=Malloc(s+1);
+ if (str == NULL) return;
+ str[0]='\0';
+
+ VAR_INIT(args,int,num);
+ n=0;
+ for (i=0; i<num; i++)
+ {
+ VAR_ARG(args,char *,a);
+ n+=strlen(a);
+ if (n > s)
+ {
+ s=n+20;
+ p=Realloc(str,s+1);
+ if (p == NULL)
+ {
+ Free(str);
+ return;
+ }
+ else
+ str=p;
+ }
+ strcat(str,a);
+ }
+ ERR_set_error_data(str,ERR_TXT_MALLOCED|ERR_TXT_STRING);
+
+ VAR_END( args );
+ }
+
diff --git a/crypto/err/err.h b/crypto/err/err.h
index aa3354e2dd..75f931be11 100644
--- a/crypto/err/err.h
+++ b/crypto/err/err.h
@@ -1,5 +1,5 @@
/* crypto/err/err.h */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
@@ -77,11 +77,16 @@ extern "C" {
#include <errno.h>
-#define ERR_NUM_ERRORS 10
+#define ERR_TXT_MALLOCED 0x01
+#define ERR_TXT_STRING 0x02
+
+#define ERR_NUM_ERRORS 16
typedef struct err_state_st
{
unsigned long pid;
unsigned long err_buffer[ERR_NUM_ERRORS];
+ char *err_data[ERR_NUM_ERRORS];
+ int err_data_flags[ERR_NUM_ERRORS];
char *err_file[ERR_NUM_ERRORS];
int err_line[ERR_NUM_ERRORS];
int top,bottom;
@@ -102,6 +107,7 @@ typedef struct err_state_st
#define ERR_LIB_METH 12
#define ERR_LIB_ASN1 13
#define ERR_LIB_CONF 14
+#define ERR_LIB_CRYPTO 15
#define ERR_LIB_SSL 20
#define ERR_LIB_SSL23 21
#define ERR_LIB_SSL2 22
@@ -113,27 +119,28 @@ typedef struct err_state_st
#define ERR_LIB_USER 128
-#define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),ERR_file_name,__LINE__)
-#define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),ERR_file_name,__LINE__)
-#define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),ERR_file_name,__LINE__)
-#define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),ERR_file_name,__LINE__)
-#define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),ERR_file_name,__LINE__)
-#define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),ERR_file_name,__LINE__)
-#define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),ERR_file_name,__LINE__)
-#define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),ERR_file_name,__LINE__)
-#define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),ERR_file_name,__LINE__)
-#define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),ERR_file_name,__LINE__)
-#define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),ERR_file_name,__LINE__)
-#define METHerr(f,r) ERR_PUT_error(ERR_LIB_METH,(f),(r),ERR_file_name,__LINE__)
-#define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),ERR_file_name,__LINE__)
-#define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),ERR_file_name,__LINE__)
-#define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),ERR_file_name,__LINE__)
-#define SSL23err(f,r) ERR_PUT_error(ERR_LIB_SSL23,(f),(r),ERR_file_name,__LINE__)
-#define SSL2err(f,r) ERR_PUT_error(ERR_LIB_SSL2,(f),(r),ERR_file_name,__LINE__)
-#define SSL3err(f,r) ERR_PUT_error(ERR_LIB_SSL3,(f),(r),ERR_file_name,__LINE__)
-#define RSAREFerr(f,r) ERR_PUT_error(ERR_LIB_RSAREF,(f),(r),ERR_file_name,__LINE__)
-#define PROXYerr(f,r) ERR_PUT_error(ERR_LIB_PROXY,(f),(r),ERR_file_name,__LINE__)
-#define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),ERR_file_name,__LINE__)
+#define SYSerr(f,r) ERR_PUT_error(ERR_LIB_SYS,(f),(r),ERR_file_name,__LINE__)
+#define BNerr(f,r) ERR_PUT_error(ERR_LIB_BN,(f),(r),ERR_file_name,__LINE__)
+#define RSAerr(f,r) ERR_PUT_error(ERR_LIB_RSA,(f),(r),ERR_file_name,__LINE__)
+#define DHerr(f,r) ERR_PUT_error(ERR_LIB_DH,(f),(r),ERR_file_name,__LINE__)
+#define EVPerr(f,r) ERR_PUT_error(ERR_LIB_EVP,(f),(r),ERR_file_name,__LINE__)
+#define BUFerr(f,r) ERR_PUT_error(ERR_LIB_BUF,(f),(r),ERR_file_name,__LINE__)
+#define BIOerr(f,r) ERR_PUT_error(ERR_LIB_BIO,(f),(r),ERR_file_name,__LINE__)
+#define OBJerr(f,r) ERR_PUT_error(ERR_LIB_OBJ,(f),(r),ERR_file_name,__LINE__)
+#define PEMerr(f,r) ERR_PUT_error(ERR_LIB_PEM,(f),(r),ERR_file_name,__LINE__)
+#define DSAerr(f,r) ERR_PUT_error(ERR_LIB_DSA,(f),(r),ERR_file_name,__LINE__)
+#define X509err(f,r) ERR_PUT_error(ERR_LIB_X509,(f),(r),ERR_file_name,__LINE__)
+#define METHerr(f,r) ERR_PUT_error(ERR_LIB_METH,(f),(r),ERR_file_name,__LINE__)
+#define ASN1err(f,r) ERR_PUT_error(ERR_LIB_ASN1,(f),(r),ERR_file_name,__LINE__)
+#define CONFerr(f,r) ERR_PUT_error(ERR_LIB_CONF,(f),(r),ERR_file_name,__LINE__)
+#define CRYPTOerr(f,r) ERR_PUT_error(ERR_LIB_CRYPTO,(f),(r),ERR_file_name,__LINE__)
+#define SSLerr(f,r) ERR_PUT_error(ERR_LIB_SSL,(f),(r),ERR_file_name,__LINE__)
+#define SSL23err(f,r) ERR_PUT_error(ERR_LIB_SSL23,(f),(r),ERR_file_name,__LINE__)
+#define SSL2err(f,r) ERR_PUT_error(ERR_LIB_SSL2,(f),(r),ERR_file_name,__LINE__)
+#define SSL3err(f,r) ERR_PUT_error(ERR_LIB_SSL3,(f),(r),ERR_file_name,__LINE__)
+#define RSAREFerr(f,r) ERR_PUT_error(ERR_LIB_RSAREF,(f),(r),ERR_file_name,__LINE__)
+#define PROXYerr(f,r) ERR_PUT_error(ERR_LIB_PROXY,(f),(r),ERR_file_name,__LINE__)
+#define PKCS7err(f,r) ERR_PUT_error(ERR_LIB_PKCS7,(f),(r),ERR_file_name,__LINE__)
/* Borland C seems too stupid to be able to shift and do longs in
* the pre-processor :-( */
@@ -172,6 +179,7 @@ typedef struct err_state_st
#define ERR_R_METH_LIB ERR_LIB_METH
#define ERR_R_ASN1_LIB ERR_LIB_ASN1
#define ERR_R_CONF_LIB ERR_LIB_CONF
+#define ERR_R_CRYPTO_LIB ERR_LIB_CRYPTO
#define ERR_R_SSL_LIB ERR_LIB_SSL
#define ERR_R_SSL23_LIB ERR_LIB_SSL23
#define ERR_R_SSL2_LIB ERR_LIB_SSL2
@@ -193,20 +201,27 @@ typedef struct ERR_string_data_st
#ifndef NOPROTO
void ERR_put_error(int lib, int func,int reason,char *file,int line);
+void ERR_set_error_data(char *data,int flags);
+
unsigned long ERR_get_error(void );
unsigned long ERR_get_error_line(char **file,int *line);
+unsigned long ERR_get_error_line_data(char **file,int *line,
+ char **data, int *flags);
unsigned long ERR_peek_error(void );
unsigned long ERR_peek_error_line(char **file,int *line);
+unsigned long ERR_peek_error_line_data(char **file,int *line,
+ char **data,int *flags);
void ERR_clear_error(void );
char *ERR_error_string(unsigned long e,char *buf);
char *ERR_lib_error_string(unsigned long e);
char *ERR_func_error_string(unsigned long e);
char *ERR_reason_error_string(unsigned long e);
-#ifndef WIN16
+#ifndef NO_FP_API
void ERR_print_errors_fp(FILE *fp);
#endif
#ifdef HEADER_BIO_H
void ERR_print_errors(BIO *bp);
+void ERR_add_error_data( VAR_PLIST( int, num ) );
#endif
void ERR_load_strings(int lib,ERR_STRING_DATA str[]);
void ERR_load_ERR_strings(void );
@@ -224,9 +239,13 @@ char *ERR_get_string_table(void );
char *ERR_get_err_state_table(void );
#endif
+int ERR_get_next_error_library(void );
+
#else
void ERR_put_error();
+void ERR_set_error_data();
+
unsigned long ERR_get_error();
unsigned long ERR_get_error_line();
unsigned long ERR_peek_error();
@@ -236,10 +255,11 @@ char *ERR_error_string();
char *ERR_lib_error_string();
char *ERR_func_error_string();
char *ERR_reason_error_string();
-#ifndef WIN16
+#ifndef NO_FP_API
void ERR_print_errors_fp();
#endif
void ERR_print_errors();
+void ERR_add_error_data();
void ERR_load_strings();
void ERR_load_ERR_strings();
void ERR_load_crypto_strings();
@@ -256,6 +276,8 @@ char *ERR_get_string_table();
char *ERR_get_err_state_table();
#endif
+int ERR_get_next_error_library();
+
#endif
#ifdef __cplusplus
diff --git a/crypto/err/err_all.c b/crypto/err/err_all.c
index d6d8109ea0..f874268e1a 100644
--- a/crypto/err/err_all.c
+++ b/crypto/err/err_all.c
@@ -1,5 +1,5 @@
/* crypto/err/err_all.c */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
@@ -110,6 +110,7 @@ void ERR_load_crypto_strings()
ERR_load_OBJ_strings();
ERR_load_PEM_strings();
ERR_load_X509_strings();
+ ERR_load_CRYPTO_strings();
ERR_load_PKCS7_strings();
#endif
}
diff --git a/crypto/err/err_code.pl b/crypto/err/err_code.pl
index 5b893001c6..7f4cd7c216 100644
--- a/crypto/err/err_code.pl
+++ b/crypto/err/err_code.pl
@@ -1,79 +1,48 @@
#!/usr/local/bin/perl
-%errfile=(
- "ERR", "NONE",
- "BN", "bn/bn.err",
- "RSA", "rsa/rsa.err",
- "DSA", "dsa/dsa.err",
- "DH", "dh/dh.err",
- "EVP", "evp/evp.err",
- "BUF", "buffer/buffer.err",
- "BIO", "bio/bio.err",
- "OBJ", "objects/objects.err",
- "PEM", "pem/pem.err",
- "X509", "x509/x509.err",
- "METH", "meth/meth.err",
- "ASN1", "asn1/asn1.err",
- "CONF", "conf/conf.err",
- "PROXY","proxy/proxy.err",
- "PKCS7","pkcs7/pkcs7.err",
- "RSAREF","../rsaref/rsaref.err",
- "SSL", "../ssl/ssl.err",
- "SSL2", "../ssl/ssl2.err",
- "SSL3", "../ssl/ssl3.err",
- "SSL23","../ssl/ssl23.err",
- );
-
-$function{'RSAREF_F_RSA_BN2BIN'}=1;
-$function{'RSAREF_F_RSA_PRIVATE_DECRYPT'}=1;
-$function{'RSAREF_F_RSA_PRIVATE_ENCRYPT'}=1;
-$function{'RSAREF_F_RSA_PUBLIC_DECRYPT'}=1;
-$function{'RSAREF_F_RSA_PUBLIC_ENCRYPT'}=1;
-$function{'SSL_F_CLIENT_CERTIFICATE'}=1;
-
-$r_value{'SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE'}= 1010;
-$r_value{'SSL_R_SSLV3_ALERT_BAD_RECORD_MAC'}= 1020;
-$r_value{'SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE'}=1030;
-$r_value{'SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE'}= 1040;
-$r_value{'SSL_R_SSLV3_ALERT_NO_CERTIFICATE'}= 1041;
-$r_value{'SSL_R_SSLV3_ALERT_BAD_CERTIFICATE'}= 1042;
-$r_value{'SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE'}=1043;
-$r_value{'SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED'}= 1044;
-$r_value{'SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED'}= 1045;
-$r_value{'SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN'}= 1046;
-$r_value{'SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER'}= 1047;
-
-$r_value{'RSAREF_R_CONTENT_ENCODING'}= 0x0400;
-$r_value{'RSAREF_R_DATA'}= 0x0401;
-$r_value{'RSAREF_R_DIGEST_ALGORITHM'}= 0x0402;
-$r_value{'RSAREF_R_ENCODING'}= 0x0403;
-$r_value{'RSAREF_R_KEY'}= 0x0404;
-$r_value{'RSAREF_R_KEY_ENCODING'}= 0x0405;
-$r_value{'RSAREF_R_LEN'}= 0x0406;
-$r_value{'RSAREF_R_MODULUS_LEN'}= 0x0407;
-$r_value{'RSAREF_R_NEED_RANDOM'}= 0x0408;
-$r_value{'RSAREF_R_PRIVATE_KEY'}= 0x0409;
-$r_value{'RSAREF_R_PUBLIC_KEY'}= 0x040a;
-$r_value{'RSAREF_R_SIGNATURE'}= 0x040b;
-$r_value{'RSAREF_R_SIGNATURE_ENCODING'}=0x040c;
-$r_value{'RSAREF_R_ENCRYPTION_ALGORITHM'}=0x040d;
-
-$last="";
-while (<>)
+while (@ARGV)
{
- if (/err\(([A-Z0-9]+_F_[0-9A-Z_]+)\s*,\s*([0-9A-Z]+_R_[0-9A-Z_]+)\s*\)/)
+ $in=shift(@ARGV);
+ if ($in =~ /^-conf$/)
{
- if ($1 != $last)
+ $in=shift(@ARGV);
+ open(IN,"<$in") || die "unable to open '$in'\n";
+ while (<IN>)
{
- if ($function{$1} == 0)
+ s/#.*$//;
+ s/\s+$//;
+ next if (/^$/);
+ if (/^L\s+(\S+)\s+(\S+)$/)
+ { $errfile{$1}=$2; }
+ elsif (/^F\s+(\S+)$/)
+ { $function{$1}=1; }
+ elsif (/^R\s+(\S+)\s+(\S+)$/)
+ { $r_value{$1}=$2; }
+ else { die "bad input line: $in:$.\n"; }
+ }
+ close(IN);
+ next;
+ }
+
+ open(IN,"<$in") || die "unable to open '$in'\n";
+ $last="";
+ while (<IN>)
+ {
+ if (/err\(([A-Z0-9]+_F_[0-9A-Z_]+)\s*,\s*([0-9A-Z]+_R_[0-9A-Z_]+)\s*\)/)
+ {
+ if ($1 != $last)
{
- printf STDERR "$. $1 is bad\n";
+ if ($function{$1} == 0)
+ {
+ printf STDERR "$. $1 is bad\n";
+ }
}
+ $function{$1}++;
+ $last=$1;
+ $reason{$2}++;
}
- $function{$1}++;
- $last=$1;
- $reason{$2}++;
}
+ close(IN);
}
foreach (keys %function,keys %reason)
@@ -88,7 +57,17 @@ foreach $j (sort keys %prefix)
{
next if $errfile{$j} eq "NONE";
printf STDERR "doing %-6s - ",$j;
- open(OUT,">$errfile{$j}") || die "unable to open '$errfile{$j}':$!\n";
+ if (defined($errfile{$j}))
+ {
+ open(OUT,">$errfile{$j}") ||
+ die "unable to open '$errfile{$j}':$!\n";
+ $close_file=1;
+ }
+ else
+ {
+ *OUT=*STDOUT;
+ $close=0;
+ }
@f=grep(/^${j}_/,@F);
@r=grep(/^${j}_/,@R);
$num=100;
@@ -119,7 +98,7 @@ foreach $j (sort keys %prefix)
}
$r_count++;
}
- close(OUT);
+ close(OUT) if $close_file;
printf STDERR "%3d functions, %3d reasons\n",$f_count,$r_count;
}
diff --git a/crypto/err/err_genc.pl b/crypto/err/err_genc.pl
index 6733cfe574..d3251da842 100644
--- a/crypto/err/err_genc.pl
+++ b/crypto/err/err_genc.pl
@@ -1,6 +1,8 @@
#!/usr/local/bin/perl
-($#ARGV == 1) || die "usage: $0 <header file> <output C file>\n";
+if ($ARGV[0] eq "-s") { $static=1; shift @ARGV; }
+
+($#ARGV == 1) || die "usage: $0 [-s] <header file> <output C file>\n";
open(IN,"<$ARGV[0]") || die "unable to open $ARGV[0]:$!\n";
open(STDOUT,">$ARGV[1]") || die "unable to open $ARGV[1]:$!\n";
@@ -58,19 +60,67 @@ foreach (sort keys %out)
print "{0,NULL},\n";
print "\t};\n\n";
}
+print "#endif\n";
+
+if ($static)
+ { $lib="ERR_LIB_$type"; }
+else
+ { $lib="${type}_lib_error_code"; }
+
+$str="";
+$str.="#ifndef NO_ERR\n";
+$str.="\t\tERR_load_strings($lib,${type}_str_functs);\n" if $Func;
+$str.="\t\tERR_load_strings($lib,${type}_str_reasons);\n" if $Reas;
+$str.="#endif\n";
+
+if (!$static)
+ {
+print <<"EOF";
+
+static int ${type}_lib_error_code=0;
+
+void ERR_load_${type}_strings()
+ {
+ static int init=1;
+
+ if (${type}_lib_error_code == 0)
+ ${type}_lib_error_code=ERR_get_next_error_library();
+
+ if (init);
+ {;
+ init=0;
+$str
+ }
+ }
-print "void ERR_load_${type}_strings()\n";
-print "\t{\n";
-print "\tstatic int init=1;\n\n";
-print "\tif (init)\n";
-print "\t\t{\n";
-print "\t\tinit=0;\n";
-print "\t\tERR_load_strings(ERR_LIB_$type,${type}_str_functs);\n"
- if $Func;
-print "\t\tERR_load_strings(ERR_LIB_$type,${type}_str_reasons);\n"
- if $Reas;
-print "\t\t}\n";
-print "\t}\n";
+void ERR_${type}_error(function,reason,file,line)
+int function;
+int reason;
+char *file;
+int line;
+ {
+ if (${type}_lib_error_code == 0)
+ ${type}_lib_error_code=ERR_get_next_error_library();
+ ERR_PUT_error(${type}_lib_error_code,function,reason,file,line);
+ }
+EOF
+ }
+else # $static
+ {
+ print <<"EOF";
+
+void ERR_load_${type}_strings()
+ {
+ static int init=1;
+
+ if (init);
+ {;
+ init=0;
+$str
+ }
+ }
+EOF
+ }
sub header
{
@@ -143,5 +193,6 @@ EOF
print "#include \"err.h\"\n";
print "#include \"$header\"\n";
print "\n/* BEGIN ERROR CODES */\n";
+ print "#ifndef NO_ERR\n";
}
diff --git a/crypto/err/err_prn.c b/crypto/err/err_prn.c
index 16e313879d..ecd0e7c4fa 100644
--- a/crypto/err/err_prn.c
+++ b/crypto/err/err_prn.c
@@ -1,5 +1,5 @@
/* crypto/err/err_prn.c */
-/* Copyright (C) 1995-1997 Eric Young (eay@cryptsoft.com)
+/* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
* All rights reserved.
*
* This package is an SSL implementation written
@@ -64,20 +64,22 @@
#include "err.h"
#include "crypto.h"
-#ifndef WIN16
+#ifndef NO_FP_API
void ERR_print_errors_fp(fp)
FILE *fp;
{
unsigned long l;
char buf[200];
- char *file;
- int line;
+ char *file,*data;
+ int line,flags;
unsigned long es;
es=CRYPTO_thread_id();
- while ((l=ERR_get_error_line(&file,&line)) != 0)
- fprintf(fp,"%lu:%s:%s:%d\n",es,ERR_error_string(l,buf),
- file,line);
+ while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0)
+ {
+ fprintf(fp,"%lu:%s:%s:%d:%s\n",es,ERR_error_string(l,buf),
+ file,line,(flags&ERR_TXT_STRING)?data:"");
+ }
}
#endif
@@ -87,16 +89,19 @@ BIO *bp;
unsigned long l;
char buf[256];
char buf2[256];
- char *file;
- int line;
+ char *file,*data;
+ int line,flags;
unsigned long es;
es=CRYPTO_thread_id();
- while ((l=ERR_get_error_line(&file,&line)) != 0)
+ while ((l=ERR_get_error_line_data(&file,&line,&data,&flags)) != 0)
{
- sprintf(buf2,"%lu:%s:%s:%d\n",es,ERR_error_string(l,buf),
+ sprintf(buf2,"%lu:%s:%s:%d:",es,ERR_error_string(l,buf),
file,line);
BIO_write(bp,buf2,strlen(buf2));
+ if (flags & ERR_TXT_STRING)
+ BIO_write(bp,data,strlen(data));
+ BIO_write(bp,"\n",1);
}
}
diff --git a/crypto/err/ssleay.ec b/crypto/err/ssleay.ec
new file mode 100644
index 0000000000..10b5dbb59d
--- /dev/null
+++ b/crypto/err/ssleay.ec
@@ -0,0 +1,57 @@
+L ERR NONE
+L CRYPTO crypto.err
+L BN bn/bn.err
+L RSA rsa/rsa.err
+L DSA dsa/dsa.err
+L DH dh/dh.err
+L EVP evp/evp.err
+L BUF buffer/buffer.err
+L BIO bio/bio.err
+L OBJ objects/objects.err
+L PEM pem/pem.err
+L X509 x509/x509.err
+L METH meth/meth.err
+L ASN1 asn1/asn1.err
+L CONF conf/conf.err
+L PROXY proxy/proxy.err
+L PKCS7 pkcs7/pkcs7.err
+L RSAREF ../rsaref/rsaref.err
+L SSL ../ssl/ssl.err
+L SSL2 ../ssl/ssl2.err
+L SSL3 ../ssl/ssl3.err
+L SSL23 ../ssl/ssl23.err
+
+F RSAREF_F_RSA_BN2BIN
+F RSAREF_F_RSA_PRIVATE_DECRYPT
+F RSAREF_F_RSA_PRIVATE_ENCRYPT
+F RSAREF_F_RSA_PUBLIC_DECRYPT
+F RSAREF_F_RSA_PUBLIC_ENCRYPT
+#F SSL_F_CLIENT_CERTIFICATE
+
+R SSL_R_SSLV3_ALERT_UNEXPECTED_MESSAGE 1010
+R SSL_R_SSLV3_ALERT_BAD_RECORD_MAC 1020
+R SSL_R_SSLV3_ALERT_DECOMPRESSION_FAILURE 1030
+R SSL_R_SSLV3_ALERT_HANDSHAKE_FAILURE 1040
+R SSL_R_SSLV3_ALERT_NO_CERTIFICATE 1041
+R SSL_R_SSLV3_ALERT_BAD_CERTIFICATE 1042
+R SSL_R_SSLV3_ALERT_UNSUPPORTED_CERTIFICATE 1043
+R SSL_R_SSLV3_ALERT_CERTIFICATE_REVOKED 1044
+R SSL_R_SSLV3_ALERT_CERTIFICATE_EXPIRED 1045
+R SSL_R_SSLV3_ALERT_CERTIFICATE_UNKNOWN 1046
+R SSL_R_SSLV3_ALERT_ILLEGAL_PARAMETER 1047
+
+R RSAREF_R_CONTENT_ENCODING 0x0400
+R RSAREF_R_DATA 0x0401
+R RSAREF_R_DIGEST_ALGORITHM 0x0402
+R RSAREF_R_ENCODING 0x0403
+R RSAREF_R_KEY 0x0404
+R RSAREF_R_KEY_ENCODING 0x0405
+R RSAREF_R_LEN 0x0406
+R RSAREF_R_MODULUS_LEN 0x0407
+R RSAREF_R_NEED_RANDOM 0x0408
+R RSAREF_R_PRIVATE_KEY 0x0409
+R RSAREF_R_PUBLIC_KEY 0x040a
+R RSAREF_R_SIGNATURE 0x040b
+R RSAREF_R_SIGNATURE_ENCODING 0x040c
+R RSAREF_R_ENCRYPTION_ALGORITHM 0x040d
+