#include "bus-common-errors.h"
#include "bus-polkit.h"
#include "fd-util.h"
+#include "format-util.h"
#include "homed-bus.h"
#include "homed-home-bus.h"
#include "homed-home.h"
return euid == 0 || h->uid == euid;
}
+static int home_verify_polkit_async(
+ Home *h,
+ sd_bus_message *message,
+ const char *action,
+ uid_t good_uid,
+ sd_bus_error *error) {
+
+ assert(h);
+ assert(message);
+ assert(action);
+ assert(error);
+
+ const char *details[] = {
+ "uid", FORMAT_UID(h->uid),
+ "username", h->user_name,
+ NULL
+ };
+
+ return bus_verify_polkit_async_full(
+ message,
+ action,
+ details,
+ /* interactive= */ false,
+ good_uid,
+ &h->manager->polkit_registry,
+ error);
+}
+
+
int bus_home_get_record_json(
Home *h,
sd_bus_message *message,
assert(message);
- r = bus_verify_polkit_async(
+ r = home_verify_polkit_async(
+ h,
message,
"org.freedesktop.home1.remove-home",
- /* details= */ NULL,
- &h->manager->polkit_registry,
+ UID_INVALID,
error);
if (r < 0)
return r;
if (r < 0)
return r;
- r = bus_verify_polkit_async(
+ r = home_verify_polkit_async(
+ h,
message,
"org.freedesktop.home1.create-home",
- /* details= */ NULL,
- &h->manager->polkit_registry,
+ UID_INVALID,
error);
if (r < 0)
return r;
assert(message);
- r = bus_verify_polkit_async(
+ r = home_verify_polkit_async(
+ h,
message,
"org.freedesktop.home1.remove-home",
- /* details= */ NULL,
- &h->manager->polkit_registry,
+ UID_INVALID,
error);
if (r < 0)
return r;
if (r < 0)
return r;
- r = bus_verify_polkit_async_full(
+ r = home_verify_polkit_async(
+ h,
message,
"org.freedesktop.home1.authenticate-home",
- /* details= */ NULL,
- /* interactive= */ false,
h->uid,
- &h->manager->polkit_registry,
error);
if (r < 0)
return r;
if (r < 0)
return r;
- r = bus_verify_polkit_async(
+ r = home_verify_polkit_async(
+ h,
message,
"org.freedesktop.home1.update-home",
- /* details= */ NULL,
- &h->manager->polkit_registry,
+ UID_INVALID,
error);
if (r < 0)
return r;
if (r < 0)
return r;
- r = bus_verify_polkit_async(
+ r = home_verify_polkit_async(
+ h,
message,
"org.freedesktop.home1.resize-home",
- /* details= */ NULL,
- &h->manager->polkit_registry,
+ UID_INVALID,
error);
if (r < 0)
return r;
if (r < 0)
return r;
- r = bus_verify_polkit_async_full(
+ r = home_verify_polkit_async(
+ h,
message,
"org.freedesktop.home1.passwd-home",
- /* details= */ NULL,
- /* interactive= */ false,
h->uid,
- &h->manager->polkit_registry,
error);
if (r < 0)
return r;
HomeState state;
int r;
- r = bus_verify_polkit_async_full(
+ r = home_verify_polkit_async(
+ h,
message,
"org.freedesktop.home1.inhibit-suspend",
- /* details= */ NULL,
- /* interactive= */ false,
h->uid,
- &h->manager->polkit_registry,
error);
if (r < 0)
return r;