summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Koegel <eric.koegel@gmail.com>2015-03-09 08:25:42 +0300
committerEric Koegel <eric.koegel@gmail.com>2015-04-13 11:39:37 +0300
commitf6a7ccad79f5fa55ed89b7ebdfe49b1888a9aa68 (patch)
treec5978e9827d262f2db2dab0ff5e5fce6563ee67b
parent759882633b07ac8f5191cf70361bb0a6f03f6678 (diff)
downloadConsoleKit2-f6a7ccad79f5fa55ed89b7ebdfe49b1888a9aa68.tar.gz
CKSession: Port to GDBus
Port CKSession to GDBus using gdbus-codegen. The generated ConsoleKitSession object properties are used where possible. A test-session binary is generated to test some of the CkSession properties/DBUS calls. CKSession expects to be passed a GDBusConnection in ck_session_new but this doesn't happen because CKManager hasn't been ported yet. https://github.com/ConsoleKit2/ConsoleKit2/issues/8
-rw-r--r--.gitignore9
-rw-r--r--configure.ac2
-rw-r--r--src/Makefile.am39
-rw-r--r--src/ck-manager.c42
-rw-r--r--src/ck-seat.c75
-rw-r--r--src/ck-session.c849
-rw-r--r--src/ck-session.h87
-rw-r--r--src/test-session.c354
8 files changed, 728 insertions, 729 deletions
diff --git a/.gitignore b/.gitignore
index b694a37..774aacd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -53,3 +53,12 @@ autotools/*
cov-int/*
data/consolekit.logrotate
data/90-consolekit
+src/ck-manager-generated.c
+src/ck-manager-generated.h
+src/ck-seat-generated.c
+src/ck-seat-generated.h
+src/ck-session-generated.c
+src/ck-session-generated.h
+src/test-session
+tools/pam-foreground-compat.ck
+tools/70-udev-acl.rules
diff --git a/configure.ac b/configure.ac
index 53ed5f4..c2bb93a 100644
--- a/configure.ac
+++ b/configure.ac
@@ -30,7 +30,6 @@ AM_PROG_CC_C_O
AC_HEADER_STDC
AC_DISABLE_STATIC
LT_INIT
-AC_CHECK_HEADER_STDBOOL
AC_HEADER_STDC
AC_FUNC_FORK
AC_FUNC_MALLOC
@@ -80,6 +79,7 @@ PKG_CHECK_MODULES(CONSOLE_KIT,
dbus-glib-1 >= $DBUS_REQUIRED_VERSION
gobject-2.0 >= $GLIB_REQUIRED_VERSION
gthread-2.0 >= $GLIB_REQUIRED_VERSION
+ gio-unix-2.0 >= $GLIB_REQUIRED_VERSION
)
PKG_CHECK_MODULES([XLIB], [x11])
diff --git a/src/Makefile.am b/src/Makefile.am
index e4c5eb1..87b6df4 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -87,7 +87,8 @@ sbin_PROGRAMS = \
BUILT_SOURCES = \
ck-manager-glue.h \
ck-seat-glue.h \
- ck-session-glue.h \
+ ck-session-generated.h \
+ ck-session-generated.c \
ck-marshal.c \
ck-marshal.h \
$(NULL)
@@ -103,8 +104,13 @@ ck-manager-glue.h: org.freedesktop.ConsoleKit.Manager.xml Makefile.am
dbus-binding-tool --prefix=ck_manager --mode=glib-server --output=ck-manager-glue.h org.freedesktop.ConsoleKit.Manager.xml
ck-seat-glue.h: org.freedesktop.ConsoleKit.Seat.xml Makefile.am
dbus-binding-tool --prefix=ck_seat --mode=glib-server --output=ck-seat-glue.h org.freedesktop.ConsoleKit.Seat.xml
-ck-session-glue.h: org.freedesktop.ConsoleKit.Session.xml Makefile.am
- dbus-binding-tool --prefix=ck_session --mode=glib-server --output=ck-session-glue.h org.freedesktop.ConsoleKit.Session.xml
+
+ck-session-generated.c ck-session-generated.h : org.freedesktop.ConsoleKit.Session.xml Makefile.am
+ gdbus-codegen \
+ --c-namespace=ConsoleKit \
+ --interface-prefix=org.freedesktop.ConsoleKit. \
+ --generate-c-code=ck-session-generated \
+ $(srcdir)/org.freedesktop.ConsoleKit.Session.xml
ck-marshal.c: ck-marshal.list
echo "#include \"ck-marshal.h\"" > $@ && \
@@ -169,6 +175,7 @@ noinst_PROGRAMS = \
test-tty-idle-monitor \
test-vt-monitor \
test-inhibit \
+ test-session \
$(NULL)
test_event_logger_SOURCES = \
@@ -232,6 +239,31 @@ test_inhibit_LDADD = \
libck.la \
$(NULL)
+test_session_CFLAGS = \
+ $(AM_CFLAGS) \
+ -URUNDIR \
+ -DRUNDIR=\"/tmp\" \
+ $(NULL)
+
+test_session_SOURCES = \
+ $(BUILT_SOURCES) \
+ ck-run-programs.c \
+ ck-run-programs.h \
+ ck-file-monitor.h \
+ ck-file-monitor-dummy.c \
+ ck-tty-idle-monitor.h \
+ ck-tty-idle-monitor.c \
+ ck-session.c \
+ ck-session.h \
+ test-session.c \
+ $(NULL)
+
+test_session_LDADD = \
+ $(CONSOLE_KIT_LIBS) \
+ $(POLKIT_LIBS) \
+ libck.la \
+ $(NULL)
+
EXTRA_DIST = \
ck-marshal.list \
@@ -239,6 +271,7 @@ EXTRA_DIST = \
valgrind.sh \
test-open-session \
test-open-session-with-parameters \
+ test-session \
$(NULL)
CLEANFILES = $(BUILT_SOURCES)
diff --git a/src/ck-manager.c b/src/ck-manager.c
index 4d3cd6c..049f06f 100644
--- a/src/ck-manager.c
+++ b/src/ck-manager.c
@@ -51,6 +51,7 @@
#include "ck-seat.h"
#include "ck-session-leader.h"
#include "ck-session.h"
+#include "ck-session-generated.h"
#include "ck-marshal.h"
#include "ck-event-logger.h"
#include "ck-inhibit-manager.h"
@@ -2125,12 +2126,13 @@ find_seat_for_session (CkManager *manager,
CkSession *session)
{
CkSeat *seat;
+ ConsoleKitSession *cksession;
gboolean is_static_x11;
gboolean is_static_text;
- char *display_device;
- char *x11_display_device;
- char *x11_display;
- char *remote_host_name;
+ const char *display_device;
+ const char *x11_display_device;
+ const char *x11_display;
+ const char *remote_host_name;
gboolean is_local;
is_static_text = FALSE;
@@ -2142,13 +2144,14 @@ find_seat_for_session (CkManager *manager,
x11_display = NULL;
remote_host_name = NULL;
is_local = FALSE;
+ cksession = CONSOLE_KIT_SESSION (session);
/* FIXME: use matching to group entries? */
- ck_session_get_display_device (session, &display_device, NULL);
- ck_session_get_x11_display_device (session, &x11_display_device, NULL);
- ck_session_get_x11_display (session, &x11_display, NULL);
- ck_session_get_remote_host_name (session, &remote_host_name, NULL);
+ display_device = console_kit_session_get_display_device (cksession);
+ x11_display_device = console_kit_session_get_x11_display_device (cksession);
+ x11_display = console_kit_session_get_x11_display (cksession);
+ remote_host_name = console_kit_session_get_remote_host_name (cksession);
ck_session_is_local (session, &is_local, NULL);
if (IS_STR_SET (x11_display)
@@ -2171,11 +2174,6 @@ find_seat_for_session (CkManager *manager,
g_free (sid);
}
- g_free (display_device);
- g_free (x11_display_device);
- g_free (x11_display);
- g_free (remote_host_name);
-
return seat;
}
@@ -2207,14 +2205,8 @@ is_session_busy (char *id,
CkSession *session,
gpointer data)
{
- gboolean idle_hint;
-
- idle_hint = FALSE;
-
- ck_session_get_idle_hint (session, &idle_hint, NULL);
-
/* return TRUE to stop search */
- return !idle_hint;
+ return !console_kit_session_get_idle_hint (CONSOLE_KIT_SESSION (session));
}
static void
@@ -2323,7 +2315,8 @@ open_session_for_leader (CkManager *manager,
session = ck_session_new_with_parameters (ssid,
cookie,
- parameters);
+ parameters,
+ NULL);
if (session == NULL) {
GError *error;
@@ -3246,12 +3239,9 @@ get_sessions_for_unix_user_iter (char *id,
CkSession *session,
GetSessionsData *data)
{
- guint uid;
- gboolean res;
-
- res = ck_session_get_unix_user (session, &uid, NULL);
+ guint uid = console_kit_session_get_unix_user (CONSOLE_KIT_SESSION (session));
- if (res && uid == data->uid) {
+ if (uid == data->uid) {
g_ptr_array_add (data->sessions, g_strdup (id));
}
}
diff --git a/src/ck-seat.c b/src/ck-seat.c
index 6e6800f..229c743 100644
--- a/src/ck-seat.c
+++ b/src/ck-seat.c
@@ -195,7 +195,7 @@ _seat_activate_session (CkSeat *seat,
gboolean res;
gboolean ret;
guint num;
- char *device;
+ const char *device;
ActivateData *adata;
GError *vt_error;
@@ -225,9 +225,9 @@ _seat_activate_session (CkSeat *seat,
}
device = NULL;
- ck_session_get_x11_display_device (session, &device, NULL);
+ device = console_kit_session_get_x11_display_device (CONSOLE_KIT_SESSION (session));
if (device == NULL) {
- ck_session_get_display_device (session, &device, NULL);
+ device = console_kit_session_get_display_device (CONSOLE_KIT_SESSION (session));
}
res = ck_get_console_num_from_device (device, &num);
if (! res) {
@@ -265,7 +265,6 @@ _seat_activate_session (CkSeat *seat,
}
out:
- g_free (device);
return ret;
}
@@ -307,8 +306,8 @@ match_session_display_device (const char *key,
CkSession *session,
const char *display_device)
{
- char *device;
- gboolean ret;
+ const char *device;
+ gboolean ret;
device = NULL;
ret = FALSE;
@@ -317,7 +316,7 @@ match_session_display_device (const char *key,
goto out;
}
- ck_session_get_display_device (session, &device, NULL);
+ device = console_kit_session_get_display_device (CONSOLE_KIT_SESSION (session));
if (device != NULL
&& display_device != NULL
@@ -327,8 +326,6 @@ match_session_display_device (const char *key,
}
out:
- g_free (device);
-
return ret;
}
@@ -337,8 +334,8 @@ match_session_x11_display_device (const char *key,
CkSession *session,
const char *x11_display_device)
{
- char *device;
- gboolean ret;
+ const char *device;
+ gboolean ret;
device = NULL;
ret = FALSE;
@@ -347,7 +344,7 @@ match_session_x11_display_device (const char *key,
goto out;
}
- ck_session_get_x11_display_device (session, &device, NULL);
+ device = console_kit_session_get_x11_display_device (CONSOLE_KIT_SESSION (session));
if (device != NULL
&& x11_display_device != NULL
@@ -357,8 +354,6 @@ match_session_x11_display_device (const char *key,
}
out:
- g_free (device);
-
return ret;
}
@@ -492,7 +487,7 @@ change_active_session (CkSeat *seat,
old_session = seat->priv->active_session;
if (old_session != NULL) {
- ck_session_set_active (old_session, FALSE, NULL);
+ console_kit_session_set_active (CONSOLE_KIT_SESSION (old_session), FALSE);
}
seat->priv->active_session = session;
@@ -501,7 +496,7 @@ change_active_session (CkSeat *seat,
if (session != NULL) {
g_object_ref (session);
ck_session_get_id (session, &ssid, NULL);
- ck_session_set_active (session, TRUE, NULL);
+ console_kit_session_set_active (CONSOLE_KIT_SESSION (session), TRUE);
}
g_debug ("Active session changed: %s", ssid ? ssid : "(null)");
@@ -1192,53 +1187,51 @@ env_add_session_info (CkSession *session,
char **extra_env,
int *n)
{
- char *s;
- gboolean b;
- guint u;
+ ConsoleKitSession *cksession;
+ const char *s;
+ char *c;
+ gboolean b;
+ guint u;
if (session == NULL) {
return;
}
- s = NULL;
- if (ck_session_get_id (session, &s, NULL) && s != NULL && *s != '\0') {
- extra_env[(*n)++] = g_strdup_printf ("%sID=%s", prefix, s);
+ cksession = CONSOLE_KIT_SESSION (session);
+
+ c = NULL;
+ if (ck_session_get_id (session, &c, NULL) && c != NULL && *c != '\0') {
+ extra_env[(*n)++] = g_strdup_printf ("%sID=%s", prefix, c);
}
- g_free (s);
+ g_free (c);
- s = NULL;
- if (ck_session_get_session_type (session, &s, NULL) && s != NULL && *s != '\0') {
+ s = console_kit_session_get_session_type (cksession);
+ if (s != NULL && *s != '\0') {
extra_env[(*n)++] = g_strdup_printf ("%sTYPE=%s", prefix, s);
}
- g_free (s);
- if (ck_session_get_unix_user (session, &u, NULL)) {
- extra_env[(*n)++] = g_strdup_printf ("%sUSER_UID=%u", prefix, u);
- }
+ u = console_kit_session_get_unix_user (cksession);
+ extra_env[(*n)++] = g_strdup_printf ("%sUSER_UID=%u", prefix, u);
- s = NULL;
- if (ck_session_get_display_device (session, &s, NULL) && s != NULL && *s != '\0') {
+ s = console_kit_session_get_display_device (cksession);
+ if (s != NULL && *s != '\0') {
extra_env[(*n)++] = g_strdup_printf ("%sDISPLAY_DEVICE=%s", prefix, s);
}
- g_free (s);
- s = NULL;
- if (ck_session_get_x11_display_device (session, &s, NULL) && s != NULL && *s != '\0') {
+ s = console_kit_session_get_x11_display_device (cksession);
+ if (s != NULL && *s != '\0') {
extra_env[(*n)++] = g_strdup_printf ("%sX11_DISPLAY_DEVICE=%s", prefix, s);
}
- g_free (s);
- s = NULL;
- if (ck_session_get_x11_display (session, &s, NULL) && s != NULL && *s != '\0') {
+ s = console_kit_session_get_x11_display (cksession);
+ if (s != NULL && *s != '\0') {
extra_env[(*n)++] = g_strdup_printf ("%sX11_DISPLAY=%s", prefix, s);
}
- g_free (s);
- s = NULL;
- if (ck_session_get_remote_host_name (session, &s, NULL) && s != NULL && *s != '\0') {
+ s = console_kit_session_get_remote_host_name (cksession);
+ if (s != NULL && *s != '\0') {
extra_env[(*n)++] = g_strdup_printf ("%sREMOTE_HOST_NAME=%s", prefix, s);
}
- g_free (s);
if (ck_session_is_local (session, &b, NULL)) {
extra_env[(*n)++] = g_strdup_printf ("%sIS_LOCAL=%s", prefix, b ? "true" : "false");
diff --git a/src/ck-session.c b/src/ck-session.c
index f84a73b..cf98d50 100644
--- a/src/ck-session.c
+++ b/src/ck-session.c
@@ -31,20 +31,16 @@
#include <glib.h>
#include <glib/gi18n.h>
#include <glib/gstdio.h>
-#include <glib-object.h>
-#include <dbus/dbus-glib.h>
-#include <dbus/dbus-glib-lowlevel.h>
+#include <gio/gio.h>
#include "ck-tty-idle-monitor.h"
#include "ck-session.h"
-#include "ck-session-glue.h"
#include "ck-marshal.h"
#include "ck-run-programs.h"
#define CK_SESSION_GET_PRIVATE(o) (G_TYPE_INSTANCE_GET_PRIVATE ((o), CK_TYPE_SESSION, CkSessionPrivate))
-#define CK_DBUS_PATH "/org/freedesktop/ConsoleKit"
-#define CK_DBUS_NAME "org.freedesktop.ConsoleKit"
+#define CK_SESSION_DBUS_NAME "org.freedesktop.ConsoleKit.Session"
#define NONULL_STRING(x) ((x) != NULL ? (x) : "")
@@ -56,127 +52,150 @@ struct CkSessionPrivate
char *cookie;
char *seat_id;
- char *session_type;
char *login_session_id;
- char *display_device;
- char *x11_display_device;
- char *x11_display;
- char *remote_host_name;
guint uid;
- gboolean active;
- gboolean is_local;
-
GTimeVal creation_time;
CkTtyIdleMonitor *idle_monitor;
- gboolean idle_hint;
GTimeVal idle_since_hint;
- DBusGConnection *connection;
- DBusGProxy *bus_proxy;
-};
-
-enum {
- ACTIVATE,
- LOCK,
- UNLOCK,
- ACTIVE_CHANGED,
- IDLE_HINT_CHANGED,
- LAST_SIGNAL
+ GDBusConnection *connection;
+ GDBusProxy *bus_proxy;
};
+/* Private properties not exported over D-BUS */
enum {
PROP_0,
PROP_ID,
PROP_COOKIE,
- PROP_USER,
- PROP_UNIX_USER,
- PROP_X11_DISPLAY,
- PROP_X11_DISPLAY_DEVICE,
- PROP_DISPLAY_DEVICE,
- PROP_SESSION_TYPE,
- PROP_REMOTE_HOST_NAME,
PROP_LOGIN_SESSION_ID,
- PROP_IS_LOCAL,
- PROP_ACTIVE,
- PROP_IDLE_HINT,
};
-static guint signals [LAST_SIGNAL] = { 0, };
-static void ck_session_class_init (CkSessionClass *klass);
-static void ck_session_init (CkSession *session);
-static void ck_session_finalize (GObject *object);
+static void ck_session_class_init (CkSessionClass *klass);
+static void ck_session_init (CkSession *session);
+static void ck_session_iface_init (ConsoleKitSessionIface *iface);
+static void ck_session_finalize (GObject *object);
+
-G_DEFINE_TYPE (CkSession, ck_session, G_TYPE_OBJECT)
+G_DEFINE_TYPE_WITH_CODE (CkSession, ck_session, CONSOLE_KIT_TYPE_SESSION_SKELETON, G_IMPLEMENT_INTERFACE (CONSOLE_KIT_TYPE_SESSION, ck_session_iface_init));
+
+static const GDBusErrorEntry ck_session_error_entries[] =
+{
+ { CK_SESSION_ERROR_FAILED, CK_SESSION_DBUS_NAME ".Error.Failed" },
+ { CK_SESSION_ERROR_GENERAL, CK_SESSION_DBUS_NAME ".Error.General" },
+ { CK_SESSION_ERROR_INSUFFICIENT_PERMISSION, CK_SESSION_DBUS_NAME ".Error.InsufficientPermission" },
+ { CK_SESSION_ERROR_NOT_SUPPORTED, CK_SESSION_DBUS_NAME ".Error.NotSupported" }
+};
GQuark
ck_session_error_quark (void)
{
- static GQuark ret = 0;
- if (ret == 0) {
- ret = g_quark_from_static_string ("ck_session_error");
- }
+ static volatile gsize quark_volatile = 0;
- return ret;
+ g_dbus_error_register_error_domain ("ck_session_error",
+ &quark_volatile,
+ ck_session_error_entries,
+ G_N_ELEMENTS (ck_session_error_entries));
+
+ return (GQuark) quark_volatile;
}
+#define ENUM_ENTRY(NAME, DESC) { NAME, "" #NAME "", DESC }
-static gboolean
-register_session (CkSession *session)
+GType
+ck_session_error_get_type (void)
{
- GError *error = NULL;
+ static GType etype = 0;
- error = NULL;
- session->priv->connection = dbus_g_bus_get (DBUS_BUS_SYSTEM, &error);
- if (session->priv->connection == NULL) {
- if (error != NULL) {
- g_critical ("error getting system bus: %s", error->message);
- g_error_free (error);
- }
- return FALSE;
- }
+ if (etype == 0)
+ {
+ static const GEnumValue values[] =
+ {
+ ENUM_ENTRY (CK_SESSION_ERROR_FAILED, "Failed"),
+ ENUM_ENTRY (CK_SESSION_ERROR_GENERAL, "General"),
+ ENUM_ENTRY (CK_SESSION_ERROR_INSUFFICIENT_PERMISSION, "InsufficientPermission"),
+ ENUM_ENTRY (CK_SESSION_ERROR_NOT_SUPPORTED, "NotSupported"),
+ { 0, 0, 0 }
+ };
+ g_assert (NUM_ERRORS == G_N_ELEMENTS (values) - 1);
+ etype = g_enum_register_static ("Error", values);
+ }
+ return etype;
+}
- session->priv->bus_proxy = dbus_g_proxy_new_for_name (session->priv->connection,
- DBUS_SERVICE_DBUS,
- DBUS_PATH_DBUS,
- DBUS_INTERFACE_DBUS);
+static void
+throw_error (GDBusMethodInvocation *context,
+ gint error_code,
+ const gchar *format,
+ ...)
+{
+ va_list args;
+ gchar *message;
- dbus_g_connection_register_g_object (session->priv->connection, session->priv->id, G_OBJECT (session));
+ va_start (args, format);
+ message = g_strdup_vprintf (format, args);
+ va_end (args);
- return TRUE;
+ g_dbus_method_invocation_return_error (context, CK_SESSION_ERROR, error_code, "%s", message);
+
+ g_free (message);
}
-/*
- lock and unlock are separate functions because:
- 1. we don't maintain state for locked
- 2. so security policy can be handled separately
-*/
-gboolean
-ck_session_lock (CkSession *session,
- DBusGMethodInvocation *context)
+static gboolean
+register_session (CkSession *session, GDBusConnection *connection)
{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
+ GError *error = NULL;
- g_debug ("Emitting lock for session %s", session->priv->id);
- g_signal_emit (session, signals [LOCK], 0);
+ g_debug ("register session");
- dbus_g_method_return (context);
+ error = NULL;
- return TRUE;
-}
+ if (connection == NULL) {
+ session->priv->connection = g_bus_get_sync (G_BUS_TYPE_SYSTEM, NULL, &error);
+ } else {
+ session->priv->connection = connection;
+ }
-gboolean
-ck_session_unlock (CkSession *session,
- DBusGMethodInvocation *context)
-{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- g_debug ("Emitting unlock for session %s", session->priv->id);
- g_signal_emit (session, signals [UNLOCK], 0);
+ if (session->priv->connection == NULL) {
+ if (error != NULL) {
+ g_critical ("error getting system bus: %s", error->message);
+ g_error_free (error);
+ }
+ return FALSE;
+ }
+
+ g_debug ("exporting path %s", session->priv->id);
- dbus_g_method_return (context);
+ if (!g_dbus_interface_skeleton_export (G_DBUS_INTERFACE_SKELETON (CONSOLE_KIT_SESSION (session)),
+ session->priv->connection,
+ session->priv->id,
+ &error)) {
+ if (error != NULL) {
+ g_critical ("error exporting interface: %s", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+ }
+
+ g_debug ("exported on %s", g_dbus_interface_skeleton_get_object_path (G_DBUS_INTERFACE_SKELETON (CONSOLE_KIT_SESSION (session))));
+
+ /* connect to DBus for get_caller_info */
+ session->priv->bus_proxy = g_dbus_proxy_new_sync (session->priv->connection,
+ G_DBUS_PROXY_FLAGS_DO_NOT_LOAD_PROPERTIES |
+ G_DBUS_PROXY_FLAGS_DO_NOT_CONNECT_SIGNALS,
+ NULL,
+ "org.freedesktop.DBus",
+ "/org/freedesktop/DBus/Bus",
+ "org.freedesktop.DBus",
+ NULL,
+ &error);
+ if (session->priv->bus_proxy == NULL) {
+ g_warning ("cannot connect to DBus: %s", error->message);
+ g_error_free (error);
+ }
return TRUE;
}
@@ -188,34 +207,41 @@ get_caller_info (CkSession *session,
uid_t *calling_uid,
pid_t *calling_pid)
{
- gboolean res;
- GError *error = NULL;
-
- res = FALSE;
+ gboolean res = FALSE;
+ GVariant *value = NULL;
+ GError *error = NULL;
if (sender == NULL) {
goto out;
}
- if (! dbus_g_proxy_call (session->priv->bus_proxy, "GetConnectionUnixUser", &error,
- G_TYPE_STRING, sender,
- G_TYPE_INVALID,
- G_TYPE_UINT, calling_uid,
- G_TYPE_INVALID)) {
+ value = g_dbus_proxy_call_sync (session->priv->bus_proxy, "GetConnectionUnixUser",
+ g_variant_new ("(s)", sender),
+ G_DBUS_CALL_FLAGS_NONE,
+ 2000,
+ NULL,
+ &error);
+
+ if (value == NULL) {
g_warning ("GetConnectionUnixUser() failed: %s", error->message);
g_error_free (error);
goto out;
}
+ g_variant_get (value, "(u)", &calling_uid);
+
+ value = g_dbus_proxy_call_sync (session->priv->bus_proxy, "GetConnectionUnixProcessID",
+ g_variant_new ("(s)", sender),
+ G_DBUS_CALL_FLAGS_NONE,
+ 2000,
+ NULL,
+ &error);
- if (! dbus_g_proxy_call (session->priv->bus_proxy, "GetConnectionUnixProcessID", &error,
- G_TYPE_STRING, sender,
- G_TYPE_INVALID,
- G_TYPE_UINT, calling_pid,
- G_TYPE_INVALID)) {
+ if (value == NULL) {
g_warning ("GetConnectionUnixProcessID() failed: %s", error->message);
g_error_free (error);
goto out;
}
+ g_variant_get (value, "(u)", &calling_pid);
res = TRUE;
@@ -230,15 +256,16 @@ static gboolean
session_set_idle_hint_internal (CkSession *session,
gboolean idle_hint)
{
- if (session->priv->idle_hint != idle_hint) {
- session->priv->idle_hint = idle_hint;
- g_object_notify (G_OBJECT (session), "idle-hint");
+ ConsoleKitSession *cksession = CONSOLE_KIT_SESSION (session);
+
+ if (console_kit_session_get_idle_hint (cksession) != idle_hint) {
+ console_kit_session_set_idle_hint (cksession, idle_hint);
/* FIXME: can we get a time from the dbus message? */
g_get_current_time (&session->priv->idle_since_hint);
g_debug ("Emitting idle-changed for session %s", session->priv->id);
- g_signal_emit (session, signals [IDLE_HINT_CHANGED], 0, idle_hint);
+ console_kit_session_emit_idle_hint_changed (cksession, idle_hint);
}
return TRUE;
@@ -251,141 +278,43 @@ session_set_idle_hint_internal (CkSession *session,
/org/freedesktop/ConsoleKit/Session1 \
org.freedesktop.ConsoleKit.Session.SetIdleHint boolean:TRUE
*/
-gboolean
-ck_session_set_idle_hint (CkSession *session,
- gboolean idle_hint,
- DBusGMethodInvocation *context)
+static gboolean
+dbus_set_idle_hint (ConsoleKitSession *cksession,
+ GDBusMethodInvocation *context,
+ gboolean idle_hint)
{
- char *sender;
+ const char *sender;
uid_t calling_uid;
pid_t calling_pid;
gboolean res;
+ CkSession *session;
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
+ g_return_val_if_fail (CK_IS_SESSION (cksession), FALSE);
+
+ session = CK_SESSION(cksession);
- sender = dbus_g_method_get_sender (context);
+ sender = g_dbus_method_invocation_get_sender (context);
res = get_caller_info (session,
sender,
&calling_uid,
&calling_pid);
- g_free (sender);
if (! res) {
- GError *error;
- error = g_error_new (CK_SESSION_ERROR,
- CK_SESSION_ERROR_GENERAL,
- _("Unable to lookup information about calling process '%d'"),
- calling_pid);
g_warning ("stat on pid %d failed", calling_pid);
- dbus_g_method_return_error (context, error);
- g_error_free (error);
+ throw_error (context, CK_SESSION_ERROR_FAILED, _("Unable to lookup information about calling process '%d'"), calling_pid);
return FALSE;
}
/* only restrict this by UID for now */
if (session->priv->uid != calling_uid) {
- GError *error;
- error = g_error_new (CK_SESSION_ERROR,
- CK_SESSION_ERROR_GENERAL,
- _("Only session owner may set idle hint state"));
- dbus_g_method_return_error (context, error);
- g_error_free (error);
+ throw_error (context, CK_SESSION_ERROR_INSUFFICIENT_PERMISSION, _("Only session owner may set idle hint state"));
return FALSE;
}
session_set_idle_hint_internal (session, idle_hint);
- dbus_g_method_return (context);
-
- return TRUE;
-}
-
-gboolean
-ck_session_get_idle_hint (CkSession *session,
- gboolean *idle_hint,
- GError **error)
-{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- if (idle_hint != NULL) {
- *idle_hint = session->priv->idle_hint;
- }
-
- return TRUE;
-}
-
-#if GLIB_CHECK_VERSION(2,12,0)
-#define _g_time_val_to_iso8601(t) g_time_val_to_iso8601(t)
-#else
-/* copied from GLib */
-static gchar *
-_g_time_val_to_iso8601 (GTimeVal *time_)
-{
- gchar *retval;
-
- g_return_val_if_fail (time_->tv_usec >= 0 && time_->tv_usec < G_USEC_PER_SEC, NULL);
-
-#define ISO_8601_LEN 21
-#define ISO_8601_FORMAT "%Y-%m-%dT%H:%M:%SZ"
- retval = g_new0 (gchar, ISO_8601_LEN + 1);
-
- strftime (retval, ISO_8601_LEN,
- ISO_8601_FORMAT,
- gmtime (&(time_->tv_sec)));
-
- return retval;
-}
-#endif
-
-gboolean
-ck_session_get_idle_since_hint (CkSession *session,
- char **iso8601_datetime,
- GError **error)
-{
- char *date_str;
-
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- date_str = NULL;
- if (session->priv->idle_hint) {
- date_str = _g_time_val_to_iso8601 (&session->priv->idle_since_hint);
- }
-
- if (iso8601_datetime != NULL) {
- *iso8601_datetime = g_strdup (date_str);
- }
-
- g_free (date_str);
-
- return TRUE;
-}
-
-gboolean
-ck_session_activate (CkSession *session,
- DBusGMethodInvocation *context)
-{
- gboolean res;
-
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- res = FALSE;
- g_signal_emit (session, signals [ACTIVATE], 0, context, &res);
- if (! res) {
- GError *error;
-
- /* if the signal is not handled then either:
- a) aren't attached to seat
- b) seat doesn't support activation changes */
- g_debug ("Activate signal not handled");
-
- error = g_error_new (CK_SESSION_ERROR,
- CK_SESSION_ERROR_GENERAL,
- _("Unable to activate session"));
- dbus_g_method_return_error (context, error);
- g_error_free (error);
- return FALSE;
- }
+ console_kit_session_complete_set_idle_hint (cksession, context);
return TRUE;
}
@@ -394,34 +323,34 @@ ck_session_set_active (CkSession *session,
gboolean active,
GError **error)
{
+ ConsoleKitSession *cksession;
+
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- if (session->priv->active != active) {
- session->priv->active = active;
- g_signal_emit (session, signals [ACTIVE_CHANGED], 0, active);
+ cksession = CONSOLE_KIT_SESSION (session);
+
+ if (console_kit_session_get_active (cksession) != active) {
+ console_kit_session_set_active (cksession, active);
+ console_kit_session_emit_active_changed (cksession, active);
}
return TRUE;
}
-gboolean
-ck_session_set_is_local (CkSession *session,
- gboolean is_local,
- GError **error)
+static gboolean
+dbus_activate (ConsoleKitSession *cksession,
+ GDBusMethodInvocation *context)
{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- if (session->priv->is_local != is_local) {
- session->priv->is_local = is_local;
- }
+ ck_session_set_active (CK_SESSION (cksession), TRUE, NULL);
+ console_kit_session_complete_activate (cksession, context);
return TRUE;
}
gboolean
-ck_session_get_id (CkSession *session,
- char **id,
- GError **error)
+ck_session_get_id (CkSession *session,
+ char **id,
+ GError **error)
{
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
@@ -447,94 +376,73 @@ ck_session_get_seat_id (CkSession *session,
}
gboolean
-ck_session_get_unix_user (CkSession *session,
- guint *uid,
+ck_session_set_unix_user (CkSession *session,
+ guint uid,
GError **error)
{
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- if (uid != NULL) {
- *uid = session->priv->uid;
- }
+ console_kit_session_set_unix_user (CONSOLE_KIT_SESSION (session), uid);
return TRUE;
}
-/* deprecated */
gboolean
-ck_session_get_user (CkSession *session,
- guint *uid,
- GError **error)
-{
- return ck_session_get_unix_user (session, uid, error);
-}
-
-gboolean
-ck_session_get_x11_display (CkSession *session,
- char **x11_display,
+ck_session_set_x11_display (CkSession *session,
+ const char *x11_display,
GError **error)
{
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- if (x11_display != NULL) {
- *x11_display = g_strdup (session->priv->x11_display);
- }
+ console_kit_session_set_x11_display (CONSOLE_KIT_SESSION (session), x11_display);
return TRUE;
}
gboolean
-ck_session_get_display_device (CkSession *session,
- char **display_device,
+ck_session_set_display_device (CkSession *session,
+ const char *display_device,
GError **error)
{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- if (display_device != NULL) {
- *display_device = g_strdup (session->priv->display_device);
- }
-
- return TRUE;
-}
+ ConsoleKitSession *cksession;
-gboolean
-ck_session_get_login_session_id (CkSession *session,
- char **login_session_id,
- GError **error)
-{
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- if (login_session_id != NULL) {
- *login_session_id = g_strdup (session->priv->login_session_id);
- }
+ cksession = CONSOLE_KIT_SESSION (session);
+
+ console_kit_session_set_display_device (cksession, display_device);
return TRUE;
}
gboolean
-ck_session_get_x11_display_device (CkSession *session,
- char **x11_display_device,
+ck_session_set_x11_display_device (CkSession *session,
+ const char *x11_display_device,
GError **error)
{
+ ConsoleKitSession *cksession;
+
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- if (x11_display_device != NULL) {
- *x11_display_device = g_strdup (session->priv->x11_display_device);
- }
+ cksession = CONSOLE_KIT_SESSION (session);
+
+ console_kit_session_set_x11_display_device (cksession, x11_display_device);
return TRUE;
}
gboolean
-ck_session_get_remote_host_name (CkSession *session,
- char **remote_host_name,
+ck_session_set_remote_host_name (CkSession *session,
+ const char *remote_host_name,
GError **error)
{
+ ConsoleKitSession *cksession;
+
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- if (remote_host_name != NULL) {
- *remote_host_name = g_strdup (session->priv->remote_host_name);
- }
+ cksession = CONSOLE_KIT_SESSION (session);
+
+ console_kit_session_set_remote_host_name (cksession, remote_host_name);
return TRUE;
}
@@ -547,49 +455,33 @@ ck_session_get_creation_time (CkSession *session,
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
if (iso8601_datetime != NULL) {
- *iso8601_datetime = _g_time_val_to_iso8601 (&session->priv->creation_time);
+ *iso8601_datetime = g_time_val_to_iso8601 (&session->priv->creation_time);
}
return TRUE;
}
gboolean
-ck_session_get_session_type (CkSession *session,
- char **type,
- GError **error)
-{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- if (type != NULL) {
- *type = g_strdup (session->priv->session_type);
- }
-
- return TRUE;
-}
-
-gboolean
-ck_session_is_active (CkSession *session,
- gboolean *active,
- GError **error)
+ck_session_set_is_local (CkSession *session,
+ gboolean is_local,
+ GError **error)
{
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- if (active != NULL) {
- *active = session->priv->active;
- }
+ console_kit_session_set_is_local (CONSOLE_KIT_SESSION (session), is_local);
return TRUE;
}
gboolean
-ck_session_is_local (CkSession *session,
- gboolean *local,
- GError **error)
+ck_session_is_local (CkSession *session,
+ gboolean *local,
+ GError **error)
{
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
if (local != NULL) {
- *local = session->priv->is_local;
+ *local = console_kit_session_get_is_local (CONSOLE_KIT_SESSION (session));
}
return TRUE;
@@ -635,57 +527,6 @@ ck_session_set_seat_id (CkSession *session,
}
gboolean
-ck_session_set_unix_user (CkSession *session,
- guint uid,
- GError **error)
-{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- session->priv->uid = uid;
-
- return TRUE;
-}
-
-gboolean
-ck_session_set_x11_display (CkSession *session,
- const char *x11_display,
- GError **error)
-{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- g_free (session->priv->x11_display);
- session->priv->x11_display = g_strdup (x11_display);
-
- return TRUE;
-}
-
-gboolean
-ck_session_set_display_device (CkSession *session,
- const char *display_device,
- GError **error)
-{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- g_free (session->priv->display_device);
- session->priv->display_device = g_strdup (display_device);
-
- return TRUE;
-}
-
-gboolean
-ck_session_set_x11_display_device (CkSession *session,
- const char *x11_display_device,
- GError **error)
-{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- g_free (session->priv->x11_display_device);
- session->priv->x11_display_device = g_strdup (x11_display_device);
-
- return TRUE;
-}
-
-gboolean
ck_session_set_login_session_id (CkSession *session,
const char *login_session_id,
GError **error)
@@ -699,27 +540,15 @@ ck_session_set_login_session_id (CkSession *session,
}
gboolean
-ck_session_set_remote_host_name (CkSession *session,
- const char *remote_host_name,
- GError **error)
-{
- g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
-
- g_free (session->priv->remote_host_name);
- session->priv->remote_host_name = g_strdup (remote_host_name);
-
- return TRUE;
-}
-
-gboolean
ck_session_set_session_type (CkSession *session,
const char *type,
GError **error)
{
+ ConsoleKitSession *cksession = CONSOLE_KIT_SESSION (session);
+
g_return_val_if_fail (CK_IS_SESSION (session), FALSE);
- g_free (session->priv->session_type);
- session->priv->session_type = g_strdup (type);
+ console_kit_session_set_session_type (cksession, type);
return TRUE;
}
@@ -735,45 +564,15 @@ ck_session_set_property (GObject *object,
self = CK_SESSION (object);
switch (prop_id) {
- case PROP_ACTIVE:
- ck_session_set_active (self, g_value_get_boolean (value), NULL);
- break;
- case PROP_IS_LOCAL:
- ck_session_set_is_local (self, g_value_get_boolean (value), NULL);
- break;
case PROP_ID:
ck_session_set_id (self, g_value_get_string (value), NULL);
break;
case PROP_COOKIE:
ck_session_set_cookie (self, g_value_get_string (value), NULL);
break;
- case PROP_SESSION_TYPE:
- ck_session_set_session_type (self, g_value_get_string (value), NULL);
- break;
- case PROP_X11_DISPLAY:
- ck_session_set_x11_display (self, g_value_get_string (value), NULL);
- break;
- case PROP_X11_DISPLAY_DEVICE:
- ck_session_set_x11_display_device (self, g_value_get_string (value), NULL);
- break;
- case PROP_DISPLAY_DEVICE:
- ck_session_set_display_device (self, g_value_get_string (value), NULL);
- break;
case PROP_LOGIN_SESSION_ID:
ck_session_set_login_session_id (self, g_value_get_string (value), NULL);
break;
- case PROP_UNIX_USER:
- ck_session_set_unix_user (self, g_value_get_uint (value), NULL);
- break;
- case PROP_USER: /* deprecated */
- ck_session_set_unix_user (self, g_value_get_uint (value), NULL);
- break;
- case PROP_REMOTE_HOST_NAME:
- ck_session_set_remote_host_name (self, g_value_get_string (value), NULL);
- break;
- case PROP_IDLE_HINT:
- session_set_idle_hint_internal (self, g_value_get_boolean (value));
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
@@ -791,61 +590,34 @@ ck_session_get_property (GObject *object,
self = CK_SESSION (object);
switch (prop_id) {
- case PROP_ACTIVE:
- g_value_set_boolean (value, self->priv->active);
- break;
- case PROP_IS_LOCAL:
- g_value_set_boolean (value, self->priv->is_local);
- break;
case PROP_ID:
g_value_set_string (value, self->priv->id);
break;
case PROP_COOKIE:
g_value_set_string (value, self->priv->cookie);
break;
- case PROP_SESSION_TYPE:
- g_value_set_string (value, self->priv->session_type);
- break;
- case PROP_X11_DISPLAY:
- g_value_set_string (value, self->priv->x11_display);
- break;
- case PROP_X11_DISPLAY_DEVICE:
- g_value_set_string (value, self->priv->x11_display_device);
- break;
- case PROP_DISPLAY_DEVICE:
- g_value_set_string (value, self->priv->display_device);
- break;
case PROP_LOGIN_SESSION_ID:
g_value_set_string (value, self->priv->login_session_id);
break;
- case PROP_UNIX_USER:
- g_value_set_uint (value, self->priv->uid);
- break;
- case PROP_USER: /* deprecated */
- g_value_set_uint (value, self->priv->uid);
- break;
- case PROP_REMOTE_HOST_NAME:
- g_value_set_string (value, self->priv->remote_host_name);
- break;
- case PROP_IDLE_HINT:
- g_value_set_boolean (value, self->priv->idle_hint);
- break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
}
}
+
#define IS_STR_SET(x) (x != NULL && x[0] != '\0')
static gboolean
session_is_text (CkSession *session)
{
+ ConsoleKitSession *cksession;
gboolean ret;
ret = FALSE;
+ cksession = CONSOLE_KIT_SESSION (session);
- if (! IS_STR_SET (session->priv->x11_display_device)
- && ! IS_STR_SET (session->priv->x11_display)
- && IS_STR_SET (session->priv->display_device)) {
+ if (! IS_STR_SET (console_kit_session_get_x11_display_device (cksession))
+ && ! IS_STR_SET (console_kit_session_get_x11_display (cksession))
+ && IS_STR_SET (console_kit_session_get_display_device (cksession))) {
ret = TRUE;
}
@@ -868,7 +640,7 @@ static void
session_add_activity_watch (CkSession *session)
{
if (session->priv->idle_monitor == NULL) {
- session->priv->idle_monitor = ck_tty_idle_monitor_new (session->priv->display_device);
+ session->priv->idle_monitor = ck_tty_idle_monitor_new (console_kit_session_get_display_device (CONSOLE_KIT_SESSION (session)));
g_signal_connect (session->priv->idle_monitor,
"idle-hint-changed",
G_CALLBACK (tty_idle_changed_cb),
@@ -917,71 +689,8 @@ ck_session_class_init (CkSessionClass *klass)
object_class->set_property = ck_session_set_property;
object_class->finalize = ck_session_finalize;
- signals [ACTIVE_CHANGED] =
- g_signal_new ("active-changed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CkSessionClass, active_changed),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__BOOLEAN,
- G_TYPE_NONE,
- 1, G_TYPE_BOOLEAN);
- signals [ACTIVATE] =
- g_signal_new ("activate",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CkSessionClass, activate),
- NULL,
- NULL,
- ck_marshal_BOOLEAN__POINTER,
- G_TYPE_BOOLEAN,
- 1, G_TYPE_POINTER);
- signals [LOCK] =
- g_signal_new ("lock",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CkSessionClass, lock),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
- signals [UNLOCK] =
- g_signal_new ("unlock",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CkSessionClass, unlock),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__VOID,
- G_TYPE_NONE,
- 0);
- signals [IDLE_HINT_CHANGED] =
- g_signal_new ("idle-hint-changed",
- G_TYPE_FROM_CLASS (object_class),
- G_SIGNAL_RUN_LAST,
- G_STRUCT_OFFSET (CkSessionClass, idle_hint_changed),
- NULL,
- NULL,
- g_cclosure_marshal_VOID__BOOLEAN,
- G_TYPE_NONE,
- 1, G_TYPE_BOOLEAN);
- g_object_class_install_property (object_class,
- PROP_ACTIVE,
- g_param_spec_boolean ("active",
- NULL,
- NULL,
- FALSE,
- G_PARAM_READWRITE));
- g_object_class_install_property (object_class,
- PROP_IS_LOCAL,
- g_param_spec_boolean ("is-local",
- NULL,
- NULL,
- TRUE,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
+ /* Install private properties we're not exporting over D-BUS */
g_object_class_install_property (object_class,
PROP_ID,
g_param_spec_string ("id",
@@ -996,14 +705,6 @@ ck_session_class_init (CkSessionClass *klass)
"cookie",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT_ONLY));
-
- g_object_class_install_property (object_class,
- PROP_SESSION_TYPE,
- g_param_spec_string ("session-type",
- "session-type",
- "session type",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
g_object_class_install_property (object_class,
PROP_LOGIN_SESSION_ID,
g_param_spec_string ("login-session-id",
@@ -1011,65 +712,8 @@ ck_session_class_init (CkSessionClass *klass)
"login session id",
NULL,
G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
- g_object_class_install_property (object_class,
- PROP_X11_DISPLAY,
- g_param_spec_string ("x11-display",
- "x11-display",
- "X11 Display",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
- g_object_class_install_property (object_class,
- PROP_X11_DISPLAY_DEVICE,
- g_param_spec_string ("x11-display-device",
- "x11-display-device",
- "X11 Display device",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
- g_object_class_install_property (object_class,
- PROP_DISPLAY_DEVICE,
- g_param_spec_string ("display-device",
- "display-device",
- "Display device",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
- g_object_class_install_property (object_class,
- PROP_REMOTE_HOST_NAME,
- g_param_spec_string ("remote-host-name",
- "remote-host-name",
- "Remote host name",
- NULL,
- G_PARAM_READWRITE | G_PARAM_CONSTRUCT));
-
- g_object_class_install_property (object_class,
- PROP_UNIX_USER,
- g_param_spec_uint ("unix-user",
- "POSIX User Id",
- "POSIX User Id",
- 0,
- G_MAXINT,
- 0,
- G_PARAM_READWRITE));
- /* deprecated */
- g_object_class_install_property (object_class,
- PROP_USER,
- g_param_spec_uint ("user",
- "User Id",
- "User Id",
- 0,
- G_MAXINT,
- 0,
- G_PARAM_READWRITE));
- g_object_class_install_property (object_class,
- PROP_IDLE_HINT,
- g_param_spec_boolean ("idle-hint",
- NULL,
- NULL,
- FALSE,
- G_PARAM_READWRITE));
g_type_class_add_private (klass, sizeof (CkSessionPrivate));
-
- dbus_g_object_type_install_info (CK_TYPE_SESSION, &dbus_glib_ck_session_object_info);
}
static void
@@ -1082,10 +726,19 @@ ck_session_init (CkSession *session)
}
static void
+ck_session_iface_init (ConsoleKitSessionIface *iface)
+{
+ iface->handle_activate = dbus_activate;
+ iface->handle_set_idle_hint = dbus_set_idle_hint;
+}
+
+static void
ck_session_finalize (GObject *object)
{
CkSession *session;
+ g_debug ("ck_session_finalize");
+
g_return_if_fail (object != NULL);
g_return_if_fail (CK_IS_SESSION (object));
@@ -1095,24 +748,17 @@ ck_session_finalize (GObject *object)
session_remove_activity_watch (session);
- g_object_unref (session->priv->bus_proxy);
-
g_free (session->priv->id);
g_free (session->priv->cookie);
- g_free (session->priv->seat_id);
- g_free (session->priv->session_type);
g_free (session->priv->login_session_id);
- g_free (session->priv->display_device);
- g_free (session->priv->x11_display_device);
- g_free (session->priv->x11_display);
- g_free (session->priv->remote_host_name);
G_OBJECT_CLASS (ck_session_parent_class)->finalize (object);
}
CkSession *
-ck_session_new (const char *ssid,
- const char *cookie)
+ck_session_new (const char *ssid,
+ const char *cookie,
+ GDBusConnection *connection)
{
GObject *object;
gboolean res;
@@ -1121,7 +767,7 @@ ck_session_new (const char *ssid,
"id", ssid,
"cookie", cookie,
NULL);
- res = register_session (CK_SESSION (object));
+ res = register_session (CK_SESSION (object), connection);
if (! res) {
g_object_unref (object);
return NULL;
@@ -1138,7 +784,8 @@ ck_session_new (const char *ssid,
CkSession *
ck_session_new_with_parameters (const char *ssid,
const char *cookie,
- const GPtrArray *parameters)
+ const GPtrArray *parameters,
+ GDBusConnection *connection)
{
GObject *object;
gboolean res;
@@ -1242,7 +889,7 @@ ck_session_new_with_parameters (const char *ssid,
g_free (params);
g_type_class_unref (class);
- res = register_session (CK_SESSION (object));
+ res = register_session (CK_SESSION (object), connection);
if (! res) {
g_object_unref (object);
return NULL;
@@ -1255,30 +902,32 @@ void
ck_session_run_programs (CkSession *session,
const char *action)
{
+ ConsoleKitSession *cksession;
int n;
char *extra_env[11]; /* be sure to adjust this as needed */
n = 0;
+ cksession = CONSOLE_KIT_SESSION (session);
extra_env[n++] = g_strdup_printf ("CK_SESSION_ID=%s", session->priv->id);
- if (session->priv->session_type != NULL) {
- extra_env[n++] = g_strdup_printf ("CK_SESSION_TYPE=%s", session->priv->session_type);
+ if (console_kit_session_get_session_type (cksession) != NULL) {
+ extra_env[n++] = g_strdup_printf ("CK_SESSION_TYPE=%s", console_kit_session_get_session_type (cksession));
}
extra_env[n++] = g_strdup_printf ("CK_SESSION_SEAT_ID=%s", session->priv->seat_id);
extra_env[n++] = g_strdup_printf ("CK_SESSION_USER_UID=%d", session->priv->uid);
- if (session->priv->display_device != NULL && strlen (session->priv->display_device) > 0) {
- extra_env[n++] = g_strdup_printf ("CK_SESSION_DISPLAY_DEVICE=%s", session->priv->display_device);
+ if (console_kit_session_get_display_device (cksession) != NULL && strlen (console_kit_session_get_display_device (cksession)) > 0) {
+ extra_env[n++] = g_strdup_printf ("CK_SESSION_DISPLAY_DEVICE=%s", console_kit_session_get_display_device (cksession));
}
- if (session->priv->x11_display_device != NULL && strlen (session->priv->x11_display_device) > 0) {
- extra_env[n++] = g_strdup_printf ("CK_SESSION_X11_DISPLAY_DEVICE=%s", session->priv->x11_display_device);
+ if (console_kit_session_get_x11_display_device (cksession) != NULL && strlen (console_kit_session_get_x11_display_device (cksession) ) > 0) {
+ extra_env[n++] = g_strdup_printf ("CK_SESSION_X11_DISPLAY_DEVICE=%s", console_kit_session_get_x11_display_device (cksession) );
}
extra_env[n++] = g_strdup_printf ("CK_SESSION_X11_DISPLAY=%s",
- session->priv->x11_display ? session->priv->x11_display : "");
- if (session->priv->remote_host_name != NULL && strlen (session->priv->remote_host_name) > 0) {
- extra_env[n++] = g_strdup_printf ("CK_SESSION_REMOTE_HOST_NAME=%s", session->priv->remote_host_name);
+ console_kit_session_get_x11_display (cksession) ? console_kit_session_get_x11_display (cksession) : "");
+ if (console_kit_session_get_remote_host_name (cksession) != NULL && strlen (console_kit_session_get_remote_host_name (cksession)) > 0) {
+ extra_env[n++] = g_strdup_printf ("CK_SESSION_REMOTE_HOST_NAME=%s", console_kit_session_get_remote_host_name (cksession));
}
- extra_env[n++] = g_strdup_printf ("CK_SESSION_IS_ACTIVE=%s", session->priv->active ? "true" : "false");
- extra_env[n++] = g_strdup_printf ("CK_SESSION_IS_LOCAL=%s", session->priv->is_local ? "true" : "false");
+ extra_env[n++] = g_strdup_printf ("CK_SESSION_IS_ACTIVE=%s", console_kit_session_get_active (cksession) ? "true" : "false");
+ extra_env[n++] = g_strdup_printf ("CK_SESSION_IS_LOCAL=%s", console_kit_session_get_is_local (cksession) ? "true" : "false");
extra_env[n++] = NULL;
g_assert(n <= G_N_ELEMENTS(extra_env));
@@ -1297,6 +946,9 @@ ck_session_dump (CkSession *session,
{
char *s;
char *group_name;
+ ConsoleKitSession *cksession;
+
+ cksession = CONSOLE_KIT_SESSION (session);
group_name = g_strdup_printf ("Session %s", session->priv->id);
g_key_file_set_integer (key_file, group_name, "uid", session->priv->uid);
@@ -1304,11 +956,11 @@ ck_session_dump (CkSession *session,
group_name,
"seat",
NONULL_STRING (session->priv->seat_id));
- if (session->priv->session_type != NULL) {
+ if (console_kit_session_get_session_type (cksession) != NULL) {
g_key_file_set_string (key_file,
group_name,
"type",
- NONULL_STRING (session->priv->session_type));
+ NONULL_STRING (console_kit_session_get_session_type (cksession)));
}
if (session->priv->login_session_id != NULL && strlen (session->priv->login_session_id) > 0) {
g_key_file_set_string (key_file,
@@ -1316,36 +968,37 @@ ck_session_dump (CkSession *session,
"login_session_id",
NONULL_STRING (session->priv->login_session_id));
}
- if (session->priv->display_device != NULL && strlen (session->priv->display_device) > 0) {
+ if (console_kit_session_get_display_device (cksession) != NULL && strlen (console_kit_session_get_display_device (cksession)) > 0) {
g_key_file_set_string (key_file,
group_name,
"display_device",
- NONULL_STRING (session->priv->display_device));
+ NONULL_STRING (console_kit_session_get_display_device (cksession)));
}
- if (session->priv->x11_display_device != NULL && strlen (session->priv->x11_display_device) > 0) {
+ if (console_kit_session_get_x11_display_device (cksession) != NULL && strlen (console_kit_session_get_x11_display_device (cksession)) > 0) {
g_key_file_set_string (key_file,
group_name,
"x11_display_device",
- NONULL_STRING (session->priv->x11_display_device));
+ NONULL_STRING (console_kit_session_get_x11_display_device (cksession)));
}
- if (session->priv->x11_display != NULL && strlen (session->priv->x11_display) > 0) {
+ if (console_kit_session_get_x11_display (cksession) != NULL && strlen (console_kit_session_get_x11_display (cksession)) > 0) {
g_key_file_set_string (key_file,
group_name,
"x11_display",
- NONULL_STRING (session->priv->x11_display));
+ NONULL_STRING (console_kit_session_get_x11_display (cksession)));
}
- if (session->priv->remote_host_name != NULL && strlen (session->priv->remote_host_name) > 0) {
+ if (console_kit_session_get_remote_host_name (cksession) != NULL && strlen (console_kit_session_get_remote_host_name (cksession)) > 0) {
g_key_file_set_string (key_file,
group_name,
"remote_host_name",
- NONULL_STRING (session->priv->remote_host_name));
+ NONULL_STRING (console_kit_session_get_remote_host_name (cksession)));
}
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);
+ NONULL_STRING (console_kit_session_get_remote_host_name (cksession)));
+
+ console_kit_session_set_active (cksession, g_key_file_get_boolean (key_file, group_name, "is_active", NULL));
+ console_kit_session_set_is_local (cksession, g_key_file_get_boolean (key_file, group_name, "is_local", NULL));
s = g_time_val_to_iso8601 (&(session->priv->creation_time));
g_key_file_set_string (key_file,
diff --git a/src/ck-session.h b/src/ck-session.h
index b6b565b..c7db807 100644
--- a/src/ck-session.h
+++ b/src/ck-session.h
@@ -23,7 +23,7 @@
#define __CK_SESSION_H
#include <glib-object.h>
-#include <dbus/dbus-glib.h>
+#include "ck-session-generated.h"
G_BEGIN_DECLS
@@ -38,48 +38,44 @@ typedef struct CkSessionPrivate CkSessionPrivate;
typedef struct
{
- GObject parent;
- CkSessionPrivate *priv;
+ ConsoleKitSessionSkeleton parent;
+ CkSessionPrivate *priv;
} CkSession;
typedef struct
{
- GObjectClass parent_class;
-
- /* internal signals */
- void (* activate) (CkSession *session,
- DBusGMethodInvocation *context);
-
- /* exported signals */
- void (* lock) (CkSession *session);
- void (* unlock) (CkSession *session);
- void (* active_changed) (CkSession *session,
- gboolean active);
- void (* idle_hint_changed) (CkSession *session,
- gboolean idle_hint);
+ ConsoleKitSessionSkeletonClass parent_class;
} CkSessionClass;
typedef enum
{
- CK_SESSION_ERROR_GENERAL
+ CK_SESSION_ERROR_FAILED,
+ CK_SESSION_ERROR_GENERAL,
+ CK_SESSION_ERROR_INSUFFICIENT_PERMISSION,
+ CK_SESSION_ERROR_NOT_SUPPORTED,
+ NUM_ERRORS
} CkSessionError;
#define CK_SESSION_ERROR ck_session_error_quark ()
+
GQuark ck_session_error_quark (void);
+GType ck_session_error_get_type (void);
GType ck_session_get_type (void);
+
CkSession * ck_session_new (const char *ssid,
- const char *cookie);
+ const char *cookie,
+ GDBusConnection *connection);
CkSession * ck_session_new_with_parameters (const char *ssid,
const char *cookie,
- const GPtrArray *parameters);
+ const GPtrArray *parameters,
+ GDBusConnection *connection);
void ck_session_dump (CkSession *session,
GKeyFile *key_file);
void ck_session_run_programs (CkSession *session,
const char *action);
-
gboolean ck_session_set_active (CkSession *session,
gboolean active,
GError **error);
@@ -117,8 +113,6 @@ gboolean ck_session_set_session_type (CkSession *se
const char *type,
GError **error);
-/* Exported methods */
-
/* Authoritative properties */
gboolean ck_session_get_id (CkSession *session,
char **ssid,
@@ -132,53 +126,26 @@ gboolean ck_session_is_active (CkSession *se
gboolean ck_session_is_local (CkSession *session,
gboolean *local,
GError **error);
-gboolean ck_session_get_unix_user (CkSession *session,
- guint *uid,
- GError **error);
-gboolean ck_session_get_x11_display (CkSession *session,
- char **display,
- GError **error);
-gboolean ck_session_get_x11_display_device (CkSession *session,
- char **display,
- GError **error);
-gboolean ck_session_get_display_device (CkSession *session,
- char **display,
- GError **error);
gboolean ck_session_get_login_session_id (CkSession *session,
char **login_session_id,
GError **error);
-gboolean ck_session_get_session_type (CkSession *session,
- char **type,
- GError **error);
-gboolean ck_session_get_remote_host_name (CkSession *session,
- char **host_name,
- GError **error);
gboolean ck_session_get_creation_time (CkSession *session,
char **iso8601_datetime,
GError **error);
-/*deprecated*/
-gboolean ck_session_get_user (CkSession *session,
- guint *uid,
- GError **error);
-/* Non-authoritative properties */
-gboolean ck_session_get_idle_hint (CkSession *session,
- gboolean *idle_hint,
+
+gboolean ck_session_set_id (CkSession *session,
+ const char *ssid,
GError **error);
-gboolean ck_session_get_idle_since_hint (CkSession *session,
- char **iso8601_datetime,
+gboolean ck_session_set_cookie (CkSession *session,
+ const char *cookie,
+ GError **error);
+gboolean ck_session_set_seat_id (CkSession *session,
+ const char *sid,
+ GError **error);
+gboolean ck_session_set_login_session_id (CkSession *session,
+ const char *login_session_id,
GError **error);
-gboolean ck_session_set_idle_hint (CkSession *session,
- gboolean idle_hint,
- DBusGMethodInvocation *context);
-
-/* Privileged actions */
-gboolean ck_session_activate (CkSession *session,
- DBusGMethodInvocation *context);
-gboolean ck_session_lock (CkSession *session,
- DBusGMethodInvocation *context);
-gboolean ck_session_unlock (CkSession *session,
- DBusGMethodInvocation *context);
G_END_DECLS
diff --git a/src/test-session.c b/src/test-session.c
new file mode 100644
index 0000000..e0c6059
--- /dev/null
+++ b/src/test-session.c
@@ -0,0 +1,354 @@
+/* -*- Mode: C; tab-width: 8; indent-tabs-mode: nil; c-basic-offset: 8 -*-
+ *
+ * Copyright (C) 2014 Eric Koegel <eric.koegel@gmail.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ *
+ */
+
+#include "config.h"
+
+#include <stdlib.h>
+#include <stdio.h>
+
+#include <glib.h>
+#include <glib-object.h>
+#include <glib-unix.h>
+#include <glib/gstdio.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <gio/gio.h>
+
+#include "ck-session.h"
+
+
+CkSession *session;
+GDBusProxy *proxy;
+ConsoleKitSession *cksession;
+static GMainLoop *loop;
+
+#define DBUS_NAME "org.freedesktop.ConsoleKit.TestSession"
+#define DBUS_PATH "/org/freedesktop/ConsoleKit/TestSession"
+
+
+static void
+test_unref_session (void)
+{
+ /* Verify we have an object */
+ g_assert (session != NULL);
+ g_assert (CK_IS_SESSION (session));
+
+ g_object_unref (session);
+ session = NULL;
+}
+
+static void
+test_set_some_stuff (void)
+{
+ g_print ("console_kit_session_call_activate_sync\n");
+
+ console_kit_session_call_activate_sync (cksession, NULL, NULL);
+
+ g_print ("test_set_some_stuff\n");
+
+ console_kit_session_set_unix_user (cksession, 1000);
+ console_kit_session_set_session_type (cksession, "graphical");
+ console_kit_session_set_remote_host_name (cksession, "test-client");
+ console_kit_session_set_display_device (cksession, "/dev/tty64");
+ console_kit_session_set_is_local (cksession, TRUE);
+}
+
+static gboolean
+test_validate_stuff (gpointer user_data)
+{
+ g_print ("test_validate_stuff\n");
+
+ if (cksession == NULL)
+ return FALSE;
+
+ g_print ("unix user: %d\n", console_kit_session_get_unix_user (cksession));
+ g_print ("session type: %s\n", console_kit_session_get_session_type (cksession));
+ g_print ("remote hostname: %s\n", console_kit_session_get_remote_host_name (cksession));
+ g_print ("display device: %s\n", console_kit_session_get_display_device (cksession));
+ g_print ("is active? %s\n", console_kit_session_get_active (cksession) ? "TRUE" : "FALSE");
+ g_print ("is local? %s\n", console_kit_session_get_is_local (cksession) ? "TRUE" : "FALSE");
+ g_print ("done printing stuff\n\n");
+
+ return TRUE;
+}
+
+static void
+test_setup_cksession_proxy (void)
+{
+ GError *error = NULL;
+
+ g_print ("test_setup_cksession_proxy\n");
+
+ cksession = console_kit_session_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ DBUS_NAME, DBUS_PATH,
+ NULL,
+ &error);
+
+ if (cksession == NULL)
+ {
+ g_printerr ("Error creating cksession proxy: %s\n", error->message);
+ g_error_free (error);
+ }
+
+ g_timeout_add_seconds (10, test_validate_stuff, NULL);
+}
+
+static void
+print_properties (GDBusProxy *proxy)
+{
+ gchar **property_names;
+ guint n;
+
+ g_print (" properties:\n");
+
+ property_names = g_dbus_proxy_get_cached_property_names (proxy);
+ for (n = 0; property_names != NULL && property_names[n] != NULL; n++)
+ {
+ const gchar *key = property_names[n];
+ GVariant *value;
+ gchar *value_str;
+ value = g_dbus_proxy_get_cached_property (proxy, key);
+ value_str = g_variant_print (value, TRUE);
+ g_print (" %s -> %s\n", key, value_str);
+ g_variant_unref (value);
+ g_free (value_str);
+ }
+ g_strfreev (property_names);
+}
+
+static void
+on_properties_changed (GDBusProxy *proxy,
+ GVariant *changed_properties,
+ const gchar* const *invalidated_properties,
+ gpointer user_data)
+{
+ /* Note that we are guaranteed that changed_properties and
+ * invalidated_properties are never NULL
+ */
+
+ g_print ("on_properties_changed\n");
+
+ if (g_variant_n_children (changed_properties) > 0)
+ {
+ GVariantIter *iter;
+ const gchar *key;
+ GVariant *value;
+
+ g_print (" *** Properties Changed:\n");
+ g_variant_get (changed_properties,
+ "a{sv}",
+ &iter);
+ while (g_variant_iter_loop (iter, "{&sv}", &key, &value))
+ {
+ gchar *value_str;
+ value_str = g_variant_print (value, TRUE);
+ g_print (" %s -> %s\n", key, value_str);
+ g_free (value_str);
+ }
+ g_variant_iter_free (iter);
+ }
+
+ if (g_strv_length ((GStrv) invalidated_properties) > 0)
+ {
+ guint n;
+ g_print (" *** Properties Invalidated:\n");
+ for (n = 0; invalidated_properties[n] != NULL; n++)
+ {
+ const gchar *key = invalidated_properties[n];
+ g_print (" %s\n", key);
+ }
+ }
+}
+
+static void
+on_signal (GDBusProxy *proxy,
+ gchar *sender_name,
+ gchar *signal_name,
+ GVariant *parameters,
+ gpointer user_data)
+{
+ gchar *parameters_str;
+
+ g_print ("on_signal\n");
+
+ parameters_str = g_variant_print (parameters, TRUE);
+ g_print (" *** Received Signal: %s: %s\n",
+ signal_name,
+ parameters_str);
+ g_free (parameters_str);
+}
+
+static void
+print_proxy (GDBusProxy *proxy)
+{
+ gchar *name_owner;
+
+ g_print ("print_proxy\n");
+
+ name_owner = g_dbus_proxy_get_name_owner (proxy);
+ if (name_owner != NULL)
+ {
+ g_print ("+++ Proxy object points to remote object owned by %s\n"
+ " bus: %s\n"
+ " name: %s\n"
+ " object path: %s\n"
+ " interface: %s\n",
+ name_owner,
+ "Session Bus",
+ DBUS_NAME,
+ DBUS_PATH,
+ "org.freedesktop.ConsoleKit.Session");
+ print_properties (proxy);
+ }
+ else
+ {
+ g_print ("--- Proxy object is inert - there is no name owner for the name\n"
+ " bus: %s\n"
+ " name: %s\n"
+ " object path: %s\n"
+ " interface: %s\n",
+ "Session Bus",
+ DBUS_NAME,
+ DBUS_PATH,
+ "org.freedesktop.ConsoleKit.Session");
+ }
+ g_free (name_owner);
+
+ test_setup_cksession_proxy ();
+ test_set_some_stuff ();
+}
+
+static void
+on_name_owner_notify (GObject *object,
+ GParamSpec *pspec,
+ gpointer user_data)
+{
+ GDBusProxy *proxy = G_DBUS_PROXY (object);
+ g_print ("on_name_owner_notify\n");
+ print_proxy (proxy);
+}
+
+static gboolean
+test_setup_proxy (gpointer user_data)
+{
+ GError *error = NULL;
+
+ g_print ("test_setup_proxy\n");
+
+ proxy = g_dbus_proxy_new_for_bus_sync (G_BUS_TYPE_SESSION,
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ NULL, /* GDBusInterfaceInfo */
+ DBUS_NAME,
+ DBUS_PATH,
+ "org.freedesktop.ConsoleKit.Session",
+ NULL, /* GCancellable */
+ &error);
+
+ if (proxy == NULL)
+ {
+ g_printerr ("Error creating proxy: %s\n", error->message);
+ g_error_free (error);
+ return FALSE;
+ }
+
+ g_signal_connect (proxy,
+ "g-properties-changed",
+ G_CALLBACK (on_properties_changed),
+ NULL);
+ g_signal_connect (proxy,
+ "g-signal",
+ G_CALLBACK (on_signal),
+ NULL);
+ g_signal_connect (proxy,
+ "notify::g-name-owner",
+ G_CALLBACK (on_name_owner_notify),
+ NULL);
+ print_proxy (proxy);
+
+ return FALSE;
+}
+
+static void
+bus_acquired (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ g_print ("bus_acquired\n");
+
+ session = ck_session_new (DBUS_PATH, "cookie!", connection);
+
+ /* Verify we got a valid object */
+ g_assert (session != NULL);
+ g_assert (CK_IS_SESSION (session));
+}
+
+static void
+name_acquired (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ g_print ("name_acquired\n");
+
+ g_timeout_add_seconds (4, test_setup_proxy, NULL);
+}
+
+static void
+name_lost (GDBusConnection *connection,
+ const gchar *name,
+ gpointer user_data)
+{
+ g_print ("name_lost\n");
+
+ /* Release the object */
+ test_unref_session ();
+}
+
+static void
+test_own_bus (void)
+{
+ g_bus_own_name (G_BUS_TYPE_SESSION, DBUS_NAME,
+ G_BUS_NAME_OWNER_FLAGS_NONE,
+ bus_acquired, name_acquired, name_lost,
+ NULL, NULL);
+}
+
+int
+main (int argc,
+ char *argv[])
+{
+ /* do not run these tests as root */
+ if (getuid () == 0) {
+ g_warning ("You must NOT be root to run these tests");
+ exit (1);
+ }
+
+ loop = g_main_loop_new (NULL, FALSE);
+
+ session = NULL;
+
+ test_own_bus ();
+
+ g_main_loop_run (loop);
+
+ g_object_unref (loop);
+
+ return 0;
+}