diff options
author | Robert Ancell <robert.ancell@canonical.com> | 2016-12-07 16:04:25 +1300 |
---|---|---|
committer | Robert Ancell <robert.ancell@canonical.com> | 2016-12-07 16:04:25 +1300 |
commit | ddde20e73206f3b384d8bb3531517ed7208ef34d (patch) | |
tree | 7ae8b3e2a347afee0a8d792f7da4b85139ce9dee | |
parent | 91e5fd37ee8dc2180f741e1e18155f0096fd51d6 (diff) | |
download | lightdm-git-ddde20e73206f3b384d8bb3531517ed7208ef34d.tar.gz |
Allow D-Bus interface to be disabled
-rw-r--r-- | common/configuration.c | 1 | ||||
-rw-r--r-- | data/lightdm.conf | 2 | ||||
-rw-r--r-- | po/lightdm.pot | 24 | ||||
-rw-r--r-- | src/lightdm.c | 17 | ||||
-rw-r--r-- | tests/Makefile.am | 2 | ||||
-rw-r--r-- | tests/scripts/no-dbus.conf | 43 | ||||
-rw-r--r-- | tests/src/test-runner.c | 145 | ||||
-rwxr-xr-x | tests/test-no-dbus | 2 |
8 files changed, 175 insertions, 61 deletions
diff --git a/common/configuration.c b/common/configuration.c index 02c34ce9..27416cd0 100644 --- a/common/configuration.c +++ b/common/configuration.c @@ -396,6 +396,7 @@ config_init (Configuration *config) g_hash_table_insert (config->priv->lightdm_keys, "remote-sessions-directory", GINT_TO_POINTER (KEY_SUPPORTED)); g_hash_table_insert (config->priv->lightdm_keys, "greeters-directory", GINT_TO_POINTER (KEY_SUPPORTED)); g_hash_table_insert (config->priv->lightdm_keys, "backup-logs", GINT_TO_POINTER (KEY_SUPPORTED)); + g_hash_table_insert (config->priv->lightdm_keys, "dbus-service", GINT_TO_POINTER (KEY_SUPPORTED)); g_hash_table_insert (config->priv->lightdm_keys, "logind-load-seats", GINT_TO_POINTER (KEY_DEPRECATED)); g_hash_table_insert (config->priv->seat_keys, "type", GINT_TO_POINTER (KEY_SUPPORTED)); diff --git a/data/lightdm.conf b/data/lightdm.conf index ce990a0b..2082c1ac 100644 --- a/data/lightdm.conf +++ b/data/lightdm.conf @@ -16,6 +16,7 @@ # remote-sessions-directory = Directory to find remote sessions # greeters-directory = Directory to find greeters # backup-logs = True to move add a .old suffix to old log files when opening new ones +# dbus-service = True if LightDM provides a D-Bus service to control it # [LightDM] #start-default-seat=true @@ -33,6 +34,7 @@ #remote-sessions-directory=/usr/share/lightdm/remote-sessions #greeters-directory=$XDG_DATA_DIRS/lightdm/greeters:$XDG_DATA_DIRS/xgreeters #backup-logs=true +#dbus-service=true # # Seat configuration diff --git a/po/lightdm.pot b/po/lightdm.pot index 8f0ff3b6..beb7f630 100644 --- a/po/lightdm.pot +++ b/po/lightdm.pot @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2016-06-22 09:15+1200\n" +"POT-Creation-Date: 2016-12-07 15:52+1300\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" @@ -18,57 +18,57 @@ msgstr "" "Content-Transfer-Encoding: 8bit\n" #. Help string for command line --config flag -#: ../src/lightdm.c:1198 +#: ../src/lightdm.c:618 msgid "Use configuration file" msgstr "" #. Help string for command line --debug flag -#: ../src/lightdm.c:1201 +#: ../src/lightdm.c:621 msgid "Print debugging messages" msgstr "" #. Help string for command line --test-mode flag -#: ../src/lightdm.c:1204 +#: ../src/lightdm.c:624 msgid "Run as unprivileged user, skipping things that require root access" msgstr "" #. Help string for command line --pid-file flag -#: ../src/lightdm.c:1207 +#: ../src/lightdm.c:627 msgid "File to write PID into" msgstr "" #. Help string for command line --log-dir flag -#: ../src/lightdm.c:1210 +#: ../src/lightdm.c:630 msgid "Directory to write logs to" msgstr "" #. Help string for command line --run-dir flag -#: ../src/lightdm.c:1213 +#: ../src/lightdm.c:633 msgid "Directory to store running state" msgstr "" #. Help string for command line --cache-dir flag -#: ../src/lightdm.c:1216 +#: ../src/lightdm.c:636 msgid "Directory to cache information" msgstr "" #. Help string for command line --show-config flag -#: ../src/lightdm.c:1219 +#: ../src/lightdm.c:639 msgid "Show combined configuration" msgstr "" #. Help string for command line --version flag -#: ../src/lightdm.c:1222 +#: ../src/lightdm.c:642 msgid "Show release version" msgstr "" #. Arguments and description for --help test -#: ../src/lightdm.c:1241 +#: ../src/lightdm.c:667 msgid "- Display Manager" msgstr "" #. Text printed out when an unknown command-line argument provided -#: ../src/lightdm.c:1251 +#: ../src/lightdm.c:677 #, c-format msgid "Run '%s --help' to see a full list of available command line options." msgstr "" diff --git a/src/lightdm.c b/src/lightdm.c index 0b45c229..491b01a4 100644 --- a/src/lightdm.c +++ b/src/lightdm.c @@ -833,6 +833,8 @@ main (int argc, char **argv) config_set_boolean (config_get_instance (), "LightDM", "lock-memory", TRUE); if (!config_has_key (config_get_instance (), "LightDM", "backup-logs")) config_set_boolean (config_get_instance (), "LightDM", "backup-logs", TRUE); + if (!config_has_key (config_get_instance (), "LightDM", "dbus-service")) + config_set_boolean (config_get_instance (), "LightDM", "dbus-service", TRUE); if (!config_has_key (config_get_instance (), "Seat:*", "type")) config_set_string (config_get_instance (), "Seat:*", "type", "local"); if (!config_has_key (config_get_instance (), "Seat:*", "pam-service")) @@ -941,11 +943,16 @@ main (int argc, char **argv) g_signal_connect (display_manager, DISPLAY_MANAGER_SIGNAL_STOPPED, G_CALLBACK (display_manager_stopped_cb), NULL); g_signal_connect (display_manager, DISPLAY_MANAGER_SIGNAL_SEAT_REMOVED, G_CALLBACK (display_manager_seat_removed_cb), NULL); - display_manager_service = display_manager_service_new (display_manager); - g_signal_connect (display_manager_service, DISPLAY_MANAGER_SERVICE_SIGNAL_ADD_XLOCAL_SEAT, G_CALLBACK (service_add_xlocal_seat_cb), NULL); - g_signal_connect (display_manager_service, DISPLAY_MANAGER_SERVICE_SIGNAL_READY, G_CALLBACK (service_ready_cb), NULL); - g_signal_connect (display_manager_service, DISPLAY_MANAGER_SERVICE_SIGNAL_NAME_LOST, G_CALLBACK (service_name_lost_cb), NULL); - display_manager_service_start (display_manager_service); + if (config_get_boolean (config_get_instance (), "LightDM", "dbus-service")) + { + display_manager_service = display_manager_service_new (display_manager); + g_signal_connect (display_manager_service, DISPLAY_MANAGER_SERVICE_SIGNAL_ADD_XLOCAL_SEAT, G_CALLBACK (service_add_xlocal_seat_cb), NULL); + g_signal_connect (display_manager_service, DISPLAY_MANAGER_SERVICE_SIGNAL_READY, G_CALLBACK (service_ready_cb), NULL); + g_signal_connect (display_manager_service, DISPLAY_MANAGER_SERVICE_SIGNAL_NAME_LOST, G_CALLBACK (service_name_lost_cb), NULL); + display_manager_service_start (display_manager_service); + } + else + start_display_manager (); shared_data_manager_start (shared_data_manager_get_instance ()); diff --git a/tests/Makefile.am b/tests/Makefile.am index e424c2d7..d75b6cc3 100644 --- a/tests/Makefile.am +++ b/tests/Makefile.am @@ -137,6 +137,7 @@ TESTS = \ test-upstart-autologin \ test-upstart-login \ test-dbus \ + test-no-dbus \ test-lock-seat \ test-lock-seat-after-vt-switch \ test-lock-seat-twice \ @@ -547,6 +548,7 @@ EXTRA_DIST = \ scripts/no-config.conf \ scripts/no-console-kit.conf \ scripts/no-console-kit-or-login1.conf \ + scripts/no-dbus.conf \ scripts/no-login1.conf \ scripts/open-file-descriptors.conf \ scripts/power.conf \ diff --git a/tests/scripts/no-dbus.conf b/tests/scripts/no-dbus.conf new file mode 100644 index 00000000..7e0d2946 --- /dev/null +++ b/tests/scripts/no-dbus.conf @@ -0,0 +1,43 @@ +# +# Check D-Bus interface can be disabled +# + +[test-runner-config] +log-dbus=true + +[LightDM] +dbus-service=false + +[Seat:*] +user-session=default + +#?*START-DAEMON +#?RUNNER DAEMON-START + +# X server starts +#?XSERVER-0 START VT=7 SEAT=seat0 + +# Daemon connects when X server is ready +#?*XSERVER-0 INDICATE-READY +#?XSERVER-0 INDICATE-READY +#?XSERVER-0 ACCEPT-CONNECT + +# Greeter starts +#?GREETER-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 XDG_SESSION_CLASS=greeter +#?LOGIN1 ACTIVATE-SESSION SESSION=c0 +#?XSERVER-0 ACCEPT-CONNECT +#?GREETER-X-0 CONNECT-XSERVER +#?GREETER-X-0 CONNECT-TO-DAEMON +#?GREETER-X-0 CONNECTED-TO-DAEMON + +# Can't access D-Bus interface +#?*LIST-SEATS +#?RUNNER LIST-SEATS ERROR=SERVICE_UNKNOWN +#?*LIST-SESSIONS +#?RUNNER LIST-SESSIONS ERROR=SERVICE_UNKNOWN + +# Cleanup +#?*STOP-DAEMON +#?GREETER-X-0 TERMINATE SIGNAL=15 +#?XSERVER-0 TERMINATE SIGNAL=15 +#?RUNNER DAEMON-EXIT STATUS=0 diff --git a/tests/src/test-runner.c b/tests/src/test-runner.c index d4d2ccfa..c4a502cc 100644 --- a/tests/src/test-runner.c +++ b/tests/src/test-runner.c @@ -634,9 +634,7 @@ handle_command (const gchar *command) { GVariant *result, *value; GString *status; - GVariantIter *iter; - const gchar *path; - int i = 0; + GError *error = NULL; result = g_dbus_connection_call_sync (g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL), "org.freedesktop.DisplayManager", @@ -648,20 +646,36 @@ handle_command (const gchar *command) G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, - NULL); + &error); - status = g_string_new ("RUNNER LIST-SEATS SEATS="); - g_variant_get (result, "(v)", &value); - g_variant_get (value, "ao", &iter); - while (g_variant_iter_loop (iter, "&o", &path)) + status = g_string_new ("RUNNER LIST-SEATS"); + if (result) { - if (i != 0) - g_string_append (status, ","); - g_string_append (status, path); - i++; + GVariantIter *iter; + const gchar *path; + int i = 0; + + g_string_append (status, " SEATS="); + g_variant_get (result, "(v)", &value); + g_variant_get (value, "ao", &iter); + while (g_variant_iter_loop (iter, "&o", &path)) + { + if (i != 0) + g_string_append (status, ","); + g_string_append (status, path); + i++; + } + g_variant_unref (value); + g_variant_unref (result); + } + else + { + if (g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_SERVICE_UNKNOWN)) + g_string_append_printf (status, " ERROR=SERVICE_UNKNOWN"); + else + g_string_append_printf (status, " ERROR=%s", error->message); + g_clear_error (&error); } - g_variant_unref (value); - g_variant_unref (result); check_status (status->str); g_string_free (status, TRUE); @@ -670,9 +684,7 @@ handle_command (const gchar *command) { GVariant *result, *value; GString *status; - GVariantIter *iter; - const gchar *path; - int i = 0; + GError *error = NULL; result = g_dbus_connection_call_sync (g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL), "org.freedesktop.DisplayManager", @@ -684,20 +696,37 @@ handle_command (const gchar *command) G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, - NULL); + &error); - status = g_string_new ("RUNNER LIST-SESSIONS SESSIONS="); - g_variant_get (result, "(v)", &value); - g_variant_get (value, "ao", &iter); - while (g_variant_iter_loop (iter, "&o", &path)) + status = g_string_new ("RUNNER LIST-SESSIONS"); + if (result) { - if (i != 0) - g_string_append (status, ","); - g_string_append (status, path); - i++; + GVariantIter *iter; + const gchar *path; + int i = 0; + + g_string_append (status, " SESSIONS="); + + g_variant_get (result, "(v)", &value); + g_variant_get (value, "ao", &iter); + while (g_variant_iter_loop (iter, "&o", &path)) + { + if (i != 0) + g_string_append (status, ","); + g_string_append (status, path); + i++; + } + g_variant_unref (value); + g_variant_unref (result); + } + else + { + if (g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_SERVICE_UNKNOWN)) + g_string_append_printf (status, " ERROR=SERVICE_UNKNOWN"); + else + g_string_append_printf (status, " ERROR=%s", error->message); + g_clear_error (&error); } - g_variant_unref (value); - g_variant_unref (result); check_status (status->str); g_string_free (status, TRUE); @@ -705,7 +734,8 @@ handle_command (const gchar *command) else if (strcmp (name, "SEAT-CAN-SWITCH") == 0) { GVariant *result, *value; - gchar *status; + GString *status; + GError *error = NULL; result = g_dbus_connection_call_sync (g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL), "org.freedesktop.DisplayManager", @@ -717,19 +747,33 @@ handle_command (const gchar *command) G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, - NULL); + &error); - g_variant_get (result, "(v)", &value); - status = g_strdup_printf ("RUNNER SEAT-CAN-SWITCH CAN-SWITCH=%s", g_variant_get_boolean (value) ? "TRUE" : "FALSE"); - g_variant_unref (value); - g_variant_unref (result); - check_status (status); - g_free (status); + status = g_string_new ("RUNNER SEAT-CAN-SWITCH"); + if (result) + { + g_variant_get (result, "(v)", &value); + g_string_append_printf (status, " CAN-SWITCH=%s", g_variant_get_boolean (value) ? "TRUE" : "FALSE"); + g_variant_unref (value); + g_variant_unref (result); + } + else + { + if (g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_SERVICE_UNKNOWN)) + g_string_append_printf (status, " ERROR=SERVICE_UNKNOWN"); + else + g_string_append_printf (status, " ERROR=%s", error->message); + g_clear_error (&error); + } + + check_status (status->str); + g_string_free (status, TRUE); } else if (strcmp (name, "SEAT-HAS-GUEST-ACCOUNT") == 0) { GVariant *result, *value; - gchar *status; + GString *status; + GError *error = NULL; result = g_dbus_connection_call_sync (g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, NULL), "org.freedesktop.DisplayManager", @@ -741,14 +785,27 @@ handle_command (const gchar *command) G_DBUS_CALL_FLAGS_NONE, G_MAXINT, NULL, - NULL); + &error); - g_variant_get (result, "(v)", &value); - status = g_strdup_printf ("RUNNER SEAT-HAS-GUEST-ACCOUNT HAS-GUEST-ACCOUNT=%s", g_variant_get_boolean (value) ? "TRUE" : "FALSE"); - g_variant_unref (value); - g_variant_unref (result); - check_status (status); - g_free (status); + status = g_string_new ("RUNNER SEAT-HAS-GUEST-ACCOUNT"); + if (result) + { + g_variant_get (result, "(v)", &value); + g_string_append_printf (status, " HAS-GUEST-ACCOUNT=%s", g_variant_get_boolean (value) ? "TRUE" : "FALSE"); + g_variant_unref (value); + g_variant_unref (result); + } + else + { + if (g_error_matches (error, G_DBUS_ERROR, G_DBUS_ERROR_SERVICE_UNKNOWN)) + g_string_append_printf (status, " ERROR=SERVICE_UNKNOWN"); + else + g_string_append_printf (status, " ERROR=%s", error->message); + g_clear_error (&error); + } + + check_status (status->str); + g_string_free (status, TRUE); } else if (strcmp (name, "SWITCH-TO-GREETER") == 0) { diff --git a/tests/test-no-dbus b/tests/test-no-dbus new file mode 100755 index 00000000..e6dbfa33 --- /dev/null +++ b/tests/test-no-dbus @@ -0,0 +1,2 @@ +#!/bin/sh +./src/dbus-env ./src/test-runner no-dbus test-gobject-greeter |