rpms/bitlbee/EL-4 bitlbee-1.2.1-gaccess.patch, NONE, 1.1 bitlbee-1.2.1-libresolv.patch, NONE, 1.1 .cvsignore, 1.4, 1.5 bitlbee.spec, 1.4, 1.5 sources, 1.4, 1.5 bitlbee-1.2-gmalloc.patch, 1.1, NONE

Robert Scheck (robert) fedora-extras-commits at redhat.com
Mon Jul 7 18:02:26 UTC 2008


Author: robert

Update of /cvs/extras/rpms/bitlbee/EL-4
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv12872/EL-4

Modified Files:
	.cvsignore bitlbee.spec sources 
Added Files:
	bitlbee-1.2.1-gaccess.patch bitlbee-1.2.1-libresolv.patch 
Removed Files:
	bitlbee-1.2-gmalloc.patch 
Log Message:
Upgrade to 1.2.1 (thanks to Matěj Cepl)


bitlbee-1.2.1-gaccess.patch:

--- NEW FILE bitlbee-1.2.1-gaccess.patch ---
BitlBee 1.2.1 doesn't compile on Red Hat Enterprise Linux 4 and systems based
on it. Build fails with messages 'glib/gstdio.h: No such file or directory',
'storage_xml.c:248: warning: implicit declaration of function `g_access' or
similar. Not fully fixed at upstream (devel), yet. Newer releases of BitlBee
hopefully won't need this patch any longer, it's proposed anyway to upstream.

Further information & updates: http://bugs.bitlbee.org/bitlbee/ticket/429

--- bitlbee-1.2.1/storage_xml.c			2008-06-10 01:09:06.000000000 +0200
+++ bitlbee-1.2.1/storage_xml.c.gaccess		2008-07-06 17:06:31.000000000 +0200
@@ -28,7 +28,17 @@
 #include "base64.h"
 #include "arc.h"
 #include "md5.h"
+
+#if GLIB_CHECK_VERSION(2,8,0)
 #include <glib/gstdio.h>
+#else
+/* GLib < 2.8.0 doesn't have g_access, so just use the system access(). */
+#define g_access access
+
+#ifndef F_OK
+#define F_OK 0
+#endif
+#endif 
 
 typedef enum
 {
@@ -243,9 +253,10 @@
 
 static void xml_init( void )
 {
-	if( ! g_file_test( global.conf->configdir, G_FILE_TEST_EXISTS ) )
+	if( g_access( global.conf->configdir, F_OK ) != 0 )
 		log_message( LOGLVL_WARNING, "The configuration directory `%s' does not exist. Configuration won't be saved.", global.conf->configdir );
-	else if( ! g_file_test( global.conf->configdir, G_FILE_TEST_EXISTS ) || g_access( global.conf->configdir, W_OK ) != 0 )
+	else if( g_access( global.conf->configdir, F_OK ) != 0 ||
+		g_access( global.conf->configdir, W_OK ) != 0 )
 		log_message( LOGLVL_WARNING, "Permission problem: Can't read/write from/to `%s'.", global.conf->configdir );
 }
 
@@ -372,7 +383,7 @@
 	g_snprintf( path, sizeof( path ) - 2, "%s%s%s", global.conf->configdir, path2, ".xml" );
 	g_free( path2 );
 	
-	if( !overwrite && g_file_test( path, G_FILE_TEST_EXISTS ) )
+	if( !overwrite && g_access( path, F_OK ) == 0 )
 		return STORAGE_ALREADY_EXISTS;
 	
 	strcat( path, "~" );

bitlbee-1.2.1-libresolv.patch:

--- NEW FILE bitlbee-1.2.1-libresolv.patch ---
Patch by Robert Scheck <robert at fedoraproject.org>, based on a patch by Matěj Cepl
<mcepl at redhat.com> for bitlbee >= 1.2, to avoid static linking to a private glibc
function, normally visible as libc.so.6(GLIBC_PRIVATE) in the binary RPM package.

Unfortunately, this patch gets not accepted by upstream, as they're fine with the
static linking. The former try with libbind has the problem, that it breaks, once
the file transfer patch is added, because of libbind apparently all symbols which
are synonyms between glibc and libbind came from libbind, which made some nasty
surprises when e.g. getaddrinfo from libbind returned different error codes than
getaddrinfo from glibc.

A few more information and details regarding are mentioned in Red Hat Bugzilla ID
#439047, see: https://bugzilla.redhat.com/show_bug.cgi?id=439047

--- bitlbee-1.2.1/configure			2008-06-10 01:09:06.000000000 +0200
+++ bitlbee-1.2.1/configure.libresolv		2008-06-28 17:24:15.000000000 +0200
@@ -340,10 +344,10 @@
 
 echo 'SSL_CLIENT=ssl_'$ssl'.o' >> Makefile.settings
 
-for i in /lib /usr/lib /usr/local/lib; do
-	if [ -f $i/libresolv.a ]; then
+for i in /lib64 /usr/lib64 /usr/local/lib64 /lib /usr/lib /usr/local/lib; do
+	if [ -f $i/libresolv.so ]; then
 		echo '#define HAVE_RESOLV_A' >> config.h
-		echo 'EFLAGS+='$i'/libresolv.a' >> Makefile.settings
+		echo 'EFLAGS+=-lresolv' >> Makefile.settings
 		break
 	fi
 done
--- bitlbee-1.2.1/lib/Makefile			2008-03-02 18:10:16.000000000 +0100
+++ bitlbee-1.2.1/lib/Makefile.libresolv	2008-06-28 17:24:51.000000000 +0200
@@ -9,7 +9,7 @@
 -include ../Makefile.settings
 
 # [SH] Program variables
-objects = arc.o base64.o $(EVENT_HANDLER) http_client.o ini.o md5.o misc.o proxy.o sha1.o $(SSL_CLIENT) url.o xmltree.o
+objects = arc.o base64.o $(EVENT_HANDLER) http_client.o ini.o md5.o misc.o proxy.o sha1.o srv.o $(SSL_CLIENT) url.o xmltree.o
 
 CFLAGS += -Wall
 LFLAGS += -r
--- bitlbee-1.2.1/lib/misc.c			2008-06-22 14:23:46.000000000 +0200
+++ bitlbee-1.2.1/lib/misc.c.libresolv		2008-06-28 17:25:44.000000000 +0200
@@ -43,6 +43,7 @@
 #ifdef HAVE_RESOLV_A
 #include <arpa/nameser.h>
 #include <resolv.h>
+#include <netinet/in.h>
 #endif
 
 #include "ssl_client.h"
@@ -465,58 +466,6 @@
 	return 0;
 }
 
