summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWilliam Jon McCann <jmccann@redhat.com>2008-02-12 22:30:05 -0500
committerWilliam Jon McCann <jmccann@redhat.com>2008-02-12 22:30:05 -0500
commit5ab3eee820e97d632aa9401cbd2d25dc828ee1f0 (patch)
treeca006a7e0d50871d01cc8a47ad48974ab6c41e91
parent885708f75f493b85fb67114d112e950b6bfac652 (diff)
ck_seat_get_active_session shouldn't return a null ssid
Da bus no likey nulls for object paths. Return false and set error if there is no active session.
-rw-r--r--src/ck-manager.c31
-rw-r--r--src/ck-seat.c26
-rwxr-xr-xsrc/test-method-access-policy2
3 files changed, 35 insertions, 24 deletions
diff --git a/src/ck-manager.c b/src/ck-manager.c
index 9d9c786..6775e20 100644
--- a/src/ck-manager.c
+++ b/src/ck-manager.c
@@ -1880,6 +1880,8 @@ create_session_for_sender (CkManager *manager,
char *ssid;
CkSessionLeader *leader;
+ g_debug ("CkManager: create session for sender: %s", sender);
+
res = get_caller_info (manager,
sender,
&uid,
@@ -1952,6 +1954,8 @@ ck_manager_get_session_for_cookie (CkManager *manager,
ssid = NULL;
+ g_debug ("CkManager: get session for cookie");
+
sender = dbus_g_method_get_sender (context);
res = get_caller_info (manager,
@@ -2038,12 +2042,12 @@ ck_manager_get_session_for_unix_process (CkManager *manager,
char *sender;
uid_t calling_uid;
pid_t calling_pid;
- CkProcessStat *stat;
char *cookie;
- GError *error;
sender = dbus_g_method_get_sender (context);
+ g_debug ("CkManager: get session for unix process: %u", pid);
+
res = get_caller_info (manager,
sender,
&calling_uid,
@@ -2060,27 +2064,12 @@ ck_manager_get_session_for_unix_process (CkManager *manager,
return FALSE;
}
- error = NULL;
- res = ck_process_stat_new_for_unix_pid (calling_pid, &stat, &error);
- if (! res) {
- GError *error;
- g_debug ("stat on pid %d failed", calling_pid);
- error = g_error_new (CK_MANAGER_ERROR,
- CK_MANAGER_ERROR_GENERAL,
- _("Unable to lookup information about calling process '%d'"),
- calling_pid);
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return FALSE;
- }
-
- /* FIXME: check stuff? */
-
- ck_process_stat_free (stat);
-
cookie = get_cookie_for_pid (manager, pid);
if (cookie == NULL) {
GError *error;
+
+ g_debug ("CkManager: unable to lookup session for unix process: %u", pid);
+
error = g_error_new (CK_MANAGER_ERROR,
CK_MANAGER_ERROR_GENERAL,
_("Unable to lookup session information for process '%d'"),
@@ -2114,6 +2103,8 @@ ck_manager_get_current_session (CkManager *manager,
sender = dbus_g_method_get_sender (context);
+ g_debug ("CkManager: get current session");
+
res = get_caller_info (manager,
sender,
&calling_uid,
diff --git a/src/ck-seat.c b/src/ck-seat.c
index bc39010..8d93693 100644
--- a/src/ck-seat.c
+++ b/src/ck-seat.c
@@ -124,17 +124,37 @@ ck_seat_get_active_session (CkSeat *seat,
char **ssid,
GError **error)
{
+ gboolean ret;
+ char *session_id;
+
g_return_val_if_fail (CK_IS_SEAT (seat), FALSE);
+ g_debug ("CkSeat: get active session");
+ session_id = NULL;
+ ret = FALSE;
if (seat->priv->active_session != NULL) {
- ck_session_get_id (seat->priv->active_session, ssid, NULL);
+ gboolean res;
+ res = ck_session_get_id (seat->priv->active_session, &session_id, NULL);
+ if (res) {
+ ret = TRUE;
+ }
+ } else {
+ g_debug ("CkSeat: seat has no active session");
+ }
+
+ if (! ret) {
+ g_set_error (error,
+ CK_SEAT_ERROR,
+ CK_SEAT_ERROR_GENERAL,
+ "%s", "Seat has no active session");
} else {
if (ssid != NULL) {
- *ssid = NULL;
+ *ssid = g_strdup (session_id);
}
}
- return TRUE;
+ g_free (session_id);
+ return ret;
}
typedef struct
diff --git a/src/test-method-access-policy b/src/test-method-access-policy
index f9ea8e2..a950fc8 100755
--- a/src/test-method-access-policy
+++ b/src/test-method-access-policy
@@ -4,6 +4,7 @@
#
import os
+import sys
import gobject
import dbus
import dbus.glib
@@ -167,7 +168,6 @@ except:
pass
print "\t%s" % res
-
# Test Seat Interface
seat_obj = bus.get_object ('org.freedesktop.ConsoleKit', '/org/freedesktop/ConsoleKit/Seat1')