aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/core/lib/security
diff options
context:
space:
mode:
authorGravatar Craig Tiller <ctiller@google.com>2016-11-23 14:47:11 -0800
committerGravatar Craig Tiller <ctiller@google.com>2016-11-23 14:47:11 -0800
commite150fff57ef947998ce8f45da112ed45ae01bacb (patch)
treeab120986e7316ba63977d1df6b43b981e43037fc /src/core/lib/security
parent5059ddf58b36f1a66e4ee1cee1486362ab8cdd1f (diff)
Fix some auth filtering bugs
Diffstat (limited to 'src/core/lib/security')
-rw-r--r--src/core/lib/security/transport/client_auth_filter.c8
-rw-r--r--src/core/lib/security/transport/server_auth_filter.c23
2 files changed, 18 insertions, 13 deletions
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 {