summaryrefslogtreecommitdiff
path: root/lib/libcrypto/err
diff options
context:
space:
mode:
authorDamien Miller <djm@cvs.openbsd.org>2008-09-06 12:17:55 +0000
committerDamien Miller <djm@cvs.openbsd.org>2008-09-06 12:17:55 +0000
commit96de7a4399a8c71cbb70d6252fa77acfd76b3f09 (patch)
treee6f6e4aad1952944ccd27e9eb47ea48b9a78dde7 /lib/libcrypto/err
parentec7710fe8f10fb624fbc33c0bbad2474e0c26979 (diff)
resolve conflicts
Diffstat (limited to 'lib/libcrypto/err')
-rw-r--r--lib/libcrypto/err/err.c86
-rw-r--r--lib/libcrypto/err/err.h28
-rw-r--r--lib/libcrypto/err/err_all.c25
-rw-r--r--lib/libcrypto/err/err_prn.c9
-rw-r--r--lib/libcrypto/err/openssl.ec7
5 files changed, 122 insertions, 33 deletions
diff --git a/lib/libcrypto/err/err.c b/lib/libcrypto/err/err.c
index 53687d79ab6..b6ff070e8f2 100644
--- a/lib/libcrypto/err/err.c
+++ b/lib/libcrypto/err/err.c
@@ -112,9 +112,9 @@
#include <stdio.h>
#include <stdarg.h>
#include <string.h>
+#include "cryptlib.h"
#include <openssl/lhash.h>
#include <openssl/crypto.h>
-#include "cryptlib.h"
#include <openssl/buffer.h>
#include <openssl/bio.h>
#include <openssl/err.h>
@@ -149,7 +149,7 @@ static ERR_STRING_DATA ERR_str_libraries[]=
{ERR_PACK(ERR_LIB_DSO,0,0) ,"DSO support routines"},
{ERR_PACK(ERR_LIB_ENGINE,0,0) ,"engine routines"},
{ERR_PACK(ERR_LIB_OCSP,0,0) ,"OCSP routines"},
-{ERR_PACK(ERR_LIB_FIPS,0,0) ,"FIPS routines"},
+{ERR_PACK(ERR_LIB_CMS,0,0) ,"CMS routines"},
{0,NULL},
};
@@ -168,7 +168,6 @@ static ERR_STRING_DATA ERR_str_functs[]=
#endif
{ERR_PACK(0,SYS_F_OPENDIR,0), "opendir"},
{ERR_PACK(0,SYS_F_FREAD,0), "fread"},
- {ERR_PACK(0,SYS_F_GETADDRINFO,0), "getaddrinfo"},
{0,NULL},
};
@@ -210,6 +209,7 @@ static ERR_STRING_DATA ERR_str_reasons[]=
{ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED ,"called a function you should not call"},
{ERR_R_PASSED_NULL_PARAMETER ,"passed a null parameter"},
{ERR_R_INTERNAL_ERROR ,"internal error"},
+{ERR_R_DISABLED ,"called a function that was disabled at compile-time"},
{0,NULL},
};
@@ -542,16 +542,27 @@ static ERR_STRING_DATA SYS_str_reasons[NUM_SYS_STR_REASONS + 1];
* will be returned for SYSerr(), which always gets an errno
* value and never one of those 'standard' reason codes. */
-static void build_SYS_str_reasons()
+static void build_SYS_str_reasons(void)
{
/* OPENSSL_malloc cannot be used here, use static storage instead */
static char strerror_tab[NUM_SYS_STR_REASONS][LEN_SYS_STR_REASON];
int i;
static int init = 1;
- if (!init) return;
-
+ CRYPTO_r_lock(CRYPTO_LOCK_ERR);
+ if (!init)
+ {
+ CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
+ return;
+ }
+
+ CRYPTO_r_unlock(CRYPTO_LOCK_ERR);
CRYPTO_w_lock(CRYPTO_LOCK_ERR);
+ if (!init)
+ {
+ CRYPTO_w_unlock(CRYPTO_LOCK_ERR);
+ return;
+ }
for (i = 1; i <= NUM_SYS_STR_REASONS; i++)
{
@@ -583,13 +594,24 @@ static void build_SYS_str_reasons()
#endif
#define err_clear_data(p,i) \
+ do { \
if (((p)->err_data[i] != NULL) && \
(p)->err_data_flags[i] & ERR_TXT_MALLOCED) \
{ \
OPENSSL_free((p)->err_data[i]); \
(p)->err_data[i]=NULL; \
} \
- (p)->err_data_flags[i]=0;
+ (p)->err_data_flags[i]=0; \
+ } while(0)
+
+#define err_clear(p,i) \
+ do { \
+ (p)->err_flags[i]=0; \
+ (p)->err_buffer[i]=0; \
+ err_clear_data(p,i); \
+ (p)->err_file[i]=NULL; \
+ (p)->err_line[i]= -1; \
+ } while(0)
static void ERR_STATE_free(ERR_STATE *s)
{
@@ -682,6 +704,7 @@ void ERR_put_error(int lib, int func, int reason, const char *file,
es->top=(es->top+1)%ERR_NUM_ERRORS;
if (es->top == es->bottom)
es->bottom=(es->bottom+1)%ERR_NUM_ERRORS;
+ es->err_flags[es->top]=0;
es->err_buffer[es->top]=ERR_PACK(lib,func,reason);
es->err_file[es->top]=file;
es->err_line[es->top]=line;
@@ -697,10 +720,7 @@ void ERR_clear_error(void)
for (i=0; i<ERR_NUM_ERRORS; i++)
{
- es->err_buffer[i]=0;
- err_clear_data(es,i);
- es->err_file[i]=NULL;
- es->err_line[i]= -1;
+ err_clear(es,i);
}
es->top=es->bottom=0;
}
@@ -937,7 +957,7 @@ static unsigned long err_hash(const void *a_void)
{
unsigned long ret,l;
- l=((ERR_STRING_DATA *)a_void)->error;
+ l=((const ERR_STRING_DATA *)a_void)->error;
ret=l^ERR_GET_LIB(l)^ERR_GET_FUNC(l);
return(ret^ret%19*13);
}
@@ -945,21 +965,21 @@ static unsigned long err_hash(const void *a_void)
/* static int err_cmp(ERR_STRING_DATA *a, ERR_STRING_DATA *b) */
static int err_cmp(const void *a_void, const void *b_void)
{
- return((int)(((ERR_STRING_DATA *)a_void)->error -
- ((ERR_STRING_DATA *)b_void)->error));
+ return((int)(((const ERR_STRING_DATA *)a_void)->error -
+ ((const ERR_STRING_DATA *)b_void)->error));
}
/* static unsigned long pid_hash(ERR_STATE *a) */
static unsigned long pid_hash(const void *a_void)
{
- return(((ERR_STATE *)a_void)->pid*13);
+ return(((const ERR_STATE *)a_void)->pid*13);
}
/* static int pid_cmp(ERR_STATE *a, ERR_STATE *b) */
static int pid_cmp(const void *a_void, const void *b_void)
{
- return((int)((long)((ERR_STATE *)a_void)->pid -
- (long)((ERR_STATE *)b_void)->pid));
+ return((int)((long)((const ERR_STATE *)a_void)->pid -
+ (long)((const ERR_STATE *)b_void)->pid));
}
void ERR_remove_state(unsigned long pid)
@@ -1069,7 +1089,7 @@ void ERR_add_error_data(int num, ...)
else
str=p;
}
- BUF_strlcat(str,a,s+1);
+ BUF_strlcat(str,a,(size_t)s+1);
}
}
ERR_set_error_data(str,ERR_TXT_MALLOCED|ERR_TXT_STRING);
@@ -1077,3 +1097,33 @@ void ERR_add_error_data(int num, ...)
err:
va_end(args);
}
+
+int ERR_set_mark(void)
+ {
+ ERR_STATE *es;
+
+ es=ERR_get_state();
+
+ if (es->bottom == es->top) return 0;
+ es->err_flags[es->top]|=ERR_FLAG_MARK;
+ return 1;
+ }
+
+int ERR_pop_to_mark(void)
+ {
+ ERR_STATE *es;
+
+ es=ERR_get_state();
+
+ while(es->bottom != es->top
+ && (es->err_flags[es->top] & ERR_FLAG_MARK) == 0)
+ {
+ err_clear(es,es->top);
+ es->top-=1;
+ if (es->top == -1) es->top=ERR_NUM_ERRORS-1;
+ }
+
+ if (es->bottom == es->top) return 0;
+ es->err_flags[es->top]&=~ERR_FLAG_MARK;
+ return 1;
+ }
diff --git a/lib/libcrypto/err/err.h b/lib/libcrypto/err/err.h
index 2efa18866ad..bf28fce492e 100644
--- a/lib/libcrypto/err/err.h
+++ b/lib/libcrypto/err/err.h
@@ -59,11 +59,14 @@
#ifndef HEADER_ERR_H
#define HEADER_ERR_H
+#include <openssl/e_os2.h>
+
#ifndef OPENSSL_NO_FP_API
#include <stdio.h>
#include <stdlib.h>
#endif
+#include <openssl/ossl_typ.h>
#ifndef OPENSSL_NO_BIO
#include <openssl/bio.h>
#endif
@@ -86,10 +89,13 @@ extern "C" {
#define ERR_TXT_MALLOCED 0x01
#define ERR_TXT_STRING 0x02
+#define ERR_FLAG_MARK 0x01
+
#define ERR_NUM_ERRORS 16
typedef struct err_state_st
{
unsigned long pid;
+ int err_flags[ERR_NUM_ERRORS];
unsigned long err_buffer[ERR_NUM_ERRORS];
char *err_data[ERR_NUM_ERRORS];
int err_data_flags[ERR_NUM_ERRORS];
@@ -131,7 +137,10 @@ typedef struct err_state_st
#define ERR_LIB_OCSP 39
#define ERR_LIB_UI 40
#define ERR_LIB_COMP 41
-#define ERR_LIB_FIPS 42
+#define ERR_LIB_ECDSA 42
+#define ERR_LIB_ECDH 43
+#define ERR_LIB_STORE 44
+#define ERR_LIB_CMS 45
#define ERR_LIB_USER 128
@@ -160,7 +169,10 @@ typedef struct err_state_st
#define OCSPerr(f,r) ERR_PUT_error(ERR_LIB_OCSP,(f),(r),__FILE__,__LINE__)
#define UIerr(f,r) ERR_PUT_error(ERR_LIB_UI,(f),(r),__FILE__,__LINE__)
#define COMPerr(f,r) ERR_PUT_error(ERR_LIB_COMP,(f),(r),__FILE__,__LINE__)
-#define FIPSerr(f,r) ERR_PUT_error(ERR_LIB_FIPS,(f),(r),__FILE__,__LINE__)
+#define ECDSAerr(f,r) ERR_PUT_error(ERR_LIB_ECDSA,(f),(r),__FILE__,__LINE__)
+#define ECDHerr(f,r) ERR_PUT_error(ERR_LIB_ECDH,(f),(r),__FILE__,__LINE__)
+#define STOREerr(f,r) ERR_PUT_error(ERR_LIB_STORE,(f),(r),__FILE__,__LINE__)
+#define CMSerr(f,r) ERR_PUT_error(ERR_LIB_CMS,(f),(r),__FILE__,__LINE__)
/* Borland C seems too stupid to be able to shift and do longs in
* the pre-processor :-( */
@@ -185,7 +197,6 @@ typedef struct err_state_st
#define SYS_F_WSASTARTUP 9 /* Winsock stuff */
#define SYS_F_OPENDIR 10
#define SYS_F_FREAD 11
-#define SYS_F_GETADDRINFO 12
/* reasons */
@@ -214,6 +225,9 @@ typedef struct err_state_st
#define ERR_R_OCSP_LIB ERR_LIB_OCSP /* 39 */
#define ERR_R_UI_LIB ERR_LIB_UI /* 40 */
#define ERR_R_COMP_LIB ERR_LIB_COMP /* 41 */
+#define ERR_R_ECDSA_LIB ERR_LIB_ECDSA /* 42 */
+#define ERR_R_ECDH_LIB ERR_LIB_ECDH /* 43 */
+#define ERR_R_STORE_LIB ERR_LIB_STORE /* 44 */
#define ERR_R_NESTED_ASN1_ERROR 58
#define ERR_R_BAD_ASN1_OBJECT_HEADER 59
@@ -228,6 +242,7 @@ typedef struct err_state_st
#define ERR_R_SHOULD_NOT_HAVE_BEEN_CALLED (2|ERR_R_FATAL)
#define ERR_R_PASSED_NULL_PARAMETER (3|ERR_R_FATAL)
#define ERR_R_INTERNAL_ERROR (4|ERR_R_FATAL)
+#define ERR_R_DISABLED (5|ERR_R_FATAL)
/* 99 is the maximum possible ERR_R_... code, higher values
* are reserved for the individual libraries */
@@ -286,8 +301,11 @@ void ERR_release_err_state_table(LHASH **hash);
int ERR_get_next_error_library(void);
-/* This opaque type encapsulates the low-level error-state functions */
-typedef struct st_ERR_FNS ERR_FNS;
+int ERR_set_mark(void);
+int ERR_pop_to_mark(void);
+
+/* Already defined in ossl_typ.h */
+/* typedef struct st_ERR_FNS ERR_FNS; */
/* An application can use this function and provide the return value to loaded
* modules that should use the application's ERR state/functionality */
const ERR_FNS *ERR_get_implementation(void);
diff --git a/lib/libcrypto/err/err_all.c b/lib/libcrypto/err/err_all.c
index 4dc93008929..5813060ce24 100644
--- a/lib/libcrypto/err/err_all.c
+++ b/lib/libcrypto/err/err_all.c
@@ -73,6 +73,12 @@
#ifndef OPENSSL_NO_DSA
#include <openssl/dsa.h>
#endif
+#ifndef OPENSSL_NO_ECDSA
+#include <openssl/ecdsa.h>
+#endif
+#ifndef OPENSSL_NO_ECDH
+#include <openssl/ecdh.h>
+#endif
#include <openssl/evp.h>
#include <openssl/objects.h>
#include <openssl/pem2.h>
@@ -85,16 +91,15 @@
#ifndef OPENSSL_NO_ENGINE
#include <openssl/engine.h>
#endif
+#include <openssl/ui.h>
#include <openssl/ocsp.h>
#include <openssl/err.h>
-#include <openssl/fips.h>
+#ifndef OPENSSL_NO_CMS
+#include <openssl/cms.h>
+#endif
void ERR_load_crypto_strings(void)
{
- static int done=0;
-
- if (done) return;
- done=1;
#ifndef OPENSSL_NO_ERR
ERR_load_ERR_strings(); /* include error strings for SYSerr */
ERR_load_BN_strings();
@@ -118,6 +123,12 @@ void ERR_load_crypto_strings(void)
#ifndef OPENSSL_NO_EC
ERR_load_EC_strings();
#endif
+#ifndef OPENSSL_NO_ECDSA
+ ERR_load_ECDSA_strings();
+#endif
+#ifndef OPENSSL_NO_ECDH
+ ERR_load_ECDH_strings();
+#endif
/* skip ERR_load_SSL_strings() because it is not in this library */
ERR_load_BIO_strings();
ERR_load_PKCS7_strings();
@@ -130,8 +141,8 @@ void ERR_load_crypto_strings(void)
#endif
ERR_load_OCSP_strings();
ERR_load_UI_strings();
+#ifndef OPENSSL_NO_CMS
+ ERR_load_CMS_strings();
#endif
-#ifdef OPENSSL_FIPS
- ERR_load_FIPS_strings();
#endif
}
diff --git a/lib/libcrypto/err/err_prn.c b/lib/libcrypto/err/err_prn.c
index 81e34bd6ce7..2224a901e5e 100644
--- a/lib/libcrypto/err/err_prn.c
+++ b/lib/libcrypto/err/err_prn.c
@@ -57,9 +57,9 @@
*/
#include <stdio.h>
+#include "cryptlib.h"
#include <openssl/lhash.h>
#include <openssl/crypto.h>
-#include "cryptlib.h"
#include <openssl/buffer.h>
#include <openssl/err.h>
@@ -86,7 +86,12 @@ void ERR_print_errors_cb(int (*cb)(const char *str, size_t len, void *u),
#ifndef OPENSSL_NO_FP_API
static int print_fp(const char *str, size_t len, void *fp)
{
- return fprintf((FILE *)fp, "%s", str);
+ BIO bio;
+
+ BIO_set(&bio,BIO_s_file());
+ BIO_set_fp(&bio,fp,BIO_NOCLOSE);
+
+ return BIO_printf(&bio, "%s", str);
}
void ERR_print_errors_fp(FILE *fp)
{
diff --git a/lib/libcrypto/err/openssl.ec b/lib/libcrypto/err/openssl.ec
index f8cd6937e7e..1938f081ac5 100644
--- a/lib/libcrypto/err/openssl.ec
+++ b/lib/libcrypto/err/openssl.ec
@@ -27,11 +27,16 @@ L DSO crypto/dso/dso.h crypto/dso/dso_err.c
L ENGINE crypto/engine/engine.h crypto/engine/eng_err.c
L OCSP crypto/ocsp/ocsp.h crypto/ocsp/ocsp_err.c
L UI crypto/ui/ui.h crypto/ui/ui_err.c
-L FIPS fips-1.0/fips.h fips-1.0/fips_err.h
+L COMP crypto/comp/comp.h crypto/comp/comp_err.c
+L ECDSA crypto/ecdsa/ecdsa.h crypto/ecdsa/ecs_err.c
+L ECDH crypto/ecdh/ecdh.h crypto/ecdh/ech_err.c
+L STORE crypto/store/store.h crypto/store/str_err.c
+L CMS crypto/cms/cms.h crypto/cms/cms_err.c
# additional header files to be scanned for function names
L NONE crypto/x509/x509_vfy.h NONE
L NONE crypto/ec/ec_lcl.h NONE
+L NONE crypto/cms/cms_lcl.h NONE
F RSAREF_F_RSA_BN2BIN