in source/credentials_provider_process.c [24:92]
static int s_get_credentials_from_process(
struct aws_credentials_provider *provider,
aws_on_get_credentials_callback_fn callback,
void *user_data) {
struct aws_credentials_provider_process_impl *impl = provider->impl;
struct aws_credentials *credentials = NULL;
struct aws_run_command_options options = {
.command = aws_string_c_str(impl->command),
};
struct aws_run_command_result result;
int ret = AWS_OP_ERR;
if (aws_run_command_result_init(provider->allocator, &result)) {
goto on_finish;
}
if (aws_run_command(provider->allocator, &options, &result) || result.ret_code || !result.std_out) {
AWS_LOGF_ERROR(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p) Failed to source credentials from running process credentials provider with command: %s, err:%s",
(void *)provider,
aws_string_c_str(impl->command),
aws_error_str(aws_last_error()));
goto on_finish;
}
struct aws_parse_credentials_from_json_doc_options parse_options = {
.access_key_id_name = "AccessKeyId",
.secrete_access_key_name = "SecretAccessKey",
.token_name = "Token",
.expiration_name = "Expiration",
.token_required = false,
.expiration_required = false,
};
credentials =
aws_parse_credentials_from_json_document(provider->allocator, aws_string_c_str(result.std_out), &parse_options);
if (!credentials) {
AWS_LOGF_INFO(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p) Process credentials provider failed to parse credentials from command output (output is not "
"logged in case sensitive information).",
(void *)provider);
goto on_finish;
}
AWS_LOGF_INFO(
AWS_LS_AUTH_CREDENTIALS_PROVIDER,
"(id=%p) Process credentials provider successfully sourced credentials.",
(void *)provider);
ret = AWS_OP_SUCCESS;
on_finish:
;
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_PROCESS_SOURCE_FAILURE;
}
}
callback(credentials, error_code, user_data);
aws_run_command_result_cleanup(&result);
aws_credentials_release(credentials);
return ret;
}