[netfilter-cvslog] r3783 -
branches/netfilter-ha/linux-2.6-actact/ct_sync
laforge at netfilter.org
laforge at netfilter.org
Thu Mar 10 19:23:11 CET 2005
Author: laforge at netfilter.org
Date: 2005-03-10 19:23:11 +0100 (Thu, 10 Mar 2005)
New Revision: 3783
Modified:
branches/netfilter-ha/linux-2.6-actact/ct_sync/ct_sync_main.c
Log:
fix parsing of address and syncdev / sysfs interface
Modified: branches/netfilter-ha/linux-2.6-actact/ct_sync/ct_sync_main.c
===================================================================
--- branches/netfilter-ha/linux-2.6-actact/ct_sync/ct_sync_main.c 2005-03-10 18:22:17 UTC (rev 3782)
+++ branches/netfilter-ha/linux-2.6-actact/ct_sync/ct_sync_main.c 2005-03-10 18:23:11 UTC (rev 3783)
@@ -1683,17 +1683,38 @@
} else if (ctsi->config.addr.ss_family == AF_INET) {
struct sockaddr_in *si = (struct sockaddr_in *)
&ctsi->config.addr;
- return sprintf(buf, "%d.%d.%d.%d\n", NIPQUAD(si->sin_addr));
+ return sprintf(buf, "%d.%d.%d.%d\n",
+ NIPQUAD(si->sin_addr.s_addr));
} else
return -EINVAL;
}
+static int strip_crlf(char *dst, const char *src, int len)
+{
+ int i;
+ for (i = 0; i < len; i++) {
+ if (src[i] == 0 || src[i] == '\n' || src[i] == '\r') {
+ dst[i] = 0;
+ break;
+ } else
+ dst[i] = src[i];
+ }
+ dst[len] = 0;
+ return i;
+}
+
static ssize_t sysfs_addr_store(struct ct_sync_instance *ctsi,
const char *buf, size_t len)
{
+#define MAXIPLEN 39 /* 4*4 hex chars plus 7 : */
+ char ipstrbuf[MAXIPLEN+1];
+
if (ctsi->active != 0)
return -EBUSY;
- if (strchr(buf, ':')) {
+
+ strip_crlf(ipstrbuf, buf, MAXIPLEN);
+
+ if (strchr(ipstrbuf, ':')) {
struct sockaddr_in6 *si6 = (struct sockaddr_in6 *)
&ctsi->config.addr;
si6->sin6_family = AF_INET6;
@@ -1703,8 +1724,10 @@
struct sockaddr_in *si = (struct sockaddr_in *)
&ctsi->config.addr;
si->sin_family = AF_INET;
- si->sin_addr.s_addr = in_aton(buf);
+ si->sin_addr.s_addr = in_aton(ipstrbuf);
si->sin_port = __constant_htons(1999);
+ CT_SYNC_DEBUG("setting address to %d.%d.%d.%d\n",
+ NIPQUAD(si->sin_addr.s_addr));
}
return len;
}
@@ -1719,7 +1742,7 @@
static ssize_t sysfs_syncdev_store(struct ct_sync_instance *ctsi,
const char *buf, size_t len)
{
- char syncdev[IFNAMSIZ];
+ char syncdev[IFNAMSIZ+1];
struct net_device *sync_netdev;
if (ctsi->active != 0)
@@ -1728,16 +1751,19 @@
if (len >= IFNAMSIZ)
return -E2BIG;
- strlcpy((char *)syncdev, buf, IFNAMSIZ-1);
+ strip_crlf(syncdev, buf, IFNAMSIZ);
if ((sync_netdev = dev_get_by_name(syncdev)) != NULL) {
ctsi->syncdev_ifindex = sync_netdev->ifindex;
dev_put(sync_netdev);
strlcpy(ctsi->config.syncdev, syncdev, IFNAMSIZ-1);
- } else
+ } else {
+ CT_SYNC_DEBUG("'%s' is not a valid network device\n",
+ syncdev);
return -EINVAL;
+ }
- return strlen((char *)&ctsi->config.syncdev);
+ return len;
}
static ssize_t sysfs_sendburst_show(struct ct_sync_instance *ctsi,
More information about the netfilter-cvslog
mailing list