From 83e17a7c656b5791df2b5a0ed8cc1c102828fee0 Mon Sep 17 00:00:00 2001 From: Evgeniy Khramtsov Date: Sat, 7 Aug 2010 22:28:48 +1000 Subject: [PATCH] Make MD2 autodetected (EJAB-1285) --- src/Makefile.in | 5 +++++ src/configure.ac | 3 +++ src/sha.erl | 8 +++++++- src/tls/Makefile.in | 5 +++++ src/tls/sha_drv.c | 4 ++++ 5 files changed, 24 insertions(+), 1 deletion(-) diff --git a/src/Makefile.in b/src/Makefile.in index e026f9562..808137a3c 100644 --- a/src/Makefile.in +++ b/src/Makefile.in @@ -54,6 +54,11 @@ ifeq (@transient_supervisors@, false) EFLAGS+=-DNO_TRANSIENT_SUPERVISORS endif +ifeq (@md2@, true) + EFLAGS+=-DHAVE_MD2 + ERLANG_CFLAGS += -DHAVE_MD2 +endif + INSTALL_EPAM= ifeq (@pam@, pam) INSTALL_EPAM=install -m 750 $(O_USER) epam $(PBINDIR) diff --git a/src/configure.ac b/src/configure.ac index cd8d88b4c..5aa34de24 100644 --- a/src/configure.ac +++ b/src/configure.ac @@ -132,6 +132,9 @@ if test "$ENABLEUSER" != ""; then AC_SUBST([INSTALLUSER], [$ENABLEUSER]) fi +AC_CHECK_HEADER(openssl/md2.h, md2=true, md2=false) +AC_SUBST(md2) + AC_CANONICAL_SYSTEM #AC_DEFINE_UNQUOTED(CPU_VENDOR_OS, "$target") #AC_SUBST(target_os) diff --git a/src/sha.erl b/src/sha.erl index 64c15c166..06dd3c2d1 100644 --- a/src/sha.erl +++ b/src/sha.erl @@ -28,7 +28,11 @@ -author('alexey@process-one.net'). -export([start/0, sha/1, sha1/1, sha224/1, sha256/1, sha384/1, - sha512/1, md2/1]). + sha512/1]). + +-ifdef(HAVE_MD2). +-export([md2/1]). +-endif. -include("ejabberd.hrl"). @@ -80,8 +84,10 @@ sha384(Text) -> sha512(Text) -> erlang:port_control(?DRIVER, 512, Text). +-ifdef(HAVE_MD2). md2(Text) -> erlang:port_control(?DRIVER, 2, Text). +-endif. driver_path() -> Suffix = case os:type() of diff --git a/src/tls/Makefile.in b/src/tls/Makefile.in index a87da0ea3..5c62dda71 100644 --- a/src/tls/Makefile.in +++ b/src/tls/Makefile.in @@ -27,6 +27,11 @@ ifdef debug EFLAGS+=+debug_info +export_all endif +ifeq (@md2@, true) + EFLAGS+=-DHAVE_MD2 + ERLANG_CFLAGS += -DHAVE_MD2 +endif + ERLSHLIBS = ../tls_drv.so ../sha_drv.so OUTDIR = .. SOURCES = $(wildcard *.erl) diff --git a/src/tls/sha_drv.c b/src/tls/sha_drv.c index 13d65803a..8e6de3203 100644 --- a/src/tls/sha_drv.c +++ b/src/tls/sha_drv.c @@ -20,7 +20,9 @@ #include #include +#ifdef HAVE_MD2 #include +#endif static ErlDrvData sha_drv_start(ErlDrvPort port, char *buf) { @@ -36,11 +38,13 @@ static int sha_drv_control(ErlDrvData handle, ErlDrvBinary *b = NULL; switch (command) { +#ifdef HAVE_MD2 case 2: rlen = MD2_DIGEST_LENGTH; b = driver_alloc_binary(rlen); if (b) MD2((unsigned char*)buf, len, (unsigned char*)b->orig_bytes); break; +#endif case 224: rlen = SHA224_DIGEST_LENGTH; b = driver_alloc_binary(rlen);