if (r != 0)
return r;
- log_full(offline != 0 ? LOG_INFO : LOG_DEBUG,
- "Received client request to sync journal (%s offlining).", offline != 0 ? "with" : "without");
+ if (offline > 0) {
+ /* Do not allow unprivileged clients to offline the journal files, since that's potentially slow */
+ r = varlink_check_privileged_peer(link);
+ if (r < 0)
+ return r;
+ } else if (offline < 0) {
+ uid_t uid = 0;
+
+ r = sd_varlink_get_peer_uid(link, &uid);
+ if (r < 0)
+ return r;
+
+ offline = uid == 0; /* for compat, if not specified default to offlining, except for non-root */
+ }
+
+ log_full(offline ? LOG_INFO : LOG_DEBUG,
+ "Received client request to sync journal (%s offlining).", offline ? "with" : "without");
_cleanup_(sync_req_freep) SyncReq *sr = NULL;
if (r < 0)
return r;
- sr->offline = offline != 0;
+ sr->offline = offline;
sd_varlink_set_userdata(link, sr);
sync_req_revalidate(TAKE_PTR(sr));
if (r != 0)
return r;
+ r = varlink_check_privileged_peer(link);
+ if (r < 0)
+ return r;
+
log_info("Received client request to rotate journal, rotating.");
server_full_rotate(s);
if (r != 0)
return r;
+ r = varlink_check_privileged_peer(link);
+ if (r < 0)
+ return r;
+
if (s->namespace)
return sd_varlink_error(link, "io.systemd.Journal.NotSupportedByNamespaces", NULL);
if (r != 0)
return r;
+ r = varlink_check_privileged_peer(link);
+ if (r < 0)
+ return r;
+
if (s->namespace)
return sd_varlink_error(link, "io.systemd.Journal.NotSupportedByNamespaces", NULL);
r = varlink_server_new(
&s->varlink_server,
- SD_VARLINK_SERVER_ROOT_ONLY|SD_VARLINK_SERVER_INHERIT_USERDATA,
+ SD_VARLINK_SERVER_ACCOUNT_UID|SD_VARLINK_SERVER_INHERIT_USERDATA,
s);
if (r < 0)
return log_error_errno(r, "Failed to allocate varlink server object: %m");
return r;
if (fd < 0)
- r = sd_varlink_server_listen_address(s->varlink_server, socket, 0600);
+ r = sd_varlink_server_listen_address(s->varlink_server, socket, 0666);
else
r = sd_varlink_server_listen_fd(s->varlink_server, fd);
if (r < 0)
static SD_VARLINK_DEFINE_METHOD(
Synchronize,
SD_VARLINK_FIELD_COMMENT("Controls whether to offline the journal files as part of the synchronization operation."),
- SD_VARLINK_DEFINE_INPUT(offline, SD_VARLINK_BOOL, 0));
+ SD_VARLINK_DEFINE_INPUT(offline, SD_VARLINK_BOOL, SD_VARLINK_NULLABLE));
static SD_VARLINK_DEFINE_METHOD(Rotate);
static SD_VARLINK_DEFINE_METHOD(FlushToVar);