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