#include "bus-internal.h"
#include "bus-message.h"
#include "bus-util.h"
-#include "bus-internal.h"
#include "build.h"
#include "strv.h"
#include "def.h"
assert(argc >= 0);
assert(argv);
- while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0) {
+ while ((c = getopt_long(argc, argv, "h", options, NULL)) >= 0)
switch (c) {
default:
assert_not_reached("Unhandled option");
}
- }
/* If the first command line argument is only "x" characters
* we'll write who we are talking to into it, so that "ps" is
pid, p,
uid, name,
a->unique_name);
- ;
+
return 0;
}
_cleanup_bus_message_unref_ sd_bus_message *m = NULL;
int r;
+ assert(call);
+
if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
return 0;
_cleanup_bus_error_free_ sd_bus_error berror = SD_BUS_ERROR_NULL;
+ assert(call);
+
if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
return 0;
_cleanup_bus_message_unref_ sd_bus_message *m = NULL;
int r;
+ assert(call);
+
if (call->header->flags & BUS_MESSAGE_NO_REPLY_EXPECTED)
return 0;
_cleanup_bus_message_unref_ sd_bus_message *m = NULL;
int r;
+ assert(call);
+
r = sd_bus_message_new_method_return(call, &m);
if (r < 0)
return synthetic_reply_method_errno(call, r, NULL);
} else if (sd_bus_message_is_method_call(m, "org.freedesktop.DBus", "ListQueuedOwners")) {
struct kdbus_cmd_name_list cmd = {};
struct kdbus_name_list *name_list;
+ struct kdbus_cmd_free cmd_free;
struct kdbus_cmd_name *name;
_cleanup_strv_free_ char **owners = NULL;
char *arg0;
if (r < 0)
return synthetic_reply_method_errno(m, r, NULL);
- if (service_name_is_valid(arg0) < 0)
+ if (!service_name_is_valid(arg0))
return synthetic_reply_method_errno(m, -EINVAL, NULL);
cmd.flags = KDBUS_NAME_LIST_QUEUED;
name_list = (struct kdbus_name_list *) ((uint8_t *) a->kdbus_buffer + cmd.offset);
KDBUS_ITEM_FOREACH(name, name_list, names) {
+ const char *entry_name = NULL;
+ struct kdbus_item *item;
char *n;
- if (name->size <= sizeof(*name))
- continue;
+ KDBUS_ITEM_FOREACH(item, name, items)
+ if (item->type == KDBUS_ITEM_NAME)
+ entry_name = item->str;
- if (!streq(name->name, arg0))
+ if (!streq_ptr(entry_name, arg0))
continue;
if (asprintf(&n, ":1.%llu", (unsigned long long) name->owner_id) < 0) {
}
}
- r = ioctl(a->input_fd, KDBUS_CMD_FREE, &cmd.offset);
+ cmd_free.flags = 0;
+ cmd_free.offset = cmd.offset;
+
+ r = ioctl(a->input_fd, KDBUS_CMD_FREE, &cmd_free);
if (r < 0)
return synthetic_reply_method_errno(m, r, NULL);
- if (err > 0)
+ if (err < 0)
return synthetic_reply_method_errno(m, err, NULL);
return synthetic_reply_return_strv(m, owners);
if (r < 0)
return synthetic_reply_method_errno(m, r, NULL);
- if (service_name_is_valid(name) < 0)
+ if (!service_name_is_valid(name))
return synthetic_reply_method_errno(m, -EINVAL, NULL);
if (streq(name, "org.freedesktop.DBus"))
if (r < 0)
return synthetic_reply_method_errno(m, r, NULL);
- if (service_name_is_valid(name) < 0)
+ if (!service_name_is_valid(name))
return synthetic_reply_method_errno(m, -EINVAL, NULL);
r = sd_bus_release_name(a, name);
if (r < 0)
return synthetic_reply_method_errno(m, r, NULL);
- if (service_name_is_valid(name) < 0)
+ if (!service_name_is_valid(name))
return synthetic_reply_method_errno(m, -EINVAL, NULL);
if ((flags & ~(BUS_NAME_ALLOW_REPLACEMENT|BUS_NAME_REPLACE_EXISTING|BUS_NAME_DO_NOT_QUEUE)) != 0)
return synthetic_reply_method_errno(m, -EINVAL, NULL);
if (r < 0)
return synthetic_reply_method_errno(m, r, NULL);
- if (service_name_is_valid(name) < 0)
+ if (!service_name_is_valid(name))
return synthetic_reply_method_errno(m, -EINVAL, NULL);
if (flags != 0)
return synthetic_reply_method_errno(m, -EINVAL, NULL);
int main(int argc, char *argv[]) {
- _cleanup_bus_unref_ sd_bus *a = NULL, *b = NULL;
+ _cleanup_bus_close_unref_ sd_bus *a = NULL, *b = NULL;
sd_id128_t server_id;
int r, in_fd, out_fd;
bool got_hello = false;
sd_is_socket(out_fd, AF_UNIX, 0, 0) > 0;
if (is_unix) {
- getpeercred(in_fd, &ucred);
- getpeersec(in_fd, &peersec);
+ r = getpeercred(in_fd, &ucred);
+ if (r < 0) {
+ log_error("Failed to get peer creds: %s", strerror(-r));
+ goto finish;
+ }
+
+ (void) getpeersec(in_fd, &peersec);
}
if (arg_drop_privileges) {
else {
k = sd_bus_send(a, m, NULL);
if (k < 0) {
- if (r == -ECONNRESET)
+ if (k == -ECONNRESET)
r = 0;
else {
r = k;
}
finish:
- sd_bus_flush(a);
- sd_bus_flush(b);
- sd_bus_close(a);
- sd_bus_close(b);
+ sd_notify(false,
+ "STOPPING=1\n"
+ "STATUS=Shutting down.");
policy_free(&policy);
strv_free(arg_configuration);