From dbdecc9f33e12a3b38fbcd3b01dddea4d88ba9c7 Mon Sep 17 00:00:00 2001 From: Tilman Keskinoz Date: Tue, 17 Feb 2015 16:02:43 +0000 Subject: [PATCH] Add port for libstrophe, an XMPP library for C Parts of this port is based on work by fabianfreyer@github --- net-im/Makefile | 1 + net-im/libstrophe/Makefile | 30 +++ net-im/libstrophe/distinfo | 2 + net-im/libstrophe/files/patch-configure.ac | 72 ++++++ .../libstrophe/files/patch-use-openssl-sha1 | 241 ++++++++++++++++++ net-im/libstrophe/pkg-descr | 4 + net-im/libstrophe/pkg-plist | 6 + 7 files changed, 356 insertions(+) create mode 100644 net-im/libstrophe/Makefile create mode 100644 net-im/libstrophe/distinfo create mode 100644 net-im/libstrophe/files/patch-configure.ac create mode 100644 net-im/libstrophe/files/patch-use-openssl-sha1 create mode 100644 net-im/libstrophe/pkg-descr create mode 100644 net-im/libstrophe/pkg-plist diff --git a/net-im/Makefile b/net-im/Makefile index 58ea3d89e0b0..8f0c923de6f7 100644 --- a/net-im/Makefile +++ b/net-im/Makefile @@ -58,6 +58,7 @@ SUBDIR += libnice-gst010 SUBDIR += libnice-gst1 SUBDIR += libpurple + SUBDIR += libstrophe SUBDIR += libtelepathy SUBDIR += libyahoo2 SUBDIR += licq diff --git a/net-im/libstrophe/Makefile b/net-im/libstrophe/Makefile new file mode 100644 index 000000000000..7360599ba38d --- /dev/null +++ b/net-im/libstrophe/Makefile @@ -0,0 +1,30 @@ +# $FreeBSD$ + +PORTNAME= libstrophe +PORTVERSION= 0.8.7 +CATEGORIES= net-im + +MAINTAINER= arved@FreeBSD.org +COMMENT= Lightweight XMPP library + +LICENSE= MIT +LICENSE_FILE= ${WRKSRC}/MIT-LICENSE.txt + +LIB_DEPENDS= libexpat.so:${PORTSDIR}/textproc/expat2 + +USE_GITHUB= yes +GH_ACCOUNT= strophe +GH_PROJECT= libstrophe +GH_COMMIT= 2093aac +GH_TAGNAME= ${GH_COMMIT} +USE_AUTOTOOLS= autoconf:env automake:env libtoolize:env +USES= libtool pkgconfig +GNU_CONFIGURE= yes +CONFIGURE_ARGS+= --with-pkgconfigdir=${PREFIX}/libdata/pkgconfig +USE_OPENSSL= yes +USE_LDCONFIG= yes + +pre-configure: + cd ${WRKSRC}; ./bootstrap.sh + +.include diff --git a/net-im/libstrophe/distinfo b/net-im/libstrophe/distinfo new file mode 100644 index 000000000000..747644826987 --- /dev/null +++ b/net-im/libstrophe/distinfo @@ -0,0 +1,2 @@ +SHA256 (libstrophe-0.8.7.tar.gz) = 455ee68951a1460d71676ce1e4d50f21a0af07bdca3e3a1c44fd149e5a375bed +SIZE (libstrophe-0.8.7.tar.gz) = 125960 diff --git a/net-im/libstrophe/files/patch-configure.ac b/net-im/libstrophe/files/patch-configure.ac new file mode 100644 index 000000000000..7d675164f56a --- /dev/null +++ b/net-im/libstrophe/files/patch-configure.ac @@ -0,0 +1,72 @@ +--- configure.ac.orig 2015-01-27 23:23:08 UTC ++++ configure.ac +@@ -12,11 +12,11 @@ AS_CASE([$host_os], + [freebsd*], [PLATFORM="freebsd"], + [PLATFORM="nix"]) + +-PKG_CHECK_MODULES([openssl], [openssl], [PC_REQUIRES+=(openssl)], ++PKG_CHECK_MODULES([openssl], [openssl], [PC_REQUIRES="openssl ${PC_REQUIRES}"], + [AC_CHECK_HEADER([openssl/ssl.h], + [ + openssl_LIBS="-lssl -lcrypto" +- PC_LIBS+=($openssl_LIBS) ++ PC_LIBS="${openssl_LIBS} ${PC_LIBS}" + ], + [AC_MSG_ERROR([openssl not found; openssl required])] + )]) +@@ -32,7 +32,7 @@ if test "x$with_libxml2" != xno; then + PKG_CHECK_MODULES([libxml2], [libxml-2.0 >= 2.7], + [ + with_libxml2=yes +- PC_REQUIRES+=(libxml-2.0) ++ PC_REQUIRES="libxml-2.0 ${PC_REQUIRES}" + ], + [ + old_CFLAGS=$CFLAGS +@@ -42,19 +42,19 @@ if test "x$with_libxml2" != xno; then + with_libxml2=yes + libxml2_CFLAGS="-I${includedir}/libxml2" + libxml2_LIBS="-lxml2" +- PC_LIBS+=($libxml2_LIBS) +- PC_CFLAGS+=($libxml2_CFLAGS) ++ PC_LIBS="${libxml2_LIBS} ${PC_LIBS}" ++ PC_CFLAGS="${libxml2_CFLAGS} ${PC_CFLAGS}" + ], + [AC_MSG_ERROR([libxml2 not found.])]) + CFLAGS=$old_CFLAGS + ]) + else + PKG_CHECK_MODULES([expat], [expat >= 2.0.0], +- [PC_REQUIRES+=(expat)], ++ [PC_REQUIRES="expat ${PC_REQUIRES}"], + [AC_CHECK_HEADER([expat.h], + [ + expat_LIBS="-lexpat" +- PC_LIBS+=($expat_LIBS) ++ PC_LIBS="${expat_LIBS} ${PC_LIBS}" + ], + [AC_MSG_ERROR([expat not found; expat required.])] + ) +@@ -80,7 +80,7 @@ if test "x$PLATFORM" != xfreebsd; then + AC_CHECK_LIB([resolv], [res_query], [], + [AC_CHECK_LIB([resolv], [__res_query], [], + [AC_MSG_ERROR([libresolv not found; libresolv required.])])]) +- PC_LIBS+=(-lresolv) ++ PC_LIBS="-lresolv ${PC_LIBS}" + else + AC_MSG_NOTICE([skipping libresolv checks for freebsd]) + fi +@@ -97,9 +97,10 @@ m4_ifdef([PKG_INSTALLDIR], [PKG_INSTALLD + + AM_CONDITIONAL([PARSER_EXPAT], [test x$with_parser != xlibxml2]) + +-AC_SUBST([PC_REQUIRES], [${PC_REQUIRES[[@]]}]) +-AC_SUBST([PC_CFLAGS], [${PC_CFLAGS[[@]]}]) +-AC_SUBST([PC_LIBS], [${PC_LIBS[[@]]}]) ++AC_SUBST([PC_REQUIRES], [${PC_REQUIRES}]) ++AC_SUBST([PC_CFLAGS], [${PC_CFLAGS}]) ++AC_SUBST([PC_LIBS], [${PC_LIBS}]) ++AC_SUBST([LIB_VERSION], [0:0:0]) + + AC_SUBST(PARSER_NAME) + AC_SUBST(PARSER_CFLAGS) diff --git a/net-im/libstrophe/files/patch-use-openssl-sha1 b/net-im/libstrophe/files/patch-use-openssl-sha1 new file mode 100644 index 000000000000..2796725d81dc --- /dev/null +++ b/net-im/libstrophe/files/patch-use-openssl-sha1 @@ -0,0 +1,241 @@ +diff --git a/Makefile.am b/Makefile.am +index dadce55..6c63974 100644 +--- Makefile.am ++++ Makefile.am +@@ -21,11 +21,11 @@ libstrophe_la_LDFLAGS = $(SSL_LIBS) $(PARSER_LIBS) + libstrophe_la_LDFLAGS += -export-symbols-regex '^xmpp_' + libstrophe_la_SOURCES = src/auth.c src/conn.c src/ctx.c \ + src/event.c src/handler.c src/hash.c \ +- src/jid.c src/md5.c src/sasl.c src/scram.c src/sha1.c \ ++ src/jid.c src/md5.c src/sasl.c src/scram.c \ + src/snprintf.c src/sock.c src/stanza.c src/thread.c \ + src/tls_openssl.c src/util.c \ + src/common.h src/hash.h src/md5.h src/ostypes.h src/parser.h \ +- src/sasl.h src/scram.h src/sha1.h src/sock.h src/thread.h src/tls.h \ ++ src/sasl.h src/scram.h src/sock.h src/thread.h src/tls.h \ + src/util.h + + if PARSER_EXPAT +diff --git a/src/sasl.c b/src/sasl.c +index 3d83fd0..9e1b40b 100644 +--- src/sasl.c ++++ src/sasl.c +@@ -21,7 +21,7 @@ + #include "ostypes.h" + #include "sasl.h" + #include "md5.h" +-#include "sha1.h" ++#include + #include "scram.h" + + #ifdef _WIN32 +@@ -355,8 +355,8 @@ char *sasl_scram_sha1(xmpp_ctx_t *ctx, const char *challenge, + const char *first_bare, const char *jid, + const char *password) + { +- uint8_t key[SHA1_DIGEST_SIZE]; +- uint8_t sign[SHA1_DIGEST_SIZE]; ++ uint8_t key[SHA_DIGEST_LENGTH]; ++ uint8_t sign[SHA_DIGEST_LENGTH]; + char *r = NULL; + char *s = NULL; + char *i = NULL; +@@ -422,7 +422,7 @@ char *sasl_scram_sha1(xmpp_ctx_t *ctx, const char *challenge, + SCRAM_SHA1_ClientKey((uint8_t *)password, strlen(password), + (uint8_t *)sval, sval_len, (uint32_t)ival, key); + SCRAM_SHA1_ClientSignature(key, (uint8_t *)auth, strlen(auth), sign); +- for (j = 0; j < SHA1_DIGEST_SIZE; j++) { ++ for (j = 0; j < SHA_DIGEST_LENGTH; j++) { + sign[j] ^= key[j]; + } + +diff --git a/src/scram.c b/src/scram.c +index 5cce168..688028f 100644 +--- src/scram.c ++++ src/scram.c +@@ -19,46 +19,46 @@ + #include + #include + +-#include "sha1.h" ++#include + #include "ostypes.h" + + #include "scram.h" + + /* block size for HMAC */ + #define BLOCK_SIZE 64 +-#if BLOCK_SIZE < SHA1_DIGEST_SIZE +-#error BLOCK_SIZE must not be less than SHA1_DIGEST_SIZE ++#if BLOCK_SIZE < SHA_DIGEST_LENGTH ++#error BLOCK_SIZE must not be less than SHA_DIGEST_LENGTH + #endif + + static const uint8_t ipad = 0x36; + static const uint8_t opad = 0x5C; + +-static void SHA1(const uint8_t* data, size_t len, +- uint8_t digest[SHA1_DIGEST_SIZE]) ++static void _SHA1(const uint8_t* data, size_t len, ++ uint8_t digest[SHA_DIGEST_LENGTH]) + { +- SHA1_CTX ctx; ++ SHA_CTX ctx; + SHA1_Init(&ctx); +- SHA1_Update(&ctx, data, len); +- SHA1_Final(&ctx, digest); ++ SHA1_Update(&ctx, (const void*) data, len); ++ SHA1_Final(digest, &ctx); + } + + static void HMAC_SHA1(const uint8_t *key, size_t key_len, + const uint8_t *text, size_t len, +- uint8_t digest[SHA1_DIGEST_SIZE]) ++ uint8_t digest[SHA_DIGEST_LENGTH]) + { + uint8_t key_pad[BLOCK_SIZE]; + uint8_t key_ipad[BLOCK_SIZE]; + uint8_t key_opad[BLOCK_SIZE]; +- uint8_t sha_digest[SHA1_DIGEST_SIZE]; ++ uint8_t sha_digest[SHA_DIGEST_LENGTH]; + int i; +- SHA1_CTX ctx; ++ SHA_CTX ctx; + + memset(key_pad, 0, sizeof(key_pad)); + if (key_len <= BLOCK_SIZE) { + memcpy(key_pad, key, key_len); + } else { + /* according to RFC2104 */ +- SHA1(key, key_len, key_pad); ++ _SHA1(key, key_len, key_pad); + } + + for (i = 0; i < BLOCK_SIZE; i++) { +@@ -67,19 +67,19 @@ static void HMAC_SHA1(const uint8_t *key, size_t key_len, + } + + SHA1_Init(&ctx); +- SHA1_Update(&ctx, key_ipad, BLOCK_SIZE); +- SHA1_Update(&ctx, text, len); +- SHA1_Final(&ctx, sha_digest); ++ SHA1_Update(&ctx, (const void*) key_ipad, BLOCK_SIZE); ++ SHA1_Update(&ctx, (const void*) text, len); ++ SHA1_Final(sha_digest, &ctx); + + SHA1_Init(&ctx); +- SHA1_Update(&ctx, key_opad, BLOCK_SIZE); +- SHA1_Update(&ctx, sha_digest, SHA1_DIGEST_SIZE); +- SHA1_Final(&ctx, digest); ++ SHA1_Update(&ctx, (const void*) key_opad, BLOCK_SIZE); ++ SHA1_Update(&ctx, (const void*) sha_digest, SHA_DIGEST_LENGTH); ++ SHA1_Final(digest, &ctx); + } + + static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len, + const uint8_t *salt, size_t salt_len, uint32_t i, +- uint8_t digest[SHA1_DIGEST_SIZE]) ++ uint8_t digest[SHA_DIGEST_LENGTH]) + { + int j, k; + uint8_t tmp[128]; +@@ -89,7 +89,7 @@ static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len, + /* assume salt + INT(1) isn't longer than sizeof(tmp) */ + assert(salt_len <= sizeof(tmp) - sizeof(int1)); + +- memset(digest, 0, SHA1_DIGEST_SIZE); ++ memset(digest, 0, SHA_DIGEST_LENGTH); + if (i == 0) { + return; + } +@@ -99,11 +99,11 @@ static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len, + + /* 'text' for Hi is a 'key' for HMAC */ + HMAC_SHA1(text, len, tmp, salt_len + sizeof(int1), digest); +- memcpy(tmp, digest, SHA1_DIGEST_SIZE); ++ memcpy(tmp, digest, SHA_DIGEST_LENGTH); + + for (j = 1; j < i; j++) { +- HMAC_SHA1(text, len, tmp, SHA1_DIGEST_SIZE, tmp); +- for (k = 0; k < SHA1_DIGEST_SIZE; k++) { ++ HMAC_SHA1(text, len, tmp, SHA_DIGEST_LENGTH, tmp); ++ for (k = 0; k < SHA_DIGEST_LENGTH; k++) { + digest[k] ^= tmp[k]; + } + } +@@ -111,33 +111,33 @@ static void SCRAM_SHA1_Hi(const uint8_t *text, size_t len, + + void SCRAM_SHA1_ClientKey(const uint8_t *password, size_t len, + const uint8_t *salt, size_t salt_len, uint32_t i, +- uint8_t key[SHA1_DIGEST_SIZE]) ++ uint8_t key[SHA_DIGEST_LENGTH]) + { +- uint8_t salted[SHA1_DIGEST_SIZE]; ++ uint8_t salted[SHA_DIGEST_LENGTH]; + + /* XXX: Normalize(password) is omitted */ + + SCRAM_SHA1_Hi(password, len, salt, salt_len, i, salted); +- HMAC_SHA1(salted, SHA1_DIGEST_SIZE, (uint8_t *)"Client Key", ++ HMAC_SHA1(salted, SHA_DIGEST_LENGTH, (uint8_t *)"Client Key", + strlen("Client Key"), key); + } + +-void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA1_DIGEST_SIZE], ++void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA_DIGEST_LENGTH], + const uint8_t *AuthMessage, size_t len, +- uint8_t sign[SHA1_DIGEST_SIZE]) ++ uint8_t sign[SHA_DIGEST_LENGTH]) + { +- uint8_t stored[SHA1_DIGEST_SIZE]; ++ uint8_t stored[SHA_DIGEST_LENGTH]; + +- SHA1(ClientKey, SHA1_DIGEST_SIZE, stored); +- HMAC_SHA1(stored, SHA1_DIGEST_SIZE, AuthMessage, len, sign); ++ SHA1(ClientKey, SHA_DIGEST_LENGTH, stored); ++ HMAC_SHA1(stored, SHA_DIGEST_LENGTH, AuthMessage, len, sign); + } + +-void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA1_DIGEST_SIZE], +- const uint8_t ClientSignature[SHA1_DIGEST_SIZE], +- uint8_t proof[SHA1_DIGEST_SIZE]) ++void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA_DIGEST_LENGTH], ++ const uint8_t ClientSignature[SHA_DIGEST_LENGTH], ++ uint8_t proof[SHA_DIGEST_LENGTH]) + { + int i; +- for (i = 0; i < SHA1_DIGEST_SIZE; i++) { ++ for (i = 0; i < SHA_DIGEST_LENGTH; i++) { + proof[i] = ClientKey[i] ^ ClientSignature[i]; + } + } +diff --git a/src/scram.h b/src/scram.h +index a0b996b..f81a5b6 100644 +--- src/scram.h ++++ src/scram.h +@@ -19,18 +19,18 @@ + /* make sure the stdint.h types are available */ + #include "ostypes.h" + +-#include "sha1.h" ++#include + + void SCRAM_SHA1_ClientKey(const uint8_t *password, size_t len, + const uint8_t *salt, size_t salt_len, uint32_t i, +- uint8_t key[SHA1_DIGEST_SIZE]); ++ uint8_t key[SHA_DIGEST_LENGTH]); + +-void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA1_DIGEST_SIZE], ++void SCRAM_SHA1_ClientSignature(const uint8_t ClientKey[SHA_DIGEST_LENGTH], + const uint8_t *AuthMessage, size_t len, +- uint8_t sign[SHA1_DIGEST_SIZE]); ++ uint8_t sign[SHA_DIGEST_LENGTH]); + +-void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA1_DIGEST_SIZE], +- const uint8_t ClientSignature[SHA1_DIGEST_SIZE], +- uint8_t proof[SHA1_DIGEST_SIZE]); ++void SCRAM_SHA1_ClientProof(const uint8_t ClientKey[SHA_DIGEST_LENGTH], ++ const uint8_t ClientSignature[SHA_DIGEST_LENGTH], ++ uint8_t proof[SHA_DIGEST_LENGTH]); + + #endif /* __LIBSTROPHE_SCRAM_H__ */ diff --git a/net-im/libstrophe/pkg-descr b/net-im/libstrophe/pkg-descr new file mode 100644 index 000000000000..0d4d4c8c077b --- /dev/null +++ b/net-im/libstrophe/pkg-descr @@ -0,0 +1,4 @@ +libstrophe is a minimal XMPP library written in C. It has almost no external +dependencies, only an XML parsing library (expat or libxml are both supported). + +WWW: http://strophe.im/libstrophe/ diff --git a/net-im/libstrophe/pkg-plist b/net-im/libstrophe/pkg-plist new file mode 100644 index 000000000000..823c8e66cedf --- /dev/null +++ b/net-im/libstrophe/pkg-plist @@ -0,0 +1,6 @@ +include/strophe.h +lib/libstrophe.so.0.0.0 +lib/libstrophe.so.0 +lib/libstrophe.so +lib/libstrophe.a +libdata/pkgconfig/libstrophe.pc