|
|
|
@ -75,11 +75,11 @@ typedef struct { |
|
|
|
|
grpc_mdstr *status_key; |
|
|
|
|
} channel_data; |
|
|
|
|
|
|
|
|
|
static void bubble_up_error(grpc_call_element *elem, const char *error_msg) { |
|
|
|
|
static void bubble_up_error(grpc_call_element *elem, grpc_status_code status, |
|
|
|
|
const char *error_msg) { |
|
|
|
|
call_data *calld = elem->call_data; |
|
|
|
|
gpr_log(GPR_ERROR, "Client side authentication failure: %s", error_msg); |
|
|
|
|
grpc_transport_stream_op_add_cancellation(&calld->op, |
|
|
|
|
GRPC_STATUS_UNAUTHENTICATED); |
|
|
|
|
grpc_transport_stream_op_add_cancellation(&calld->op, status); |
|
|
|
|
grpc_call_next_op(elem, &calld->op); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -94,7 +94,8 @@ static void on_credentials_metadata(void *user_data, |
|
|
|
|
grpc_metadata_batch *mdb; |
|
|
|
|
size_t i; |
|
|
|
|
if (status != GRPC_CREDENTIALS_OK) { |
|
|
|
|
bubble_up_error(elem, "Credentials failed to get metadata."); |
|
|
|
|
bubble_up_error(elem, GRPC_STATUS_UNAUTHENTICATED, |
|
|
|
|
"Credentials failed to get metadata."); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
|
GPR_ASSERT(num_md <= MAX_CREDENTIALS_METADATA_COUNT); |
|
|
|
@ -154,7 +155,7 @@ static void send_security_metadata(grpc_call_element *elem, |
|
|
|
|
if (channel_creds_has_md && call_creds_has_md) { |
|
|
|
|
calld->creds = grpc_composite_credentials_create(channel_creds, ctx->creds); |
|
|
|
|
if (calld->creds == NULL) { |
|
|
|
|
bubble_up_error(elem, |
|
|
|
|
bubble_up_error(elem, GRPC_STATUS_INVALID_ARGUMENT, |
|
|
|
|
"Incompatible credentials set on channel and call."); |
|
|
|
|
return; |
|
|
|
|
} |
|
|
|
@ -182,7 +183,7 @@ static void on_host_checked(void *user_data, grpc_security_status status) { |
|
|
|
|
char *error_msg; |
|
|
|
|
gpr_asprintf(&error_msg, "Invalid host %s set in :authority metadata.", |
|
|
|
|
grpc_mdstr_as_c_string(calld->host)); |
|
|
|
|
bubble_up_error(elem, error_msg); |
|
|
|
|
bubble_up_error(elem, GRPC_STATUS_FAILED_PRECONDITION, error_msg); |
|
|
|
|
gpr_free(error_msg); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
@ -252,7 +253,7 @@ static void auth_start_transport_op(grpc_call_element *elem, |
|
|
|
|
gpr_asprintf(&error_msg, |
|
|
|
|
"Invalid host %s set in :authority metadata.", |
|
|
|
|
call_host); |
|
|
|
|
bubble_up_error(elem, error_msg); |
|
|
|
|
bubble_up_error(elem, GRPC_STATUS_FAILED_PRECONDITION, error_msg); |
|
|
|
|
gpr_free(error_msg); |
|
|
|
|
} |
|
|
|
|
return; /* early exit */ |
|
|
|
|