From 719e2c0d41e9aade88b140fbd4994b13da9372b0 Mon Sep 17 00:00:00 2001 From: William Jon McCann Date: Mon, 8 Sep 2008 22:11:56 +0000 Subject: Use the same log rotation for slave and greeter. 2008-09-08 William Jon McCann * daemon/gdm-server.c (rotate_logs), (server_child_setup): * daemon/gdm-welcome-session.c (rotate_logs), (spawn_child_setup): Use the same log rotation for slave and greeter. svn path=/trunk/; revision=6482 --- daemon/gdm-server.c | 42 ++++++++++++++++++++---------------------- daemon/gdm-welcome-session.c | 38 ++++++++++++++++++++++++++++++-------- 2 files changed, 50 insertions(+), 30 deletions(-) (limited to 'daemon') diff --git a/daemon/gdm-server.c b/daemon/gdm-server.c index 5b159d87..ca37a2a4 100644 --- a/daemon/gdm-server.c +++ b/daemon/gdm-server.c @@ -58,6 +58,8 @@ extern char **environ; #define SERVER_RUNNING 252 /* Server running and ready for connections */ #define SERVER_ABORT 253 /* Server failed badly. Suspending display. */ +#define MAX_LOGS 5 + struct GdmServerPrivate { char *command; @@ -319,18 +321,10 @@ gdm_server_resolve_command_line (GdmServer *server, } static void -rotate_logs (GdmServer *server) +rotate_logs (const char *path, + guint n_copies) { - int n_copies; - int i; - char *filename; - char *path; - - n_copies = 5; - - filename = g_strdup_printf ("%s.log", server->priv->display_name); - path = g_build_filename (server->priv->log_dir, filename, NULL); - g_free (filename); + int i; for (i = n_copies - 1; i > 0; i--) { char *name_n; @@ -343,14 +337,14 @@ rotate_logs (GdmServer *server) name_n1 = g_strdup (path); } - g_unlink (name_n); - g_rename (name_n1, name_n); + VE_IGNORE_EINTR (g_unlink (name_n)); + VE_IGNORE_EINTR (g_rename (name_n1, name_n)); g_free (name_n1); g_free (name_n); } - g_unlink (path); + VE_IGNORE_EINTR (g_unlink (path)); } static void @@ -408,22 +402,26 @@ change_user (GdmServer *server) static void server_child_setup (GdmServer *server) { - char *logfile; int logfd; struct sigaction ign_signal; sigset_t mask; - char *temp; + char *log_file; + char *log_path; + + log_file = g_strdup_printf ("%s.log", server->priv->display_name); + log_path = g_build_filename (server->priv->log_dir, log_file, NULL); + g_free (log_file); /* Rotate the X server logs */ - rotate_logs (server); + rotate_logs (log_path, MAX_LOGS); /* Log all output from spawned programs to a file */ - temp = g_strconcat (server->priv->display_name, ".log", NULL); - logfile = g_build_filename (server->priv->log_dir, temp, NULL); - g_debug ("GdmServer: Opening logfile for server %s", logfile); + g_debug ("GdmServer: Opening logfile for server %s", log_path); + + VE_IGNORE_EINTR (g_unlink (log_path)); + VE_IGNORE_EINTR (logfd = open (log_path, O_CREAT|O_TRUNC|O_WRONLY|O_EXCL, 0644)); - VE_IGNORE_EINTR (g_unlink (logfile)); - VE_IGNORE_EINTR (logfd = open (logfile, O_CREAT|O_TRUNC|O_WRONLY|O_EXCL, 0644)); + g_free (log_path); if (logfd != -1) { VE_IGNORE_EINTR (dup2 (logfd, 1)); diff --git a/daemon/gdm-welcome-session.c b/daemon/gdm-welcome-session.c index 21b6407e..4f5b4e19 100644 --- a/daemon/gdm-welcome-session.c +++ b/daemon/gdm-welcome-session.c @@ -48,6 +48,8 @@ #define DBUS_LAUNCH_COMMAND BINDIR "/dbus-launch --exit-with-session" +#define MAX_LOGS 5 + extern char **environ; #define GDM_WELCOME_SESSION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), GDM_TYPE_WELCOME_SESSION, GdmWelcomeSessionPrivate)) @@ -376,6 +378,33 @@ welcome_session_child_watch (GPid pid, stop_dbus_daemon (session); } +static void +rotate_logs (const char *path, + guint n_copies) +{ + int i; + + for (i = n_copies - 1; i > 0; i--) { + char *name_n; + char *name_n1; + + name_n = g_strdup_printf ("%s.%d", path, i); + if (i > 1) { + name_n1 = g_strdup_printf ("%s.%d", path, i - 1); + } else { + name_n1 = g_strdup (path); + } + + VE_IGNORE_EINTR (g_unlink (name_n)); + VE_IGNORE_EINTR (g_rename (name_n1, name_n)); + + g_free (name_n1); + g_free (name_n); + } + + VE_IGNORE_EINTR (g_unlink (path)); +} + typedef struct { const char *user_name; const char *group_name; @@ -450,14 +479,7 @@ spawn_child_setup (SpawnChildData *data) if (data->log_file != NULL) { int logfd; - if (g_access (data->log_file, R_OK | W_OK) == 0) { - char *filename_old; - - filename_old = g_strdup_printf ("%s.old", data->log_file); - VE_IGNORE_EINTR (g_unlink (filename_old)); - VE_IGNORE_EINTR (g_rename (data->log_file, filename_old)); - g_free (filename_old); - } + rotate_logs (data->log_file, MAX_LOGS); VE_IGNORE_EINTR (g_unlink (data->log_file)); VE_IGNORE_EINTR (logfd = open (data->log_file, O_CREAT|O_TRUNC|O_WRONLY|O_EXCL, 0644)); -- cgit v1.2.1