mirror of
https://git.proxmox.com/git/systemd
synced 2026-01-20 03:28:08 +00:00
systemctl: when calling 'status' accept a PID
This commit is contained in:
parent
20c5e441cb
commit
598b557bf0
4
fixme
4
fixme
@ -51,8 +51,6 @@
|
||||
|
||||
* selinux policy loading
|
||||
|
||||
* systemctl status $PID, systemctl stop $PID!
|
||||
|
||||
* place /etc/inittab with explaining blurb.
|
||||
|
||||
* fingerprint.target, wireless.target, gps.target
|
||||
@ -75,8 +73,6 @@
|
||||
|
||||
* plymouth after/before getty?
|
||||
|
||||
* D-Bus call GetUnitByPID
|
||||
|
||||
* be more forgiving when parsing unit files, when encountering incorrect lines with non assignments
|
||||
|
||||
* ExecStart= mehrfach bei Type=finish
|
||||
|
||||
@ -33,6 +33,10 @@
|
||||
" <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
|
||||
" <arg name=\"unit\" type=\"o\" direction=\"out\"/>\n" \
|
||||
" </method>\n" \
|
||||
" <method name=\"GetUnitByPID\">\n" \
|
||||
" <arg name=\"pid\" type=\"u\" direction=\"in\"/>\n" \
|
||||
" <arg name=\"unit\" type=\"o\" direction=\"out\"/>\n" \
|
||||
" </method>\n" \
|
||||
" <method name=\"LoadUnit\">\n" \
|
||||
" <arg name=\"name\" type=\"s\" direction=\"in\"/>\n" \
|
||||
" <arg name=\"unit\" type=\"o\" direction=\"out\"/>\n" \
|
||||
@ -290,7 +294,34 @@ static DBusHandlerResult bus_manager_message_handler(DBusConnection *connection,
|
||||
DBUS_TYPE_OBJECT_PATH, &path,
|
||||
DBUS_TYPE_INVALID))
|
||||
goto oom;
|
||||
} else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "GetUnitByPID")) {
|
||||
const char *name;
|
||||
Unit *u;
|
||||
uint32_t pid;
|
||||
|
||||
if (!dbus_message_get_args(
|
||||
message,
|
||||
&error,
|
||||
DBUS_TYPE_UINT32, &pid,
|
||||
DBUS_TYPE_INVALID))
|
||||
return bus_send_error_reply(m, connection, message, &error, -EINVAL);
|
||||
|
||||
if (!(u = cgroup_unit_by_pid(m, (pid_t) pid))) {
|
||||
dbus_set_error(&error, BUS_ERROR_NO_SUCH_UNIT, "No unit for PID %lu is loaded.", (unsigned long) pid);
|
||||
return bus_send_error_reply(m, connection, message, &error, -ENOENT);
|
||||
}
|
||||
|
||||
if (!(reply = dbus_message_new_method_return(message)))
|
||||
goto oom;
|
||||
|
||||
if (!(path = unit_dbus_path(u)))
|
||||
goto oom;
|
||||
|
||||
if (!dbus_message_append_args(
|
||||
reply,
|
||||
DBUS_TYPE_OBJECT_PATH, &path,
|
||||
DBUS_TYPE_INVALID))
|
||||
goto oom;
|
||||
} else if (dbus_message_is_method_call(message, "org.freedesktop.systemd1.Manager", "LoadUnit")) {
|
||||
const char *name;
|
||||
Unit *u;
|
||||
|
||||
@ -43,6 +43,10 @@
|
||||
send_interface="org.freedesktop.systemd1.Manager"
|
||||
send_member="GetUnit"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.systemd1"
|
||||
send_interface="org.freedesktop.systemd1.Manager"
|
||||
send_member="GetUnitByPID"/>
|
||||
|
||||
<allow send_destination="org.freedesktop.systemd1"
|
||||
send_interface="org.freedesktop.systemd1.Manager"
|
||||
send_member="GetJob"/>
|
||||
|
||||
@ -2121,7 +2121,9 @@ static int show(DBusConnection *bus, char **args, unsigned n) {
|
||||
const char *path = NULL;
|
||||
uint32_t id;
|
||||
|
||||
if (!show_properties || safe_atou32(args[i], &id) < 0) {
|
||||
if (safe_atou32(args[i], &id) < 0) {
|
||||
|
||||
/* Interpret as unit name */
|
||||
|
||||
if (!(m = dbus_message_new_method_call(
|
||||
"org.freedesktop.systemd1",
|
||||
@ -2177,7 +2179,9 @@ static int show(DBusConnection *bus, char **args, unsigned n) {
|
||||
}
|
||||
}
|
||||
|
||||
} else {
|
||||
} else if (show_properties) {
|
||||
|
||||
/* Interpret as job id */
|
||||
|
||||
if (!(m = dbus_message_new_method_call(
|
||||
"org.freedesktop.systemd1",
|
||||
@ -2197,6 +2201,33 @@ static int show(DBusConnection *bus, char **args, unsigned n) {
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) {
|
||||
log_error("Failed to issue method call: %s", error.message);
|
||||
r = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
} else {
|
||||
|
||||
/* Interpret as PID */
|
||||
|
||||
if (!(m = dbus_message_new_method_call(
|
||||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
"org.freedesktop.systemd1.Manager",
|
||||
"GetUnitByPID"))) {
|
||||
log_error("Could not allocate message.");
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_UINT32, &id,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!(reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error))) {
|
||||
log_error("Failed to issue method call: %s", error.message);
|
||||
r = -EIO;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user