gdm r6091 - in trunk: . daemon
- From: mccann svn gnome org
- To: svn-commits-list gnome org
- Subject: gdm r6091 - in trunk: . daemon
- Date: Wed, 2 Apr 2008 23:10:52 +0100 (BST)
Author: mccann
Date: Wed Apr 2 23:10:52 2008
New Revision: 6091
URL: http://svn.gnome.org/viewvc/gdm?rev=6091&view=rev
Log:
2008-04-02 William Jon McCann <jmccann redhat com>
* daemon/gdm-welcome-session.c: (spawn_child_setup),
(spawn_command_line_sync_as_user),
(spawn_command_line_async_as_user), (start_dbus_daemon),
(gdm_welcome_session_spawn):
Log greeter output to a file in /var/log/gdm.
Modified:
trunk/ChangeLog
trunk/daemon/gdm-welcome-session.c
Modified: trunk/daemon/gdm-welcome-session.c
==============================================================================
--- trunk/daemon/gdm-welcome-session.c (original)
+++ trunk/daemon/gdm-welcome-session.c Wed Apr 2 23:10:52 2008
@@ -35,6 +35,7 @@
#include <glib.h>
#include <glib/gi18n.h>
+#include <glib/gstdio.h>
#include <glib-object.h>
#define DBUS_API_SUBJECT_TO_CHANGE
#include <dbus/dbus-glib.h>
@@ -378,6 +379,7 @@
typedef struct {
const char *user_name;
const char *group_name;
+ const char *log_file;
} SpawnChildData;
static void
@@ -444,12 +446,26 @@
(guint) getpid (), g_strerror (errno));
_exit (2);
}
+
+ if (data->log_file != NULL) {
+ int logfd;
+
+ 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));
+
+ if (logfd != -1) {
+ VE_IGNORE_EINTR (dup2 (logfd, 1));
+ VE_IGNORE_EINTR (dup2 (logfd, 2));
+ close (logfd);
+ }
+ }
}
static gboolean
spawn_command_line_sync_as_user (const char *command_line,
const char *user_name,
const char *group_name,
+ const char *log_file,
char **env,
char **std_output,
char **std_error,
@@ -474,6 +490,7 @@
data.user_name = user_name;
data.group_name = group_name;
+ data.log_file = log_file;
local_error = NULL;
res = g_spawn_sync (NULL,
@@ -504,6 +521,7 @@
spawn_command_line_async_as_user (const char *command_line,
const char *user_name,
const char *group_name,
+ const char *log_file,
char **env,
GPid *child_pid,
GError **error)
@@ -526,6 +544,7 @@
data.user_name = user_name;
data.group_name = group_name;
+ data.log_file = log_file;
local_error = NULL;
res = g_spawn_async (NULL,
@@ -536,6 +555,7 @@
&data,
child_pid,
&local_error);
+
if (! res) {
g_warning ("Could not spawn command: %s", local_error->message);
g_propagate_error (error, local_error);
@@ -643,6 +663,7 @@
res = spawn_command_line_sync_as_user (DBUS_LAUNCH_COMMAND,
welcome_session->priv->user_name,
welcome_session->priv->group_name,
+ NULL, /* log file */
(char **)env->pdata,
&std_out,
&std_err,
@@ -677,6 +698,8 @@
GPtrArray *env;
gboolean ret;
gboolean res;
+ char *log_path;
+ char *log_file;
ret = FALSE;
@@ -695,9 +718,14 @@
error = NULL;
+ log_file = g_strdup_printf ("%s-greeter.log", welcome_session->priv->x11_display_name);
+ log_path = g_build_filename (LOGDIR, log_file, NULL);
+ g_free (log_file);
+
ret = spawn_command_line_async_as_user (welcome_session->priv->command,
welcome_session->priv->user_name,
welcome_session->priv->group_name,
+ log_path,
(char **)env->pdata,
&welcome_session->priv->pid,
&error);
@@ -705,6 +733,8 @@
g_ptr_array_foreach (env, (GFunc)g_free, NULL);
g_ptr_array_free (env, TRUE);
+ g_free (log_path);
+
if (! ret) {
g_warning ("Could not start command '%s': %s",
welcome_session->priv->command,
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]