48 lines
1.3 KiB
C
48 lines
1.3 KiB
C
/* SPDX-License-Identifier: LGPL-2.1-or-later */
|
|
|
|
#include <linux/capability.h>
|
|
|
|
#include "bus-common-errors.h"
|
|
#include "bus-polkit.h"
|
|
#include "fd-util.h"
|
|
#include "oomd-manager-bus.h"
|
|
#include "oomd-manager.h"
|
|
#include "user-util.h"
|
|
|
|
static int bus_method_dump_by_fd(sd_bus_message *message, void *userdata, sd_bus_error *error) {
|
|
_cleanup_free_ char *dump = NULL;
|
|
_cleanup_close_ int fd = -1;
|
|
Manager *m = userdata;
|
|
int r;
|
|
|
|
assert(message);
|
|
assert(m);
|
|
|
|
r = manager_get_dump_string(m, &dump);
|
|
if (r < 0)
|
|
return r;
|
|
|
|
fd = acquire_data_fd(dump, strlen(dump), 0);
|
|
if (fd < 0)
|
|
return fd;
|
|
|
|
return sd_bus_reply_method_return(message, "h", fd);
|
|
}
|
|
|
|
static const sd_bus_vtable manager_vtable[] = {
|
|
SD_BUS_VTABLE_START(0),
|
|
SD_BUS_METHOD_WITH_NAMES("DumpByFileDescriptor",
|
|
NULL,,
|
|
"h",
|
|
SD_BUS_PARAM(fd),
|
|
bus_method_dump_by_fd,
|
|
SD_BUS_VTABLE_UNPRIVILEGED),
|
|
SD_BUS_VTABLE_END
|
|
};
|
|
|
|
const BusObjectImplementation manager_object = {
|
|
"/org/freedesktop/oom1",
|
|
"org.freedesktop.oom1.Manager",
|
|
.vtables = BUS_VTABLES(manager_vtable),
|
|
};
|