]> rtime.felk.cvut.cz Git - sojka/lightdm.git/commitdiff
Also support loading config from /usr/share since Debian (stupidly) wont remove files...
authorRobert Ancell <robert.ancell@canonical.com>
Sat, 24 Aug 2013 03:33:06 +0000 (15:33 +1200)
committerRobert Ancell <robert.ancell@canonical.com>
Sat, 24 Aug 2013 03:33:06 +0000 (15:33 +1200)
src/Makefile.am
src/lightdm.c
tests/Makefile.am
tests/scripts/additional-system-config-priority.conf [new file with mode: 0644]
tests/scripts/additional-system-config.conf [new file with mode: 0644]
tests/src/test-runner.c
tests/test-additional-system-config [new file with mode: 0755]
tests/test-additional-system-config-priority [new file with mode: 0755]

index 457d70630b08b1e959fb5320205fb356083f93c9..bc0b715220ae27c7f6e6727707b0aba29124f3e1 100644 (file)
@@ -79,6 +79,7 @@ lightdm_CFLAGS = \
        -DLOG_DIR=\"$(localstatedir)/log/lightdm\" \
        -DRUN_DIR=\"$(localstatedir)/run/lightdm\" \
        -DCACHE_DIR=\"$(localstatedir)/cache/lightdm\" \
+       -DSYSTEM_CONFIG_DIR=\"$(pkgdatadir)/lightdm.conf.d\" \
        -DSESSIONS_DIR=\"$(pkgdatadir)/sessions:$(datadir)/xsessions\" \
        -DREMOTE_SESSIONS_DIR=\"$(pkgdatadir)/remote-sessions\" \
        -DGREETERS_DIR=\"$(pkgdatadir)/greeters:$(datadir)/xgreeters\"
index 246a2072de24b872e8765e32aad18fc18a4e2165..edb14bf930c1059cc994f49c14bd93bdb2b23376 100644 (file)
@@ -854,6 +854,49 @@ compare_strings (gconstpointer a, gconstpointer b)
     return strcmp (a, b);
 }
 
