View Issue Details
| ID | Project | Category | View Status | Date Submitted | Last Update |
|---|---|---|---|---|---|
| 0001755 | SOGo | Packaging (Debian) | public | 2012-04-04 16:40 | 2012-10-25 18:14 |
| Reporter | dekkers | Assigned To | |||
| Priority | normal | Severity | minor | Reproducibility | N/A |
| Status | resolved | Resolution | fixed | ||
| Fixed in Version | 2.0.2 | ||||
| Summary | 0001755: GnuTLS support for SOGo | ||||
| Description | This patch adds support for using GnuTLS with SOGo. Note that S/MIME support isn't implemented, because GnuTLS doesn't include S/MIME support and I rather see a SOGo without S/MIME support in Debian than none at all. The changes to configure/dummytool are copied from SOPE. | ||||
| Tags | No tags attached. | ||||
|
2012-04-04 16:40
|
0005-Add-support-for-GnuTLS.patch (10,164 bytes)
From: Jeroen Dekkers <jeroen@dekkers.ch>
Date: Sat, 24 Mar 2012 15:39:02 +0100
Subject: Add support for GnuTLS
---
SoObjects/SOGo/GNUmakefile.preamble | 10 ++++-
SoObjects/SOGo/NSString+Utilities.m | 16 ++++++
Tests/Unit/GNUmakefile | 1 +
Tests/Unit/TestNSString+MD5SHA1.m | 64 ++++++++++++++++++++++++++
UI/MailPartViewers/GNUmakefile.preamble | 4 ++
UI/MailPartViewers/UIxMailPartSignedViewer.m | 14 ++++++
configure | 36 +++++++++++----
maintenance/dummytool.c | 7 +++
8 files changed, 142 insertions(+), 10 deletions(-)
create mode 100644 Tests/Unit/TestNSString+MD5SHA1.m
create mode 100644 UI/MailPartViewers/GNUmakefile.preamble
create mode 100644 maintenance/dummytool.c
diff --git a/SoObjects/SOGo/GNUmakefile.preamble b/SoObjects/SOGo/GNUmakefile.preamble
index 9334ba4..da6986f 100644
--- a/SoObjects/SOGo/GNUmakefile.preamble
+++ b/SoObjects/SOGo/GNUmakefile.preamble
@@ -24,7 +24,15 @@ SOGo_LIBRARIES_DEPEND_UPON += \
-lNGStreams -lNGExtensions -lEOControl \
-lDOM -lSaxObjC \
-lNGLdap -lSBJson \
- -lGDLContentStore -lcrypto -lgnustep-base -lobjc -ldl
+ -lGDLContentStore -lgnustep-base -lobjc -ldl
+
+ifeq ($(HAS_LIBRARY_gnutls),yes)
+ADDITIONAL_CPPFLAGS += -DHAVE_GNUTLS=1
+SOGo_LIBRARIES_DEPEND_UPON += -lgnutls
+else
+ADDITIONAL_CPPFLAGS += -DHAVE_OPENSSL=1
+SOGo_LIBRARIES_DEPEND_UPON += -lcrypto
+endif
ifeq ($(findstring openbsd, $(GNUSTEP_HOST_OS)), openbsd)
SOGo_LIBRARIES_DEPEND_UPON += -lcrypto
diff --git a/SoObjects/SOGo/NSString+Utilities.m b/SoObjects/SOGo/NSString+Utilities.m
index 0d01f99..d24e159 100644
--- a/SoObjects/SOGo/NSString+Utilities.m
+++ b/SoObjects/SOGo/NSString+Utilities.m
@@ -1,6 +1,7 @@
/* NSString+Utilities.m - this file is part of SOGo
*
* Copyright (C) 2006-2011 Inverse inc.
+ * Copyright (C) 2012 Jeroen Dekkers <jeroen@dekkers.ch>
*
* Author: Wolfgang Sourdeau <wsourdeau@inverse.ca>
* Ludovic Marcotte <lmarcotte@inverse.ca>
@@ -46,9 +47,16 @@
#define _XOPEN_SOURCE 1
#include <unistd.h>
+#ifdef HAVE_GNUTLS
+#include <gnutls/gnutls.h>
+#include <gnutls/crypto.h>
+#define MD5_DIGEST_LENGTH 16
+#define SHA_DIGEST_LENGTH 20
+#else
#include <openssl/evp.h>
#include <openssl/md5.h>
#include <openssl/sha.h>
+#endif
static NSMutableCharacterSet *urlNonEndingChars = nil;
static NSMutableCharacterSet *urlAfterEndingChars = nil;
@@ -541,7 +549,11 @@ static int cssEscapingCount;
memset(md, 0, MD5_DIGEST_LENGTH);
memset(buf, 0, 80);
+#ifdef HAVE_GNUTLS
+ gnutls_hash_fast (GNUTLS_DIG_MD5, (const void *)[self UTF8String], strlen([self UTF8String]), md);
+#else
EVP_Digest((const void *) [self UTF8String], strlen([self UTF8String]), md, NULL, EVP_md5(), NULL);
+#endif
for (i = 0; i < MD5_DIGEST_LENGTH; i++)
sprintf(&(buf[i*2]), "%02x", md[i]);
@@ -557,7 +569,11 @@ static int cssEscapingCount;
memset(sha, 0, SHA_DIGEST_LENGTH);
memset(buf, 0, 80);
+#ifdef HAVE_GNUTLS
+ gnutls_hash_fast (GNUTLS_DIG_SHA1, (const void *)[self UTF8String], strlen([self UTF8String]), sha);
+#else
SHA1((const void *)[self UTF8String], strlen([self UTF8String]), sha);
+#endif
for (i = 0; i < SHA_DIGEST_LENGTH; i++)
sprintf(&(buf[i*2]), "%02x", sha[i]);
diff --git a/Tests/Unit/GNUmakefile b/Tests/Unit/GNUmakefile
index 6c54a19..01770c1 100644
--- a/Tests/Unit/GNUmakefile
+++ b/Tests/Unit/GNUmakefile
@@ -22,6 +22,7 @@ $(TEST_TOOL)_OBJC_FILES += \
TestSBJsonParser.m \
\
TestNGMimeAddressHeaderFieldGenerator.m \
+ TestNSString+MD5SHA1.m \
TestNSString+URLEscaping.m \
TestNSString+Utilities.m
diff --git a/Tests/Unit/TestNSString+MD5SHA1.m b/Tests/Unit/TestNSString+MD5SHA1.m
new file mode 100644
index 0000000..bfc186e
--- /dev/null
+++ b/Tests/Unit/TestNSString+MD5SHA1.m
@@ -0,0 +1,64 @@
+/* TestNSString+MD5SHA1.m - this file is part of SOGo
+ *
+ * Copyright (C) 2011 Jeroen Dekkers
+ *
+ * Author: Jeroen Dekkers <jeroen@dekkers.ch>
+ *
+ * This file is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2, or (at your option)
+ * any later version.
+ *
+ * This file is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ * Boston, MA 02111-1307, USA.
+ */
+
+#import <Foundation/NSString.h>
+#import "SOGo/NSString+Utilities.h"
+
+#import "SOGoTest.h"
+
+@interface TestNSString_plus_MD5SHA1 : SOGoTest
+@end
+
+@implementation TestNSString_plus_MD5SHA1
+
+- (void) test_stringMD5SHA1
+{
+ const char *inStrings[] = { "SOGoSOGoSOGoSOGo", "éléphant", "2š", NULL };
+ const char **inString;
+ NSString *MD5Strings[] = { @"d3e8072c49511f099d254cc740c7e12a", @"bc6a1535589d6c3cf7999ac37018c11e", @"886ae9b58817fb8a63902feefcd18812" };
+ NSString *SHA1Strings[] = { @"b7d891e0f3b42898fa66627b5cfa3d80501bae46", @"99a02f8802f8ea7e3ad91c4cc4d3ef5a7257c88f", @"32b89f3a9e6078db554cdd39f8571c09de7e8b21" };
+ NSString **MD5String;
+ NSString **SHA1String;
+ NSString *result, *error;
+
+ inString = inStrings;
+ MD5String = MD5Strings;
+ SHA1String = SHA1Strings;
+ while (*inString)
+ {
+ result = [[NSString stringWithUTF8String: *inString] asMD5String];
+ error = [NSString stringWithFormat:
+ @"string '%s' wrong MD5: '%@' (expected '%@')",
+ *inString, result, *MD5String];
+ testWithMessage([result isEqualToString: *MD5String], error);
+ result = [[NSString stringWithUTF8String: *inString] asSHA1String];
+ error = [NSString stringWithFormat:
+ @"string '%s' wrong SHA1: '%@' (expected '%@')",
+ *inString, result, *SHA1String];
+ testWithMessage([result isEqualToString: *SHA1String], error);
+ inString++;
+ MD5String++;
+ SHA1String++;
+ }
+}
+
+@end
diff --git a/UI/MailPartViewers/GNUmakefile.preamble b/UI/MailPartViewers/GNUmakefile.preamble
new file mode 100644
index 0000000..545cdf4
--- /dev/null
+++ b/UI/MailPartViewers/GNUmakefile.preamble
@@ -0,0 +1,4 @@
+ifeq ($(HAS_LIBRARY_ssl),yes)
+ADDITIONAL_CPPFLAGS += -DHAVE_OPENSSL=1
+BUNDLE_LIBS += -lcrypto
+endif
diff --git a/UI/MailPartViewers/UIxMailPartSignedViewer.m b/UI/MailPartViewers/UIxMailPartSignedViewer.m
index 77aad8b..f1278c7 100644
--- a/UI/MailPartViewers/UIxMailPartSignedViewer.m
+++ b/UI/MailPartViewers/UIxMailPartSignedViewer.m
@@ -22,10 +22,12 @@
*/
#include <stdio.h>
+#ifdef HAVE_OPENSSL
#include <openssl/bio.h>
#include <openssl/err.h>
#include <openssl/pkcs7.h>
#include <openssl/x509.h>
+#endif
#import <Foundation/NSArray.h>
#import <NGMime/NGPart.h>
@@ -35,6 +37,7 @@
@implementation UIxMailPartSignedViewer : UIxMailPartMixedViewer
+#ifdef HAVE_OPENSSL
- (X509_STORE *) _setupVerify
{
X509_STORE *store;
@@ -185,5 +188,16 @@
return validationMessage;
}
+#else
+- (BOOL) validSignature
+{
+ return NO;
+}
+
+- (NSString *) validationMessage
+{
+ return @"Signature verification not implemented when using GnuTLS";
+}
+#endif
@end
diff --git a/configure b/configure
index d2b2317..ad3bff7 100755
--- a/configure
+++ b/configure
@@ -303,27 +303,39 @@ genConfigMake() {
}
checkLinking() {
+ # library-name => $1, type => $2
local oldpwd=$PWD
local tmpdir=".configure-test-$$"
mkdir $tmpdir
cd $tmpdir
- cp ../maintenance/dummytool.m .
+ cp ../maintenance/dummytool.c .
+ OLDLIBS=$LIBS
+ for LIB in $1;do
+ LIBS="$LIBS -l${LIB}"
+ done
+
tmpmake="GNUmakefile"
- echo >$tmpmake "include ../config.make"
+ echo >$tmpmake "-include ../config.make"
echo >>$tmpmake "include \$(GNUSTEP_MAKEFILES)/common.make"
- echo >>$tmpmake "TOOL_NAME := linktest"
- echo >>$tmpmake "linktest_OBJC_FILES := dummytool.m"
- echo >>$tmpmake "linktest_TOOL_LIBS += -l$1"
+ echo >>$tmpmake "CTOOL_NAME := linktest"
+ echo >>$tmpmake "linktest_C_FILES := dummytool.c"
+ echo >>$tmpmake "ifeq (\$(findstring openbsd, \$(GNUSTEP_HOST_OS)), openbsd)"
+ echo >>$tmpmake "linktest_TOOL_LIBS += $LIBS -liconv"
+ echo >>$tmpmake "else"
+ echo >>$tmpmake "linktest_TOOL_LIBS += $LIBS"
+ echo >>$tmpmake "endif"
+ echo >>$tmpmake "SYSTEM_LIB_DIR += \$(CONFIGURE_SYSTEM_LIB_DIR)"
echo >>$tmpmake "SYSTEM_LIB_DIR += ${LINK_SYSLIBDIRS}"
- echo >>$tmpmake "include \$(GNUSTEP_MAKEFILES)/tool.make"
+ echo >>$tmpmake "include \$(GNUSTEP_MAKEFILES)/ctool.make"
$MAKE -s messages=yes -f $tmpmake linktest >out.log 2>err.log
LINK_RESULT=$?
if test $LINK_RESULT = 0; then
echo "$2 library found: $1"
+ cfgwrite "HAS_LIBRARY_$1=yes"
else
if test "x$2" = "xrequired"; then
echo "failed to link $2 library: $1"
@@ -331,16 +343,22 @@ checkLinking() {
exit 1
else
echo "failed to link $2 library: $1"
+ cfgwrite "HAS_LIBRARY_$1=no"
+ LIBS=$OLDLIBS
fi
fi
cd $oldpwd
rm -rf $tmpdir
+
+ return $LINK_RESULT
}
checkDependencies() {
- checkLinking "SaxObjC" required;
- checkLinking "NGLdap" required;
+ checkLinking "gnutls" optional;
+ if test $? != 0; then
+ checkLinking "ssl" required;
+ fi
}
runIt() {
@@ -363,7 +381,7 @@ runIt() {
fi
else
genConfigMake;
- #checkDependencies;
+ checkDependencies;
if test -x $NGSTREAMS_DIR/configure; then
if test $ARG_BEQUIET != 1; then
diff --git a/maintenance/dummytool.c b/maintenance/dummytool.c
new file mode 100644
index 0000000..0566948
--- /dev/null
+++ b/maintenance/dummytool.c
@@ -0,0 +1,7 @@
+// Note: do not remove, used by ../configure
+
+#include <stdio.h>
+
+int main(int argc, char **argv) {
+ return 0;
+}
|
| Date Modified | Username | Field | Change |
|---|---|---|---|
| 2012-04-04 16:40 | dekkers | New Issue | |
| 2012-04-04 16:40 | dekkers | File Added: 0005-Add-support-for-GnuTLS.patch | |
| 2012-10-14 21:42 |
|
Relationship added | child of 0001390 |
| 2012-10-25 18:14 |
|
Status | new => resolved |
| 2012-10-25 18:14 |
|
Fixed in Version | => 2.0.2 |
| 2012-10-25 18:14 |
|
Resolution | open => fixed |
| 2012-10-25 18:14 |
|
Assigned To | => wsourdeau |