diff options
author | Jo-Philipp Wich <jo@mein.io> | 2019-09-18 10:31:06 +0200 |
---|---|---|
committer | Jo-Philipp Wich <jo@mein.io> | 2019-09-18 10:48:15 +0200 |
commit | 383eb58f1750b3b96a82558b5dcb806a8a2528bc (patch) | |
tree | d3c98dd6c89f062d9070d0f99d656d6161f04050 | |
parent | c26f8907d1d2921018240774b75cf9cfda352fa7 (diff) | |
download | firewall3-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.c | 24 |
1 files changed, 16 insertions, 8 deletions
@@ -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); |