summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2008-02-12 15:32:15 -0500
committerWilliam Jon McCann <jmccann@redhat.com>2008-02-12 15:32:15 -0500
commit885708f75f493b85fb67114d112e950b6bfac652 (patch)
tree8838e377fb3521522e825f697aaaef123d02d309
parent40dff5a03c7b085e34a7052efd23651d5be7674f (diff)
guard against writing null string to keyfile
Also make criticals fatal when starting with --debug.
-rw-r--r--src/ck-seat.c6
-rw-r--r--src/ck-session.c47
-rw-r--r--src/main.c5
3 files changed, 48 insertions, 10 deletions
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;