From d4fdeeab6793f7e76f26435fd2e50b8facd76d70 Mon Sep 17 00:00:00 2001 From: Matěj Cepl Date: Dec 27 2010 12:34:56 +0000 Subject: New patch for libresolv on EPEL. --- diff --git a/bitlbee-libresolv.patch b/bitlbee-libresolv.patch index e38171c..356780f 100644 --- a/bitlbee-libresolv.patch +++ b/bitlbee-libresolv.patch @@ -1,7 +1,8 @@ -diff -up bitlbee-3.0/configure.libresolv bitlbee-3.0/configure ---- bitlbee-3.0/configure.libresolv 2010-11-22 02:38:33.000000000 +0100 -+++ bitlbee-3.0/configure 2010-11-22 02:38:33.000000000 +0100 -@@ -348,10 +349,10 @@ detect_resolv_static() +diff --git a/configure b/configure +index edc4adb..1b1336d 100755 +--- a/configure ++++ b/configure +@@ -349,10 +349,10 @@ detect_resolv_static() TMPFILE=$(mktemp /tmp/bitlbee-configure.XXXXXX) ret=1 for i in $systemlibdirs; do @@ -14,30 +15,57 @@ diff -up bitlbee-3.0/configure.libresolv bitlbee-3.0/configure ret=0 fi fi -diff -up bitlbee-3.0/lib/Makefile.libresolv bitlbee-3.0/lib/Makefile ---- bitlbee-3.0/lib/Makefile.libresolv 2010-10-22 02:51:31.000000000 +0200 -+++ bitlbee-3.0/lib/Makefile 2010-11-22 02:38:33.000000000 +0100 -@@ -12,7 +12,7 @@ SRCDIR := $(SRCDIR)lib/ - endif +diff --git a/lib/misc.c b/lib/misc.c +index 05192d9..556fe1a 100644 +--- a/lib/misc.c ++++ b/lib/misc.c +@@ -1,8 +1,8 @@ +- /********************************************************************\ +- * BitlBee -- An IRC to other IM-networks gateway * +- * * +- * Copyright 2002-2006 Wilmer van der Gaast and others * +- \********************************************************************/ ++/********************************************************************\ ++* BitlBee -- An IRC to other IM-networks gateway * ++* * ++* Copyright 2002-2006 Wilmer van der Gaast and others * ++\********************************************************************/ - # [SH] Program variables --objects = arc.o base64.o $(DES) $(EVENT_HANDLER) ftutil.o http_client.o ini.o md5.o misc.o oauth.o proxy.o sha1.o $(SSL_CLIENT) url.o xmltree.o -+objects = arc.o base64.o $(DES) $(EVENT_HANDLER) ftutil.o http_client.o ini.o md5.o misc.o oauth.o proxy.o sha1.o srv.o $(SSL_CLIENT) url.o xmltree.o + /* + * Various utility functions. Some are copied from Gaim to support the +@@ -30,6 +30,12 @@ + Suite 330, Boston, MA 02111-1307 USA + */ - LFLAGS += -r ++#undef TEST ++ ++#ifdef TEST ++#define HAVE_RESOLV_A ++#endif ++ + #define BITLBEE_CORE + #include "nogaim.h" + #include "base64.h" +@@ -42,13 +48,17 @@ + #include -diff -up bitlbee-3.0/lib/misc.c.libresolv bitlbee-3.0/lib/misc.c ---- bitlbee-3.0/lib/misc.c.libresolv 2010-10-22 02:51:31.000000000 +0200 -+++ bitlbee-3.0/lib/misc.c 2010-11-22 02:38:33.000000000 +0100 -@@ -44,6 +44,7 @@ #ifdef HAVE_RESOLV_A - #include +-#include #include -+#include #endif #include "md5.h" -@@ -514,66 +515,6 @@ int bool2int( char *value ) + #include "ssl_client.h" + ++/* Not every installation has gotten around to supporting SRVs yet...*/ ++#ifndef T_SRV ++#define T_SRV 33 ++#endif ++ + void strip_linefeed(gchar *text) + { + int i, j; +@@ -514,66 +524,6 @@ int bool2int( char *value ) return 0; } @@ -104,337 +132,146 @@ diff -up bitlbee-3.0/lib/misc.c.libresolv bitlbee-3.0/lib/misc.c void srv_free( struct ns_srv_reply **srv ) { int i; -diff -up bitlbee-3.0/lib/misc.h.libresolv bitlbee-3.0/lib/misc.h ---- bitlbee-3.0/lib/misc.h.libresolv 2010-10-22 02:51:31.000000000 +0200 -+++ bitlbee-3.0/lib/misc.h 2010-11-22 02:39:51.000000000 +0100 -@@ -28,14 +28,7 @@ - - #include - #include -- --struct ns_srv_reply --{ -- int prio; -- int weight; -- int port; -- char name[]; --}; -+#include "srv.h" - - G_MODULE_EXPORT void strip_linefeed( gchar *text ); - G_MODULE_EXPORT char *add_cr( char *text ); -@@ -60,7 +53,6 @@ G_MODULE_EXPORT void random_bytes( unsig - G_MODULE_EXPORT int is_bool( char *value ); - G_MODULE_EXPORT int bool2int( char *value ); - --G_MODULE_EXPORT struct ns_srv_reply **srv_lookup( char *service, char *protocol, char *domain ); - G_MODULE_EXPORT void srv_free( struct ns_srv_reply **srv ); +@@ -586,6 +536,119 @@ void srv_free( struct ns_srv_reply **srv ) + g_free( srv ); + } - G_MODULE_EXPORT char *word_wrap( const char *msg, int line_len ); -diff -up /dev/null bitlbee-3.0/lib/srv.c ---- /dev/null 2010-11-21 23:39:22.000456625 +0100 -+++ bitlbee-3.0/lib/srv.c 2010-11-22 02:38:33.000000000 +0100 -@@ -0,0 +1,249 @@ -+/* srv.c - DNS SRV code -+ * Copyright (C) 2003 Free Software Foundation, Inc. -+ * -+ * This file is part of GNUPG. -+ * -+ * GNUPG 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 3 of the License, or -+ * (at your option) any later version. -+ * -+ * GNUPG 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; if not, see . -+ */ -+ -+#undef TEST -+ -+#ifdef TEST -+#define HAVE_RESOLV_A -+#endif -+ -+#include -+#include -+ -+#include -+#include -+#include -+#include -+ -+#ifdef HAVE_RESOLV_A -+# ifdef _WIN32 -+# include -+# else -+# include -+# include -+# include -+# endif /* !_WIN32 */ -+#endif /* USE_DNS_SRV */ -+ -+#include "srv.h" -+#include -+#include -+#include -+ -+/* Not every installation has gotten around to supporting SRVs yet...*/ -+#ifndef T_SRV -+#define T_SRV 33 -+#endif -+ -+static int priosort(const void *a, const void *b) { -+ const struct ns_srv_reply *sa=a, *sb=b; -+ if (sa->prio>sb->prio) -+ return 1; -+ else if (sa->prioprio) -+ return -1; -+ else -+ return 0; ++static int srv_compare(const void *a, const void *b) { ++ int prio; ++ const struct ns_srv_reply *sa = *(struct ns_srv_reply **) a; ++ const struct ns_srv_reply *sb = *(struct ns_srv_reply **) b; ++ ++ prio = sa->prio - sb->prio; ++ if (prio == 0) { ++ /* Place weight 0 entries first. */ ++ if (sa->weight == 0) return -1; ++ if (sb->weight == 0) return 1; ++ } ++ ++ return prio; +} + -+struct ns_srv_reply *srv_lookup(char *service, char *protocol, char *domain) { -+ struct ns_srv_reply *reply = NULL; -+ struct ns_srv_reply *list = NULL; -+ char name[1024]; -+#ifdef HAVE_RESOLV_A -+ unsigned char answer[PACKETSZ]; -+ int r, srvcount=0; -+ unsigned char *pt, *emsg; -+ int count, dlen; -+ -+ g_snprintf(name, sizeof(name ), "_%s._%s.%s", service, protocol, domain); -+ -+ _res.options |= RES_DEBUG; -+ -+ if ( res_init() != 0 ) -+ return NULL; -+ -+ r=res_query(name, C_IN, T_SRV, answer, PACKETSZ); -+ -+ if (rPACKETSZ) -+ return NULL; -+ -+ if ((((HEADER *)answer)->rcode)==NOERROR && (count=ntohs(((HEADER *)answer)->ancount))) { -+ int i, rc; -+ -+ emsg=&answer[r]; /* end of message ??? */ -+ pt=&answer[sizeof(HEADER)]; -+ -+ /* Skip over the query */ -+ rc=dn_skipname(pt, emsg); -+ if (rc==-1) -+ goto fail; -+ -+ pt+=rc+QFIXEDSZ; -+ -+ while (count-->0 && ptprio=*pt++ << 8; -+ srv->prio|=*pt++; -+ srv->weight=*pt++ << 8; -+ srv->weight|=*pt++; -+ srv->port=*pt++ << 8; -+ srv->port|=*pt++; -+ -+ /* Get the name. 2782 doesn't allow name compression, but -+ dn_expand still works to pull the name out of the -+ packet. */ -+ rc=dn_expand(answer, emsg, pt, srv->name, MAXDNAME); -+ if (rc==1 && srv->name[0]==0) /* "." */ -+ goto noanswer; -+ if (rc==-1) -+ goto fail; -+ pt+=rc; -+ /* Corrupt packet? */ -+ if (dlen!=rc+6) -+ goto fail; -+ } -+ -+ /* Now we have an array of all the srv records. */ -+ -+ /* Order by priority */ -+ qsort(list, srvcount, sizeof(struct ns_srv_reply), priosort); -+ -+ /* For each priority, move the zero-weighted items first. */ -+ for (i=0; ircode != NOERROR) { ++ goto fail; ++ } ++ ++ len = dn_skipname(p, end); ++ if (len == -1) { ++ goto fail; ++ } ++ p += len + QFIXEDSZ; ++ ++ count = ntohs(header->ancount); ++ ++ results = g_new(struct ns_srv_reply *, count + 1); ++ ++ n = 0; ++ while (count-- > 0 && p < end) { ++ len = dn_skipname(p, end); ++ if (len == -1) { ++ goto fail; ++ } ++ p += len; ++ ++ GETSHORT(type, p); ++ GETSHORT(class, p); ++ GETLONG(ttl, p); ++ GETSHORT(rdlength, p); ++ ++ if (type != T_SRV || class != C_IN) { ++ p += rdlength; ++ continue; ++ } ++ ++ /* This is an overestimate of the needed size. */ ++ reply = g_malloc(sizeof(struct ns_srv_reply) + rdlength + 1); ++ ++ GETSHORT(reply->prio, p); ++ GETSHORT(reply->weight, p); ++ GETSHORT(reply->port, p); ++ ++ len = dn_expand(answer, end, p, reply->name, rdlength + 1); ++ if (len == -1) { ++ g_free(reply); ++ goto fail; ++ } ++ p += len; ++ ++ results[n++] = reply; ++ } ++ ++ results[n] = NULL; ++ ++ /* Order by priority. */ ++ qsort(results, n, sizeof(struct ns_srv_reply *), srv_compare); ++ ++ return results; ++ ++fail: ++ if (results) { ++ while (n-- > 0) { ++ g_free(results[n]); ++ } ++ g_free(results); ++ } ++ ++ return NULL; +} + -+#ifdef TEST -+int main(int argc, char *argv[]) { -+ struct ns_srv_reply *srv; -+ /*int rc,i;*/ -+ -+ srv=srv_lookup("xmpp-client", "tcp", "jabber.org"); -+ if (srv != NULL) { -+ printf("priority=%hu\n", srv->prio); -+ printf("weight=%hu\n", srv->weight); -+ printf("port=%hu\n", srv->port); -+ printf("target=%s\n", srv->name); -+ printf("\n"); -+ g_free(srv); -+ } + /* Word wrapping. Yes, I know this isn't UTF-8 clean. I'm willing to take the risk. */ + char *word_wrap( const char *msg, int line_len ) + { +@@ -728,3 +791,22 @@ char **split_command_parts( char *command ) + + return cmd; + } + -+ return 0; ++#ifdef TEST ++int main() { ++ struct ns_srv_reply **srv; ++ int i; ++ ++ srv = srv_lookup("xmpp-client", "tcp", "jabber.org"); ++ for (i = 0; srv[i]; ++i) { ++ printf("priority=%hu\n", srv[i]->prio); ++ printf("weight=%hu\n", srv[i]->weight); ++ printf("port=%hu\n", srv[i]->port); ++ printf("target=%s\n", srv[i]->name); ++ printf("\n"); ++ } ++ srv_free(srv); ++ ++ return 0; +} +#endif /* TEST */ -diff -up /dev/null bitlbee-3.0/lib/srv.h ---- /dev/null 2010-11-21 23:39:22.000456625 +0100 -+++ bitlbee-3.0/lib/srv.h 2010-11-22 02:38:33.000000000 +0100 -@@ -0,0 +1,38 @@ -+/* srv.h -+ * Copyright (C) 2003, 2004 Free Software Foundation, Inc. -+ * -+ * This file is part of GNUPG. -+ * -+ * GNUPG 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 3 of the License, or -+ * (at your option) any later version. -+ * -+ * GNUPG 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; if not, see . -+ */ -+ -+#ifndef GNUPG_COMMON_SRV_H -+#define GNUPG_COMMON_SRV_H -+ -+#ifndef MAXDNAME -+#define MAXDNAME 1025 -+#endif -+ -+struct ns_srv_reply -+{ -+ int prio; /* priority */ -+ int weight; /* weight */ -+ int port; /* port */ -+ int run_count; /* from struct srventry at gnupg's common/srv.h */ -+ char name[MAXDNAME]; /* target */ -+}; -+ -+struct ns_srv_reply *srv_lookup(char *service, char *protocol, char *domain); -+ -+#endif /*GNUPG_COMMON_SRV_H*/ -diff -up bitlbee-3.0/Makefile.libresolv bitlbee-3.0/Makefile ---- bitlbee-3.0/Makefile.libresolv 2010-10-22 02:51:31.000000000 +0200 -+++ bitlbee-3.0/Makefile 2010-11-22 02:38:33.000000000 +0100 -@@ -10,7 +10,7 @@ - - # Program variables - objects = bitlbee.o dcc.o help.o ipc.o irc.o irc_im.o irc_channel.o irc_commands.o irc_send.o irc_user.o irc_util.o nick.o $(OTR_BI) query.o root_commands.o set.o storage.o $(STORAGE_OBJS) --headers = bitlbee.h commands.h conf.h config.h help.h ipc.h irc.h log.h nick.h query.h set.h sock.h storage.h lib/events.h lib/ftutil.h lib/http_client.h lib/ini.h lib/md5.h lib/misc.h lib/proxy.h lib/sha1.h lib/ssl_client.h lib/url.h protocols/account.h protocols/bee.h protocols/ft.h protocols/nogaim.h -+headers = bitlbee.h commands.h conf.h config.h help.h ipc.h irc.h log.h nick.h query.h set.h sock.h storage.h lib/events.h lib/ftutil.h lib/http_client.h lib/ini.h lib/md5.h lib/misc.h lib/proxy.h lib/sha1.h lib/srv.h lib/ssl_client.h lib/url.h protocols/account.h protocols/bee.h protocols/ft.h protocols/nogaim.h - subdirs = lib protocols - - ifeq ($(TARGET),i586-mingw32msvc) diff --git a/bitlbee.spec b/bitlbee.spec index a71049d..39559fe 100644 --- a/bitlbee.spec +++ b/bitlbee.spec @@ -1,7 +1,7 @@ Summary: IRC to other chat networks gateway Name: bitlbee Version: 3.0.1 -Release: 3%{?dist} +Release: 4%{?dist} License: GPLv2+ and MIT Group: System Environment/Daemons URL: http://www.bitlbee.org/ @@ -144,6 +144,9 @@ rm -rf $RPM_BUILD_ROOT %endif %changelog +* Mon Dec 27 2010 Matěj Cepl - 3.0.1-4 +- Add Ricky Zhou's fixed patch for libresolv (#663934) + * Sun Dec 26 2010 Matěj Cepl - 3.0.1-3 - Add bitlbee-des3-implement patch with working ssl_des3_encrypt implementation by Ricky Zhou.