Create client side auth context in the auth filter

pull/2313/head
yang-g 10 years ago
parent a96ba40f0d
commit d8c466ece1
  1. 22
      src/core/security/client_auth_filter.c

@ -56,6 +56,7 @@ typedef struct {
grpc_transport_op op;
size_t op_md_idx;
int sent_initial_metadata;
gpr_uint8 security_context_set;
grpc_linked_mdelem md_links[MAX_CREDENTIALS_METADATA_COUNT];
} call_data;
@ -193,8 +194,26 @@ static void auth_start_transport_op(grpc_call_element *elem,
channel_data *chand = elem->channel_data;
grpc_linked_mdelem *l;
size_t i;
grpc_client_security_context* sec_ctx = NULL;
/* TODO(jboeuf): write the call auth context. */
if (calld->security_context_set == 0) {
calld->security_context_set = 1;
GPR_ASSERT(op->context);
if (op->context[GRPC_CONTEXT_SECURITY].value == NULL) {
op->context[GRPC_CONTEXT_SECURITY].value =
grpc_client_security_context_create();
op->context[GRPC_CONTEXT_SECURITY].destroy =
grpc_client_security_context_destroy;
}
sec_ctx = op->context[GRPC_CONTEXT_SECURITY].value;
if (sec_ctx->auth_context == NULL) {
sec_ctx->auth_context =
grpc_auth_context_ref(chand->security_connector->base.auth_context);
} else {
sec_ctx->auth_context->chained =
grpc_auth_context_ref(chand->security_connector->base.auth_context);
}
}
if (op->send_ops && !calld->sent_initial_metadata) {
size_t nops = op->send_ops->nops;
@ -259,6 +278,7 @@ static void init_call_elem(grpc_call_element *elem,
calld->host = NULL;
calld->method = NULL;
calld->sent_initial_metadata = 0;
calld->security_context_set = 0;
GPR_ASSERT(!initial_op || !initial_op->send_ops);
}

Loading…
Cancel
Save