-struct ns_srv_reply *srv_lookup( char *service, char *protocol, char *domain )
-{	
-	struct ns_srv_reply *reply = NULL;
-#ifdef HAVE_RESOLV_A
-	char name[1024];
-	unsigned char querybuf[1024];
-	const unsigned char *buf;
-	ns_msg nsh;
-	ns_rr rr;
-	int i, len, size;
-	
-	g_snprintf( name, sizeof( name ), "_%s._%s.%s", service, protocol, domain );
-	
-	if( ( size = res_query( name, ns_c_in, ns_t_srv, querybuf, sizeof( querybuf ) ) ) <= 0 )
-		return NULL;
-	
-	if( ns_initparse( querybuf, size, &nsh ) != 0 )
-		return NULL;
-	
-	if( ns_parserr( &nsh, ns_s_an, 0, &rr ) != 0 )
-		return NULL;
-	
-	size = ns_rr_rdlen( rr );
-	buf = ns_rr_rdata( rr );
-	
-	len = 0;
-	for( i = 6; i < size && buf[i]; i += buf[i] + 1 )
-		len += buf[i] + 1;
-	
-	if( i > size )
-		return NULL;
-	
-	reply = g_malloc( sizeof( struct ns_srv_reply ) + len );
-	memcpy( reply->name, buf + 7, len );
-	
-	for( i = buf[6]; i < len && buf[7+i]; i += buf[7+i] + 1 )
-		reply->name[i] = '.';
-	
-	if( i > len )
-	{
-		g_free( reply );
-		return NULL;
-	}
-	
-	reply->prio = ( buf[0] << 8 ) | buf[1];
-	reply->weight = ( buf[2] << 8 ) | buf[3];
-	reply->port = ( buf[4] << 8 ) | buf[5];
-#endif
-	
-	return reply;
-}
-
 /* Word wrapping. Yes, I know this isn't UTF-8 clean. I'm willing to take the risk. */
 char *word_wrap( char *msg, int line_len )
 {
--- bitlbee-1.2.1/lib/misc.h			2008-06-22 14:23:46.000000000 +0200
+++ bitlbee-1.2.1/lib/misc.h.libresolv		2008-06-28 17:26:24.000000000 +0200
@@ -28,14 +28,7 @@
 
 #include <gmodule.h>
 #include <time.h>
-
-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 );
--- bitlbee-1.2.1/lib/srv.c			1970-01-01 01:00:00.000000000 +0100
+++ bitlbee-1.2.1/lib/srv.c.libresolv		2008-06-28 17:28:45.000000000 +0200
@@ -0,0 +1,237 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#undef TEST
+
+#ifdef TEST
+#define HAVE_RESOLV_A
+#endif
+
+#include <config.h>
+#include <sys/types.h>
+
+#include <unistd.h>
+#include <stdlib.h>
+#include <string.h>
+#include <time.h>
+
+#include "srv.h"
+#include <glib.h>
+#include <glib/gprintf.h>
+#include <glib/gutils.h>
+
+/* 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->prio<sb->prio)
+		return -1;
+	else
+		return 0;
+}
+
+struct ns_srv_reply *srv_lookup(char *service, char *protocol, char *domain) {
+	struct ns_srv_reply *reply = NULL;
+	struct ns_srv_reply *list;
+	char name[1024];
+#ifdef HAVE_RESOLV_A
+	unsigned char answer[PACKETSZ];
+	int r, srvcount=0;
+	unsigned char *pt, *emsg;
+	int count, dlen;
+
+    list = NULL;
+
+	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 (r<sizeof(HEADER) || r>PACKETSZ)
+		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 && pt<emsg) {
+			struct ns_srv_reply *srv=NULL;
+			int type, class;
+
+			list=g_realloc(list, (srvcount+1)*sizeof(struct ns_srv_reply));
+			memset(&list[srvcount], 0, sizeof(struct ns_srv_reply));
+			srv=&list[srvcount];
+			srvcount++;
+
+			rc=dn_skipname(pt, emsg); /* the name we just queried for */
+			if (rc==-1)
+				goto fail;
+			pt+=rc;
+
+			/* Truncated message? */
+			if ((emsg-pt)<16)
+				goto fail;
+
+			type=*pt++ << 8;
+			type|=*pt++;
+			/* We asked for SRV and got something else !? */
+			if (type!=T_SRV)
+				goto fail;
+
+			class=*pt++ << 8;
+			class|=*pt++;
+			/* We asked for IN and got something else !? */
+			if (class!=C_IN)
+				goto fail;
+
+			pt+=4; /* ttl */
+			dlen=*pt++ << 8;
+			dlen|=*pt++;
+			srv->prio=*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; i<srvcount; i++) {
+			int j;
+
+			for (j=i; j<srvcount && list[i].prio==list[j].prio; j++) {
+				if (list[j].weight==0) {
+					/* Swap j with i */
+					if (j!=i) {
+						struct ns_srv_reply temp;
+
+						memcpy(&temp, &list[j], sizeof(struct ns_srv_reply));
+						memcpy(&list[j], &list[i], sizeof(struct ns_srv_reply));
+						memcpy(&list[i], &temp, sizeof(struct ns_srv_reply));
+					}
+
+					break;
+				}
+			}
+		}
+
+		/* Run the RFC-2782 weighting algorithm.  We don't need very
+		 high quality randomness for this, so regular libc srand/rand
+		 is sufficient. */
+		srand(time(NULL)*getpid());
+
+		for (i=0; i<srvcount; i++) {
+			int j;
+			float prio_count=0, chose;
+
+			for (j=i; j<srvcount && list[i].prio==list[j].prio; j++) {
+				prio_count+=list[j].weight;
+				list[j].run_count=prio_count;
+			}
+
+			chose=prio_count*rand()/RAND_MAX;
+
+			for (j=i; j<srvcount && list[i].prio==list[j].prio; j++) {
+				if (chose<=list[j].run_count) {
+					/* Swap j with i */
+					if (j!=i) {
+						struct ns_srv_reply temp;
+
+						memcpy(&temp, &list[j], sizeof(struct ns_srv_reply));
+						memcpy(&list[j], &list[i], sizeof(struct ns_srv_reply));
+						memcpy(&list[i], &temp, sizeof(struct ns_srv_reply));
+					}
+					break;
+				}
+			}
+		}
+	}
+
+	/* TODO: bitlbee should expect a situation when more than one server
+	 * is available for the given SRV record.
+	 */
+	reply = g_malloc(sizeof(struct ns_srv_reply));
+	*reply = *list;
+	g_free(list);
+	/* list=NULL; */
+#endif /* HAVE_RESOLV_A */
+	return reply;
+
+	noanswer: g_free(list);
+	list=NULL;
+	return NULL;
+
+	fail: g_free(list);
+	list=NULL;
+	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");
+	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);
+
+	return 0;
+}
+#endif /* TEST */
--- bitlbee-1.2.1/lib/srv.h			1970-01-01 01:00:00.000000000 +0100
+++ bitlbee-1.2.1/lib/srv.h.libresolv		2008-06-28 17:29:39.000000000 +0200
@@ -0,0 +1,49 @@
+/* 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 <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef GNUPG_COMMON_SRV_H
+#define GNUPG_COMMON_SRV_H
+
+#ifdef HAVE_RESOLV_A
+# ifdef _WIN32
+#  include <windows.h>
+# else
+#  include <netinet/in.h>
+#  include <arpa/nameser.h>
+#  include <resolv.h>
+# endif /* !_WIN32 */
+#endif /* USE_DNS_SRV */
+
+
+#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*/


