X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=dbus%2Fdbus-userdb-util.c;h=16bf229100c87b2d22673d3c4341efb148f4c191;hb=818e62f15f30f284f4cfddf5725972975b97ce52;hp=f75d1bc078fc0d453d30c06815c194d6c248fafb;hpb=5baf2f856a9c6625993234855b07680da1c8916f;p=platform%2Fupstream%2Fdbus.git diff --git a/dbus/dbus-userdb-util.c b/dbus/dbus-userdb-util.c index f75d1bc..16bf229 100644 --- a/dbus/dbus-userdb-util.c +++ b/dbus/dbus-userdb-util.c @@ -20,6 +20,7 @@ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA * */ +#include #define DBUS_USERDB_INCLUDES_PRIVATE 1 #include "dbus-userdb.h" #include "dbus-test.h" @@ -27,6 +28,11 @@ #include "dbus-protocol.h" #include +#if HAVE_SYSTEMD +#include +#include +#endif + /** * @addtogroup DBusInternalsUtils * @{ @@ -46,7 +52,28 @@ _dbus_is_console_user (dbus_uid_t uid, DBusUserDatabase *db; const DBusUserInfo *info; - dbus_bool_t result = FALSE; + dbus_bool_t result = FALSE; + +#ifdef HAVE_SYSTEMD + if (sd_booted () > 0) + { + int r; + + /* Check whether this user is logged in on at least one physical + seat */ + r = sd_uid_get_seats (uid, 0, NULL); + if (r < 0) + { + dbus_set_error (error, _dbus_error_from_errno (-r), + "Failed to determine seats of user \"" DBUS_UID_FORMAT "\": %s", + uid, + _dbus_strerror (-r)); + return FALSE; + } + + return (r > 0); + } +#endif #ifdef HAVE_CONSOLE_OWNER_FILE @@ -225,7 +252,7 @@ _dbus_user_database_lookup_group (DBusUserDatabase *db, #ifdef DBUS_ENABLE_USERDB_CACHE if (gid != DBUS_GID_UNSET) - info = _dbus_hash_table_lookup_ulong (db->groups, gid); + info = _dbus_hash_table_lookup_uintptr (db->groups, gid); else info = _dbus_hash_table_lookup_string (db->groups_by_name, _dbus_string_get_const_data (groupname)); @@ -277,7 +304,7 @@ _dbus_user_database_lookup_group (DBusUserDatabase *db, gid = DBUS_GID_UNSET; groupname = NULL; - if (!_dbus_hash_table_insert_ulong (db->groups, info->gid, info)) + if (!_dbus_hash_table_insert_uintptr (db->groups, info->gid, info)) { dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); _dbus_group_info_free_allocated (info); @@ -289,7 +316,7 @@ _dbus_user_database_lookup_group (DBusUserDatabase *db, info->groupname, info)) { - _dbus_hash_table_remove_ulong (db->groups, info->gid); + _dbus_hash_table_remove_uintptr (db->groups, info->gid); dbus_set_error (error, DBUS_ERROR_NO_MEMORY, NULL); return NULL; } @@ -413,6 +440,7 @@ _dbus_userdb_test (const char *test_data_dir) dbus_uid_t uid; unsigned long *group_ids; int n_group_ids, i; + DBusError error; if (!_dbus_username_from_current_process (&username)) _dbus_assert_not_reached ("didn't get username"); @@ -434,7 +462,17 @@ _dbus_userdb_test (const char *test_data_dir) printf(" %ld", group_ids[i]); printf ("\n"); - + + dbus_error_init (&error); + printf ("Is Console user: %i\n", + _dbus_is_console_user (uid, &error)); + printf ("Invocation was OK: %s\n", error.message ? error.message : "yes"); + dbus_error_free (&error); + printf ("Is Console user 4711: %i\n", + _dbus_is_console_user (4711, &error)); + printf ("Invocation was OK: %s\n", error.message ? error.message : "yes"); + dbus_error_free (&error); + dbus_free (group_ids); return TRUE;