From: Richard Levitte Date: Thu, 14 Feb 2002 14:15:45 +0000 (+0000) Subject: Merge in recent changes from 0.9.6-stable. X-Git-Tag: OpenSSL-engine-0_9_6c^2~1 X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=30b5ce14d8c5b620893462b09f84c1b54b943234;p=openssl Merge in recent changes from 0.9.6-stable. --- diff --git a/CHANGES b/CHANGES index 19d8f7cc61..ce9e361353 100644 --- a/CHANGES +++ b/CHANGES @@ -4,6 +4,25 @@ Changes between 0.9.6c and 0.9.6d [XX xxx XXXX] + *) Add information about CygWin 1.3 and on, and preserve proper + configuration for the versions before that. + [Corinna Vinschen and Richard Levitte] + + *) Make removal from session cache (SSL_CTX_remove_session()) more robust: + check whether we deal with a copy of a session and do not delete from + the cache in this case. Problem reported by "Izhar Shoshani Levi" + . + [Lutz Jaenicke] + + *) Do not store session data into the internal session cache, if it + is never intended to be looked up (SSL_SESS_CACHE_NO_INTERNAL_LOOKUP + flag is set). Proposed by Aslam . + [Lutz Jaenicke] + + *) Have ASN1_BIT_STRING_set_bit() really clear a bit when the requested + value is 0. + [Richard Levitte] + *) Fix a crashbug and a logic bug in hwcrhk_load_pubkey() [Toomas Kiisk via Richard Levitte] diff --git a/Configure b/Configure index 467a929048..7b9a8241c2 100755 --- a/Configure +++ b/Configure @@ -477,8 +477,9 @@ my %table=( # and its library files in util/pl/*) "Mingw32", "gcc:-DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32", -# CygWin32 -"CygWin32", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall::::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32", +# Cygwin +"Cygwin-pre1.3", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O2 -m486 -Wall::(unknown)::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32", +"Cygwin", "gcc:-DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O2 -m486 -Wall::::BN_LLONG ${x86_gcc_des} ${x86_gcc_opts}::::::::::win32:cygwin-shared:::.dll", # Ultrix from Bernhard Simon "ultrix-cc","cc:-std1 -O -Olimit 1000 -DL_ENDIAN::(unknown)::::::", @@ -744,13 +745,17 @@ if ($target eq "LIST") { exit 0; } +if ($target =~ m/^CygWin32(-.*)$/) { + $target = "Cygwin".$1; +} + print "Configuring for $target\n"; &usage if (!defined($table{$target})); my $IsWindows=scalar grep /^$target$/,@WinTargets; -$exe_ext=".exe" if ($target eq "CygWin32"); +$exe_ext=".exe" if ($target eq "Cygwin"); $openssldir="/usr/local/ssl" if ($openssldir eq "" and $prefix eq ""); $prefix=$openssldir if $prefix eq ""; diff --git a/Makefile.org b/Makefile.org index 307fc9e2d1..d8a44ecf0f 100644 --- a/Makefile.org +++ b/Makefile.org @@ -236,19 +236,22 @@ clean-shared: done; \ fi; \ ( set -x; rm -f lib$$i$(SHLIB_EXT) ); \ + if [ "$(PLATFORM)" = "Cygwin" ]; then \ + ( set -x; rm -f cyg$$i$(SHLIB_EXT) lib$$i$(SHLIB_EXT).a ); \ + fi; \ done link-shared: - @for i in $(SHLIBDIRS); do \ - prev=lib$$i$(SHLIB_EXT); \ - if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \ - tmp="$(SHARED_LIBS_LINK_EXTS)"; \ + @if [ -n "$(SHARED_LIBS_LINK_EXTS)" ]; then \ + tmp="$(SHARED_LIBS_LINK_EXTS)"; \ + for i in $(SHLIBDIRS); do \ + prev=lib$$i$(SHLIB_EXT); \ for j in $${tmp:-x}; do \ ( set -x; ln -f -s $$prev lib$$i$$j ); \ prev=lib$$i$$j; \ done; \ - fi; \ - done + done; \ + fi build-shared: clean-shared do_$(SHLIB_TARGET) link-shared @@ -282,6 +285,15 @@ do_darwin-shared: echo "" ; \ done +do_cygwin-shared: + libs='-L. ${SHLIBDEPS}'; for i in ${SHLIBDIRS}; do \ + ( set -x; ${CC} -shared -o cyg$$i.dll \ + -Wl,--whole-archive lib$$i.a \ + -Wl,--out-implib,lib$$i.dll.a \ + -Wl,--no-whole-archive $$libs ) || exit 1; \ + libs="$$libs -l$$i"; \ + done + # This assumes that GNU utilities are *not* used do_alpha-osf1-shared: if ${DETECT_GNU_LD}; then \ @@ -638,10 +650,18 @@ install: all install_docs tmp="$(SHARED_LIBS)"; \ for i in $${tmp:-x}; \ do \ - if [ -f "$$i" ]; then \ + if [ -f "$$i" -o -f "$$i.a" ]; then \ ( echo installing $$i; \ - cp -f $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \ - chmod 555 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i ); \ + if [ "$(PLATFORM)" != "Cygwin" ]; then \ + cp $$i $(INSTALL_PREFIX)$(INSTALLTOP)/lib; \ + chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i; \ + else \ + c=`echo $$i | sed 's/^lib/cyg/'`; \ + cp $$c $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \ + chmod 755 $(INSTALL_PREFIX)$(INSTALLTOP)/bin/$$c; \ + cp $$i.a $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \ + chmod 644 $(INSTALL_PREFIX)$(INSTALLTOP)/lib/$$i.a; \ + fi ); \ fi \ done; \ ( here="`pwd`"; \ diff --git a/README b/README index fca2287f22..702b6257d1 100644 --- a/README +++ b/README @@ -1,7 +1,7 @@ OpenSSL 0.9.6d-dev [engine] XX xxx XXXX - Copyright (c) 1998-2001 The OpenSSL Project + Copyright (c) 1998-2002 The OpenSSL Project Copyright (c) 1995-1998 Eric A. Young, Tim J. Hudson All rights reserved. diff --git a/TABLE b/TABLE index a78f4a3d39..ab8a49a1a5 100644 --- a/TABLE +++ b/TABLE @@ -69,9 +69,9 @@ $shared_ldflag = $shared_extension = $ranlib = -*** CygWin32 +*** Cygwin $cc = gcc -$cflags = -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O3 -m486 -Wall +$cflags = -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O2 -m486 -Wall $unistd = $thread_cflag = $lflags = @@ -86,6 +86,29 @@ $rc4_obj = $rmd160_obj = $rc5_obj = $dso_scheme = win32 +$shared_target= cygwin-shared +$shared_cflag = +$shared_ldflag = +$shared_extension = .dll +$ranlib = + +*** Cygwin-pre1.3 +$cc = gcc +$cflags = -DTERMIOS -DL_ENDIAN -fomit-frame-pointer -O2 -m486 -Wall +$unistd = +$thread_cflag = (unknown) +$lflags = +$bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT +$bn_obj = +$des_obj = +$bf_obj = +$md5_obj = +$sha1_obj = +$cast_obj = +$rc4_obj = +$rmd160_obj = +$rc5_obj = +$dso_scheme = win32 $shared_target= $shared_cflag = $shared_ldflag = @@ -1060,9 +1083,9 @@ $ranlib = *** darwin-ppc-cc $cc = cc -$cflags = -O3 -DB_ENDIAN +$cflags = -O3 -D_DARWIN -DB_ENDIAN $unistd = -$thread_cflag = (unknown) +$thread_cflag = -D_REENTRANT $lflags = $bn_ops = BN_LLONG RC4_CHAR RC4_CHUNK DES_UNROLL BF_PTR $bn_obj = @@ -1075,9 +1098,9 @@ $rc4_obj = $rmd160_obj = $rc5_obj = $dso_scheme = -$shared_target= -$shared_cflag = -$shared_ldflag = +$shared_target= darwin-shared +$shared_cflag = -fPIC +$shared_ldflag = .$(SHLIB_MAJOR).$(SHLIB_MINOR).dylib $shared_extension = $ranlib = @@ -1236,9 +1259,9 @@ $rc4_obj = asm/rx86-elf.o $rmd160_obj = asm/rm86-elf.o $rc5_obj = asm/r586-elf.o $dso_scheme = dlfcn -$shared_target= -$shared_cflag = -$shared_ldflag = +$shared_target= linux-shared +$shared_cflag = -fPIC +$shared_ldflag = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR) $shared_extension = $ranlib = @@ -2369,6 +2392,29 @@ $shared_ldflag = $shared_extension = $ranlib = +*** linux-s390x +$cc = gcc +$cflags = -DB_ENDIAN -DTERMIO -DNO_ASM -O3 -fomit-frame-pointer -Wall +$unistd = +$thread_cflag = -D_REENTRANT +$lflags = +$bn_ops = SIXTY_FOUR_BIT_LONG +$bn_obj = +$des_obj = +$bf_obj = +$md5_obj = +$sha1_obj = +$cast_obj = +$rc4_obj = +$rmd160_obj = +$rc5_obj = +$dso_scheme = +$shared_target= linux-shared +$shared_cflag = -fPIC +$shared_ldflag = +$shared_extension = .so.$(SHLIB_MAJOR).$(SHLIB_MINOR) +$ranlib = + *** linux-sparcv7 $cc = gcc $cflags = -DB_ENDIAN -DTERMIO -O3 -fomit-frame-pointer -Wall @@ -2647,10 +2693,10 @@ $ranlib = *** sco5-cc $cc = cc -$cflags = +$cflags = -belf $unistd = $thread_cflag = (unknown) -$lflags = -lsocket +$lflags = -lsocket -lresolv $bn_ops = DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT $bn_obj = $des_obj = @@ -2691,6 +2737,29 @@ $shared_ldflag = $shared_extension = $ranlib = +*** sco5-cc-shared +$cc = cc +$cflags = -belf +$unistd = +$thread_cflag = +$lflags = -lsocket -lresolv -lnsl +$bn_ops = MD2_CHAR RC4_INDEX DES_PTR DES_RISC1 DES_UNROLL +$bn_obj = +$des_obj = +$bf_obj = +$md5_obj = +$sha1_obj = +$cast_obj = +$rc4_obj = +$rmd160_obj = +$rc5_obj = +$dso_scheme = dlfcn +$shared_target= svr3-shared +$shared_cflag = -Kpic +$shared_ldflag = +$shared_extension = +$ranlib = + *** sco5-gcc $cc = gcc $cflags = -O3 -fomit-frame-pointer @@ -2714,6 +2783,29 @@ $shared_ldflag = $shared_extension = $ranlib = +*** sco5-gcc-shared +$cc = gcc +$cflags = -O3 -DFILIO_H -fomit-frame-pointer +$unistd = +$thread_cflag = +$lflags = -lsocket -lresolv -lnsl +$bn_ops = BN_LLONG DES_PTR DES_RISC1 DES_UNROLL RC4_INDEX MD2_INT +$bn_obj = asm/bn86-elf.o asm/co86-elf.o +$des_obj = asm/dx86-elf.o asm/yx86-elf.o +$bf_obj = asm/bx86-elf.o +$md5_obj = asm/mx86-elf.o +$sha1_obj = asm/sx86-elf.o +$cast_obj = asm/cx86-elf.o +$rc4_obj = asm/rx86-elf.o +$rmd160_obj = asm/rm86-elf.o +$rc5_obj = asm/r586-elf.o +$dso_scheme = dlfcn +$shared_target= svr3-shared +$shared_cflag = -fPIC +$shared_ldflag = +$shared_extension = +$ranlib = + *** solaris-sparc-sc3 $cc = cc $cflags = -fast -O -Xa -DB_ENDIAN diff --git a/config b/config index 6ff1c39e27..8d61cfac55 100755 --- a/config +++ b/config @@ -299,7 +299,15 @@ case "${SYSTEM}:${RELEASE}:${VERSION}:${MACHINE}" in ;; CYGWIN*) - echo "${MACHINE}-whatever-cygwin32"; exit 0 + case "$RELEASE" in + [bB]*|1.0|1.[12].*) + echo "${MACHINE}-whatever-cygwin_pre1.3" + ;; + *) + echo "${MACHINE}-whatever-cygwin" + ;; + esac + exit 0 ;; esac @@ -581,8 +589,8 @@ EOF # *-aix) OUT="aix-$CC" ;; # *-dgux) OUT="dgux" ;; mips-sony-newsos4) OUT="newsos4-gcc" ;; - *-*-cygwin32) OUT="CygWin32" - options="$options no-threads no-asm" ;; + *-*-cygwin_pre1.3) OUT="Cygwin-pre1.3" ;; + *-*-cygwin) OUT="Cygwin" ;; *) OUT=`echo $GUESSOS | awk -F- '{print $3}'`;; esac diff --git a/crypto/asn1/a_bitstr.c b/crypto/asn1/a_bitstr.c index 7013a407ad..cdedb29e4f 100644 --- a/crypto/asn1/a_bitstr.c +++ b/crypto/asn1/a_bitstr.c @@ -224,6 +224,7 @@ int ASN1_BIT_STRING_set_bit(ASN1_BIT_STRING *a, int n, int value) w=n/8; v=1<<(7-(n&0x07)); iv= ~v; + if (!value) v=0; a->flags&= ~(ASN1_STRING_FLAG_BITS_LEFT|0x07); /* clear, set on write */ diff --git a/crypto/rsa/rsa_oaep.c b/crypto/rsa/rsa_oaep.c index 4f0bbab386..742b3a1c94 100644 --- a/crypto/rsa/rsa_oaep.c +++ b/crypto/rsa/rsa_oaep.c @@ -178,8 +178,10 @@ int MGF1(unsigned char *mask, long len, unsigned char *seed, long seedlen) for (i = 0; outlen < len; i++) { - cnt[0] = (i >> 24) & 255, cnt[1] = (i >> 16) & 255, - cnt[2] = (i >> 8) & 255, cnt[3] = i & 255; + cnt[0] = (unsigned char)((i >> 24) & 255); + cnt[1] = (unsigned char)((i >> 16) & 255); + cnt[2] = (unsigned char)((i >> 8)) & 255; + cnt[3] = (unsigned char)(i & 255); SHA1_Init(&c); SHA1_Update(&c, seed, seedlen); SHA1_Update(&c, cnt, 4); diff --git a/ssl/ssl_lib.c b/ssl/ssl_lib.c index 2006a5a1eb..24cec2afe5 100644 --- a/ssl/ssl_lib.c +++ b/ssl/ssl_lib.c @@ -1472,9 +1472,10 @@ void ssl_update_cache(SSL *s,int mode) * and it would be rather hard to do anyway :-) */ if (s->session->session_id_length == 0) return; - if ((s->ctx->session_cache_mode & mode) - && (!s->hit) - && SSL_CTX_add_session(s->ctx,s->session) + i=s->ctx->session_cache_mode; + if ((i & mode) && (!s->hit) + && ((i & SSL_SESS_CACHE_NO_INTERNAL_LOOKUP) + || SSL_CTX_add_session(s->ctx,s->session)) && (s->ctx->new_session_cb != NULL)) { CRYPTO_add(&s->session->references,1,CRYPTO_LOCK_SSL_SESSION); @@ -1483,7 +1484,6 @@ void ssl_update_cache(SSL *s,int mode) } /* auto flush every 255 connections */ - i=s->ctx->session_cache_mode; if ((!(i & SSL_SESS_CACHE_NO_AUTO_CLEAR)) && ((i & mode) == mode)) { diff --git a/ssl/ssl_sess.c b/ssl/ssl_sess.c index 7064262def..8476f41707 100644 --- a/ssl/ssl_sess.c +++ b/ssl/ssl_sess.c @@ -423,10 +423,10 @@ static int remove_session_lock(SSL_CTX *ctx, SSL_SESSION *c, int lck) if ((c != NULL) && (c->session_id_length != 0)) { if(lck) CRYPTO_w_lock(CRYPTO_LOCK_SSL_CTX); - r=(SSL_SESSION *)lh_delete(ctx->sessions,c); - if (r != NULL) + if ((r = (SSL_SESSION *)lh_retrieve(ctx->sessions,c)) == c) { ret=1; + r=(SSL_SESSION *)lh_delete(ctx->sessions,c); SSL_SESSION_list_remove(ctx,c); }