diff options
Diffstat (limited to 'src/npassd/npassd.c')
-rw-r--r-- | src/npassd/npassd.c | 63 |
1 files changed, 63 insertions, 0 deletions
diff --git a/src/npassd/npassd.c b/src/npassd/npassd.c new file mode 100644 index 0000000..a2f5173 --- /dev/null +++ b/src/npassd/npassd.c @@ -0,0 +1,63 @@ +#include <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> +#include <systemd/sd-bus.h> + +#include "npassd/service.h" +#include "util.h" + +#define DBUS_WELL_KNOWN_NAME "org.freedesktop.secrets" + +int main(void) +{ + int ret; + sd_bus *bus; + struct service service; + + ret = sd_bus_open_user(&bus); + if (ret < 0) { + print_err("Failed to connect to bus: %s", strerror(-ret)); + return EXIT_FAILURE; + } + + ret = sd_bus_request_name(bus, DBUS_WELL_KNOWN_NAME, 0); + if (ret < 0) { + print_err("Failed to acquire service name: %s", strerror(-ret)); + if (ret == -EEXIST) + print_err( + "%s", + "Is a secret-service daemon already running?"); + + goto out_free_bus; + } + + ret = service_init(bus, &service); + if (ret < 0) + goto out_free_bus; + + for (;;) { + ret = sd_bus_process(bus, NULL); + if (ret < 0) { + fprintf(stderr, "Failed to process bus: %s\n", + strerror(-ret)); + goto out_free_service; + } + if (ret > 0) + continue; + + ret = sd_bus_wait(bus, UINT64_MAX); + if (ret < 0) { + fprintf(stderr, "Failed to wait on bus: %s\n", + strerror(-ret)); + goto out_free_service; + } + } + +out_free_service: + service_free(&service); +out_free_bus: + sd_bus_unref(bus); + + return ret < 0 ? EXIT_FAILURE : EXIT_SUCCESS; +} |