# Description: Make PolicyKit work with ConsoleKit 0.3 API as well # Ubuntu: https://bugs.launchpad.net/273711 # Upstream: http://cvs.fedoraproject.org/viewvc/rpms/PolicyKit/devel/pk-ck-api-change.patch?view=markup --- policykit-0.9/src/polkit-dbus/polkit-dbus.c 2008-05-30 23:24:44.000000000 +0200 +++ policykit-0.9.new/src/polkit-dbus/polkit-dbus.c 2008-09-24 13:40:37.000000000 +0200 @@ -214,11 +214,17 @@ dbus_message_unref (reply); goto out; } + /* GetUnixUser API Changed in CK 0.3.0 */ if (!dbus_message_get_args (reply, NULL, - DBUS_TYPE_INT32, &uid, + DBUS_TYPE_UINT32, &uid, DBUS_TYPE_INVALID)) { - kit_warning ("Invalid GetUnixUser reply from CK"); - goto out; + /* try the older API */ + if (!dbus_message_get_args (reply, NULL, + DBUS_TYPE_INT32, &uid, + DBUS_TYPE_INVALID)) { + kit_warning ("Invalid GetUnixUser reply from CK"); + goto out; + } } dbus_message_unref (message); dbus_message_unref (reply); @@ -1326,16 +1332,21 @@ dbus_error_init (&error); seat_objpath = dbus_message_get_path (message); - if (!dbus_message_get_args (message, &error, - DBUS_TYPE_STRING, &session_objpath, + /* API fixed in CK 0.3 to match spec */ + if (!dbus_message_get_args (message, &error, + DBUS_TYPE_OBJECT_PATH, &session_objpath, DBUS_TYPE_INVALID)) { + if (!dbus_message_get_args (message, &error, + DBUS_TYPE_STRING, &session_objpath, + DBUS_TYPE_INVALID)) { + + /* TODO: should be _pk_critical */ + kit_warning ("The SessionAdded signal on the org.freedesktop.ConsoleKit.Seat " + "interface for object %s has the wrong signature! " + "Your system is misconfigured.", seat_objpath); - /* TODO: should be _pk_critical */ - kit_warning ("The SessionAdded signal on the org.freedesktop.ConsoleKit.Seat " - "interface for object %s has the wrong signature! " - "Your system is misconfigured.", seat_objpath); - - goto out; + goto out; + } } /* TODO: add to sessions - see polkit_tracker_is_authorization_relevant() */ @@ -1353,16 +1364,21 @@ dbus_error_init (&error); seat_objpath = dbus_message_get_path (message); - if (!dbus_message_get_args (message, &error, - DBUS_TYPE_STRING, &session_objpath, + /* API fixed in CK 0.3 to match spec */ + if (!dbus_message_get_args (message, &error, + DBUS_TYPE_OBJECT_PATH, &session_objpath, DBUS_TYPE_INVALID)) { + if (!dbus_message_get_args (message, &error, + DBUS_TYPE_STRING, &session_objpath, + DBUS_TYPE_INVALID)) { + + /* TODO: should be _pk_critical */ + kit_warning ("The SessionRemoved signal on the org.freedesktop.ConsoleKit.Seat " + "interface for object %s has the wrong signature! " + "Your system is misconfigured.", seat_objpath); - /* TODO: should be _pk_critical */ - kit_warning ("The SessionRemoved signal on the org.freedesktop.ConsoleKit.Seat " - "interface for object %s has the wrong signature! " - "Your system is misconfigured.", seat_objpath); - - goto out; + goto out; + } } _remove_caller_by_session (pk_tracker, session_objpath);