summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobert Ancell <robert.ancell@canonical.com>2016-12-07 16:04:25 +1300
committerRobert Ancell <robert.ancell@canonical.com>2016-12-07 16:04:25 +1300
commitddde20e73206f3b384d8bb3531517ed7208ef34d (patch)
tree7ae8b3e2a347afee0a8d792f7da4b85139ce9dee
parent91e5fd37ee8dc2180f741e1e18155f0096fd51d6 (diff)
downloadlightdm-git-ddde20e73206f3b384d8bb3531517ed7208ef34d.tar.gz
Allow D-Bus interface to be disabled
-rw-r--r--common/configuration.c1
-rw-r--r--data/lightdm.conf2
-rw-r--r--po/lightdm.pot24
-rw-r--r--src/lightdm.c17
-rw-r--r--tests/Makefile.am2
-rw-r--r--tests/scripts/no-dbus.conf43
-rw-r--r--tests/src/test-runner.c145
-rwxr-xr-xtests/test-no-dbus2
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