]> granicus.if.org Git - openssl/commitdiff
Merge in recent changes from 0.9.6-stable.
authorRichard Levitte <levitte@openssl.org>
Wed, 25 Sep 2002 15:12:13 +0000 (15:12 +0000)
committerRichard Levitte <levitte@openssl.org>
Wed, 25 Sep 2002 15:12:13 +0000 (15:12 +0000)
57 files changed:
CHANGES
FAQ
Makefile.org
apps/makeapps.com
apps/pkcs12.c
apps/s_server.c
apps/speed.c
crypto/asn1/a_strex.c
crypto/asn1/a_utctm.c
crypto/cryptlib.c
crypto/crypto-lib.com
crypto/crypto.h
crypto/des/FILES [deleted file]
crypto/pem/pem_lib.c
crypto/rand/rand_egd.c
doc/crypto/BN_CTX_new.pod
doc/crypto/BN_add.pod
doc/crypto/BN_add_word.pod
doc/crypto/BN_bn2bin.pod
doc/crypto/BN_copy.pod
doc/crypto/BN_generate_prime.pod
doc/crypto/BN_mod_inverse.pod
doc/crypto/BN_mod_mul_montgomery.pod
doc/crypto/BN_mod_mul_reciprocal.pod
doc/crypto/BN_new.pod
doc/crypto/BN_rand.pod
doc/crypto/DH_generate_key.pod
doc/crypto/DH_generate_parameters.pod
doc/crypto/DH_new.pod
doc/crypto/DSA_SIG_new.pod
doc/crypto/DSA_do_sign.pod
doc/crypto/DSA_dup_DH.pod
doc/crypto/DSA_generate_key.pod
doc/crypto/DSA_generate_parameters.pod
doc/crypto/DSA_new.pod
doc/crypto/DSA_sign.pod
doc/crypto/EVP_SealInit.pod
doc/crypto/RAND_bytes.pod
doc/crypto/RSA_check_key.pod
doc/crypto/RSA_generate_key.pod
doc/crypto/RSA_private_encrypt.pod
doc/crypto/RSA_public_encrypt.pod
doc/crypto/RSA_sign.pod
doc/crypto/RSA_sign_ASN1_OCTET_STRING.pod
doc/openssl.txt
ssl/s23_clnt.c
ssl/s23_srvr.c
ssl/s2_clnt.c
ssl/s2_srvr.c
ssl/s3_clnt.c
ssl/s3_srvr.c
ssl/ssl-lib.com
ssl/ssl_lib.c
ssl/t1_clnt.c
ssl/t1_srvr.c
test/maketests.com
util/pod2mantest

diff --git a/CHANGES b/CHANGES
index 8b947b8518ad2965311c91a44b2aa7dc561acaf8..cf9d6cdab9fc7960c07af00515d424d921956117 100644 (file)
--- a/CHANGES
+++ b/CHANGES
@@ -4,6 +4,23 @@
 
  Changes between 0.9.6g and 0.9.6h  [xx XXX xxxx]
 
+  *) Don't impose a 16-byte length minimum on session IDs in ssl/s3_clnt.c
+     (the SSL 3.0 and TLS 1.0 specifications allow any length up to 32 bytes).
+     [Bodo Moeller]
+
+  *) Fix initialization code race conditions in
+        SSLv23_client_method(),   SSLv23_server_method(),
+        SSLv2_client_method(),    SSLv2_server_method(),
+        SSLv3_client_method(),    SSLv3_server_method(),
+        TLSv1_client_method(),    TLSv1_server_method().
+     [Patrick McCormick <patrick@tellme.com>, Bodo Moeller]
+
+  *) Reorder cleanup sequence in SSL_CTX_free(): only remove the ex_data after
+     the cached sessions are flushed, as the remove_cb() might use ex_data
+     contents. Bug found by Sam Varshavchik <mrsam@courier-mta.com>
+     (see [openssl.org #212]).
+     [Geoff Thorpe, Lutz Jaenicke]
+
   *) Fix typo in OBJ_txt2obj which incorrectly passed the content
      length, instead of the encoding length to d2i_ASN1_OBJECT.
      [Steve Henson]
diff --git a/FAQ b/FAQ
index f9cd7d2820a93adf9c48ca38dfa3adcd3d60bf5b..360101a2bbd9c9b17505db2f2d6926ab61d9b1b5 100644 (file)
--- a/FAQ
+++ b/FAQ
@@ -35,6 +35,7 @@ OpenSSL  -  Frequently Asked Questions
 * Why does the linker complain about undefined symbols?
 * Why does the OpenSSL test fail with "bc: command not found"?
 * Why does the OpenSSL test fail with "bc: 1 no implemented"?
+* Why does the OpenSSL test fail with "bc: stack empty"?
 * Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
 * Why does the OpenSSL compilation fail with "ar: command not found"?
 * Why does the OpenSSL compilation fail on Win32 with VC++?
@@ -392,6 +393,17 @@ and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
 for download instructions) can be safely used, for example.
 
 
+* Why does the OpenSSL test fail with "bc: stack empty"?
+
+On some DG/ux versions, bc seems to have a too small stack for calculations
+that the OpenSSL bntest throws at it.  This gets triggered when you run the
+test suite (using "make test").  The message returned is "bc: stack empty".
+
+The best way to deal with this is to find another implementation of bc
+and compile/install it.  GNU bc (see http://www.gnu.org/software/software.html
+for download instructions) can be safely used, for example.
+
+
 * Why does the OpenSSL compilation fail on Alpha Tru64 Unix?
 
 On some Alpha installations running Tru64 Unix and Compaq C, the compilation
index aae587c894867055a192b6f1add3053ec0d0437e..2107c419c97999deafc1a096a300d9722ced6836 100644 (file)
@@ -270,9 +270,7 @@ do_gnu-shared:
        done
 
 DETECT_GNU_LD=${CC} -v 2>&1 | grep '^gcc' >/dev/null 2>&1 && \
-       collect2=`gcc -print-prog-name=collect2 2>&1` && \
-       [ -n "$$collect2" ] && \
-       my_ld=`$$collect2 --help 2>&1 | grep Usage: | sed 's/^Usage: *\([^ ][^ ]*\).*/\1/'` && \
+       my_ld=`gcc -print-prog-name=ld 2>&1` && \
        [ -n "$$my_ld" ] && \
        $$my_ld -v 2>&1 | grep 'GNU ld' >/dev/null 2>&1
 
@@ -687,13 +685,13 @@ install_docs:
                $(INSTALL_PREFIX)$(MANDIR)/man3 \
                $(INSTALL_PREFIX)$(MANDIR)/man5 \
                $(INSTALL_PREFIX)$(MANDIR)/man7
