in source/credentials_provider_profile.c [41:136]
static int s_profile_file_credentials_provider_get_credentials_async(
struct aws_credentials_provider *provider,
aws_on_get_credentials_callback_fn callback,
void *user_data) {
struct aws_credentials_provider_profile_file_impl *impl = provider->impl;
struct aws_credentials *credentials = NULL;
/*
* Parse config file, if it exists
*/
struct aws_profile_collection *config_profiles =
aws_profile_collection_new_from_file(provider->allocator, impl->config_file_path, AWS_PST_CONFIG);
if (config_profiles != NULL) {
AWS_LOGF_DEBUG(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p) Profile credentials provider successfully built config profile collection from file at (%s)",
(void *)provider,
aws_string_c_str(impl->config_file_path));
} else {
AWS_LOGF_DEBUG(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p) Profile credentials provider failed to build config profile collection from file at (%s)",
(void *)provider,
aws_string_c_str(impl->config_file_path));
}
/*
* Parse credentials file, if it exists
*/
struct aws_profile_collection *credentials_profiles =
aws_profile_collection_new_from_file(provider->allocator, impl->credentials_file_path, AWS_PST_CREDENTIALS);
if (credentials_profiles != NULL) {
AWS_LOGF_DEBUG(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p) Profile credentials provider successfully built credentials profile collection from file at (%s)",
(void *)provider,
aws_string_c_str(impl->credentials_file_path));
} else {
AWS_LOGF_DEBUG(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p) Profile credentials provider failed to build credentials profile collection from file at (%s)",
(void *)provider,
aws_string_c_str(impl->credentials_file_path));
}
/*
* Merge the (up to) two sources into a single unified profile
*/
struct aws_profile_collection *merged_profiles =
aws_profile_collection_new_from_merge(provider->allocator, config_profiles, credentials_profiles);
if (merged_profiles != NULL) {
const struct aws_profile *profile = aws_profile_collection_get_profile(merged_profiles, impl->profile_name);
if (profile != NULL) {
AWS_LOGF_INFO(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p) Profile credentials provider attempting to pull credentials from profile \"%s\"",
(void *)provider,
aws_string_c_str(impl->profile_name));
credentials = aws_credentials_new_from_profile(provider->allocator, profile);
} else {
AWS_LOGF_INFO(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p) Profile credentials provider could not find a profile named \"%s\"",
(void *)provider,
aws_string_c_str(impl->profile_name));
}
} else {
AWS_LOGF_ERROR(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p) Profile credentials provider failed to merge config and credentials profile collections",
(void *)provider);
}
int error_code = AWS_ERROR_SUCCESS;
if (credentials == NULL) {
error_code = aws_last_error();
if (error_code == AWS_ERROR_SUCCESS) {
error_code = AWS_AUTH_CREDENTIALS_PROVIDER_PROFILE_SOURCE_FAILURE;
}
}
callback(credentials, error_code, user_data);
/*
* clean up
*/
aws_credentials_release(credentials);
aws_profile_collection_destroy(merged_profiles);
aws_profile_collection_destroy(config_profiles);
aws_profile_collection_destroy(credentials_profiles);
return AWS_OP_SUCCESS;
}