firewall: allow local redirection of ports
[openwrt.git] / package / swconfig / src / swlib.c
index 04b3bef..c2316d0 100644 (file)
@@ -368,11 +368,26 @@ int swlib_set_attr_string(struct switch_dev *dev, struct switch_attr *a, int por
                ptr = (char *)str;
                while(ptr && *ptr)
                {
+                       while(*ptr && isspace(*ptr))
+                               ptr++;
+
+                       if (!*ptr)
+                               break;
+
+                       if (!isdigit(*ptr))
+                               return -1;
+
+                       if (val.len >= dev->ports)
+                               return -1;
+
                        ports[val.len].flags = 0;
                        ports[val.len].id = strtoul(ptr, &ptr, 10);
                        while(*ptr && !isspace(*ptr)) {
                                if (*ptr == 't')
                                        ports[val.len].flags |= SWLIB_PORT_FLAG_TAGGED;
+                               else
+                                       return -1;
+
                                ptr++;
                        }
                        if (*ptr)
@@ -581,11 +596,13 @@ add_switch(struct nl_msg *msg, void *arg)
        if (tb[SWITCH_ATTR_ID])
                dev->id = nla_get_u32(tb[SWITCH_ATTR_ID]);
        if (tb[SWITCH_ATTR_NAME])
-               dev->name = strdup(nla_get_string(tb[SWITCH_ATTR_DEV_NAME]));
+               dev->name = strdup(nla_get_string(tb[SWITCH_ATTR_NAME]));
        if (tb[SWITCH_ATTR_PORTS])
                dev->ports = nla_get_u32(tb[SWITCH_ATTR_PORTS]);
        if (tb[SWITCH_ATTR_VLANS])
                dev->vlans = nla_get_u32(tb[SWITCH_ATTR_VLANS]);
+       if (tb[SWITCH_ATTR_CPU_PORT])
+               dev->cpu_port = nla_get_u32(tb[SWITCH_ATTR_CPU_PORT]);
 
        if (!sa->head) {
                sa->head = dev;
This page took 0.022306 seconds and 4 git commands to generate.