From 06c684912465497b3feff3e2327680b46b552be7 Mon Sep 17 00:00:00 2001 From: "Dr. Stephen Henson" Date: Wed, 3 Mar 1999 02:01:26 +0000 Subject: [PATCH] Fix the Win32 compile environment and add various changes so it will now compile under Win32 (9X and NT) again. Note: some signed/unsigned changes recently checked in were killing the Win32 compile. --- CHANGES | 7 ++++++ INSTALL.W32 | 9 +++++++ crypto/bio/bss_log.c | 3 +++ crypto/evp/bio_ok.c | 2 +- crypto/pkcs7/pk7_doit.c | 2 +- crypto/pkcs7/pkcs7.h | 2 ++ ms/do_nt.bat | 7 ++++++ ssl/ssl_cert.c | 8 +++++- util/libeay.num | 4 +++ util/mk1mf.pl | 8 ++++-- util/mkdef.pl | 54 +++++++++++++++++++++++++---------------- util/pl/VC-32.pl | 1 + util/ssleay.num | 3 +++ 13 files changed, 84 insertions(+), 26 deletions(-) create mode 100755 ms/do_nt.bat diff --git a/CHANGES b/CHANGES index aa6ba7859d..7387f3272e 100644 --- a/CHANGES +++ b/CHANGES @@ -5,6 +5,13 @@ Changes between 0.9.1c and 0.9.2 + *) Get the Win32 compile working again. Modify mkdef.pl so it can handle + functions that return function pointers and has support for NT specific + stuff. Fix mk1mf.pl and VC-32.pl to support NT differences also. Various + #ifdef WIN32 and WINNTs sprinkled about the place and some changes from + unsigned to signed types: this was killing the Win32 compile. + [Steve Henson] + *) Add new certificate file to stack functions, SSL_add_cert_file_to_stack() and SSL_add_cert_dir_to_stack(). These largely supplant SSL_load_client_CA_file(), and can be used to add multiple certs easily to diff --git a/INSTALL.W32 b/INSTALL.W32 index 9122410404..75dc7dbb83 100644 --- a/INSTALL.W32 +++ b/INSTALL.W32 @@ -4,6 +4,10 @@ Heres a few comments about building OpenSSL in Windows environments. Most of this is tested on Win32 but it may also work in Win 3.1 with some modification. See the end of this file for Eric's original comments. +Note: the default Win32 environment is to leave out any Windows NT specific +features: (currently only BIO_s_log()) if you want NT specific features see +the "Tweaks" section later. + You will need perl for Win32 (which can be got from various sources) and Visual C++. @@ -73,6 +77,11 @@ There are various changes you can make to the Win32 compile environment. If you have the MASM assembler 'ml' then you can try the assembly language code. To do this remove the 'no-asm' part from do_ms.bat. +If you want to enable the NT specific features of OpenSSL (currently only +the logging BIO) follow the instructions above but call the batch file +do_nt.bat instead of do_ms.bat. If you do this then you will no longer be able +to run the OpenSSL binaries under Windows 95 or 98. + You can also build a static version of the library using the Makefile ms\nt.mak -------------------------------------------------------------------------------- diff --git a/crypto/bio/bss_log.c b/crypto/bio/bss_log.c index cb2779855b..4ec76fa742 100644 --- a/crypto/bio/bss_log.c +++ b/crypto/bio/bss_log.c @@ -62,6 +62,8 @@ */ +#if !defined(WIN32) || defined(WINNT) + #include #include @@ -242,3 +244,4 @@ static int xcloselog(BIO* bp) return(1); } +#endif diff --git a/crypto/evp/bio_ok.c b/crypto/evp/bio_ok.c index 8d7ffe28a1..174ecdeb39 100644 --- a/crypto/evp/bio_ok.c +++ b/crypto/evp/bio_ok.c @@ -547,7 +547,7 @@ static void block_in(BIO* b) { BIO_OK_CTX *ctx; EVP_MD_CTX *md; - unsigned long tl= 0; + long tl= 0; unsigned char tmp[EVP_MAX_MD_SIZE]; ctx=(BIO_OK_CTX *)b->ptr; diff --git a/crypto/pkcs7/pk7_doit.c b/crypto/pkcs7/pk7_doit.c index 9d590f595c..071ff09937 100644 --- a/crypto/pkcs7/pk7_doit.c +++ b/crypto/pkcs7/pk7_doit.c @@ -715,7 +715,7 @@ PKCS7_SIGNER_INFO *si; if ((sk != NULL) && (sk_num(sk) != 0)) { unsigned char md_dat[EVP_MAX_MD_SIZE]; - unsigned int md_len; + int md_len; ASN1_OCTET_STRING *message_digest; EVP_DigestFinal(&mdc_tmp,md_dat,&md_len); diff --git a/crypto/pkcs7/pkcs7.h b/crypto/pkcs7/pkcs7.h index 01afa5a5c3..6fcb63bfaf 100644 --- a/crypto/pkcs7/pkcs7.h +++ b/crypto/pkcs7/pkcs7.h @@ -419,6 +419,8 @@ int PKCS7_add_crl(); int PKCS7_content_new(); int PKCS7_dataVerify(); BIO *PKCS7_dataInit(); +int PKCS7_dataFinal(); +BIO *PKCS7_dataDecode(); PKCS7_SIGNER_INFO *PKCS7_add_signature(); X509 *PKCS7_cert_from_signer_info(); STACK *PKCS7_get_signer_info(); diff --git a/ms/do_nt.bat b/ms/do_nt.bat new file mode 100755 index 0000000000..7c6b93b405 --- /dev/null +++ b/ms/do_nt.bat @@ -0,0 +1,7 @@ + +perl util\mkfiles.pl >MINFO +perl util\mk1mf.pl VC-NT no-asm >ms\nt.mak +perl util\mk1mf.pl VC-NT dll no-asm >ms\ntdll.mak + +perl util\mkdef.pl NT libeay > ms\libeay32.def +perl util\mkdef.pl NT ssleay > ms\ssleay32.def diff --git a/ssl/ssl_cert.c b/ssl/ssl_cert.c index 909af7c984..3612486b67 100644 --- a/ssl/ssl_cert.c +++ b/ssl/ssl_cert.c @@ -58,7 +58,9 @@ #include #include +#ifndef WIN32 #include +#endif #include "objects.h" #include "bio.h" #include "pem.h" @@ -381,7 +383,7 @@ int SSL_add_cert_file_to_stack(STACK *stack,const char *file) in=BIO_new(BIO_s_file_internal()); - if (ret == NULL || in == NULL) + if (in == NULL) { SSLerr(SSL_F_SSL_ADD_CERT_FILE_TO_STACK,ERR_R_MALLOC_FAILURE); goto err; @@ -429,6 +431,8 @@ err: * certs may have been added to \c stack. */ +#ifndef WIN32 + int SSL_add_cert_dir_to_stack(STACK *stack,const char *dir) { DIR *d=opendir(dir); @@ -458,3 +462,5 @@ int SSL_add_cert_dir_to_stack(STACK *stack,const char *dir) return 1; } + +#endif diff --git a/util/libeay.num b/util/libeay.num index e7da890357..808ba3e28a 100755 --- a/util/libeay.num +++ b/util/libeay.num @@ -1214,3 +1214,7 @@ name_cmp 1239 str_dup 1240 i2s_ASN1_ENUMERATED 1241 i2s_ASN1_ENUMERATED_TABLE 1242 +BIO_s_log 1243 +BIO_f_reliable 1244 +PKCS7_dataFinal 1245 +PKCS7_dataDecode 1246 diff --git a/util/mk1mf.pl b/util/mk1mf.pl index 8da22ccb12..18e9b04175 100755 --- a/util/mk1mf.pl +++ b/util/mk1mf.pl @@ -7,12 +7,13 @@ $INSTALLTOP="/usr/local/ssl"; -$ssl_version="0.8.2"; +$ssl_version="0.9.2"; $infile="MINFO"; %ops=( - "VC-WIN32", "Microsoft Visual C++ 4.[01] - Windows NT [34].x", + "VC-WIN32", "Microsoft Visual C++ [4-6] - Windows NT or 9X", + "VC-NT", "Microsoft Visual C++ [4-6] - Windows NT ONLY", "VC-W31-16", "Microsoft Visual C++ 1.52 - Windows 3.1 - 286", "VC-WIN16", "Alias for VC-W31-32", "VC-W31-32", "Microsoft Visual C++ 1.52 - Windows 3.1 - 386+", @@ -126,6 +127,8 @@ $bin_dir=(defined($VARS{'BIN'}))?$VARS{'BIN'}:''; # $bin_dir.=$o causes a core dump on my sparc :-( +$NT=0; + push(@INC,"util/pl","pl"); if ($platform eq "VC-MSDOS") { @@ -147,6 +150,7 @@ elsif (($platform eq "VC-W31-32") || ($platform eq "VC-WIN16")) } elsif (($platform eq "VC-WIN32") || ($platform eq "VC-NT")) { + $NT = 1 if $platform eq "VC-NT"; require 'VC-32.pl'; } elsif ($platform eq "BC-NT") diff --git a/util/mkdef.pl b/util/mkdef.pl index e1f2ca99a1..eec80df99e 100755 --- a/util/mkdef.pl +++ b/util/mkdef.pl @@ -9,11 +9,16 @@ $crypto_num="util/libeay.num"; $ssl_num= "util/ssleay.num"; -$NT=1; +$W32=1; +$NT=0; foreach (@ARGV) { - $NT=1 if $_ eq "32"; - $NT=0 if $_ eq "16"; + $W32=1 if $_ eq "32"; + $W32=0 if $_ eq "16"; + if($_ eq "NT") { + $W32 = 1; + $NT = 1; + } $do_ssl=1 if $_ eq "ssleay"; $do_ssl=1 if $_ eq "ssl"; $do_crypto=1 if $_ eq "libeay"; @@ -167,7 +172,7 @@ sub do_defs $tag{$t}= -$tag{$t}; next; } -#printf STDERR "$_\n%2d %2d %2d %2d %2d $NT\n", +#printf STDERR "$_\n%2d %2d %2d %2d %2d $W32\n", #$tag{'NOPROTO'},$tag{'FreeBSD'},$tag{'WIN16'},$tag{'PERL5'},$tag{'NO_FP_API'}; $t=undef; @@ -175,14 +180,14 @@ sub do_defs { $t=&do_extern($name,$_); } elsif ( ($tag{'NOPROTO'} == 1) && ($tag{'FreeBSD'} != 1) && - (($NT && ($tag{'WIN16'} != 1)) || - (!$NT && ($tag{'WIN16'} != -1))) && + (($W32 && ($tag{'WIN16'} != 1)) || + (!$W32 && ($tag{'WIN16'} != -1))) && ($tag{'PERL5'} != 1) && # ($tag{'_WINDLL'} != -1) && - ((!$NT && $tag{'_WINDLL'} != -1) || - ($NT && $tag{'_WINDLL'} != 1)) && - ((($tag{'NO_FP_API'} != 1) && $NT) || - (($tag{'NO_FP_API'} != -1) && !$NT))) + ((!$W32 && $tag{'_WINDLL'} != -1) || + ($W32 && $tag{'_WINDLL'} != 1)) && + ((($tag{'NO_FP_API'} != 1) && $W32) || + (($tag{'NO_FP_API'} != -1) && !$W32))) { $t=&do_line($name,$_); } else { $t=undef; } @@ -216,24 +221,31 @@ sub do_line { return($1); } elsif (/(SSL_get_info_callback)/) { return($1); } - elsif ((!$NT) && /(ERR_load_CRYPTO_strings)/) + elsif ((!$W32) && /(ERR_load_CRYPTO_strings)/) { return("ERR_load_CRYPTOlib_strings"); } - elsif (!$NT && /BIO_s_file/) + elsif (!$W32 && /BIO_s_file/) + { return(undef); } + elsif (!$W32 && /BIO_new_file/) + { return(undef); } + elsif (!$W32 && /BIO_new_fp/) { return(undef); } - elsif (!$NT && /BIO_new_file/) + elsif ($W32 && /BIO_s_file_internal/) { return(undef); } - elsif (!$NT && /BIO_new_fp/) + elsif ($W32 && /BIO_new_file_internal/) { return(undef); } - elsif ($NT && /BIO_s_file_internal/) + elsif ($W32 && /BIO_new_fp_internal/) { return(undef); } - elsif ($NT && /BIO_new_file_internal/) + elsif (/SSL_add_cert_dir_to_stack/) { return(undef); } - elsif ($NT && /BIO_new_fp_internal/) + elsif (!$NT && /BIO_s_log/) { return(undef); } else { /\s\**(\S+)\s*\(/; - return($1); + $_ = $1; + tr/()*//d; +#print STDERR "$1 : $_\n"; + return($_); } } @@ -251,7 +263,7 @@ sub print_def_file local(*OUT,$name,*nums,@functions)=@_; local($n)=1; - if ($NT) + if ($W32) { $name.="32"; } else { $name.="16"; } @@ -267,7 +279,7 @@ DESCRIPTION 'OpenSSL $name - http://www.openssl.org/' EOF - if (!$NT) + if (!$W32) { print <<"EOF"; CODE PRELOAD MOVEABLE @@ -298,7 +310,7 @@ EOF else { $n=$nums{$func}; - printf OUT " %s%-40s@%d\n",($NT)?"":"_",$func,$n; + printf OUT " %s%-40s@%d\n",($W32)?"":"_",$func,$n; } } printf OUT "\n"; diff --git a/util/pl/VC-32.pl b/util/pl/VC-32.pl index c0d57937a8..9dca36b01b 100644 --- a/util/pl/VC-32.pl +++ b/util/pl/VC-32.pl @@ -26,6 +26,7 @@ if ($debug) $lflags.=" /debug"; $mlflags.=' /debug'; } +$cflags .= " -DWINNT" if $NT == 1; $obj='.obj'; $ofile="/Fo"; diff --git a/util/ssleay.num b/util/ssleay.num index c158b957ed..2396e070e3 100755 --- a/util/ssleay.num +++ b/util/ssleay.num @@ -164,3 +164,6 @@ SSL_CTX_set_cert_store 181 SSL_want 182 SSL_library_init 183 SSL_COMP_add_compression_method 184 +SSL_add_cert_file_to_stack 185 +SSL_set_tmp_rsa_callback 186 +SSL_set_tmp_dh_callback 187 -- GitLab