From eeb505af36ba9496ad29b32cd0917afb8c6cd355 Mon Sep 17 00:00:00 2001
From: Timothy Redaelli <timothy@redaelli.eu>
Date: Wed, 10 Feb 2010 13:24:33 +0100
Subject: [PATCH] Add --disable-lzo configure option

---
 m4/lzo.m4        | 69 ++++++++++++++++++++++++++----------------------
 src/net_packet.c | 15 +++++++++++
 src/tincd.c      |  4 +++
 3 files changed, 56 insertions(+), 32 deletions(-)

diff --git a/m4/lzo.m4 b/m4/lzo.m4
index a996b1d0..36aa9b7f 100644
--- a/m4/lzo.m4
+++ b/m4/lzo.m4
@@ -2,41 +2,46 @@ dnl Check to find the lzo headers/libraries
 
 AC_DEFUN([tinc_LZO],
 [
-  AC_ARG_WITH(lzo,
-    AS_HELP_STRING([--with-lzo=DIR], [lzo base directory, or:]),
-    [lzo="$withval"
-     CPPFLAGS="$CPPFLAGS -I$withval/include"
-     LDFLAGS="$LDFLAGS -L$withval/lib"]
-  )
+  AC_ARG_ENABLE([lzo],
+    AS_HELP_STRING([--disable-lzo], [disable lzo compression support]))
+  AS_IF([test "x$enable_lzo" != "xno"], [
+    AC_DEFINE(HAVE_LZO, 1, [enable lzo compression support])
+    AC_ARG_WITH(lzo,
+      AS_HELP_STRING([--with-lzo=DIR], [lzo base directory, or:]),
+      [lzo="$withval"
+       CPPFLAGS="$CPPFLAGS -I$withval/include"
+       LDFLAGS="$LDFLAGS -L$withval/lib"]
+    )
 
-  AC_ARG_WITH(lzo-include,
-    AS_HELP_STRING([--with-lzo-include=DIR], [lzo headers directory]),
-    [lzo_include="$withval"
-     CPPFLAGS="$CPPFLAGS -I$withval"]
-  )
+    AC_ARG_WITH(lzo-include,
+      AS_HELP_STRING([--with-lzo-include=DIR], [lzo headers directory]),
+      [lzo_include="$withval"
+       CPPFLAGS="$CPPFLAGS -I$withval"]
+    )
 
-  AC_ARG_WITH(lzo-lib,
-    AS_HELP_STRING([--with-lzo-lib=DIR], [lzo library directory]),
-    [lzo_lib="$withval"
-     LDFLAGS="$LDFLAGS -L$withval"]
-  )
+    AC_ARG_WITH(lzo-lib,
+      AS_HELP_STRING([--with-lzo-lib=DIR], [lzo library directory]),
+      [lzo_lib="$withval"
+       LDFLAGS="$LDFLAGS -L$withval"]
+    )
 
-  AC_CHECK_LIB(lzo2, lzo1x_1_compress,
-    [LIBS="$LIBS -llzo2"],
-    [AC_CHECK_LIB(lzo, lzo1x_1_compress,
-      [LIBS="$LIBS -llzo"],
-      [AC_MSG_ERROR("lzo libraries not found."); break]
-    )]
-  )
+    AC_CHECK_LIB(lzo2, lzo1x_1_compress,
+      [LIBS="$LIBS -llzo2"],
+      [AC_CHECK_LIB(lzo, lzo1x_1_compress,
+        [LIBS="$LIBS -llzo"],
+        [AC_MSG_ERROR("lzo libraries not found."); break]
+      )]
+    )
 
-  AC_CHECK_HEADERS(lzo/lzo1x.h,
-    [AC_DEFINE(LZO1X_H, [<lzo/lzo1x.h>], [Location of lzo1x.h])],
-    [AC_CHECK_HEADERS(lzo2/lzo1x.h,
-      [AC_DEFINE(LZO1X_H, [<lzo2/lzo1x.h>], [Location of lzo1x.h])],
-      [AC_CHECK_HEADERS(lzo1x.h,
-        [AC_DEFINE(LZO1X_H, [<lzo1x.h>], [Location of lzo1x.h])],
-        [AC_MSG_ERROR("lzo header files not found."); break]
+    AC_CHECK_HEADERS(lzo/lzo1x.h,
+      [AC_DEFINE(LZO1X_H, [<lzo/lzo1x.h>], [Location of lzo1x.h])],
+      [AC_CHECK_HEADERS(lzo2/lzo1x.h,
+        [AC_DEFINE(LZO1X_H, [<lzo2/lzo1x.h>], [Location of lzo1x.h])],
+        [AC_CHECK_HEADERS(lzo1x.h,
+          [AC_DEFINE(LZO1X_H, [<lzo1x.h>], [Location of lzo1x.h])],
+          [AC_MSG_ERROR("lzo header files not found."); break]
+        )]
       )]
-    )]
-  )
+    )
+  ])
 ])
diff --git a/src/net_packet.c b/src/net_packet.c
index 1f62f642..cf42a3d2 100644
--- a/src/net_packet.c
+++ b/src/net_packet.c
@@ -27,7 +27,10 @@
 #include <openssl/hmac.h>
 
 #include <zlib.h>
+
+#ifdef HAVE_LZO
 #include LZO1X_H
+#endif
 
 #include "avl_tree.h"
 #include "conf.h"
@@ -48,7 +51,9 @@
 
 int keylifetime = 0;
 int keyexpires = 0;
+#ifdef HAVE_LZO
 static char lzo_wrkmem[LZO1X_999_MEM_COMPRESS > LZO1X_1_MEM_COMPRESS ? LZO1X_999_MEM_COMPRESS : LZO1X_1_MEM_COMPRESS];
+#endif
 
 static void send_udppacket(node_t *, vpn_packet_t *);
 
@@ -148,9 +153,13 @@ void mtu_probe_h(node_t *n, vpn_packet_t *packet, length_t len) {
 
 static length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) {
 	if(level == 10) {
+#ifdef HAVE_LZO
 		lzo_uint lzolen = MAXSIZE;
 		lzo1x_1_compress(source, len, dest, &lzolen, lzo_wrkmem);
 		return lzolen;
+#else
+		return -1;
+#endif
 	} else if(level < 10) {
 		unsigned long destlen = MAXSIZE;
 		if(compress2(dest, &destlen, source, len, level) == Z_OK)
@@ -158,9 +167,13 @@ static length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t l
 		else
 			return -1;
 	} else {
+#ifdef HAVE_LZO
 		lzo_uint lzolen = MAXSIZE;
 		lzo1x_999_compress(source, len, dest, &lzolen, lzo_wrkmem);
 		return lzolen;
+#else
+		return -1;
+#endif
 	}
 	
 	return -1;
@@ -168,10 +181,12 @@ static length_t compress_packet(uint8_t *dest, const uint8_t *source, length_t l
 
 static length_t uncompress_packet(uint8_t *dest, const uint8_t *source, length_t len, int level) {
 	if(level > 9) {
+#ifdef HAVE_LZO
 		lzo_uint lzolen = MAXSIZE;
 		if(lzo1x_decompress_safe(source, len, dest, &lzolen, NULL) == LZO_E_OK)
 			return lzolen;
 		else
+#endif
 			return -1;
 	} else {
 		unsigned long destlen = MAXSIZE;
diff --git a/src/tincd.c b/src/tincd.c
index 77794303..3debb3e4 100644
--- a/src/tincd.c
+++ b/src/tincd.c
@@ -37,7 +37,9 @@
 #include <openssl/evp.h>
 #include <openssl/engine.h>
 
+#ifdef HAVE_LZO
 #include LZO1X_H
+#endif
 
 #ifndef HAVE_MINGW
 #include <pwd.h>
@@ -540,10 +542,12 @@ int main(int argc, char **argv) {
 	if(!read_server_config())
 		return 1;
 
+#ifdef HAVE_LZO
 	if(lzo_init() != LZO_E_OK) {
 		logger(LOG_ERR, "Error initializing LZO compressor!");
 		return 1;
 	}
+#endif
 
 #ifdef HAVE_MINGW
 	if(WSAStartup(MAKEWORD(2, 2), &wsa_state)) {
-- 
2.39.5