From 6057a2ca30a2a94c7ff924cbdde6ac922d537fed Mon Sep 17 00:00:00 2001 From: Timothy Flynn Date: Thu, 20 Jan 2022 08:15:19 -0500 Subject: [PATCH] timezone: Add a command line utility to set the system time zone --- Meta/build-root-filesystem.sh | 4 ++++ Userland/Utilities/CMakeLists.txt | 1 + Userland/Utilities/timezone.cpp | 33 +++++++++++++++++++++++++++++++ 3 files changed, 38 insertions(+) create mode 100644 Userland/Utilities/timezone.cpp diff --git a/Meta/build-root-filesystem.sh b/Meta/build-root-filesystem.sh index 8cc8be1112..fe26f63944 100755 --- a/Meta/build-root-filesystem.sh +++ b/Meta/build-root-filesystem.sh @@ -101,6 +101,10 @@ if [ -f mnt/bin/utmpupdate ]; then chown 0:$utmp_gid mnt/bin/utmpupdate chmod 2755 mnt/bin/utmpupdate fi +if [ -f mnt/bin/timezone ]; then + chown 0:$phys_gid mnt/bin/timezone + chmod 4750 mnt/bin/timezone +fi if [ -f mnt/usr/Tests/Kernel/TestMemoryDeviceMmap ]; then chown 0:0 mnt/usr/Tests/Kernel/TestMemoryDeviceMmap chmod 4755 mnt/usr/Tests/Kernel/TestMemoryDeviceMmap diff --git a/Userland/Utilities/CMakeLists.txt b/Userland/Utilities/CMakeLists.txt index 5c106a8f14..0dd3e06f47 100644 --- a/Userland/Utilities/CMakeLists.txt +++ b/Userland/Utilities/CMakeLists.txt @@ -156,6 +156,7 @@ target_link_libraries(telws LibProtocol LibLine) target_link_libraries(test-fuzz LibCore LibGemini LibGfx LibHTTP LibIPC LibJS LibMarkdown LibShell) target_link_libraries(test-imap LibIMAP LibMain) target_link_libraries(test-pthread LibThreading) +target_link_libraries(timezone LibMain) target_link_libraries(top LibMain) target_link_libraries(touch LibMain) target_link_libraries(truncate LibMain) diff --git a/Userland/Utilities/timezone.cpp b/Userland/Utilities/timezone.cpp new file mode 100644 index 0000000000..3c2c008c26 --- /dev/null +++ b/Userland/Utilities/timezone.cpp @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2022, Tim Flynn + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#include +#include +#include +#include +#include +#include + +ErrorOr serenity_main(Main::Arguments arguments) +{ + TRY(Core::System::pledge("stdio rpath wpath cpath")); + TRY(Core::System::unveil("/etc/timezone", "rwc")); + TRY(Core::System::unveil(nullptr, nullptr)); + + StringView time_zone; + + Core::ArgsParser args_parser; + args_parser.add_positional_argument(time_zone, "The time zone to set", "time-zone", Core::ArgsParser::Required::No); + args_parser.parse(arguments); + + if (time_zone.is_empty()) { + outln("{}", TimeZone::current_time_zone()); + return 0; + } + + TRY(TimeZone::change_time_zone(time_zone)); + return 0; +}