]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
varlinkctl: output an expressive error message in case invalid method/interface names...
authorLennart Poettering <lennart@poettering.net>
Fri, 23 Aug 2024 08:41:44 +0000 (10:41 +0200)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Fri, 23 Aug 2024 14:10:58 +0000 (23:10 +0900)
Inspired by #34098 → let's make it easier for users to understand and
correct the mistakes they made: let's early refuse invalid
interface/method names.

src/varlinkctl/varlinkctl.c

index 77cecdbf4e9fdf236b1a459792ee7a634a00e569..e99ea34964119dbdb9b5f6fd3050191a96254640 100644 (file)
@@ -334,6 +334,10 @@ static int verb_introspect(int argc, char *argv[], void *userdata) {
         url = argv[1];
         interfaces = strv_skip(argv, 2);
 
+        STRV_FOREACH(i, interfaces)
+                if (!varlink_idl_interface_name_is_valid(*i))
+                        return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Not a valid Varlink interface name: '%s'", *i);
+
         r = varlink_connect_auto(&vl, url);
         if (r < 0)
                 return r;
@@ -498,6 +502,9 @@ static int verb_call(int argc, char *argv[], void *userdata) {
          * leave incomplete lines hanging around. */
         arg_json_format_flags |= SD_JSON_FORMAT_NEWLINE;
 
+        if (!varlink_idl_qualified_symbol_name_is_valid(method))
+                return log_error_errno(SYNTHETIC_ERRNO(EINVAL), "Not a valid qualified method name: '%s' (Expected valid Varlink interface name, followed by a dot, followed by a valid Varlink symbol name.)", method);
+
         if (parameter) {
                 source = "<argv[4]>";