diff -Nur sysklogd-1.4.1rh-old/sysklogd.8 sysklogd-1.4.1rh/sysklogd.8
--- sysklogd-1.4.1rh-old/sysklogd.8	2001-07-08 22:17:22.000000000 -0600
+++ sysklogd-1.4.1rh/sysklogd.8	2003-10-30 19:41:55.000000000 -0700
@@ -10,6 +10,9 @@
 .RB [ " \-a "
 .I socket
 ]
+.RB [ "\-b "
+.I bind addr
+]
 .RB [ " \-d " ]
 .RB [ " \-f "
 .I config file
@@ -87,6 +90,15 @@
 described by the people from OpenBSD at
 http://www.psionic.com/papers/dns.html.
 .TP
+.BI "\-b " "bind addr"
+When running
+.B syslogd
+with the
+.B -r 
+switch, this argument allows you to specify a single IP address for
+syslogd to bind to.  By default, syslogd will bind to all available
+addresses, which may not be desirable in certain situations.
+.TP
 .B "\-d"
 Turns on debug mode.  Using this the daemon will not proceed a 
 .BR fork (2)
diff -Nur sysklogd-1.4.1rh-old/sysklogd.spec sysklogd-1.4.1rh/sysklogd.spec
--- sysklogd-1.4.1rh-old/sysklogd.spec	2003-02-07 12:45:54.000000000 -0700
+++ sysklogd-1.4.1rh/sysklogd.spec	2003-11-03 12:24:49.000000000 -0700
@@ -1,7 +1,7 @@
 Summary: System logging and kernel message trapping daemons.
 Name: sysklogd
 Version: 1.4.1
-Release: 12
+Release: 13
 Copyright: GPL
 Group: System Environment/Daemons
 Source: sysklogd-%{version}rh.tar.gz
@@ -81,6 +81,9 @@
 %{_mandir}/*/*
 
 %changelog
+* Thu Oct 30 2003 Paul Kreiner <deacon@thedeacon.org> 1.4.1-13
+- add -b switch to specify an IP address to bind to
+
 * Fri Feb  7 2003 Tim Powers <timp@redhat.com> 1.4.1-12
 - rebuild
 
diff -Nur sysklogd-1.4.1rh-old/syslogd.c sysklogd-1.4.1rh/syslogd.c
--- sysklogd-1.4.1rh-old/syslogd.c	2001-08-15 11:16:05.000000000 -0600
+++ sysklogd-1.4.1rh/syslogd.c	2003-10-30 19:41:55.000000000 -0700
@@ -726,6 +726,7 @@
 int	InetInuse = 0;		/* non-zero if INET sockets are being used */
 int	finet = -1;		/* Internet datagram socket */
 int	LogPort;		/* port number for INET connections */
+char    *BindAddr;              /* IPv4 address we will bind to */
 int	Initialized = 0;	/* set when we have initialized ourselves */
 int	MarkInterval = 20 * 60;	/* interval between marks in seconds */
 int	MarkSeq = 0;		/* mark sequence number */
@@ -830,7 +831,7 @@
 		funix[i]  = -1;
 	}
 
-	while ((ch = getopt(argc, argv, "a:dhf:l:m:np:rs:vx")) != EOF)
+	while ((ch = getopt(argc, argv, "a:b:dhf:l:m:np:rs:vx")) != EOF)
 		switch((char)ch) {
 		case 'a':
 			if (nfunix < MAXFUNIX)
@@ -838,6 +839,9 @@
 			else
 				fprintf(stderr, "Out of descriptors, ignoring %s\n", optarg);
 			break;
+                case 'b':               /* bind to specific IP address, not 0.0.0.0 */
+                        BindAddr = optarg;
+                        break;
 		case 'd':		/* debug */
 			Debug = 1;
 			break;
@@ -1179,7 +1183,7 @@
 int usage()
 {
 	fprintf(stderr, "usage: syslogd [-drvxh] [-l hostlist] [-m markinterval] [-n] [-p path]\n" \
-		" [-s domainlist] [-f conffile]\n");
+		" [-s domainlist] [-f conffile] [-b bindaddr]\n");
 	exit(1);
 }
 
@@ -1220,6 +1224,7 @@
 {
 	int fd, on = 1;
 	struct sockaddr_in sin;
+        struct in_addr inp;
 
 	fd = socket(AF_INET, SOCK_DGRAM, 0);
 	if (fd < 0) {
@@ -1227,9 +1232,18 @@
 		return fd;
 	}
 
+        memset(&inp, 0, sizeof(inp));
 	memset(&sin, 0, sizeof(sin));
 	sin.sin_family = AF_INET;
 	sin.sin_port = LogPort;
+        if (BindAddr) {
+                if (!inet_aton(BindAddr, &inp)) {
+                        logerror("inet_aton(BindAddr), suspending inet");
+                        close(fd);
+                        return -1;
+                }
+        sin.sin_addr.s_addr = inp.s_addr;
+        }
 	if (setsockopt(fd, SOL_SOCKET, SO_REUSEADDR, \
 		       (char *) &on, sizeof(on)) < 0 ) {
 		logerror("setsockopt(REUSEADDR), suspending inet");
