grpc 1.33.0.pre1 → 1.34.0
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of grpc might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/Makefile +342 -134
- data/include/grpc/grpc.h +1 -2
- data/include/grpc/grpc_security.h +149 -172
- data/include/grpc/impl/codegen/grpc_types.h +9 -2
- data/include/grpc/impl/codegen/port_platform.h +22 -55
- data/src/core/ext/filters/client_channel/client_channel.cc +11 -34
- data/src/core/ext/filters/client_channel/config_selector.h +2 -3
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +4 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.cc +5 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/child_policy_handler.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +80 -71
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_client_stats.cc +3 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +47 -17
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +2 -2
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +8 -5
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +16 -243
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +53 -17
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +809 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +20 -25
- data/src/core/ext/filters/client_channel/resolver.cc +3 -1
- data/src/core/ext/filters/client_channel/resolver.h +4 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +1 -1
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +20 -0
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +66 -7
- data/src/core/ext/filters/client_channel/resolver_registry.cc +4 -4
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +13 -25
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +2 -2
- data/src/core/ext/filters/client_channel/retry_throttle.h +1 -1
- data/src/core/ext/filters/client_channel/server_address.h +0 -4
- data/src/core/ext/filters/client_channel/service_config.cc +3 -1
- data/src/core/ext/filters/client_channel/service_config.h +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +18 -15
- data/src/core/ext/filters/client_channel/subchannel.h +2 -2
- data/src/core/ext/filters/client_channel/subchannel_interface.h +7 -15
- data/src/core/ext/filters/client_channel/subchannel_pool_interface.h +6 -2
- data/src/core/ext/filters/deadline/deadline_filter.cc +83 -77
- data/src/core/ext/filters/deadline/deadline_filter.h +7 -11
- data/src/core/ext/filters/http/client/http_client_filter.cc +1 -1
- data/src/core/ext/filters/http/server/http_server_filter.cc +3 -3
- data/src/core/ext/filters/max_age/max_age_filter.cc +1 -1
- data/src/core/ext/transport/chttp2/client/chttp2_connector.h +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +17 -3
- data/src/core/ext/transport/chttp2/transport/bin_decoder.cc +7 -7
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +4 -24
- data/src/core/ext/transport/chttp2/transport/flow_control.h +2 -2
- data/src/core/ext/transport/chttp2/transport/frame_goaway.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +12 -8
- data/src/core/ext/transport/chttp2/transport/internal.h +0 -1
- data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
- data/src/core/ext/transport/chttp2/transport/writing.cc +1 -2
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/deprecation.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.c +41 -0
- data/src/core/ext/upbdefs-generated/envoy/annotations/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +254 -0
- data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.h +105 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.c +100 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/circuit_breaker.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +558 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +145 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/filter.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +133 -0
- data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.c +127 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/address.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/backoff.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +266 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +125 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +143 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/event_service_config.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/extension.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.c +263 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/grpc_service.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +233 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/http_uri.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.c +228 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/protocol.upbdefs.h +80 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +46 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/socket_option.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +110 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.c +113 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint_components.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.c +146 -0
- data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/load_report.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.c +50 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/api_listener.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +190 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +185 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +97 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +915 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +280 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.c +71 -0
- data/src/core/ext/upbdefs-generated/envoy/config/route/v3/scoped_route.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +511 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.h +115 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +48 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +166 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +105 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +249 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/service/cluster/v3/cds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.c +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/ads.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +152 -0
- data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +60 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +83 -0
- data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +82 -0
- data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +83 -0
- data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +86 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.c +74 -0
- data/src/core/ext/upbdefs-generated/envoy/service/route/v3/srds.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.c +64 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/metadata.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/number.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.c +53 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/path.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.c +73 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/regex.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +72 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.c +81 -0
- data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/value.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.c +92 -0
- data/src/core/ext/upbdefs-generated/envoy/type/metadata/v3/metadata.upbdefs.h +65 -0
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.c +95 -0
- data/src/core/ext/upbdefs-generated/envoy/type/tracing/v3/custom_tag.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.c +34 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/http.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.c +59 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/percent.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.c +54 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/range.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.c +47 -0
- data/src/core/ext/upbdefs-generated/envoy/type/v3/semantic_version.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.c +40 -0
- data/src/core/ext/upbdefs-generated/google/api/annotations.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.c +61 -0
- data/src/core/ext/upbdefs-generated/google/api/http.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.c +38 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/any.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.c +386 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/descriptor.upbdefs.h +165 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/duration.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.c +37 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/empty.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.c +65 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/struct.upbdefs.h +50 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.c +39 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/timestamp.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.c +66 -0
- data/src/core/ext/upbdefs-generated/google/protobuf/wrappers.upbdefs.h +75 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/google/rpc/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.c +70 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/migrate.upbdefs.h +45 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/security.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.c +33 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/sensitive.upbdefs.h +30 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/status.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.c +43 -0
- data/src/core/ext/upbdefs-generated/udpa/annotations/versioning.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +42 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +62 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +45 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +49 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +68 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +51 -0
- data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +35 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +307 -0
- data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.h +145 -0
- data/src/core/ext/xds/certificate_provider_factory.h +7 -5
- data/src/core/ext/xds/certificate_provider_store.cc +84 -0
- data/src/core/ext/xds/certificate_provider_store.h +65 -8
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +119 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +72 -0
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +28 -140
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +6 -4
- data/src/core/ext/xds/xds_api.cc +241 -718
- data/src/core/ext/xds/xds_api.h +50 -9
- data/src/core/ext/xds/xds_bootstrap.cc +172 -25
- data/src/core/ext/xds/xds_bootstrap.h +23 -7
- data/src/core/ext/xds/xds_certificate_provider.cc +240 -0
- data/src/core/ext/xds/xds_certificate_provider.h +74 -0
- data/src/core/ext/xds/xds_client.cc +161 -128
- data/src/core/ext/xds/xds_client.h +12 -11
- data/src/core/ext/xds/xds_client_stats.cc +41 -4
- data/src/core/ext/xds/xds_client_stats.h +2 -2
- data/src/core/lib/channel/channel_args.cc +2 -1
- data/src/core/lib/channel/channel_trace.cc +4 -2
- data/src/core/lib/channel/channelz.h +2 -2
- data/src/core/lib/channel/handshaker.h +2 -2
- data/src/core/lib/compression/compression.cc +8 -4
- data/src/core/lib/compression/compression_internal.cc +10 -5
- data/src/core/lib/compression/compression_internal.h +2 -1
- data/src/core/lib/compression/stream_compression_identity.cc +1 -3
- data/src/core/lib/debug/stats_data.cc +1 -0
- data/src/core/lib/gpr/cpu_iphone.cc +10 -2
- data/src/core/lib/gpr/log_linux.cc +17 -3
- data/src/core/lib/gpr/log_posix.cc +13 -1
- data/src/core/lib/gpr/log_windows.cc +16 -4
- data/src/core/lib/gpr/murmur_hash.cc +1 -1
- data/src/core/lib/gpr/string.cc +1 -1
- data/src/core/lib/gpr/time_precise.cc +3 -2
- data/src/core/lib/gpr/tls.h +4 -0
- data/src/core/lib/gpr/tls_msvc.h +2 -0
- data/src/core/lib/gpr/tls_stdcpp.h +48 -0
- data/src/core/lib/gpr/useful.h +5 -4
- data/src/core/lib/gprpp/dual_ref_counted.h +44 -49
- data/src/core/lib/gprpp/examine_stack.cc +43 -0
- data/src/core/lib/gprpp/examine_stack.h +46 -0
- data/src/core/lib/gprpp/fork.cc +2 -2
- data/src/core/lib/gprpp/manual_constructor.h +1 -1
- data/src/core/lib/gprpp/orphanable.h +4 -8
- data/src/core/lib/gprpp/ref_counted.h +40 -46
- data/src/core/lib/gprpp/ref_counted_ptr.h +9 -11
- data/src/core/lib/{security/authorization/mock_cel/statusor.h → gprpp/stat.h} +13 -25
- data/src/core/lib/gprpp/stat_posix.cc +49 -0
- data/src/core/lib/gprpp/stat_windows.cc +48 -0
- data/src/core/lib/gprpp/thd.h +2 -2
- data/src/core/lib/gprpp/thd_posix.cc +36 -36
- data/src/core/lib/http/parser.cc +46 -25
- data/src/core/lib/iomgr/error.cc +2 -1
- data/src/core/lib/iomgr/ev_epollex_linux.cc +8 -4
- data/src/core/lib/iomgr/exec_ctx.cc +1 -1
- data/src/core/lib/iomgr/executor/mpmcqueue.h +5 -5
- data/src/core/lib/iomgr/executor/threadpool.h +3 -3
- data/src/core/lib/iomgr/parse_address.cc +84 -6
- data/src/core/lib/iomgr/parse_address.h +20 -0
- data/src/core/lib/iomgr/poller/eventmanager_libuv.cc +2 -1
- data/src/core/lib/iomgr/python_util.h +3 -3
- data/src/core/lib/iomgr/resolve_address_posix.cc +1 -5
- data/src/core/lib/iomgr/tcp_posix.cc +3 -2
- data/src/core/lib/iomgr/timer_custom.cc +2 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +27 -15
- data/src/core/lib/iomgr/unix_sockets_posix.h +5 -0
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +7 -0
- data/src/core/lib/iomgr/wakeup_fd_pipe.cc +2 -2
- data/src/core/lib/json/json.h +2 -2
- data/src/core/lib/json/json_reader.cc +8 -4
- data/src/core/lib/json/json_util.h +167 -0
- data/src/core/lib/json/json_writer.cc +2 -1
- data/src/core/lib/security/authorization/mock_cel/cel_expr_builder_factory.h +3 -1
- data/src/core/lib/security/authorization/mock_cel/cel_expression.h +5 -4
- data/src/core/lib/security/authorization/mock_cel/cel_value.h +4 -0
- data/src/core/lib/security/authorization/mock_cel/evaluator_core.h +6 -6
- data/src/core/lib/security/authorization/mock_cel/flat_expr_builder.h +10 -9
- data/src/core/lib/security/context/security_context.h +3 -1
- data/src/core/lib/security/credentials/credentials.cc +1 -1
- data/src/core/lib/security/credentials/credentials.h +3 -3
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +208 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.h +73 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +311 -0
- data/src/core/lib/security/credentials/external/external_account_credentials.h +118 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +136 -0
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +49 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +211 -0
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +59 -0
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +51 -0
- data/src/core/lib/security/credentials/jwt/json_token.cc +5 -2
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +4 -3
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +5 -1
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +2 -2
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +35 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +12 -8
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +78 -0
- data/src/core/lib/security/{certificate_provider.h → credentials/tls/grpc_tls_certificate_provider.h} +32 -18
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +77 -149
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +58 -187
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +16 -12
- data/src/core/lib/security/credentials/tls/tls_credentials.h +2 -2
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +88 -0
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +70 -0
- data/src/core/lib/security/security_connector/load_system_roots.h +4 -0
- data/src/core/lib/security/security_connector/load_system_roots_linux.h +2 -0
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +2 -2
- data/src/core/lib/security/security_connector/security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.h +4 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +4 -2
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +293 -275
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +106 -61
- data/src/core/lib/security/transport/security_handshaker.cc +1 -1
- data/src/core/lib/security/transport/server_auth_filter.cc +2 -1
- data/src/core/lib/security/util/json_util.h +1 -0
- data/src/core/lib/slice/slice.cc +7 -4
- data/src/core/lib/slice/slice_buffer.cc +2 -1
- data/src/core/lib/slice/slice_intern.cc +2 -2
- data/src/core/lib/surface/call.cc +9 -8
- data/src/core/lib/surface/completion_queue.cc +7 -6
- data/src/core/lib/surface/server.cc +4 -2
- data/src/core/lib/surface/server.h +2 -2
- data/src/core/lib/surface/validate_metadata.h +3 -0
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/authority_override.h +2 -0
- data/src/core/lib/transport/bdp_estimator.cc +1 -1
- data/src/core/lib/transport/byte_stream.h +3 -3
- data/src/core/lib/transport/connectivity_state.h +3 -3
- data/src/core/lib/transport/metadata.h +2 -2
- data/src/core/lib/transport/timeout_encoding.cc +4 -4
- data/src/core/lib/transport/transport.cc +5 -3
- data/src/core/lib/transport/transport.h +1 -1
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -4
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +4 -3
- data/src/core/tsi/fake_transport_security.cc +1 -0
- data/src/core/tsi/local_transport_security.cc +5 -1
- data/src/core/tsi/local_transport_security.h +6 -7
- data/src/core/tsi/ssl/session_cache/ssl_session.h +3 -0
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +4 -1
- data/src/core/tsi/ssl_transport_security.cc +14 -7
- data/src/core/tsi/ssl_transport_security.h +3 -0
- data/src/core/tsi/transport_security.cc +4 -2
- data/src/ruby/ext/grpc/extconf.rb +1 -1
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +22 -14
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +36 -24
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/third_party/abseil-cpp/absl/algorithm/container.h +59 -22
- data/third_party/abseil-cpp/absl/base/attributes.h +99 -38
- data/third_party/abseil-cpp/absl/base/call_once.h +1 -1
- data/third_party/abseil-cpp/absl/base/casts.h +9 -6
- data/third_party/abseil-cpp/absl/base/config.h +60 -17
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.h +428 -335
- data/third_party/abseil-cpp/absl/base/internal/bits.h +17 -16
- data/third_party/abseil-cpp/absl/base/internal/direct_mmap.h +5 -0
- data/third_party/abseil-cpp/absl/base/internal/dynamic_annotations.h +398 -0
- data/third_party/abseil-cpp/absl/base/internal/invoke.h +4 -4
- data/third_party/abseil-cpp/absl/base/internal/low_level_alloc.cc +1 -1
- data/third_party/abseil-cpp/absl/base/internal/low_level_scheduling.h +29 -1
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.cc +2 -2
- data/third_party/abseil-cpp/absl/base/internal/raw_logging.h +7 -5
- data/third_party/abseil-cpp/absl/base/internal/spinlock.cc +25 -38
- data/third_party/abseil-cpp/absl/base/internal/spinlock.h +19 -25
- data/third_party/abseil-cpp/absl/base/internal/spinlock_linux.inc +8 -0
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.cc +28 -5
- data/third_party/abseil-cpp/absl/base/internal/sysinfo.h +8 -0
- data/third_party/abseil-cpp/absl/base/internal/tsan_mutex_interface.h +3 -1
- data/third_party/abseil-cpp/absl/base/internal/unaligned_access.h +2 -2
- data/third_party/abseil-cpp/absl/base/internal/unscaledcycleclock.h +3 -3
- data/third_party/abseil-cpp/absl/base/macros.h +36 -109
- data/third_party/abseil-cpp/absl/base/optimization.h +61 -1
- data/third_party/abseil-cpp/absl/base/options.h +31 -4
- data/third_party/abseil-cpp/absl/base/policy_checks.h +1 -1
- data/third_party/abseil-cpp/absl/base/thread_annotations.h +94 -39
- data/third_party/abseil-cpp/absl/container/fixed_array.h +42 -25
- data/third_party/abseil-cpp/absl/container/flat_hash_set.h +2 -1
- data/third_party/abseil-cpp/absl/container/inlined_vector.h +33 -36
- data/third_party/abseil-cpp/absl/container/internal/common.h +6 -2
- data/third_party/abseil-cpp/absl/container/internal/compressed_tuple.h +33 -8
- data/third_party/abseil-cpp/absl/container/internal/container_memory.h +49 -29
- data/third_party/abseil-cpp/absl/container/internal/hash_function_defaults.h +15 -0
- data/third_party/abseil-cpp/absl/container/internal/hash_policy_traits.h +24 -7
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.cc +2 -1
- data/third_party/abseil-cpp/absl/container/internal/hashtablez_sampler.h +35 -11
- data/third_party/abseil-cpp/absl/container/internal/have_sse.h +10 -9
- data/third_party/abseil-cpp/absl/container/internal/layout.h +7 -5
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_set.h +55 -34
- data/third_party/abseil-cpp/absl/debugging/internal/address_is_readable.cc +5 -4
- data/third_party/abseil-cpp/absl/debugging/internal/demangle.cc +66 -16
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_aarch64-inl.inc +4 -0
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_arm-inl.inc +13 -4
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_config.h +43 -24
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_generic-inl.inc +12 -3
- data/third_party/abseil-cpp/absl/debugging/internal/stacktrace_win32-inl.inc +10 -2
- data/third_party/abseil-cpp/absl/debugging/internal/symbolize.h +22 -1
- data/third_party/abseil-cpp/absl/debugging/internal/vdso_support.cc +0 -21
- data/third_party/abseil-cpp/absl/debugging/symbolize.cc +12 -1
- data/third_party/abseil-cpp/absl/debugging/symbolize_darwin.inc +101 -0
- data/third_party/abseil-cpp/absl/debugging/symbolize_elf.inc +100 -20
- data/third_party/abseil-cpp/absl/functional/bind_front.h +184 -0
- data/third_party/abseil-cpp/absl/functional/function_ref.h +1 -1
- data/third_party/abseil-cpp/absl/functional/internal/front_binder.h +95 -0
- data/third_party/abseil-cpp/absl/functional/internal/function_ref.h +2 -2
- data/third_party/abseil-cpp/absl/hash/hash.h +6 -5
- data/third_party/abseil-cpp/absl/hash/internal/hash.h +73 -65
- data/third_party/abseil-cpp/absl/memory/memory.h +4 -0
- data/third_party/abseil-cpp/absl/meta/type_traits.h +2 -8
- data/third_party/abseil-cpp/absl/numeric/int128.cc +13 -27
- data/third_party/abseil-cpp/absl/numeric/int128.h +16 -15
- data/third_party/abseil-cpp/absl/status/internal/status_internal.h +51 -0
- data/third_party/abseil-cpp/absl/status/status.cc +4 -6
- data/third_party/abseil-cpp/absl/status/status.h +502 -113
- data/third_party/abseil-cpp/absl/status/status_payload_printer.cc +5 -10
- data/third_party/abseil-cpp/absl/strings/charconv.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/cord.cc +91 -112
- data/third_party/abseil-cpp/absl/strings/cord.h +360 -205
- data/third_party/abseil-cpp/absl/strings/escaping.cc +9 -9
- data/third_party/abseil-cpp/absl/strings/internal/char_map.h +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/charconv_bigint.h +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/charconv_parse.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/internal/cord_internal.h +45 -23
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.cc +222 -136
- data/third_party/abseil-cpp/absl/strings/internal/str_format/arg.h +136 -64
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.cc +1 -1
- data/third_party/abseil-cpp/absl/strings/internal/str_format/bind.h +14 -21
- data/third_party/abseil-cpp/absl/strings/internal/str_format/checker.h +7 -14
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.cc +31 -7
- data/third_party/abseil-cpp/absl/strings/internal/str_format/extension.h +147 -135
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.cc +999 -87
- data/third_party/abseil-cpp/absl/strings/internal/str_format/float_conversion.h +3 -3
- data/third_party/abseil-cpp/absl/strings/internal/str_format/output.h +4 -12
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.cc +8 -6
- data/third_party/abseil-cpp/absl/strings/internal/str_format/parser.h +13 -11
- data/third_party/abseil-cpp/absl/strings/internal/str_split_internal.h +2 -2
- data/third_party/abseil-cpp/absl/strings/str_cat.cc +4 -4
- data/third_party/abseil-cpp/absl/strings/str_cat.h +1 -1
- data/third_party/abseil-cpp/absl/strings/str_format.h +289 -13
- data/third_party/abseil-cpp/absl/strings/str_split.cc +2 -2
- data/third_party/abseil-cpp/absl/strings/str_split.h +1 -0
- data/third_party/abseil-cpp/absl/strings/string_view.h +26 -19
- data/third_party/abseil-cpp/absl/strings/substitute.cc +5 -5
- data/third_party/abseil-cpp/absl/strings/substitute.h +32 -29
- data/third_party/abseil-cpp/absl/synchronization/internal/create_thread_identity.cc +3 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +3 -3
- data/third_party/abseil-cpp/absl/synchronization/internal/kernel_timeout.h +28 -28
- data/third_party/abseil-cpp/absl/synchronization/internal/mutex_nonprod.inc +4 -16
- data/third_party/abseil-cpp/absl/synchronization/internal/per_thread_sem.h +1 -1
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.cc +8 -0
- data/third_party/abseil-cpp/absl/synchronization/internal/waiter.h +2 -2
- data/third_party/abseil-cpp/absl/synchronization/mutex.cc +75 -64
- data/third_party/abseil-cpp/absl/synchronization/mutex.h +15 -6
- data/third_party/abseil-cpp/absl/time/civil_time.cc +9 -9
- data/third_party/abseil-cpp/absl/time/clock.cc +3 -3
- data/third_party/abseil-cpp/absl/time/duration.cc +90 -59
- data/third_party/abseil-cpp/absl/time/format.cc +43 -36
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/civil_time_detail.h +26 -16
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/time_zone.h +4 -2
- data/third_party/abseil-cpp/absl/time/internal/cctz/include/cctz/zone_info_source.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_format.cc +136 -29
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.cc +13 -21
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_impl.h +1 -1
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.cc +136 -129
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_info.h +4 -5
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/time_zone_libc.cc +8 -7
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/tzfile.h +6 -6
- data/third_party/abseil-cpp/absl/time/internal/cctz/src/zone_info_source.cc +2 -1
- data/third_party/abseil-cpp/absl/time/time.h +15 -16
- data/third_party/abseil-cpp/absl/types/internal/variant.h +4 -4
- data/third_party/abseil-cpp/absl/types/optional.h +9 -9
- data/third_party/abseil-cpp/absl/types/span.h +49 -36
- data/third_party/abseil-cpp/absl/utility/utility.h +2 -2
- data/third_party/address_sorting/include/address_sorting/address_sorting.h +2 -0
- data/third_party/boringssl-with-bazel/err_data.c +340 -336
- data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +2 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/e_aes.c +173 -35
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +46 -7
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +8 -2
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +90 -63
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +60 -60
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +179 -47
- data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +766 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509/algorithm.c +10 -0
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/pcy_data.c +5 -3
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +14 -14
- data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +24 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +7 -5
- data/third_party/boringssl-with-bazel/src/include/openssl/base.h +5 -2
- data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/des.h +6 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/opensslconf.h +3 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +202 -134
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +55 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +31 -23
- data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +435 -394
- data/third_party/boringssl-with-bazel/src/ssl/bio_ssl.cc +18 -5
- data/third_party/boringssl-with-bazel/src/ssl/handoff.cc +35 -0
- data/third_party/boringssl-with-bazel/src/ssl/internal.h +36 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +42 -1
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +67 -0
- data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +11 -14
- data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +216 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +53 -11
- data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +133 -39
- data/third_party/upb/upb/def.c +2169 -0
- data/third_party/upb/upb/def.h +330 -0
- data/third_party/upb/upb/def.hpp +525 -0
- data/third_party/upb/upb/reflection.c +391 -0
- data/third_party/upb/upb/reflection.h +168 -0
- data/third_party/upb/upb/text_encode.c +398 -0
- data/third_party/upb/upb/text_encode.h +35 -0
- metadata +227 -37
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds_drop.cc +0 -571
- data/third_party/abseil-cpp/absl/base/dynamic_annotations.cc +0 -129
@@ -40,18 +40,18 @@ bool CredentialOptionSanityCheck(const grpc_tls_credentials_options* options,
|
|
40
40
|
gpr_log(GPR_ERROR, "TLS credentials options is nullptr.");
|
41
41
|
return false;
|
42
42
|
}
|
43
|
-
|
44
|
-
options->credential_reload_config() == nullptr) {
|
45
|
-
gpr_log(GPR_ERROR,
|
46
|
-
"TLS credentials options must specify either key materials or "
|
47
|
-
"credential reload config.");
|
48
|
-
return false;
|
49
|
-
}
|
43
|
+
// TODO(ZhenLian): remove this when it is also supported on server side.
|
50
44
|
if (!is_client && options->server_authorization_check_config() != nullptr) {
|
51
45
|
gpr_log(GPR_INFO,
|
52
46
|
"Server's credentials options should not contain server "
|
53
47
|
"authorization check config.");
|
54
48
|
}
|
49
|
+
if (options->server_verification_option() != GRPC_TLS_SERVER_VERIFICATION &&
|
50
|
+
options->server_authorization_check_config() == nullptr) {
|
51
|
+
gpr_log(GPR_ERROR,
|
52
|
+
"Should provider custom verifications if bypassing default ones.");
|
53
|
+
return false;
|
54
|
+
}
|
55
55
|
return true;
|
56
56
|
}
|
57
57
|
|
@@ -85,14 +85,16 @@ TlsCredentials::create_security_connector(
|
|
85
85
|
}
|
86
86
|
grpc_core::RefCountedPtr<grpc_channel_security_connector> sc =
|
87
87
|
grpc_core::TlsChannelSecurityConnector::CreateTlsChannelSecurityConnector(
|
88
|
-
this->Ref(), std::move(call_creds), target_name,
|
88
|
+
this->Ref(), options_, std::move(call_creds), target_name,
|
89
89
|
overridden_target_name, ssl_session_cache);
|
90
90
|
if (sc == nullptr) {
|
91
91
|
return nullptr;
|
92
92
|
}
|
93
|
-
|
94
|
-
|
95
|
-
|
93
|
+
if (args != nullptr) {
|
94
|
+
grpc_arg new_arg = grpc_channel_arg_string_create(
|
95
|
+
(char*)GRPC_ARG_HTTP2_SCHEME, (char*)"https");
|
96
|
+
*new_args = grpc_channel_args_copy_and_add(args, &new_arg, 1);
|
97
|
+
}
|
96
98
|
return sc;
|
97
99
|
}
|
98
100
|
|
@@ -106,9 +108,11 @@ TlsServerCredentials::~TlsServerCredentials() {}
|
|
106
108
|
grpc_core::RefCountedPtr<grpc_server_security_connector>
|
107
109
|
TlsServerCredentials::create_security_connector() {
|
108
110
|
return grpc_core::TlsServerSecurityConnector::
|
109
|
-
CreateTlsServerSecurityConnector(this->Ref());
|
111
|
+
CreateTlsServerSecurityConnector(this->Ref(), options_);
|
110
112
|
}
|
111
113
|
|
114
|
+
/** -- Wrapper APIs declared in grpc_security.h -- **/
|
115
|
+
|
112
116
|
grpc_channel_credentials* grpc_tls_credentials_create(
|
113
117
|
grpc_tls_credentials_options* options) {
|
114
118
|
if (!CredentialOptionSanityCheck(options, true /* is_client */)) {
|
@@ -38,7 +38,7 @@ class TlsCredentials final : public grpc_channel_credentials {
|
|
38
38
|
const char* target_name, const grpc_channel_args* args,
|
39
39
|
grpc_channel_args** new_args) override;
|
40
40
|
|
41
|
-
|
41
|
+
grpc_tls_credentials_options* options() const { return options_.get(); }
|
42
42
|
|
43
43
|
private:
|
44
44
|
grpc_core::RefCountedPtr<grpc_tls_credentials_options> options_;
|
@@ -53,7 +53,7 @@ class TlsServerCredentials final : public grpc_server_credentials {
|
|
53
53
|
grpc_core::RefCountedPtr<grpc_server_security_connector>
|
54
54
|
create_security_connector() override;
|
55
55
|
|
56
|
-
|
56
|
+
grpc_tls_credentials_options* options() const { return options_.get(); }
|
57
57
|
|
58
58
|
private:
|
59
59
|
grpc_core::RefCountedPtr<grpc_tls_credentials_options> options_;
|
@@ -223,7 +223,7 @@ static void fake_check_peer(
|
|
223
223
|
}
|
224
224
|
prop_name = peer.properties[0].name;
|
225
225
|
if (prop_name == nullptr ||
|
226
|
-
strcmp(prop_name, TSI_CERTIFICATE_TYPE_PEER_PROPERTY)) {
|
226
|
+
strcmp(prop_name, TSI_CERTIFICATE_TYPE_PEER_PROPERTY) != 0) {
|
227
227
|
error = GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
228
228
|
absl::StrCat("Unexpected property in fake peer: ",
|
229
229
|
prop_name == nullptr ? "<EMPTY>" : prop_name)
|
@@ -231,7 +231,7 @@ static void fake_check_peer(
|
|
231
231
|
goto end;
|
232
232
|
}
|
233
233
|
if (strncmp(peer.properties[0].value.data, TSI_FAKE_CERTIFICATE_TYPE,
|
234
|
-
peer.properties[0].value.length)) {
|
234
|
+
peer.properties[0].value.length) != 0) {
|
235
235
|
error = GRPC_ERROR_CREATE_FROM_STATIC_STRING(
|
236
236
|
"Invalid value for cert type property.");
|
237
237
|
goto end;
|
@@ -0,0 +1,88 @@
|
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2020 gRPC authors.
|
4
|
+
//
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
// you may not use this file except in compliance with the License.
|
7
|
+
// You may obtain a copy of the License at
|
8
|
+
//
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
//
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
// See the License for the specific language governing permissions and
|
15
|
+
// limitations under the License.
|
16
|
+
//
|
17
|
+
//
|
18
|
+
|
19
|
+
#include <grpc/support/port_platform.h>
|
20
|
+
|
21
|
+
#include "src/core/lib/security/security_connector/insecure/insecure_security_connector.h"
|
22
|
+
|
23
|
+
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
24
|
+
#include "src/core/lib/security/transport/security_handshaker.h"
|
25
|
+
#include "src/core/tsi/local_transport_security.h"
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
const char kInsecureTransportSecurityType[] = "insecure";
|
30
|
+
|
31
|
+
// check_call_host and cancel_check_call_host are no-ops since we want to
|
32
|
+
// provide an insecure channel.
|
33
|
+
bool InsecureChannelSecurityConnector::check_call_host(
|
34
|
+
absl::string_view host, grpc_auth_context* auth_context,
|
35
|
+
grpc_closure* on_call_host_checked, grpc_error** error) {
|
36
|
+
*error = GRPC_ERROR_NONE;
|
37
|
+
return true;
|
38
|
+
}
|
39
|
+
|
40
|
+
void InsecureChannelSecurityConnector::cancel_check_call_host(
|
41
|
+
grpc_closure* on_call_host_checked, grpc_error* error) {
|
42
|
+
GRPC_ERROR_UNREF(error);
|
43
|
+
}
|
44
|
+
|
45
|
+
// add_handshakers should have been a no-op but we need to add a minimalist
|
46
|
+
// security handshaker so that check_peer is invoked and an auth_context is
|
47
|
+
// created with the security level of TSI_SECURITY_NONE.
|
48
|
+
void InsecureChannelSecurityConnector::add_handshakers(
|
49
|
+
const grpc_channel_args* args, grpc_pollset_set* /* interested_parties */,
|
50
|
+
HandshakeManager* handshake_manager) {
|
51
|
+
tsi_handshaker* handshaker = nullptr;
|
52
|
+
// Re-use local_tsi_handshaker_create as a minimalist handshaker.
|
53
|
+
GPR_ASSERT(tsi_local_handshaker_create(true /* is_client */, &handshaker) ==
|
54
|
+
TSI_OK);
|
55
|
+
handshake_manager->Add(SecurityHandshakerCreate(handshaker, this, args));
|
56
|
+
}
|
57
|
+
|
58
|
+
void InsecureChannelSecurityConnector::check_peer(
|
59
|
+
tsi_peer peer, grpc_endpoint* ep,
|
60
|
+
RefCountedPtr<grpc_auth_context>* auth_context,
|
61
|
+
grpc_closure* on_peer_checked) {
|
62
|
+
*auth_context = MakeAuthContext();
|
63
|
+
tsi_peer_destruct(&peer);
|
64
|
+
ExecCtx::Run(DEBUG_LOCATION, on_peer_checked, GRPC_ERROR_NONE);
|
65
|
+
}
|
66
|
+
|
67
|
+
int InsecureChannelSecurityConnector::cmp(
|
68
|
+
const grpc_security_connector* other_sc) const {
|
69
|
+
return channel_security_connector_cmp(
|
70
|
+
static_cast<const grpc_channel_security_connector*>(other_sc));
|
71
|
+
}
|
72
|
+
|
73
|
+
RefCountedPtr<grpc_auth_context>
|
74
|
+
InsecureChannelSecurityConnector::MakeAuthContext() {
|
75
|
+
auto ctx = MakeRefCounted<grpc_auth_context>(nullptr);
|
76
|
+
grpc_auth_context_add_cstring_property(
|
77
|
+
ctx.get(), GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME,
|
78
|
+
kInsecureTransportSecurityType);
|
79
|
+
GPR_ASSERT(grpc_auth_context_set_peer_identity_property_name(
|
80
|
+
ctx.get(), GRPC_TRANSPORT_SECURITY_TYPE_PROPERTY_NAME) == 1);
|
81
|
+
const char* security_level = tsi_security_level_to_string(TSI_SECURITY_NONE);
|
82
|
+
grpc_auth_context_add_property(ctx.get(),
|
83
|
+
GRPC_TRANSPORT_SECURITY_LEVEL_PROPERTY_NAME,
|
84
|
+
security_level, strlen(security_level));
|
85
|
+
return ctx;
|
86
|
+
}
|
87
|
+
|
88
|
+
} // namespace grpc_core
|
@@ -0,0 +1,70 @@
|
|
1
|
+
//
|
2
|
+
//
|
3
|
+
// Copyright 2020 gRPC authors.
|
4
|
+
//
|
5
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
6
|
+
// you may not use this file except in compliance with the License.
|
7
|
+
// You may obtain a copy of the License at
|
8
|
+
//
|
9
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
10
|
+
//
|
11
|
+
// Unless required by applicable law or agreed to in writing, software
|
12
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
13
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
14
|
+
// See the License for the specific language governing permissions and
|
15
|
+
// limitations under the License.
|
16
|
+
//
|
17
|
+
//
|
18
|
+
|
19
|
+
#ifndef GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_INSECURE_INSECURE_SECURITY_CONNECTOR_H
|
20
|
+
#define GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_INSECURE_INSECURE_SECURITY_CONNECTOR_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include "src/core/lib/security/context/security_context.h"
|
25
|
+
#include "src/core/lib/security/credentials/credentials.h"
|
26
|
+
#include "src/core/lib/security/security_connector/security_connector.h"
|
27
|
+
|
28
|
+
namespace grpc_core {
|
29
|
+
|
30
|
+
extern const char kInsecureTransportSecurityType[];
|
31
|
+
|
32
|
+
class InsecureChannelSecurityConnector
|
33
|
+
: public grpc_channel_security_connector {
|
34
|
+
public:
|
35
|
+
InsecureChannelSecurityConnector(
|
36
|
+
grpc_core::RefCountedPtr<grpc_channel_credentials> channel_creds,
|
37
|
+
grpc_core::RefCountedPtr<grpc_call_credentials> request_metadata_creds)
|
38
|
+
: grpc_channel_security_connector(/* url_scheme */ nullptr,
|
39
|
+
std::move(channel_creds),
|
40
|
+
std::move(request_metadata_creds)) {}
|
41
|
+
|
42
|
+
bool check_call_host(absl::string_view host, grpc_auth_context* auth_context,
|
43
|
+
grpc_closure* on_call_host_checked,
|
44
|
+
grpc_error** error) override;
|
45
|
+
|
46
|
+
void cancel_check_call_host(grpc_closure* on_call_host_checked,
|
47
|
+
grpc_error* error) override;
|
48
|
+
|
49
|
+
void add_handshakers(const grpc_channel_args* args,
|
50
|
+
grpc_pollset_set* /* interested_parties */,
|
51
|
+
grpc_core::HandshakeManager* handshake_manager) override;
|
52
|
+
|
53
|
+
void check_peer(tsi_peer peer, grpc_endpoint* ep,
|
54
|
+
grpc_core::RefCountedPtr<grpc_auth_context>* auth_context,
|
55
|
+
grpc_closure* on_peer_checked) override;
|
56
|
+
|
57
|
+
int cmp(const grpc_security_connector* other_sc) const override;
|
58
|
+
|
59
|
+
// Exposed for testing purposes only.
|
60
|
+
// Create an auth context which is necessary to pass the santiy check in
|
61
|
+
// client_auth_filter that verifies if the peer's auth context is obtained
|
62
|
+
// during handshakes. The auth context is only checked for its existence and
|
63
|
+
// not actually used.
|
64
|
+
static RefCountedPtr<grpc_auth_context> MakeAuthContext();
|
65
|
+
};
|
66
|
+
|
67
|
+
} // namespace grpc_core
|
68
|
+
|
69
|
+
#endif /* GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_INSECURE_INSECURE_SECURITY_CONNECTOR_H \
|
70
|
+
*/
|
@@ -19,6 +19,10 @@
|
|
19
19
|
#ifndef GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_LOAD_SYSTEM_ROOTS_H
|
20
20
|
#define GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_LOAD_SYSTEM_ROOTS_H
|
21
21
|
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include <grpc/slice.h>
|
25
|
+
|
22
26
|
namespace grpc_core {
|
23
27
|
|
24
28
|
// Returns a slice containing roots from the OS trust store
|
@@ -157,7 +157,7 @@ class grpc_local_channel_security_connector final
|
|
157
157
|
const grpc_channel_args* args, grpc_pollset_set* /*interested_parties*/,
|
158
158
|
grpc_core::HandshakeManager* handshake_manager) override {
|
159
159
|
tsi_handshaker* handshaker = nullptr;
|
160
|
-
GPR_ASSERT(
|
160
|
+
GPR_ASSERT(tsi_local_handshaker_create(true /* is_client */, &handshaker) ==
|
161
161
|
TSI_OK);
|
162
162
|
handshake_manager->Add(
|
163
163
|
grpc_core::SecurityHandshakerCreate(handshaker, this, args));
|
@@ -215,7 +215,7 @@ class grpc_local_server_security_connector final
|
|
215
215
|
const grpc_channel_args* args, grpc_pollset_set* /*interested_parties*/,
|
216
216
|
grpc_core::HandshakeManager* handshake_manager) override {
|
217
217
|
tsi_handshaker* handshaker = nullptr;
|
218
|
-
GPR_ASSERT(
|
218
|
+
GPR_ASSERT(tsi_local_handshaker_create(false /* is_client */,
|
219
219
|
&handshaker) == TSI_OK);
|
220
220
|
handshake_manager->Add(
|
221
221
|
grpc_core::SecurityHandshakerCreate(handshaker, this, args));
|
@@ -109,7 +109,7 @@ grpc_arg grpc_security_connector_to_arg(grpc_security_connector* sc) {
|
|
109
109
|
}
|
110
110
|
|
111
111
|
grpc_security_connector* grpc_security_connector_from_arg(const grpc_arg* arg) {
|
112
|
-
if (strcmp(arg->key, GRPC_ARG_SECURITY_CONNECTOR)) return nullptr;
|
112
|
+
if (strcmp(arg->key, GRPC_ARG_SECURITY_CONNECTOR) != 0) return nullptr;
|
113
113
|
if (arg->type != GRPC_ARG_POINTER) {
|
114
114
|
gpr_log(GPR_ERROR, "Invalid type %d for arg %s", arg->type,
|
115
115
|
GRPC_ARG_SECURITY_CONNECTOR);
|
@@ -49,9 +49,11 @@ class grpc_security_connector
|
|
49
49
|
public:
|
50
50
|
explicit grpc_security_connector(const char* url_scheme)
|
51
51
|
: grpc_core::RefCounted<grpc_security_connector>(
|
52
|
-
|
52
|
+
GRPC_TRACE_FLAG_ENABLED(grpc_trace_security_connector_refcount)
|
53
|
+
? "security_connector_refcount"
|
54
|
+
: nullptr),
|
53
55
|
url_scheme_(url_scheme) {}
|
54
|
-
|
56
|
+
~grpc_security_connector() override = default;
|
55
57
|
|
56
58
|
/* Check the peer. Callee takes ownership of the peer object.
|
57
59
|
When done, sets *auth_context and invokes on_peer_checked. */
|
@@ -154,11 +154,11 @@ class PemKeyCertPair {
|
|
154
154
|
}
|
155
155
|
|
156
156
|
// Movable.
|
157
|
-
PemKeyCertPair(PemKeyCertPair&& other) {
|
157
|
+
PemKeyCertPair(PemKeyCertPair&& other) noexcept {
|
158
158
|
private_key_ = std::move(other.private_key_);
|
159
159
|
cert_chain_ = std::move(other.cert_chain_);
|
160
160
|
}
|
161
|
-
PemKeyCertPair& operator=(PemKeyCertPair&& other) {
|
161
|
+
PemKeyCertPair& operator=(PemKeyCertPair&& other) noexcept {
|
162
162
|
private_key_ = std::move(other.private_key_);
|
163
163
|
cert_chain_ = std::move(other.cert_chain_);
|
164
164
|
return *this;
|
@@ -187,6 +187,8 @@ class PemKeyCertPair {
|
|
187
187
|
grpc_core::UniquePtr<char> cert_chain_;
|
188
188
|
};
|
189
189
|
|
190
|
+
typedef absl::InlinedVector<grpc_core::PemKeyCertPair, 1> PemKeyCertPairList;
|
191
|
+
|
190
192
|
} // namespace grpc_core
|
191
193
|
|
192
194
|
#endif /* GRPC_CORE_LIB_SECURITY_SECURITY_CONNECTOR_SSL_UTILS_H \
|
@@ -46,7 +46,7 @@ namespace grpc_core {
|
|
46
46
|
namespace {
|
47
47
|
|
48
48
|
tsi_ssl_pem_key_cert_pair* ConvertToTsiPemKeyCertPair(
|
49
|
-
const
|
49
|
+
const grpc_core::PemKeyCertPairList& cert_pair_list) {
|
50
50
|
tsi_ssl_pem_key_cert_pair* tsi_pairs = nullptr;
|
51
51
|
size_t num_key_cert_pairs = cert_pair_list.size();
|
52
52
|
if (num_key_cert_pairs > 0) {
|
@@ -65,127 +65,120 @@ tsi_ssl_pem_key_cert_pair* ConvertToTsiPemKeyCertPair(
|
|
65
65
|
|
66
66
|
} // namespace
|
67
67
|
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
grpc_tls_credential_reload_config* credential_reload_config =
|
78
|
-
options.credential_reload_config();
|
79
|
-
/** If there are no key materials and no credential reload config and the
|
80
|
-
* caller is a server, then return an error. We do not require that a client
|
81
|
-
* always provision certificates. **/
|
82
|
-
if (credential_reload_config == nullptr && is_key_materials_empty &&
|
83
|
-
is_server) {
|
68
|
+
// -------------------channel security connector-------------------
|
69
|
+
grpc_core::RefCountedPtr<grpc_channel_security_connector>
|
70
|
+
TlsChannelSecurityConnector::CreateTlsChannelSecurityConnector(
|
71
|
+
grpc_core::RefCountedPtr<grpc_channel_credentials> ch_creds,
|
72
|
+
grpc_core::RefCountedPtr<grpc_tls_credentials_options> options,
|
73
|
+
grpc_core::RefCountedPtr<grpc_call_credentials> request_metadata_creds,
|
74
|
+
const char* target_name, const char* overridden_target_name,
|
75
|
+
tsi_ssl_session_cache* ssl_session_cache) {
|
76
|
+
if (ch_creds == nullptr) {
|
84
77
|
gpr_log(GPR_ERROR,
|
85
|
-
"
|
86
|
-
"
|
87
|
-
return
|
88
|
-
}
|
89
|
-
grpc_status_code reload_status = GRPC_STATUS_OK;
|
90
|
-
/** Use |credential_reload_config| to update |key_materials_config|. **/
|
91
|
-
if (credential_reload_config != nullptr) {
|
92
|
-
grpc_tls_credential_reload_arg* arg = new grpc_tls_credential_reload_arg();
|
93
|
-
arg->key_materials_config = key_materials_config.get();
|
94
|
-
arg->error_details = new grpc_tls_error_details();
|
95
|
-
int result = credential_reload_config->Schedule(arg);
|
96
|
-
if (result) {
|
97
|
-
/** Credential reloading is performed async. This is not yet supported.
|
98
|
-
* **/
|
99
|
-
gpr_log(GPR_ERROR, "Async credential reload is unsupported now.");
|
100
|
-
*status = GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
|
101
|
-
reload_status =
|
102
|
-
is_key_materials_empty ? GRPC_STATUS_UNIMPLEMENTED : GRPC_STATUS_OK;
|
103
|
-
} else {
|
104
|
-
/** Credential reloading is performed sync. **/
|
105
|
-
*status = arg->status;
|
106
|
-
if (arg->status == GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED) {
|
107
|
-
/* Key materials is not empty. */
|
108
|
-
gpr_log(GPR_DEBUG, "Credential does not change after reload.");
|
109
|
-
} else if (arg->status == GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_FAIL) {
|
110
|
-
gpr_log(GPR_ERROR, "Credential reload failed with an error:");
|
111
|
-
if (arg->error_details != nullptr) {
|
112
|
-
gpr_log(GPR_ERROR, "%s", arg->error_details->error_details().c_str());
|
113
|
-
}
|
114
|
-
reload_status =
|
115
|
-
is_key_materials_empty ? GRPC_STATUS_INTERNAL : GRPC_STATUS_OK;
|
116
|
-
}
|
117
|
-
}
|
118
|
-
delete arg->error_details;
|
119
|
-
/** If the credential reload config was constructed via a wrapped language,
|
120
|
-
* then |arg->context| and |arg->destroy_context| will not be nullptr. In
|
121
|
-
* this case, we must destroy |arg->context|, which stores the wrapped
|
122
|
-
* language-version of the credential reload arg. **/
|
123
|
-
if (arg->destroy_context != nullptr) {
|
124
|
-
arg->destroy_context(arg->context);
|
125
|
-
}
|
126
|
-
delete arg;
|
78
|
+
"channel_creds is nullptr in "
|
79
|
+
"TlsChannelSecurityConnectorCreate()");
|
80
|
+
return nullptr;
|
127
81
|
}
|
128
|
-
|
129
|
-
|
130
|
-
|
131
|
-
|
132
|
-
|
133
|
-
if (peer_name != nullptr && !grpc_ssl_host_matches_name(peer, peer_name)) {
|
134
|
-
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
135
|
-
absl::StrCat("Peer name ", peer_name, " is not in peer certificate")
|
136
|
-
.c_str());
|
82
|
+
if (options == nullptr) {
|
83
|
+
gpr_log(GPR_ERROR,
|
84
|
+
"options is nullptr in "
|
85
|
+
"TlsChannelSecurityConnectorCreate()");
|
86
|
+
return nullptr;
|
137
87
|
}
|
138
|
-
|
88
|
+
if (target_name == nullptr) {
|
89
|
+
gpr_log(GPR_ERROR,
|
90
|
+
"target_name is nullptr in "
|
91
|
+
"TlsChannelSecurityConnectorCreate()");
|
92
|
+
return nullptr;
|
93
|
+
}
|
94
|
+
grpc_core::RefCountedPtr<TlsChannelSecurityConnector> c =
|
95
|
+
grpc_core::MakeRefCounted<TlsChannelSecurityConnector>(
|
96
|
+
std::move(ch_creds), std::move(options),
|
97
|
+
std::move(request_metadata_creds), target_name,
|
98
|
+
overridden_target_name, ssl_session_cache);
|
99
|
+
return c;
|
139
100
|
}
|
140
101
|
|
141
102
|
TlsChannelSecurityConnector::TlsChannelSecurityConnector(
|
142
|
-
grpc_core::RefCountedPtr<grpc_channel_credentials>
|
103
|
+
grpc_core::RefCountedPtr<grpc_channel_credentials> ch_creds,
|
104
|
+
grpc_core::RefCountedPtr<grpc_tls_credentials_options> options,
|
143
105
|
grpc_core::RefCountedPtr<grpc_call_credentials> request_metadata_creds,
|
144
|
-
const char* target_name, const char* overridden_target_name
|
145
|
-
|
146
|
-
|
106
|
+
const char* target_name, const char* overridden_target_name,
|
107
|
+
tsi_ssl_session_cache* ssl_session_cache)
|
108
|
+
: grpc_channel_security_connector(GRPC_SSL_URL_SCHEME, std::move(ch_creds),
|
147
109
|
std::move(request_metadata_creds)),
|
110
|
+
options_(std::move(options)),
|
148
111
|
overridden_target_name_(
|
149
|
-
overridden_target_name == nullptr ? "" : overridden_target_name)
|
150
|
-
|
112
|
+
overridden_target_name == nullptr ? "" : overridden_target_name),
|
113
|
+
ssl_session_cache_(ssl_session_cache) {
|
114
|
+
if (ssl_session_cache_ != nullptr) {
|
115
|
+
tsi_ssl_session_cache_ref(ssl_session_cache_);
|
116
|
+
}
|
151
117
|
check_arg_ = ServerAuthorizationCheckArgCreate(this);
|
152
118
|
absl::string_view host;
|
153
119
|
absl::string_view port;
|
154
120
|
grpc_core::SplitHostPort(target_name, &host, &port);
|
155
121
|
target_name_ = std::string(host);
|
122
|
+
// Create a watcher.
|
123
|
+
auto watcher_ptr = absl::make_unique<TlsChannelCertificateWatcher>(this);
|
124
|
+
certificate_watcher_ = watcher_ptr.get();
|
125
|
+
// Register the watcher with the distributor.
|
126
|
+
grpc_tls_certificate_distributor* distributor =
|
127
|
+
options_->certificate_distributor();
|
128
|
+
absl::optional<std::string> watched_root_cert_name;
|
129
|
+
if (options_->watch_root_cert()) {
|
130
|
+
watched_root_cert_name = options_->root_cert_name();
|
131
|
+
}
|
132
|
+
absl::optional<std::string> watched_identity_cert_name;
|
133
|
+
if (options_->watch_identity_pair()) {
|
134
|
+
watched_identity_cert_name = options_->identity_cert_name();
|
135
|
+
}
|
136
|
+
distributor->WatchTlsCertificates(std::move(watcher_ptr),
|
137
|
+
watched_root_cert_name,
|
138
|
+
watched_identity_cert_name);
|
156
139
|
}
|
157
140
|
|
158
141
|
TlsChannelSecurityConnector::~TlsChannelSecurityConnector() {
|
142
|
+
if (ssl_session_cache_ != nullptr) {
|
143
|
+
tsi_ssl_session_cache_unref(ssl_session_cache_);
|
144
|
+
}
|
145
|
+
// Cancel all the watchers.
|
146
|
+
grpc_tls_certificate_distributor* distributor =
|
147
|
+
options_->certificate_distributor();
|
148
|
+
distributor->CancelTlsCertificatesWatch(certificate_watcher_);
|
159
149
|
if (client_handshaker_factory_ != nullptr) {
|
160
150
|
tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_);
|
161
151
|
}
|
162
|
-
if (
|
163
|
-
|
152
|
+
if (check_arg_ != nullptr) {
|
153
|
+
ServerAuthorizationCheckArgDestroy(check_arg_);
|
164
154
|
}
|
165
|
-
ServerAuthorizationCheckArgDestroy(check_arg_);
|
166
155
|
}
|
167
156
|
|
168
157
|
void TlsChannelSecurityConnector::add_handshakers(
|
169
158
|
const grpc_channel_args* args, grpc_pollset_set* /*interested_parties*/,
|
170
159
|
grpc_core::HandshakeManager* handshake_mgr) {
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
175
|
-
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
160
|
+
grpc_core::MutexLock lock(&mu_);
|
161
|
+
if (client_handshaker_factory_ != nullptr) {
|
162
|
+
// Instantiate TSI handshaker.
|
163
|
+
tsi_handshaker* tsi_hs = nullptr;
|
164
|
+
tsi_result result = tsi_ssl_client_handshaker_factory_create_handshaker(
|
165
|
+
client_handshaker_factory_,
|
166
|
+
overridden_target_name_.empty() ? target_name_.c_str()
|
167
|
+
: overridden_target_name_.c_str(),
|
168
|
+
&tsi_hs);
|
169
|
+
if (result != TSI_OK) {
|
170
|
+
gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
|
171
|
+
tsi_result_to_string(result));
|
172
|
+
return;
|
173
|
+
}
|
174
|
+
// Create handshakers.
|
175
|
+
handshake_mgr->Add(grpc_core::SecurityHandshakerCreate(tsi_hs, this, args));
|
185
176
|
return;
|
186
177
|
}
|
187
|
-
//
|
188
|
-
|
178
|
+
// TODO(ZhenLian): Implement the logic(delegation to
|
179
|
+
// BlockOnInitialCredentialHandshaker) when certificates are not ready.
|
180
|
+
gpr_log(GPR_ERROR, "%s not supported yet.",
|
181
|
+
"Client BlockOnInitialCredentialHandshaker");
|
189
182
|
}
|
190
183
|
|
191
184
|
void TlsChannelSecurityConnector::check_peer(
|
@@ -203,12 +196,9 @@ void TlsChannelSecurityConnector::check_peer(
|
|
203
196
|
}
|
204
197
|
*auth_context =
|
205
198
|
grpc_ssl_peer_to_auth_context(&peer, GRPC_TLS_TRANSPORT_SECURITY_TYPE);
|
206
|
-
|
207
|
-
static_cast<const TlsCredentials*>(channel_creds());
|
208
|
-
if (creds->options().server_verification_option() ==
|
209
|
-
GRPC_TLS_SERVER_VERIFICATION) {
|
199
|
+
if (options_->server_verification_option() == GRPC_TLS_SERVER_VERIFICATION) {
|
210
200
|
/* Do the default host name check if specifying the target name. */
|
211
|
-
error = TlsCheckHostName(target_name, &peer);
|
201
|
+
error = internal::TlsCheckHostName(target_name, &peer);
|
212
202
|
if (error != GRPC_ERROR_NONE) {
|
213
203
|
grpc_core::ExecCtx::Run(DEBUG_LOCATION, on_peer_checked, error);
|
214
204
|
tsi_peer_destruct(&peer);
|
@@ -217,7 +207,7 @@ void TlsChannelSecurityConnector::check_peer(
|
|
217
207
|
}
|
218
208
|
/* Do the custom server authorization check, if specified by the user. */
|
219
209
|
const grpc_tls_server_authorization_check_config* config =
|
220
|
-
|
210
|
+
options_->server_authorization_check_config();
|
221
211
|
/* If server authorization config is not null, use it to perform
|
222
212
|
* server authorization check. */
|
223
213
|
if (config != nullptr) {
|
@@ -289,105 +279,86 @@ void TlsChannelSecurityConnector::cancel_check_call_host(
|
|
289
279
|
GRPC_ERROR_UNREF(error);
|
290
280
|
}
|
291
281
|
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
if (
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
282
|
+
void TlsChannelSecurityConnector::TlsChannelCertificateWatcher::
|
283
|
+
OnCertificatesChanged(
|
284
|
+
absl::optional<absl::string_view> root_certs,
|
285
|
+
absl::optional<grpc_core::PemKeyCertPairList> key_cert_pairs) {
|
286
|
+
GPR_ASSERT(security_connector_ != nullptr);
|
287
|
+
grpc_core::MutexLock lock(&security_connector_->mu_);
|
288
|
+
if (root_certs.has_value()) {
|
289
|
+
security_connector_->pem_root_certs_ = root_certs;
|
290
|
+
}
|
291
|
+
if (key_cert_pairs.has_value()) {
|
292
|
+
security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs);
|
293
|
+
}
|
294
|
+
bool root_being_watched = security_connector_->options_->watch_root_cert();
|
295
|
+
bool root_has_value = security_connector_->pem_root_certs_.has_value();
|
296
|
+
bool identity_being_watched =
|
297
|
+
security_connector_->options_->watch_identity_pair();
|
298
|
+
bool identity_has_value =
|
299
|
+
security_connector_->pem_key_cert_pair_list_.has_value();
|
300
|
+
if ((root_being_watched && root_has_value && identity_being_watched &&
|
301
|
+
identity_has_value) ||
|
302
|
+
(root_being_watched && root_has_value && !identity_being_watched) ||
|
303
|
+
(!root_being_watched && identity_being_watched && identity_has_value)) {
|
304
|
+
if (security_connector_->UpdateHandshakerFactoryLocked() !=
|
305
|
+
GRPC_SECURITY_OK) {
|
306
|
+
gpr_log(GPR_ERROR, "Update handshaker factory failed.");
|
307
|
+
}
|
303
308
|
}
|
304
|
-
|
309
|
+
}
|
310
|
+
|
311
|
+
// TODO(ZhenLian): implement the logic to signal waiting handshakers once
|
312
|
+
// BlockOnInitialCredentialHandshaker is implemented.
|
313
|
+
void TlsChannelSecurityConnector::TlsChannelCertificateWatcher::OnError(
|
314
|
+
grpc_error* root_cert_error, grpc_error* identity_cert_error) {
|
315
|
+
if (root_cert_error != GRPC_ERROR_NONE) {
|
305
316
|
gpr_log(GPR_ERROR,
|
306
|
-
"
|
307
|
-
|
308
|
-
return nullptr;
|
317
|
+
"TlsChannelCertificateWatcher getting root_cert_error: %s",
|
318
|
+
grpc_error_string(root_cert_error));
|
309
319
|
}
|
310
|
-
|
311
|
-
|
312
|
-
|
313
|
-
|
314
|
-
if (c->InitializeHandshakerFactory(ssl_session_cache) != GRPC_SECURITY_OK) {
|
315
|
-
gpr_log(GPR_ERROR, "Could not initialize client handshaker factory.");
|
316
|
-
return nullptr;
|
320
|
+
if (identity_cert_error != GRPC_ERROR_NONE) {
|
321
|
+
gpr_log(GPR_ERROR,
|
322
|
+
"TlsChannelCertificateWatcher getting identity_cert_error: %s",
|
323
|
+
grpc_error_string(identity_cert_error));
|
317
324
|
}
|
318
|
-
|
325
|
+
GRPC_ERROR_UNREF(root_cert_error);
|
326
|
+
GRPC_ERROR_UNREF(identity_cert_error);
|
319
327
|
}
|
320
328
|
|
321
|
-
|
322
|
-
|
323
|
-
|
324
|
-
|
329
|
+
// TODO(ZhenLian): implement the logic to signal waiting handshakers once
|
330
|
+
// BlockOnInitialCredentialHandshaker is implemented.
|
331
|
+
grpc_security_status
|
332
|
+
TlsChannelSecurityConnector::UpdateHandshakerFactoryLocked() {
|
325
333
|
bool skip_server_certificate_verification =
|
326
|
-
|
334
|
+
options_->server_verification_option() ==
|
327
335
|
GRPC_TLS_SKIP_ALL_SERVER_VERIFICATION;
|
328
336
|
/* Free the client handshaker factory if exists. */
|
329
|
-
if (client_handshaker_factory_) {
|
337
|
+
if (client_handshaker_factory_ != nullptr) {
|
330
338
|
tsi_ssl_client_handshaker_factory_unref(client_handshaker_factory_);
|
331
339
|
}
|
332
|
-
|
333
|
-
|
340
|
+
std::string pem_root_certs;
|
341
|
+
if (pem_root_certs_.has_value()) {
|
342
|
+
// TODO(ZhenLian): update the underlying TSI layer to use C++ types like
|
343
|
+
// std::string and absl::string_view to avoid making another copy here.
|
344
|
+
pem_root_certs = std::string(*pem_root_certs_);
|
345
|
+
}
|
346
|
+
tsi_ssl_pem_key_cert_pair* pem_key_cert_pair = nullptr;
|
347
|
+
if (pem_key_cert_pair_list_.has_value()) {
|
348
|
+
pem_key_cert_pair = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_);
|
349
|
+
}
|
334
350
|
grpc_security_status status = grpc_ssl_tsi_client_handshaker_factory_init(
|
335
|
-
pem_key_cert_pair,
|
351
|
+
pem_key_cert_pair,
|
352
|
+
pem_root_certs.empty() ? nullptr : pem_root_certs.c_str(),
|
336
353
|
skip_server_certificate_verification,
|
337
|
-
grpc_get_tsi_tls_version(
|
338
|
-
grpc_get_tsi_tls_version(
|
339
|
-
|
354
|
+
grpc_get_tsi_tls_version(options_->min_tls_version()),
|
355
|
+
grpc_get_tsi_tls_version(options_->max_tls_version()), ssl_session_cache_,
|
356
|
+
&client_handshaker_factory_);
|
340
357
|
/* Free memory. */
|
341
|
-
|
342
|
-
|
343
|
-
}
|
344
|
-
|
345
|
-
grpc_security_status TlsChannelSecurityConnector::InitializeHandshakerFactory(
|
346
|
-
tsi_ssl_session_cache* ssl_session_cache) {
|
347
|
-
grpc_core::MutexLock lock(&mu_);
|
348
|
-
const TlsCredentials* creds =
|
349
|
-
static_cast<const TlsCredentials*>(channel_creds());
|
350
|
-
grpc_tls_key_materials_config* key_materials_config =
|
351
|
-
creds->options().key_materials_config();
|
352
|
-
// key_materials_config_->set_key_materials will handle the copying of the key
|
353
|
-
// materials users provided
|
354
|
-
if (key_materials_config != nullptr) {
|
355
|
-
key_materials_config_->set_key_materials(
|
356
|
-
key_materials_config->pem_root_certs(),
|
357
|
-
key_materials_config->pem_key_cert_pair_list());
|
358
|
-
}
|
359
|
-
grpc_ssl_certificate_config_reload_status reload_status =
|
360
|
-
GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
|
361
|
-
/** If |creds->options()| has a credential reload config, then the call to
|
362
|
-
* |TlsFetchKeyMaterials| will use it to update the root cert and
|
363
|
-
* pem-key-cert-pair list stored in |key_materials_config_|. **/
|
364
|
-
if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), false,
|
365
|
-
&reload_status) != GRPC_STATUS_OK) {
|
366
|
-
/* Raise an error if key materials are not populated. */
|
367
|
-
return GRPC_SECURITY_ERROR;
|
368
|
-
}
|
369
|
-
return ReplaceHandshakerFactory(ssl_session_cache);
|
370
|
-
}
|
371
|
-
|
372
|
-
grpc_security_status TlsChannelSecurityConnector::RefreshHandshakerFactory() {
|
373
|
-
grpc_core::MutexLock lock(&mu_);
|
374
|
-
const TlsCredentials* creds =
|
375
|
-
static_cast<const TlsCredentials*>(channel_creds());
|
376
|
-
grpc_ssl_certificate_config_reload_status reload_status =
|
377
|
-
GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
|
378
|
-
/** If |creds->options()| has a credential reload config, then the call to
|
379
|
-
* |TlsFetchKeyMaterials| will use it to update the root cert and
|
380
|
-
* pem-key-cert-pair list stored in |key_materials_config_|. **/
|
381
|
-
if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), false,
|
382
|
-
&reload_status) != GRPC_STATUS_OK) {
|
383
|
-
return GRPC_SECURITY_ERROR;
|
384
|
-
}
|
385
|
-
if (reload_status != GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW) {
|
386
|
-
// Re-use existing handshaker factory.
|
387
|
-
return GRPC_SECURITY_OK;
|
388
|
-
} else {
|
389
|
-
return ReplaceHandshakerFactory(nullptr);
|
358
|
+
if (pem_key_cert_pair != nullptr) {
|
359
|
+
grpc_tsi_ssl_pem_key_cert_pairs_destroy(pem_key_cert_pair, 1);
|
390
360
|
}
|
361
|
+
return status;
|
391
362
|
}
|
392
363
|
|
393
364
|
void TlsChannelSecurityConnector::ServerAuthorizationCheckDone(
|
@@ -457,40 +428,86 @@ void TlsChannelSecurityConnector::ServerAuthorizationCheckArgDestroy(
|
|
457
428
|
delete arg;
|
458
429
|
}
|
459
430
|
|
431
|
+
// -------------------server security connector-------------------
|
432
|
+
grpc_core::RefCountedPtr<grpc_server_security_connector>
|
433
|
+
TlsServerSecurityConnector::CreateTlsServerSecurityConnector(
|
434
|
+
grpc_core::RefCountedPtr<grpc_server_credentials> server_creds,
|
435
|
+
grpc_core::RefCountedPtr<grpc_tls_credentials_options> options) {
|
436
|
+
if (server_creds == nullptr) {
|
437
|
+
gpr_log(GPR_ERROR,
|
438
|
+
"server_creds is nullptr in "
|
439
|
+
"TlsServerSecurityConnectorCreate()");
|
440
|
+
return nullptr;
|
441
|
+
}
|
442
|
+
if (options == nullptr) {
|
443
|
+
gpr_log(GPR_ERROR,
|
444
|
+
"options is nullptr in "
|
445
|
+
"TlsServerSecurityConnectorCreate()");
|
446
|
+
return nullptr;
|
447
|
+
}
|
448
|
+
grpc_core::RefCountedPtr<TlsServerSecurityConnector> c =
|
449
|
+
grpc_core::MakeRefCounted<TlsServerSecurityConnector>(
|
450
|
+
std::move(server_creds), std::move(options));
|
451
|
+
return c;
|
452
|
+
}
|
453
|
+
|
460
454
|
TlsServerSecurityConnector::TlsServerSecurityConnector(
|
461
|
-
grpc_core::RefCountedPtr<grpc_server_credentials> server_creds
|
455
|
+
grpc_core::RefCountedPtr<grpc_server_credentials> server_creds,
|
456
|
+
grpc_core::RefCountedPtr<grpc_tls_credentials_options> options)
|
462
457
|
: grpc_server_security_connector(GRPC_SSL_URL_SCHEME,
|
463
|
-
std::move(server_creds))
|
464
|
-
|
458
|
+
std::move(server_creds)),
|
459
|
+
options_(std::move(options)) {
|
460
|
+
// Create a watcher.
|
461
|
+
auto watcher_ptr = absl::make_unique<TlsServerCertificateWatcher>(this);
|
462
|
+
certificate_watcher_ = watcher_ptr.get();
|
463
|
+
// Register the watcher with the distributor.
|
464
|
+
grpc_tls_certificate_distributor* distributor =
|
465
|
+
options_->certificate_distributor();
|
466
|
+
absl::optional<std::string> watched_root_cert_name;
|
467
|
+
if (options_->watch_root_cert()) {
|
468
|
+
watched_root_cert_name = options_->root_cert_name();
|
469
|
+
}
|
470
|
+
absl::optional<std::string> watched_identity_cert_name;
|
471
|
+
if (options_->watch_identity_pair()) {
|
472
|
+
watched_identity_cert_name = options_->identity_cert_name();
|
473
|
+
}
|
474
|
+
distributor->WatchTlsCertificates(std::move(watcher_ptr),
|
475
|
+
watched_root_cert_name,
|
476
|
+
watched_identity_cert_name);
|
465
477
|
}
|
466
478
|
|
467
479
|
TlsServerSecurityConnector::~TlsServerSecurityConnector() {
|
480
|
+
// Cancel all the watchers.
|
481
|
+
grpc_tls_certificate_distributor* distributor =
|
482
|
+
options_->certificate_distributor();
|
483
|
+
distributor->CancelTlsCertificatesWatch(certificate_watcher_);
|
468
484
|
if (server_handshaker_factory_ != nullptr) {
|
469
485
|
tsi_ssl_server_handshaker_factory_unref(server_handshaker_factory_);
|
470
486
|
}
|
471
|
-
if (key_materials_config_.get() != nullptr) {
|
472
|
-
key_materials_config_.get()->Unref();
|
473
|
-
}
|
474
487
|
}
|
475
488
|
|
476
489
|
void TlsServerSecurityConnector::add_handshakers(
|
477
490
|
const grpc_channel_args* args, grpc_pollset_set* /*interested_parties*/,
|
478
491
|
grpc_core::HandshakeManager* handshake_mgr) {
|
479
|
-
|
480
|
-
if (
|
481
|
-
|
482
|
-
|
483
|
-
|
484
|
-
|
485
|
-
|
486
|
-
|
487
|
-
|
488
|
-
|
489
|
-
|
490
|
-
|
492
|
+
grpc_core::MutexLock lock(&mu_);
|
493
|
+
if (server_handshaker_factory_ != nullptr) {
|
494
|
+
// Instantiate TSI handshaker.
|
495
|
+
tsi_handshaker* tsi_hs = nullptr;
|
496
|
+
tsi_result result = tsi_ssl_server_handshaker_factory_create_handshaker(
|
497
|
+
server_handshaker_factory_, &tsi_hs);
|
498
|
+
if (result != TSI_OK) {
|
499
|
+
gpr_log(GPR_ERROR, "Handshaker creation failed with error %s.",
|
500
|
+
tsi_result_to_string(result));
|
501
|
+
return;
|
502
|
+
}
|
503
|
+
// Create handshakers.
|
504
|
+
handshake_mgr->Add(grpc_core::SecurityHandshakerCreate(tsi_hs, this, args));
|
491
505
|
return;
|
492
506
|
}
|
493
|
-
|
507
|
+
// TODO(ZhenLian): Implement the logic(delegation to
|
508
|
+
// BlockOnInitialCredentialHandshaker) when certificates are not ready.
|
509
|
+
gpr_log(GPR_ERROR, "%s not supported yet.",
|
510
|
+
"Server BlockOnInitialCredentialHandshaker");
|
494
511
|
}
|
495
512
|
|
496
513
|
void TlsServerSecurityConnector::check_peer(
|
@@ -510,43 +527,79 @@ int TlsServerSecurityConnector::cmp(
|
|
510
527
|
static_cast<const grpc_server_security_connector*>(other));
|
511
528
|
}
|
512
529
|
|
513
|
-
|
514
|
-
|
515
|
-
|
516
|
-
|
530
|
+
void TlsServerSecurityConnector::TlsServerCertificateWatcher::
|
531
|
+
OnCertificatesChanged(
|
532
|
+
absl::optional<absl::string_view> root_certs,
|
533
|
+
absl::optional<grpc_core::PemKeyCertPairList> key_cert_pairs) {
|
534
|
+
GPR_ASSERT(security_connector_ != nullptr);
|
535
|
+
grpc_core::MutexLock lock(&security_connector_->mu_);
|
536
|
+
if (root_certs.has_value()) {
|
537
|
+
security_connector_->pem_root_certs_ = root_certs;
|
538
|
+
}
|
539
|
+
if (key_cert_pairs.has_value()) {
|
540
|
+
security_connector_->pem_key_cert_pair_list_ = std::move(key_cert_pairs);
|
541
|
+
}
|
542
|
+
bool root_being_watched = security_connector_->options_->watch_root_cert();
|
543
|
+
bool root_has_value = security_connector_->pem_root_certs_.has_value();
|
544
|
+
bool identity_being_watched =
|
545
|
+
security_connector_->options_->watch_identity_pair();
|
546
|
+
bool identity_has_value =
|
547
|
+
security_connector_->pem_key_cert_pair_list_.has_value();
|
548
|
+
if ((root_being_watched && root_has_value && identity_being_watched &&
|
549
|
+
identity_has_value) ||
|
550
|
+
(root_being_watched && root_has_value && !identity_being_watched) ||
|
551
|
+
(!root_being_watched && identity_being_watched && identity_has_value)) {
|
552
|
+
if (security_connector_->UpdateHandshakerFactoryLocked() !=
|
553
|
+
GRPC_SECURITY_OK) {
|
554
|
+
gpr_log(GPR_ERROR, "Update handshaker factory failed.");
|
555
|
+
}
|
556
|
+
}
|
557
|
+
}
|
558
|
+
|
559
|
+
// TODO(ZhenLian): implement the logic to signal waiting handshakers once
|
560
|
+
// BlockOnInitialCredentialHandshaker is implemented.
|
561
|
+
void TlsServerSecurityConnector::TlsServerCertificateWatcher::OnError(
|
562
|
+
grpc_error* root_cert_error, grpc_error* identity_cert_error) {
|
563
|
+
if (root_cert_error != GRPC_ERROR_NONE) {
|
517
564
|
gpr_log(GPR_ERROR,
|
518
|
-
"
|
519
|
-
|
520
|
-
return nullptr;
|
565
|
+
"TlsServerCertificateWatcher getting root_cert_error: %s",
|
566
|
+
grpc_error_string(root_cert_error));
|
521
567
|
}
|
522
|
-
|
523
|
-
|
524
|
-
|
525
|
-
|
526
|
-
gpr_log(GPR_ERROR, "Could not initialize server handshaker factory.");
|
527
|
-
return nullptr;
|
568
|
+
if (identity_cert_error != GRPC_ERROR_NONE) {
|
569
|
+
gpr_log(GPR_ERROR,
|
570
|
+
"TlsServerCertificateWatcher getting identity_cert_error: %s",
|
571
|
+
grpc_error_string(identity_cert_error));
|
528
572
|
}
|
529
|
-
|
573
|
+
GRPC_ERROR_UNREF(root_cert_error);
|
574
|
+
GRPC_ERROR_UNREF(identity_cert_error);
|
530
575
|
}
|
531
576
|
|
532
|
-
|
533
|
-
|
534
|
-
|
577
|
+
// TODO(ZhenLian): implement the logic to signal waiting handshakers once
|
578
|
+
// BlockOnInitialCredentialHandshaker is implemented.
|
579
|
+
grpc_security_status
|
580
|
+
TlsServerSecurityConnector::UpdateHandshakerFactoryLocked() {
|
535
581
|
/* Free the server handshaker factory if exists. */
|
536
|
-
if (server_handshaker_factory_) {
|
582
|
+
if (server_handshaker_factory_ != nullptr) {
|
537
583
|
tsi_ssl_server_handshaker_factory_unref(server_handshaker_factory_);
|
538
584
|
}
|
539
|
-
|
540
|
-
|
541
|
-
|
542
|
-
|
543
|
-
|
585
|
+
// The identity certs on the server side shouldn't be empty.
|
586
|
+
GPR_ASSERT(pem_key_cert_pair_list_.has_value());
|
587
|
+
GPR_ASSERT(!(*pem_key_cert_pair_list_).empty());
|
588
|
+
std::string pem_root_certs;
|
589
|
+
if (pem_root_certs_.has_value()) {
|
590
|
+
// TODO(ZhenLian): update the underlying TSI layer to use C++ types like
|
591
|
+
// std::string and absl::string_view to avoid making another copy here.
|
592
|
+
pem_root_certs = std::string(*pem_root_certs_);
|
593
|
+
}
|
594
|
+
tsi_ssl_pem_key_cert_pair* pem_key_cert_pairs = nullptr;
|
595
|
+
pem_key_cert_pairs = ConvertToTsiPemKeyCertPair(*pem_key_cert_pair_list_);
|
596
|
+
size_t num_key_cert_pairs = (*pem_key_cert_pair_list_).size();
|
544
597
|
grpc_security_status status = grpc_ssl_tsi_server_handshaker_factory_init(
|
545
598
|
pem_key_cert_pairs, num_key_cert_pairs,
|
546
|
-
|
547
|
-
|
548
|
-
grpc_get_tsi_tls_version(
|
549
|
-
grpc_get_tsi_tls_version(
|
599
|
+
pem_root_certs.empty() ? nullptr : pem_root_certs.c_str(),
|
600
|
+
options_->cert_request_type(),
|
601
|
+
grpc_get_tsi_tls_version(options_->min_tls_version()),
|
602
|
+
grpc_get_tsi_tls_version(options_->max_tls_version()),
|
550
603
|
&server_handshaker_factory_);
|
551
604
|
/* Free memory. */
|
552
605
|
grpc_tsi_ssl_pem_key_cert_pairs_destroy(pem_key_cert_pairs,
|
@@ -554,53 +607,18 @@ grpc_security_status TlsServerSecurityConnector::ReplaceHandshakerFactory() {
|
|
554
607
|
return status;
|
555
608
|
}
|
556
609
|
|
557
|
-
|
558
|
-
grpc_core::MutexLock lock(&mu_);
|
559
|
-
const TlsServerCredentials* creds =
|
560
|
-
static_cast<const TlsServerCredentials*>(server_creds());
|
561
|
-
grpc_tls_key_materials_config* key_materials_config =
|
562
|
-
creds->options().key_materials_config();
|
563
|
-
if (key_materials_config != nullptr) {
|
564
|
-
key_materials_config_->set_key_materials(
|
565
|
-
key_materials_config->pem_root_certs(),
|
566
|
-
key_materials_config->pem_key_cert_pair_list());
|
567
|
-
}
|
568
|
-
grpc_ssl_certificate_config_reload_status reload_status =
|
569
|
-
GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_UNCHANGED;
|
570
|
-
/** If |creds->options()| has a credential reload config, then the call to
|
571
|
-
* |TlsFetchKeyMaterials| will use it to update the root cert and
|
572
|
-
* pem-key-cert-pair list stored in |key_materials_config_|. Otherwise, it
|
573
|
-
* will return |GRPC_STATUS_OK| if |key_materials_config_| already has
|
574
|
-
* credentials, and an error code if not. **/
|
575
|
-
if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), true,
|
576
|
-
&reload_status) != GRPC_STATUS_OK) {
|
577
|
-
/* Raise an error if key materials are not populated. */
|
578
|
-
return GRPC_SECURITY_ERROR;
|
579
|
-
}
|
580
|
-
return ReplaceHandshakerFactory();
|
581
|
-
}
|
610
|
+
namespace internal {
|
582
611
|
|
583
|
-
|
584
|
-
|
585
|
-
|
586
|
-
|
587
|
-
|
588
|
-
|
589
|
-
/** If |creds->options()| has a credential reload config, then the call to
|
590
|
-
* |TlsFetchKeyMaterials| will use it to update the root cert and
|
591
|
-
* pem-key-cert-pair list stored in |key_materials_config_|. Otherwise, it
|
592
|
-
* will return |GRPC_STATUS_OK| if |key_materials_config_| already has
|
593
|
-
* credentials, and an error code if not. **/
|
594
|
-
if (TlsFetchKeyMaterials(key_materials_config_, creds->options(), true,
|
595
|
-
&reload_status) != GRPC_STATUS_OK) {
|
596
|
-
return GRPC_SECURITY_ERROR;
|
597
|
-
}
|
598
|
-
if (reload_status != GRPC_SSL_CERTIFICATE_CONFIG_RELOAD_NEW) {
|
599
|
-
/* At this point, we should have key materials populated. */
|
600
|
-
return GRPC_SECURITY_OK;
|
601
|
-
} else {
|
602
|
-
return ReplaceHandshakerFactory();
|
612
|
+
grpc_error* TlsCheckHostName(const char* peer_name, const tsi_peer* peer) {
|
613
|
+
/* Check the peer name if specified. */
|
614
|
+
if (peer_name != nullptr && !grpc_ssl_host_matches_name(peer, peer_name)) {
|
615
|
+
return GRPC_ERROR_CREATE_FROM_COPIED_STRING(
|
616
|
+
absl::StrCat("Peer name ", peer_name, " is not in peer certificate")
|
617
|
+
.c_str());
|
603
618
|
}
|
619
|
+
return GRPC_ERROR_NONE;
|
604
620
|
}
|
605
621
|
|
622
|
+
} // namespace internal
|
623
|
+
|
606
624
|
} // namespace grpc_core
|