Skip to content
Snippets Groups Projects
Select Git revision
  • 274bbbe6a0bd56651d48d974e1ccd80cf68689df
  • master default protected
  • arm-aarch-platform
  • arm-platform
  • vjpai-patch-3
  • vjpai-patch-1
  • v1.27.x
  • jtattermusch-patch-2
  • jtattermusch-patch-1
  • update-java-worker-example-in-performance-docs
  • revert-21805-revert-21797-reintroduce_21527
  • revert-21804-tls-credentials-1
  • zhen_cleanup_namecheck
  • revert-21806-revert-21767-revert-21725-revert-21680-cq_ordering
  • vjpai-patch-2
  • revert-21766-tls-credentials-1
  • revert-21640-change_local_tcp_security_level
  • revert-21680-cq_ordering
  • revert-21527-unify_boringssl_deps2
  • revert-20803-grpclb_stabilization
  • fix-kokoro-rvm-key
  • v1.27.0
  • v1.27.0-pre2
  • v1.27.0-pre1
  • v1.26.0
  • v1.26.0-pre1
  • v1.25.0
  • v1.25.0-pre1
  • v1.24.3
  • v1.24.2
  • v1.24.1
  • v1.23.1
  • v1.24.0
  • v1.24.0-pre2
  • v1.24.0-pre1
  • v1.22.1
  • v1.23.0
  • v1.23.0-pre1
  • v1.22.0
  • v1.22.0-pre1
  • v1.21.4
41 results

init_secure.c

Blame
  • init_secure.c 2.87 KiB
    /*
     *
     * Copyright 2015 gRPC authors.
     *
     * Licensed under the Apache License, Version 2.0 (the "License");
     * you may not use this file except in compliance with the License.
     * You may obtain a copy of the License at
     *
     *     http://www.apache.org/licenses/LICENSE-2.0
     *
     * Unless required by applicable law or agreed to in writing, software
     * distributed under the License is distributed on an "AS IS" BASIS,
     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     * See the License for the specific language governing permissions and
     * limitations under the License.
     *
     */
    
    #include <grpc/support/port_platform.h>
    
    #include "src/core/lib/surface/init.h"
    
    #include <limits.h>
    #include <string.h>
    
    #include "src/core/lib/debug/trace.h"
    #include "src/core/lib/security/credentials/credentials.h"
    #include "src/core/lib/security/transport/auth_filters.h"
    #include "src/core/lib/security/transport/secure_endpoint.h"
    #include "src/core/lib/security/transport/security_connector.h"
    #include "src/core/lib/security/transport/security_handshaker.h"
    #include "src/core/lib/surface/channel_init.h"
    #include "src/core/tsi/transport_security_interface.h"
    
    void grpc_security_pre_init(void) {
      grpc_register_tracer("secure_endpoint", &grpc_trace_secure_endpoint);
      grpc_register_tracer("transport_security", &tsi_tracing_enabled);
    }
    
    static bool maybe_prepend_client_auth_filter(
        grpc_exec_ctx *exec_ctx, grpc_channel_stack_builder *builder, void *arg) {
      const grpc_channel_args *args =
          grpc_channel_stack_builder_get_channel_arguments(builder);
      if (args) {
        for (size_t i = 0; i < args->num_args; i++) {
          if (0 == strcmp(GRPC_ARG_SECURITY_CONNECTOR, args->args[i].key)) {
            return grpc_channel_stack_builder_prepend_filter(
                builder, &grpc_client_auth_filter, NULL, NULL);
          }
        }
      }
      return true;
    }
    
    static bool maybe_prepend_server_auth_filter(
        grpc_exec_ctx *exec_ctx, grpc_channel_stack_builder *builder, void *arg) {
      const grpc_channel_args *args =
          grpc_channel_stack_builder_get_channel_arguments(builder);
      if (args) {
        for (size_t i = 0; i < args->num_args; i++) {
          if (0 == strcmp(GRPC_SERVER_CREDENTIALS_ARG, args->args[i].key)) {
            return grpc_channel_stack_builder_prepend_filter(
                builder, &grpc_server_auth_filter, NULL, NULL);
          }
        }
      }
      return true;
    }
    
    void grpc_register_security_filters(void) {
      grpc_channel_init_register_stage(GRPC_CLIENT_SUBCHANNEL, INT_MAX,
                                       maybe_prepend_client_auth_filter, NULL);
      grpc_channel_init_register_stage(GRPC_CLIENT_DIRECT_CHANNEL, INT_MAX,
                                       maybe_prepend_client_auth_filter, NULL);
      grpc_channel_init_register_stage(GRPC_SERVER_CHANNEL, INT_MAX,
                                       maybe_prepend_server_auth_filter, NULL);
    }
    
    void grpc_security_init() { grpc_security_register_handshaker_factories(); }