rpms/nut/F-7 nut-ipv6.patch,1.3,1.4 nut.spec,1.46,1.47

Tomas Smetana (tsmetana) fedora-extras-commits at redhat.com
Tue Nov 6 12:50:16 UTC 2007


Author: tsmetana

Update of /cvs/pkgs/rpms/nut/F-7
In directory cvs-int.fedora.redhat.com:/tmp/cvs-serv1395

Modified Files:
	nut-ipv6.patch nut.spec 
Log Message:
* Tue Oct 16 2007 Tomas Smetana <tsmetana at redhat.com> 2.0.5-6
- fix #330741 upsd ignoring ACL in upsd.conf - backported access.c


nut-ipv6.patch:

Index: nut-ipv6.patch
===================================================================
RCS file: /cvs/pkgs/rpms/nut/F-7/nut-ipv6.patch,v
retrieving revision 1.3
retrieving revision 1.4
diff -u -r1.3 -r1.4
--- nut-ipv6.patch	23 Jan 2007 16:34:01 -0000	1.3
+++ nut-ipv6.patch	6 Nov 2007 12:50:12 -0000	1.4
@@ -1,83 +1,169 @@
---- nut-2.0.5/server/access.c.IPv6	2005-01-27 09:33:14.000000000 -0500
-+++ nut-2.0.5/server/access.c	2007-01-23 10:11:31.000000000 -0500
-@@ -25,33 +25,72 @@
+--- nut-2.0.5/server/ctype.h.IPv6	2005-01-27 15:33:14.000000000 +0100
++++ nut-2.0.5/server/ctype.h	2007-10-15 10:30:38.000000000 +0200
+@@ -32,7 +32,7 @@
+ 	char	*addr;
+ 	int	fd;
+ 	int	delete;			/* set after a write fails */
+-	struct sockaddr_in sock;
++	struct sockaddr_storage sock;
+ 	char	rq[SMALLBUF];
+ 	size_t	rqpos;
+ 	char	*loginups;
+--- nut-2.0.5/server/user.h.IPv6	2005-01-27 15:33:14.000000000 +0100
++++ nut-2.0.5/server/user.h	2007-10-15 10:30:38.000000000 +0200
+@@ -19,10 +19,10 @@
+ 
+ void user_load(void);
+ 
+-int user_checkinstcmd(const struct sockaddr_in *addr,
++int user_checkinstcmd(const struct sockaddr_storage *addr,
+ 	const char *un, const char *pw, const char *cmd);
+ 
+-int user_checkaction(const struct sockaddr_in *addr,
++int user_checkaction(const struct sockaddr_storage *addr,
+ 	const char *un, const char *pw, const char *action);
+ 
+ void user_flush(void);
+--- nut-2.0.5/server/access.h.IPv6	2005-01-27 15:33:14.000000000 +0100
++++ nut-2.0.5/server/access.h	2007-10-15 10:30:38.000000000 +0200
+@@ -26,8 +26,8 @@
+ /* ACL structure */
+ struct acl_t {
+ 	char	*name;
+-	unsigned int	addr;
+-	unsigned int	mask;
++	struct sockaddr_storage	addr;
++	unsigned int	mask; /* prefix - if IPv6 */
+ 	void	*next;
+ };
+ 
+@@ -38,8 +38,8 @@
+ 	void	*next;
+ };
+ 
+-int acl_check(const char *aclname, const struct sockaddr_in *addr);
+-int access_check(const struct sockaddr_in *addr);
++int acl_check(const char *aclname, const struct sockaddr_storage *addr);
++int access_check(const struct sockaddr_storage *addr);
+ void acl_add(const char *aclname, char *ipblock);
+ void access_add(int type, int numargs, const char **arg);
+ void acl_free(void);
+--- nut-2.0.5/server/user.c.IPv6	2005-01-27 15:33:14.000000000 +0100
++++ nut-2.0.5/server/user.c	2007-10-15 10:30:38.000000000 +0200
+@@ -290,7 +290,7 @@
+ 	users = NULL;
+ }	
+ 
+-static int user_matchacl(ulist_t *user, const struct sockaddr_in *addr)
++static int user_matchacl(ulist_t *user, const struct sockaddr_storage *addr)
+ {
+ 	acllist	*tmp;
+ 
+@@ -328,7 +328,7 @@
+ 	return 0;	/* fail */
+ }
+ 
+-int user_checkinstcmd(const struct sockaddr_in *addr, 
++int user_checkinstcmd(const struct sockaddr_storage *addr, 
+ 	const char *un, const char *pw, const char *cmd)
+ {
+ 	ulist_t	*tmp = users;
+@@ -385,7 +385,7 @@
+ 	return 0;	/* fail */
+ }
+ 
+-int user_checkaction(const struct sockaddr_in *addr, 
++int user_checkaction(const struct sockaddr_storage *addr, 
+ 	const char *un, const char *pw, const char *action)
+ {
+ 	ulist_t	*tmp = users;
+--- nut-2.0.5/server/access.c.IPv6	2005-01-27 15:33:14.000000000 +0100
++++ nut-2.0.5/server/access.c	2007-10-16 15:05:27.000000000 +0200
+@@ -17,6 +17,7 @@
+    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
+ 
++#include <stdint.h>
+ #include <sys/types.h>
+ #include <sys/socket.h>
+ #include <netinet/in.h>
+@@ -25,51 +26,84 @@
  #include "common.h"
  #include "access.h"
  
 -	struct 	acl_t	*acl_head = NULL;
 -	struct	access_t	*access_head = NULL;
-+struct 	acl_t	*acl_head = NULL;
-+struct	access_t	*access_head = NULL;
-+
-+/*
-+ *  Stolen from privoxy code :]
-+ */
-+int mask_cmp (const struct sockaddr_storage* ip_addr, unsigned int prefix, const struct sockaddr_storage* net_addr) {
-+	switch (ip_addr->ss_family) {
-+	case AF_INET:
-+		return((((struct sockaddr_in*)ip_addr)->sin_addr.s_addr & htonl(prefix)) == ((struct sockaddr_in*)net_addr)->sin_addr.s_addr);
-+		break;
-+	case AF_INET6:
-+		if (AF_INET6 == net_addr->ss_family) {
-+			struct in6_addr ip, net;
-+			register unsigned char i;
-+			
-+			memcpy (&ip, &((struct sockaddr_in6 *)ip_addr)->sin6_addr, sizeof (struct in6_addr));
-+			memcpy (&net, &((struct sockaddr_in6 *)net_addr)->sin6_addr, sizeof (struct in6_addr));
-+			
-+			i = prefix/8;
-+			if (prefix%8)
-+				ip.s6_addr[i++] &= 0xff<<(8-(prefix%8));
-+			for (; i < sizeof ip.s6_addr; i++)
-+				ip.s6_addr[i] = 0;
-+			
-+			return (memcmp (ip.s6_addr, net.s6_addr, sizeof ip.s6_addr)==0);
-+		}
-+		else if (AF_INET == net_addr->ss_family) { /* IPv4 mapped IPv6 */
-+			struct in6_addr *ip6 = &((struct sockaddr_in6 *)ip_addr)->sin6_addr;
-+			struct in_addr *net = &((struct sockaddr_in *)net_addr)->sin_addr;
-+			
-+			if ((ip6->s6_addr32[3] & (u_int32_t)prefix) == net->s_addr &&
-+#if BYTE_ORDER == LITTLE_ENDIAN
-+					(ip6->s6_addr32[2] == (u_int32_t)0xffff0000) &&
-+#else
-+					(ip6->s6_addr32[2] == (u_int32_t)0x0000ffff) &&
-+#endif
-+					(ip6->s6_addr32[1] == 0) && (ip6->s6_addr32[0] == 0))
-+				return(1);
-+			else
-+				return(0); 
-+		}
-+	default:
-+		fatal_with_errno ("mask_cmp: Unknown address family");
-+		return(0);
-+	}
-+}
++struct acl_t		*acl_head = NULL;
++struct access_t	*access_head = NULL;
  
- /* see if <addr> matches the acl <aclname> */
+-/* see if <addr> matches the acl <aclname> */
 -int acl_check(const char *aclname, const struct sockaddr_in *addr)
-+int acl_check(const char *aclname, const struct sockaddr_storage *addr)
++static int mask_cmp (const struct sockaddr_storage *ip_addr,
++		const struct sockaddr_storage *net_addr, unsigned int prefix)
  {
- 	struct	acl_t	*tmp;
+-	struct	acl_t	*tmp;
 -	int	aclchk, addrchk;
++	if (ip_addr->ss_family == AF_INET)
++	{
++		struct in_addr	*ip  = &((struct sockaddr_in *)ip_addr)->sin_addr;
++		struct in_addr	*net = &((struct sockaddr_in *)net_addr)->sin_addr;
  
- 	tmp = acl_head;
- 	while (tmp != NULL) {
+-	tmp = acl_head;
+-	while (tmp != NULL) {
 -		if (!strcmp(tmp->name, aclname)) {
 -			aclchk = tmp->addr & tmp->mask;
 -			addrchk = ntohl(addr->sin_addr.s_addr) & tmp->mask;
--
++		return ((ip->s_addr & prefix) == net->s_addr);
++	}
+ 
 -			if (aclchk == addrchk) 
 -				return 1;	/* match */
 -		}
--
-+		if (!strcmp(tmp->name, aclname))
-+			if (mask_cmp (addr, tmp->mask, &tmp->addr))
-+				return 1;
- 		tmp = tmp->next;
- 	}
--
++	if ((ip_addr->ss_family == AF_INET6) && (net_addr->ss_family == AF_INET6))
++	{
++		struct in6_addr	ip6;
++		struct in6_addr	*net = &((struct sockaddr_in6 *)net_addr)->sin6_addr;
++		unsigned char		i = (prefix >> 3);
++		
++		memcpy (&ip6, &((struct sockaddr_in6 *)ip_addr)->sin6_addr, sizeof (struct in6_addr));
++			
++		if (prefix % 8)
++			ip6.s6_addr[i++] &= 0xff << (8 - (prefix % 8));
+ 
+-		tmp = tmp->next;
++		while (i < sizeof(ip6.s6_addr))
++			ip6.s6_addr[i++] = 0;
++
 +	
++		return (memcmp(ip6.s6_addr, net->s6_addr, sizeof(ip6.s6_addr)) == 0);
++	}
++
++	if ((ip_addr->ss_family == AF_INET6) && (net_addr->ss_family == AF_INET))
++	{
++		struct in6_addr	*ip6 = &((struct sockaddr_in6 *)ip_addr)->sin6_addr;
++		struct in_addr		*net = &((struct sockaddr_in *)net_addr)->sin_addr;
++			
++		return (IN6_IS_ADDR_V4MAPPED(ip6) &&
++			((((const uint32_t *)ip6)[3] & prefix) == net->s_addr));
++	}
++
++	fatal_with_errno(EXIT_FAILURE, "mask_cmp: Unknown address family");
++}
++
++/* see if <addr> matches the acl <aclname> */
++int acl_check(const char *aclname, const struct sockaddr_storage *addr)
++{
++	struct acl_t	*tmp;
++
++	for (tmp = acl_head; tmp != NULL; tmp = tmp->next)
++	{
++		if (strcmp(tmp->name, aclname))
++			continue;
++
++		if (mask_cmp(addr, &tmp->addr, tmp->mask))
++			return 1;	/* match */
+ 	}
+ 
  	return 0;	/* not found */
  }
  
@@ -85,15 +171,81 @@
 -int access_check(const struct sockaddr_in *addr)
 +int access_check(const struct sockaddr_storage *addr)
  {
- 	struct	access_t	*tmp;
+-	struct	access_t	*tmp;
++	struct access_t	*tmp;
  	int	ret;
-@@ -108,21 +147,83 @@
+ 
+-	tmp = access_head;
+-
+-	while (tmp != NULL) {
++	for (tmp = access_head; tmp != NULL; tmp = tmp->next)
++	{
+ 		ret = acl_check(tmp->aclname, addr);
+ 
+ 		upsdebugx(3, "acl_check: %s: match %d", tmp->aclname, ret);
+ 
+ 		if (ret == 1) {
+-			upsdebugx(1, "ACL [%s] matches, action=%d", 
++			upsdebugx(1, "ACL [%s] matches, action=%d",
+ 				tmp->aclname, tmp->action);
+ 			return tmp->action;
+ 		}
+-
+-		tmp = tmp->next;
+ 	}
+ 
+ 	/* fail safe */
+@@ -79,50 +113,120 @@
+ /* add to the master list of ACL names */
+ void acl_add(const char *aclname, char *ipblock)
+ {
+-	struct	acl_t	*tmp, *last;
+-	char	*addr, *mask;
++	struct acl_t	*tmp, *last;
++	char		*addr, *mask;
+ 
+ 	/* are we sane? */
+ 	if ((!aclname) || (!ipblock))
+ 		return;
+ 
+-	/* ipblock must be in the form <addr>/<mask>	*/
+-
+-	mask = strchr(ipblock, '/');
+-
+-	/* 192.168.1.1/32: valid */
+-	/* 192.168.1.1/255.255.255.255: valid */
+-	/* 192.168.1.1: invalid */
+-
+-	/* no slash = broken acl declaration */
+-	if (!mask) 	
+-		return;
+-
+-	*mask++ = '\0';
+-	addr = ipblock;
++	/*
++	 * 192.168.1.1/32			valid
++	 * 192.168.1.1/255.255.255.255	valid
++	 * 192.168.1.1			invalid
++	 * ::FFFF:192.168.1.0/120		valid
++	 * ::FFFF:192.168.1.1		invalid
++	 * ::1/128				valid
++	 * ::1					invalid
++	 */
++	if (((addr = strtok(ipblock, "/")) == NULL) || ((mask = strtok(NULL, "\0")) == NULL))
++		fatalx(EXIT_FAILURE, "Can't parse ACL %s %s", aclname, ipblock);
+ 
+ 	tmp = last = acl_head;
+ 
+-	while (tmp != NULL) {
++	while (tmp != NULL)
++	{
+ 		last = tmp;
  		tmp = tmp->next;
  	}
  
-+	//memset (&saddr, 0, sizeof (struct sockaddr_storage));
++	/* memset (&saddr, 0, sizeof (struct sockaddr_storage)); */
  	tmp = xmalloc(sizeof(struct acl_t));
-+	memset (tmp, 0, sizeof (struct acl_t));
++	memset(tmp, 0, sizeof (struct acl_t));
  	tmp->name = xstrdup(aclname);
 -	tmp->addr = ntohl(inet_addr(addr));
  	tmp->next = NULL;
@@ -103,141 +255,149 @@
 -		if (atoi(mask) != 32)
 -			tmp->mask = ((unsigned int) ((1 << atoi(mask)) - 1) << 
 -					(32 - atoi(mask)));
--		else
--			tmp->mask = 0xffffffff;	/* avoid overflow from 2^32 */
-+	if (*addr == '[') { 
-+		struct sockaddr_in6 s6;
-+		char *stmp;
++	if (strstr(addr, ":") == NULL)
++	{
++		struct sockaddr_in	s4;	/* IPv4 address */
 +
-+		stmp = strchr (addr, ']');
-+		if (stmp == NULL) {
-+			free (tmp);
-+			fatal_with_errno("Expecting \']\' in \"%s\"", addr);
-+		}
++		/* mask */
++		if (inet_pton(AF_INET, mask, &s4.sin_addr) < 1)
++		{
++			/* must be a /nn CIDR type block */
++			tmp->mask = strtol(mask, NULL, 10);
 +
-+		*stmp = '\0';
-+		addr++;
-+		
-+		memset (&s6, 0, sizeof (struct sockaddr_in6));
-+		s6.sin6_family = AF_INET6;
++			if (tmp->mask < 0 || tmp->mask > 32)
++			{
++				free (tmp);
++				fatal_with_errno(EXIT_FAILURE, "Invalid CIDR type block: Must be > 0 && < 32");
++			}
 +
-+		if (inet_pton (AF_INET6, addr, &s6.sin6_addr) < 1) {
-+			free (tmp);
-+			fatal_with_errno ("Invalid IPv6 address: \"%s\"", addr);
++			tmp->mask = htonl(0xffffffff << (32 - tmp->mask));
++		}
+ 		else
+-			tmp->mask = 0xffffffff;	/* avoid overflow from 2^32 */
++		{
++			/* must be a n.n.n.n dotted quad block */
++			tmp->mask = s4.sin_addr.s_addr;
 +		}
 +
-+		/* prefix */
-+		tmp->mask = strtol (mask, NULL, 10);
++		/* address */
++		memset(&s4, 0, sizeof (struct sockaddr_in));
++		s4.sin_family = AF_INET;
 +
-+		if (tmp->mask < 0 || tmp->mask > 128) {
-+			free (tmp);
-+			fatal_with_errno ("Invalid IPv6 prefix");
++		/* apply mask to address */
++		if (inet_pton(AF_INET, addr, &s4.sin_addr) < 1)
++		{
++			free(tmp);
++			fatal_with_errno(EXIT_FAILURE, "Invalid IPv4 address: \"%s\"", addr);
++		}
++		else
++		{
++			s4.sin_addr.s_addr &= tmp->mask;
 +		}
 +
-+		{ register unsigned char i;
-+			i = (tmp->mask)/8;
-+			if ((tmp->mask)%8)
-+				s6.sin6_addr.s6_addr[i++] &= 0xff<<(8-((tmp->mask)%8));
-+			for (; i < sizeof s6.sin6_addr.s6_addr; i++)
-+				s6.sin6_addr.s6_addr[i] = 0;
-+		}
++		memcpy(&(tmp->addr), &s4, sizeof(struct sockaddr_in));
 +
-+		memcpy (&(tmp->addr), &s6, sizeof (struct sockaddr_in6));
-+		//tmp->addr.ss_len = sizeof (struct sockaddr_in6);
-+		tmp->addr.ss_family = AF_INET6;
-+	} else {
-+		struct sockaddr_in s4;
++		tmp->addr.ss_family = AF_INET;
+ 	}
+ 	else
+-		tmp->mask = ntohl(inet_addr(mask));
++	{
++		struct sockaddr_in6	s6;	/* IPv6 address */
 +
-+		/* mask */
-+		if (inet_pton (AF_INET, mask, &s4.sin_addr) < 1) {
-+			/* must be a /nn CIDR type block */
-+			tmp->mask = strtol (mask, NULL, 10);
++		/* prefix */
++		tmp->mask = strtol(mask, NULL, 10);
 +
-+			if (tmp->mask < 0 || tmp->mask > 32) {
-+				free (tmp);
-+				fatal_with_errno ("Invalid CIDR type block: Must be > 0 && < 32");
-+			}
-+			tmp->mask = 0xffffffff << (32 - tmp->mask);
-+		} else {
-+			tmp->mask = ntohl (s4.sin_addr.s_addr);
-+		}
++		/* address */
++		memset(&s6, 0, sizeof(struct sockaddr_in6));
++		s6.sin6_family = AF_INET6;
 +
-+		memset (&s4, 0, sizeof (struct sockaddr_in));
-+		s4.sin_family = AF_INET;
++		if (inet_pton(AF_INET6, addr, &s6.sin6_addr) < 1)
++		{
++			free(tmp);
++			fatal_with_errno(EXIT_FAILURE, "Invalid IPv6 address: \"%s\"", addr);
++		}
 +
-+		if (inet_pton (AF_INET, addr, &s4.sin_addr) < 1) {
++		/* apply prefix to address */
++		if (tmp->mask < 0 || tmp->mask > 128)
++		{
 +			free (tmp);
-+			fatal_with_errno ("Invalid IPv4 address: \"%s\"", addr);
++			fatal_with_errno(EXIT_FAILURE, "Invalid IPv6 prefix");
 +		}
++		else
++		{
++			unsigned char	i = (tmp->mask >> 3);
 +
-+		s4.sin_addr.s_addr &= htonl (tmp->mask);
++			if ((tmp->mask) % 8)
++				s6.sin6_addr.s6_addr[i++] &= 0xff << (8 - ((tmp->mask) % 8));
 +
-+		memcpy (&(tmp->addr), &s4, sizeof (struct sockaddr_in));
-+		//tmp->addr.ss_len = sizeof (struct sockaddr_in);
-+		tmp->addr.ss_family = AF_INET;
- 	}
--	else
--		tmp->mask = ntohl(inet_addr(mask));
++			while (i < sizeof(s6.sin6_addr.s6_addr))
++				s6.sin6_addr.s6_addr[i++] = 0;
++		}
++
++		memcpy(&(tmp->addr), &s6, sizeof(struct sockaddr_in6));
++
++		tmp->addr.ss_family = AF_INET6;
++	}
  
  	if (last == NULL)	/* first */
  		acl_head = tmp;
---- nut-2.0.5/server/user.c.IPv6	2005-01-27 09:33:14.000000000 -0500
-+++ nut-2.0.5/server/user.c	2007-01-23 10:11:31.000000000 -0500
-@@ -290,7 +290,7 @@
- 	users = NULL;
- }	
+@@ -132,15 +236,15 @@
  
--static int user_matchacl(ulist_t *user, const struct sockaddr_in *addr)
-+static int user_matchacl(ulist_t *user, const struct sockaddr_storage *addr)
+ void acl_free(void)
  {
- 	acllist	*tmp;
+-	struct	acl_t	*ptr, *next;
++	struct acl_t	*ptr, *next;
  
-@@ -328,7 +328,7 @@
- 	return 0;	/* fail */
- }
+ 	ptr = acl_head;
  
--int user_checkinstcmd(const struct sockaddr_in *addr, 
-+int user_checkinstcmd(const struct sockaddr_storage *addr, 
- 	const char *un, const char *pw, const char *cmd)
- {
- 	ulist_t	*tmp = users;
-@@ -385,7 +385,7 @@
- 	return 0;	/* fail */
- }
+-	while (ptr) {
++	while (ptr)
++	{
+ 		next = ptr->next;
+ 		
+-		if (ptr->name)
+-			free(ptr->name);
++		free(ptr->name);
+ 		free(ptr);
  
--int user_checkaction(const struct sockaddr_in *addr, 
-+int user_checkaction(const struct sockaddr_storage *addr, 
- 	const char *un, const char *pw, const char *action)
+ 		ptr = next;
+@@ -151,15 +255,15 @@
+ 
+ void access_free(void)
  {
- 	ulist_t	*tmp = users;
---- nut-2.0.5/server/user.h.IPv6	2005-01-27 09:33:14.000000000 -0500
-+++ nut-2.0.5/server/user.h	2007-01-23 10:11:31.000000000 -0500
-@@ -19,10 +19,10 @@
+-	struct	access_t	*ptr, *next;
++	struct access_t	*ptr, *next;
  
- void user_load(void);
+ 	ptr = access_head;
  
--int user_checkinstcmd(const struct sockaddr_in *addr,
-+int user_checkinstcmd(const struct sockaddr_storage *addr,
- 	const char *un, const char *pw, const char *cmd);
+-	while (ptr) {
++	while (ptr)
++	{
+ 		next = ptr->next;
  
--int user_checkaction(const struct sockaddr_in *addr,
-+int user_checkaction(const struct sockaddr_storage *addr,
- 	const char *un, const char *pw, const char *action);
+-		if (ptr->aclname)
+-			free(ptr->aclname);
++		free(ptr->aclname);
+ 		free(ptr);
  
- void user_flush(void);
---- nut-2.0.5/server/ctype.h.IPv6	2005-01-27 09:33:14.000000000 -0500
-+++ nut-2.0.5/server/ctype.h	2007-01-23 10:11:31.000000000 -0500
-@@ -32,7 +32,7 @@
- 	char	*addr;
- 	int	fd;
- 	int	delete;			/* set after a write fails */
--	struct sockaddr_in sock;
-+	struct sockaddr_storage sock;
- 	char	rq[SMALLBUF];
- 	size_t	rqpos;
- 	char	*loginups;
---- nut-2.0.5/server/upsd.c.IPv6	2006-12-29 16:29:35.000000000 -0500
-+++ nut-2.0.5/server/upsd.c	2007-01-23 10:11:31.000000000 -0500
+ 		ptr = next;
+@@ -170,11 +274,12 @@
+ 
+ static void access_append(int action, const char *aclname)
+ {
+-	struct	access_t	*tmp, *last;
++	struct access_t	*tmp, *last;
+ 
+ 	tmp = last = access_head;
+ 
+-	while (tmp != NULL) {
++	while (tmp != NULL)
++	{
+ 		last = tmp;
+ 		tmp = tmp->next;
+ 	}
+--- nut-2.0.5/server/upsd.c.IPv6	2006-12-29 22:29:35.000000000 +0100
++++ nut-2.0.5/server/upsd.c	2007-10-15 10:30:38.000000000 +0200
 @@ -26,6 +26,7 @@
  
  #include <sys/un.h>
@@ -457,55 +617,8 @@
  			default:
  				help(progname);
  				break;
---- nut-2.0.5/server/access.h.IPv6	2005-01-27 09:33:14.000000000 -0500
-+++ nut-2.0.5/server/access.h	2007-01-23 10:11:31.000000000 -0500
-@@ -26,8 +26,8 @@
- /* ACL structure */
- struct acl_t {
- 	char	*name;
--	unsigned int	addr;
--	unsigned int	mask;
-+	struct sockaddr_storage	addr;
-+	unsigned int	mask; /* prefix - if IPv6 */
- 	void	*next;
- };
- 
-@@ -38,8 +38,8 @@
- 	void	*next;
- };
- 
--int acl_check(const char *aclname, const struct sockaddr_in *addr);
--int access_check(const struct sockaddr_in *addr);
-+int acl_check(const char *aclname, const struct sockaddr_storage *addr);
-+int access_check(const struct sockaddr_storage *addr);
- void acl_add(const char *aclname, char *ipblock);
- void access_add(int type, int numargs, const char **arg);
- void acl_free(void);
---- nut-2.0.5/clients/upsclient.h.IPv6	2005-02-28 04:14:07.000000000 -0500
-+++ nut-2.0.5/clients/upsclient.h	2007-01-23 10:11:31.000000000 -0500
-@@ -148,6 +148,8 @@
- 
- #define UPSCLI_CONN_TRYSSL	0x0001	/* try SSL, OK if not supported       */
- #define UPSCLI_CONN_REQSSL	0x0002	/* try SSL, fail if not supported     */
-+#define UPSCLI_CONN_INET    0x0004  /* IPv4 only */
-+#define UPSCLI_CONN_INET6   0x0008  /* IPv6 only */
- 
- #ifdef __cplusplus
- }
---- nut-2.0.5/clients/upsc.c.IPv6	2005-01-27 09:33:14.000000000 -0500
-+++ nut-2.0.5/clients/upsc.c	2007-01-23 10:11:31.000000000 -0500
-@@ -25,6 +25,9 @@
- 
- #include "upsclient.h"
- 
-+
-+static int opt_af = AF_UNSPEC;
-+
- static void help(const char *prog)
- {
- 	printf("Network UPS Tools upsc %s\n\n", UPS_VERSION);
---- nut-2.0.5/clients/upsclient.c.IPv6	2005-01-27 09:33:14.000000000 -0500
-+++ nut-2.0.5/clients/upsclient.c	2007-01-23 10:11:31.000000000 -0500
+--- nut-2.0.5/clients/upsclient.c.IPv6	2005-01-27 15:33:14.000000000 +0100
++++ nut-2.0.5/clients/upsclient.c	2007-10-15 10:30:38.000000000 +0200
 @@ -38,6 +38,8 @@
  #define shutdown_how 2
  #endif
@@ -730,3 +843,26 @@
  	}
  
  	return 0;
+--- nut-2.0.5/clients/upsclient.h.IPv6	2005-02-28 10:14:07.000000000 +0100
++++ nut-2.0.5/clients/upsclient.h	2007-10-15 10:30:38.000000000 +0200
+@@ -148,6 +148,8 @@
+ 
+ #define UPSCLI_CONN_TRYSSL	0x0001	/* try SSL, OK if not supported       */
+ #define UPSCLI_CONN_REQSSL	0x0002	/* try SSL, fail if not supported     */
++#define UPSCLI_CONN_INET    0x0004  /* IPv4 only */
++#define UPSCLI_CONN_INET6   0x0008  /* IPv6 only */
+ 
+ #ifdef __cplusplus
+ }
+--- nut-2.0.5/clients/upsc.c.IPv6	2005-01-27 15:33:14.000000000 +0100
++++ nut-2.0.5/clients/upsc.c	2007-10-15 10:30:38.000000000 +0200
+@@ -25,6 +25,9 @@
+ 
+ #include "upsclient.h"
+ 
++
++static int opt_af = AF_UNSPEC;
++
+ static void help(const char *prog)
+ {
+ 	printf("Network UPS Tools upsc %s\n\n", UPS_VERSION);


Index: nut.spec
===================================================================
RCS file: /cvs/pkgs/rpms/nut/F-7/nut.spec,v
retrieving revision 1.46
retrieving revision 1.47
diff -u -r1.46 -r1.47
--- nut.spec	31 Aug 2007 14:25:54 -0000	1.46
+++ nut.spec	6 Nov 2007 12:50:12 -0000	1.47
@@ -9,7 +9,7 @@
 Summary: Network UPS Tools
 Name: nut
 Version: 2.0.5
-Release: 5
+Release: 6
 Group: Applications/System
 License: GPLv2+
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
@@ -289,6 +289,9 @@
 %{_libdir}/pkgconfig/libupsclient.pc
 
 %changelog
+* Tue Oct 16 2007 Tomas Smetana <tsmetana at redhat.com> 2.0.5-6
+- fix #330741 upsd ignoring ACL in upsd.conf - backported access.c
+
 * Fri Aug 31 2007 Tomas Smetana <tsmetana at redhat.com> 2.0.5-5
 - rebuild
 




More information about the fedora-extras-commits mailing list