From 6eab51411982fc61c193caed388608c4f2bd25d1 Mon Sep 17 00:00:00 2001 From: "John (J5) Palmieri" Date: Tue, 22 Mar 2005 17:57:27 +0000 Subject: * tools/Makefile.am: Patch by Colin Walters that fixes distcheck * dbus/dbus-userdb.c, dbus/dbus-userdb-util.c: Add patch we have had in Red Hat packages for a while but for some reason never got merged upstream (_dbus_is_a_number): New checks if a string can be converted to a number and does the conversion if it can (_dbus_user_database_lookup): Add check to see if the given username is a udi. This allows udi's to be used instead of usernames in the config file. (_dbus_user_database_lookup_group): Add check to see if the given groupname is a gdi. This allows gdi's to be used instead of groupnames in the config file. --- dbus/dbus-userdb.c | 32 +++++++++++++++++++++++++++++++- 1 file changed, 31 insertions(+), 1 deletion(-) (limited to 'dbus/dbus-userdb.c') diff --git a/dbus/dbus-userdb.c b/dbus/dbus-userdb.c index f1317aa9..83a5769f 100644 --- a/dbus/dbus-userdb.c +++ b/dbus/dbus-userdb.c @@ -65,6 +65,27 @@ _dbus_group_info_free_allocated (DBusGroupInfo *info) dbus_free (info); } +/** + * Checks if a given string is actually a number + * and converts it if it is + * + * @param str the string to check + * @param num the memory location of the unsigned long to fill in + * @returns TRUE if str is a number and num is filled in + */ +dbus_bool_t +_dbus_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; +} + /** * Looks up a uid or username in the user database. Only one of name * or UID can be provided. There are wrapper functions for this that @@ -87,7 +108,16 @@ _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 (_dbus_is_a_number (username, &n)) + uid = n; + } + if (uid != DBUS_UID_UNSET) info = _dbus_hash_table_lookup_ulong (db->users, uid); else -- cgit