+static void
+load_config_directory (const gchar *path, GList **messages)
+{
+    GDir *dir;
+    GList *files = NULL, *link;
+    GError *error = NULL;
+
+    /* Find configuration files */
+    dir = g_dir_open (path, 0, &error);
+    if (error && !g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
+        g_printerr ("Failed to open configuration directory %s: %s\n", path, error->message);
+    g_clear_error (&error);
+    if (dir)
+    {
+        const gchar *name;
+        while ((name = g_dir_read_name (dir)))
+            files = g_list_append (files, g_strdup (name));
+        g_dir_close (dir);
+    }
+
+    /* Sort alphabetically and load onto existing configuration */
+    files = g_list_sort (files, compare_strings);
+    for (link = files; link; link = link->next)
+    {
+        gchar *filename = link->data;
+        gchar *conf_path;
+
+        conf_path = g_build_filename (path, filename, NULL);
+        if (g_str_has_suffix (filename, ".conf"))
+        {
+            *messages = g_list_append (*messages, g_strdup_printf ("Loading configuration from %s", conf_path));
+            config_load_from_file (config_get_instance (), conf_path, &error);
+            if (error && !g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
+                g_printerr ("Failed to load configuration from %s: %s\n", filename, error->message);
+            g_clear_error (&error);
+        }
+        else
+            g_debug ("Ignoring configuration file %s, it does not have .conf suffix", conf_path);
+        g_free (conf_path);
+    }
+    g_list_free_full (files, g_free);
+}
+
 int
 main (int argc, char **argv)
 {
@@ -1009,46 +1052,9 @@ main (int argc, char **argv)
     }
 
     /* Load config file(s) */
+    load_config_directory (SYSTEM_CONFIG_DIR, &messages);
     if (config_d_dir)
-    {
-        GDir *dir;
-        GList *files = NULL, *link;
-
-        /* Find configuration files */
-        dir = g_dir_open (config_d_dir, 0, &error);
-        if (error && !g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
-            g_printerr ("Failed to open configuration directory %s: %s\n", config_d_dir, error->message);
-        g_clear_error (&error);
-        if (dir)
-        {
-            const gchar *name;
-            while ((name = g_dir_read_name (dir)))
-                files = g_list_append (files, g_strdup (name));
-            g_dir_close (dir);
-        }
-
-        /* Sort alphabetically and load onto existing configuration */
-        files = g_list_sort (files, compare_strings);
-        for (link = files; link; link = link->next)
-        {
-            gchar *filename = link->data;
-            gchar *path;
-
-            path = g_build_filename (config_d_dir, filename, NULL);
-            if (g_str_has_suffix (filename, ".conf"))
-            {
-                messages = g_list_append (messages, g_strdup_printf ("Loading configuration from %s", path));
-                config_load_from_file (config_get_instance (), path, &error);
-                if (error && !g_error_matches (error, G_FILE_ERROR, G_FILE_ERROR_NOENT))
-                    g_printerr ("Failed to load configuration from %s: %s\n", filename, error->message);
-                g_clear_error (&error);
-            }
-            else
-                g_debug ("Ignoring configuration file %s, it does not have .conf suffix", path);
-            g_free (path);
-        }
-        g_list_free_full (files, g_free);
-    }
+        load_config_directory (config_d_dir, &messages);
     g_free (config_d_dir);
     messages = g_list_append (messages, g_strdup_printf ("Loading configuration from %s", config_path));
     if (!config_load_from_file (config_get_instance (), config_path, &error))
index 945a78ef12d8dab6dd02a1b3be9b426e3ea44520..97239c8f63c9fa18a6483b119e82d01ed358ae7c 100644 (file)
@@ -14,6 +14,8 @@ TESTS = \
        test-no-config \
        test-additional-config \
        test-additional-config-priority \
+       test-additional-system-config \
+       test-additional-system-config-priority \
        test-headless \
        test-autologin \
        test-autologin-in-background \
@@ -280,6 +282,8 @@ EXTRA_DIST = \
        scripts/1-additional.conf \
        scripts/additional-config.conf \
        scripts/additional-config-priority.conf \
+       scripts/additional-system-config.conf \
+       scripts/additional-system-config-priority.conf \
        scripts/autologin.conf \
        scripts/autologin-guest.conf \
        scripts/autologin-guest-fail-setup-script.conf \
diff --git a/tests/scripts/additional-system-config-priority.conf b/tests/scripts/additional-system-config-priority.conf
new file mode 100644 (file)
index 0000000..1ed1bcb
--- /dev/null
@@ -0,0 +1,31 @@
+#
+# Check LightDM runs with system config.d configuration and the value from /etc is used
+#
+
+[test-runner-config]
+additional-system-config=0-additional.conf
+additional-config=1-additional.conf
+
+[SeatDefaults]
+user-session=default
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 USER=have-password2
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
diff --git a/tests/scripts/additional-system-config.conf b/tests/scripts/additional-system-config.conf
new file mode 100644 (file)
index 0000000..5f170c6
--- /dev/null
@@ -0,0 +1,30 @@
+#
+# Check LightDM runs with system-config.d configuration and the value from the last file is used
+#
+
+[test-runner-config]
+additional-system-config=0-additional.conf 1-additional.conf
+
+[SeatDefaults]
+user-session=default
+
+#?RUNNER DAEMON-START
+
+# X server starts
+#?XSERVER-0 START VT=7
+
+# Daemon connects when X server is ready
+#?*XSERVER-0 INDICATE-READY
+#?XSERVER-0 INDICATE-READY
+#?XSERVER-0 ACCEPT-CONNECT
+
+# Session starts
+#?SESSION-X-0 START XDG_SEAT=seat0 XDG_VTNR=7 USER=have-password2
+#?XSERVER-0 ACCEPT-CONNECT
+#?SESSION-X-0 CONNECT-XSERVER
+
+# Cleanup
+#?*STOP-DAEMON
+#?SESSION-X-0 TERMINATE SIGNAL=15
+#?XSERVER-0 TERMINATE SIGNAL=15
+#?RUNNER DAEMON-EXIT STATUS=0
index 526bb73e78e3c622d8b8212eaab4b4341e253dcf..e893bb86beddf267c7dde5aee4e6f76e9e0db96a 100644 (file)
@@ -1806,7 +1806,8 @@ main (int argc, char **argv)
 {
     GMainLoop *loop;
     int i;
-    gchar *greeter = NULL, *script_name, *config_file, *additional_config, *path, *path1, *path2, *ld_preload, *ld_library_path, *home_dir;
+    gchar *greeter = NULL, *script_name, *config_file, *additional_system_config;
+    gchar *additional_config, *path, *path1, *path2, *ld_preload, *ld_library_path, *home_dir;
     GString *passwd_data, *group_data;
     GSource *status_source;
     gchar cwd[1024];
@@ -1940,6 +1941,20 @@ main (int argc, char **argv)
         if (system (g_strdup_printf ("cp %s %s/etc/lightdm/lightdm.conf", config_path, temp_dir)))
             perror ("Failed to copy configuration");
 
+    additional_system_config = g_key_file_get_string (config, "test-runner-config", "additional-system-config", NULL);
+    if (additional_system_config)
+    {
+        gchar **files;
+
+        g_mkdir_with_parents (g_strdup_printf ("%s/usr/share/lightdm/lightdm.conf.d", temp_dir), 0755);
+
+        files = g_strsplit (additional_system_config, " ", -1);
+        for (i = 0; files[i]; i++)
+            if (system (g_strdup_printf ("cp %s/tests/scripts/%s %s/usr/share/lightdm/lightdm.conf.d", SRCDIR, files[i], temp_dir)))
+                perror ("Failed to copy configuration");
+        g_strfreev (files);
+    }
+
     additional_config = g_key_file_get_string (config, "test-runner-config", "additional-config", NULL);
     if (additional_config)
     {
diff --git a/tests/test-additional-system-config b/tests/test-additional-system-config
new file mode 100755 (executable)
index 0000000..ad84124
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner additional-system-config test-gobject-greeter
diff --git a/tests/test-additional-system-config-priority b/tests/test-additional-system-config-priority
new file mode 100755 (executable)
index 0000000..e8fd4b9
--- /dev/null
@@ -0,0 +1,2 @@
+#!/bin/sh
+./src/dbus-env ./src/test-runner additional-system-config-priority test-gobject-greeter