From 383eb58f1750b3b96a82558b5dcb806a8a2528bc Mon Sep 17 00:00:00 2001 From: Jo-Philipp Wich Date: Wed, 18 Sep 2019 10:31:06 +0200 Subject: [PATCH] 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 --- ubus.c | 24 ++++++++++++++++-------- 1 file 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); -- 2.30.2