Merge remote-tracking branch 'simonpe/cleanup'
This commit is contained in:
+23
-46
@@ -42,73 +42,53 @@ static enum {
|
||||
} arg_action = ACTION_INHIBIT;
|
||||
|
||||
static int inhibit(DBusConnection *bus, DBusError *error) {
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
DBusMessage *reply = NULL;
|
||||
int fd;
|
||||
|
||||
assert(bus);
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
fd = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"Inhibit");
|
||||
if (!m)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &arg_what,
|
||||
DBUS_TYPE_STRING, &arg_who,
|
||||
DBUS_TYPE_STRING, &arg_why,
|
||||
DBUS_TYPE_STRING, &arg_mode,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
fd = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, error);
|
||||
if (!reply) {
|
||||
fd = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
"Inhibit",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &arg_what,
|
||||
DBUS_TYPE_STRING, &arg_who,
|
||||
DBUS_TYPE_STRING, &arg_why,
|
||||
DBUS_TYPE_STRING, &arg_mode,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (fd)
|
||||
return fd;
|
||||
|
||||
if (!dbus_message_get_args(reply, error,
|
||||
DBUS_TYPE_UNIX_FD, &fd,
|
||||
DBUS_TYPE_INVALID)){
|
||||
DBUS_TYPE_INVALID))
|
||||
fd = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
dbus_message_unref(reply);
|
||||
|
||||
return fd;
|
||||
}
|
||||
|
||||
static int print_inhibitors(DBusConnection *bus, DBusError *error) {
|
||||
DBusMessage *m, *reply;
|
||||
DBusMessage *reply;
|
||||
unsigned n = 0;
|
||||
DBusMessageIter iter, sub, sub2;
|
||||
int r;
|
||||
|
||||
assert(bus);
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
r = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"ListInhibitors");
|
||||
if (!m)
|
||||
"ListInhibitors",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (r)
|
||||
return -ENOMEM;
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, error);
|
||||
if (!reply) {
|
||||
r = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_iter_init(reply, &iter)) {
|
||||
r = -ENOMEM;
|
||||
@@ -170,9 +150,6 @@ static int print_inhibitors(DBusConnection *bus, DBusError *error) {
|
||||
r = 0;
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
|
||||
+144
-509
@@ -87,34 +87,24 @@ static void polkit_agent_open_if_enabled(void) {
|
||||
}
|
||||
|
||||
static int list_sessions(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
DBusError error;
|
||||
DBusMessage *reply = NULL;
|
||||
int r;
|
||||
DBusMessageIter iter, sub, sub2;
|
||||
unsigned k = 0;
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
assert(bus);
|
||||
|
||||
pager_open_if_enabled();
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
r = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"ListSessions");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
r = -EIO;
|
||||
"ListSessions",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (r)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_iter_init(reply, &iter) ||
|
||||
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
|
||||
@@ -164,46 +154,31 @@ static int list_sessions(DBusConnection *bus, char **args, unsigned n) {
|
||||
r = 0;
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static int list_users(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
DBusError error;
|
||||
DBusMessage *reply = NULL;
|
||||
int r;
|
||||
DBusMessageIter iter, sub, sub2;
|
||||
unsigned k = 0;
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
assert(bus);
|
||||
|
||||
pager_open_if_enabled();
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
r = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"ListUsers");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
r = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
"ListUsers",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (r)
|
||||
goto finish;
|
||||
|
||||
if (!dbus_message_iter_init(reply, &iter) ||
|
||||
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
|
||||
@@ -251,46 +226,31 @@ static int list_users(DBusConnection *bus, char **args, unsigned n) {
|
||||
r = 0;
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static int list_seats(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
DBusError error;
|
||||
DBusMessage *reply = NULL;
|
||||
int r;
|
||||
DBusMessageIter iter, sub, sub2;
|
||||
unsigned k = 0;
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
assert(bus);
|
||||
|
||||
pager_open_if_enabled();
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
r = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"ListSeats");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
r = -EIO;
|
||||
"ListSeats",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (r)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_iter_init(reply, &iter) ||
|
||||
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
|
||||
@@ -336,14 +296,9 @@ static int list_seats(DBusConnection *bus, char **args, unsigned n) {
|
||||
r = 0;
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -907,16 +862,14 @@ static int print_property(const char *name, DBusMessageIter *iter) {
|
||||
}
|
||||
|
||||
static int show_one(const char *verb, DBusConnection *bus, const char *path, bool show_properties, bool *new_line) {
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
DBusMessage *reply = NULL;
|
||||
const char *interface = "";
|
||||
int r;
|
||||
DBusError error;
|
||||
DBusMessageIter iter, sub, sub2, sub3;
|
||||
SessionStatusInfo session_info;
|
||||
UserStatusInfo user_info;
|
||||
SeatStatusInfo seat_info;
|
||||
|
||||
assert(bus);
|
||||
assert(path);
|
||||
assert(new_line);
|
||||
|
||||
@@ -924,33 +877,18 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo
|
||||
zero(user_info);
|
||||
zero(seat_info);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
r = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
path,
|
||||
"org.freedesktop.DBus.Properties",
|
||||
"GetAll");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
r = -ENOMEM;
|
||||
"GetAll",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &interface,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (r)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &interface,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
r = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_iter_init(reply, &iter) ||
|
||||
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_ARRAY ||
|
||||
@@ -1025,19 +963,14 @@ static int show_one(const char *verb, DBusConnection *bus, const char *path, boo
|
||||
r = 0;
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
static int show(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
DBusMessage *reply = NULL;
|
||||
int r, ret = 0;
|
||||
DBusError error;
|
||||
unsigned i;
|
||||
@@ -1066,24 +999,16 @@ static int show(DBusConnection *bus, char **args, unsigned n) {
|
||||
|
||||
if (strstr(args[0], "session")) {
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
ret = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"GetSession");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
"GetSession",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_INVALID);
|
||||
|
||||
} else if (strstr(args[0], "user")) {
|
||||
uid_t uid;
|
||||
@@ -1095,53 +1020,32 @@ static int show(DBusConnection *bus, char **args, unsigned n) {
|
||||
goto finish;
|
||||
}
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
u = (uint32_t) uid;
|
||||
ret = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"GetUser");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
u = (uint32_t) uid;
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_UINT32, &u,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
"GetUser",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_UINT32, &u,
|
||||
DBUS_TYPE_INVALID);
|
||||
} else {
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
ret = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"GetSeat");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
"GetSeat",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_INVALID);
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
ret = -EIO;
|
||||
if (ret)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_get_args(reply, &error,
|
||||
DBUS_TYPE_OBJECT_PATH, &path,
|
||||
@@ -1155,15 +1059,11 @@ static int show(DBusConnection *bus, char **args, unsigned n) {
|
||||
if (r != 0)
|
||||
ret = r;
|
||||
|
||||
dbus_message_unref(m);
|
||||
dbus_message_unref(reply);
|
||||
m = reply = NULL;
|
||||
reply = NULL;
|
||||
}
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
@@ -1173,153 +1073,79 @@ finish:
|
||||
}
|
||||
|
||||
static int activate(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL;
|
||||
int ret = 0;
|
||||
DBusError error;
|
||||
unsigned i;
|
||||
|
||||
assert(bus);
|
||||
assert(args);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
DBusMessage *reply;
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
ret = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
streq(args[0], "lock-session") ? "LockSession" :
|
||||
streq(args[0], "unlock-session") ? "UnlockSession" :
|
||||
streq(args[0], "terminate-session") ? "TerminateSession" :
|
||||
"ActivateSession");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
"ActivateSession",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_INVALID);
|
||||
if (ret)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
ret = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
dbus_message_unref(m);
|
||||
dbus_message_unref(reply);
|
||||
m = reply = NULL;
|
||||
}
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int kill_session(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL;
|
||||
int ret = 0;
|
||||
DBusError error;
|
||||
unsigned i;
|
||||
|
||||
assert(bus);
|
||||
assert(args);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
if (!arg_kill_who)
|
||||
arg_kill_who = "all";
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
DBusMessage *reply;
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
ret = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"KillSession");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
"KillSession",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_STRING, &arg_kill_who,
|
||||
DBUS_TYPE_INT32, &arg_signal,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (ret)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_STRING, &arg_kill_who,
|
||||
DBUS_TYPE_INT32, &arg_signal,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
ret = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
dbus_message_unref(m);
|
||||
dbus_message_unref(reply);
|
||||
m = reply = NULL;
|
||||
}
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int enable_linger(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL;
|
||||
int ret = 0;
|
||||
DBusError error;
|
||||
unsigned i;
|
||||
dbus_bool_t b, interactive = true;
|
||||
|
||||
assert(bus);
|
||||
assert(args);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
polkit_agent_open_if_enabled();
|
||||
|
||||
b = streq(args[0], "enable-linger");
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
DBusMessage *reply;
|
||||
uint32_t u;
|
||||
uid_t uid;
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"SetUserLinger");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL, NULL);
|
||||
if (ret < 0) {
|
||||
log_error("Failed to resolve user %s: %s", args[i], strerror(-ret));
|
||||
@@ -1327,65 +1153,35 @@ static int enable_linger(DBusConnection *bus, char **args, unsigned n) {
|
||||
}
|
||||
|
||||
u = (uint32_t) uid;
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_UINT32, &u,
|
||||
DBUS_TYPE_BOOLEAN, &b,
|
||||
DBUS_TYPE_BOOLEAN, &interactive,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
ret = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"SetUserLinger",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_UINT32, &u,
|
||||
DBUS_TYPE_BOOLEAN, &b,
|
||||
DBUS_TYPE_BOOLEAN, &interactive,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (ret)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
ret = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
dbus_message_unref(m);
|
||||
dbus_message_unref(reply);
|
||||
m = reply = NULL;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int terminate_user(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL;
|
||||
int ret = 0;
|
||||
DBusError error;
|
||||
unsigned i;
|
||||
|
||||
assert(bus);
|
||||
assert(args);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
uint32_t u;
|
||||
uid_t uid;
|
||||
DBusMessage *reply;
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"TerminateUser");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL, NULL);
|
||||
if (ret < 0) {
|
||||
@@ -1394,67 +1190,37 @@ static int terminate_user(DBusConnection *bus, char **args, unsigned n) {
|
||||
}
|
||||
|
||||
u = (uint32_t) uid;
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_UINT32, &u,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
ret = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"TerminateUser",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_UINT32, &u,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (ret)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
ret = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
dbus_message_unref(m);
|
||||
dbus_message_unref(reply);
|
||||
m = reply = NULL;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int kill_user(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL;
|
||||
int ret = 0;
|
||||
DBusError error;
|
||||
unsigned i;
|
||||
|
||||
assert(bus);
|
||||
assert(args);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
if (!arg_kill_who)
|
||||
arg_kill_who = "all";
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
DBusMessage *reply;
|
||||
uid_t uid;
|
||||
uint32_t u;
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"KillUser");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
ret = get_user_creds((const char**) (args+i), &uid, NULL, NULL, NULL);
|
||||
if (ret < 0) {
|
||||
log_error("Failed to look up user %s: %s", args[i], strerror(-ret));
|
||||
@@ -1462,241 +1228,110 @@ static int kill_user(DBusConnection *bus, char **args, unsigned n) {
|
||||
}
|
||||
|
||||
u = (uint32_t) uid;
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_UINT32, &u,
|
||||
DBUS_TYPE_INT32, &arg_signal,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
ret = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"KillUser",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_UINT32, &u,
|
||||
DBUS_TYPE_INT32, &arg_signal,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (ret)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
ret = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
dbus_message_unref(m);
|
||||
dbus_message_unref(reply);
|
||||
m = reply = NULL;
|
||||
}
|
||||
|
||||
ret = 0;
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int attach(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL;
|
||||
int ret = 0;
|
||||
DBusError error;
|
||||
unsigned i;
|
||||
dbus_bool_t interactive = true;
|
||||
|
||||
assert(bus);
|
||||
assert(args);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
polkit_agent_open_if_enabled();
|
||||
|
||||
for (i = 2; i < n; i++) {
|
||||
DBusMessage *reply;
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
ret = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"AttachDevice");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
"AttachDevice",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &args[1],
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_BOOLEAN, &interactive,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (ret)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &args[1],
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_BOOLEAN, &interactive,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
ret = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
dbus_message_unref(m);
|
||||
dbus_message_unref(reply);
|
||||
m = reply = NULL;
|
||||
}
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int flush_devices(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
int ret = 0;
|
||||
DBusError error;
|
||||
dbus_bool_t interactive = true;
|
||||
|
||||
assert(bus);
|
||||
assert(args);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
polkit_agent_open_if_enabled();
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
return bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"FlushDevices");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_BOOLEAN, &interactive,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
ret = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return ret;
|
||||
"FlushDevices",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_BOOLEAN, &interactive,
|
||||
DBUS_TYPE_INVALID);
|
||||
}
|
||||
|
||||
static int lock_sessions(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
int ret = 0;
|
||||
DBusError error;
|
||||
|
||||
assert(bus);
|
||||
assert(args);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
polkit_agent_open_if_enabled();
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
return bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"LockSessions");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
ret = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return ret;
|
||||
"LockSessions",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_INVALID);
|
||||
}
|
||||
|
||||
static int terminate_seat(DBusConnection *bus, char **args, unsigned n) {
|
||||
DBusMessage *m = NULL;
|
||||
int ret = 0;
|
||||
DBusError error;
|
||||
unsigned i;
|
||||
|
||||
assert(bus);
|
||||
assert(args);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
for (i = 1; i < n; i++) {
|
||||
DBusMessage *reply;
|
||||
|
||||
m = dbus_message_new_method_call(
|
||||
ret = bus_method_call_with_reply (
|
||||
bus,
|
||||
"org.freedesktop.login1",
|
||||
"/org/freedesktop/login1",
|
||||
"org.freedesktop.login1.Manager",
|
||||
"TerminateSeat");
|
||||
if (!m) {
|
||||
log_error("Could not allocate message.");
|
||||
ret = -ENOMEM;
|
||||
"TerminateSeat",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_INVALID);
|
||||
if (ret)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &args[i],
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
ret = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
ret = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
dbus_message_unref(m);
|
||||
dbus_message_unref(reply);
|
||||
m = reply = NULL;
|
||||
}
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
+8
-23
@@ -968,36 +968,21 @@ static int have_multiple_sessions(
|
||||
}
|
||||
|
||||
static int send_start_unit(DBusConnection *connection, const char *unit_name, DBusError *error) {
|
||||
DBusMessage *message, *reply;
|
||||
const char *mode = "replace";
|
||||
|
||||
assert(connection);
|
||||
assert(unit_name);
|
||||
|
||||
message = dbus_message_new_method_call(
|
||||
return bus_method_call_with_reply (
|
||||
connection,
|
||||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
"org.freedesktop.systemd1.Manager",
|
||||
"StartUnit");
|
||||
if (!message)
|
||||
return -ENOMEM;
|
||||
|
||||
if (!dbus_message_append_args(message,
|
||||
DBUS_TYPE_STRING, &unit_name,
|
||||
DBUS_TYPE_STRING, &mode,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
dbus_message_unref(message);
|
||||
return -ENOMEM;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(connection, message, -1, error);
|
||||
dbus_message_unref(message);
|
||||
|
||||
if (!reply)
|
||||
return -EIO;
|
||||
|
||||
dbus_message_unref(reply);
|
||||
return 0;
|
||||
"StartUnit",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &unit_name,
|
||||
DBUS_TYPE_STRING, &mode,
|
||||
DBUS_TYPE_INVALID);
|
||||
}
|
||||
|
||||
static int send_prepare_for(Manager *m, InhibitWhat w, bool _active) {
|
||||
|
||||
+11
-36
@@ -942,16 +942,12 @@ static int vt_is_busy(int vtnr) {
|
||||
|
||||
int manager_spawn_autovt(Manager *m, int vtnr) {
|
||||
int r;
|
||||
DBusMessage *message = NULL, *reply = NULL;
|
||||
char *name = NULL;
|
||||
const char *mode = "fail";
|
||||
DBusError error;
|
||||
|
||||
assert(m);
|
||||
assert(vtnr >= 1);
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
if ((unsigned) vtnr > m->n_autovts)
|
||||
return 0;
|
||||
|
||||
@@ -961,47 +957,26 @@ int manager_spawn_autovt(Manager *m, int vtnr) {
|
||||
else if (r > 0)
|
||||
return -EBUSY;
|
||||
|
||||
message = dbus_message_new_method_call("org.freedesktop.systemd1", "/org/freedesktop/systemd1", "org.freedesktop.systemd1.Manager", "StartUnit");
|
||||
if (!message) {
|
||||
log_error("Could not allocate message.");
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (asprintf(&name, "autovt@tty%i.service", vtnr) < 0) {
|
||||
log_error("Could not allocate service name.");
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(message,
|
||||
DBUS_TYPE_STRING, &name,
|
||||
DBUS_TYPE_STRING, &mode,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not attach target and flag information to message.");
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(m->bus, message, -1, &error);
|
||||
if (!reply) {
|
||||
log_error("Failed to start unit: %s", bus_error_message(&error));
|
||||
goto finish;
|
||||
}
|
||||
|
||||
r = 0;
|
||||
r = bus_method_call_with_reply (
|
||||
m->bus,
|
||||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
"org.freedesktop.systemd1.Manager",
|
||||
"StartUnit",
|
||||
NULL,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &name,
|
||||
DBUS_TYPE_STRING, &mode,
|
||||
DBUS_TYPE_INVALID);
|
||||
|
||||
finish:
|
||||
free(name);
|
||||
|
||||
if (message)
|
||||
dbus_message_unref(message);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
|
||||
@@ -1237,3 +1237,76 @@ finish:
|
||||
|
||||
return (pid_t) pid;
|
||||
}
|
||||
|
||||
bool bus_error_is_no_service(const DBusError *error) {
|
||||
assert(error);
|
||||
|
||||
if (!dbus_error_is_set(error))
|
||||
return false;
|
||||
|
||||
if (dbus_error_has_name(error, DBUS_ERROR_NAME_HAS_NO_OWNER))
|
||||
return true;
|
||||
|
||||
if (dbus_error_has_name(error, DBUS_ERROR_SERVICE_UNKNOWN))
|
||||
return true;
|
||||
|
||||
return startswith(error->name, "org.freedesktop.DBus.Error.Spawn.");
|
||||
}
|
||||
|
||||
int bus_method_call_with_reply(DBusConnection *bus,
|
||||
const char *destination,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *method,
|
||||
DBusMessage **return_reply,
|
||||
DBusError *return_error,
|
||||
int first_arg_type, ...) {
|
||||
DBusError error;
|
||||
DBusMessage *m, *reply;
|
||||
va_list ap;
|
||||
int r = 0;
|
||||
|
||||
dbus_error_init(&error);
|
||||
assert(bus);
|
||||
|
||||
m = dbus_message_new_method_call(destination, path, interface, method);
|
||||
if (!m) {
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
|
||||
va_start(ap, first_arg_type);
|
||||
if (!dbus_message_append_args_valist(m, first_arg_type, ap)) {
|
||||
va_end(ap);
|
||||
dbus_message_unref(m);
|
||||
r = log_oom();
|
||||
goto finish;
|
||||
}
|
||||
va_end(ap);
|
||||
|
||||
reply = dbus_connection_send_with_reply_and_block(bus, m, -1, &error);
|
||||
dbus_message_unref(m);
|
||||
if (!reply) {
|
||||
log_error("Failed to issue method call: %s", bus_error_message(&error));
|
||||
if (bus_error_is_no_service(&error))
|
||||
r = -ENOENT;
|
||||
else if (dbus_error_has_name(&error, DBUS_ERROR_ACCESS_DENIED))
|
||||
r = -EACCES;
|
||||
else if (dbus_error_has_name(&error, DBUS_ERROR_NO_REPLY))
|
||||
r = -ETIMEDOUT;
|
||||
else
|
||||
r = -EIO;
|
||||
goto finish;
|
||||
}
|
||||
if (return_reply)
|
||||
*return_reply = reply;
|
||||
else
|
||||
dbus_message_unref(reply);
|
||||
finish:
|
||||
if(return_error)
|
||||
*return_error=error;
|
||||
else
|
||||
dbus_error_free(&error);
|
||||
|
||||
return r;
|
||||
}
|
||||
|
||||
@@ -203,3 +203,13 @@ void bus_async_unregister_and_exit(DBusConnection *bus, const char *name);
|
||||
DBusHandlerResult bus_exit_idle_filter(DBusConnection *bus, DBusMessage *m, void *userdata);
|
||||
|
||||
pid_t bus_get_unix_process_id(DBusConnection *connection, const char *name, DBusError *error);
|
||||
|
||||
bool bus_error_is_no_service(const DBusError *error);
|
||||
int bus_method_call_with_reply(DBusConnection *bus,
|
||||
const char *destination,
|
||||
const char *path,
|
||||
const char *interface,
|
||||
const char *method,
|
||||
DBusMessage **return_reply,
|
||||
DBusError *return_error,
|
||||
int first_arg_type, ...);
|
||||
|
||||
+342
-905
File diff suppressed because it is too large
Load Diff
@@ -50,36 +50,24 @@ static usec_t get_startup_time(Context *c) {
|
||||
*interface = "org.freedesktop.systemd1.Manager",
|
||||
*property = "StartupTimestamp";
|
||||
|
||||
DBusError error;
|
||||
usec_t t = 0;
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
DBusMessage *reply = NULL;
|
||||
DBusMessageIter iter, sub;
|
||||
|
||||
dbus_error_init(&error);
|
||||
|
||||
assert(c);
|
||||
|
||||
if (!(m = dbus_message_new_method_call(
|
||||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
"org.freedesktop.DBus.Properties",
|
||||
"Get"))) {
|
||||
log_error("Could not allocate message.");
|
||||
if (bus_method_call_with_reply (
|
||||
c->bus,
|
||||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
"org.freedesktop.DBus.Properties",
|
||||
"Get",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &interface,
|
||||
DBUS_TYPE_STRING, &property,
|
||||
DBUS_TYPE_INVALID))
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &interface,
|
||||
DBUS_TYPE_STRING, &property,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!(reply = dbus_connection_send_with_reply_and_block(c->bus, m, -1, &error))) {
|
||||
log_error("Failed to send command: %s", bus_error_message(&error));
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_iter_init(reply, &iter) ||
|
||||
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
|
||||
@@ -97,14 +85,8 @@ static usec_t get_startup_time(Context *c) {
|
||||
dbus_message_iter_get_basic(&sub, &t);
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
dbus_error_free(&error);
|
||||
|
||||
return t;
|
||||
}
|
||||
|
||||
@@ -128,7 +110,7 @@ static int get_current_runlevel(Context *c) {
|
||||
*interface = "org.freedesktop.systemd1.Unit",
|
||||
*property = "ActiveState";
|
||||
|
||||
DBusMessage *m = NULL, *reply = NULL;
|
||||
DBusMessage *reply = NULL;
|
||||
int r = 0;
|
||||
unsigned i;
|
||||
DBusError error;
|
||||
@@ -141,28 +123,20 @@ static int get_current_runlevel(Context *c) {
|
||||
const char *path = NULL, *state;
|
||||
DBusMessageIter iter, sub;
|
||||
|
||||
if (!(m = dbus_message_new_method_call(
|
||||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
"org.freedesktop.systemd1.Manager",
|
||||
"GetUnit"))) {
|
||||
log_error("Could not allocate message.");
|
||||
r = -ENOMEM;
|
||||
r = bus_method_call_with_reply (
|
||||
c->bus,
|
||||
"org.freedesktop.systemd1",
|
||||
"/org/freedesktop/systemd1",
|
||||
"org.freedesktop.systemd1.Manager",
|
||||
"GetUnit",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &table[i].special,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (r == -ENOMEM)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &table[i].special,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!(reply = dbus_connection_send_with_reply_and_block(c->bus, m, -1, &error))) {
|
||||
dbus_error_free(&error);
|
||||
if (r)
|
||||
continue;
|
||||
}
|
||||
|
||||
if (!dbus_message_get_args(reply, &error,
|
||||
DBUS_TYPE_OBJECT_PATH, &path,
|
||||
@@ -172,32 +146,20 @@ static int get_current_runlevel(Context *c) {
|
||||
goto finish;
|
||||
}
|
||||
|
||||
dbus_message_unref(m);
|
||||
if (!(m = dbus_message_new_method_call(
|
||||
"org.freedesktop.systemd1",
|
||||
path,
|
||||
"org.freedesktop.DBus.Properties",
|
||||
"Get"))) {
|
||||
log_error("Could not allocate message.");
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_append_args(m,
|
||||
DBUS_TYPE_STRING, &interface,
|
||||
DBUS_TYPE_STRING, &property,
|
||||
DBUS_TYPE_INVALID)) {
|
||||
log_error("Could not append arguments to message.");
|
||||
r = -ENOMEM;
|
||||
goto finish;
|
||||
}
|
||||
|
||||
dbus_message_unref(reply);
|
||||
if (!(reply = dbus_connection_send_with_reply_and_block(c->bus, m, -1, &error))) {
|
||||
log_error("Failed to send command: %s", bus_error_message(&error));
|
||||
r = -EIO;
|
||||
r = bus_method_call_with_reply (
|
||||
c->bus,
|
||||
"org.freedesktop.systemd1",
|
||||
path,
|
||||
"org.freedesktop.DBus.Properties",
|
||||
"Get",
|
||||
&reply,
|
||||
NULL,
|
||||
DBUS_TYPE_STRING, &interface,
|
||||
DBUS_TYPE_STRING, &property,
|
||||
DBUS_TYPE_INVALID);
|
||||
if (r)
|
||||
goto finish;
|
||||
}
|
||||
|
||||
if (!dbus_message_iter_init(reply, &iter) ||
|
||||
dbus_message_iter_get_arg_type(&iter) != DBUS_TYPE_VARIANT) {
|
||||
@@ -219,18 +181,14 @@ static int get_current_runlevel(Context *c) {
|
||||
if (streq(state, "active") || streq(state, "reloading"))
|
||||
r = table[i].runlevel;
|
||||
|
||||
dbus_message_unref(m);
|
||||
dbus_message_unref(reply);
|
||||
m = reply = NULL;
|
||||
reply = NULL;
|
||||
|
||||
if (r)
|
||||
break;
|
||||
}
|
||||
|
||||
finish:
|
||||
if (m)
|
||||
dbus_message_unref(m);
|
||||
|
||||
if (reply)
|
||||
dbus_message_unref(reply);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user