diff options
author | Colin Walters <walters@verbum.org> | 2011-01-07 13:11:36 -0500 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2011-01-07 13:11:36 -0500 |
commit | 765db5f7e8845ff14f392176e45a0cecc72d1314 (patch) | |
tree | 1861dd33902d1f1e3c737d41f8683e18a8757982 | |
parent | f03e25d5695499de21aabb75db15b827c0176508 (diff) | |
download | dbus-765db5f7e8845ff14f392176e45a0cecc72d1314.tar.gz |
RHEL-4: Import dbus-0.13-uid.patch
-rw-r--r-- | dbus/dbus-userdb.c | 31 |
1 files changed, 31 insertions, 0 deletions
diff --git a/dbus/dbus-userdb.c b/dbus/dbus-userdb.c index 1e105b29..c9157880 100644 --- a/dbus/dbus-userdb.c +++ b/dbus/dbus-userdb.c @@ -64,6 +64,19 @@ free_group_info (void *data) dbus_free (info); } +static dbus_bool_t +is_a_number (const DBusString *str, + unsigned long *num) +{ + int end; + + if (_dbus_string_parse_int (str, 0, num, &end) && + end == _dbus_string_get_length (str)) + return TRUE; + else + return FALSE; +} + static DBusUserInfo* _dbus_user_database_lookup (DBusUserDatabase *db, dbus_uid_t uid, @@ -74,6 +87,15 @@ _dbus_user_database_lookup (DBusUserDatabase *db, _DBUS_ASSERT_ERROR_IS_CLEAR (error); _dbus_assert (uid != DBUS_UID_UNSET || username != NULL); + + /* See if the username is really a number */ + if (uid == DBUS_UID_UNSET) + { + unsigned long n; + + if (is_a_number (username, &n)) + uid = n; + } if (uid != DBUS_UID_UNSET) info = _dbus_hash_table_lookup_ulong (db->users, uid); @@ -152,6 +174,15 @@ _dbus_user_database_lookup_group (DBusUserDatabase *db, _DBUS_ASSERT_ERROR_IS_CLEAR (error); + /* See if the group is really a number */ + if (gid == DBUS_UID_UNSET) + { + unsigned long n; + + if (is_a_number (groupname, &n)) + gid = n; + } + if (gid != DBUS_GID_UNSET) info = _dbus_hash_table_lookup_ulong (db->groups, gid); else |