dbus_bool_t _dbus_credentials_from_username (const DBusString *username, DBusCredentials *credentials) { DBusUserDatabase *db; const DBusUserInfo *info; _dbus_user_database_lock_system (); db = _dbus_user_database_get_system (); if (db == NULL) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_user_database_get_username (db, username, &info, NULL)) { _dbus_user_database_unlock_system (); return FALSE; } credentials->pid = DBUS_PID_UNSET; credentials->uid = info->uid; credentials->gid = info->primary_gid; _dbus_user_database_unlock_system (); return TRUE; }
/** * Gets user ID and primary group given username * * @param username the username * @param uid_p return location for UID * @param gid_p return location for GID * @returns #TRUE if username existed and we got the UID and GID */ dbus_bool_t _dbus_get_user_id_and_primary_group (const DBusString *username, dbus_uid_t *uid_p, dbus_gid_t *gid_p) { DBusUserDatabase *db; const DBusUserInfo *info; _dbus_user_database_lock_system (); db = _dbus_user_database_get_system (); if (db == NULL) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_user_database_get_username (db, username, &info, NULL)) { _dbus_user_database_unlock_system (); return FALSE; } if (uid_p) *uid_p = info->uid; if (gid_p) *gid_p = info->primary_gid; _dbus_user_database_unlock_system (); return TRUE; }
dbus_bool_t _dbus_homedir_from_username (const DBusString *username, DBusString *homedir) { DBusUserDatabase *db; const DBusUserInfo *info; _dbus_user_database_lock_system (); db = _dbus_user_database_get_system (); if (db == NULL) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_user_database_get_username (db, username, &info, NULL)) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_string_append (homedir, info->homedir)) { _dbus_user_database_unlock_system (); return FALSE; } _dbus_user_database_unlock_system (); return TRUE; }
/** * Adds the credentials corresponding to the given username. * * Used among other purposes to parses a desired identity provided * from a client in the auth protocol. On UNIX this means parsing a * UID, on Windows probably parsing an SID string. * * @todo this is broken because it treats OOM and parse error * the same way. Needs a #DBusError. * * @param credentials credentials to fill in * @param username the username * @returns #TRUE if the username existed and we got some credentials */ dbus_bool_t _dbus_credentials_add_from_user (DBusCredentials *credentials, const DBusString *username) { DBusUserDatabase *db; const DBusUserInfo *info; /* FIXME: this can't distinguish ENOMEM from other errors */ if (!_dbus_user_database_lock_system ()) return FALSE; db = _dbus_user_database_get_system (); if (db == NULL) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_user_database_get_username (db, username, &info, NULL)) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_credentials_add_unix_uid(credentials, info->uid)) { _dbus_user_database_unlock_system (); return FALSE; } _dbus_user_database_unlock_system (); return TRUE; }
/** * Gets the home directory for the given user. * * @param username the username * @param homedir string to append home directory to * @returns #TRUE if user existed and we appended their homedir */ dbus_bool_t _dbus_homedir_from_username (const DBusString *username, DBusString *homedir) { DBusUserDatabase *db; const DBusUserInfo *info; /* FIXME: this can't distinguish ENOMEM from other errors */ if (!_dbus_user_database_lock_system ()) return FALSE; db = _dbus_user_database_get_system (); if (db == NULL) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_user_database_get_username (db, username, &info, NULL)) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_string_append (homedir, info->homedir)) { _dbus_user_database_unlock_system (); return FALSE; } _dbus_user_database_unlock_system (); return TRUE; }
/** * Gets user ID and primary group given username * * @param username the username * @param uid_p return location for UID * @param gid_p return location for GID * @returns #TRUE if username existed and we got the UID and GID */ dbus_bool_t _dbus_get_user_id_and_primary_group (const DBusString *username, dbus_uid_t *uid_p, dbus_gid_t *gid_p) { DBusUserDatabase *db; const DBusUserInfo *info; /* FIXME: this can't distinguish ENOMEM from other errors */ if (!_dbus_user_database_lock_system ()) return FALSE; db = _dbus_user_database_get_system (); if (db == NULL) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_user_database_get_username (db, username, &info, NULL)) { _dbus_user_database_unlock_system (); return FALSE; } if (uid_p) *uid_p = info->uid; if (gid_p) *gid_p = info->primary_gid; _dbus_user_database_unlock_system (); return TRUE; }
/** * Adds the credentials corresponding to the given username. * * Used among other purposes to parses a desired identity provided * from a client in the auth protocol. On UNIX this means parsing a * UID, on Windows probably parsing an SID string. * * @todo this is broken because it treats OOM and parse error * the same way. Needs a #DBusError. * * @param credentials credentials to fill in * @param username the username * @returns #TRUE if the username existed and we got some credentials */ dbus_bool_t _dbus_credentials_add_from_user (DBusCredentials *credentials, const DBusString *username) { DBusUserDatabase *db; const DBusUserInfo *info; _dbus_user_database_lock_system (); db = _dbus_user_database_get_system (); if (db == NULL) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_user_database_get_username (db, username, &info, NULL)) { _dbus_user_database_unlock_system (); return FALSE; } if (!_dbus_credentials_add_unix_uid(credentials, info->uid)) { _dbus_user_database_unlock_system (); return FALSE; } _dbus_user_database_unlock_system (); return TRUE; }