diff options
author | kwm <kwm@df743ca5-7f9a-e211-a948-0013205c9059> | 2013-08-11 03:17:06 +0800 |
---|---|---|
committer | kwm <kwm@df743ca5-7f9a-e211-a948-0013205c9059> | 2013-08-11 03:17:06 +0800 |
commit | c94a63707c178e0af40dde02ddcc706a87ad834a (patch) | |
tree | 7ed043dd2551455f0a8f5ae387584c1711de6246 /sysutils/consolekit | |
parent | 6f6f509adfb6c97f838a2fc61afc0b0e5f19c14d (diff) | |
download | marcuscom-ports-c94a63707c178e0af40dde02ddcc706a87ad834a.tar marcuscom-ports-c94a63707c178e0af40dde02ddcc706a87ad834a.tar.gz marcuscom-ports-c94a63707c178e0af40dde02ddcc706a87ad834a.tar.bz2 marcuscom-ports-c94a63707c178e0af40dde02ddcc706a87ad834a.tar.lz marcuscom-ports-c94a63707c178e0af40dde02ddcc706a87ad834a.tar.xz marcuscom-ports-c94a63707c178e0af40dde02ddcc706a87ad834a.tar.zst marcuscom-ports-c94a63707c178e0af40dde02ddcc706a87ad834a.zip |
Borrow some patches and hints from OpenBSD.
This makes is-local being able to go TRUE again, but active is still FALSE.
git-svn-id: svn://creme-brulee.marcuscom.com/ports/trunk@18644 df743ca5-7f9a-e211-a948-0013205c9059
Diffstat (limited to 'sysutils/consolekit')
-rw-r--r-- | sysutils/consolekit/Makefile | 6 | ||||
-rw-r--r-- | sysutils/consolekit/files/patch-src_ck-manager.c | 186 | ||||
-rw-r--r-- | sysutils/consolekit/files/patch-tools_ck-collect-session-info.c | 35 | ||||
-rw-r--r-- | sysutils/consolekit/files/patch-tools_ck-history.c | 20 |
4 files changed, 236 insertions, 11 deletions
diff --git a/sysutils/consolekit/Makefile b/sysutils/consolekit/Makefile index e5555f504..3aea4135c 100644 --- a/sysutils/consolekit/Makefile +++ b/sysutils/consolekit/Makefile @@ -3,6 +3,7 @@ PORTNAME= consolekit PORTVERSION= 0.4.5 +PORTREVISION= 1 CATEGORIES= sysutils gnome MASTER_SITES= http://www.freedesktop.org/software/ConsoleKit/dist/ DISTFILES= ConsoleKit-${PORTVERSION}${EXTRACT_SUFX} @@ -10,8 +11,8 @@ DISTFILES= ConsoleKit-${PORTVERSION}${EXTRACT_SUFX} MAINTAINER= gnome@FreeBSD.org COMMENT= Framework for defining and tracking users -LIB_DEPENDS= dbus-glib-1:${PORTSDIR}/devel/dbus-glib \ - polkit-gobject-1:${PORTSDIR}/sysutils/polkit +LIB_DEPENDS= libdbus-glib-1.so:${PORTSDIR}/devel/dbus-glib \ + libpolkit-gobject-1.so:${PORTSDIR}/sysutils/polkit WRKSRC= ${WRKDIR}/ConsoleKit-${PORTVERSION} USE_BZIP2= yes @@ -22,6 +23,7 @@ USE_LDCONFIG= yes CPPFLAGS+= -I${LOCALBASE}/include LDFLAGS+= -L${LOCALBASE}/lib CONFIGURE_ARGS= --with-pid-file=/var/run/${PORTNAME}.pid \ + --disable-pam-module \ --localstatedir=/var post-install: diff --git a/sysutils/consolekit/files/patch-src_ck-manager.c b/sysutils/consolekit/files/patch-src_ck-manager.c new file mode 100644 index 000000000..7be0214c7 --- /dev/null +++ b/sysutils/consolekit/files/patch-src_ck-manager.c @@ -0,0 +1,186 @@ +$OpenBSD: patch-src_ck-manager_c,v 1.3 2011/04/28 13:08:33 ajacoutot Exp $ + +XXX revert 4f88228f31a63c026c424a92827f26ad7535275c +The Kit people assume the world runs Linux and PAM, see +https://bugs.freedesktop.org/show_bug.cgi?id=28377 + +--- src/ck-manager.c.orig Tue Oct 26 16:34:03 2010 ++++ src/ck-manager.c Sat Dec 4 12:18:29 2010 +@@ -1659,175 +1659,13 @@ open_session_for_leader (CkManager *manage + dbus_g_method_return (context, cookie); + } + +-enum { +- PROP_STRING, +- PROP_BOOLEAN, +-}; +- +-#define CK_TYPE_PARAMETER_STRUCT (dbus_g_type_get_struct ("GValueArray", \ +- G_TYPE_STRING, \ +- G_TYPE_VALUE, \ +- G_TYPE_INVALID)) +- +-static gboolean +-_get_parameter (GPtrArray *parameters, +- const char *name, +- int prop_type, +- gpointer *value) +-{ +- gboolean ret; +- int i; +- +- if (parameters == NULL) { +- return FALSE; +- } +- +- ret = FALSE; +- +- for (i = 0; i < parameters->len && ret == FALSE; i++) { +- gboolean res; +- GValue val_struct = { 0, }; +- char *prop_name; +- GValue *prop_val; +- +- g_value_init (&val_struct, CK_TYPE_PARAMETER_STRUCT); +- g_value_set_static_boxed (&val_struct, g_ptr_array_index (parameters, i)); +- +- res = dbus_g_type_struct_get (&val_struct, +- 0, &prop_name, +- 1, &prop_val, +- G_MAXUINT); +- if (! res) { +- g_debug ("Unable to extract parameter input"); +- goto cont; +- } +- +- if (prop_name == NULL) { +- g_debug ("Skipping NULL parameter"); +- goto cont; +- } +- +- if (strcmp (prop_name, name) != 0) { +- goto cont; +- } +- +- switch (prop_type) { +- case PROP_STRING: +- if (value != NULL) { +- *value = g_value_dup_string (prop_val); +- } +- break; +- case PROP_BOOLEAN: +- if (value != NULL) { +- *(gboolean *)value = g_value_get_boolean (prop_val); +- } +- break; +- default: +- g_assert_not_reached (); +- break; +- } +- +- ret = TRUE; +- +- cont: +- g_free (prop_name); +- if (prop_val != NULL) { +- g_value_unset (prop_val); +- g_free (prop_val); +- } +- } +- +- return ret; +-} +- +-static gboolean +-_verify_login_session_id_is_local (CkManager *manager, +- const char *login_session_id) +-{ +- GHashTableIter iter; +- const char *id; +- CkSession *session; +- +- g_return_val_if_fail (CK_IS_MANAGER (manager), FALSE); +- +- /* If any local session exists for the given login session id +- then that means a trusted party has vouched for the +- original login */ +- +- g_debug ("Looking for local sessions for login-session-id=%s", login_session_id); +- +- session = NULL; +- g_hash_table_iter_init (&iter, manager->priv->sessions); +- while (g_hash_table_iter_next (&iter, (gpointer *)&id, (gpointer *)&session)) { +- if (session != NULL) { +- gboolean is_local; +- char *sessid; +- +- sessid = NULL; +- g_object_get (session, +- "login-session-id", &sessid, +- "is-local", &is_local, +- NULL); +- if (g_strcmp0 (sessid, login_session_id) == 0 && is_local) { +- g_debug ("CkManager: found is-local=true on %s", id); +- return TRUE; +- } +- } +- } +- +- return FALSE; +-} +- + static void +-add_param_boolean (GPtrArray *parameters, +- const char *key, +- gboolean value) +-{ +- GValue val = { 0, }; +- GValue param_val = { 0, }; +- +- g_value_init (&val, G_TYPE_BOOLEAN); +- g_value_set_boolean (&val, value); +- g_value_init (¶m_val, CK_TYPE_PARAMETER_STRUCT); +- g_value_take_boxed (¶m_val, +- dbus_g_type_specialized_construct (CK_TYPE_PARAMETER_STRUCT)); +- dbus_g_type_struct_set (¶m_val, +- 0, key, +- 1, &val, +- G_MAXUINT); +- g_value_unset (&val); +- +- g_ptr_array_add (parameters, g_value_get_boxed (¶m_val)); +-} +- +-static void + verify_and_open_session_for_leader (CkManager *manager, + CkSessionLeader *leader, +- GPtrArray *parameters, ++ const GPtrArray *parameters, + DBusGMethodInvocation *context) + { +- /* Only allow a local session if originating from an existing +- local session. Effectively this means that only trusted +- parties can create local sessions. */ +- +- g_debug ("CkManager: verifying session for leader"); +- +- if (parameters != NULL && ! _get_parameter (parameters, "is-local", PROP_BOOLEAN, NULL)) { +- gboolean is_local; +- char *login_session_id; +- +- g_debug ("CkManager: is-local has not been set, will inherit from existing login-session-id if available"); +- +- is_local = FALSE; +- +- if (_get_parameter (parameters, "login-session-id", PROP_STRING, (gpointer *) &login_session_id)) { +- is_local = _verify_login_session_id_is_local (manager, login_session_id); +- g_debug ("CkManager: found is-local=%s", is_local ? "true" : "false"); +- } +- +- add_param_boolean (parameters, "is-local", is_local); +- } +- ++ /* for now don't bother verifying since we protect OpenSessionWithParameters */ + open_session_for_leader (manager, + leader, + parameters, diff --git a/sysutils/consolekit/files/patch-tools_ck-collect-session-info.c b/sysutils/consolekit/files/patch-tools_ck-collect-session-info.c index 36714d0c5..6ec8b5ff4 100644 --- a/sysutils/consolekit/files/patch-tools_ck-collect-session-info.c +++ b/sysutils/consolekit/files/patch-tools_ck-collect-session-info.c @@ -1,5 +1,10 @@ ---- tools/ck-collect-session-info.c.orig 2009-04-29 15:07:29.000000000 -0400 -+++ tools/ck-collect-session-info.c 2010-07-12 23:55:13.000000000 -0400 +$OpenBSD: patch-tools_ck-collect-session-info_c,v 1.1 2011/04/28 13:08:33 ajacoutot Exp $ + +XXX revert 4f88228f31a63c026c424a92827f26ad7535275c +The Kit people assume the world runs Linux and PAM, see +https://bugs.freedesktop.org/show_bug.cgi?id=28377 +--- tools/ck-collect-session-info.c.orig 2013-08-10 20:47:52.000000000 +0200 ++++ tools/ck-collect-session-info.c 2013-08-10 20:47:33.000000000 +0200 @@ -226,6 +226,12 @@ fill_x11_info (SessionInfo *si) gboolean res; CkProcessStat *xorg_stat; @@ -13,7 +18,7 @@ /* assume this is true then check it */ si->x11_display = ck_unix_pid_get_env (si->pid, "DISPLAY"); -@@ -272,6 +278,52 @@ fill_x11_info (SessionInfo *si) +@@ -272,9 +278,56 @@ fill_x11_info (SessionInfo *si) } si->x11_display_device = ck_process_stat_get_tty (xorg_stat); @@ -65,11 +70,23 @@ +gotit: ck_process_stat_free (xorg_stat); - si->is_local = TRUE; -@@ -410,5 +462,5 @@ main (int argc, +- /* don't set is-local here - let the daemon do that */ ++ si->is_local = TRUE; ++ si->is_local_is_set = TRUE; - ret = collect_session_info (user_id, process_id); + g_free (si->remote_host_name); + si->remote_host_name = NULL; +@@ -303,6 +356,13 @@ fill_session_info (SessionInfo *si) -- return ret != TRUE; -+ return ret != TRUE; - } + fill_x11_info (si); + ++ if (! si->is_local_is_set) { ++ /* FIXME: how should we set this? */ ++ /* non x11 sessions must be local I guess */ ++ si->is_local = TRUE; ++ si->is_local_is_set = TRUE; ++ } ++ + res = ck_unix_pid_get_login_session_id (si->pid, &si->login_session_id); + if (! res) { + si->login_session_id = NULL; diff --git a/sysutils/consolekit/files/patch-tools_ck-history.c b/sysutils/consolekit/files/patch-tools_ck-history.c new file mode 100644 index 000000000..33cdd68c5 --- /dev/null +++ b/sysutils/consolekit/files/patch-tools_ck-history.c @@ -0,0 +1,20 @@ +--- tools/ck-history.c.orig 2010-09-03 15:54:31.000000000 +0200 ++++ tools/ck-history.c 2013-08-10 20:56:36.000000000 +0200 +@@ -511,7 +511,7 @@ + char *session_type; + char *session_id; + char *seat_id; +- CkLogSeatSessionAddedEvent *e; ++ CkLogSeatSessionAddedEvent *e = NULL; + CkLogEvent *remove_event; + RecordStatus status; + +@@ -804,7 +804,7 @@ + data = user_counts->data; + + username = get_user_name_for_uid (data->uid); +- g_print ("%-8.8s %u\n", username, data->count); ++ g_print ("%-8s %u\n", username, data->count); + g_free (data); + user_counts = g_list_delete_link (user_counts, user_counts); + g_free (username); |