-       @pod2man=`cd util; ./pod2mantest ignore`; \
+       @pod2man="`cd util; ./pod2mantest $(PERL)`"; \
        for i in doc/apps/*.pod; do \
                fn=`basename $$i .pod`; \
                if [ "$$fn" = "config" ]; then sec=5; else sec=1; fi; \
                echo "installing man$$sec/`basename $$i .pod`.$$sec"; \
                (cd `$(PERL) util/dirname.pl $$i`; \
-               sh -c "$(PERL) $$pod2man \
+               sh -c "$$pod2man \
                        --section=$$sec --center=OpenSSL \
                        --release=$(VERSION) `basename $$i`") \
                        >  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i .pod`.$$sec; \
@@ -703,7 +701,7 @@ install_docs:
                if [ "$$fn" = "des_modes" ]; then sec=7; else sec=3; fi; \
                echo "installing man$$sec/`basename $$i .pod`.$$sec"; \
                (cd `$(PERL) util/dirname.pl $$i`; \
-               sh -c "$(PERL) $$pod2man \
+               sh -c "$$pod2man \
                        --section=$$sec --center=OpenSSL \
                        --release=$(VERSION) `basename $$i`") \
                        >  $(INSTALL_PREFIX)$(MANDIR)/man$$sec/`basename $$i .pod`.$$sec; \
index fe55369843e7e5b76bcdf687e60680731907e41a..411beea872214f2ecf967864d61d4fbee3cb902d 100644 (file)
@@ -1077,7 +1077,7 @@ $ CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
 $!
 $! Show user the result
 $!
-$ WRITE SYS$OUTPUT "Main Compiling Command: ",CC
+$ WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
 $!
 $! Special Threads For OpenVMS v7.1 Or Later
 $!
index db34f0ef50b5cca795d9ef90a6e4e324eae16338..196770fc041d38a3343b70490031d0c2cafc06ab 100644 (file)
@@ -503,9 +503,10 @@ int MAIN(int argc, char **argv)
                    /* Exclude verified certificate */
                    for (i = 1; i < sk_X509_num (chain2) ; i++) 
                        sk_X509_push(certs, sk_X509_value (chain2, i));
-               }
-               sk_X509_free(chain2);
-               if (vret) {
+                   /* Free first certificate */
+                   X509_free(sk_X509_value(chain2, 0));
+                   sk_X509_free(chain2);
+               } else {
                        BIO_printf (bio_err, "Error %s getting chain.\n",
                                        X509_verify_cert_error_string(vret));
                        goto export_end;
@@ -532,8 +533,6 @@ int MAIN(int argc, char **argv)
        }
        sk_X509_pop_free(certs, X509_free);
        certs = NULL;
-       /* ucert is part of certs so it is already freed */
-       ucert = NULL;
 
 #ifdef CRYPTO_MDEBUG
        CRYPTO_pop_info();
@@ -621,7 +620,6 @@ int MAIN(int argc, char **argv)
        if (certs) sk_X509_pop_free(certs, X509_free);
        if (safes) sk_PKCS7_pop_free(safes, PKCS7_free);
        if (bags) sk_PKCS12_SAFEBAG_pop_free(bags, PKCS12_SAFEBAG_free);
-       if (ucert) X509_free(ucert);
 
 #ifdef CRYPTO_MDEBUG
        CRYPTO_pop_info();
index ae77d9ae9dc2d3464f4a52561f82c9366b57fdba..0c2893d171042ae13ae2fdae45402b70fc8414a8 100644 (file)
@@ -257,10 +257,10 @@ static char **local_argv;
 static int ebcdic_new(BIO *bi);
 static int ebcdic_free(BIO *a);
 static int ebcdic_read(BIO *b, char *out, int outl);
-static int ebcdic_write(BIO *b, char *in, int inl);
-static long ebcdic_ctrl(BIO *b, int cmd, long num, char *ptr);
+static int ebcdic_write(BIO *b, const char *in, int inl);
+static long ebcdic_ctrl(BIO *b, int cmd, long num, void *ptr);
 static int ebcdic_gets(BIO *bp, char *buf, int size);
-static int ebcdic_puts(BIO *bp, char *str);
+static int ebcdic_puts(BIO *bp, const char *str);
 
 #define BIO_TYPE_EBCDIC_FILTER (18|0x0200)
 static BIO_METHOD methods_ebcdic=
@@ -325,7 +325,7 @@ static int ebcdic_read(BIO *b, char *out, int outl)
        return(ret);
 }
 
-static int ebcdic_write(BIO *b, char *in, int inl)
+static int ebcdic_write(BIO *b, const char *in, int inl)
 {
        EBCDIC_OUTBUFF *wbuf;
        int ret=0;
@@ -358,7 +358,7 @@ static int ebcdic_write(BIO *b, char *in, int inl)
        return(ret);
 }
 
-static long ebcdic_ctrl(BIO *b, int cmd, long num, char *ptr)
+static long ebcdic_ctrl(BIO *b, int cmd, long num, void *ptr)
 {
        long ret;
 
@@ -377,7 +377,7 @@ static long ebcdic_ctrl(BIO *b, int cmd, long num, char *ptr)
 
 static int ebcdic_gets(BIO *bp, char *buf, int size)
 {
-       int i, ret;
+       int i, ret=0;
        if (bp->next_bio == NULL) return(0);
 /*     return(BIO_gets(bp->next_bio,buf,size));*/
        for (i=0; i<size-1; ++i)
@@ -396,7 +396,7 @@ static int ebcdic_gets(BIO *bp, char *buf, int size)
        return (ret < 0 && i == 0) ? ret : i;
 }
 
-static int ebcdic_puts(BIO *bp, char *str)
+static int ebcdic_puts(BIO *bp, const char *str)
 {
        if (bp->next_bio == NULL) return(0);
        return ebcdic_write(bp, str, strlen(str));
index a13e257566e43804239908478f41b7d708ac6986..643a9a6df9c8f798a2b1b2505fa6da899e068185 100644 (file)
@@ -724,7 +724,7 @@ int MAIN(int argc, char **argv)
 
                        BIO_printf(bio_err,"\n");
                        BIO_printf(bio_err,"Available options:\n");
-#ifdef TIMES
+#if defined(TIMES) || defined(USE_TOD)
                        BIO_printf(bio_err,"-elapsed        measure time in real time instead of CPU user time.\n");
 #endif
                        BIO_printf(bio_err,"-engine e       use engine e, possibly a hardware device.\n");
index 569b811998584a8612e8ea5040d4ec96407d5581..9a57eba270d97bf3d6513d5578b49a8bda27b6db 100644 (file)
@@ -519,7 +519,7 @@ int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in)
 {
        ASN1_STRING stmp, *str = &stmp;
        int mbflag, type, ret;
-       if(!*out || !in) return -1;
+       if(!in) return -1;
        type = in->type;
        if((type < 0) || (type > 30)) return -1;
        mbflag = tag2nbyte[type];
@@ -528,6 +528,6 @@ int ASN1_STRING_to_UTF8(unsigned char **out, ASN1_STRING *in)
        stmp.data = NULL;
        ret = ASN1_mbstring_copy(&str, in->data, in->length, mbflag, B_ASN1_UTF8STRING);
        if(ret < 0) return ret;
-       if(out) *out = stmp.data;
+       *out = stmp.data;
        return stmp.length;
 }
index dd5955ac9fdd778095bb23252cc6ed332c367831..1aafb663f6a3e838c8001ccbecf1cac7fb6aa9d9 100644 (file)
@@ -246,6 +246,8 @@ ASN1_UTCTIME *ASN1_UTCTIME_set(ASN1_UTCTIME *s, time_t t)
                ts=(struct tm *)localtime(&t);
                }
 #endif
