dbus-execute.c revision c7040b5d1c2c148f12b6a5eef3dfce1661805131
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews This file is part of systemd.
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews Copyright 2010 Lennart Poettering
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews systemd is free software; you can redistribute it and/or modify it
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews under the terms of the GNU Lesser General Public License as published by
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews the Free Software Foundation; either version 2.1 of the License, or
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews (at your option) any later version.
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews systemd is distributed in the hope that it will be useful, but
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews WITHOUT ANY WARRANTY; without even the implied warranty of
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews Lesser General Public License for more details.
deaaf94332abbfdb3aff53675546acfed16e5eb6Mark Andrews You should have received a copy of the GNU Lesser General Public License
3761c433912beabe43abeed2c3513b6201c59f64Mark Andrews along with systemd; If not, see <http://www.gnu.org/licenses/>.
deaaf94332abbfdb3aff53675546acfed16e5eb6Mark AndrewsBUS_DEFINE_PROPERTY_GET_ENUM(bus_property_get_exec_output, exec_output, ExecOutput);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrewsstatic BUS_DEFINE_PROPERTY_GET_ENUM(property_get_exec_input, exec_input, ExecInput);
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews const char *path,
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews r = sd_bus_message_open_container(reply, 'a', "(sb)");
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews const char *fn = *j;
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews r = sd_bus_message_append(reply, "(sb)", fn[0] == '-' ? fn + 1 : fn, fn[0] == '-');
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews const char *path,
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews const char *path,
5d51e67c3b4f35c1be742574aacc1d88fe6ed444Mark Andrews if (read_one_line_file("/proc/self/oom_score_adj", &t) >= 0)
const char *path,
const char *interface,
const char *property,
void *userdata,
int32_t n;
assert(c);
if (c->nice_set)
n = c->nice;
errno = 0;
if (errno != 0)
static int property_get_ioprio(
const char *path,
const char *interface,
const char *property,
void *userdata,
int32_t n;
assert(c);
if (c->ioprio_set)
n = c->ioprio;
static int property_get_cpu_sched_policy(
const char *path,
const char *interface,
const char *property,
void *userdata,
int32_t n;
assert(c);
if (c->cpu_sched_set)
n = c->cpu_sched_policy;
n = sched_getscheduler(0);
n = SCHED_OTHER;
static int property_get_cpu_sched_priority(
const char *path,
const char *interface,
const char *property,
void *userdata,
int32_t n;
assert(c);
if (c->cpu_sched_set)
n = c->cpu_sched_priority;
struct sched_param p = {};
if (sched_getparam(0, &p) >= 0)
n = p.sched_priority;
static int property_get_cpu_affinity(
const char *path,
const char *interface,
const char *property,
void *userdata,
assert(c);
if (c->cpuset)
static int property_get_timer_slack_nsec(
const char *path,
const char *interface,
const char *property,
void *userdata,
uint64_t u;
assert(c);
static int property_get_capability_bounding_set(
const char *path,
const char *interface,
const char *property,
void *userdata,
assert(c);
static int property_get_capabilities(
const char *path,
const char *interface,
const char *property,
void *userdata,
assert(c);
if (c->capabilities)
return -ENOMEM;
static int property_get_syscall_filter(
const char *path,
const char *interface,
const char *property,
void *userdata,
assert(c);
if (c->syscall_filter)
SD_BUS_PROPERTY("Environment", "as", NULL, offsetof(ExecContext, environment), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("EnvironmentFiles", "a(sb)", property_get_environment_files, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("UMask", "u", bus_property_get_mode, offsetof(ExecContext, umask), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitCPU", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_CPU]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitFSIZE", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_FSIZE]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitDATA", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_DATA]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitSTACK", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_STACK]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitCORE", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_CORE]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitRSS", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_RSS]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitNOFILE", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_NOFILE]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitAS", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_AS]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitNPROC", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_NPROC]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitMEMLOCK", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_MEMLOCK]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitLOCKS", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_LOCKS]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitSIGPENDING", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_SIGPENDING]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitMSGQUEUE", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_MSGQUEUE]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitNICE", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_NICE]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitRTPRIO", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_RTPRIO]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("LimitRTTIME", "t", property_get_rlimit, offsetof(ExecContext, rlimit[RLIMIT_RTTIME]), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("WorkingDirectory", "s", NULL, offsetof(ExecContext, working_directory), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("RootDirectory", "s", NULL, offsetof(ExecContext, root_directory), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("OOMScoreAdjust", "i", property_get_oom_score_adjust, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("CPUSchedulingPolicy", "i", property_get_cpu_sched_policy, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("CPUSchedulingPriority", "i", property_get_cpu_sched_priority, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("TimerSlackNSec", "t", property_get_timer_slack_nsec, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("CPUSchedulingResetOnFork", "b", bus_property_get_bool, offsetof(ExecContext, cpu_sched_reset_on_fork), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("NonBlocking", "b", bus_property_get_bool, offsetof(ExecContext, non_blocking), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("StandardInput", "s", property_get_exec_input, offsetof(ExecContext, std_input), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("StandardOutput", "s", bus_property_get_exec_output, offsetof(ExecContext, std_output), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("StandardError", "s", bus_property_get_exec_output, offsetof(ExecContext, std_error), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("TTYPath", "s", NULL, offsetof(ExecContext, tty_path), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("TTYReset", "b", bus_property_get_bool, offsetof(ExecContext, tty_reset), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("TTYVHangup", "b", bus_property_get_bool, offsetof(ExecContext, tty_vhangup), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("TTYVTDisallocate", "b", bus_property_get_bool, offsetof(ExecContext, tty_vt_disallocate), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("SyslogPriority", "i", bus_property_get_int, offsetof(ExecContext, syslog_priority), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("SyslogIdentifier", "s", NULL, offsetof(ExecContext, syslog_identifier), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("SyslogLevelPrefix", "b", bus_property_get_bool, offsetof(ExecContext, syslog_level_prefix), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("SecureBits", "i", bus_property_get_int, offsetof(ExecContext, secure_bits), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("CapabilityBoundingSet", "t", property_get_capability_bounding_set, 0, SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("SupplementaryGroups", "as", NULL, offsetof(ExecContext, supplementary_groups), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("TCPWrapName", "s", NULL, offsetof(ExecContext, tcpwrap_name), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("PAMName", "s", NULL, offsetof(ExecContext, pam_name), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("ReadWriteDirectories", "as", NULL, offsetof(ExecContext, read_write_dirs), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("ReadOnlyDirectories", "as", NULL, offsetof(ExecContext, read_only_dirs), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("InaccessibleDirectories", "as", NULL, offsetof(ExecContext, inaccessible_dirs), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("MountFlags", "t", bus_property_get_ulong, offsetof(ExecContext, mount_flags), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("PrivateTmp", "b", bus_property_get_bool, offsetof(ExecContext, private_tmp), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("PrivateNetwork", "b", bus_property_get_bool, offsetof(ExecContext, private_network), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("PrivateDevices", "b", bus_property_get_bool, offsetof(ExecContext, private_devices), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("SameProcessGroup", "b", bus_property_get_bool, offsetof(ExecContext, same_pgrp), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("UtmpIdentifier", "s", NULL, offsetof(ExecContext, utmp_id), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("IgnoreSIGPIPE", "b", bus_property_get_bool, offsetof(ExecContext, ignore_sigpipe), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("NoNewPrivileges", "b", bus_property_get_bool, offsetof(ExecContext, no_new_privileges), SD_BUS_VTABLE_PROPERTY_CONST),
SD_BUS_PROPERTY("SystemCallFilter", "au", property_get_syscall_filter, 0, SD_BUS_VTABLE_PROPERTY_CONST),
assert(c);
if (!c->path)
c->ignore,
const char *path,
const char *interface,
const char *property,
void *userdata,
const char *path,
const char *interface,
const char *property,
void *userdata,
Unit *u,
ExecContext *c,
const char *name,
assert(u);
assert(c);
const char *uu;
return -ENOMEM;
c->user = t;
const char *gg;
return -ENOMEM;
c->group = t;
c->nice = n;
if (!strv_env_is_valid(l))
return -ENOMEM;
c->environment = e;
if (!joined)
return -ENOMEM;