grpc 1.34.0 → 1.35.0.pre1
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 +808 -2787
- data/etc/roots.pem +257 -573
- data/include/grpc/compression.h +1 -1
- data/include/grpc/grpc.h +14 -0
- data/include/grpc/grpc_security.h +61 -3
- data/include/grpc/impl/codegen/atm_windows.h +4 -0
- data/include/grpc/impl/codegen/byte_buffer.h +1 -1
- data/include/grpc/impl/codegen/grpc_types.h +1 -1
- data/include/grpc/impl/codegen/log.h +0 -2
- data/include/grpc/impl/codegen/sync_windows.h +4 -0
- data/include/grpc/slice_buffer.h +3 -3
- data/include/grpc/support/sync.h +3 -3
- data/include/grpc/support/time.h +7 -7
- data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
- data/src/core/ext/filters/client_channel/client_channel.cc +2734 -1498
- data/src/core/ext/filters/client_channel/client_channel.h +0 -4
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -0
- data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
- data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -6
- 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 +4 -5
- data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
- data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy.h +2 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +32 -30
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +162 -20
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +24 -0
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1262 -0
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +7 -14
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +454 -16
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -9
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +18 -31
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +3 -5
- data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
- data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
- data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -13
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
- data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
- data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
- data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +34 -50
- data/src/core/ext/filters/client_channel/subchannel.h +12 -18
- data/src/core/ext/filters/deadline/deadline_filter.cc +4 -2
- data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
- data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
- data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
- data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
- data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
- data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +26 -14
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +178 -86
- data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +7 -8
- data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
- data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
- data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
- data/src/core/ext/transport/chttp2/transport/writing.cc +1 -1
- data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
- data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -27
- data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +111 -111
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +424 -241
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +22 -22
- data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +47 -21
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
- data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +44 -44
- data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +200 -78
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +17 -17
- data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +72 -35
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
- data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +39 -39
- data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +157 -89
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
- data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +47 -47
- data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +163 -78
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -13
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
- data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +28 -28
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +23 -23
- data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +106 -54
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
- data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +38 -22
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +203 -203
- data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +845 -495
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +87 -87
- data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +343 -204
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +20 -20
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +85 -46
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +33 -11
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -32
- data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +29 -29
- data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +120 -82
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -2
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
- data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
- data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
- data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
- data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
- data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
- data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +34 -34
- data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +142 -59
- data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
- data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
- data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
- data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
- data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
- data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
- data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
- data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
- data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
- data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
- data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
- data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
- data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +1 -1
- data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +5 -5
- data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +21 -7
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +2 -2
- data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +7 -0
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +4 -4
- data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +17 -8
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +7 -7
- data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +31 -18
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +5 -5
- data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +19 -11
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
- data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
- data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
- data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
- data/src/core/ext/xds/certificate_provider_store.cc +10 -7
- data/src/core/ext/xds/certificate_provider_store.h +12 -7
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +25 -0
- data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -4
- data/src/core/ext/xds/xds_api.cc +220 -31
- data/src/core/ext/xds/xds_api.h +41 -10
- data/src/core/ext/xds/xds_bootstrap.h +0 -1
- data/src/core/ext/xds/xds_certificate_provider.cc +61 -2
- data/src/core/ext/xds/xds_certificate_provider.h +40 -2
- data/src/core/ext/xds/xds_client.cc +31 -29
- data/src/core/ext/xds/xds_client.h +6 -1
- data/src/core/ext/xds/xds_client_stats.cc +2 -2
- data/src/core/ext/xds/xds_server_config_fetcher.cc +131 -0
- data/src/core/lib/channel/channel_args.cc +8 -8
- data/src/core/lib/channel/channel_trace.h +1 -1
- data/src/core/lib/channel/channelz.cc +13 -14
- data/src/core/lib/channel/channelz.h +0 -1
- data/src/core/lib/channel/channelz_registry.h +0 -1
- data/src/core/lib/channel/handshaker.cc +2 -2
- data/src/core/lib/compression/compression_args.cc +3 -2
- data/src/core/lib/debug/stats.h +2 -2
- data/src/core/lib/debug/stats_data.h +13 -13
- data/src/core/lib/gpr/alloc.cc +3 -2
- data/src/core/lib/gpr/log.cc +53 -16
- data/src/core/lib/gpr/log_linux.cc +3 -1
- data/src/core/lib/gpr/log_posix.cc +3 -1
- data/src/core/lib/gpr/log_windows.cc +3 -1
- data/src/core/lib/gpr/spinlock.h +10 -2
- data/src/core/lib/gpr/string.cc +22 -21
- data/src/core/lib/gpr/string.h +5 -6
- data/src/core/lib/gpr/sync.cc +4 -4
- data/src/core/lib/gpr/time.cc +12 -12
- data/src/core/lib/gprpp/arena.h +3 -2
- data/src/core/lib/gprpp/ref_counted.h +2 -2
- data/src/core/lib/gprpp/ref_counted_ptr.h +9 -1
- data/src/core/lib/gprpp/thd_posix.cc +6 -1
- data/src/core/lib/gprpp/thd_windows.cc +3 -1
- data/src/core/lib/http/httpcli.cc +1 -1
- data/src/core/lib/http/httpcli.h +2 -3
- data/src/core/lib/http/httpcli_security_connector.cc +1 -1
- data/src/core/lib/http/parser.cc +1 -2
- data/src/core/lib/iomgr/call_combiner.cc +8 -5
- data/src/core/lib/iomgr/combiner.cc +2 -1
- data/src/core/lib/iomgr/endpoint.h +1 -1
- data/src/core/lib/iomgr/error.cc +15 -11
- data/src/core/lib/iomgr/error_internal.h +1 -1
- data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
- data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -13
- data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
- data/src/core/lib/iomgr/exec_ctx.h +6 -4
- data/src/core/lib/iomgr/executor.cc +2 -1
- data/src/core/lib/iomgr/executor.h +1 -1
- data/src/core/lib/iomgr/executor/threadpool.h +1 -1
- data/src/core/lib/iomgr/iomgr.cc +1 -1
- data/src/core/lib/iomgr/load_file.h +1 -1
- data/src/core/lib/iomgr/lockfree_event.cc +19 -14
- data/src/core/lib/iomgr/lockfree_event.h +2 -2
- data/src/core/lib/iomgr/parse_address.cc +52 -46
- data/src/core/lib/iomgr/parse_address.h +13 -9
- data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
- data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
- data/src/core/lib/iomgr/python_util.h +1 -1
- data/src/core/lib/iomgr/resolve_address.cc +4 -4
- data/src/core/lib/iomgr/resource_quota.cc +4 -4
- data/src/core/lib/iomgr/sockaddr_utils.cc +10 -10
- data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
- data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
- data/src/core/lib/iomgr/socket_mutator.cc +3 -2
- data/src/core/lib/iomgr/tcp_client.cc +3 -3
- data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
- data/src/core/lib/iomgr/tcp_custom.cc +22 -17
- data/src/core/lib/iomgr/tcp_posix.cc +9 -6
- data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
- data/src/core/lib/iomgr/timer_custom.cc +3 -3
- data/src/core/lib/iomgr/timer_generic.cc +3 -3
- data/src/core/lib/iomgr/timer_manager.cc +2 -2
- data/src/core/lib/iomgr/udp_server.cc +1 -2
- data/src/core/lib/iomgr/udp_server.h +1 -2
- data/src/core/lib/iomgr/unix_sockets_posix.cc +17 -18
- data/src/core/lib/json/json.h +10 -0
- data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
- data/src/core/lib/security/authorization/evaluate_args.h +1 -1
- data/src/core/lib/security/context/security_context.cc +4 -3
- data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
- data/src/core/lib/security/credentials/credentials.cc +6 -6
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
- data/src/core/lib/security/credentials/external/aws_request_signer.cc +15 -10
- data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -2
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +217 -31
- data/src/core/lib/security/credentials/external/external_account_credentials.h +7 -5
- data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
- data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -4
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -18
- data/src/core/lib/security/credentials/external/url_external_account_credentials.h +5 -6
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -1
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +18 -12
- data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
- data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -3
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +37 -44
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -5
- data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +1 -6
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +326 -5
- data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +64 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +1 -1
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +0 -1
- data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -1
- data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
- data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.cc +140 -10
- data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
- data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +46 -13
- data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +23 -6
- data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +3 -2
- data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
- data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
- data/src/core/lib/security/security_connector/ssl_utils.h +12 -19
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +57 -12
- data/src/core/lib/security/security_connector/tls/tls_security_connector.h +2 -3
- data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
- data/src/core/lib/security/transport/security_handshaker.cc +2 -2
- data/src/core/lib/slice/slice_intern.cc +4 -5
- data/src/core/lib/slice/slice_internal.h +2 -2
- data/src/core/lib/surface/call.cc +32 -24
- data/src/core/lib/surface/call_details.cc +8 -8
- data/src/core/lib/surface/channel.cc +16 -10
- data/src/core/lib/surface/channel.h +3 -2
- data/src/core/lib/surface/channel_init.cc +1 -1
- data/src/core/lib/surface/completion_queue.cc +23 -18
- data/src/core/lib/surface/completion_queue.h +16 -16
- data/src/core/lib/surface/init.cc +6 -5
- data/src/core/lib/surface/lame_client.cc +20 -46
- data/src/core/lib/surface/lame_client.h +4 -0
- data/src/core/lib/surface/server.cc +59 -15
- data/src/core/lib/surface/server.h +37 -5
- data/src/core/lib/surface/version.cc +1 -1
- data/src/core/lib/transport/authority_override.cc +6 -4
- data/src/core/lib/transport/authority_override.h +5 -2
- data/src/core/lib/transport/connectivity_state.h +6 -4
- data/src/core/lib/transport/error_utils.h +1 -1
- data/src/core/lib/transport/metadata_batch.h +4 -4
- data/src/core/lib/transport/static_metadata.cc +1 -1
- data/src/core/lib/transport/status_metadata.cc +4 -3
- data/src/core/lib/transport/transport.h +7 -7
- data/src/core/lib/uri/uri_parser.cc +131 -249
- data/src/core/lib/uri/uri_parser.h +57 -21
- data/src/core/plugin_registry/grpc_plugin_registry.cc +10 -4
- data/src/core/tsi/alts/crypt/gsec.cc +5 -4
- data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -23
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
- data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
- data/src/core/tsi/fake_transport_security.cc +5 -3
- data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
- data/src/core/tsi/ssl_transport_security.cc +62 -49
- data/src/core/tsi/ssl_transport_security.h +6 -6
- data/src/core/tsi/transport_security.cc +6 -6
- data/src/core/tsi/transport_security_interface.h +1 -1
- data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +31 -13
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +28 -0
- data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
- data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
- data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
- data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
- data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
- data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
- data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
- data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
- data/third_party/upb/upb/decode.c +248 -167
- data/third_party/upb/upb/decode.h +20 -1
- data/third_party/upb/upb/decode.int.h +163 -0
- data/third_party/upb/upb/decode_fast.c +1040 -0
- data/third_party/upb/upb/decode_fast.h +126 -0
- data/third_party/upb/upb/def.c +525 -516
- data/third_party/upb/upb/def.h +16 -31
- data/third_party/upb/upb/def.hpp +37 -123
- data/third_party/upb/upb/encode.c +227 -169
- data/third_party/upb/upb/encode.h +27 -2
- data/third_party/upb/upb/json_decode.c +1443 -0
- data/third_party/upb/upb/json_decode.h +23 -0
- data/third_party/upb/upb/json_encode.c +713 -0
- data/third_party/upb/upb/json_encode.h +36 -0
- data/third_party/upb/upb/msg.c +167 -88
- data/third_party/upb/upb/msg.h +174 -34
- data/third_party/upb/upb/port_def.inc +74 -61
- data/third_party/upb/upb/port_undef.inc +3 -7
- data/third_party/upb/upb/reflection.c +36 -19
- data/third_party/upb/upb/table.c +34 -197
- data/third_party/upb/upb/table.int.h +14 -5
- data/third_party/upb/upb/text_encode.c +45 -22
- data/third_party/upb/upb/text_encode.h +4 -1
- data/third_party/upb/upb/upb.c +18 -41
- data/third_party/upb/upb/upb.h +36 -7
- data/third_party/upb/upb/upb.hpp +4 -4
- data/third_party/upb/upb/upb.int.h +29 -0
- metadata +60 -46
- data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
- data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
- data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
- data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
- data/src/core/lib/gprpp/map.h +0 -53
- data/third_party/upb/upb/port.c +0 -26
@@ -26,6 +26,8 @@
|
|
26
26
|
|
27
27
|
#include "src/core/lib/gprpp/ref_counted.h"
|
28
28
|
#include "src/core/lib/gprpp/ref_counted_ptr.h"
|
29
|
+
#include "src/core/lib/gprpp/thd.h"
|
30
|
+
#include "src/core/lib/iomgr/load_file.h"
|
29
31
|
#include "src/core/lib/iomgr/pollset_set.h"
|
30
32
|
#include "src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h"
|
31
33
|
#include "src/core/lib/security/security_connector/ssl_utils.h"
|
@@ -59,14 +61,76 @@ class StaticDataCertificateProvider final
|
|
59
61
|
std::string root_certificate,
|
60
62
|
grpc_core::PemKeyCertPairList pem_key_cert_pairs);
|
61
63
|
|
64
|
+
~StaticDataCertificateProvider() override;
|
65
|
+
|
66
|
+
RefCountedPtr<grpc_tls_certificate_distributor> distributor() const override {
|
67
|
+
return distributor_;
|
68
|
+
}
|
69
|
+
|
70
|
+
private:
|
71
|
+
struct WatcherInfo {
|
72
|
+
bool root_being_watched = false;
|
73
|
+
bool identity_being_watched = false;
|
74
|
+
};
|
75
|
+
RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
|
76
|
+
std::string root_certificate_;
|
77
|
+
grpc_core::PemKeyCertPairList pem_key_cert_pairs_;
|
78
|
+
// Guards members below.
|
79
|
+
grpc_core::Mutex mu_;
|
80
|
+
// Stores each cert_name we get from the distributor callback and its watcher
|
81
|
+
// information.
|
82
|
+
std::map<std::string, WatcherInfo> watcher_info_;
|
83
|
+
};
|
84
|
+
|
85
|
+
// A provider class that will watch the credential changes on the file system.
|
86
|
+
class FileWatcherCertificateProvider final
|
87
|
+
: public grpc_tls_certificate_provider {
|
88
|
+
public:
|
89
|
+
FileWatcherCertificateProvider(std::string private_key_path,
|
90
|
+
std::string identity_certificate_path,
|
91
|
+
std::string root_cert_path,
|
92
|
+
unsigned int refresh_interval_sec);
|
93
|
+
|
94
|
+
~FileWatcherCertificateProvider() override;
|
95
|
+
|
62
96
|
RefCountedPtr<grpc_tls_certificate_distributor> distributor() const override {
|
63
97
|
return distributor_;
|
64
98
|
}
|
65
99
|
|
66
100
|
private:
|
101
|
+
struct WatcherInfo {
|
102
|
+
bool root_being_watched = false;
|
103
|
+
bool identity_being_watched = false;
|
104
|
+
};
|
105
|
+
// Force an update from the file system regardless of the interval.
|
106
|
+
void ForceUpdate();
|
107
|
+
// Read the root certificates from files and update the distributor.
|
108
|
+
absl::optional<std::string> ReadRootCertificatesFromFile(
|
109
|
+
const std::string& root_cert_full_path);
|
110
|
+
// Read the root certificates from files and update the distributor.
|
111
|
+
absl::optional<PemKeyCertPairList> ReadIdentityKeyCertPairFromFiles(
|
112
|
+
const std::string& private_key_path,
|
113
|
+
const std::string& identity_certificate_path);
|
114
|
+
|
115
|
+
// Information that is used by the refreshing thread.
|
116
|
+
std::string private_key_path_;
|
117
|
+
std::string identity_certificate_path_;
|
118
|
+
std::string root_cert_path_;
|
119
|
+
unsigned int refresh_interval_sec_ = 0;
|
120
|
+
|
67
121
|
RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
|
122
|
+
grpc_core::Thread refresh_thread_;
|
123
|
+
gpr_event shutdown_event_;
|
124
|
+
|
125
|
+
// Guards members below.
|
126
|
+
grpc_core::Mutex mu_;
|
127
|
+
// The most-recent credential data. It will be empty if the most recent read
|
128
|
+
// attempt failed.
|
68
129
|
std::string root_certificate_;
|
69
130
|
grpc_core::PemKeyCertPairList pem_key_cert_pairs_;
|
131
|
+
// Stores each cert_name we get from the distributor callback and its watcher
|
132
|
+
// information.
|
133
|
+
std::map<std::string, WatcherInfo> watcher_info_;
|
70
134
|
};
|
71
135
|
|
72
136
|
} // namespace grpc_core
|
@@ -46,7 +46,7 @@ grpc_tls_server_authorization_check_config::
|
|
46
46
|
grpc_tls_server_authorization_check_config::
|
47
47
|
~grpc_tls_server_authorization_check_config() {
|
48
48
|
if (destruct_ != nullptr) {
|
49
|
-
destruct_(
|
49
|
+
destruct_(config_user_data_);
|
50
50
|
}
|
51
51
|
}
|
52
52
|
|
@@ -147,7 +147,6 @@ struct grpc_tls_credentials_options
|
|
147
147
|
server_authorization_check_config_ = std::move(config);
|
148
148
|
}
|
149
149
|
// Sets the provider in the options.
|
150
|
-
// This should only be used by C-core API for Tls*Creds case.
|
151
150
|
void set_certificate_provider(
|
152
151
|
grpc_core::RefCountedPtr<grpc_tls_certificate_provider> provider) {
|
153
152
|
provider_ = std::move(provider);
|
@@ -92,7 +92,7 @@ TlsCredentials::create_security_connector(
|
|
92
92
|
}
|
93
93
|
if (args != nullptr) {
|
94
94
|
grpc_arg new_arg = grpc_channel_arg_string_create(
|
95
|
-
(
|
95
|
+
const_cast<char*>(GRPC_ARG_HTTP2_SCHEME), const_cast<char*>("https"));
|
96
96
|
*new_args = grpc_channel_args_copy_and_add(args, &new_arg, 1);
|
97
97
|
}
|
98
98
|
return sc;
|
@@ -0,0 +1,91 @@
|
|
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/credentials/tls/tls_utils.h"
|
22
|
+
|
23
|
+
#include "absl/strings/ascii.h"
|
24
|
+
#include "absl/strings/match.h"
|
25
|
+
#include "absl/strings/str_cat.h"
|
26
|
+
|
27
|
+
namespace grpc_core {
|
28
|
+
|
29
|
+
// Based on
|
30
|
+
// https://github.com/grpc/grpc-java/blob/ca12e7a339add0ef48202fb72434b9dc0df41756/xds/src/main/java/io/grpc/xds/internal/sds/trust/SdsX509TrustManager.java#L62
|
31
|
+
bool VerifySubjectAlternativeName(absl::string_view subject_alternative_name,
|
32
|
+
const std::string& matcher) {
|
33
|
+
if (subject_alternative_name.empty() ||
|
34
|
+
absl::StartsWith(subject_alternative_name, ".")) {
|
35
|
+
// Illegal pattern/domain name
|
36
|
+
return false;
|
37
|
+
}
|
38
|
+
if (matcher.empty() || absl::StartsWith(matcher, ".")) {
|
39
|
+
// Illegal domain name
|
40
|
+
return false;
|
41
|
+
}
|
42
|
+
// Normalize \a subject_alternative_name and \a matcher by turning them into
|
43
|
+
// absolute domain names if they are not yet absolute. This is needed because
|
44
|
+
// server certificates do not normally contain absolute names or patterns, but
|
45
|
+
// they should be treated as absolute. At the same time, any
|
46
|
+
// subject_alternative_name presented to this method should also be treated as
|
47
|
+
// absolute for the purposes of matching to the server certificate.
|
48
|
+
std::string normalized_san =
|
49
|
+
absl::EndsWith(subject_alternative_name, ".")
|
50
|
+
? std::string(subject_alternative_name)
|
51
|
+
: absl::StrCat(subject_alternative_name, ".");
|
52
|
+
std::string normalized_matcher =
|
53
|
+
absl::EndsWith(matcher, ".") ? matcher : absl::StrCat(matcher, ".");
|
54
|
+
absl::AsciiStrToLower(&normalized_san);
|
55
|
+
absl::AsciiStrToLower(&normalized_matcher);
|
56
|
+
if (!absl::StrContains(normalized_san, "*")) {
|
57
|
+
return normalized_san == normalized_matcher;
|
58
|
+
}
|
59
|
+
// WILDCARD PATTERN RULES:
|
60
|
+
// 1. Asterisk (*) is only permitted in the left-most domain name label and
|
61
|
+
// must be the only character in that label (i.e., must match the whole
|
62
|
+
// left-most label). For example, *.example.com is permitted, while
|
63
|
+
// *a.example.com, a*.example.com, a*b.example.com, a.*.example.com are
|
64
|
+
// not permitted.
|
65
|
+
// 2. Asterisk (*) cannot match across domain name labels.
|
66
|
+
// For example, *.example.com matches test.example.com but does not match
|
67
|
+
// sub.test.example.com.
|
68
|
+
// 3. Wildcard patterns for single-label domain names are not permitted.
|
69
|
+
if (!absl::StartsWith(normalized_san, "*.")) {
|
70
|
+
// Asterisk (*) is only permitted in the left-most domain name label and
|
71
|
+
// must be the only character in that label
|
72
|
+
return false;
|
73
|
+
}
|
74
|
+
if (normalized_san == "*.") {
|
75
|
+
// Wildcard pattern for single-label domain name -- not permitted.
|
76
|
+
return false;
|
77
|
+
}
|
78
|
+
absl::string_view suffix = absl::string_view(normalized_san).substr(1);
|
79
|
+
if (absl::StrContains(suffix, "*")) {
|
80
|
+
// Asterisk (*) is not permitted in the suffix
|
81
|
+
return false;
|
82
|
+
}
|
83
|
+
if (!absl::EndsWith(normalized_matcher, suffix)) return false;
|
84
|
+
int suffix_start_index = normalized_matcher.length() - suffix.length();
|
85
|
+
// Asterisk matching across domain labels is not permitted.
|
86
|
+
return suffix_start_index <= 0 /* should not happen */ ||
|
87
|
+
normalized_matcher.find_last_of('.', suffix_start_index - 1) ==
|
88
|
+
std::string::npos;
|
89
|
+
}
|
90
|
+
|
91
|
+
} // namespace grpc_core
|
@@ -0,0 +1,38 @@
|
|
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_CREDENTIALS_TLS_TLS_UTILS_H
|
20
|
+
#define GRPC_CORE_LIB_SECURITY_CREDENTIALS_TLS_TLS_UTILS_H
|
21
|
+
|
22
|
+
#include <grpc/support/port_platform.h>
|
23
|
+
|
24
|
+
#include <string>
|
25
|
+
#include <vector>
|
26
|
+
|
27
|
+
#include "absl/strings/string_view.h"
|
28
|
+
|
29
|
+
namespace grpc_core {
|
30
|
+
|
31
|
+
// Matches \a subject_alternative_name with \a matcher. Returns true if there
|
32
|
+
// is a match, false otherwise.
|
33
|
+
bool VerifySubjectAlternativeName(absl::string_view subject_alternative_name,
|
34
|
+
const std::string& matcher);
|
35
|
+
|
36
|
+
} // namespace grpc_core
|
37
|
+
|
38
|
+
#endif // GRPC_CORE_LIB_SECURITY_CREDENTIALS_TLS_TLS_UTILS_H
|
@@ -20,26 +20,156 @@
|
|
20
20
|
|
21
21
|
#include "src/core/lib/security/credentials/xds/xds_credentials.h"
|
22
22
|
|
23
|
+
#include "src/core/ext/xds/xds_certificate_provider.h"
|
24
|
+
#include "src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h"
|
25
|
+
#include "src/core/lib/security/credentials/tls/tls_credentials.h"
|
26
|
+
#include "src/core/lib/security/credentials/tls/tls_utils.h"
|
27
|
+
#include "src/core/lib/uri/uri_parser.h"
|
28
|
+
|
23
29
|
namespace grpc_core {
|
24
30
|
|
25
|
-
|
31
|
+
const char kCredentialsTypeXds[] = "Xds";
|
32
|
+
|
33
|
+
namespace {
|
34
|
+
|
35
|
+
bool XdsVerifySubjectAlternativeNames(
|
36
|
+
const char* const* subject_alternative_names,
|
37
|
+
size_t subject_alternative_names_size,
|
38
|
+
const std::vector<XdsApi::StringMatcher>& matchers) {
|
39
|
+
if (matchers.empty()) return true;
|
40
|
+
for (size_t i = 0; i < subject_alternative_names_size; ++i) {
|
41
|
+
for (const auto& matcher : matchers) {
|
42
|
+
if (matcher.type() == XdsApi::StringMatcher::StringMatcherType::EXACT) {
|
43
|
+
// For EXACT match, use DNS rules for verifying SANs
|
44
|
+
// TODO(zhenlian): Right now, the SSL layer does not save the type of
|
45
|
+
// the SAN, so we are doing a DNS style verification for all SANs when
|
46
|
+
// the type is EXACT. When we expose the SAN type, change this to only
|
47
|
+
// do this verification when the SAN type is DNS and match type is
|
48
|
+
// EXACT. For all other cases, we should use matcher.Match().
|
49
|
+
if (VerifySubjectAlternativeName(subject_alternative_names[i],
|
50
|
+
matcher.string_matcher())) {
|
51
|
+
return true;
|
52
|
+
}
|
53
|
+
} else {
|
54
|
+
if (matcher.Match(subject_alternative_names[i])) {
|
55
|
+
return true;
|
56
|
+
}
|
57
|
+
}
|
58
|
+
}
|
59
|
+
}
|
60
|
+
return false;
|
61
|
+
}
|
62
|
+
|
63
|
+
int ServerAuthCheckSchedule(void* config_user_data,
|
64
|
+
grpc_tls_server_authorization_check_arg* arg) {
|
65
|
+
XdsCertificateProvider* xds_certificate_provider =
|
66
|
+
static_cast<XdsCertificateProvider*>(config_user_data);
|
67
|
+
if (XdsVerifySubjectAlternativeNames(
|
68
|
+
arg->subject_alternative_names, arg->subject_alternative_names_size,
|
69
|
+
xds_certificate_provider->subject_alternative_name_matchers())) {
|
70
|
+
arg->success = 1;
|
71
|
+
arg->status = GRPC_STATUS_OK;
|
72
|
+
} else {
|
73
|
+
arg->success = 0;
|
74
|
+
arg->status = GRPC_STATUS_UNAUTHENTICATED;
|
75
|
+
if (arg->error_details) {
|
76
|
+
arg->error_details->set_error_details(
|
77
|
+
"SANs from certificate did not match SANs from xDS control plane");
|
78
|
+
}
|
79
|
+
}
|
80
|
+
|
81
|
+
return 0; /* synchronous check */
|
82
|
+
}
|
83
|
+
|
84
|
+
void ServerAuthCheckDestroy(void* config_user_data) {
|
85
|
+
XdsCertificateProvider* xds_certificate_provider =
|
86
|
+
static_cast<XdsCertificateProvider*>(config_user_data);
|
87
|
+
xds_certificate_provider->Unref();
|
88
|
+
}
|
89
|
+
|
90
|
+
} // namespace
|
91
|
+
|
92
|
+
bool TestOnlyXdsVerifySubjectAlternativeNames(
|
93
|
+
const char* const* subject_alternative_names,
|
94
|
+
size_t subject_alternative_names_size,
|
95
|
+
const std::vector<XdsApi::StringMatcher>& matchers) {
|
96
|
+
return XdsVerifySubjectAlternativeNames(
|
97
|
+
subject_alternative_names, subject_alternative_names_size, matchers);
|
98
|
+
}
|
99
|
+
|
100
|
+
//
|
101
|
+
// XdsCredentials
|
102
|
+
//
|
26
103
|
|
27
|
-
|
104
|
+
RefCountedPtr<grpc_channel_security_connector>
|
28
105
|
XdsCredentials::create_security_connector(
|
29
|
-
|
30
|
-
const
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
106
|
+
RefCountedPtr<grpc_call_credentials> call_creds, const char* target_name,
|
107
|
+
const grpc_channel_args* args, grpc_channel_args** new_args) {
|
108
|
+
auto xds_certificate_provider =
|
109
|
+
XdsCertificateProvider::GetFromChannelArgs(args);
|
110
|
+
// TODO(yashykt): This arg will no longer need to be added after b/173119596
|
111
|
+
// is fixed.
|
112
|
+
grpc_arg override_arg = grpc_channel_arg_string_create(
|
113
|
+
const_cast<char*>(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG),
|
114
|
+
const_cast<char*>(target_name));
|
115
|
+
const char* override_arg_name = GRPC_SSL_TARGET_NAME_OVERRIDE_ARG;
|
116
|
+
const grpc_channel_args* temp_args = args;
|
117
|
+
if (grpc_channel_args_find(args, override_arg_name) == nullptr) {
|
118
|
+
temp_args = grpc_channel_args_copy_and_add_and_remove(
|
119
|
+
args, &override_arg_name, 1, &override_arg, 1);
|
36
120
|
}
|
37
|
-
|
121
|
+
RefCountedPtr<grpc_channel_security_connector> security_connector;
|
122
|
+
if (xds_certificate_provider != nullptr) {
|
123
|
+
auto tls_credentials_options =
|
124
|
+
MakeRefCounted<grpc_tls_credentials_options>();
|
125
|
+
tls_credentials_options->set_certificate_provider(xds_certificate_provider);
|
126
|
+
if (xds_certificate_provider->ProvidesRootCerts()) {
|
127
|
+
tls_credentials_options->set_watch_root_cert(true);
|
128
|
+
}
|
129
|
+
if (xds_certificate_provider->ProvidesIdentityCerts()) {
|
130
|
+
tls_credentials_options->set_watch_identity_pair(true);
|
131
|
+
}
|
132
|
+
tls_credentials_options->set_server_verification_option(
|
133
|
+
GRPC_TLS_SKIP_HOSTNAME_VERIFICATION);
|
134
|
+
tls_credentials_options->set_server_authorization_check_config(
|
135
|
+
MakeRefCounted<grpc_tls_server_authorization_check_config>(
|
136
|
+
xds_certificate_provider->Ref().release(), ServerAuthCheckSchedule,
|
137
|
+
nullptr, ServerAuthCheckDestroy));
|
138
|
+
auto tls_credentials =
|
139
|
+
MakeRefCounted<TlsCredentials>(std::move(tls_credentials_options));
|
140
|
+
security_connector = tls_credentials->create_security_connector(
|
141
|
+
std::move(call_creds), target_name, temp_args, new_args);
|
142
|
+
} else {
|
143
|
+
GPR_ASSERT(fallback_credentials_ != nullptr);
|
144
|
+
security_connector = fallback_credentials_->create_security_connector(
|
145
|
+
std::move(call_creds), target_name, temp_args, new_args);
|
146
|
+
}
|
147
|
+
if (temp_args != args) {
|
148
|
+
grpc_channel_args_destroy(temp_args);
|
149
|
+
}
|
150
|
+
return security_connector;
|
151
|
+
}
|
152
|
+
|
153
|
+
//
|
154
|
+
// XdsServerCredentials
|
155
|
+
//
|
156
|
+
|
157
|
+
RefCountedPtr<grpc_server_security_connector>
|
158
|
+
XdsServerCredentials::create_security_connector() {
|
159
|
+
// TODO(yashkt): Fill this
|
160
|
+
return fallback_credentials_->create_security_connector();
|
38
161
|
}
|
39
162
|
|
40
163
|
} // namespace grpc_core
|
41
164
|
|
42
165
|
grpc_channel_credentials* grpc_xds_credentials_create(
|
43
166
|
grpc_channel_credentials* fallback_credentials) {
|
167
|
+
GPR_ASSERT(fallback_credentials != nullptr);
|
44
168
|
return new grpc_core::XdsCredentials(fallback_credentials->Ref());
|
45
169
|
}
|
170
|
+
|
171
|
+
grpc_server_credentials* grpc_xds_server_credentials_create(
|
172
|
+
grpc_server_credentials* fallback_credentials) {
|
173
|
+
GPR_ASSERT(fallback_credentials != nullptr);
|
174
|
+
return new grpc_core::XdsServerCredentials(fallback_credentials->Ref());
|
175
|
+
}
|
@@ -23,29 +23,47 @@
|
|
23
23
|
|
24
24
|
#include <grpc/grpc_security.h>
|
25
25
|
|
26
|
+
#include "src/core/ext/xds/xds_api.h"
|
26
27
|
#include "src/core/lib/security/credentials/credentials.h"
|
27
28
|
|
28
29
|
namespace grpc_core {
|
29
30
|
|
31
|
+
extern const char kCredentialsTypeXds[];
|
32
|
+
|
30
33
|
class XdsCredentials final : public grpc_channel_credentials {
|
31
34
|
public:
|
32
|
-
static constexpr const char kCredentialsTypeXds[] = "Xds";
|
33
|
-
|
34
35
|
explicit XdsCredentials(
|
35
|
-
|
36
|
+
RefCountedPtr<grpc_channel_credentials> fallback_credentials)
|
36
37
|
: grpc_channel_credentials(kCredentialsTypeXds),
|
37
38
|
fallback_credentials_(std::move(fallback_credentials)) {}
|
38
39
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
40
|
+
RefCountedPtr<grpc_channel_security_connector> create_security_connector(
|
41
|
+
RefCountedPtr<grpc_call_credentials> call_creds, const char* target_name,
|
42
|
+
const grpc_channel_args* args, grpc_channel_args** new_args) override;
|
43
|
+
|
44
|
+
private:
|
45
|
+
RefCountedPtr<grpc_channel_credentials> fallback_credentials_;
|
46
|
+
};
|
47
|
+
|
48
|
+
class XdsServerCredentials final : public grpc_server_credentials {
|
49
|
+
public:
|
50
|
+
explicit XdsServerCredentials(
|
51
|
+
RefCountedPtr<grpc_server_credentials> fallback_credentials)
|
52
|
+
: grpc_server_credentials(kCredentialsTypeXds),
|
53
|
+
fallback_credentials_(std::move(fallback_credentials)) {}
|
54
|
+
|
55
|
+
RefCountedPtr<grpc_server_security_connector> create_security_connector()
|
56
|
+
override;
|
44
57
|
|
45
58
|
private:
|
46
|
-
|
59
|
+
RefCountedPtr<grpc_server_credentials> fallback_credentials_;
|
47
60
|
};
|
48
61
|
|
62
|
+
bool TestOnlyXdsVerifySubjectAlternativeNames(
|
63
|
+
const char* const* subject_alternative_names,
|
64
|
+
size_t subject_alternative_names_size,
|
65
|
+
const std::vector<XdsApi::StringMatcher>& matchers);
|
66
|
+
|
49
67
|
} // namespace grpc_core
|
50
68
|
|
51
69
|
#endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_XDS_XDS_CREDENTIALS_H */
|