}
static int vl_method_describe(sd_varlink *link, sd_json_variant *parameters, sd_varlink_method_flags_t flags, void *userdata) {
- static const sd_json_dispatch_field dispatch_table[] = {
- VARLINK_DISPATCH_POLKIT_FIELD,
- {}
- };
-
Context *c = ASSERT_PTR(userdata);
bool privileged;
int r;
assert(link);
assert(parameters);
- r = sd_varlink_dispatch(link, parameters, dispatch_table, /* userdata= */ NULL);
+ r = sd_varlink_dispatch(link, parameters, dispatch_table_polkit_only, /* userdata= */ NULL);
if (r != 0)
return r;
}
static int verify_polkit(sd_varlink *link, sd_json_variant *parameters, const char *action) {
- static const sd_json_dispatch_field dispatch_table[] = {
- VARLINK_DISPATCH_POLKIT_FIELD,
- {}
- };
-
int r;
Manager *m = ASSERT_PTR(sd_varlink_get_userdata(ASSERT_PTR(link)));
assert(action);
- r = sd_varlink_dispatch(link, parameters, dispatch_table, /* userdata = */ NULL);
+ r = sd_varlink_dispatch(link, parameters, dispatch_table_polkit_only, /* userdata= */ NULL);
if (r != 0)
return r;
return false;
#endif
}
+
+const sd_json_dispatch_field dispatch_table_polkit_only[] = {
+ VARLINK_DISPATCH_POLKIT_FIELD,
+ {}
+};
.type = SD_JSON_VARIANT_BOOLEAN, \
}
+/* A dispatch table that only accepts (but ignores) the Polkit field, and refuses everything else. This can
+ * be used wherever methods do not accept any parameters but shall be access controlled via Polkit. */
+extern const sd_json_dispatch_field dispatch_table_polkit_only[];
+
/* Generates the right Varlink introspection field for the allowInteractiveAuthentication field above. To be used in Varlink IDL definitions. */
#define VARLINK_DEFINE_POLKIT_INPUT \
SD_VARLINK_FIELD_COMMENT("Controls whether interactive authentication (via polkit) shall be allowed. If unspecified defaults to false."), \