summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJo-Philipp Wich <jo@mein.io>2019-09-18 10:31:06 +0200
committerJo-Philipp Wich <jo@mein.io>2019-09-18 10:48:15 +0200
commit383eb58f1750b3b96a82558b5dcb806a8a2528bc (patch)
treed3c98dd6c89f062d9070d0f99d656d6161f04050
parentc26f8907d1d2921018240774b75cf9cfda352fa7 (diff)
downloadfirewall3-383eb58f1750b3b96a82558b5dcb806a8a2528bc.tar.gz
ubus: do not overwrite ipset name attribute
When importing ipset definitions from published ubus data, do not overwrite the name attribute with an autogenerated string like it is being done for rules or redirects. Ref: https://forum.openwrt.org/t/fw3-ipset-procd-objects/44044 Signed-off-by: Jo-Philipp Wich <jo@mein.io>
-rw-r--r--ubus.c24
1 files changed, 16 insertions, 8 deletions
diff --git a/ubus.c b/ubus.c
index bea9166..cf5c8b1 100644
--- a/ubus.c
+++ b/ubus.c
@@ -257,26 +257,34 @@ static void fw3_ubus_rules_add(struct blob_buf *b, const char *service,
void *k = blobmsg_open_table(b, "");
struct blob_attr *ropt;
unsigned orem;
- char *type = NULL;
+ char *type = NULL, *name = NULL;
char comment[256];
blobmsg_for_each_attr(ropt, rule, orem) {
if (!strcmp(blobmsg_name(ropt), "type"))
type = blobmsg_data(ropt);
+ else if (!strcmp(blobmsg_name(ropt), "name"))
+ name = blobmsg_data(ropt);
+
if (device && !strcmp(blobmsg_name(ropt), "device"))
device = blobmsg_get_string(ropt);
else if (strcmp(blobmsg_name(ropt), "name"))
blobmsg_add_blob(b, ropt);
}
- if (instance)
- snprintf(comment, sizeof(comment), "ubus:%s[%s] %s %d",
- service, instance, type ? type : "rule", n);
- else
- snprintf(comment, sizeof(comment), "ubus:%s %s %d",
- service, type ? type : "rule", n);
+ if (!type || strcmp(type, "ipset")) {
+ if (instance)
+ snprintf(comment, sizeof(comment), "ubus:%s[%s] %s %d",
+ service, instance, type ? type : "rule", n);
+ else
+ snprintf(comment, sizeof(comment), "ubus:%s %s %d",
+ service, type ? type : "rule", n);
- blobmsg_add_string(b, "name", comment);
+ blobmsg_add_string(b, "name", comment);
+ }
+ else if (name) {
+ blobmsg_add_string(b, "name", name);
+ }
if (device)
blobmsg_add_string(b, "device", device);