summaryrefslogtreecommitdiff
path: root/src/session-child.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/session-child.c')
-rw-r--r--src/session-child.c13
1 files changed, 7 insertions, 6 deletions
diff --git a/src/session-child.c b/src/session-child.c
index f673b395..9915e418 100644
--- a/src/session-child.c
+++ b/src/session-child.c
@@ -26,6 +26,7 @@
#include "session.h"
#include "console-kit.h"
#include "login1.h"
+#include "log-file.h"
#include "privileges.h"
#include "x-authority.h"
#include "configuration.h"
@@ -257,7 +258,8 @@ session_child_run (int argc, char **argv)
int i, version, fd, result;
gboolean auth_complete = TRUE;
User *user = NULL;
- gchar *log_filename, *log_backup_filename = NULL;
+ gchar *log_filename;
+ LogMode log_mode = LOG_MODE_BACKUP_AND_TRUNCATE;
gsize env_length;
gsize command_argc;
gchar **command_argv;
@@ -488,6 +490,8 @@ session_child_run (int argc, char **argv)
/* Get the command to run (blocks) */
log_filename = read_string ();
+ if (version >= 3)
+ read_data (&log_mode, sizeof (log_mode));
if (version >= 1)
{
g_free (tty);
@@ -522,11 +526,9 @@ session_child_run (int argc, char **argv)
/* Redirect stderr to a log file */
if (log_filename)
{
- log_backup_filename = g_strdup_printf ("%s.old", log_filename);
if (g_path_is_absolute (log_filename))
{
- rename (log_filename, log_backup_filename);
- fd = open (log_filename, O_WRONLY | O_APPEND | O_CREAT, 0600);
+ fd = log_file_open (log_filename, log_mode);
dup2 (fd, STDERR_FILENO);
close (fd);
g_free (log_filename);
@@ -680,8 +682,7 @@ session_child_run (int argc, char **argv)
if (log_filename)
{
- rename (log_filename, log_backup_filename);
- fd = open (log_filename, O_WRONLY | O_APPEND | O_CREAT, 0600);
+ fd = log_file_open (log_filename, log_mode);
if (fd >= 0)
{
dup2 (fd, STDERR_FILENO);