diff --git a/apps/openssl.c b/apps/openssl.c index 697748c16..c31a04bb6 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -233,11 +233,21 @@ int main(int Argc, char *Argv[]) arg.count=0; #ifdef OPENSSL_FIPS - if(getenv("OPENSSL_FIPS") && !FIPS_mode_set(1,Argv[0])) - { + if(getenv("OPENSSL_FIPS")) { +#if defined(_WIN32) + char filename[MAX_PATH] = ""; + GetModuleFileName( NULL, filename, MAX_PATH) ; + p = filename; +#else + p = Argv[0]; +#endif + if (!FIPS_mode_set(1,p)) { ERR_load_crypto_strings(); ERR_print_errors(BIO_new_fp(stderr,BIO_NOCLOSE)); exit(1); + } + if (getenv("OPENSSL_FIPS_MD5")) + FIPS_allow_md5(1); } #endif if (bio_err == NULL) diff --git a/fips/fips.c b/fips/fips.c index 30bb5fba4..912bb9d1f 100644 --- a/fips/fips.c +++ b/fips/fips.c @@ -111,7 +111,7 @@ static int FIPS_check_exe(const char *path) f=fopen(p2,"rb"); if(!f || fread(buf,1,20,f) != 20) { - fclose(f); + if (f) fclose(f); FIPSerr(FIPS_F_FIPS_CHECK_EXE,FIPS_R_CANNOT_READ_EXE_DIGEST); return 0; } diff --git a/fips/fips.h b/fips/fips.h index c7f9c5c6d..e169ebf43 100644 --- a/fips/fips.h +++ b/fips/fips.h @@ -64,6 +64,7 @@ extern void *FIPS_rand_check; struct dsa_st; int FIPS_mode_set(int onoff,const char *path); +void FIPS_allow_md5(int onoff); int FIPS_dsa_check(struct dsa_st *dsa); void FIPS_corrupt_sha1(void); int FIPS_selftest_sha1(void); diff --git a/fips/fips_locl.h b/fips/fips_locl.h index 0b3fecb39..501fc756f 100644 --- a/fips/fips_locl.h +++ b/fips/fips_locl.h @@ -54,7 +54,6 @@ extern "C" { #endif /* FIPS 140 allows MD5 to be used during certain parts of TLS */ -void FIPS_allow_md5(int onoff); extern int FIPS_md5_allowed; #ifdef __cplusplus diff --git a/util/mkdef.pl b/util/mkdef.pl index c4cdce6c5..443d74d44 100755 --- a/util/mkdef.pl +++ b/util/mkdef.pl @@ -267,7 +267,7 @@ $crypto.=" crypto/ocsp/ocsp.h"; $crypto.=" crypto/ui/ui.h crypto/ui/ui_compat.h"; $crypto.=" crypto/krb5/krb5_asn.h"; $crypto.=" crypto/tmdiff.h"; -$crypto.=" fips/fips.h fips/fips_locl.h fips/rand/fips_rand.h"; +$crypto.=" fips/fips.h fips/rand/fips_rand.h"; my $symhacks="crypto/symhacks.h";