From 6fc7f86a89dbcbe1e36ade37c61d4a974be81596 Mon Sep 17 00:00:00 2001 From: Eugen Wissner Date: Wed, 19 Jun 2024 12:11:56 +0200 Subject: Implement CanNTP property --- src/timedate.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) (limited to 'src/timedate.cpp') diff --git a/src/timedate.cpp b/src/timedate.cpp index b06cbcc..101a925 100644 --- a/src/timedate.cpp +++ b/src/timedate.cpp @@ -18,6 +18,7 @@ #include #include #include +#include #include #include "timedate.h" @@ -116,6 +117,10 @@ static void slack_get_property(Glib::VariantBase& result, const Glib::RefPtr::create(dlackware::timedate::ntp()); } + else if (prop_name == "CanNTP") + { + result = Glib::Variant::create(dlackware::timedate::can_ntp()); + } } namespace dlackware::timedate @@ -265,6 +270,24 @@ namespace dlackware::timedate return Glib::file_test("/etc/rc.d/rc.ntpd", Glib::FileTest::FILE_TEST_IS_EXECUTABLE); } + bool can_ntp() + { + std::string standard_output; + int wait_status{-1}; + + try + { + Glib::spawn_sync("", std::vector{ "s6-rc-db", "type", "ntpd" }, + Glib::SpawnFlags::SPAWN_SEARCH_PATH | Glib::SpawnFlags::SPAWN_STDERR_TO_DEV_NULL, + {}, &standard_output, nullptr, &wait_status); + } + catch (const Glib::SpawnError& spawn_error) + { + return std::filesystem::exists("/etc/rc.d/rc.ntpd"); + } + return wait_status == 0 && standard_output == "bundle\n"; + } + void set_time(gint64 seconds_since_epoch, bool relative, bool) { timespec ts; -- cgit v1.2.3