From 885708f75f493b85fb67114d112e950b6bfac652 Mon Sep 17 00:00:00 2001 From: William Jon McCann Date: Tue, 12 Feb 2008 15:32:15 -0500 Subject: guard against writing null string to keyfile Also make criticals fatal when starting with --debug. --- src/ck-seat.c | 6 +++++- src/ck-session.c | 47 ++++++++++++++++++++++++++++++++++++++--------- src/main.c | 5 +++++ 3 files changed, 48 insertions(+), 10 deletions(-) (limited to 'src') diff --git a/src/ck-seat.c b/src/ck-seat.c index 91ef733..bc39010 100644 --- a/src/ck-seat.c +++ b/src/ck-seat.c @@ -49,6 +49,7 @@ #define CK_DBUS_PATH "/org/freedesktop/ConsoleKit" #define CK_DBUS_NAME "org.freedesktop.ConsoleKit" +#define NONULL_STRING(x) ((x) != NULL ? (x) : "") struct CkSeatPrivate { @@ -1201,7 +1202,10 @@ ck_seat_dump (CkSeat *seat, error->message); g_error_free (error); } else { - g_key_file_set_string (key_file, group_name, "active_session", session_id); + g_key_file_set_string (key_file, + group_name, + "active_session", + NONULL_STRING (session_id)); g_free (session_id); } } diff --git a/src/ck-session.c b/src/ck-session.c index b950184..d9e32be 100644 --- a/src/ck-session.c +++ b/src/ck-session.c @@ -47,6 +47,8 @@ #define CK_DBUS_PATH "/org/freedesktop/ConsoleKit" #define CK_DBUS_NAME "org.freedesktop.ConsoleKit" +#define NONULL_STRING(x) ((x) != NULL ? (x) : "") + #define IDLE_TIME_SECS 60 struct CkSessionPrivate @@ -1256,29 +1258,56 @@ ck_session_dump (CkSession *session, group_name = g_strdup_printf ("Session %s", session->priv->id); g_key_file_set_integer (key_file, group_name, "uid", session->priv->uid); - g_key_file_set_string (key_file, group_name, "seat", session->priv->seat_id); - g_key_file_set_string (key_file, group_name, "cookie", session->priv->cookie); + g_key_file_set_string (key_file, + group_name, + "seat", + NONULL_STRING (session->priv->seat_id)); + g_key_file_set_string (key_file, + group_name, + "cookie", + NONULL_STRING (session->priv->cookie)); if (session->priv->session_type != NULL) { - g_key_file_set_string (key_file, group_name, "type", session->priv->session_type); + g_key_file_set_string (key_file, + group_name, + "type", + NONULL_STRING (session->priv->session_type)); } if (session->priv->display_device != NULL && strlen (session->priv->display_device) > 0) { - g_key_file_set_string (key_file, group_name, "display_device", session->priv->display_device); + g_key_file_set_string (key_file, + group_name, + "display_device", + NONULL_STRING (session->priv->display_device)); } if (session->priv->x11_display_device != NULL && strlen (session->priv->x11_display_device) > 0) { - g_key_file_set_string (key_file, group_name, "x11_display_device", session->priv->x11_display_device); + g_key_file_set_string (key_file, + group_name, + "x11_display_device", + NONULL_STRING (session->priv->x11_display_device)); } if (session->priv->x11_display != NULL && strlen (session->priv->x11_display) > 0) { - g_key_file_set_string (key_file, group_name, "x11_display", session->priv->x11_display); + g_key_file_set_string (key_file, + group_name, + "x11_display", + NONULL_STRING (session->priv->x11_display)); } if (session->priv->remote_host_name != NULL && strlen (session->priv->remote_host_name) > 0) { - g_key_file_set_string (key_file, group_name, "remote_host_name", session->priv->remote_host_name); + g_key_file_set_string (key_file, + group_name, + "remote_host_name", + NONULL_STRING (session->priv->remote_host_name)); } - g_key_file_set_string (key_file, group_name, "remote_host_name", session->priv->remote_host_name); + g_key_file_set_string (key_file, + group_name, + "remote_host_name", + NONULL_STRING (session->priv->remote_host_name)); g_key_file_set_boolean (key_file, group_name, "is_active", session->priv->active); g_key_file_set_boolean (key_file, group_name, "is_local", session->priv->is_local); s = g_time_val_to_iso8601 (&(session->priv->creation_time)); - g_key_file_set_string (key_file, group_name, "creation_time", s); + g_key_file_set_string (key_file, + group_name, + "creation_time", + NONULL_STRING (s)); g_free (s); g_free (group_name); diff --git a/src/main.c b/src/main.c index e27b200..50698ed 100644 --- a/src/main.c +++ b/src/main.c @@ -290,6 +290,11 @@ main (int argc, exit (1); } + if (debug) { + g_setenv ("G_DEBUG", "fatal_criticals", FALSE); + g_log_set_always_fatal (G_LOG_LEVEL_CRITICAL); + } + context = g_option_context_new (_("Console kit daemon")); g_option_context_add_main_entries (context, entries, NULL); error = NULL; -- cgit