diff options
author | David Zeuthen <davidz@redhat.com> | 2007-10-10 13:39:15 -0400 |
---|---|---|
committer | William Jon McCann <mccann@jhu.edu> | 2007-10-10 13:39:15 -0400 |
commit | b2be103bd606291319dc312f07d1f3fcbfdf634c (patch) | |
tree | 54e295f2e273b6d2a6451ac5eec537d762d1d814 /src/ck-session.c | |
parent | bd43c78b3ab2ec7f85b17cca46d4b46f8671cd29 (diff) |
maintain a file with the dump of the local database
This feature is useful for programs wanting to read the database
without going through the D-Bus interface. This is sometimes desirable
when both performance and runtime dependencies are important.
For security reasons the file is only readable for the super user.
Diffstat (limited to 'src/ck-session.c')
-rw-r--r-- | src/ck-session.c | 38 |
1 files changed, 38 insertions, 0 deletions
diff --git a/src/ck-session.c b/src/ck-session.c index 6f16720..a700786 100644 --- a/src/ck-session.c +++ b/src/ck-session.c @@ -1245,3 +1245,41 @@ ck_session_run_programs (CkSession *session, g_free (extra_env[n]); } } + +void +ck_session_dump (CkSession *session, + GKeyFile *key_file) +{ + char *s; + char *group_name; + + 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); + if (session->priv->session_type != NULL) { + g_key_file_set_string (key_file, group_name, "type", 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); + } + 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); + } + 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); + } + 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", 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_free (s); + + g_free (group_name); +} + |