summaryrefslogtreecommitdiff
path: root/src/timedate/timedated.c
diff options
context:
space:
mode:
authortibbling <45659916+tibbling@users.noreply.github.com>2018-12-12 20:49:04 +0100
committerLennart Poettering <lennart@poettering.net>2018-12-12 20:49:04 +0100
commit2cf0b2fe2d7330ac962aa443a2f12aef00679325 (patch)
treef957e26402ff2c762e7119efe27252d9e77cf4b5 /src/timedate/timedated.c
parente92aaed30e0b5750e5633765f1bddd51c96678e5 (diff)
downloadsystemd-2cf0b2fe2d7330ac962aa443a2f12aef00679325.tar.gz
timedated: Add dbus method to retrieve list of time zones (#11114)
Move function call get_timezones from timedatectl to timedated and create a dbus method to list timezones.
Diffstat (limited to 'src/timedate/timedated.c')
-rw-r--r--src/timedate/timedated.c23
1 files changed, 23 insertions, 0 deletions
diff --git a/src/timedate/timedated.c b/src/timedate/timedated.c
index 5a432fea24..e16888945c 100644
--- a/src/timedate/timedated.c
+++ b/src/timedate/timedated.c
@@ -916,6 +916,28 @@ static int method_set_ntp(sd_bus_message *m, void *userdata, sd_bus_error *error
return sd_bus_reply_method_return(m, NULL);
}
+static int method_list_timezones(sd_bus_message *m, void *userdata, sd_bus_error *error) {
+ _cleanup_(sd_bus_message_unrefp) sd_bus_message *reply = NULL;
+ _cleanup_strv_free_ char **zones = NULL;
+ int r;
+
+ assert(m);
+
+ r = get_timezones(&zones);
+ if (r < 0)
+ return sd_bus_error_set_errnof(error, r, "Failed to read list of time zones: %m");
+
+ r = sd_bus_message_new_method_return(m, &reply);
+ if (r < 0)
+ return r;
+
+ r = sd_bus_message_append_strv(reply, zones);
+ if (r < 0)
+ return r;
+
+ return sd_bus_send(NULL, reply, NULL);
+}
+
static const sd_bus_vtable timedate_vtable[] = {
SD_BUS_VTABLE_START(0),
SD_BUS_PROPERTY("Timezone", "s", NULL, offsetof(Context, zone), SD_BUS_VTABLE_PROPERTY_EMITS_CHANGE),
@@ -929,6 +951,7 @@ static const sd_bus_vtable timedate_vtable[] = {
SD_BUS_METHOD("SetTimezone", "sb", NULL, method_set_timezone, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_METHOD("SetLocalRTC", "bbb", NULL, method_set_local_rtc, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_METHOD("SetNTP", "bb", NULL, method_set_ntp, SD_BUS_VTABLE_UNPRIVILEGED),
+ SD_BUS_METHOD("ListTimezones", NULL, "as", method_list_timezones, SD_BUS_VTABLE_UNPRIVILEGED),
SD_BUS_VTABLE_END,
};