]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
shared/bus-unit-util: rework error messages for NFTSet=
authorZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sat, 5 Jul 2025 11:26:07 +0000 (13:26 +0200)
committerZbigniew Jędrzejewski-Szmek <zbyszek@in.waw.pl>
Sun, 6 Jul 2025 16:06:51 +0000 (18:06 +0200)
Let's be nice to the user and print the exact reason why we won't accept
a setting.

src/shared/bus-unit-util.c

index ebfabcdf360cc9d6a22ec6ee1f8e3797df9d5366..fde4f239bec97b94c48ee102e7625b73df49539d 100644 (file)
@@ -961,13 +961,21 @@ static int bus_append_nft_set(sd_bus_message *m, const char *field, const char *
                 assert(table);
                 assert(set);
 
-                source = nft_set_source_from_string(source_str);
+                source = r = nft_set_source_from_string(source_str);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse NFT set source '%s': %m", source_str);
                 if (!IN_SET(source, NFT_SET_SOURCE_CGROUP, NFT_SET_SOURCE_USER, NFT_SET_SOURCE_GROUP))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to parse %s.", field);
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Bad NFT set source value '%s'.",
+                                               nft_set_source_to_string(source));
+
+                nfproto = r = nfproto_from_string(nfproto_str);
+                if (r < 0)
+                        return log_error_errno(r, "Failed to parse nft protocol '%s': %m", nfproto_str);
 
-                nfproto = nfproto_from_string(nfproto_str);
-                if (nfproto < 0 || !nft_identifier_valid(table) || !nft_identifier_valid(set))
-                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Failed to parse %s.", field);
+                if (!nft_identifier_valid(table))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Bad NFT identifier name '%s'.", table);
+                if (!nft_identifier_valid(set))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Bad NFT identifier name '%s'.", set);
 
                 r = sd_bus_message_append(m, "(iiss)", source, nfproto, table, set);
                 if (r < 0)