+       if (ts == NULL)
+               return(NULL);
        p=(char *)s->data;
        if ((p == NULL) || (s->length < 14))
                {
index 84dcab094b59b8d881c2f6d4a14d8e13ba3a745f..f2f3d23381225070714db039384583fc41c80b85 100644 (file)
@@ -89,6 +89,7 @@ static const char* lock_names[CRYPTO_NUM_LOCKS] =
        "ssl_session",
        "ssl_sess_cert",
        "ssl",
+       /* "ssl_method", */
        "rand",
        "rand2",
        "debug_malloc",
index 2bfb24f068db614872c8c66c524cd10e3c0b8ab5..ec01c1f1fdb61d018ecb11215bb7e89e0bd009e2 100644 (file)
@@ -1333,7 +1333,7 @@ $   CC4 = CC - CCDISABLEWARNINGS + CC4DISABLEWARNINGS
 $!
 $!  Show user the result
 $!
-$   WRITE SYS$OUTPUT "Main C Compiling Command: ",CC
+$   WRITE/SYMBOL SYS$OUTPUT "Main C Compiling Command: ",CC
 $!
 $!  Else The User Entered An Invalid Arguement.
 $!
@@ -1364,7 +1364,7 @@ $ IF ARCH .EQS. "AXP" THEN MACRO = "MACRO/MIGRATION/''DEBUGGER'/''MACRO_OPTIMIZE
 $!
 $!  Show user the result
 $!
-$   WRITE SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
+$   WRITE/SYMBOL SYS$OUTPUT "Main MACRO Compiling Command: ",MACRO
 $!
 $! Time to check the contents, and to make sure we get the correct library.
 $!
index d8258fcc792029ac2552a6085a8cb939d6b5588b..a305bd058d529e4b688ad3134db4e4e64a33c365 100644 (file)
@@ -95,36 +95,39 @@ extern "C" {
  * names in cryptlib.c
  */
 
-#define        CRYPTO_LOCK_ERR                 1
-#define        CRYPTO_LOCK_ERR_HASH            2
-#define        CRYPTO_LOCK_X509                3
-#define        CRYPTO_LOCK_X509_INFO           4
-#define        CRYPTO_LOCK_X509_PKEY           5
+#define CRYPTO_LOCK_ERR                        1
+#define CRYPTO_LOCK_ERR_HASH           2
+#define CRYPTO_LOCK_X509               3
+#define CRYPTO_LOCK_X509_INFO          4
+#define CRYPTO_LOCK_X509_PKEY          5
 #define CRYPTO_LOCK_X509_CRL           6
 #define CRYPTO_LOCK_X509_REQ           7
 #define CRYPTO_LOCK_DSA                        8
 #define CRYPTO_LOCK_RSA                        9
 #define CRYPTO_LOCK_EVP_PKEY           10
-#define        CRYPTO_LOCK_X509_STORE          11
-#define        CRYPTO_LOCK_SSL_CTX             12
-#define        CRYPTO_LOCK_SSL_CERT            13
-#define        CRYPTO_LOCK_SSL_SESSION         14
-#define        CRYPTO_LOCK_SSL_SESS_CERT       15
-#define        CRYPTO_LOCK_SSL                 16
-#define        CRYPTO_LOCK_RAND                17
-#define        CRYPTO_LOCK_RAND2               18
-#define        CRYPTO_LOCK_MALLOC              19
-#define        CRYPTO_LOCK_BIO                 20
-#define        CRYPTO_LOCK_GETHOSTBYNAME       21
-#define        CRYPTO_LOCK_GETSERVBYNAME       22
-#define        CRYPTO_LOCK_READDIR             23
-#define        CRYPTO_LOCK_RSA_BLINDING        24
-#define        CRYPTO_LOCK_DH                  25
-#define        CRYPTO_LOCK_MALLOC2             26
-#define        CRYPTO_LOCK_DSO                 27
-#define        CRYPTO_LOCK_DYNLOCK             28
-#define        CRYPTO_LOCK_ENGINE              29
-#define        CRYPTO_NUM_LOCKS                30
+#define CRYPTO_LOCK_X509_STORE         11
+#define CRYPTO_LOCK_SSL_CTX            12
+#define CRYPTO_LOCK_SSL_CERT           13
+#define CRYPTO_LOCK_SSL_SESSION                14
+#define CRYPTO_LOCK_SSL_SESS_CERT      15
+#define CRYPTO_LOCK_SSL                        16
+/* for binary compatibility between 0.9.6 minor versions,
+ * reuse an existing lock (later version use a new one): */
+# define CRYPTO_LOCK_SSL_METHOD                CRYPTO_LOCK_SSL_CTX
+#define CRYPTO_LOCK_RAND               17
+#define CRYPTO_LOCK_RAND2              18
+#define CRYPTO_LOCK_MALLOC             19
+#define CRYPTO_LOCK_BIO                        20
+#define CRYPTO_LOCK_GETHOSTBYNAME      21
+#define CRYPTO_LOCK_GETSERVBYNAME      22
+#define CRYPTO_LOCK_READDIR            23
+#define CRYPTO_LOCK_RSA_BLINDING       24
+#define CRYPTO_LOCK_DH                 25
+#define CRYPTO_LOCK_MALLOC2            26
+#define CRYPTO_LOCK_DSO                        27
+#define CRYPTO_LOCK_DYNLOCK            28
+#define CRYPTO_LOCK_ENGINE             29
+#define CRYPTO_NUM_LOCKS               30
 
 #define CRYPTO_LOCK            1
 #define CRYPTO_UNLOCK          2
@@ -146,7 +149,7 @@ extern "C" {
 #endif
 #else
 #define CRYPTO_w_lock(a)
-#define        CRYPTO_w_unlock(a)
+#define CRYPTO_w_unlock(a)
 #define CRYPTO_r_lock(a)
 #define CRYPTO_r_unlock(a)
 #define CRYPTO_add(a,b,c)      ((*(a))+=(b))
diff --git a/crypto/des/FILES b/crypto/des/FILES
deleted file mode 100644 (file)
index 4c7ea2d..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-/* General stuff */
-COPYRIGHT      - Copyright info.
-MODES.DES      - A description of the features of the different modes of DES.
-FILES          - This file.
-INSTALL                - How to make things compile.
-Imakefile      - For use with kerberos.
-README         - What this package is.
-VERSION                - Which version this is and what was changed.
-KERBEROS       - Kerberos version 4 notes.
-Makefile.PL    - An old makefile to build with perl5, not current.
-Makefile.ssl   - The SSLeay makefile
-Makefile.uni   - The normal unix makefile.
-GNUmakefile    - The makefile for use with glibc.
-makefile.bc    - A Borland C makefile
-times          - Some outputs from 'speed' on some machines.
-vms.com                - For use when compiling under VMS
-
-/* My SunOS des(1) replacement */
-des.c          - des(1) source code.
-des.man                - des(1) manual.
-
-/* Testing and timing programs. */
-destest.c      - Source for libdes.a test program.
-speed.c                - Source for libdes.a timing program.
-rpw.c          - Source for libdes.a testing password reading routines.
-
-/* libdes.a source code */
-des_crypt.man  - libdes.a manual page.
-des.h          - Public libdes.a header file.
-ecb_enc.c      - des_ecb_encrypt() source, this contains the basic DES code.
-ecb3_enc.c     - des_ecb3_encrypt() source.
-cbc_ckm.c      - des_cbc_cksum() source.
-cbc_enc.c      - des_cbc_encrypt() source.
-ncbc_enc.c     - des_cbc_encrypt() that is 'normal' in that it copies
-                 the new iv values back in the passed iv vector.
-ede_enc.c      - des_ede3_cbc_encrypt() cbc mode des using triple DES.
-cbc3_enc.c     - des_3cbc_encrypt() source, don't use this function.
-cfb_enc.c      - des_cfb_encrypt() source.
-cfb64enc.c     - des_cfb64_encrypt() cfb in 64 bit mode but setup to be
-                 used as a stream cipher.
-cfb64ede.c     - des_ede3_cfb64_encrypt() cfb in 64 bit mode but setup to be
-                 used as a stream cipher and using triple DES.
-ofb_enc.c      - des_cfb_encrypt() source.
-ofb64_enc.c    - des_ofb_encrypt() ofb in 64 bit mode but setup to be
-                 used as a stream cipher.
-ofb64ede.c     - des_ede3_ofb64_encrypt() ofb in 64 bit mode but setup to be
-                 used as a stream cipher and using triple DES.
-enc_read.c     - des_enc_read() source.
-enc_writ.c     - des_enc_write() source.
-pcbc_enc.c     - des_pcbc_encrypt() source.
-qud_cksm.c     - quad_cksum() source.
-rand_key.c     - des_random_key() source.
-read_pwd.c     - Source for des_read_password() plus related functions.
-set_key.c      - Source for des_set_key().
-str2key.c      - Covert a string of any length into a key.
-fcrypt.c       - A small, fast version of crypt(3).
-des_locl.h     - Internal libdes.a header file.
-podd.h         - Odd parity tables - used in des_set_key().
-sk.h           - Lookup tables used in des_set_key().
-spr.h          - What is left of the S tables - used in ecb_encrypt().
-des_ver.h      - header file for the external definition of the
-                 version string.
-des.doc                - SSLeay documentation for the library.
-
-/* The perl scripts - you can ignore these files they are only
- * included for the curious */
-des.pl         - des in perl anyone? des_set_key and des_ecb_encrypt
-                 both done in a perl library.
-testdes.pl     - Testing program for des.pl
-doIP           - Perl script used to develop IP xor/shift code.
-doPC1          - Perl script used to develop PC1 xor/shift code.
-doPC2          - Generates sk.h.
-PC1            - Output of doPC1 should be the same as output from PC1.
-PC2            - used in development of doPC2.
-shifts.pl      - Perl library used by my perl scripts.
-
-/* I started making a perl5 dynamic library for libdes
- * but did not fully finish, these files are part of that effort. */
-DES.pm
-DES.pod
-DES.xs
-t
-typemap
-
-/* The following are for use with sun RPC implementaions. */
-rpc_des.h
-rpc_enc.c
-
-/* The following are contibuted by Mark Murray <mark@grondar.za>.  They
- * are not normally built into libdes due to machine specific routines
- * contained in them.  They are for use in the most recent incarnation of
- * export kerberos v 4 (eBones). */
-supp.c
-new_rkey.c
-
-
index 01759f75c3b548135055602b777ec57dd3b6bc21..043b578e22d9ab8e90d6c05e2e7387a897cdf1c2 100644 (file)
@@ -405,8 +405,11 @@ err:
        memset(iv,0,sizeof(iv));
        memset((char *)&ctx,0,sizeof(ctx));
        memset(buf,0,PEM_BUFSIZE);
-       memset(data,0,(unsigned int)dsize);
-       OPENSSL_free(data);
+       if (data != NULL)
+               {
+               memset(data,0,(unsigned int)dsize);
+               OPENSSL_free(data);
+               }
        return(ret);
        }
 
index a6601696ad9e347a32e6c5c987e26fd9c7752581..e17060fe9098b1c3e0f105515ad089e093840b6d 100644 (file)
@@ -59,7 +59,7 @@
 /* Query the EGD <URL: http://www.lothar.com/tech/crypto/>.
  */
 
-#if defined(WIN32) || defined(VMS) || defined(__VMS)
+#if defined(WIN32) || defined(MSDOS) || defined(VMS) || defined(__VMS)
 int RAND_egd(const char *path)
        {
        return(-1);
index c94d8c610da5804de25a73d5b40327721cde09fb..ad8d07db89afc137058c4e370efc5471f487ace7 100644 (file)
@@ -42,7 +42,7 @@ BN_CTX_init() and BN_CTX_free() have no return values.
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<BN_add(3)|BN_add(3)>,
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<BN_add(3)|BN_add(3)>,
 L<BN_CTX_start(3)|BN_CTX_start(3)>
 
 =head1 HISTORY
index 0541d45643523e821be4f854a0ba3fe2f8fac93a..7baed2d4920e4f2d57545fb746692b1abb7950ee 100644 (file)
@@ -86,7 +86,7 @@ The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<BN_CTX_new(3)|BN_CTX_new(3)>,
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<BN_CTX_new(3)|BN_CTX_new(3)>,
 L<BN_add_word(3)|BN_add_word(3)>, L<BN_set_bit(3)|BN_set_bit(3)>
 
 =head1 HISTORY
index 66bedfb924422631074daf421b8aeb0117aaaa2e..94244adea4cd973b6e17bce818c6c164f0b778e7 100644 (file)
@@ -46,7 +46,7 @@ BN_mod_word() and BN_div_word() return B<a>%B<w>.
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<BN_add(3)|BN_add(3)>
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<BN_add(3)|BN_add(3)>
 
 =head1 HISTORY
 
index b62d1af0ff6d7bab0ce02d0a27c082fd65b66e1d..a4b17ca60a891ec265a92ca6d7f0552521fe659b 100644 (file)
@@ -80,7 +80,7 @@ The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<BN_zero(3)|BN_zero(3)>,
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<BN_zero(3)|BN_zero(3)>,
 L<ASN1_INTEGER_to_BN(3)|ASN1_INTEGER_to_BN(3)>,
 L<BN_num_bytes(3)|BN_num_bytes(3)>
 
index 8ad25e7834f6c7222063c373975c4925d83f94d1..388dd7df2653df480d589d06a81350d326e72220 100644 (file)
@@ -25,7 +25,7 @@ by L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>
 
 =head1 HISTORY
 
index 638f6514ee8a0a139b16b1bafb4b1a8397d9691f..6ea23791d1a1d54212b4f8d74f48286331dea89a 100644 (file)
@@ -90,7 +90,7 @@ The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>
 
 =head1 HISTORY
 
index 49e62daf9f2e13933de50730594383a356b20fd2..3ea3975c7422ba7a65b904bf6786e1c046d872b7 100644 (file)
@@ -27,7 +27,7 @@ NULL on error. The error codes can be obtained by L<ERR_get_error(3)|ERR_get_err
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<BN_add(3)|BN_add(3)>
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<BN_add(3)|BN_add(3)>
 
 =head1 HISTORY
 
index 0b8ab512df87097de499a862c0f47abd3f824cf9..f3cee924b93a1bf2beb09eef1e3d62c92e161638 100644 (file)
@@ -81,7 +81,7 @@ The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<BN_add(3)|BN_add(3)>,
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<BN_add(3)|BN_add(3)>,
 L<BN_CTX_new(3)|BN_CTX_new(3)>
 
 =head1 HISTORY
index a28925f8a93a1154aed655ec5c019333df1b5c6c..74a216ddc2ad8f2f428bba03b166d0c4ee54d915 100644 (file)
@@ -69,7 +69,7 @@ The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<BN_add(3)|BN_add(3)>,
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<BN_add(3)|BN_add(3)>,
 L<BN_CTX_new(3)|BN_CTX_new(3)>
 
 =head1 HISTORY
index c1394ff2a37d552ac19ea86962fc3ea39dc4260c..3033789c5147873479a321af443ca28b254853b8 100644 (file)
@@ -42,7 +42,7 @@ values.
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>
 
 =head1 HISTORY
 
index 9cec238f9e24b9d8808ce50f558bdd188892c3e1..81f93c2eb3a4e5d64420678dee435bcd51dd27e5 100644 (file)
@@ -45,7 +45,7 @@ The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<bn(3)|bn(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>,
+L<bn(3)|bn(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>,
 L<RAND_add(3)|RAND_add(3)>, L<RAND_bytes(3)|RAND_bytes(3)>
 
 =head1 HISTORY
index 920995b2e5aa5eede09bf46eeb9ad6c8b4613d83..81f09fdf45eada71b5a110e246be866790b9c561 100644 (file)
@@ -40,7 +40,7 @@ The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<dh(3)|dh(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>, L<DH_size(3)|DH_size(3)>
+L<dh(3)|dh(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>, L<DH_size(3)|DH_size(3)>
 
 =head1 HISTORY
 
index a7d0c75f0cb3f7e3f9919ad6738e72e8786f8496..9081e9ea7cf9380eba53b132ac53fa586c1530ba 100644 (file)
@@ -59,7 +59,8 @@ a usable generator.
 
 =head1 SEE ALSO
 
-L<dh(3)|dh(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>, L<DH_free(3)|DH_free(3)>
+L<dh(3)|dh(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>,
+L<DH_free(3)|DH_free(3)>
 
 =head1 HISTORY
 
index 64624b9d15604393c317be6185e821317d61b87b..60c930093e02f095ab89379071defeb362ff0057 100644 (file)
@@ -29,7 +29,7 @@ DH_free() returns no value.
 
 =head1 SEE ALSO
 
-L<dh(3)|dh(3)>, L<err(3)|err(3)>,
+L<dh(3)|dh(3)>, L<ERR_get_error(3)|ERR_get_error(3)>,
 L<DH_generate_parameters(3)|DH_generate_parameters(3)>,
 L<DH_generate_key(3)|DH_generate_key(3)>
 
index 671655554a53b71fb3f3ee6ec3195ade93f06652..3ac614003816606db879fb8dfe037db2a713a7cc 100644 (file)
@@ -30,7 +30,8 @@ DSA_SIG_free() returns no value.
 
 =head1 SEE ALSO
 
-L<dsa(3)|dsa(3)>, L<err(3)|err(3)>, L<DSA_do_sign(3)|DSA_do_sign(3)>
+L<dsa(3)|dsa(3)>, L<ERR_get_error(3)|ERR_get_error(3)>,
+L<DSA_do_sign(3)|DSA_do_sign(3)>
 
 =head1 HISTORY
 
index a24fd5714efe96491c516cddb049a9a08f8318be..5dfc733b20e26b1b53cd8241a6402cd8e777d73e 100644 (file)
@@ -36,7 +36,7 @@ L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<dsa(3)|dsa(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>,
+L<dsa(3)|dsa(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>,
 L<DSA_SIG_new(3)|DSA_SIG_new(3)>,
 L<DSA_sign(3)|DSA_sign(3)>
 
index 29cb1075d1103c23efc1b49239867290d03a178a..695f99a13b19eb91aa50f7b5731f4be09eb077fa 100644 (file)
@@ -27,7 +27,7 @@ Be careful to avoid small subgroup attacks when using this.
 
 =head1 SEE ALSO
 
-L<dh(3)|dh(3)>, L<dsa(3)|dsa(3)>, L<err(3)|err(3)>
+L<dh(3)|dh(3)>, L<dsa(3)|dsa(3)>, L<ERR_get_error(3)|ERR_get_error(3)>
 
 =head1 HISTORY
 
index 52890db5be20db20a167d267a0e124b736745ff4..af83ccfaa16ba415d5d5cc113e67941a308820b4 100644 (file)
@@ -24,7 +24,8 @@ The error codes can be obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<dsa(3)|dsa(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>, L<DSA_generate_parameters(3)|DSA_generate_parameters(3)>
+L<dsa(3)|dsa(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>,
+L<DSA_generate_parameters(3)|DSA_generate_parameters(3)>
 
 =head1 HISTORY
 
index 43f60b0eb955bc4bcb84b8d577855b85cb2cf4fe..be7c924ff8f971eefa18499b275b8df00971a81c 100644 (file)
@@ -90,7 +90,7 @@ Seed lengths E<gt> 20 are not supported.
 
 =head1 SEE ALSO
 
-L<dsa(3)|dsa(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>,
+L<dsa(3)|dsa(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>,
 L<DSA_free(3)|DSA_free(3)>
 
 =head1 HISTORY
index 7dde54445b75649dc24bc652749677efc4b466ad..301af912dd53e19d1636010ba7fdb0bfd4d2e8e9 100644 (file)
@@ -30,7 +30,7 @@ DSA_free() returns no value.
 
 =head1 SEE ALSO
 
-L<dsa(3)|dsa(3)>, L<err(3)|err(3)>,
+L<dsa(3)|dsa(3)>, L<ERR_get_error(3)|ERR_get_error(3)>,
 L<DSA_generate_parameters(3)|DSA_generate_parameters(3)>,
 L<DSA_generate_key(3)|DSA_generate_key(3)>
 
index f6e60a8ca32e72aed6387746043c8b884dc58be1..97389e8ec885004c8887315c2c496bb6a4c22cfe 100644 (file)
@@ -55,7 +55,7 @@ Standard, DSS), ANSI X9.30
 
 =head1 SEE ALSO
 
-L<dsa(3)|dsa(3)>, L<err(3)|err(3)>, L<rand(3)|rand(3)>,
+L<dsa(3)|dsa(3)>, L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>,
 L<DSA_do_sign(3)|DSA_do_sign(3)>
 
 =head1 HISTORY
index 0451eb648a397a5060ef428be82c8e2354d1adb0..7cd12491cda0daa591d7de89ada1bd154925e0c0 100644 (file)
@@ -12,7 +12,7 @@ EVP_SealInit, EVP_SealUpdate, EVP_SealFinal - EVP envelope encryption
                int *ekl, unsigned char *iv,EVP_PKEY **pubk, int npubk);
  int EVP_SealUpdate(EVP_CIPHER_CTX *ctx, unsigned char *out,
          int *outl, unsigned char *in, int inl);
int EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out,
void EVP_SealFinal(EVP_CIPHER_CTX *ctx, unsigned char *out,
          int *outl);
 
 =head1 DESCRIPTION
@@ -43,8 +43,7 @@ page.
 
 EVP_SealInit() returns 0 on error or B<npubk> if successful.
 
-EVP_SealUpdate() and EVP_SealFinal() return 1 for success and 0 for
-failure.
+EVP_SealUpdate() returns 1 for success and 0 for failure.
 
 =head1 NOTES
 
index b6ebd50527885d90bf71310b2e1fa000ba8e684c..ce6329ce54afe2a9ffe95b15d3448864b8b5a636 100644 (file)
@@ -35,7 +35,8 @@ method.
 
 =head1 SEE ALSO
 
-L<rand(3)|rand(3)>, L<err(3)|err(3)>, L<RAND_add(3)|RAND_add(3)>
+L<rand(3)|rand(3)>, L<ERR_get_error(3)|ERR_get_error(3)>,
+L<RAND_add(3)|RAND_add(3)>
 
 =head1 HISTORY
 
index d2db47e9787d85c68033a86dc54d9f14205cbabf..496fc471373154039ba7b6b819c86ee22acb1321 100644 (file)
@@ -39,7 +39,7 @@ key data too.
 
 =head1 SEE ALSO
 
-L<rsa(3)|rsa(3)>, L<err(3)|err(3)>
+L<rsa(3)|rsa(3)>, L<ERR_get_error(3)|ERR_get_error(3)>
 
 =head1 HISTORY
 
index 8714f7179d65e1b9d4f05ab2646d741c333ca5e8..52dbb14a537debb5e727a5a03d520f6c60080f01 100644 (file)
@@ -59,7 +59,8 @@ RSA_generate_key() goes into an infinite loop for illegal input values.
 
 =head1 SEE ALSO
 
-L<err(3)|err(3)>, L<rand(3)|rand(3)>, L<rsa(3)|rsa(3)>, L<RSA_free(3)|RSA_free(3)>
+L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>, L<rsa(3)|rsa(3)>,
+L<RSA_free(3)|RSA_free(3)>
 
 =head1 HISTORY
 
index 6861a98a109a4729c2d941526024b2545fde1793..746a80c79ea0c85e87b5d1802b46550c27c5e857 100644 (file)
@@ -59,7 +59,8 @@ obtained by L<ERR_get_error(3)|ERR_get_error(3)>.
 
 =head1 SEE ALSO
 
-L<err(3)|err(3)>, L<rsa(3)|rsa(3)>, L<RSA_sign(3)|RSA_sign(3)>, L<RSA_verify(3)|RSA_verify(3)>
+L<ERR_get_error(3)|ERR_get_error(3)>, L<rsa(3)|rsa(3)>,
+L<RSA_sign(3)|RSA_sign(3)>, L<RSA_verify(3)|RSA_verify(3)>
 
 =head1 HISTORY
 
index 02edb7aa756f882d160982010df0eda81482d98d..9ae5f93152f914f4081f4ca586911ae5b0fb3007 100644 (file)
@@ -72,7 +72,8 @@ SSL, PKCS #1 v2.0
 
 =head1 SEE ALSO
 
-L<err(3)|err(3)>, L<rand(3)|rand(3)>, L<rsa(3)|rsa(3)>, L<RSA_size(3)|RSA_size(3)>
+L<ERR_get_error(3)|ERR_get_error(3)>, L<rand(3)|rand(3)>, L<rsa(3)|rsa(3)>,
+L<RSA_size(3)|RSA_size(3)>
 
 =head1 NOTES
 
index f0bf6eea1b358ed0ae2a2fe2cd8747916f6eb21f..71688a665e13aa746517a49fc579d5325266e91b 100644 (file)
@@ -50,8 +50,8 @@ SSL, PKCS #1 v2.0
 
 =head1 SEE ALSO
 
-L<err(3)|err(3)>, L<objects(3)|objects(3)>, L<rsa(3)|rsa(3)>,
-L<RSA_private_encrypt(3)|RSA_private_encrypt(3)>,
+L<ERR_get_error(3)|ERR_get_error(3)>, L<objects(3)|objects(3)>,
+L<rsa(3)|rsa(3)>, L<RSA_private_encrypt(3)|RSA_private_encrypt(3)>,
 L<RSA_public_decrypt(3)|RSA_public_decrypt(3)> 
 
 =head1 HISTORY
index df9ceb339a63d491ab8a064c6f5d10cc375f31da..e70380bbfc96ab078711ec346db061337e44f31a 100644 (file)
@@ -47,8 +47,8 @@ These functions serve no recognizable purpose.
 
 =head1 SEE ALSO
 
-L<err(3)|err(3)>, L<objects(3)|objects(3)>, L<rand(3)|rand(3)>,
-L<rsa(3)|rsa(3)>, L<RSA_sign(3)|RSA_sign(3)>,
+L<ERR_get_error(3)|ERR_get_error(3)>, L<objects(3)|objects(3)>,
+L<rand(3)|rand(3)>, L<rsa(3)|rsa(3)>, L<RSA_sign(3)|RSA_sign(3)>,
 L<RSA_verify(3)|RSA_verify(3)>
 
 =head1 HISTORY
index 5da519e7e46531d93c70584ee2a86c0988e7ebf4..432a17b66cf80ebe6f01f2f0259971bc529911ab 100644 (file)
@@ -344,7 +344,7 @@ the extension.
 
 Examples:
 
-subjectAltName=email:copy,email:my@other.address,URL:http://my.url.here/
+subjectAltName=email:copy,email:my@other.address,URI:http://my.url.here/
 subjectAltName=email:my@other.address,RID:1.2.3.4
 
 Issuer Alternative Name.
index 2d0eb4a8fff32290e328e532f3a0dccc5363d67c..df9ed02ddd0a6dcc5997ec0302767741e3a99797 100644 (file)
@@ -87,11 +87,15 @@ SSL_METHOD *SSLv23_client_method(void)
 
        if (init)
                {
+               CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
+
                memcpy((char *)&SSLv23_client_data,
                        (char *)sslv23_base_method(),sizeof(SSL_METHOD));
                SSLv23_client_data.ssl_connect=ssl23_connect;
                SSLv23_client_data.get_ssl_method=ssl23_get_client_method;
                init=0;
+
+               CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
                }
        return(&SSLv23_client_data);
        }
index b40bb01ab72a80723b1d13d4163497fe01c5c53d..94198750f9edbad9cb1d2010f6006e8fdb2a2f96 100644 (file)
@@ -139,11 +139,15 @@ SSL_METHOD *SSLv23_server_method(void)
 
        if (init)
                {
+               CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
+
                memcpy((char *)&SSLv23_server_data,
                        (char *)sslv23_base_method(),sizeof(SSL_METHOD));
                SSLv23_server_data.ssl_accept=ssl23_accept;
                SSLv23_server_data.get_ssl_method=ssl23_get_server_method;
                init=0;
+
+               CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
                }
        return(&SSLv23_server_data);
        }
index 236b394db7eeb4ad3d6948bf5b2c89f4a68d5196..c59fa6e4292419e8d653763217f7205831356a5e 100644 (file)
@@ -145,11 +145,15 @@ SSL_METHOD *SSLv2_client_method(void)
 
        if (init)
                {
+               CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
+
                memcpy((char *)&SSLv2_client_data,(char *)sslv2_base_method(),
                        sizeof(SSL_METHOD));
                SSLv2_client_data.ssl_connect=ssl2_connect;
                SSLv2_client_data.get_ssl_method=ssl2_get_client_method;
                init=0;
+
+               CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
                }
        return(&SSLv2_client_data);
        }
index d736f6807b2fcea7864a05e1cf25f6b44af6af93..48fff175d4e80c8bccdcd01f46fb32ee2a0d718f 100644 (file)
@@ -145,11 +145,15 @@ SSL_METHOD *SSLv2_server_method(void)
 
        if (init)
                {
+               CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
+
                memcpy((char *)&SSLv2_server_data,(char *)sslv2_base_method(),
                        sizeof(SSL_METHOD));
                SSLv2_server_data.ssl_accept=ssl2_accept;
                SSLv2_server_data.get_ssl_method=ssl2_get_server_method;
                init=0;
+
+               CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
                }
        return(&SSLv2_server_data);
        }
@@ -1001,7 +1005,7 @@ static int request_certificate(SSL *s)
        len = 6 + (unsigned long)s->s2->tmp.clen + (unsigned long)s->s2->tmp.rlen;
        if (len > SSL2_MAX_RECORD_LENGTH_3_BYTE_HEADER)
                {
-               SSLerr(SSL_F_GET_CLIENT_MASTER_KEY,SSL_R_MESSAGE_TOO_LONG);
+               SSLerr(SSL_F_REQUEST_CERTIFICATE,SSL_R_MESSAGE_TOO_LONG);
                goto end;
                }
        j = (int)len - s->init_num;
index 32b9cea1cabffa727c22ce1d7bdb0e462e3db875..a55acd19752bb6dff6ebc9bee13dcb09e118a2d2 100644 (file)
@@ -146,11 +146,15 @@ SSL_METHOD *SSLv3_client_method(void)
 
        if (init)
                {
-               init=0;
+               CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
+
                memcpy((char *)&SSLv3_client_data,(char *)sslv3_base_method(),
                        sizeof(SSL_METHOD));
                SSLv3_client_data.ssl_connect=ssl3_connect;
                SSLv3_client_data.get_ssl_method=ssl3_get_client_method;
+               init=0;
+
+               CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
                }
        return(&SSLv3_client_data);
        }
@@ -632,23 +636,11 @@ static int ssl3_get_server_hello(SSL *s)
        /* get the session-id */
        j= *(p++);
 
-       if(j > sizeof s->session->session_id)
-               {
-               al=SSL_AD_ILLEGAL_PARAMETER;
-               SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,
-                      SSL_R_SSL3_SESSION_ID_TOO_LONG);
-               goto f_err;
-               }
-
-       if ((j != 0) && (j != SSL3_SESSION_ID_SIZE))
+       if ((j > sizeof s->session->session_id) || (j > SSL3_SESSION_ID_SIZE))
                {
-               /* SSLref returns 16 :-( */
-               if (j < SSL2_SSL_SESSION_ID_LENGTH)
-                       {
-                       al=SSL_AD_ILLEGAL_PARAMETER;
-                       SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_SSL3_SESSION_ID_TOO_SHORT);
-                       goto f_err;
-                       }
+               al=SSL_AD_ILLEGAL_PARAMETER;
+               SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_SSL3_SESSION_ID_TOO_LONG);
+               goto f_err;
                }
        if (j != 0 && j == s->session->session_id_length
            && memcmp(p,s->session->session_id,j) == 0)
@@ -656,6 +648,7 @@ static int ssl3_get_server_hello(SSL *s)
            if(s->sid_ctx_length != s->session->sid_ctx_length
               || memcmp(s->session->sid_ctx,s->sid_ctx,s->sid_ctx_length))
                {
+               /* actually a client application bug */
                al=SSL_AD_ILLEGAL_PARAMETER;
                SSLerr(SSL_F_SSL3_GET_SERVER_HELLO,SSL_R_ATTEMPT_TO_REUSE_SESSION_IN_DIFFERENT_CONTEXT);
                goto f_err;
index fe1e6890142b918909f20694fd0109723c28cc46..50913ae8e4aabef53a0dfe626914f778068bb23f 100644 (file)
@@ -151,11 +151,15 @@ SSL_METHOD *SSLv3_server_method(void)
 
        if (init)
                {
+               CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
+
                memcpy((char *)&SSLv3_server_data,(char *)sslv3_base_method(),
                        sizeof(SSL_METHOD));
                SSLv3_server_data.ssl_accept=ssl3_accept;
                SSLv3_server_data.get_ssl_method=ssl3_get_server_method;
                init=0;
+
+               CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
                }
        return(&SSLv3_server_data);
        }
index 7d2836478d3ee732a8e6715ad95b00fee7d63baa..44ea1bb979428cb9aba491e37ced060cfae66ad3 100644 (file)
@@ -1089,7 +1089,7 @@ $   ENDIF
 $!
 $!  Show user the result
 $!
-$   WRITE SYS$OUTPUT "Main Compiling Command: ",CC
+$   WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
 $!
 $!  Else The User Entered An Invalid Arguement.
 $!
index 4f84a3476da0342e94e4bf0fd588a990fb497d08..6b5a135ffebca1700fadbd480abc183195566378 100644 (file)
@@ -1245,13 +1245,24 @@ void SSL_CTX_free(SSL_CTX *a)
                abort(); /* ok */
                }
 #endif
+  
+       /*
+        * Free internal session cache. However: the remove_cb() may reference
+        * the ex_data of SSL_CTX, thus the ex_data store can only be removed
+        * after the sessions were flushed.
+        * As the ex_data handling routines might also touch the session cache,
+        * the most secure solution seems to be: empty (flush) the cache, then
+        * free ex_data, then finally free the cache.
+        * (See ticket [openssl.org #212].)
+        */
+       if (a->sessions != NULL)
+               SSL_CTX_flush_sessions(a,0);
+
        CRYPTO_free_ex_data(ssl_ctx_meth,(char *)a,&a->ex_data);
 
        if (a->sessions != NULL)
-               {
-               SSL_CTX_flush_sessions(a,0);
-               lh_free(a->sessions);
-               }
+               lh_free(a->sessions);
+
        if (a->cert_store != NULL)
                X509_STORE_free(a->cert_store);
        if (a->cipher_list != NULL)
index 9745630a008cf8e1a17e077846afd3650cac109e..df00a1215af79d53a21952d72ea4d5af208e116b 100644 (file)
@@ -79,11 +79,15 @@ SSL_METHOD *TLSv1_client_method(void)
 
        if (init)
                {
+               CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
+
                memcpy((char *)&TLSv1_client_data,(char *)tlsv1_base_method(),
                        sizeof(SSL_METHOD));
                TLSv1_client_data.ssl_connect=ssl3_connect;
                TLSv1_client_data.get_ssl_method=tls1_get_client_method;
                init=0;
+
+               CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
                }
        return(&TLSv1_client_data);
        }
index 996b7ca8e2ef54a6bc65288d94e9f9aa8e9810e0..e62275c6f8145ead72e3f713a604ca7d21916beb 100644 (file)
@@ -80,11 +80,15 @@ SSL_METHOD *TLSv1_server_method(void)
 
        if (init)
                {
+               CRYPTO_w_lock(CRYPTO_LOCK_SSL_METHOD);
+
                memcpy((char *)&TLSv1_server_data,(char *)tlsv1_base_method(),
                        sizeof(SSL_METHOD));
                TLSv1_server_data.ssl_accept=ssl3_accept;
                TLSv1_server_data.get_ssl_method=tls1_get_server_method;
                init=0;
+
+               CRYPTO_w_unlock(CRYPTO_LOCK_SSL_METHOD);
                }
        return(&TLSv1_server_data);
        }
index 3d1b208ddcff33cfec8170d31e17817a8faf556e..c2f81c5c1b8ef0fa7ab08be227d1bb381c0b70b7 100644 (file)
@@ -906,7 +906,7 @@ $   CC = CC + "/DEFINE=(" + CCDEFS + ")" + CCDISABLEWARNINGS
 $!
 $!  Show user the result
 $!
-$   WRITE SYS$OUTPUT "Main Compiling Command: ",CC
+$   WRITE/SYMBOL SYS$OUTPUT "Main Compiling Command: ",CC
 $!
 $!  Else The User Entered An Invalid Arguement.
 $!
index 449ef14f1b438426ccf82f3a2d46f0243c08689d..026a6a1789d253046fe7b8a0294fd15118ae59bc 100755 (executable)
@@ -11,7 +11,8 @@
 
 
 IFS=:
-try_without_dir=false
+
+try_without_dir=true
 # First we try "pod2man", then "$dir/pod2man" for each item in $PATH.
 for dir in dummy:$PATH; do
     if [ "$try_without_dir" = true ]; then
@@ -29,9 +30,16 @@ for dir in dummy:$PATH; do
     if [ ! "$pod2man" = '' ]; then
         failure=none
 
+       if "$pod2man" --section=1 --center=OpenSSL --release=dev pod2mantest.pod | fgrep OpenSSL >/dev/null; then
+           :
+       else
+           failure=BasicTest
+       fi
 
-       if "$pod2man" --section=1 --center=OpenSSL --release=dev pod2mantest.pod | grep '^MARKER - ' >/dev/null 2>&1; then
-           failure=MultilineTest
+       if [ "$failure" = none ]; then
+           if "$pod2man" --section=1 --center=OpenSSL --release=dev pod2mantest.pod | grep '^MARKER - ' >/dev/null; then
+               failure=MultilineTest
+           fi
        fi
 
 
@@ -45,9 +53,5 @@ for dir in dummy:$PATH; do
 done
 
 echo "No working pod2man found.  Consider installing a new version." >&2
-if [ "$1" = ignore ]; then
-  echo "As a workaround, we'll use a bundled old copy of pod2man.pl." >&2
-  echo "../../util/pod2man.pl"
-  exit 0
-fi
-exit 1
+echo "As a workaround, we'll use a bundled old copy of pod2man.pl." >&2
+echo "$1 ../../util/pod2man.pl"