diff options
author | tibbling <45659916+tibbling@users.noreply.github.com> | 2018-12-12 20:49:04 +0100 |
---|---|---|
committer | Lennart Poettering <lennart@poettering.net> | 2018-12-12 20:49:04 +0100 |
commit | 2cf0b2fe2d7330ac962aa443a2f12aef00679325 (patch) | |
tree | f957e26402ff2c762e7119efe27252d9e77cf4b5 /src/timedate/timedated.c | |
parent | e92aaed30e0b5750e5633765f1bddd51c96678e5 (diff) | |
download | systemd-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.c | 23 |
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, }; |