summaryrefslogtreecommitdiff
path: root/daemon
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2008-09-08 22:11:56 +0000
committerWilliam Jon McCann <mccann@src.gnome.org>2008-09-08 22:11:56 +0000
commit719e2c0d41e9aade88b140fbd4994b13da9372b0 (patch)
treebec5c3d522ee8af2f235677ed29054479b29b28b /daemon
parentceccfe79ea21a853f3b3947ce2f8456807417586 (diff)
downloadgdm-719e2c0d41e9aade88b140fbd4994b13da9372b0.tar.gz
Use the same log rotation for slave and greeter.
2008-09-08 William Jon McCann <jmccann@redhat.com> * 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
Diffstat (limited to 'daemon')
-rw-r--r--daemon/gdm-server.c42
-rw-r--r--daemon/gdm-welcome-session.c38
2 files changed, 50 insertions, 30 deletions
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));