1 /* SPDX-License-Identifier: GPL-2.0-or-later */
5 #include "varlink-io.systemd.service.h"
7 static VARLINK_DEFINE_METHOD(Ping
);
9 static VARLINK_DEFINE_METHOD(Reload
);
11 static VARLINK_DEFINE_METHOD(
13 VARLINK_DEFINE_INPUT(level
, VARLINK_INT
, 0));
15 VARLINK_DEFINE_INTERFACE(
20 &vl_method_SetLogLevel
);
22 int varlink_method_ping(Varlink
*link
, JsonVariant
*parameters
, VarlinkMethodFlags flags
, void *userdata
) {
25 if (json_variant_elements(parameters
) > 0)
26 return varlink_error_invalid_parameter(link
, parameters
);
28 log_debug("Received io.systemd.service.Ping");
30 return varlink_reply(link
, NULL
);
33 int varlink_method_set_log_level(Varlink
*link
, JsonVariant
*parameters
, VarlinkMethodFlags flags
, void *userdata
) {
34 static const JsonDispatch dispatch_table
[] = {
35 { "level", _JSON_VARIANT_TYPE_INVALID
, json_dispatch_int64
, 0, JSON_MANDATORY
},
46 /* NOTE: The method does have 1 parameter, but we must compare to 2 here, because
47 * json_variant_elements() breaks abstraction and exposes internal structure of JsonObject. */
48 if (json_variant_elements(parameters
) != 2)
49 return varlink_error_invalid_parameter(link
, parameters
);
51 r
= varlink_dispatch(link
, parameters
, dispatch_table
, &level
);
55 if (LOG_PRI(level
) != level
)
56 return varlink_error_invalid_parameter(link
, parameters
);
58 r
= varlink_get_peer_uid(link
, &uid
);
62 if (uid
!= getuid() && uid
!= 0)
63 return varlink_error(link
, VARLINK_ERROR_PERMISSION_DENIED
, parameters
);
65 log_debug("Received io.systemd.service.SetLogLevel(%" PRIi64
")", level
);
67 log_set_max_level(level
);
69 return varlink_reply(link
, NULL
);