Index: .cvsignore
===================================================================
RCS file: /cvs/extras/rpms/bitlbee/EL-4/.cvsignore,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- .cvsignore	15 Apr 2008 18:03:55 -0000	1.4
+++ .cvsignore	7 Jul 2008 17:59:30 -0000	1.5
@@ -1 +1 @@
-bitlbee-1.2.tar.gz
+bitlbee-1.2.1.tar.gz


Index: bitlbee.spec
===================================================================
RCS file: /cvs/extras/rpms/bitlbee/EL-4/bitlbee.spec,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- bitlbee.spec	15 Apr 2008 18:03:55 -0000	1.4
+++ bitlbee.spec	7 Jul 2008 17:59:30 -0000	1.5
@@ -1,17 +1,18 @@
 Summary:           IRC to other chat networks gateway
 Name:              bitlbee
-Version:           1.2
+Version:           1.2.1
 Release:           1%{?dist}
 License:           GPLv2+ and MIT
 Group:             System Environment/Daemons
 URL:               http://www.bitlbee.org/
 Source0:           http://get.bitlbee.org/src/%{name}-%{version}.tar.gz
 Source1:           bitlbee.xinetd
-Patch0:            bitlbee-1.2-gmalloc.patch
+Patch0:            bitlbee-1.2.1-libresolv.patch
+Patch1:            bitlbee-1.2.1-gaccess.patch
 Requires:          xinetd
 Requires(pre):     shadow-utils
 Requires(preun):   /sbin/service
