From e150fff57ef947998ce8f45da112ed45ae01bacb Mon Sep 17 00:00:00 2001 From: Craig Tiller Date: Wed, 23 Nov 2016 14:47:11 -0800 Subject: Fix some auth filtering bugs --- .../lib/security/transport/client_auth_filter.c | 8 +++++++- .../lib/security/transport/server_auth_filter.c | 23 +++++++++++----------- 2 files changed, 18 insertions(+), 13 deletions(-) (limited to 'src/core/lib/security') diff --git a/src/core/lib/security/transport/client_auth_filter.c b/src/core/lib/security/transport/client_auth_filter.c index 43054bcfb4..80fdbe68eb 100644 --- a/src/core/lib/security/transport/client_auth_filter.c +++ b/src/core/lib/security/transport/client_auth_filter.c @@ -102,7 +102,13 @@ static void bubble_up_error(grpc_exec_ctx *exec_ctx, grpc_call_element *elem, grpc_call_next_op(exec_ctx, elem, &calld->op); } -static void add_error(grpc_error **combined, grpc_error *error) { abort(); } +static void add_error(grpc_error **combined, grpc_error *error) { + if (error == GRPC_ERROR_NONE) return; + if (*combined == GRPC_ERROR_NONE) { + *combined = GRPC_ERROR_CREATE("Client auth metadata plugin error"); + } + *combined = grpc_error_add_child(*combined, error); +} static void on_credentials_metadata(grpc_exec_ctx *exec_ctx, void *user_data, grpc_credentials_md *md_elems, diff --git a/src/core/lib/security/transport/server_auth_filter.c b/src/core/lib/security/transport/server_auth_filter.c index ed9d92b74e..34f5bbf8f4 100644 --- a/src/core/lib/security/transport/server_auth_filter.c +++ b/src/core/lib/security/transport/server_auth_filter.c @@ -83,9 +83,9 @@ static grpc_metadata_array metadata_batch_to_md_array( return result; } -#if 0 -static grpc_mdelem remove_consumed_md(grpc_exec_ctx *exec_ctx, void *user_data, - grpc_mdelem md) { +static grpc_filtered_mdelem remove_consumed_md(grpc_exec_ctx *exec_ctx, + void *user_data, + grpc_mdelem md) { grpc_call_element *elem = user_data; call_data *calld = elem->call_data; size_t i; @@ -93,11 +93,10 @@ static grpc_mdelem remove_consumed_md(grpc_exec_ctx *exec_ctx, void *user_data, const grpc_metadata *consumed_md = &calld->consumed_md[i]; if (grpc_slice_eq(GRPC_MDKEY(md), consumed_md->key) && grpc_slice_eq(GRPC_MDVALUE(md), consumed_md->value)) - return GRPC_MDNULL; + return GRPC_FILTERED_REMOVE(); } - return md; + return GRPC_FILTERED_MDELEM(md); } -#endif static void destroy_op(grpc_exec_ctx *exec_ctx, void *arg, grpc_error *error) { gpr_free(arg); @@ -122,12 +121,12 @@ static void on_md_processing_done( if (status == GRPC_STATUS_OK) { calld->consumed_md = consumed_md; calld->num_consumed_md = num_consumed_md; -#if 0 - grpc_metadata_batch_filter(&exec_ctx, calld->recv_initial_metadata, - remove_consumed_md, elem); -#else - if (num_consumed_md) abort(); -#endif + /* TODO(ctiller): propagate error */ + GRPC_LOG_IF_ERROR( + "grpc_metadata_batch_filter", + grpc_metadata_batch_filter(&exec_ctx, calld->recv_initial_metadata, + remove_consumed_md, elem, + "Response metadata filtering error")); grpc_metadata_array_destroy(&calld->md); grpc_exec_ctx_sched(&exec_ctx, calld->on_done_recv, GRPC_ERROR_NONE, NULL); } else { -- cgit v1.2.3