#include "shared-data-manager.h"
#include "user-list.h"
#include "login1.h"
+#include "log-file.h"
static gchar *config_path = NULL;
static GMainLoop *loop = NULL;
static void
log_init (void)
{
- gchar *log_dir, *path, *old_path;
+ gchar *log_dir, *path;
+ gboolean backup_logs;
log_timer = g_timer_new ();
path = g_build_filename (log_dir, "lightdm.log", NULL);
g_free (log_dir);
- /* Move old file out of the way */
- old_path = g_strdup_printf ("%s.old", path);
- rename (path, old_path);
- g_free (old_path);
-
- /* Create new file and log to it */
- log_fd = open (path, O_WRONLY | O_CREAT | O_TRUNC, 0600);
+ backup_logs = config_get_boolean (config_get_instance (), "LightDM", "backup-logs");
+ log_fd = log_file_open (path, backup_logs ? LOG_MODE_BACKUP_AND_TRUNCATE : LOG_MODE_APPEND);
fcntl (log_fd, F_SETFD, FD_CLOEXEC);
g_log_set_default_handler (log_cb, NULL);
gchar **groups, **i;
GList *config_sections = NULL;
- /* Keep this so it won't break existing config files using old [SeatDefaults] */
- config_sections = g_list_append (config_sections, g_strdup ("SeatDefaults"));
+ /* Load seat defaults first */
+ config_sections = g_list_append (config_sections, g_strdup ("Seat:*"));
groups = config_get_groups (config_get_instance ());
for (i = groups; *i; i++)
{
- if (g_str_has_prefix (*i, "Seat:"))
+ if (g_str_has_prefix (*i, "Seat:") && strcmp (*i, "Seat:*") != 0)
{
const gchar *seat_name_glob = *i + strlen ("Seat:");
if (g_pattern_match_simple (seat_name_glob, seat_name ? seat_name : ""))
const gchar *section = link->data;
keys = config_get_keys (config_get_instance (), section);
- /* Keep this until [SeatDefaults] support is definitely removed */
- if (strcmp (section, "SeatDefaults") == 0 && keys)
- l_warning (seat, "[SeatDefaults] is deprecated and won't be supported in the future. Use [Seat:*] instead!");
-
l_debug (seat, "Loading properties from config section %s", section);
for (i = 0; keys && keys[i]; i++)
{
static void
signal_cb (Process *process, int signum)
{
- g_debug ("Caught %s signal, shutting down", g_strsignal (signum));
- display_manager_stop (display_manager);
- // FIXME: Stop XDMCP server
+ switch (signum)
+ {
+ case SIGINT:
+ case SIGTERM:
+ g_debug ("Caught %s signal, shutting down", g_strsignal (signum));
+ display_manager_stop (display_manager);
+ // FIXME: Stop XDMCP server
+ break;
+ case SIGUSR1:
+ case SIGUSR2:
+ case SIGHUP:
+ break;
+ }
}
static void
/* Start the XDMCP server */
if (config_get_boolean (config_get_instance (), "XDMCPServer", "enabled"))
{
- gchar *key_name, *key = NULL;
+ gchar *key_name, *key = NULL, *listen_address;
xdmcp_server = xdmcp_server_new ();
if (config_has_key (config_get_instance (), "XDMCPServer", "port"))
if (port > 0)
xdmcp_server_set_port (xdmcp_server, port);
}
+ listen_address = config_get_string (config_get_instance (), "XDMCPServer", "listen-address");
+ xdmcp_server_set_listen_address (xdmcp_server, listen_address);
+ g_free (listen_address);
g_signal_connect (xdmcp_server, XDMCP_SERVER_SIGNAL_NEW_SESSION, G_CALLBACK (xdmcp_session_cb), NULL);
key_name = config_get_string (config_get_instance (), "XDMCPServer", "key");
keys = g_key_file_new ();
result = g_key_file_load_from_file (keys, path, G_KEY_FILE_NONE, &error);
if (error)
- g_debug ("Error getting key %s", error->message);
+ g_warning ("Unable to load keys from %s: %s", path, error->message);
g_clear_error (&error);
if (result)
if (g_key_file_has_key (keys, "keyring", key_name, NULL))
key = g_key_file_get_string (keys, "keyring", key_name, NULL);
else
- g_debug ("Key %s not defined", key_name);
+ g_warning ("Key %s not defined", key_name);
}
g_free (path);
g_key_file_free (keys);
xdmcp_server_set_key (xdmcp_server, key);
g_free (key_name);
g_free (key);
-
- g_debug ("Starting XDMCP server on UDP/IP port %d", xdmcp_server_get_port (xdmcp_server));
- xdmcp_server_start (xdmcp_server);
+
+ if (key_name && !key)
+ {
+ exit_code = EXIT_FAILURE;
+ display_manager_stop (display_manager);
+ return;
+ }
+ else
+ {
+ g_debug ("Starting XDMCP server on UDP/IP port %d", xdmcp_server_get_port (xdmcp_server));
+ xdmcp_server_start (xdmcp_server);
+ }
}
/* Start the VNC server */
path = g_find_program_in_path ("Xvnc");
if (path)
{
+ gchar *listen_address;
+
vnc_server = vnc_server_new ();
if (config_has_key (config_get_instance (), "VNCServer", "port"))
{
if (port > 0)
vnc_server_set_port (vnc_server, port);
}
+ listen_address = config_get_string (config_get_instance (), "VNCServer", "listen-address");
+ vnc_server_set_listen_address (vnc_server, listen_address);
+ g_free (listen_address);
g_signal_connect (vnc_server, VNC_SERVER_SIGNAL_NEW_CONNECTION, G_CALLBACK (vnc_connection_cb), NULL);
g_debug ("Starting VNC server on TCP/IP port %d", vnc_server_get_port (vnc_server));
config_set_string (config_get_instance (), "LightDM", "greeter-user", GREETER_USER);
if (!config_has_key (config_get_instance (), "LightDM", "lock-memory"))
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 (), "Seat:*", "type"))
config_set_string (config_get_instance (), "Seat:*", "type", "xlocal");
if (!config_has_key (config_get_instance (), "Seat:*", "pam-service"))
common_user_list_cleanup ();
/* Clean up display manager */
- g_object_unref (display_manager);
- display_manager = NULL;
+ g_clear_object (&display_manager);
/* Remove D-Bus interface */
g_dbus_connection_unregister_object (bus, reg_id);