-BuildRequires:     glib2-devel >= 2.4, libxslt, %{_includedir}/bind/arpa/nameser.h
+BuildRequires:     glib2-devel >= 2.4, libxslt
 %if 0%{?rhl}%{?fedora}%{?rhel}
 BuildRequires:     gnutls-devel
 %else
@@ -26,7 +27,8 @@
 
 %prep
 %setup -q
-%patch0 -p1 -b .gmalloc
+%patch0 -p1 -b .libresolv
+%patch1 -p1 -b .gaccess
 
 perl -pi.make -e '
                 s|\$\(BINDIR\)|\$(sbindir)|g;
@@ -51,7 +53,6 @@
         --ssl=openssl
 %endif
 
-sed -i 's/EFLA.*libres.*/EFLAGS+=-lbind/' Makefile.settings
 make %{?_smp_mflags}
 
 %install
@@ -96,6 +97,9 @@
 %attr(0700,bitlbee,bitlbee) %dir %{_localstatedir}/lib/%{name}
 
 %changelog
+* Mon Jul 07 2008 Robert Scheck <robert at fedoraproject.org> 1.2.1-1
+- Upgrade to 1.2.1 (thanks to Matěj Cepl)
+
 * Tue Apr 15 2008 Robert Scheck <robert at fedoraproject.org> 1.2-1
 - Upgrade to 1.2 (#439047, thanks to Matěj Cepl)
 


Index: sources
===================================================================
RCS file: /cvs/extras/rpms/bitlbee/EL-4/sources,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -r1.4 -r1.5
--- sources	15 Apr 2008 18:03:55 -0000	1.4
+++ sources	7 Jul 2008 17:59:30 -0000	1.5
@@ -1 +1 @@
-15d969391dd9bbbc9bb0d397b545a99c  bitlbee-1.2.tar.gz
+ca00f65aea89903ba78321eac00f7849  bitlbee-1.2.1.tar.gz


--- bitlbee-1.2-gmalloc.patch DELETED ---




More information about the fedora-extras-commits mailing list