From ddaceb232c8b537a7d29a9708928d3a3671b98e5 Mon Sep 17 00:00:00 2001 From: haxar Date: Tue, 21 Feb 2012 20:13:04 -0800 Subject: gsd to msd complete rename patch by NiceandGently; code changes commit --- plugins/datetime/Makefile.am | 26 ++-- plugins/datetime/gsd-datetime-mechanism-main.c | 6 +- plugins/datetime/gsd-datetime-mechanism.c | 148 ++++++++++----------- plugins/datetime/gsd-datetime-mechanism.h | 64 ++++----- ...ate.SettingsDaemon.DateTimeMechanism.service.in | 2 +- 5 files changed, 123 insertions(+), 123 deletions(-) (limited to 'plugins/datetime') diff --git a/plugins/datetime/Makefile.am b/plugins/datetime/Makefile.am index 1ae28f7..061443f 100644 --- a/plugins/datetime/Makefile.am +++ b/plugins/datetime/Makefile.am @@ -5,30 +5,30 @@ polkitdir = $(datadir)/polkit-1/actions dbus_services_in_files = org.mate.SettingsDaemon.DateTimeMechanism.service.in polkit_in_files = org.mate.settingsdaemon.datetimemechanism.policy.in -gsd-datetime-mechanism-glue.h: $(srcdir)/gsd-datetime-mechanism.xml +msd-datetime-mechanism-glue.h: $(srcdir)/msd-datetime-mechanism.xml $(AM_V_GEN)dbus-binding-tool \ - --prefix=gsd_datetime_mechanism --mode=glib-server \ - --output=gsd-datetime-mechanism-glue.h \ - $(srcdir)/gsd-datetime-mechanism.xml + --prefix=msd_datetime_mechanism --mode=glib-server \ + --output=msd-datetime-mechanism-glue.h \ + $(srcdir)/msd-datetime-mechanism.xml if HAVE_POLKIT -libexec_PROGRAMS = gsd-datetime-mechanism +libexec_PROGRAMS = msd-datetime-mechanism endif -gsd_datetime_mechanism_SOURCES = \ - gsd-datetime-mechanism.c \ - gsd-datetime-mechanism.h \ - gsd-datetime-mechanism-main.c \ +msd_datetime_mechanism_SOURCES = \ + msd-datetime-mechanism.c \ + msd-datetime-mechanism.h \ + msd-datetime-mechanism-main.c \ system-timezone.c \ system-timezone.h if HAVE_POLKIT -BUILT_SOURCES = gsd-datetime-mechanism-glue.h +BUILT_SOURCES = msd-datetime-mechanism-glue.h endif AM_CFLAGS = $(SETTINGS_PLUGIN_CFLAGS) $(POLKIT_CFLAGS) -gsd_datetime_mechanism_LDADD = $(POLKIT_LIBS) $(SETTINGS_PLUGIN_LIBS) +msd_datetime_mechanism_LDADD = $(POLKIT_LIBS) $(SETTINGS_PLUGIN_LIBS) if HAVE_POLKIT @@ -52,9 +52,9 @@ EXTRA_DIST = \ $(dbus_services_in_files) \ org.mate.SettingsDaemon.DateTimeMechanism.conf \ $(polkit_in_files) \ - gsd-datetime-mechanism.xml + msd-datetime-mechanism.xml CLEANFILES = \ org.mate.SettingsDaemon.DateTimeMechanism.service \ org.mate.settingsdaemon.datetimemechanism.policy \ - $(BUILT_SOURCES) \ No newline at end of file + $(BUILT_SOURCES) diff --git a/plugins/datetime/gsd-datetime-mechanism-main.c b/plugins/datetime/gsd-datetime-mechanism-main.c index 7d6089f..4d13630 100644 --- a/plugins/datetime/gsd-datetime-mechanism-main.c +++ b/plugins/datetime/gsd-datetime-mechanism-main.c @@ -39,7 +39,7 @@ #include -#include "gsd-datetime-mechanism.h" +#include "msd-datetime-mechanism.h" static DBusGProxy * get_bus_proxy (DBusGConnection *connection) @@ -123,7 +123,7 @@ int main (int argc, char **argv) { GMainLoop *loop; - GsdDatetimeMechanism *mechanism; + MsdDatetimeMechanism *mechanism; DBusGProxy *bus_proxy; DBusGConnection *connection; int ret; @@ -152,7 +152,7 @@ main (int argc, char **argv) goto out; } - mechanism = gsd_datetime_mechanism_new (); + mechanism = msd_datetime_mechanism_new (); if (mechanism == NULL) { goto out; diff --git a/plugins/datetime/gsd-datetime-mechanism.c b/plugins/datetime/gsd-datetime-mechanism.c index 5c18040..7b0d338 100644 --- a/plugins/datetime/gsd-datetime-mechanism.c +++ b/plugins/datetime/gsd-datetime-mechanism.c @@ -41,8 +41,8 @@ #include "system-timezone.h" -#include "gsd-datetime-mechanism.h" -#include "gsd-datetime-mechanism-glue.h" +#include "msd-datetime-mechanism.h" +#include "msd-datetime-mechanism-glue.h" static gboolean do_exit (gpointer user_data) @@ -64,26 +64,26 @@ reset_killtimer (void) timer_id = g_timeout_add_seconds (30, do_exit, NULL); } -struct GsdDatetimeMechanismPrivate +struct MsdDatetimeMechanismPrivate { DBusGConnection *system_bus_connection; DBusGProxy *system_bus_proxy; PolkitAuthority *auth; }; -static void gsd_datetime_mechanism_finalize (GObject *object); +static void msd_datetime_mechanism_finalize (GObject *object); -G_DEFINE_TYPE (GsdDatetimeMechanism, gsd_datetime_mechanism, G_TYPE_OBJECT) +G_DEFINE_TYPE (MsdDatetimeMechanism, msd_datetime_mechanism, G_TYPE_OBJECT) -#define GSD_DATETIME_MECHANISM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GSD_DATETIME_TYPE_MECHANISM, GsdDatetimeMechanismPrivate)) +#define MSD_DATETIME_MECHANISM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanismPrivate)) GQuark -gsd_datetime_mechanism_error_quark (void) +msd_datetime_mechanism_error_quark (void) { static GQuark ret = 0; if (ret == 0) { - ret = g_quark_from_static_string ("gsd_datetime_mechanism_error"); + ret = g_quark_from_static_string ("msd_datetime_mechanism_error"); } return ret; @@ -93,7 +93,7 @@ gsd_datetime_mechanism_error_quark (void) #define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC } GType -gsd_datetime_mechanism_error_get_type (void) +msd_datetime_mechanism_error_get_type (void) { static GType etype = 0; @@ -101,15 +101,15 @@ gsd_datetime_mechanism_error_get_type (void) { static const GEnumValue values[] = { - ENUM_ENTRY (GSD_DATETIME_MECHANISM_ERROR_GENERAL, "GeneralError"), - ENUM_ENTRY (GSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, "NotPrivileged"), - ENUM_ENTRY (GSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE, "InvalidTimezoneFile"), + ENUM_ENTRY (MSD_DATETIME_MECHANISM_ERROR_GENERAL, "GeneralError"), + ENUM_ENTRY (MSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, "NotPrivileged"), + ENUM_ENTRY (MSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE, "InvalidTimezoneFile"), { 0, 0, 0 } }; - g_assert (GSD_DATETIME_MECHANISM_NUM_ERRORS == G_N_ELEMENTS (values) - 1); + g_assert (MSD_DATETIME_MECHANISM_NUM_ERRORS == G_N_ELEMENTS (values) - 1); - etype = g_enum_register_static ("GsdDatetimeMechanismError", values); + etype = g_enum_register_static ("MsdDatetimeMechanismError", values); } return etype; @@ -117,13 +117,13 @@ gsd_datetime_mechanism_error_get_type (void) static GObject * -gsd_datetime_mechanism_constructor (GType type, +msd_datetime_mechanism_constructor (GType type, guint n_construct_properties, GObjectConstructParam *construct_properties) { - GsdDatetimeMechanism *mechanism; + MsdDatetimeMechanism *mechanism; - mechanism = GSD_DATETIME_MECHANISM (G_OBJECT_CLASS (gsd_datetime_mechanism_parent_class)->constructor ( + mechanism = MSD_DATETIME_MECHANISM (G_OBJECT_CLASS (msd_datetime_mechanism_parent_class)->constructor ( type, n_construct_properties, construct_properties)); @@ -132,47 +132,47 @@ gsd_datetime_mechanism_constructor (GType type, } static void -gsd_datetime_mechanism_class_init (GsdDatetimeMechanismClass *klass) +msd_datetime_mechanism_class_init (MsdDatetimeMechanismClass *klass) { GObjectClass *object_class = G_OBJECT_CLASS (klass); - object_class->constructor = gsd_datetime_mechanism_constructor; - object_class->finalize = gsd_datetime_mechanism_finalize; + object_class->constructor = msd_datetime_mechanism_constructor; + object_class->finalize = msd_datetime_mechanism_finalize; - g_type_class_add_private (klass, sizeof (GsdDatetimeMechanismPrivate)); + g_type_class_add_private (klass, sizeof (MsdDatetimeMechanismPrivate)); - dbus_g_object_type_install_info (GSD_DATETIME_TYPE_MECHANISM, &dbus_glib_gsd_datetime_mechanism_object_info); + dbus_g_object_type_install_info (MSD_DATETIME_TYPE_MECHANISM, &dbus_glib_msd_datetime_mechanism_object_info); - dbus_g_error_domain_register (GSD_DATETIME_MECHANISM_ERROR, NULL, GSD_DATETIME_MECHANISM_TYPE_ERROR); + dbus_g_error_domain_register (MSD_DATETIME_MECHANISM_ERROR, NULL, MSD_DATETIME_MECHANISM_TYPE_ERROR); } static void -gsd_datetime_mechanism_init (GsdDatetimeMechanism *mechanism) +msd_datetime_mechanism_init (MsdDatetimeMechanism *mechanism) { - mechanism->priv = GSD_DATETIME_MECHANISM_GET_PRIVATE (mechanism); + mechanism->priv = MSD_DATETIME_MECHANISM_GET_PRIVATE (mechanism); } static void -gsd_datetime_mechanism_finalize (GObject *object) +msd_datetime_mechanism_finalize (GObject *object) { - GsdDatetimeMechanism *mechanism; + MsdDatetimeMechanism *mechanism; g_return_if_fail (object != NULL); - g_return_if_fail (GSD_DATETIME_IS_MECHANISM (object)); + g_return_if_fail (MSD_DATETIME_IS_MECHANISM (object)); - mechanism = GSD_DATETIME_MECHANISM (object); + mechanism = MSD_DATETIME_MECHANISM (object); g_return_if_fail (mechanism->priv != NULL); g_object_unref (mechanism->priv->system_bus_proxy); - G_OBJECT_CLASS (gsd_datetime_mechanism_parent_class)->finalize (object); + G_OBJECT_CLASS (msd_datetime_mechanism_parent_class)->finalize (object); } static gboolean -register_mechanism (GsdDatetimeMechanism *mechanism) +register_mechanism (MsdDatetimeMechanism *mechanism) { GError *error = NULL; @@ -205,25 +205,25 @@ error: } -GsdDatetimeMechanism * -gsd_datetime_mechanism_new (void) +MsdDatetimeMechanism * +msd_datetime_mechanism_new (void) { GObject *object; gboolean res; - object = g_object_new (GSD_DATETIME_TYPE_MECHANISM, NULL); + object = g_object_new (MSD_DATETIME_TYPE_MECHANISM, NULL); - res = register_mechanism (GSD_DATETIME_MECHANISM (object)); + res = register_mechanism (MSD_DATETIME_MECHANISM (object)); if (! res) { g_object_unref (object); return NULL; } - return GSD_DATETIME_MECHANISM (object); + return MSD_DATETIME_MECHANISM (object); } static gboolean -_check_polkit_for_action (GsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context, const char *action) +_check_polkit_for_action (MsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context, const char *action) { const char *sender; GError *error; @@ -252,8 +252,8 @@ _check_polkit_for_action (GsdDatetimeMechanism *mechanism, DBusGMethodInvocation } if (!polkit_authorization_result_get_is_authorized (result)) { - error = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, "Not Authorized for action %s", action); dbus_g_method_return_error (context, error); g_error_free (error); @@ -269,7 +269,7 @@ _check_polkit_for_action (GsdDatetimeMechanism *mechanism, DBusGMethodInvocation static gboolean -_set_time (GsdDatetimeMechanism *mechanism, +_set_time (MsdDatetimeMechanism *mechanism, const struct timeval *tv, DBusGMethodInvocation *context) { @@ -279,8 +279,8 @@ _set_time (GsdDatetimeMechanism *mechanism, return FALSE; if (settimeofday (tv, NULL) != 0) { - error = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "Error calling settimeofday({%lld,%lld}): %s", (gint64) tv->tv_sec, (gint64) tv->tv_usec, strerror (errno)); @@ -294,8 +294,8 @@ _set_time (GsdDatetimeMechanism *mechanism, int exit_status; if (!g_spawn_command_line_sync ("/sbin/hwclock --systohc", NULL, NULL, &exit_status, &error)) { GError *error2; - error2 = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "Error spawning /sbin/hwclock: %s", error->message); g_error_free (error); dbus_g_method_return_error (context, error2); @@ -303,8 +303,8 @@ _set_time (GsdDatetimeMechanism *mechanism, return FALSE; } if (WEXITSTATUS (exit_status) != 0) { - error = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "/sbin/hwclock returned %d", exit_status); dbus_g_method_return_error (context, error); g_error_free (error); @@ -332,8 +332,8 @@ _rh_update_etc_sysconfig_clock (DBusGMethodInvocation *context, const char *key, if (!g_file_get_contents ("/etc/sysconfig/clock", &data, &len, &error)) { GError *error2; - error2 = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "Error reading /etc/sysconfig/clock file: %s", error->message); g_error_free (error); dbus_g_method_return_error (context, error2); @@ -364,8 +364,8 @@ _rh_update_etc_sysconfig_clock (DBusGMethodInvocation *context, const char *key, len = strlen (data); if (!g_file_set_contents ("/etc/sysconfig/clock", data, len, &error)) { GError *error2; - error2 = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "Error updating /etc/sysconfig/clock: %s", error->message); g_error_free (error); dbus_g_method_return_error (context, error2); @@ -384,7 +384,7 @@ _rh_update_etc_sysconfig_clock (DBusGMethodInvocation *context, const char *key, /* exported methods */ gboolean -gsd_datetime_mechanism_set_time (GsdDatetimeMechanism *mechanism, +msd_datetime_mechanism_set_time (MsdDatetimeMechanism *mechanism, gint64 seconds_since_epoch, DBusGMethodInvocation *context) { @@ -399,7 +399,7 @@ gsd_datetime_mechanism_set_time (GsdDatetimeMechanism *mechanism, } gboolean -gsd_datetime_mechanism_adjust_time (GsdDatetimeMechanism *mechanism, +msd_datetime_mechanism_adjust_time (MsdDatetimeMechanism *mechanism, gint64 seconds_to_add, DBusGMethodInvocation *context) { @@ -410,8 +410,8 @@ gsd_datetime_mechanism_adjust_time (GsdDatetimeMechanism *mechanism, if (gettimeofday (&tv, NULL) != 0) { GError *error; - error = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "Error calling gettimeofday(): %s", strerror (errno)); dbus_g_method_return_error (context, error); g_error_free (error); @@ -424,7 +424,7 @@ gsd_datetime_mechanism_adjust_time (GsdDatetimeMechanism *mechanism, gboolean -gsd_datetime_mechanism_set_timezone (GsdDatetimeMechanism *mechanism, +msd_datetime_mechanism_set_timezone (MsdDatetimeMechanism *mechanism, const char *zone_file, DBusGMethodInvocation *context) { @@ -443,11 +443,11 @@ gsd_datetime_mechanism_set_timezone (GsdDatetimeMechanism *mechanism, int code; if (error->code == SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE) - code = GSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE; + code = MSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE; else - code = GSD_DATETIME_MECHANISM_ERROR_GENERAL; + code = MSD_DATETIME_MECHANISM_ERROR_GENERAL; - error2 = g_error_new (GSD_DATETIME_MECHANISM_ERROR, + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, code, "%s", error->message); g_error_free (error); @@ -464,7 +464,7 @@ gsd_datetime_mechanism_set_timezone (GsdDatetimeMechanism *mechanism, gboolean -gsd_datetime_mechanism_get_timezone (GsdDatetimeMechanism *mechism, +msd_datetime_mechanism_get_timezone (MsdDatetimeMechanism *mechism, DBusGMethodInvocation *context) { gchar *timezone; @@ -479,7 +479,7 @@ gsd_datetime_mechanism_get_timezone (GsdDatetimeMechanism *mechism, } gboolean -gsd_datetime_mechanism_get_hardware_clock_using_utc (GsdDatetimeMechanism *mechanism, +msd_datetime_mechanism_get_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context) { char **lines; @@ -492,8 +492,8 @@ gsd_datetime_mechanism_get_hardware_clock_using_utc (GsdDatetimeMechanism *mech if (!g_file_get_contents ("/etc/adjtime", &data, &len, &error)) { GError *error2; - error2 = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "Error reading /etc/adjtime file: %s", error->message); g_error_free (error); dbus_g_method_return_error (context, error2); @@ -505,8 +505,8 @@ gsd_datetime_mechanism_get_hardware_clock_using_utc (GsdDatetimeMechanism *mech g_free (data); if (g_strv_length (lines) < 3) { - error = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "Cannot parse /etc/adjtime"); dbus_g_method_return_error (context, error); g_error_free (error); @@ -519,8 +519,8 @@ gsd_datetime_mechanism_get_hardware_clock_using_utc (GsdDatetimeMechanism *mech } else if (strcmp (lines[2], "LOCAL") == 0) { is_utc = FALSE; } else { - error = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "Expected UTC or LOCAL at line 3 of /etc/adjtime; found '%s'", lines[2]); dbus_g_method_return_error (context, error); g_error_free (error); @@ -533,7 +533,7 @@ gsd_datetime_mechanism_get_hardware_clock_using_utc (GsdDatetimeMechanism *mech } gboolean -gsd_datetime_mechanism_set_hardware_clock_using_utc (GsdDatetimeMechanism *mechanism, +msd_datetime_mechanism_set_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, gboolean using_utc, DBusGMethodInvocation *context) { @@ -552,8 +552,8 @@ gsd_datetime_mechanism_set_hardware_clock_using_utc (GsdDatetimeMechanism *mech cmd = g_strdup_printf ("/sbin/hwclock %s --systohc", using_utc ? "--utc" : "--localtime"); if (!g_spawn_command_line_sync (cmd, NULL, NULL, &exit_status, &error)) { GError *error2; - error2 = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "Error spawning /sbin/hwclock: %s", error->message); g_error_free (error); dbus_g_method_return_error (context, error2); @@ -563,8 +563,8 @@ gsd_datetime_mechanism_set_hardware_clock_using_utc (GsdDatetimeMechanism *mech } g_free (cmd); if (WEXITSTATUS (exit_status) != 0) { - error = g_error_new (GSD_DATETIME_MECHANISM_ERROR, - GSD_DATETIME_MECHANISM_ERROR_GENERAL, + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, "/sbin/hwclock returned %d", exit_status); dbus_g_method_return_error (context, error); g_error_free (error); @@ -580,7 +580,7 @@ gsd_datetime_mechanism_set_hardware_clock_using_utc (GsdDatetimeMechanism *mech } static void -check_can_do (GsdDatetimeMechanism *mechanism, +check_can_do (MsdDatetimeMechanism *mechanism, const char *action, DBusGMethodInvocation *context) { @@ -624,7 +624,7 @@ check_can_do (GsdDatetimeMechanism *mechanism, gboolean -gsd_datetime_mechanism_can_set_time (GsdDatetimeMechanism *mechanism, +msd_datetime_mechanism_can_set_time (MsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context) { check_can_do (mechanism, @@ -635,7 +635,7 @@ gsd_datetime_mechanism_can_set_time (GsdDatetimeMechanism *mechanism, } gboolean -gsd_datetime_mechanism_can_set_timezone (GsdDatetimeMechanism *mechanism, +msd_datetime_mechanism_can_set_timezone (MsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context) { check_can_do (mechanism, diff --git a/plugins/datetime/gsd-datetime-mechanism.h b/plugins/datetime/gsd-datetime-mechanism.h index 52b3b02..c8605b4 100644 --- a/plugins/datetime/gsd-datetime-mechanism.h +++ b/plugins/datetime/gsd-datetime-mechanism.h @@ -18,8 +18,8 @@ * */ -#ifndef GSD_DATETIME_MECHANISM_H -#define GSD_DATETIME_MECHANISM_H +#ifndef MSD_DATETIME_MECHANISM_H +#define MSD_DATETIME_MECHANISM_H #include #include @@ -28,69 +28,69 @@ extern "C" { #endif -#define GSD_DATETIME_TYPE_MECHANISM (gsd_datetime_mechanism_get_type ()) -#define GSD_DATETIME_MECHANISM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), GSD_DATETIME_TYPE_MECHANISM, GsdDatetimeMechanism)) -#define GSD_DATETIME_MECHANISM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), GSD_DATETIME_TYPE_MECHANISM, GsdDatetimeMechanismClass)) -#define GSD_DATETIME_IS_MECHANISM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), GSD_DATETIME_TYPE_MECHANISM)) -#define GSD_DATETIME_IS_MECHANISM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), GSD_DATETIME_TYPE_MECHANISM)) -#define GSD_DATETIME_MECHANISM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), GSD_DATETIME_TYPE_MECHANISM, GsdDatetimeMechanismClass)) +#define MSD_DATETIME_TYPE_MECHANISM (msd_datetime_mechanism_get_type ()) +#define MSD_DATETIME_MECHANISM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanism)) +#define MSD_DATETIME_MECHANISM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanismClass)) +#define MSD_DATETIME_IS_MECHANISM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_DATETIME_TYPE_MECHANISM)) +#define MSD_DATETIME_IS_MECHANISM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_DATETIME_TYPE_MECHANISM)) +#define MSD_DATETIME_MECHANISM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanismClass)) -typedef struct GsdDatetimeMechanismPrivate GsdDatetimeMechanismPrivate; +typedef struct MsdDatetimeMechanismPrivate MsdDatetimeMechanismPrivate; typedef struct { GObject parent; - GsdDatetimeMechanismPrivate *priv; -} GsdDatetimeMechanism; + MsdDatetimeMechanismPrivate *priv; +} MsdDatetimeMechanism; typedef struct { GObjectClass parent_class; -} GsdDatetimeMechanismClass; +} MsdDatetimeMechanismClass; typedef enum { - GSD_DATETIME_MECHANISM_ERROR_GENERAL, - GSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, - GSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE, - GSD_DATETIME_MECHANISM_NUM_ERRORS -} GsdDatetimeMechanismError; + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + MSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, + MSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE, + MSD_DATETIME_MECHANISM_NUM_ERRORS +} MsdDatetimeMechanismError; -#define GSD_DATETIME_MECHANISM_ERROR gsd_datetime_mechanism_error_quark () +#define MSD_DATETIME_MECHANISM_ERROR msd_datetime_mechanism_error_quark () -GType gsd_datetime_mechanism_error_get_type (void); -#define GSD_DATETIME_MECHANISM_TYPE_ERROR (gsd_datetime_mechanism_error_get_type ()) +GType msd_datetime_mechanism_error_get_type (void); +#define MSD_DATETIME_MECHANISM_TYPE_ERROR (msd_datetime_mechanism_error_get_type ()) -GQuark gsd_datetime_mechanism_error_quark (void); -GType gsd_datetime_mechanism_get_type (void); -GsdDatetimeMechanism *gsd_datetime_mechanism_new (void); +GQuark msd_datetime_mechanism_error_quark (void); +GType msd_datetime_mechanism_get_type (void); +MsdDatetimeMechanism *msd_datetime_mechanism_new (void); /* exported methods */ -gboolean gsd_datetime_mechanism_get_timezone (GsdDatetimeMechanism *mechanism, +gboolean msd_datetime_mechanism_get_timezone (MsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context); -gboolean gsd_datetime_mechanism_set_timezone (GsdDatetimeMechanism *mechanism, +gboolean msd_datetime_mechanism_set_timezone (MsdDatetimeMechanism *mechanism, const char *zone_file, DBusGMethodInvocation *context); -gboolean gsd_datetime_mechanism_can_set_timezone (GsdDatetimeMechanism *mechanism, +gboolean msd_datetime_mechanism_can_set_timezone (MsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context); -gboolean gsd_datetime_mechanism_set_time (GsdDatetimeMechanism *mechanism, +gboolean msd_datetime_mechanism_set_time (MsdDatetimeMechanism *mechanism, gint64 seconds_since_epoch, DBusGMethodInvocation *context); -gboolean gsd_datetime_mechanism_can_set_time (GsdDatetimeMechanism *mechanism, +gboolean msd_datetime_mechanism_can_set_time (MsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context); -gboolean gsd_datetime_mechanism_adjust_time (GsdDatetimeMechanism *mechanism, +gboolean msd_datetime_mechanism_adjust_time (MsdDatetimeMechanism *mechanism, gint64 seconds_to_add, DBusGMethodInvocation *context); -gboolean gsd_datetime_mechanism_get_hardware_clock_using_utc (GsdDatetimeMechanism *mechanism, +gboolean msd_datetime_mechanism_get_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context); -gboolean gsd_datetime_mechanism_set_hardware_clock_using_utc (GsdDatetimeMechanism *mechanism, +gboolean msd_datetime_mechanism_set_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, gboolean using_utc, DBusGMethodInvocation *context); @@ -98,4 +98,4 @@ gboolean gsd_datetime_mechanism_set_hardware_clock_using_utc (GsdDat } #endif -#endif /* GSD_DATETIME_MECHANISM_H */ +#endif /* MSD_DATETIME_MECHANISM_H */ diff --git a/plugins/datetime/org.mate.SettingsDaemon.DateTimeMechanism.service.in b/plugins/datetime/org.mate.SettingsDaemon.DateTimeMechanism.service.in index ac7fa29..ffc3bba 100644 --- a/plugins/datetime/org.mate.SettingsDaemon.DateTimeMechanism.service.in +++ b/plugins/datetime/org.mate.SettingsDaemon.DateTimeMechanism.service.in @@ -1,4 +1,4 @@ [D-BUS Service] Name=org.mate.SettingsDaemon.DateTimeMechanism -Exec=@LIBEXECDIR@/gsd-datetime-mechanism +Exec=@LIBEXECDIR@/msd-datetime-mechanism User=root -- cgit v1.2.1 From e46b4adef5c6c6805b3ca6dbfbe99a4299252514 Mon Sep 17 00:00:00 2001 From: haxar Date: Tue, 21 Feb 2012 20:14:01 -0800 Subject: gsd to msd complete rename patch by NiceandGently; file rename commit --- plugins/datetime/gsd-datetime-mechanism-main.c | 171 ------- plugins/datetime/gsd-datetime-mechanism.c | 646 ------------------------- plugins/datetime/gsd-datetime-mechanism.h | 101 ---- plugins/datetime/gsd-datetime-mechanism.xml | 87 ---- plugins/datetime/msd-datetime-mechanism-main.c | 171 +++++++ plugins/datetime/msd-datetime-mechanism.c | 646 +++++++++++++++++++++++++ plugins/datetime/msd-datetime-mechanism.h | 101 ++++ plugins/datetime/msd-datetime-mechanism.xml | 87 ++++ 8 files changed, 1005 insertions(+), 1005 deletions(-) delete mode 100644 plugins/datetime/gsd-datetime-mechanism-main.c delete mode 100644 plugins/datetime/gsd-datetime-mechanism.c delete mode 100644 plugins/datetime/gsd-datetime-mechanism.h delete mode 100644 plugins/datetime/gsd-datetime-mechanism.xml create mode 100644 plugins/datetime/msd-datetime-mechanism-main.c create mode 100644 plugins/datetime/msd-datetime-mechanism.c create mode 100644 plugins/datetime/msd-datetime-mechanism.h create mode 100644 plugins/datetime/msd-datetime-mechanism.xml (limited to 'plugins/datetime') diff --git a/plugins/datetime/gsd-datetime-mechanism-main.c b/plugins/datetime/gsd-datetime-mechanism-main.c deleted file mode 100644 index 4d13630..0000000 --- a/plugins/datetime/gsd-datetime-mechanism-main.c +++ /dev/null @@ -1,171 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 David Zeuthen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - - -#include "msd-datetime-mechanism.h" - -static DBusGProxy * -get_bus_proxy (DBusGConnection *connection) -{ - DBusGProxy *bus_proxy; - - bus_proxy = dbus_g_proxy_new_for_name (connection, - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS); - return bus_proxy; -} - -#define BUS_NAME "org.mate.SettingsDaemon.DateTimeMechanism" - -static gboolean -acquire_name_on_proxy (DBusGProxy *bus_proxy) -{ - GError *error; - guint result; - gboolean res; - gboolean ret; - - ret = FALSE; - - if (bus_proxy == NULL) { - goto out; - } - - error = NULL; - res = dbus_g_proxy_call (bus_proxy, - "RequestName", - &error, - G_TYPE_STRING, BUS_NAME, - G_TYPE_UINT, 0, - G_TYPE_INVALID, - G_TYPE_UINT, &result, - G_TYPE_INVALID); - if (! res) { - if (error != NULL) { - g_warning ("Failed to acquire %s: %s", BUS_NAME, error->message); - g_error_free (error); - } else { - g_warning ("Failed to acquire %s", BUS_NAME); - } - goto out; - } - - if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { - if (error != NULL) { - g_warning ("Failed to acquire %s: %s", BUS_NAME, error->message); - g_error_free (error); - } else { - g_warning ("Failed to acquire %s", BUS_NAME); - } - goto out; - } - - ret = TRUE; - - out: - return ret; -} - -static DBusGConnection * -get_system_bus (void) -{ - GError *error; - DBusGConnection *bus; - - error = NULL; - bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); - if (bus == NULL) { - g_warning ("Couldn't connect to system bus: %s", error->message); - g_error_free (error); - } - return bus; -} - -int -main (int argc, char **argv) -{ - GMainLoop *loop; - MsdDatetimeMechanism *mechanism; - DBusGProxy *bus_proxy; - DBusGConnection *connection; - int ret; - - ret = 1; - - if (! g_thread_supported ()) { - g_thread_init (NULL); - } - dbus_g_thread_init (); - g_type_init (); - - connection = get_system_bus (); - if (connection == NULL) { - goto out; - } - - bus_proxy = get_bus_proxy (connection); - if (bus_proxy == NULL) { - g_warning ("Could not construct bus_proxy object; bailing out"); - goto out; - } - - if (!acquire_name_on_proxy (bus_proxy) ) { - g_warning ("Could not acquire name; bailing out"); - goto out; - } - - mechanism = msd_datetime_mechanism_new (); - - if (mechanism == NULL) { - goto out; - } - - loop = g_main_loop_new (NULL, FALSE); - - g_main_loop_run (loop); - - g_object_unref (mechanism); - g_main_loop_unref (loop); - ret = 0; - -out: - return ret; -} diff --git a/plugins/datetime/gsd-datetime-mechanism.c b/plugins/datetime/gsd-datetime-mechanism.c deleted file mode 100644 index 7b0d338..0000000 --- a/plugins/datetime/gsd-datetime-mechanism.c +++ /dev/null @@ -1,646 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 David Zeuthen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#ifdef HAVE_CONFIG_H -# include "config.h" -#endif - -#include -#include -#include -#include -#include -#include -#include -#include - -#include -#include - -#include -#include - -#include - -#include "system-timezone.h" - -#include "msd-datetime-mechanism.h" -#include "msd-datetime-mechanism-glue.h" - -static gboolean -do_exit (gpointer user_data) -{ - g_debug ("Exiting due to inactivity"); - exit (1); - return FALSE; -} - -static void -reset_killtimer (void) -{ - static guint timer_id = 0; - - if (timer_id > 0) { - g_source_remove (timer_id); - } - g_debug ("Setting killtimer to 30 seconds..."); - timer_id = g_timeout_add_seconds (30, do_exit, NULL); -} - -struct MsdDatetimeMechanismPrivate -{ - DBusGConnection *system_bus_connection; - DBusGProxy *system_bus_proxy; - PolkitAuthority *auth; -}; - -static void msd_datetime_mechanism_finalize (GObject *object); - -G_DEFINE_TYPE (MsdDatetimeMechanism, msd_datetime_mechanism, G_TYPE_OBJECT) - -#define MSD_DATETIME_MECHANISM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanismPrivate)) - -GQuark -msd_datetime_mechanism_error_quark (void) -{ - static GQuark ret = 0; - - if (ret == 0) { - ret = g_quark_from_static_string ("msd_datetime_mechanism_error"); - } - - return ret; -} - - -#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC } - -GType -msd_datetime_mechanism_error_get_type (void) -{ - static GType etype = 0; - - if (etype == 0) - { - static const GEnumValue values[] = - { - ENUM_ENTRY (MSD_DATETIME_MECHANISM_ERROR_GENERAL, "GeneralError"), - ENUM_ENTRY (MSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, "NotPrivileged"), - ENUM_ENTRY (MSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE, "InvalidTimezoneFile"), - { 0, 0, 0 } - }; - - g_assert (MSD_DATETIME_MECHANISM_NUM_ERRORS == G_N_ELEMENTS (values) - 1); - - etype = g_enum_register_static ("MsdDatetimeMechanismError", values); - } - - return etype; -} - - -static GObject * -msd_datetime_mechanism_constructor (GType type, - guint n_construct_properties, - GObjectConstructParam *construct_properties) -{ - MsdDatetimeMechanism *mechanism; - - mechanism = MSD_DATETIME_MECHANISM (G_OBJECT_CLASS (msd_datetime_mechanism_parent_class)->constructor ( - type, - n_construct_properties, - construct_properties)); - - return G_OBJECT (mechanism); -} - -static void -msd_datetime_mechanism_class_init (MsdDatetimeMechanismClass *klass) -{ - GObjectClass *object_class = G_OBJECT_CLASS (klass); - - object_class->constructor = msd_datetime_mechanism_constructor; - object_class->finalize = msd_datetime_mechanism_finalize; - - g_type_class_add_private (klass, sizeof (MsdDatetimeMechanismPrivate)); - - dbus_g_object_type_install_info (MSD_DATETIME_TYPE_MECHANISM, &dbus_glib_msd_datetime_mechanism_object_info); - - dbus_g_error_domain_register (MSD_DATETIME_MECHANISM_ERROR, NULL, MSD_DATETIME_MECHANISM_TYPE_ERROR); - -} - -static void -msd_datetime_mechanism_init (MsdDatetimeMechanism *mechanism) -{ - mechanism->priv = MSD_DATETIME_MECHANISM_GET_PRIVATE (mechanism); - -} - -static void -msd_datetime_mechanism_finalize (GObject *object) -{ - MsdDatetimeMechanism *mechanism; - - g_return_if_fail (object != NULL); - g_return_if_fail (MSD_DATETIME_IS_MECHANISM (object)); - - mechanism = MSD_DATETIME_MECHANISM (object); - - g_return_if_fail (mechanism->priv != NULL); - - g_object_unref (mechanism->priv->system_bus_proxy); - - G_OBJECT_CLASS (msd_datetime_mechanism_parent_class)->finalize (object); -} - -static gboolean -register_mechanism (MsdDatetimeMechanism *mechanism) -{ - GError *error = NULL; - - mechanism->priv->auth = polkit_authority_get (); - - error = NULL; - mechanism->priv->system_bus_connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); - if (mechanism->priv->system_bus_connection == NULL) { - if (error != NULL) { - g_critical ("error getting system bus: %s", error->message); - g_error_free (error); - } - goto error; - } - - dbus_g_connection_register_g_object (mechanism->priv->system_bus_connection, "/", - G_OBJECT (mechanism)); - - mechanism->priv->system_bus_proxy = dbus_g_proxy_new_for_name (mechanism->priv->system_bus_connection, - DBUS_SERVICE_DBUS, - DBUS_PATH_DBUS, - DBUS_INTERFACE_DBUS); - - reset_killtimer (); - - return TRUE; - -error: - return FALSE; -} - - -MsdDatetimeMechanism * -msd_datetime_mechanism_new (void) -{ - GObject *object; - gboolean res; - - object = g_object_new (MSD_DATETIME_TYPE_MECHANISM, NULL); - - res = register_mechanism (MSD_DATETIME_MECHANISM (object)); - if (! res) { - g_object_unref (object); - return NULL; - } - - return MSD_DATETIME_MECHANISM (object); -} - -static gboolean -_check_polkit_for_action (MsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context, const char *action) -{ - const char *sender; - GError *error; - PolkitSubject *subject; - PolkitAuthorizationResult *result; - - error = NULL; - - /* Check that caller is privileged */ - sender = dbus_g_method_get_sender (context); - subject = polkit_system_bus_name_new (sender); - - result = polkit_authority_check_authorization_sync (mechanism->priv->auth, - subject, - action, - NULL, - POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, - NULL, &error); - g_object_unref (subject); - - if (error) { - dbus_g_method_return_error (context, error); - g_error_free (error); - - return FALSE; - } - - if (!polkit_authorization_result_get_is_authorized (result)) { - error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, - "Not Authorized for action %s", action); - dbus_g_method_return_error (context, error); - g_error_free (error); - g_object_unref (result); - - return FALSE; - } - - g_object_unref (result); - - return TRUE; -} - - -static gboolean -_set_time (MsdDatetimeMechanism *mechanism, - const struct timeval *tv, - DBusGMethodInvocation *context) -{ - GError *error; - - if (!_check_polkit_for_action (mechanism, context, "org.mate.settingsdaemon.datetimemechanism.settime")) - return FALSE; - - if (settimeofday (tv, NULL) != 0) { - error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "Error calling settimeofday({%lld,%lld}): %s", - (gint64) tv->tv_sec, (gint64) tv->tv_usec, - strerror (errno)); - dbus_g_method_return_error (context, error); - g_error_free (error); - return FALSE; - } - - if (g_file_test ("/sbin/hwclock", - G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_EXECUTABLE)) { - int exit_status; - if (!g_spawn_command_line_sync ("/sbin/hwclock --systohc", NULL, NULL, &exit_status, &error)) { - GError *error2; - error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "Error spawning /sbin/hwclock: %s", error->message); - g_error_free (error); - dbus_g_method_return_error (context, error2); - g_error_free (error2); - return FALSE; - } - if (WEXITSTATUS (exit_status) != 0) { - error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "/sbin/hwclock returned %d", exit_status); - dbus_g_method_return_error (context, error); - g_error_free (error); - return FALSE; - } - } - - dbus_g_method_return (context); - return TRUE; -} - -static gboolean -_rh_update_etc_sysconfig_clock (DBusGMethodInvocation *context, const char *key, const char *value) -{ - /* On Red Hat / Fedora, the /etc/sysconfig/clock file needs to be kept in sync */ - if (g_file_test ("/etc/sysconfig/clock", G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) { - char **lines; - int n; - gboolean replaced; - char *data; - gsize len; - GError *error; - - error = NULL; - - if (!g_file_get_contents ("/etc/sysconfig/clock", &data, &len, &error)) { - GError *error2; - error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "Error reading /etc/sysconfig/clock file: %s", error->message); - g_error_free (error); - dbus_g_method_return_error (context, error2); - g_error_free (error2); - return FALSE; - } - replaced = FALSE; - lines = g_strsplit (data, "\n", 0); - g_free (data); - - for (n = 0; lines[n] != NULL; n++) { - if (g_str_has_prefix (lines[n], key)) { - g_free (lines[n]); - lines[n] = g_strdup_printf ("%s%s", key, value); - replaced = TRUE; - } - } - if (replaced) { - GString *str; - - str = g_string_new (NULL); - for (n = 0; lines[n] != NULL; n++) { - g_string_append (str, lines[n]); - if (lines[n + 1] != NULL) - g_string_append_c (str, '\n'); - } - data = g_string_free (str, FALSE); - len = strlen (data); - if (!g_file_set_contents ("/etc/sysconfig/clock", data, len, &error)) { - GError *error2; - error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "Error updating /etc/sysconfig/clock: %s", error->message); - g_error_free (error); - dbus_g_method_return_error (context, error2); - g_error_free (error2); - g_free (data); - return FALSE; - } - g_free (data); - } - g_strfreev (lines); - } - - return TRUE; -} - -/* exported methods */ - -gboolean -msd_datetime_mechanism_set_time (MsdDatetimeMechanism *mechanism, - gint64 seconds_since_epoch, - DBusGMethodInvocation *context) -{ - struct timeval tv; - - reset_killtimer (); - g_debug ("SetTime(%lld) called", seconds_since_epoch); - - tv.tv_sec = (time_t) seconds_since_epoch; - tv.tv_usec = 0; - return _set_time (mechanism, &tv, context); -} - -gboolean -msd_datetime_mechanism_adjust_time (MsdDatetimeMechanism *mechanism, - gint64 seconds_to_add, - DBusGMethodInvocation *context) -{ - struct timeval tv; - - reset_killtimer (); - g_debug ("AdjustTime(%lld) called", seconds_to_add); - - if (gettimeofday (&tv, NULL) != 0) { - GError *error; - error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "Error calling gettimeofday(): %s", strerror (errno)); - dbus_g_method_return_error (context, error); - g_error_free (error); - return FALSE; - } - - tv.tv_sec += (time_t) seconds_to_add; - return _set_time (mechanism, &tv, context); -} - - -gboolean -msd_datetime_mechanism_set_timezone (MsdDatetimeMechanism *mechanism, - const char *zone_file, - DBusGMethodInvocation *context) -{ - GError *error; - - reset_killtimer (); - g_debug ("SetTimezone('%s') called", zone_file); - - if (!_check_polkit_for_action (mechanism, context, "org.mate.settingsdaemon.datetimemechanism.settimezone")) - return FALSE; - - error = NULL; - - if (!system_timezone_set_from_file (zone_file, &error)) { - GError *error2; - int code; - - if (error->code == SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE) - code = MSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE; - else - code = MSD_DATETIME_MECHANISM_ERROR_GENERAL; - - error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - code, "%s", error->message); - - g_error_free (error); - - dbus_g_method_return_error (context, error2); - g_error_free (error2); - - return FALSE; - } - - dbus_g_method_return (context); - return TRUE; -} - - -gboolean -msd_datetime_mechanism_get_timezone (MsdDatetimeMechanism *mechism, - DBusGMethodInvocation *context) -{ - gchar *timezone; - - reset_killtimer (); - - timezone = system_timezone_find (); - - dbus_g_method_return (context, timezone); - - return TRUE; -} - -gboolean -msd_datetime_mechanism_get_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, - DBusGMethodInvocation *context) -{ - char **lines; - char *data; - gsize len; - GError *error; - gboolean is_utc; - - error = NULL; - - if (!g_file_get_contents ("/etc/adjtime", &data, &len, &error)) { - GError *error2; - error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "Error reading /etc/adjtime file: %s", error->message); - g_error_free (error); - dbus_g_method_return_error (context, error2); - g_error_free (error2); - return FALSE; - } - - lines = g_strsplit (data, "\n", 0); - g_free (data); - - if (g_strv_length (lines) < 3) { - error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "Cannot parse /etc/adjtime"); - dbus_g_method_return_error (context, error); - g_error_free (error); - g_strfreev (lines); - return FALSE; - } - - if (strcmp (lines[2], "UTC") == 0) { - is_utc = TRUE; - } else if (strcmp (lines[2], "LOCAL") == 0) { - is_utc = FALSE; - } else { - error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "Expected UTC or LOCAL at line 3 of /etc/adjtime; found '%s'", lines[2]); - dbus_g_method_return_error (context, error); - g_error_free (error); - g_strfreev (lines); - return FALSE; - } - g_strfreev (lines); - dbus_g_method_return (context, is_utc); - return TRUE; -} - -gboolean -msd_datetime_mechanism_set_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, - gboolean using_utc, - DBusGMethodInvocation *context) -{ - GError *error; - - error = NULL; - - if (!_check_polkit_for_action (mechanism, context, - "org.mate.settingsdaemon.datetimemechanism.configurehwclock")) - return FALSE; - - if (g_file_test ("/sbin/hwclock", - G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_EXECUTABLE)) { - int exit_status; - char *cmd; - cmd = g_strdup_printf ("/sbin/hwclock %s --systohc", using_utc ? "--utc" : "--localtime"); - if (!g_spawn_command_line_sync (cmd, NULL, NULL, &exit_status, &error)) { - GError *error2; - error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "Error spawning /sbin/hwclock: %s", error->message); - g_error_free (error); - dbus_g_method_return_error (context, error2); - g_error_free (error2); - g_free (cmd); - return FALSE; - } - g_free (cmd); - if (WEXITSTATUS (exit_status) != 0) { - error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - "/sbin/hwclock returned %d", exit_status); - dbus_g_method_return_error (context, error); - g_error_free (error); - return FALSE; - } - - if (!_rh_update_etc_sysconfig_clock (context, "UTC=", using_utc ? "true" : "false")) - return FALSE; - - } - dbus_g_method_return (context); - return TRUE; -} - -static void -check_can_do (MsdDatetimeMechanism *mechanism, - const char *action, - DBusGMethodInvocation *context) -{ - const char *sender; - PolkitSubject *subject; - PolkitAuthorizationResult *result; - GError *error; - - /* Check that caller is privileged */ - sender = dbus_g_method_get_sender (context); - subject = polkit_system_bus_name_new (sender); - - error = NULL; - result = polkit_authority_check_authorization_sync (mechanism->priv->auth, - subject, - action, - NULL, - 0, - NULL, - &error); - g_object_unref (subject); - - if (error) { - dbus_g_method_return_error (context, error); - g_error_free (error); - return; - } - - if (polkit_authorization_result_get_is_authorized (result)) { - dbus_g_method_return (context, 2); - } - else if (polkit_authorization_result_get_is_challenge (result)) { - dbus_g_method_return (context, 1); - } - else { - dbus_g_method_return (context, 0); - } - - g_object_unref (result); -} - - -gboolean -msd_datetime_mechanism_can_set_time (MsdDatetimeMechanism *mechanism, - DBusGMethodInvocation *context) -{ - check_can_do (mechanism, - "org.mate.settingsdaemon.datetimemechanism.settime", - context); - - return TRUE; -} - -gboolean -msd_datetime_mechanism_can_set_timezone (MsdDatetimeMechanism *mechanism, - DBusGMethodInvocation *context) -{ - check_can_do (mechanism, - "org.mate.settingsdaemon.datetimemechanism.settimezone", - context); - - return TRUE; -} diff --git a/plugins/datetime/gsd-datetime-mechanism.h b/plugins/datetime/gsd-datetime-mechanism.h deleted file mode 100644 index c8605b4..0000000 --- a/plugins/datetime/gsd-datetime-mechanism.h +++ /dev/null @@ -1,101 +0,0 @@ -/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- - * - * Copyright (C) 2007 David Zeuthen - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. - * - */ - -#ifndef MSD_DATETIME_MECHANISM_H -#define MSD_DATETIME_MECHANISM_H - -#include -#include - -#ifdef __cplusplus -extern "C" { -#endif - -#define MSD_DATETIME_TYPE_MECHANISM (msd_datetime_mechanism_get_type ()) -#define MSD_DATETIME_MECHANISM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanism)) -#define MSD_DATETIME_MECHANISM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanismClass)) -#define MSD_DATETIME_IS_MECHANISM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_DATETIME_TYPE_MECHANISM)) -#define MSD_DATETIME_IS_MECHANISM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_DATETIME_TYPE_MECHANISM)) -#define MSD_DATETIME_MECHANISM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanismClass)) - -typedef struct MsdDatetimeMechanismPrivate MsdDatetimeMechanismPrivate; - -typedef struct -{ - GObject parent; - MsdDatetimeMechanismPrivate *priv; -} MsdDatetimeMechanism; - -typedef struct -{ - GObjectClass parent_class; -} MsdDatetimeMechanismClass; - -typedef enum -{ - MSD_DATETIME_MECHANISM_ERROR_GENERAL, - MSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, - MSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE, - MSD_DATETIME_MECHANISM_NUM_ERRORS -} MsdDatetimeMechanismError; - -#define MSD_DATETIME_MECHANISM_ERROR msd_datetime_mechanism_error_quark () - -GType msd_datetime_mechanism_error_get_type (void); -#define MSD_DATETIME_MECHANISM_TYPE_ERROR (msd_datetime_mechanism_error_get_type ()) - - -GQuark msd_datetime_mechanism_error_quark (void); -GType msd_datetime_mechanism_get_type (void); -MsdDatetimeMechanism *msd_datetime_mechanism_new (void); - -/* exported methods */ -gboolean msd_datetime_mechanism_get_timezone (MsdDatetimeMechanism *mechanism, - DBusGMethodInvocation *context); -gboolean msd_datetime_mechanism_set_timezone (MsdDatetimeMechanism *mechanism, - const char *zone_file, - DBusGMethodInvocation *context); - -gboolean msd_datetime_mechanism_can_set_timezone (MsdDatetimeMechanism *mechanism, - DBusGMethodInvocation *context); - -gboolean msd_datetime_mechanism_set_time (MsdDatetimeMechanism *mechanism, - gint64 seconds_since_epoch, - DBusGMethodInvocation *context); - -gboolean msd_datetime_mechanism_can_set_time (MsdDatetimeMechanism *mechanism, - DBusGMethodInvocation *context); - -gboolean msd_datetime_mechanism_adjust_time (MsdDatetimeMechanism *mechanism, - gint64 seconds_to_add, - DBusGMethodInvocation *context); - -gboolean msd_datetime_mechanism_get_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, - DBusGMethodInvocation *context); - -gboolean msd_datetime_mechanism_set_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, - gboolean using_utc, - DBusGMethodInvocation *context); - -#ifdef __cplusplus -} -#endif - -#endif /* MSD_DATETIME_MECHANISM_H */ diff --git a/plugins/datetime/gsd-datetime-mechanism.xml b/plugins/datetime/gsd-datetime-mechanism.xml deleted file mode 100644 index 1962235..0000000 --- a/plugins/datetime/gsd-datetime-mechanism.xml +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - Whether the caller can set the timezone - - - The return value is not a boolean, but an integer with the following meaning: - - - 0 - the caller cannot set the timezone - - - 1 - the caller will be challenged before being able to set the timezone - - - 2 - the caller is authorized to set the timezone - - - - - - - - - - - - - - - - Whether the caller can set the time - - - The return value is not a boolean, but an integer with the following meaning: - - - 0 - the caller cannot set the time - - - 1 - the caller will be challenged before being able to set the time - - - 2 - the caller is authorized to set the time - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plugins/datetime/msd-datetime-mechanism-main.c b/plugins/datetime/msd-datetime-mechanism-main.c new file mode 100644 index 0000000..4d13630 --- /dev/null +++ b/plugins/datetime/msd-datetime-mechanism-main.c @@ -0,0 +1,171 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2007 David Zeuthen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + + +#include "msd-datetime-mechanism.h" + +static DBusGProxy * +get_bus_proxy (DBusGConnection *connection) +{ + DBusGProxy *bus_proxy; + + bus_proxy = dbus_g_proxy_new_for_name (connection, + DBUS_SERVICE_DBUS, + DBUS_PATH_DBUS, + DBUS_INTERFACE_DBUS); + return bus_proxy; +} + +#define BUS_NAME "org.mate.SettingsDaemon.DateTimeMechanism" + +static gboolean +acquire_name_on_proxy (DBusGProxy *bus_proxy) +{ + GError *error; + guint result; + gboolean res; + gboolean ret; + + ret = FALSE; + + if (bus_proxy == NULL) { + goto out; + } + + error = NULL; + res = dbus_g_proxy_call (bus_proxy, + "RequestName", + &error, + G_TYPE_STRING, BUS_NAME, + G_TYPE_UINT, 0, + G_TYPE_INVALID, + G_TYPE_UINT, &result, + G_TYPE_INVALID); + if (! res) { + if (error != NULL) { + g_warning ("Failed to acquire %s: %s", BUS_NAME, error->message); + g_error_free (error); + } else { + g_warning ("Failed to acquire %s", BUS_NAME); + } + goto out; + } + + if (result != DBUS_REQUEST_NAME_REPLY_PRIMARY_OWNER) { + if (error != NULL) { + g_warning ("Failed to acquire %s: %s", BUS_NAME, error->message); + g_error_free (error); + } else { + g_warning ("Failed to acquire %s", BUS_NAME); + } + goto out; + } + + ret = TRUE; + + out: + return ret; +} + +static DBusGConnection * +get_system_bus (void) +{ + GError *error; + DBusGConnection *bus; + + error = NULL; + bus = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); + if (bus == NULL) { + g_warning ("Couldn't connect to system bus: %s", error->message); + g_error_free (error); + } + return bus; +} + +int +main (int argc, char **argv) +{ + GMainLoop *loop; + MsdDatetimeMechanism *mechanism; + DBusGProxy *bus_proxy; + DBusGConnection *connection; + int ret; + + ret = 1; + + if (! g_thread_supported ()) { + g_thread_init (NULL); + } + dbus_g_thread_init (); + g_type_init (); + + connection = get_system_bus (); + if (connection == NULL) { + goto out; + } + + bus_proxy = get_bus_proxy (connection); + if (bus_proxy == NULL) { + g_warning ("Could not construct bus_proxy object; bailing out"); + goto out; + } + + if (!acquire_name_on_proxy (bus_proxy) ) { + g_warning ("Could not acquire name; bailing out"); + goto out; + } + + mechanism = msd_datetime_mechanism_new (); + + if (mechanism == NULL) { + goto out; + } + + loop = g_main_loop_new (NULL, FALSE); + + g_main_loop_run (loop); + + g_object_unref (mechanism); + g_main_loop_unref (loop); + ret = 0; + +out: + return ret; +} diff --git a/plugins/datetime/msd-datetime-mechanism.c b/plugins/datetime/msd-datetime-mechanism.c new file mode 100644 index 0000000..7b0d338 --- /dev/null +++ b/plugins/datetime/msd-datetime-mechanism.c @@ -0,0 +1,646 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2007 David Zeuthen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#ifdef HAVE_CONFIG_H +# include "config.h" +#endif + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include + +#include +#include + +#include + +#include "system-timezone.h" + +#include "msd-datetime-mechanism.h" +#include "msd-datetime-mechanism-glue.h" + +static gboolean +do_exit (gpointer user_data) +{ + g_debug ("Exiting due to inactivity"); + exit (1); + return FALSE; +} + +static void +reset_killtimer (void) +{ + static guint timer_id = 0; + + if (timer_id > 0) { + g_source_remove (timer_id); + } + g_debug ("Setting killtimer to 30 seconds..."); + timer_id = g_timeout_add_seconds (30, do_exit, NULL); +} + +struct MsdDatetimeMechanismPrivate +{ + DBusGConnection *system_bus_connection; + DBusGProxy *system_bus_proxy; + PolkitAuthority *auth; +}; + +static void msd_datetime_mechanism_finalize (GObject *object); + +G_DEFINE_TYPE (MsdDatetimeMechanism, msd_datetime_mechanism, G_TYPE_OBJECT) + +#define MSD_DATETIME_MECHANISM_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanismPrivate)) + +GQuark +msd_datetime_mechanism_error_quark (void) +{ + static GQuark ret = 0; + + if (ret == 0) { + ret = g_quark_from_static_string ("msd_datetime_mechanism_error"); + } + + return ret; +} + + +#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC } + +GType +msd_datetime_mechanism_error_get_type (void) +{ + static GType etype = 0; + + if (etype == 0) + { + static const GEnumValue values[] = + { + ENUM_ENTRY (MSD_DATETIME_MECHANISM_ERROR_GENERAL, "GeneralError"), + ENUM_ENTRY (MSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, "NotPrivileged"), + ENUM_ENTRY (MSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE, "InvalidTimezoneFile"), + { 0, 0, 0 } + }; + + g_assert (MSD_DATETIME_MECHANISM_NUM_ERRORS == G_N_ELEMENTS (values) - 1); + + etype = g_enum_register_static ("MsdDatetimeMechanismError", values); + } + + return etype; +} + + +static GObject * +msd_datetime_mechanism_constructor (GType type, + guint n_construct_properties, + GObjectConstructParam *construct_properties) +{ + MsdDatetimeMechanism *mechanism; + + mechanism = MSD_DATETIME_MECHANISM (G_OBJECT_CLASS (msd_datetime_mechanism_parent_class)->constructor ( + type, + n_construct_properties, + construct_properties)); + + return G_OBJECT (mechanism); +} + +static void +msd_datetime_mechanism_class_init (MsdDatetimeMechanismClass *klass) +{ + GObjectClass *object_class = G_OBJECT_CLASS (klass); + + object_class->constructor = msd_datetime_mechanism_constructor; + object_class->finalize = msd_datetime_mechanism_finalize; + + g_type_class_add_private (klass, sizeof (MsdDatetimeMechanismPrivate)); + + dbus_g_object_type_install_info (MSD_DATETIME_TYPE_MECHANISM, &dbus_glib_msd_datetime_mechanism_object_info); + + dbus_g_error_domain_register (MSD_DATETIME_MECHANISM_ERROR, NULL, MSD_DATETIME_MECHANISM_TYPE_ERROR); + +} + +static void +msd_datetime_mechanism_init (MsdDatetimeMechanism *mechanism) +{ + mechanism->priv = MSD_DATETIME_MECHANISM_GET_PRIVATE (mechanism); + +} + +static void +msd_datetime_mechanism_finalize (GObject *object) +{ + MsdDatetimeMechanism *mechanism; + + g_return_if_fail (object != NULL); + g_return_if_fail (MSD_DATETIME_IS_MECHANISM (object)); + + mechanism = MSD_DATETIME_MECHANISM (object); + + g_return_if_fail (mechanism->priv != NULL); + + g_object_unref (mechanism->priv->system_bus_proxy); + + G_OBJECT_CLASS (msd_datetime_mechanism_parent_class)->finalize (object); +} + +static gboolean +register_mechanism (MsdDatetimeMechanism *mechanism) +{ + GError *error = NULL; + + mechanism->priv->auth = polkit_authority_get (); + + error = NULL; + mechanism->priv->system_bus_connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error); + if (mechanism->priv->system_bus_connection == NULL) { + if (error != NULL) { + g_critical ("error getting system bus: %s", error->message); + g_error_free (error); + } + goto error; + } + + dbus_g_connection_register_g_object (mechanism->priv->system_bus_connection, "/", + G_OBJECT (mechanism)); + + mechanism->priv->system_bus_proxy = dbus_g_proxy_new_for_name (mechanism->priv->system_bus_connection, + DBUS_SERVICE_DBUS, + DBUS_PATH_DBUS, + DBUS_INTERFACE_DBUS); + + reset_killtimer (); + + return TRUE; + +error: + return FALSE; +} + + +MsdDatetimeMechanism * +msd_datetime_mechanism_new (void) +{ + GObject *object; + gboolean res; + + object = g_object_new (MSD_DATETIME_TYPE_MECHANISM, NULL); + + res = register_mechanism (MSD_DATETIME_MECHANISM (object)); + if (! res) { + g_object_unref (object); + return NULL; + } + + return MSD_DATETIME_MECHANISM (object); +} + +static gboolean +_check_polkit_for_action (MsdDatetimeMechanism *mechanism, DBusGMethodInvocation *context, const char *action) +{ + const char *sender; + GError *error; + PolkitSubject *subject; + PolkitAuthorizationResult *result; + + error = NULL; + + /* Check that caller is privileged */ + sender = dbus_g_method_get_sender (context); + subject = polkit_system_bus_name_new (sender); + + result = polkit_authority_check_authorization_sync (mechanism->priv->auth, + subject, + action, + NULL, + POLKIT_CHECK_AUTHORIZATION_FLAGS_ALLOW_USER_INTERACTION, + NULL, &error); + g_object_unref (subject); + + if (error) { + dbus_g_method_return_error (context, error); + g_error_free (error); + + return FALSE; + } + + if (!polkit_authorization_result_get_is_authorized (result)) { + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, + "Not Authorized for action %s", action); + dbus_g_method_return_error (context, error); + g_error_free (error); + g_object_unref (result); + + return FALSE; + } + + g_object_unref (result); + + return TRUE; +} + + +static gboolean +_set_time (MsdDatetimeMechanism *mechanism, + const struct timeval *tv, + DBusGMethodInvocation *context) +{ + GError *error; + + if (!_check_polkit_for_action (mechanism, context, "org.mate.settingsdaemon.datetimemechanism.settime")) + return FALSE; + + if (settimeofday (tv, NULL) != 0) { + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "Error calling settimeofday({%lld,%lld}): %s", + (gint64) tv->tv_sec, (gint64) tv->tv_usec, + strerror (errno)); + dbus_g_method_return_error (context, error); + g_error_free (error); + return FALSE; + } + + if (g_file_test ("/sbin/hwclock", + G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_EXECUTABLE)) { + int exit_status; + if (!g_spawn_command_line_sync ("/sbin/hwclock --systohc", NULL, NULL, &exit_status, &error)) { + GError *error2; + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "Error spawning /sbin/hwclock: %s", error->message); + g_error_free (error); + dbus_g_method_return_error (context, error2); + g_error_free (error2); + return FALSE; + } + if (WEXITSTATUS (exit_status) != 0) { + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "/sbin/hwclock returned %d", exit_status); + dbus_g_method_return_error (context, error); + g_error_free (error); + return FALSE; + } + } + + dbus_g_method_return (context); + return TRUE; +} + +static gboolean +_rh_update_etc_sysconfig_clock (DBusGMethodInvocation *context, const char *key, const char *value) +{ + /* On Red Hat / Fedora, the /etc/sysconfig/clock file needs to be kept in sync */ + if (g_file_test ("/etc/sysconfig/clock", G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR)) { + char **lines; + int n; + gboolean replaced; + char *data; + gsize len; + GError *error; + + error = NULL; + + if (!g_file_get_contents ("/etc/sysconfig/clock", &data, &len, &error)) { + GError *error2; + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "Error reading /etc/sysconfig/clock file: %s", error->message); + g_error_free (error); + dbus_g_method_return_error (context, error2); + g_error_free (error2); + return FALSE; + } + replaced = FALSE; + lines = g_strsplit (data, "\n", 0); + g_free (data); + + for (n = 0; lines[n] != NULL; n++) { + if (g_str_has_prefix (lines[n], key)) { + g_free (lines[n]); + lines[n] = g_strdup_printf ("%s%s", key, value); + replaced = TRUE; + } + } + if (replaced) { + GString *str; + + str = g_string_new (NULL); + for (n = 0; lines[n] != NULL; n++) { + g_string_append (str, lines[n]); + if (lines[n + 1] != NULL) + g_string_append_c (str, '\n'); + } + data = g_string_free (str, FALSE); + len = strlen (data); + if (!g_file_set_contents ("/etc/sysconfig/clock", data, len, &error)) { + GError *error2; + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "Error updating /etc/sysconfig/clock: %s", error->message); + g_error_free (error); + dbus_g_method_return_error (context, error2); + g_error_free (error2); + g_free (data); + return FALSE; + } + g_free (data); + } + g_strfreev (lines); + } + + return TRUE; +} + +/* exported methods */ + +gboolean +msd_datetime_mechanism_set_time (MsdDatetimeMechanism *mechanism, + gint64 seconds_since_epoch, + DBusGMethodInvocation *context) +{ + struct timeval tv; + + reset_killtimer (); + g_debug ("SetTime(%lld) called", seconds_since_epoch); + + tv.tv_sec = (time_t) seconds_since_epoch; + tv.tv_usec = 0; + return _set_time (mechanism, &tv, context); +} + +gboolean +msd_datetime_mechanism_adjust_time (MsdDatetimeMechanism *mechanism, + gint64 seconds_to_add, + DBusGMethodInvocation *context) +{ + struct timeval tv; + + reset_killtimer (); + g_debug ("AdjustTime(%lld) called", seconds_to_add); + + if (gettimeofday (&tv, NULL) != 0) { + GError *error; + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "Error calling gettimeofday(): %s", strerror (errno)); + dbus_g_method_return_error (context, error); + g_error_free (error); + return FALSE; + } + + tv.tv_sec += (time_t) seconds_to_add; + return _set_time (mechanism, &tv, context); +} + + +gboolean +msd_datetime_mechanism_set_timezone (MsdDatetimeMechanism *mechanism, + const char *zone_file, + DBusGMethodInvocation *context) +{ + GError *error; + + reset_killtimer (); + g_debug ("SetTimezone('%s') called", zone_file); + + if (!_check_polkit_for_action (mechanism, context, "org.mate.settingsdaemon.datetimemechanism.settimezone")) + return FALSE; + + error = NULL; + + if (!system_timezone_set_from_file (zone_file, &error)) { + GError *error2; + int code; + + if (error->code == SYSTEM_TIMEZONE_ERROR_INVALID_TIMEZONE_FILE) + code = MSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE; + else + code = MSD_DATETIME_MECHANISM_ERROR_GENERAL; + + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + code, "%s", error->message); + + g_error_free (error); + + dbus_g_method_return_error (context, error2); + g_error_free (error2); + + return FALSE; + } + + dbus_g_method_return (context); + return TRUE; +} + + +gboolean +msd_datetime_mechanism_get_timezone (MsdDatetimeMechanism *mechism, + DBusGMethodInvocation *context) +{ + gchar *timezone; + + reset_killtimer (); + + timezone = system_timezone_find (); + + dbus_g_method_return (context, timezone); + + return TRUE; +} + +gboolean +msd_datetime_mechanism_get_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, + DBusGMethodInvocation *context) +{ + char **lines; + char *data; + gsize len; + GError *error; + gboolean is_utc; + + error = NULL; + + if (!g_file_get_contents ("/etc/adjtime", &data, &len, &error)) { + GError *error2; + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "Error reading /etc/adjtime file: %s", error->message); + g_error_free (error); + dbus_g_method_return_error (context, error2); + g_error_free (error2); + return FALSE; + } + + lines = g_strsplit (data, "\n", 0); + g_free (data); + + if (g_strv_length (lines) < 3) { + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "Cannot parse /etc/adjtime"); + dbus_g_method_return_error (context, error); + g_error_free (error); + g_strfreev (lines); + return FALSE; + } + + if (strcmp (lines[2], "UTC") == 0) { + is_utc = TRUE; + } else if (strcmp (lines[2], "LOCAL") == 0) { + is_utc = FALSE; + } else { + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "Expected UTC or LOCAL at line 3 of /etc/adjtime; found '%s'", lines[2]); + dbus_g_method_return_error (context, error); + g_error_free (error); + g_strfreev (lines); + return FALSE; + } + g_strfreev (lines); + dbus_g_method_return (context, is_utc); + return TRUE; +} + +gboolean +msd_datetime_mechanism_set_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, + gboolean using_utc, + DBusGMethodInvocation *context) +{ + GError *error; + + error = NULL; + + if (!_check_polkit_for_action (mechanism, context, + "org.mate.settingsdaemon.datetimemechanism.configurehwclock")) + return FALSE; + + if (g_file_test ("/sbin/hwclock", + G_FILE_TEST_EXISTS | G_FILE_TEST_IS_REGULAR | G_FILE_TEST_IS_EXECUTABLE)) { + int exit_status; + char *cmd; + cmd = g_strdup_printf ("/sbin/hwclock %s --systohc", using_utc ? "--utc" : "--localtime"); + if (!g_spawn_command_line_sync (cmd, NULL, NULL, &exit_status, &error)) { + GError *error2; + error2 = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "Error spawning /sbin/hwclock: %s", error->message); + g_error_free (error); + dbus_g_method_return_error (context, error2); + g_error_free (error2); + g_free (cmd); + return FALSE; + } + g_free (cmd); + if (WEXITSTATUS (exit_status) != 0) { + error = g_error_new (MSD_DATETIME_MECHANISM_ERROR, + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + "/sbin/hwclock returned %d", exit_status); + dbus_g_method_return_error (context, error); + g_error_free (error); + return FALSE; + } + + if (!_rh_update_etc_sysconfig_clock (context, "UTC=", using_utc ? "true" : "false")) + return FALSE; + + } + dbus_g_method_return (context); + return TRUE; +} + +static void +check_can_do (MsdDatetimeMechanism *mechanism, + const char *action, + DBusGMethodInvocation *context) +{ + const char *sender; + PolkitSubject *subject; + PolkitAuthorizationResult *result; + GError *error; + + /* Check that caller is privileged */ + sender = dbus_g_method_get_sender (context); + subject = polkit_system_bus_name_new (sender); + + error = NULL; + result = polkit_authority_check_authorization_sync (mechanism->priv->auth, + subject, + action, + NULL, + 0, + NULL, + &error); + g_object_unref (subject); + + if (error) { + dbus_g_method_return_error (context, error); + g_error_free (error); + return; + } + + if (polkit_authorization_result_get_is_authorized (result)) { + dbus_g_method_return (context, 2); + } + else if (polkit_authorization_result_get_is_challenge (result)) { + dbus_g_method_return (context, 1); + } + else { + dbus_g_method_return (context, 0); + } + + g_object_unref (result); +} + + +gboolean +msd_datetime_mechanism_can_set_time (MsdDatetimeMechanism *mechanism, + DBusGMethodInvocation *context) +{ + check_can_do (mechanism, + "org.mate.settingsdaemon.datetimemechanism.settime", + context); + + return TRUE; +} + +gboolean +msd_datetime_mechanism_can_set_timezone (MsdDatetimeMechanism *mechanism, + DBusGMethodInvocation *context) +{ + check_can_do (mechanism, + "org.mate.settingsdaemon.datetimemechanism.settimezone", + context); + + return TRUE; +} diff --git a/plugins/datetime/msd-datetime-mechanism.h b/plugins/datetime/msd-datetime-mechanism.h new file mode 100644 index 0000000..c8605b4 --- /dev/null +++ b/plugins/datetime/msd-datetime-mechanism.h @@ -0,0 +1,101 @@ +/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*- + * + * Copyright (C) 2007 David Zeuthen + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + */ + +#ifndef MSD_DATETIME_MECHANISM_H +#define MSD_DATETIME_MECHANISM_H + +#include +#include + +#ifdef __cplusplus +extern "C" { +#endif + +#define MSD_DATETIME_TYPE_MECHANISM (msd_datetime_mechanism_get_type ()) +#define MSD_DATETIME_MECHANISM(o) (G_TYPE_CHECK_INSTANCE_CAST ((o), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanism)) +#define MSD_DATETIME_MECHANISM_CLASS(k) (G_TYPE_CHECK_CLASS_CAST((k), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanismClass)) +#define MSD_DATETIME_IS_MECHANISM(o) (G_TYPE_CHECK_INSTANCE_TYPE ((o), MSD_DATETIME_TYPE_MECHANISM)) +#define MSD_DATETIME_IS_MECHANISM_CLASS(k) (G_TYPE_CHECK_CLASS_TYPE ((k), MSD_DATETIME_TYPE_MECHANISM)) +#define MSD_DATETIME_MECHANISM_GET_CLASS(o) (G_TYPE_INSTANCE_GET_CLASS ((o), MSD_DATETIME_TYPE_MECHANISM, MsdDatetimeMechanismClass)) + +typedef struct MsdDatetimeMechanismPrivate MsdDatetimeMechanismPrivate; + +typedef struct +{ + GObject parent; + MsdDatetimeMechanismPrivate *priv; +} MsdDatetimeMechanism; + +typedef struct +{ + GObjectClass parent_class; +} MsdDatetimeMechanismClass; + +typedef enum +{ + MSD_DATETIME_MECHANISM_ERROR_GENERAL, + MSD_DATETIME_MECHANISM_ERROR_NOT_PRIVILEGED, + MSD_DATETIME_MECHANISM_ERROR_INVALID_TIMEZONE_FILE, + MSD_DATETIME_MECHANISM_NUM_ERRORS +} MsdDatetimeMechanismError; + +#define MSD_DATETIME_MECHANISM_ERROR msd_datetime_mechanism_error_quark () + +GType msd_datetime_mechanism_error_get_type (void); +#define MSD_DATETIME_MECHANISM_TYPE_ERROR (msd_datetime_mechanism_error_get_type ()) + + +GQuark msd_datetime_mechanism_error_quark (void); +GType msd_datetime_mechanism_get_type (void); +MsdDatetimeMechanism *msd_datetime_mechanism_new (void); + +/* exported methods */ +gboolean msd_datetime_mechanism_get_timezone (MsdDatetimeMechanism *mechanism, + DBusGMethodInvocation *context); +gboolean msd_datetime_mechanism_set_timezone (MsdDatetimeMechanism *mechanism, + const char *zone_file, + DBusGMethodInvocation *context); + +gboolean msd_datetime_mechanism_can_set_timezone (MsdDatetimeMechanism *mechanism, + DBusGMethodInvocation *context); + +gboolean msd_datetime_mechanism_set_time (MsdDatetimeMechanism *mechanism, + gint64 seconds_since_epoch, + DBusGMethodInvocation *context); + +gboolean msd_datetime_mechanism_can_set_time (MsdDatetimeMechanism *mechanism, + DBusGMethodInvocation *context); + +gboolean msd_datetime_mechanism_adjust_time (MsdDatetimeMechanism *mechanism, + gint64 seconds_to_add, + DBusGMethodInvocation *context); + +gboolean msd_datetime_mechanism_get_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, + DBusGMethodInvocation *context); + +gboolean msd_datetime_mechanism_set_hardware_clock_using_utc (MsdDatetimeMechanism *mechanism, + gboolean using_utc, + DBusGMethodInvocation *context); + +#ifdef __cplusplus +} +#endif + +#endif /* MSD_DATETIME_MECHANISM_H */ diff --git a/plugins/datetime/msd-datetime-mechanism.xml b/plugins/datetime/msd-datetime-mechanism.xml new file mode 100644 index 0000000..1962235 --- /dev/null +++ b/plugins/datetime/msd-datetime-mechanism.xml @@ -0,0 +1,87 @@ + + + + + + + + + + + + + + + + + + Whether the caller can set the timezone + + + The return value is not a boolean, but an integer with the following meaning: + + + 0 + the caller cannot set the timezone + + + 1 + the caller will be challenged before being able to set the timezone + + + 2 + the caller is authorized to set the timezone + + + + + + + + + + + + + + + + Whether the caller can set the time + + + The return value is not a boolean, but an integer with the following meaning: + + + 0 + the caller cannot set the time + + + 1 + the caller will be challenged before being able to set the time + + + 2 + the caller is authorized to set the time + + + + + + + + + + + + + + + + + + + + + + + -- cgit v1.2.1