Copyright 2010 Lennart Poettering
systemd is free software; you can redistribute it and/or modify it
- under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
+ under the terms of the GNU Lesser General Public License as published by
+ the Free Software Foundation; either version 2.1 of the License, or
(at your option) any later version.
systemd is distributed in the hope that it will be useful, but
WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
- General Public License for more details.
+ Lesser General Public License for more details.
- You should have received a copy of the GNU General Public License
+ You should have received a copy of the GNU Lesser General Public License
along with systemd; If not, see <http://www.gnu.org/licenses/>.
***/
#include "strv.h"
#include "cgroup-show.h"
#include "sysfs-show.h"
+#include "spawn-polkit-agent.h"
static char **arg_property = NULL;
static bool arg_all = false;
TRANSPORT_SSH,
TRANSPORT_POLKIT
} arg_transport = TRANSPORT_NORMAL;
+static bool arg_ask_password = true;
static const char *arg_host = NULL;
static bool on_tty(void) {
/* Cache result before we open the pager */
on_tty();
- if (!arg_no_pager)
- pager_open();
+ if (arg_no_pager)
+ return;
+
+ pager_open();
+}
+
+static void polkit_agent_open_if_enabled(void) {
+
+ /* Open the polkit agent as a child process if necessary */
+
+ if (!arg_ask_password)
+ return;
+
+ polkit_agent_open();
}
static int list_sessions(DBusConnection *bus, char **args, unsigned n) {
uid_t uid;
const char *name;
usec_t timestamp;
- const char *control_group;
+ const char *default_control_group;
int vtnr;
const char *seat;
const char *tty;
uid_t uid;
const char *name;
usec_t timestamp;
- const char *control_group;
+ const char *default_control_group;
const char *state;
char **sessions;
const char *display;
printf("\t Active: %s\n", yes_no(i->active));
- if (i->control_group) {
+ if (i->default_control_group) {
unsigned c;
- printf("\t CGroup: %s\n", i->control_group);
+ printf("\t CGroup: %s\n", i->default_control_group);
if (arg_transport != TRANSPORT_SSH) {
c = columns();
else
c = 0;
- show_cgroup_by_path(i->control_group, "\t\t ", c, false);
+ show_cgroup_and_extra_by_spec(i->default_control_group, "\t\t ", c, false, arg_all, &i->leader, i->leader > 0 ? 1 : 0);
}
}
}
printf("\n");
}
- if (i->control_group) {
+ if (i->default_control_group) {
unsigned c;
- printf("\t CGroup: %s\n", i->control_group);
+ printf("\t CGroup: %s\n", i->default_control_group);
if (arg_transport != TRANSPORT_SSH) {
c = columns();
else
c = 0;
- show_cgroup_by_path(i->control_group, "\t\t ", c, false);
+ show_cgroup_by_path(i->default_control_group, "\t\t ", c, false, arg_all);
}
}
}
i->id = s;
else if (streq(name, "Name"))
i->name = s;
- else if (streq(name, "ControlGroupPath"))
- i->control_group = s;
+ else if (streq(name, "DefaultControlGroup"))
+ i->default_control_group = s;
else if (streq(name, "TTY"))
i->tty = s;
else if (streq(name, "Display"))
if (!isempty(s)) {
if (streq(name, "Name"))
i->name = s;
- else if (streq(name, "ControlGroupPath"))
- i->control_group = s;
+ else if (streq(name, "DefaultControlGroup"))
+ i->default_control_group = s;
else if (streq(name, "State"))
i->state = s;
}
dbus_error_init(&error);
+ polkit_agent_open_if_enabled();
+
b = streq(args[0], "enable-linger");
for (i = 1; i < n; i++) {
dbus_error_init(&error);
+ polkit_agent_open_if_enabled();
+
for (i = 2; i < n; i++) {
DBusMessage *reply;
dbus_error_init(&error);
+ polkit_agent_open_if_enabled();
+
m = dbus_message_new_method_call(
"org.freedesktop.login1",
"/org/freedesktop/login1",
enum {
ARG_VERSION = 0x100,
ARG_NO_PAGER,
- ARG_KILL_WHO
+ ARG_KILL_WHO,
+ ARG_NO_ASK_PASSWORD
};
static const struct option options[] = {
{ "signal", required_argument, NULL, 's' },
{ "host", required_argument, NULL, 'H' },
{ "privileged",no_argument, NULL, 'P' },
+ { "no-ask-password", no_argument, NULL, ARG_NO_ASK_PASSWORD },
{ NULL, 0, NULL, 0 }
};
arg_no_pager = true;
break;
+ case ARG_NO_ASK_PASSWORD:
+ arg_ask_password = false;
+
case ARG_KILL_WHO:
arg_kill_who = optarg;
break;