grpc 1.43.1 → 1.44.0.pre2
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 +84 -64
- data/include/grpc/grpc_security.h +10 -0
- data/include/grpc/impl/codegen/compression_types.h +0 -2
- data/include/grpc/impl/codegen/grpc_types.h +6 -0
- data/src/core/ext/filters/client_channel/backend_metric.h +1 -1
- data/src/core/ext/filters/client_channel/client_channel.cc +62 -68
- data/src/core/ext/filters/client_channel/client_channel.h +8 -8
- data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
- data/src/core/ext/filters/client_channel/config_selector.h +4 -4
- data/src/core/ext/filters/client_channel/dynamic_filters.h +1 -1
- data/src/core/ext/filters/client_channel/health/health_check_client.cc +16 -14
- data/src/core/ext/filters/client_channel/health/health_check_client.h +3 -3
- data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.cc +4 -3
- data/src/core/ext/filters/client_channel/lb_policy/address_filtering.h +6 -5
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/client_load_reporting_filter.cc +3 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +31 -32
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.h +0 -7
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_balancer_addresses.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +43 -29
- data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +6 -2
- data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +120 -68
- data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +60 -48
- data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +62 -61
- data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +16 -11
- data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +11 -5
- data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +19 -15
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +1 -1
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +14 -12
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +3 -2
- data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +50 -105
- data/src/core/ext/filters/client_channel/lb_policy.cc +15 -14
- data/src/core/ext/filters/client_channel/lb_policy.h +19 -3
- data/src/core/ext/filters/client_channel/resolver/binder/binder_resolver.cc +3 -3
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +207 -81
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +22 -12
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +19 -15
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +23 -38
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +118 -207
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +25 -32
- data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_windows.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +82 -73
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +10 -10
- data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.h +2 -1
- data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +2 -5
- data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +5 -5
- data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +157 -67
- data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +1 -1
- data/src/core/ext/filters/client_channel/resolver_result_parsing.h +2 -2
- data/src/core/ext/filters/client_channel/retry_filter.cc +37 -64
- data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -1
- data/src/core/ext/filters/client_channel/retry_service_config.h +1 -1
- data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +1 -1
- data/src/core/ext/filters/client_channel/subchannel.cc +12 -16
- data/src/core/ext/filters/client_channel/subchannel.h +2 -3
- data/src/core/ext/filters/fault_injection/fault_injection_filter.cc +37 -48
- data/src/core/ext/filters/fault_injection/service_config_parser.cc +6 -8
- data/src/core/ext/filters/fault_injection/service_config_parser.h +1 -1
- data/src/core/ext/filters/http/client/http_client_filter.cc +51 -122
- data/src/core/ext/filters/http/client_authority_filter.cc +8 -24
- data/src/core/ext/filters/http/message_compress/message_compress_filter.cc +42 -140
- data/src/core/ext/filters/http/message_compress/message_decompress_filter.cc +5 -25
- data/src/core/ext/filters/http/server/http_server_filter.cc +50 -135
- data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
- data/src/core/ext/filters/message_size/message_size_filter.h +1 -1
- data/src/core/ext/filters/rbac/rbac_filter.cc +157 -0
- data/src/core/ext/filters/rbac/rbac_filter.h +74 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +605 -0
- data/src/core/ext/filters/rbac/rbac_service_config_parser.h +70 -0
- data/src/core/ext/filters/server_config_selector/server_config_selector.h +3 -2
- data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +11 -6
- data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +1 -1
- data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +1 -1
- data/src/core/ext/transport/chttp2/server/chttp2_server.cc +89 -29
- data/src/core/ext/transport/chttp2/transport/chttp2_plugin.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +45 -186
- data/src/core/ext/transport/chttp2/transport/frame_data.cc +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.cc +341 -279
- data/src/core/ext/transport/chttp2/transport/hpack_encoder.h +69 -159
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.cc +1 -1
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_table.h +2 -0
- data/src/core/ext/transport/chttp2/transport/hpack_parser.cc +19 -32
- data/src/core/ext/transport/chttp2/transport/hpack_parser.h +0 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +94 -1
- data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +2 -24
- data/src/core/ext/transport/chttp2/transport/internal.h +0 -33
- data/src/core/ext/transport/chttp2/transport/parsing.cc +0 -6
- data/src/core/ext/transport/chttp2/transport/writing.cc +47 -116
- data/src/core/ext/transport/inproc/inproc_plugin.cc +0 -4
- data/src/core/ext/transport/inproc/inproc_transport.cc +11 -63
- data/src/core/ext/transport/inproc/inproc_transport.h +0 -3
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.c +61 -0
- data/src/core/ext/upb-generated/envoy/extensions/filters/http/rbac/v3/rbac.upb.h +146 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.c +188 -0
- data/src/core/ext/upbdefs-generated/envoy/config/rbac/v3/rbac.upbdefs.h +70 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.c +56 -0
- data/src/core/ext/upbdefs-generated/envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.c +154 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/checked.upbdefs.h +95 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.c +58 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/eval.upbdefs.h +55 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.c +44 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/explain.upbdefs.h +40 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.c +153 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/syntax.upbdefs.h +100 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.c +75 -0
- data/src/core/ext/upbdefs-generated/google/api/expr/v1alpha1/value.upbdefs.h +55 -0
- data/src/core/ext/xds/upb_utils.h +65 -0
- data/src/core/ext/xds/xds_api.cc +81 -3458
- data/src/core/ext/xds/xds_api.h +56 -611
- data/src/core/ext/xds/xds_bootstrap.cc +189 -125
- data/src/core/ext/xds/xds_bootstrap.h +20 -15
- data/src/core/ext/xds/xds_certificate_provider.h +1 -0
- data/src/core/ext/xds/xds_channel_creds.cc +108 -0
- data/src/core/ext/xds/xds_channel_creds.h +50 -0
- data/src/core/ext/xds/xds_client.cc +584 -994
- data/src/core/ext/xds/xds_client.h +78 -135
- data/src/core/ext/xds/xds_cluster.cc +451 -0
- data/src/core/ext/xds/xds_cluster.h +111 -0
- data/src/core/ext/xds/xds_common_types.cc +388 -0
- data/src/core/ext/xds/xds_common_types.h +110 -0
- data/src/core/ext/xds/xds_endpoint.cc +364 -0
- data/src/core/ext/xds/xds_endpoint.h +135 -0
- data/src/core/ext/xds/xds_http_filters.cc +5 -0
- data/src/core/ext/xds/xds_http_rbac_filter.cc +563 -0
- data/src/core/ext/xds/xds_http_rbac_filter.h +54 -0
- data/src/core/ext/xds/xds_listener.cc +1036 -0
- data/src/core/ext/xds/xds_listener.h +220 -0
- data/src/core/ext/{transport/chttp2/transport/hpack_utils.h → xds/xds_resource_type.cc} +12 -9
- data/src/core/ext/xds/xds_resource_type.h +98 -0
- data/src/core/ext/xds/xds_resource_type_impl.h +87 -0
- data/src/core/ext/xds/xds_route_config.cc +993 -0
- data/src/core/ext/xds/xds_route_config.h +215 -0
- data/src/core/ext/xds/xds_routing.cc +11 -8
- data/src/core/ext/xds/xds_routing.h +8 -5
- data/src/core/ext/xds/xds_server_config_fetcher.cc +159 -99
- data/src/core/lib/address_utils/parse_address.cc +20 -0
- data/src/core/lib/address_utils/parse_address.h +5 -0
- data/src/core/lib/address_utils/sockaddr_utils.cc +33 -36
- data/src/core/lib/address_utils/sockaddr_utils.h +1 -16
- data/src/core/lib/backoff/backoff.cc +4 -30
- data/src/core/lib/backoff/backoff.h +3 -3
- data/src/core/lib/channel/channel_args.cc +0 -1
- data/src/core/lib/channel/channel_stack.cc +8 -0
- data/src/core/lib/channel/channel_stack.h +1 -1
- data/src/core/lib/channel/channel_stack_builder.cc +5 -9
- data/src/core/lib/channel/channel_stack_builder.h +4 -7
- data/src/core/lib/channel/channelz.cc +1 -0
- data/src/core/lib/compression/compression.cc +19 -111
- data/src/core/lib/compression/compression_internal.cc +142 -202
- data/src/core/lib/compression/compression_internal.h +64 -69
- data/src/core/lib/compression/message_compress.cc +11 -11
- data/src/core/lib/compression/message_compress.h +2 -2
- data/src/core/lib/gpr/useful.h +4 -0
- data/src/core/lib/gprpp/bitset.h +7 -0
- data/src/core/lib/gprpp/chunked_vector.h +45 -3
- data/src/core/lib/gprpp/status_helper.cc +20 -28
- data/src/core/lib/gprpp/status_helper.h +6 -19
- data/src/core/lib/gprpp/table.h +11 -0
- data/src/core/lib/http/httpcli.cc +37 -46
- data/src/core/lib/http/httpcli.h +3 -15
- data/src/core/lib/iomgr/call_combiner.cc +15 -4
- data/src/core/lib/iomgr/closure.h +29 -9
- data/src/core/lib/iomgr/combiner.cc +25 -3
- data/src/core/lib/iomgr/error.cc +2 -0
- data/src/core/lib/iomgr/error.h +3 -0
- data/src/core/lib/iomgr/event_engine/iomgr.cc +3 -2
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.cc +6 -0
- data/src/core/lib/iomgr/event_engine/resolved_address_internal.h +2 -0
- data/src/core/lib/iomgr/event_engine/resolver.cc +66 -48
- data/src/core/lib/iomgr/event_engine/resolver.h +56 -0
- data/src/core/lib/iomgr/exec_ctx.cc +22 -9
- data/src/core/lib/iomgr/executor.cc +10 -1
- data/src/core/lib/iomgr/fork_posix.cc +3 -2
- data/src/core/lib/iomgr/iomgr_custom.cc +4 -1
- data/src/core/lib/iomgr/iomgr_posix.cc +2 -2
- data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +2 -2
- data/src/core/lib/iomgr/iomgr_windows.cc +2 -2
- data/src/core/lib/iomgr/port.h +2 -2
- data/src/core/lib/iomgr/resolve_address.cc +5 -24
- data/src/core/lib/iomgr/resolve_address.h +47 -44
- data/src/core/lib/iomgr/resolve_address_custom.cc +131 -109
- data/src/core/lib/iomgr/resolve_address_custom.h +101 -19
- data/src/core/lib/iomgr/resolve_address_impl.h +59 -0
- data/src/core/lib/iomgr/resolve_address_posix.cc +82 -66
- data/src/core/lib/iomgr/resolve_address_posix.h +47 -0
- data/src/core/lib/iomgr/resolve_address_windows.cc +93 -74
- data/src/core/lib/iomgr/resolve_address_windows.h +47 -0
- data/src/core/lib/iomgr/resolved_address.h +39 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +1 -0
- data/src/core/lib/iomgr/tcp_server_utils_posix_ifaddrs.cc +1 -0
- data/src/core/lib/iomgr/unix_sockets_posix.cc +22 -34
- data/src/core/lib/iomgr/unix_sockets_posix.h +4 -7
- data/src/core/lib/iomgr/unix_sockets_posix_noop.cc +6 -15
- data/src/core/lib/matchers/matchers.cc +1 -1
- data/src/core/lib/promise/activity.h +49 -20
- data/src/core/lib/promise/detail/status.h +5 -0
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.cc +17 -25
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver.h +43 -44
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_factory.h +10 -5
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.cc +3 -2
- data/src/core/{ext/filters/client_channel → lib/resolver}/resolver_registry.h +4 -5
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.cc +1 -1
- data/src/core/{ext/filters/client_channel → lib/resolver}/server_address.h +4 -4
- data/src/core/lib/resource_quota/api.h +0 -1
- data/src/core/lib/{gprpp → resource_quota}/arena.cc +16 -13
- data/src/core/lib/{gprpp → resource_quota}/arena.h +24 -13
- data/src/core/lib/security/authorization/evaluate_args.cc +30 -15
- data/src/core/lib/security/authorization/evaluate_args.h +1 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.cc +60 -0
- data/src/core/lib/security/authorization/grpc_authorization_engine.h +62 -0
- data/src/core/lib/security/authorization/matchers.cc +227 -0
- data/src/core/lib/security/authorization/matchers.h +211 -0
- data/src/core/lib/security/authorization/rbac_policy.cc +442 -0
- data/src/core/lib/security/authorization/rbac_policy.h +170 -0
- data/src/core/lib/security/context/security_context.cc +4 -2
- data/src/core/lib/security/context/security_context.h +1 -1
- data/src/core/lib/security/credentials/composite/composite_credentials.cc +5 -5
- data/src/core/lib/security/credentials/composite/composite_credentials.h +4 -3
- data/src/core/lib/security/credentials/credentials.h +10 -20
- data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +6 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.cc +7 -9
- data/src/core/lib/security/credentials/external/external_account_credentials.h +2 -7
- data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +2 -3
- data/src/core/lib/security/credentials/fake/fake_credentials.cc +5 -4
- data/src/core/lib/security/credentials/fake/fake_credentials.h +8 -7
- data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +2 -5
- data/src/core/lib/security/credentials/iam/iam_credentials.cc +16 -19
- data/src/core/lib/security/credentials/iam/iam_credentials.h +6 -5
- data/src/core/lib/security/credentials/jwt/json_token.cc +4 -6
- data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +16 -28
- data/src/core/lib/security/credentials/jwt/jwt_credentials.h +8 -8
- data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +6 -13
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +44 -57
- data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +13 -15
- data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +6 -7
- data/src/core/lib/security/credentials/plugin/plugin_credentials.h +5 -4
- data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +1 -10
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +6 -0
- data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +7 -0
- data/src/core/lib/security/credentials/xds/xds_credentials.h +1 -1
- data/src/core/lib/security/security_connector/security_connector.cc +0 -4
- data/src/core/lib/security/security_connector/security_connector.h +5 -1
- data/src/core/lib/security/security_connector/ssl_utils.cc +14 -24
- data/src/core/lib/security/security_connector/ssl_utils.h +5 -14
- data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +2 -3
- data/src/core/lib/security/transport/auth_filters.h +7 -0
- data/src/core/lib/security/transport/client_auth_filter.cc +53 -33
- data/src/core/lib/security/transport/server_auth_filter.cc +40 -35
- data/src/core/{ext → lib}/service_config/service_config.cc +2 -2
- data/src/core/{ext → lib}/service_config/service_config.h +4 -4
- data/src/core/{ext → lib}/service_config/service_config_call_data.h +5 -5
- data/src/core/{ext → lib}/service_config/service_config_parser.cc +1 -1
- data/src/core/{ext → lib}/service_config/service_config_parser.h +3 -3
- data/src/core/lib/slice/slice.cc +3 -1
- data/src/core/lib/slice/slice.h +43 -13
- data/src/core/lib/slice/slice_intern.cc +3 -101
- data/src/core/lib/slice/slice_internal.h +1 -2
- data/src/core/lib/slice/slice_refcount.h +4 -13
- data/src/core/lib/slice/slice_refcount_base.h +0 -16
- data/src/core/lib/surface/call.cc +140 -382
- data/src/core/lib/surface/call.h +4 -4
- data/src/core/lib/surface/channel.cc +42 -44
- data/src/core/lib/surface/channel.h +4 -4
- data/src/core/lib/surface/init.cc +0 -2
- data/src/core/lib/surface/lame_client.cc +0 -1
- data/src/core/lib/surface/server.cc +12 -29
- data/src/core/lib/surface/server.h +2 -2
- data/src/core/lib/surface/version.cc +2 -2
- data/src/core/lib/transport/error_utils.h +14 -0
- data/src/core/lib/transport/metadata_batch.h +799 -717
- data/src/core/lib/transport/parsed_metadata.cc +2 -0
- data/src/core/lib/transport/parsed_metadata.h +95 -92
- data/src/core/lib/transport/timeout_encoding.cc +200 -66
- data/src/core/lib/transport/timeout_encoding.h +40 -10
- data/src/core/lib/transport/transport.h +1 -1
- data/src/core/lib/transport/transport_op_string.cc +6 -39
- data/src/core/lib/uri/uri_parser.cc +223 -53
- data/src/core/lib/uri/uri_parser.h +36 -23
- data/src/core/plugin_registry/grpc_plugin_registry.cc +4 -3
- data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
- data/src/core/tsi/ssl/session_cache/ssl_session.h +2 -4
- data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +3 -5
- data/src/core/tsi/ssl_transport_security.cc +53 -13
- data/src/core/tsi/ssl_transport_security.h +18 -6
- data/src/ruby/ext/grpc/extconf.rb +10 -3
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +2 -0
- data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +3 -0
- data/src/ruby/lib/grpc/version.rb +1 -1
- data/src/ruby/pb/src/proto/grpc/testing/test_pb.rb +2 -1
- data/third_party/abseil-cpp/absl/base/internal/fast_type_id.h +48 -0
- data/third_party/abseil-cpp/absl/random/bernoulli_distribution.h +200 -0
- data/third_party/abseil-cpp/absl/random/beta_distribution.h +427 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.cc +98 -0
- data/third_party/abseil-cpp/absl/random/discrete_distribution.h +247 -0
- data/third_party/abseil-cpp/absl/random/distributions.h +452 -0
- data/third_party/abseil-cpp/absl/random/exponential_distribution.h +165 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.cc +104 -0
- data/third_party/abseil-cpp/absl/random/gaussian_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/internal/distribution_caller.h +92 -0
- data/third_party/abseil-cpp/absl/random/internal/fast_uniform_bits.h +268 -0
- data/third_party/abseil-cpp/absl/random/internal/fastmath.h +57 -0
- data/third_party/abseil-cpp/absl/random/internal/generate_real.h +144 -0
- data/third_party/abseil-cpp/absl/random/internal/iostream_state_saver.h +245 -0
- data/third_party/abseil-cpp/absl/random/internal/nonsecure_base.h +150 -0
- data/third_party/abseil-cpp/absl/random/internal/pcg_engine.h +308 -0
- data/third_party/abseil-cpp/absl/random/internal/platform.h +171 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.cc +253 -0
- data/third_party/abseil-cpp/absl/random/internal/pool_urbg.h +131 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.cc +91 -0
- data/third_party/abseil-cpp/absl/random/internal/randen.h +102 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.cc +221 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_detect.h +33 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_engine.h +239 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.cc +526 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_hwaes.h +50 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_round_keys.cc +462 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.cc +471 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_slow.h +40 -0
- data/third_party/abseil-cpp/absl/random/internal/randen_traits.h +88 -0
- data/third_party/abseil-cpp/absl/random/internal/salted_seed_seq.h +167 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.cc +267 -0
- data/third_party/abseil-cpp/absl/random/internal/seed_material.h +104 -0
- data/third_party/abseil-cpp/absl/random/internal/traits.h +101 -0
- data/third_party/abseil-cpp/absl/random/internal/uniform_helper.h +244 -0
- data/third_party/abseil-cpp/absl/random/internal/wide_multiply.h +111 -0
- data/third_party/abseil-cpp/absl/random/log_uniform_int_distribution.h +257 -0
- data/third_party/abseil-cpp/absl/random/poisson_distribution.h +258 -0
- data/third_party/abseil-cpp/absl/random/random.h +189 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.cc +46 -0
- data/third_party/abseil-cpp/absl/random/seed_gen_exception.h +55 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.cc +29 -0
- data/third_party/abseil-cpp/absl/random/seed_sequences.h +110 -0
- data/third_party/abseil-cpp/absl/random/uniform_int_distribution.h +275 -0
- data/third_party/abseil-cpp/absl/random/uniform_real_distribution.h +202 -0
- data/third_party/abseil-cpp/absl/random/zipf_distribution.h +271 -0
- data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +1 -0
- data/third_party/boringssl-with-bazel/src/crypto/base64/base64.c +13 -0
- data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +21 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/cipher/cipher.c +12 -0
- data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +1 -2
- data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +2 -2
- data/third_party/boringssl-with-bazel/src/crypto/mem.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs7/pkcs7.c +29 -0
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/internal.h +0 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8.c +1 -1
- data/third_party/boringssl-with-bazel/src/crypto/pkcs8/pkcs8_x509.c +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/base64.h +8 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +13 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/dsa.h +10 -0
- data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +1 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs7.h +9 -4
- data/third_party/boringssl-with-bazel/src/include/openssl/pkcs8.h +6 -1
- data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +23 -2
- data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +4 -0
- data/third_party/xxhash/xxhash.h +607 -352
- metadata +149 -77
- data/src/core/ext/transport/chttp2/transport/hpack_encoder_index.h +0 -107
- data/src/core/ext/transport/chttp2/transport/hpack_utils.cc +0 -46
- data/src/core/ext/transport/chttp2/transport/popularity_count.h +0 -60
- data/src/core/lib/compression/algorithm_metadata.h +0 -62
- data/src/core/lib/compression/compression_args.cc +0 -140
- data/src/core/lib/compression/compression_args.h +0 -58
- data/src/core/lib/compression/stream_compression.cc +0 -81
- data/src/core/lib/compression/stream_compression.h +0 -117
- data/src/core/lib/compression/stream_compression_gzip.cc +0 -231
- data/src/core/lib/compression/stream_compression_gzip.h +0 -28
- data/src/core/lib/compression/stream_compression_identity.cc +0 -91
- data/src/core/lib/compression/stream_compression_identity.h +0 -29
- data/src/core/lib/security/credentials/credentials_metadata.cc +0 -61
- data/src/core/lib/slice/static_slice.cc +0 -377
- data/src/core/lib/slice/static_slice.h +0 -300
- data/src/core/lib/transport/metadata.cc +0 -714
- data/src/core/lib/transport/metadata.h +0 -449
- data/src/core/lib/transport/metadata_batch.cc +0 -99
- data/src/core/lib/transport/static_metadata.cc +0 -1032
- data/src/core/lib/transport/static_metadata.h +0 -322
- data/src/core/lib/transport/status_metadata.cc +0 -63
- data/src/core/lib/transport/status_metadata.h +0 -48
@@ -22,8 +22,8 @@
|
|
22
22
|
// Tracks the total memory allocated against it, so that future arenas can
|
23
23
|
// pre-allocate the right amount of memory
|
24
24
|
|
25
|
-
#ifndef
|
26
|
-
#define
|
25
|
+
#ifndef GRPC_CORE_LIB_RESOURCE_QUOTA_ARENA_H
|
26
|
+
#define GRPC_CORE_LIB_RESOURCE_QUOTA_ARENA_H
|
27
27
|
|
28
28
|
#include <grpc/support/port_platform.h>
|
29
29
|
|
@@ -38,20 +38,22 @@
|
|
38
38
|
#include <grpc/support/sync.h>
|
39
39
|
|
40
40
|
#include "src/core/lib/gpr/alloc.h"
|
41
|
-
#include "src/core/lib/
|
41
|
+
#include "src/core/lib/promise/context.h"
|
42
|
+
#include "src/core/lib/resource_quota/memory_quota.h"
|
42
43
|
|
43
44
|
namespace grpc_core {
|
44
45
|
|
45
46
|
class Arena {
|
46
47
|
public:
|
47
48
|
// Create an arena, with \a initial_size bytes in the first allocated buffer.
|
48
|
-
static Arena* Create(size_t initial_size);
|
49
|
+
static Arena* Create(size_t initial_size, MemoryAllocator* memory_allocator);
|
49
50
|
|
50
51
|
// Create an arena, with \a initial_size bytes in the first allocated buffer,
|
51
52
|
// and return both a void pointer to the returned arena and a void* with the
|
52
53
|
// first allocation.
|
53
|
-
static std::pair<Arena*, void*> CreateWithAlloc(
|
54
|
-
|
54
|
+
static std::pair<Arena*, void*> CreateWithAlloc(
|
55
|
+
size_t initial_size, size_t alloc_size,
|
56
|
+
MemoryAllocator* memory_allocator);
|
55
57
|
|
56
58
|
// Destroy an arena, returning the total number of bytes allocated.
|
57
59
|
size_t Destroy();
|
@@ -96,9 +98,11 @@ class Arena {
|
|
96
98
|
// quick optimization (avoiding an atomic fetch-add) for the common case
|
97
99
|
// where we wish to create an arena and then perform an immediate
|
98
100
|
// allocation.
|
99
|
-
explicit Arena(size_t initial_size, size_t initial_alloc
|
101
|
+
explicit Arena(size_t initial_size, size_t initial_alloc,
|
102
|
+
MemoryAllocator* memory_allocator)
|
100
103
|
: total_used_(GPR_ROUND_UP_TO_ALIGNMENT_SIZE(initial_alloc)),
|
101
|
-
initial_zone_size_(initial_size)
|
104
|
+
initial_zone_size_(initial_size),
|
105
|
+
memory_allocator_(memory_allocator) {}
|
102
106
|
|
103
107
|
~Arena();
|
104
108
|
|
@@ -107,14 +111,16 @@ class Arena {
|
|
107
111
|
// Keep track of the total used size. We use this in our call sizing
|
108
112
|
// hysteresis.
|
109
113
|
std::atomic<size_t> total_used_{0};
|
114
|
+
std::atomic<size_t> total_allocated_{0};
|
110
115
|
const size_t initial_zone_size_;
|
111
|
-
gpr_spinlock arena_growth_spinlock_ = GPR_SPINLOCK_STATIC_INITIALIZER;
|
112
116
|
// If the initial arena allocation wasn't enough, we allocate additional zones
|
113
117
|
// in a reverse linked list. Each additional zone consists of (1) a pointer to
|
114
118
|
// the zone added before this zone (null if this is the first additional zone)
|
115
119
|
// and (2) the allocated memory. The arena itself maintains a pointer to the
|
116
120
|
// last zone; the zone list is reverse-walked during arena destruction only.
|
117
|
-
Zone
|
121
|
+
std::atomic<Zone*> last_zone_{nullptr};
|
122
|
+
// The backing memory quota
|
123
|
+
MemoryAllocator* const memory_allocator_;
|
118
124
|
};
|
119
125
|
|
120
126
|
// Smart pointer for arenas when the final size is not required.
|
@@ -122,10 +128,15 @@ struct ScopedArenaDeleter {
|
|
122
128
|
void operator()(Arena* arena) { arena->Destroy(); }
|
123
129
|
};
|
124
130
|
using ScopedArenaPtr = std::unique_ptr<Arena, ScopedArenaDeleter>;
|
125
|
-
inline ScopedArenaPtr MakeScopedArena(size_t initial_size
|
126
|
-
|
131
|
+
inline ScopedArenaPtr MakeScopedArena(size_t initial_size,
|
132
|
+
MemoryAllocator* memory_allocator) {
|
133
|
+
return ScopedArenaPtr(Arena::Create(initial_size, memory_allocator));
|
127
134
|
}
|
128
135
|
|
136
|
+
// Arenas form a context for activities
|
137
|
+
template <>
|
138
|
+
struct ContextType<Arena> {};
|
139
|
+
|
129
140
|
} // namespace grpc_core
|
130
141
|
|
131
|
-
#endif /*
|
142
|
+
#endif /* GRPC_CORE_LIB_RESOURCE_QUOTA_ARENA_H */
|
@@ -81,14 +81,13 @@ EvaluateArgs::PerChannelArgs::PerChannelArgs(grpc_auth_context* auth_context,
|
|
81
81
|
}
|
82
82
|
|
83
83
|
absl::string_view EvaluateArgs::GetPath() const {
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
path = StringViewFromSlice(val);
|
84
|
+
if (metadata_ != nullptr) {
|
85
|
+
const auto* path = metadata_->get_pointer(HttpPathMetadata());
|
86
|
+
if (path != nullptr) {
|
87
|
+
return path->as_string_view();
|
88
|
+
}
|
90
89
|
}
|
91
|
-
return
|
90
|
+
return absl::string_view();
|
92
91
|
}
|
93
92
|
|
94
93
|
absl::string_view EvaluateArgs::GetHost() const {
|
@@ -101,15 +100,24 @@ absl::string_view EvaluateArgs::GetHost() const {
|
|
101
100
|
return host;
|
102
101
|
}
|
103
102
|
|
103
|
+
absl::string_view EvaluateArgs::GetAuthority() const {
|
104
|
+
absl::string_view authority;
|
105
|
+
if (metadata_ != nullptr) {
|
106
|
+
if (auto* authority_md = metadata_->get_pointer(HttpAuthorityMetadata())) {
|
107
|
+
authority = authority_md->as_string_view();
|
108
|
+
}
|
109
|
+
}
|
110
|
+
return authority;
|
111
|
+
}
|
112
|
+
|
104
113
|
absl::string_view EvaluateArgs::GetMethod() const {
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
method = StringViewFromSlice(val);
|
114
|
+
if (metadata_ != nullptr) {
|
115
|
+
auto method_md = metadata_->get(HttpMethodMetadata());
|
116
|
+
if (method_md.has_value()) {
|
117
|
+
return HttpMethodMetadata::Encode(*method_md).as_string_view();
|
118
|
+
}
|
111
119
|
}
|
112
|
-
return
|
120
|
+
return absl::string_view();
|
113
121
|
}
|
114
122
|
|
115
123
|
absl::optional<absl::string_view> EvaluateArgs::GetHeaderValue(
|
@@ -117,7 +125,14 @@ absl::optional<absl::string_view> EvaluateArgs::GetHeaderValue(
|
|
117
125
|
if (metadata_ == nullptr) {
|
118
126
|
return absl::nullopt;
|
119
127
|
}
|
120
|
-
|
128
|
+
if (absl::EqualsIgnoreCase(key, "te")) {
|
129
|
+
return absl::nullopt;
|
130
|
+
}
|
131
|
+
if (absl::EqualsIgnoreCase(key, "host")) {
|
132
|
+
// Maps legacy host header to :authority.
|
133
|
+
return GetAuthority();
|
134
|
+
}
|
135
|
+
return metadata_->GetStringValue(key, concatenated_value);
|
121
136
|
}
|
122
137
|
|
123
138
|
grpc_resolved_address EvaluateArgs::GetLocalAddress() const {
|
@@ -58,6 +58,7 @@ class EvaluateArgs {
|
|
58
58
|
|
59
59
|
absl::string_view GetPath() const;
|
60
60
|
absl::string_view GetHost() const;
|
61
|
+
absl::string_view GetAuthority() const;
|
61
62
|
absl::string_view GetMethod() const;
|
62
63
|
// Returns metadata value(s) for the specified key.
|
63
64
|
// If the key is not present in the batch, returns absl::nullopt.
|
@@ -0,0 +1,60 @@
|
|
1
|
+
// Copyright 2021 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "src/core/lib/security/authorization/grpc_authorization_engine.h"
|
18
|
+
|
19
|
+
namespace grpc_core {
|
20
|
+
|
21
|
+
GrpcAuthorizationEngine::GrpcAuthorizationEngine(Rbac policy)
|
22
|
+
: action_(policy.action) {
|
23
|
+
for (auto& sub_policy : policy.policies) {
|
24
|
+
Policy policy;
|
25
|
+
policy.name = sub_policy.first;
|
26
|
+
policy.matcher = absl::make_unique<PolicyAuthorizationMatcher>(
|
27
|
+
std::move(sub_policy.second));
|
28
|
+
policies_.push_back(std::move(policy));
|
29
|
+
}
|
30
|
+
}
|
31
|
+
|
32
|
+
GrpcAuthorizationEngine::GrpcAuthorizationEngine(
|
33
|
+
GrpcAuthorizationEngine&& other) noexcept
|
34
|
+
: action_(other.action_), policies_(std::move(other.policies_)) {}
|
35
|
+
|
36
|
+
GrpcAuthorizationEngine& GrpcAuthorizationEngine::operator=(
|
37
|
+
GrpcAuthorizationEngine&& other) noexcept {
|
38
|
+
action_ = other.action_;
|
39
|
+
policies_ = std::move(other.policies_);
|
40
|
+
return *this;
|
41
|
+
}
|
42
|
+
|
43
|
+
AuthorizationEngine::Decision GrpcAuthorizationEngine::Evaluate(
|
44
|
+
const EvaluateArgs& args) const {
|
45
|
+
Decision decision;
|
46
|
+
bool matches = false;
|
47
|
+
for (const auto& policy : policies_) {
|
48
|
+
if (policy.matcher->Matches(args)) {
|
49
|
+
matches = true;
|
50
|
+
decision.matching_policy_name = policy.name;
|
51
|
+
break;
|
52
|
+
}
|
53
|
+
}
|
54
|
+
decision.type = (matches == (action_ == Rbac::Action::kAllow))
|
55
|
+
? Decision::Type::kAllow
|
56
|
+
: Decision::Type::kDeny;
|
57
|
+
return decision;
|
58
|
+
}
|
59
|
+
|
60
|
+
} // namespace grpc_core
|
@@ -0,0 +1,62 @@
|
|
1
|
+
// Copyright 2021 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#ifndef GRPC_CORE_LIB_SECURITY_AUTHORIZATION_GRPC_AUTHORIZATION_ENGINE_H
|
16
|
+
#define GRPC_CORE_LIB_SECURITY_AUTHORIZATION_GRPC_AUTHORIZATION_ENGINE_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include "src/core/lib/security/authorization/authorization_engine.h"
|
21
|
+
#include "src/core/lib/security/authorization/matchers.h"
|
22
|
+
#include "src/core/lib/security/authorization/rbac_policy.h"
|
23
|
+
|
24
|
+
namespace grpc_core {
|
25
|
+
|
26
|
+
// GrpcAuthorizationEngine can be either an Allow engine or Deny engine. This
|
27
|
+
// engine makes authorization decisions to Allow or Deny incoming RPC request
|
28
|
+
// based on permission and principal configs in the provided RBAC policy and the
|
29
|
+
// engine type. This engine ignores condition field in RBAC config. It is the
|
30
|
+
// caller's responsibility to provide RBAC policies that are compatible with
|
31
|
+
// this engine.
|
32
|
+
class GrpcAuthorizationEngine : public AuthorizationEngine {
|
33
|
+
public:
|
34
|
+
// Builds GrpcAuthorizationEngine without any policies.
|
35
|
+
explicit GrpcAuthorizationEngine(Rbac::Action action) : action_(action) {}
|
36
|
+
// Builds GrpcAuthorizationEngine with allow/deny RBAC policy.
|
37
|
+
explicit GrpcAuthorizationEngine(Rbac policy);
|
38
|
+
|
39
|
+
GrpcAuthorizationEngine(GrpcAuthorizationEngine&& other) noexcept;
|
40
|
+
GrpcAuthorizationEngine& operator=(GrpcAuthorizationEngine&& other) noexcept;
|
41
|
+
|
42
|
+
Rbac::Action action() const { return action_; }
|
43
|
+
|
44
|
+
// Required only for testing purpose.
|
45
|
+
size_t num_policies() const { return policies_.size(); }
|
46
|
+
|
47
|
+
// Evaluates incoming request against RBAC policy and makes a decision to
|
48
|
+
// whether allow/deny this request.
|
49
|
+
Decision Evaluate(const EvaluateArgs& args) const override;
|
50
|
+
|
51
|
+
private:
|
52
|
+
struct Policy {
|
53
|
+
std::string name;
|
54
|
+
std::unique_ptr<AuthorizationMatcher> matcher;
|
55
|
+
};
|
56
|
+
Rbac::Action action_;
|
57
|
+
std::vector<Policy> policies_;
|
58
|
+
};
|
59
|
+
|
60
|
+
} // namespace grpc_core
|
61
|
+
|
62
|
+
#endif // GRPC_CORE_LIB_SECURITY_AUTHORIZATION_GRPC_AUTHORIZATION_ENGINE_H
|
@@ -0,0 +1,227 @@
|
|
1
|
+
// Copyright 2021 gRPC authors.
|
2
|
+
//
|
3
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
4
|
+
// you may not use this file except in compliance with the License.
|
5
|
+
// You may obtain a copy of the License at
|
6
|
+
//
|
7
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
8
|
+
//
|
9
|
+
// Unless required by applicable law or agreed to in writing, software
|
10
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
11
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
12
|
+
// See the License for the specific language governing permissions and
|
13
|
+
// limitations under the License.
|
14
|
+
|
15
|
+
#include <grpc/support/port_platform.h>
|
16
|
+
|
17
|
+
#include "src/core/lib/security/authorization/matchers.h"
|
18
|
+
|
19
|
+
#include <grpc/grpc_security_constants.h>
|
20
|
+
|
21
|
+
#include "src/core/lib/address_utils/parse_address.h"
|
22
|
+
#include "src/core/lib/address_utils/sockaddr_utils.h"
|
23
|
+
|
24
|
+
namespace grpc_core {
|
25
|
+
|
26
|
+
std::unique_ptr<AuthorizationMatcher> AuthorizationMatcher::Create(
|
27
|
+
Rbac::Permission permission) {
|
28
|
+
switch (permission.type) {
|
29
|
+
case Rbac::Permission::RuleType::kAnd: {
|
30
|
+
std::vector<std::unique_ptr<AuthorizationMatcher>> matchers;
|
31
|
+
for (const auto& rule : permission.permissions) {
|
32
|
+
matchers.push_back(AuthorizationMatcher::Create(std::move(*rule)));
|
33
|
+
}
|
34
|
+
return absl::make_unique<AndAuthorizationMatcher>(std::move(matchers));
|
35
|
+
}
|
36
|
+
case Rbac::Permission::RuleType::kOr: {
|
37
|
+
std::vector<std::unique_ptr<AuthorizationMatcher>> matchers;
|
38
|
+
for (const auto& rule : permission.permissions) {
|
39
|
+
matchers.push_back(AuthorizationMatcher::Create(std::move(*rule)));
|
40
|
+
}
|
41
|
+
return absl::make_unique<OrAuthorizationMatcher>(std::move(matchers));
|
42
|
+
}
|
43
|
+
case Rbac::Permission::RuleType::kNot:
|
44
|
+
return absl::make_unique<NotAuthorizationMatcher>(
|
45
|
+
AuthorizationMatcher::Create(std::move(*permission.permissions[0])));
|
46
|
+
case Rbac::Permission::RuleType::kAny:
|
47
|
+
return absl::make_unique<AlwaysAuthorizationMatcher>();
|
48
|
+
case Rbac::Permission::RuleType::kHeader:
|
49
|
+
return absl::make_unique<HeaderAuthorizationMatcher>(
|
50
|
+
std::move(permission.header_matcher));
|
51
|
+
case Rbac::Permission::RuleType::kPath:
|
52
|
+
return absl::make_unique<PathAuthorizationMatcher>(
|
53
|
+
std::move(permission.string_matcher));
|
54
|
+
case Rbac::Permission::RuleType::kDestIp:
|
55
|
+
return absl::make_unique<IpAuthorizationMatcher>(
|
56
|
+
IpAuthorizationMatcher::Type::kDestIp, std::move(permission.ip));
|
57
|
+
case Rbac::Permission::RuleType::kDestPort:
|
58
|
+
return absl::make_unique<PortAuthorizationMatcher>(permission.port);
|
59
|
+
case Rbac::Permission::RuleType::kMetadata:
|
60
|
+
return absl::make_unique<MetadataAuthorizationMatcher>(permission.invert);
|
61
|
+
case Rbac::Permission::RuleType::kReqServerName:
|
62
|
+
return absl::make_unique<ReqServerNameAuthorizationMatcher>(
|
63
|
+
std::move(permission.string_matcher));
|
64
|
+
}
|
65
|
+
return nullptr;
|
66
|
+
}
|
67
|
+
|
68
|
+
std::unique_ptr<AuthorizationMatcher> AuthorizationMatcher::Create(
|
69
|
+
Rbac::Principal principal) {
|
70
|
+
switch (principal.type) {
|
71
|
+
case Rbac::Principal::RuleType::kAnd: {
|
72
|
+
std::vector<std::unique_ptr<AuthorizationMatcher>> matchers;
|
73
|
+
for (const auto& id : principal.principals) {
|
74
|
+
matchers.push_back(AuthorizationMatcher::Create(std::move(*id)));
|
75
|
+
}
|
76
|
+
return absl::make_unique<AndAuthorizationMatcher>(std::move(matchers));
|
77
|
+
}
|
78
|
+
case Rbac::Principal::RuleType::kOr: {
|
79
|
+
std::vector<std::unique_ptr<AuthorizationMatcher>> matchers;
|
80
|
+
for (const auto& id : principal.principals) {
|
81
|
+
matchers.push_back(AuthorizationMatcher::Create(std::move(*id)));
|
82
|
+
}
|
83
|
+
return absl::make_unique<OrAuthorizationMatcher>(std::move(matchers));
|
84
|
+
}
|
85
|
+
case Rbac::Principal::RuleType::kNot:
|
86
|
+
return absl::make_unique<NotAuthorizationMatcher>(
|
87
|
+
AuthorizationMatcher::Create(std::move(*principal.principals[0])));
|
88
|
+
case Rbac::Principal::RuleType::kAny:
|
89
|
+
return absl::make_unique<AlwaysAuthorizationMatcher>();
|
90
|
+
case Rbac::Principal::RuleType::kPrincipalName:
|
91
|
+
return absl::make_unique<AuthenticatedAuthorizationMatcher>(
|
92
|
+
std::move(principal.string_matcher));
|
93
|
+
case Rbac::Principal::RuleType::kSourceIp:
|
94
|
+
return absl::make_unique<IpAuthorizationMatcher>(
|
95
|
+
IpAuthorizationMatcher::Type::kSourceIp, std::move(principal.ip));
|
96
|
+
case Rbac::Principal::RuleType::kDirectRemoteIp:
|
97
|
+
return absl::make_unique<IpAuthorizationMatcher>(
|
98
|
+
IpAuthorizationMatcher::Type::kDirectRemoteIp,
|
99
|
+
std::move(principal.ip));
|
100
|
+
case Rbac::Principal::RuleType::kRemoteIp:
|
101
|
+
return absl::make_unique<IpAuthorizationMatcher>(
|
102
|
+
IpAuthorizationMatcher::Type::kRemoteIp, std::move(principal.ip));
|
103
|
+
case Rbac::Principal::RuleType::kHeader:
|
104
|
+
return absl::make_unique<HeaderAuthorizationMatcher>(
|
105
|
+
std::move(principal.header_matcher));
|
106
|
+
case Rbac::Principal::RuleType::kPath:
|
107
|
+
return absl::make_unique<PathAuthorizationMatcher>(
|
108
|
+
std::move(principal.string_matcher));
|
109
|
+
case Rbac::Principal::RuleType::kMetadata:
|
110
|
+
return absl::make_unique<MetadataAuthorizationMatcher>(principal.invert);
|
111
|
+
}
|
112
|
+
return nullptr;
|
113
|
+
}
|
114
|
+
|
115
|
+
bool AndAuthorizationMatcher::Matches(const EvaluateArgs& args) const {
|
116
|
+
for (const auto& matcher : matchers_) {
|
117
|
+
if (!matcher->Matches(args)) {
|
118
|
+
return false;
|
119
|
+
}
|
120
|
+
}
|
121
|
+
return true;
|
122
|
+
}
|
123
|
+
|
124
|
+
bool OrAuthorizationMatcher::Matches(const EvaluateArgs& args) const {
|
125
|
+
for (const auto& matcher : matchers_) {
|
126
|
+
if (matcher->Matches(args)) {
|
127
|
+
return true;
|
128
|
+
}
|
129
|
+
}
|
130
|
+
return false;
|
131
|
+
}
|
132
|
+
|
133
|
+
bool NotAuthorizationMatcher::Matches(const EvaluateArgs& args) const {
|
134
|
+
return !matcher_->Matches(args);
|
135
|
+
}
|
136
|
+
|
137
|
+
bool HeaderAuthorizationMatcher::Matches(const EvaluateArgs& args) const {
|
138
|
+
std::string concatenated_value;
|
139
|
+
return matcher_.Match(
|
140
|
+
args.GetHeaderValue(matcher_.name(), &concatenated_value));
|
141
|
+
}
|
142
|
+
|
143
|
+
IpAuthorizationMatcher::IpAuthorizationMatcher(Type type, Rbac::CidrRange range)
|
144
|
+
: type_(type), prefix_len_(range.prefix_len) {
|
145
|
+
grpc_error_handle error =
|
146
|
+
grpc_string_to_sockaddr(&subnet_address_, range.address_prefix.c_str(),
|
147
|
+
/*port does not matter here*/ 0);
|
148
|
+
if (error == GRPC_ERROR_NONE) {
|
149
|
+
grpc_sockaddr_mask_bits(&subnet_address_, prefix_len_);
|
150
|
+
} else {
|
151
|
+
gpr_log(GPR_DEBUG, "CidrRange address %s is not IPv4/IPv6. Error: %s",
|
152
|
+
range.address_prefix.c_str(), grpc_error_std_string(error).c_str());
|
153
|
+
}
|
154
|
+
GRPC_ERROR_UNREF(error);
|
155
|
+
}
|
156
|
+
|
157
|
+
bool IpAuthorizationMatcher::Matches(const EvaluateArgs& args) const {
|
158
|
+
grpc_resolved_address address;
|
159
|
+
switch (type_) {
|
160
|
+
case Type::kDestIp: {
|
161
|
+
address = args.GetLocalAddress();
|
162
|
+
break;
|
163
|
+
}
|
164
|
+
case Type::kSourceIp:
|
165
|
+
case Type::kDirectRemoteIp:
|
166
|
+
case Type::kRemoteIp: {
|
167
|
+
address = args.GetPeerAddress();
|
168
|
+
break;
|
169
|
+
}
|
170
|
+
default:
|
171
|
+
return false;
|
172
|
+
}
|
173
|
+
return grpc_sockaddr_match_subnet(&address, &subnet_address_, prefix_len_);
|
174
|
+
}
|
175
|
+
|
176
|
+
bool PortAuthorizationMatcher::Matches(const EvaluateArgs& args) const {
|
177
|
+
return port_ == args.GetLocalPort();
|
178
|
+
}
|
179
|
+
|
180
|
+
bool AuthenticatedAuthorizationMatcher::Matches(
|
181
|
+
const EvaluateArgs& args) const {
|
182
|
+
if (args.GetTransportSecurityType() != GRPC_SSL_TRANSPORT_SECURITY_TYPE &&
|
183
|
+
args.GetTransportSecurityType() != GRPC_TLS_TRANSPORT_SECURITY_TYPE) {
|
184
|
+
// Connection is not authenticated.
|
185
|
+
return false;
|
186
|
+
}
|
187
|
+
if (matcher_.string_matcher().empty()) {
|
188
|
+
// Allows any authenticated user.
|
189
|
+
return true;
|
190
|
+
}
|
191
|
+
std::vector<absl::string_view> uri_sans = args.GetUriSans();
|
192
|
+
if (!uri_sans.empty()) {
|
193
|
+
for (const auto& uri : uri_sans) {
|
194
|
+
if (matcher_.Match(uri)) {
|
195
|
+
return true;
|
196
|
+
}
|
197
|
+
}
|
198
|
+
}
|
199
|
+
std::vector<absl::string_view> dns_sans = args.GetDnsSans();
|
200
|
+
if (!dns_sans.empty()) {
|
201
|
+
for (const auto& dns : dns_sans) {
|
202
|
+
if (matcher_.Match(dns)) {
|
203
|
+
return true;
|
204
|
+
}
|
205
|
+
}
|
206
|
+
}
|
207
|
+
return matcher_.Match(args.GetSubject());
|
208
|
+
}
|
209
|
+
|
210
|
+
bool ReqServerNameAuthorizationMatcher::Matches(const EvaluateArgs&) const {
|
211
|
+
// Currently we only support matching against an empty string.
|
212
|
+
return matcher_.Match("");
|
213
|
+
}
|
214
|
+
|
215
|
+
bool PathAuthorizationMatcher::Matches(const EvaluateArgs& args) const {
|
216
|
+
absl::string_view path = args.GetPath();
|
217
|
+
if (!path.empty()) {
|
218
|
+
return matcher_.Match(path);
|
219
|
+
}
|
220
|
+
return false;
|
221
|
+
}
|
222
|
+
|
223
|
+
bool PolicyAuthorizationMatcher::Matches(const EvaluateArgs& args) const {
|
224
|
+
return permissions_->Matches(args) && principals_->Matches(args);
|
225
|
+
}
|
226
|
+
|
227
|
+
} // namespace grpc_core
|