Browse Source

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>
Jo-Philipp Wich 4 years ago
parent
commit
383eb58f17
1 changed files with 16 additions and 8 deletions
  1. 16 8
      ubus.c

+ 16 - 8
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);