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
@@ -0,0 +1,563 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2021 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#include <grpc/support/port_platform.h>
|
18
|
+
|
19
|
+
#include "src/core/ext/xds/xds_http_rbac_filter.h"
|
20
|
+
|
21
|
+
#include "absl/strings/str_format.h"
|
22
|
+
#include "envoy/config/core/v3/address.upb.h"
|
23
|
+
#include "envoy/config/rbac/v3/rbac.upb.h"
|
24
|
+
#include "envoy/config/route/v3/route_components.upb.h"
|
25
|
+
#include "envoy/extensions/filters/http/rbac/v3/rbac.upb.h"
|
26
|
+
#include "envoy/extensions/filters/http/rbac/v3/rbac.upbdefs.h"
|
27
|
+
#include "envoy/type/matcher/v3/metadata.upb.h"
|
28
|
+
#include "envoy/type/matcher/v3/path.upb.h"
|
29
|
+
#include "envoy/type/matcher/v3/regex.upb.h"
|
30
|
+
#include "envoy/type/matcher/v3/string.upb.h"
|
31
|
+
#include "envoy/type/v3/range.upb.h"
|
32
|
+
#include "google/protobuf/wrappers.upb.h"
|
33
|
+
|
34
|
+
#include "src/core/ext/filters/rbac/rbac_filter.h"
|
35
|
+
#include "src/core/ext/filters/rbac/rbac_service_config_parser.h"
|
36
|
+
#include "src/core/ext/xds/upb_utils.h"
|
37
|
+
#include "src/core/lib/channel/channel_args.h"
|
38
|
+
|
39
|
+
namespace grpc_core {
|
40
|
+
|
41
|
+
const char* kXdsHttpRbacFilterConfigName =
|
42
|
+
"envoy.extensions.filters.http.rbac.v3.RBAC";
|
43
|
+
|
44
|
+
const char* kXdsHttpRbacFilterConfigOverrideName =
|
45
|
+
"envoy.extensions.filters.http.rbac.v3.RBACPerRoute";
|
46
|
+
|
47
|
+
namespace {
|
48
|
+
|
49
|
+
Json ParseRegexMatcherToJson(
|
50
|
+
const envoy_type_matcher_v3_RegexMatcher* regex_matcher) {
|
51
|
+
return Json::Object(
|
52
|
+
{{"regex", UpbStringToStdString(envoy_type_matcher_v3_RegexMatcher_regex(
|
53
|
+
regex_matcher))}});
|
54
|
+
}
|
55
|
+
|
56
|
+
Json ParseInt64RangeToJson(const envoy_type_v3_Int64Range* range) {
|
57
|
+
return Json::Object{{"start", envoy_type_v3_Int64Range_start(range)},
|
58
|
+
{"end", envoy_type_v3_Int64Range_end(range)}};
|
59
|
+
}
|
60
|
+
|
61
|
+
absl::StatusOr<Json> ParseHeaderMatcherToJson(
|
62
|
+
const envoy_config_route_v3_HeaderMatcher* header) {
|
63
|
+
Json::Object header_json;
|
64
|
+
std::vector<absl::Status> error_list;
|
65
|
+
std::string name =
|
66
|
+
UpbStringToStdString(envoy_config_route_v3_HeaderMatcher_name(header));
|
67
|
+
if (name == ":scheme") {
|
68
|
+
error_list.push_back(
|
69
|
+
absl::InvalidArgumentError("':scheme' not allowed in header"));
|
70
|
+
} else if (absl::StartsWith(name, "grpc-")) {
|
71
|
+
error_list.push_back(
|
72
|
+
absl::InvalidArgumentError("'grpc-' prefixes not allowed in header"));
|
73
|
+
}
|
74
|
+
header_json.emplace("name", std::move(name));
|
75
|
+
if (envoy_config_route_v3_HeaderMatcher_has_exact_match(header)) {
|
76
|
+
header_json.emplace(
|
77
|
+
"exactMatch",
|
78
|
+
UpbStringToStdString(
|
79
|
+
envoy_config_route_v3_HeaderMatcher_exact_match(header)));
|
80
|
+
} else if (envoy_config_route_v3_HeaderMatcher_has_safe_regex_match(header)) {
|
81
|
+
header_json.emplace(
|
82
|
+
"safeRegexMatch",
|
83
|
+
ParseRegexMatcherToJson(
|
84
|
+
envoy_config_route_v3_HeaderMatcher_safe_regex_match(header)));
|
85
|
+
} else if (envoy_config_route_v3_HeaderMatcher_has_range_match(header)) {
|
86
|
+
header_json.emplace(
|
87
|
+
"rangeMatch",
|
88
|
+
ParseInt64RangeToJson(
|
89
|
+
envoy_config_route_v3_HeaderMatcher_range_match(header)));
|
90
|
+
} else if (envoy_config_route_v3_HeaderMatcher_has_present_match(header)) {
|
91
|
+
header_json.emplace(
|
92
|
+
"presentMatch",
|
93
|
+
envoy_config_route_v3_HeaderMatcher_present_match(header));
|
94
|
+
} else if (envoy_config_route_v3_HeaderMatcher_has_prefix_match(header)) {
|
95
|
+
header_json.emplace(
|
96
|
+
"prefixMatch",
|
97
|
+
UpbStringToStdString(
|
98
|
+
envoy_config_route_v3_HeaderMatcher_prefix_match(header)));
|
99
|
+
} else if (envoy_config_route_v3_HeaderMatcher_has_suffix_match(header)) {
|
100
|
+
header_json.emplace(
|
101
|
+
"suffixMatch",
|
102
|
+
UpbStringToStdString(
|
103
|
+
envoy_config_route_v3_HeaderMatcher_suffix_match(header)));
|
104
|
+
} else if (envoy_config_route_v3_HeaderMatcher_has_contains_match(header)) {
|
105
|
+
header_json.emplace(
|
106
|
+
"containsMatch",
|
107
|
+
UpbStringToStdString(
|
108
|
+
envoy_config_route_v3_HeaderMatcher_contains_match(header)));
|
109
|
+
} else {
|
110
|
+
error_list.push_back(
|
111
|
+
absl::InvalidArgumentError("Invalid route header matcher specified."));
|
112
|
+
}
|
113
|
+
if (!error_list.empty()) {
|
114
|
+
return StatusCreate(absl::StatusCode::kInvalidArgument,
|
115
|
+
"Error parsing HeaderMatcher", DEBUG_LOCATION,
|
116
|
+
std::move(error_list));
|
117
|
+
}
|
118
|
+
header_json.emplace("invertMatch",
|
119
|
+
envoy_config_route_v3_HeaderMatcher_invert_match(header));
|
120
|
+
return header_json;
|
121
|
+
}
|
122
|
+
|
123
|
+
absl::StatusOr<Json> ParseStringMatcherToJson(
|
124
|
+
const envoy_type_matcher_v3_StringMatcher* matcher) {
|
125
|
+
Json::Object json;
|
126
|
+
if (envoy_type_matcher_v3_StringMatcher_has_exact(matcher)) {
|
127
|
+
json.emplace("exact",
|
128
|
+
UpbStringToStdString(
|
129
|
+
envoy_type_matcher_v3_StringMatcher_exact(matcher)));
|
130
|
+
} else if (envoy_type_matcher_v3_StringMatcher_has_prefix(matcher)) {
|
131
|
+
json.emplace("prefix",
|
132
|
+
UpbStringToStdString(
|
133
|
+
envoy_type_matcher_v3_StringMatcher_prefix(matcher)));
|
134
|
+
} else if (envoy_type_matcher_v3_StringMatcher_has_suffix(matcher)) {
|
135
|
+
json.emplace("suffix",
|
136
|
+
UpbStringToStdString(
|
137
|
+
envoy_type_matcher_v3_StringMatcher_suffix(matcher)));
|
138
|
+
} else if (envoy_type_matcher_v3_StringMatcher_has_safe_regex(matcher)) {
|
139
|
+
json.emplace("safeRegex",
|
140
|
+
ParseRegexMatcherToJson(
|
141
|
+
envoy_type_matcher_v3_StringMatcher_safe_regex(matcher)));
|
142
|
+
} else if (envoy_type_matcher_v3_StringMatcher_has_contains(matcher)) {
|
143
|
+
json.emplace("contains",
|
144
|
+
UpbStringToStdString(
|
145
|
+
envoy_type_matcher_v3_StringMatcher_contains(matcher)));
|
146
|
+
} else {
|
147
|
+
return absl::InvalidArgumentError("StringMatcher: Invalid match pattern");
|
148
|
+
}
|
149
|
+
json.emplace("ignoreCase",
|
150
|
+
envoy_type_matcher_v3_StringMatcher_ignore_case(matcher));
|
151
|
+
return json;
|
152
|
+
}
|
153
|
+
|
154
|
+
absl::StatusOr<Json> ParsePathMatcherToJson(
|
155
|
+
const envoy_type_matcher_v3_PathMatcher* matcher) {
|
156
|
+
const auto* path = envoy_type_matcher_v3_PathMatcher_path(matcher);
|
157
|
+
if (path == nullptr) {
|
158
|
+
return absl::InvalidArgumentError("PathMatcher has empty path");
|
159
|
+
}
|
160
|
+
Json::Object json;
|
161
|
+
auto path_json = ParseStringMatcherToJson(path);
|
162
|
+
if (!path_json.ok()) {
|
163
|
+
return path_json;
|
164
|
+
}
|
165
|
+
json.emplace("path", std::move(*path_json));
|
166
|
+
return json;
|
167
|
+
}
|
168
|
+
|
169
|
+
Json ParseUInt32ValueToJson(const google_protobuf_UInt32Value* value) {
|
170
|
+
return Json::Object{{"value", google_protobuf_UInt32Value_value(value)}};
|
171
|
+
}
|
172
|
+
|
173
|
+
Json ParseCidrRangeToJson(const envoy_config_core_v3_CidrRange* range) {
|
174
|
+
Json::Object json;
|
175
|
+
json.emplace("addressPrefix",
|
176
|
+
UpbStringToStdString(
|
177
|
+
envoy_config_core_v3_CidrRange_address_prefix(range)));
|
178
|
+
const auto* prefix_len = envoy_config_core_v3_CidrRange_prefix_len(range);
|
179
|
+
if (prefix_len != nullptr) {
|
180
|
+
json.emplace("prefixLen", ParseUInt32ValueToJson(prefix_len));
|
181
|
+
}
|
182
|
+
return json;
|
183
|
+
}
|
184
|
+
|
185
|
+
Json ParseMetadataMatcherToJson(
|
186
|
+
const envoy_type_matcher_v3_MetadataMatcher* metadata_matcher) {
|
187
|
+
Json::Object json;
|
188
|
+
// The fields "filter", "path" and "value" are irrelevant to gRPC as per
|
189
|
+
// https://github.com/grpc/proposal/blob/master/A41-xds-rbac.md and are not
|
190
|
+
// being parsed.
|
191
|
+
json.emplace("invert",
|
192
|
+
envoy_type_matcher_v3_MetadataMatcher_invert(metadata_matcher));
|
193
|
+
return json;
|
194
|
+
}
|
195
|
+
|
196
|
+
absl::StatusOr<Json> ParsePermissionToJson(
|
197
|
+
const envoy_config_rbac_v3_Permission* permission) {
|
198
|
+
Json::Object permission_json;
|
199
|
+
// Helper function to parse Permission::Set to JSON. Used by `and_rules` and
|
200
|
+
// `or_rules`.
|
201
|
+
auto parse_permission_set_to_json =
|
202
|
+
[](const envoy_config_rbac_v3_Permission_Set* set)
|
203
|
+
-> absl::StatusOr<Json> {
|
204
|
+
std::vector<absl::Status> error_list;
|
205
|
+
Json::Array rules_json;
|
206
|
+
size_t size;
|
207
|
+
const envoy_config_rbac_v3_Permission* const* rules =
|
208
|
+
envoy_config_rbac_v3_Permission_Set_rules(set, &size);
|
209
|
+
for (size_t i = 0; i < size; ++i) {
|
210
|
+
auto permission_json = ParsePermissionToJson(rules[i]);
|
211
|
+
if (!permission_json.ok()) {
|
212
|
+
error_list.push_back(permission_json.status());
|
213
|
+
} else {
|
214
|
+
rules_json.emplace_back(std::move(*permission_json));
|
215
|
+
}
|
216
|
+
}
|
217
|
+
if (!error_list.empty()) {
|
218
|
+
return StatusCreate(absl::StatusCode::kInvalidArgument,
|
219
|
+
"Error parsing Set", DEBUG_LOCATION,
|
220
|
+
std::move(error_list));
|
221
|
+
}
|
222
|
+
return Json::Object({{"rules", std::move(rules_json)}});
|
223
|
+
};
|
224
|
+
if (envoy_config_rbac_v3_Permission_has_and_rules(permission)) {
|
225
|
+
const auto* and_rules =
|
226
|
+
envoy_config_rbac_v3_Permission_and_rules(permission);
|
227
|
+
auto permission_set_json = parse_permission_set_to_json(and_rules);
|
228
|
+
if (!permission_set_json.ok()) {
|
229
|
+
return permission_set_json;
|
230
|
+
}
|
231
|
+
permission_json.emplace("andRules", std::move(*permission_set_json));
|
232
|
+
} else if (envoy_config_rbac_v3_Permission_has_or_rules(permission)) {
|
233
|
+
const auto* or_rules = envoy_config_rbac_v3_Permission_or_rules(permission);
|
234
|
+
auto permission_set_json = parse_permission_set_to_json(or_rules);
|
235
|
+
if (!permission_set_json.ok()) {
|
236
|
+
return permission_set_json;
|
237
|
+
}
|
238
|
+
permission_json.emplace("orRules", std::move(*permission_set_json));
|
239
|
+
} else if (envoy_config_rbac_v3_Permission_has_any(permission)) {
|
240
|
+
permission_json.emplace("any",
|
241
|
+
envoy_config_rbac_v3_Permission_any(permission));
|
242
|
+
} else if (envoy_config_rbac_v3_Permission_has_header(permission)) {
|
243
|
+
auto header_json = ParseHeaderMatcherToJson(
|
244
|
+
envoy_config_rbac_v3_Permission_header(permission));
|
245
|
+
if (!header_json.ok()) {
|
246
|
+
return header_json;
|
247
|
+
}
|
248
|
+
permission_json.emplace("header", std::move(*header_json));
|
249
|
+
} else if (envoy_config_rbac_v3_Permission_has_url_path(permission)) {
|
250
|
+
auto url_path_json = ParsePathMatcherToJson(
|
251
|
+
envoy_config_rbac_v3_Permission_url_path(permission));
|
252
|
+
if (!url_path_json.ok()) {
|
253
|
+
return url_path_json;
|
254
|
+
}
|
255
|
+
permission_json.emplace("urlPath", std::move(*url_path_json));
|
256
|
+
} else if (envoy_config_rbac_v3_Permission_has_destination_ip(permission)) {
|
257
|
+
permission_json.emplace(
|
258
|
+
"destinationIp",
|
259
|
+
ParseCidrRangeToJson(
|
260
|
+
envoy_config_rbac_v3_Permission_destination_ip(permission)));
|
261
|
+
} else if (envoy_config_rbac_v3_Permission_has_destination_port(permission)) {
|
262
|
+
permission_json.emplace(
|
263
|
+
"destinationPort",
|
264
|
+
envoy_config_rbac_v3_Permission_destination_port(permission));
|
265
|
+
} else if (envoy_config_rbac_v3_Permission_has_metadata(permission)) {
|
266
|
+
permission_json.emplace(
|
267
|
+
"metadata", ParseMetadataMatcherToJson(
|
268
|
+
envoy_config_rbac_v3_Permission_metadata(permission)));
|
269
|
+
} else if (envoy_config_rbac_v3_Permission_has_not_rule(permission)) {
|
270
|
+
auto not_rule_json = ParsePermissionToJson(
|
271
|
+
envoy_config_rbac_v3_Permission_not_rule(permission));
|
272
|
+
if (!not_rule_json.ok()) {
|
273
|
+
return not_rule_json;
|
274
|
+
}
|
275
|
+
permission_json.emplace("notRule", std::move(*not_rule_json));
|
276
|
+
} else if (envoy_config_rbac_v3_Permission_has_requested_server_name(
|
277
|
+
permission)) {
|
278
|
+
auto requested_server_name_json = ParseStringMatcherToJson(
|
279
|
+
envoy_config_rbac_v3_Permission_requested_server_name(permission));
|
280
|
+
if (!requested_server_name_json.ok()) {
|
281
|
+
return requested_server_name_json;
|
282
|
+
}
|
283
|
+
permission_json.emplace("requestedServerName",
|
284
|
+
std::move(*requested_server_name_json));
|
285
|
+
} else {
|
286
|
+
return absl::InvalidArgumentError("Permission: Invalid rule");
|
287
|
+
}
|
288
|
+
return permission_json;
|
289
|
+
}
|
290
|
+
|
291
|
+
absl::StatusOr<Json> ParsePrincipalToJson(
|
292
|
+
const envoy_config_rbac_v3_Principal* principal) {
|
293
|
+
Json::Object principal_json;
|
294
|
+
// Helper function to parse Principal::Set to JSON. Used by `and_ids` and
|
295
|
+
// `or_ids`.
|
296
|
+
auto parse_principal_set_to_json =
|
297
|
+
[](const envoy_config_rbac_v3_Principal_Set* set)
|
298
|
+
-> absl::StatusOr<Json> {
|
299
|
+
Json::Object json;
|
300
|
+
std::vector<absl::Status> error_list;
|
301
|
+
Json::Array ids_json;
|
302
|
+
size_t size;
|
303
|
+
const envoy_config_rbac_v3_Principal* const* ids =
|
304
|
+
envoy_config_rbac_v3_Principal_Set_ids(set, &size);
|
305
|
+
for (size_t i = 0; i < size; ++i) {
|
306
|
+
auto principal_json = ParsePrincipalToJson(ids[i]);
|
307
|
+
if (!principal_json.ok()) {
|
308
|
+
error_list.push_back(principal_json.status());
|
309
|
+
} else {
|
310
|
+
ids_json.emplace_back(std::move(*principal_json));
|
311
|
+
}
|
312
|
+
}
|
313
|
+
if (!error_list.empty()) {
|
314
|
+
return StatusCreate(absl::StatusCode::kInvalidArgument,
|
315
|
+
"Error parsing Set", DEBUG_LOCATION,
|
316
|
+
std::move(error_list));
|
317
|
+
}
|
318
|
+
return Json::Object({{"ids", std::move(ids_json)}});
|
319
|
+
};
|
320
|
+
if (envoy_config_rbac_v3_Principal_has_and_ids(principal)) {
|
321
|
+
const auto* and_rules = envoy_config_rbac_v3_Principal_and_ids(principal);
|
322
|
+
auto principal_set_json = parse_principal_set_to_json(and_rules);
|
323
|
+
if (!principal_set_json.ok()) {
|
324
|
+
return principal_set_json;
|
325
|
+
}
|
326
|
+
principal_json.emplace("andIds", std::move(*principal_set_json));
|
327
|
+
} else if (envoy_config_rbac_v3_Principal_has_or_ids(principal)) {
|
328
|
+
const auto* or_rules = envoy_config_rbac_v3_Principal_or_ids(principal);
|
329
|
+
auto principal_set_json = parse_principal_set_to_json(or_rules);
|
330
|
+
if (!principal_set_json.ok()) {
|
331
|
+
return principal_set_json;
|
332
|
+
}
|
333
|
+
principal_json.emplace("orIds", std::move(*principal_set_json));
|
334
|
+
} else if (envoy_config_rbac_v3_Principal_has_any(principal)) {
|
335
|
+
principal_json.emplace("any",
|
336
|
+
envoy_config_rbac_v3_Principal_any(principal));
|
337
|
+
} else if (envoy_config_rbac_v3_Principal_has_authenticated(principal)) {
|
338
|
+
auto* authenticated_json =
|
339
|
+
principal_json.emplace("authenticated", Json::Object())
|
340
|
+
.first->second.mutable_object();
|
341
|
+
const auto* principal_name =
|
342
|
+
envoy_config_rbac_v3_Principal_Authenticated_principal_name(
|
343
|
+
envoy_config_rbac_v3_Principal_authenticated(principal));
|
344
|
+
if (principal_name != nullptr) {
|
345
|
+
auto principal_name_json = ParseStringMatcherToJson(principal_name);
|
346
|
+
if (!principal_name_json.ok()) {
|
347
|
+
return principal_name_json;
|
348
|
+
}
|
349
|
+
authenticated_json->emplace("principalName",
|
350
|
+
std::move(*principal_name_json));
|
351
|
+
}
|
352
|
+
} else if (envoy_config_rbac_v3_Principal_has_source_ip(principal)) {
|
353
|
+
principal_json.emplace(
|
354
|
+
"sourceIp", ParseCidrRangeToJson(
|
355
|
+
envoy_config_rbac_v3_Principal_source_ip(principal)));
|
356
|
+
} else if (envoy_config_rbac_v3_Principal_has_direct_remote_ip(principal)) {
|
357
|
+
principal_json.emplace(
|
358
|
+
"directRemoteIp",
|
359
|
+
ParseCidrRangeToJson(
|
360
|
+
envoy_config_rbac_v3_Principal_direct_remote_ip(principal)));
|
361
|
+
} else if (envoy_config_rbac_v3_Principal_has_remote_ip(principal)) {
|
362
|
+
principal_json.emplace(
|
363
|
+
"remoteIp", ParseCidrRangeToJson(
|
364
|
+
envoy_config_rbac_v3_Principal_remote_ip(principal)));
|
365
|
+
} else if (envoy_config_rbac_v3_Principal_has_header(principal)) {
|
366
|
+
auto header_json = ParseHeaderMatcherToJson(
|
367
|
+
envoy_config_rbac_v3_Principal_header(principal));
|
368
|
+
if (!header_json.ok()) {
|
369
|
+
return header_json;
|
370
|
+
}
|
371
|
+
principal_json.emplace("header", std::move(*header_json));
|
372
|
+
} else if (envoy_config_rbac_v3_Principal_has_url_path(principal)) {
|
373
|
+
auto url_path_json = ParsePathMatcherToJson(
|
374
|
+
envoy_config_rbac_v3_Principal_url_path(principal));
|
375
|
+
if (!url_path_json.ok()) {
|
376
|
+
return url_path_json;
|
377
|
+
}
|
378
|
+
principal_json.emplace("urlPath", std::move(*url_path_json));
|
379
|
+
} else if (envoy_config_rbac_v3_Principal_has_metadata(principal)) {
|
380
|
+
principal_json.emplace(
|
381
|
+
"metadata", ParseMetadataMatcherToJson(
|
382
|
+
envoy_config_rbac_v3_Principal_metadata(principal)));
|
383
|
+
} else if (envoy_config_rbac_v3_Principal_has_not_id(principal)) {
|
384
|
+
auto not_id_json =
|
385
|
+
ParsePrincipalToJson(envoy_config_rbac_v3_Principal_not_id(principal));
|
386
|
+
if (!not_id_json.ok()) {
|
387
|
+
return not_id_json;
|
388
|
+
}
|
389
|
+
principal_json.emplace("notId", std::move(*not_id_json));
|
390
|
+
} else {
|
391
|
+
return absl::InvalidArgumentError("Principal: Invalid rule");
|
392
|
+
}
|
393
|
+
return principal_json;
|
394
|
+
}
|
395
|
+
|
396
|
+
absl::StatusOr<Json> ParsePolicyToJson(
|
397
|
+
const envoy_config_rbac_v3_Policy* policy) {
|
398
|
+
Json::Object policy_json;
|
399
|
+
std::vector<absl::Status> error_list;
|
400
|
+
size_t size;
|
401
|
+
Json::Array permissions_json;
|
402
|
+
const envoy_config_rbac_v3_Permission* const* permissions =
|
403
|
+
envoy_config_rbac_v3_Policy_permissions(policy, &size);
|
404
|
+
for (size_t i = 0; i < size; ++i) {
|
405
|
+
auto permission_json = ParsePermissionToJson(permissions[i]);
|
406
|
+
if (!permission_json.ok()) {
|
407
|
+
error_list.push_back(permission_json.status());
|
408
|
+
} else {
|
409
|
+
permissions_json.emplace_back(std::move(*permission_json));
|
410
|
+
}
|
411
|
+
}
|
412
|
+
policy_json.emplace("permissions", std::move(permissions_json));
|
413
|
+
Json::Array principals_json;
|
414
|
+
const envoy_config_rbac_v3_Principal* const* principals =
|
415
|
+
envoy_config_rbac_v3_Policy_principals(policy, &size);
|
416
|
+
for (size_t i = 0; i < size; ++i) {
|
417
|
+
auto principal_json = ParsePrincipalToJson(principals[i]);
|
418
|
+
if (!principal_json.ok()) {
|
419
|
+
error_list.push_back(principal_json.status());
|
420
|
+
} else {
|
421
|
+
principals_json.emplace_back(std::move(*principal_json));
|
422
|
+
}
|
423
|
+
}
|
424
|
+
policy_json.emplace("principals", std::move(principals_json));
|
425
|
+
if (envoy_config_rbac_v3_Policy_has_condition(policy)) {
|
426
|
+
error_list.push_back(
|
427
|
+
absl::InvalidArgumentError("Policy: condition not supported"));
|
428
|
+
}
|
429
|
+
if (envoy_config_rbac_v3_Policy_has_checked_condition(policy)) {
|
430
|
+
error_list.push_back(
|
431
|
+
absl::InvalidArgumentError("Policy: checked condition not supported"));
|
432
|
+
}
|
433
|
+
if (!error_list.empty()) {
|
434
|
+
return StatusCreate(absl::StatusCode::kInvalidArgument,
|
435
|
+
"Error parsing Policy", DEBUG_LOCATION,
|
436
|
+
std::move(error_list));
|
437
|
+
}
|
438
|
+
return policy_json;
|
439
|
+
}
|
440
|
+
|
441
|
+
absl::StatusOr<Json> ParseHttpRbacToJson(
|
442
|
+
const envoy_extensions_filters_http_rbac_v3_RBAC* rbac) {
|
443
|
+
Json::Object rbac_json;
|
444
|
+
std::vector<absl::Status> error_list;
|
445
|
+
const auto* rules = envoy_extensions_filters_http_rbac_v3_RBAC_rules(rbac);
|
446
|
+
if (rules != nullptr) {
|
447
|
+
int action = envoy_config_rbac_v3_RBAC_action(rules);
|
448
|
+
// Treat Log action as RBAC being absent
|
449
|
+
if (action == envoy_config_rbac_v3_RBAC_LOG) {
|
450
|
+
return rbac_json;
|
451
|
+
}
|
452
|
+
Json::Object inner_rbac_json;
|
453
|
+
inner_rbac_json.emplace("action", envoy_config_rbac_v3_RBAC_action(rules));
|
454
|
+
if (envoy_config_rbac_v3_RBAC_has_policies(rules)) {
|
455
|
+
Json::Object policies_object;
|
456
|
+
size_t iter = UPB_MAP_BEGIN;
|
457
|
+
while (true) {
|
458
|
+
auto* entry = envoy_config_rbac_v3_RBAC_policies_next(rules, &iter);
|
459
|
+
if (entry == nullptr) {
|
460
|
+
break;
|
461
|
+
}
|
462
|
+
auto policy = ParsePolicyToJson(
|
463
|
+
envoy_config_rbac_v3_RBAC_PoliciesEntry_value(entry));
|
464
|
+
if (!policy.ok()) {
|
465
|
+
error_list.push_back(StatusCreate(
|
466
|
+
absl::StatusCode::kInvalidArgument,
|
467
|
+
absl::StrFormat(
|
468
|
+
"RBAC PoliciesEntry key:%s",
|
469
|
+
UpbStringToStdString(
|
470
|
+
envoy_config_rbac_v3_RBAC_PoliciesEntry_key(entry))),
|
471
|
+
DEBUG_LOCATION, {policy.status()}));
|
472
|
+
} else {
|
473
|
+
policies_object.emplace(
|
474
|
+
UpbStringToStdString(
|
475
|
+
envoy_config_rbac_v3_RBAC_PoliciesEntry_key(entry)),
|
476
|
+
std::move(*policy));
|
477
|
+
}
|
478
|
+
}
|
479
|
+
inner_rbac_json.emplace("policies", std::move(policies_object));
|
480
|
+
}
|
481
|
+
rbac_json.emplace("rules", std::move(inner_rbac_json));
|
482
|
+
}
|
483
|
+
if (!error_list.empty()) {
|
484
|
+
return StatusCreate(absl::StatusCode::kInvalidArgument,
|
485
|
+
"Error parsing RBAC", DEBUG_LOCATION,
|
486
|
+
std::move(error_list));
|
487
|
+
}
|
488
|
+
return rbac_json;
|
489
|
+
}
|
490
|
+
|
491
|
+
} // namespace
|
492
|
+
|
493
|
+
void XdsHttpRbacFilter::PopulateSymtab(upb_symtab* symtab) const {
|
494
|
+
envoy_extensions_filters_http_rbac_v3_RBAC_getmsgdef(symtab);
|
495
|
+
}
|
496
|
+
|
497
|
+
absl::StatusOr<XdsHttpFilterImpl::FilterConfig>
|
498
|
+
XdsHttpRbacFilter::GenerateFilterConfig(upb_strview serialized_filter_config,
|
499
|
+
upb_arena* arena) const {
|
500
|
+
absl::StatusOr<Json> rbac_json;
|
501
|
+
auto* rbac = envoy_extensions_filters_http_rbac_v3_RBAC_parse(
|
502
|
+
serialized_filter_config.data, serialized_filter_config.size, arena);
|
503
|
+
if (rbac == nullptr) {
|
504
|
+
return absl::InvalidArgumentError(
|
505
|
+
"could not parse HTTP RBAC filter config");
|
506
|
+
}
|
507
|
+
rbac_json = ParseHttpRbacToJson(rbac);
|
508
|
+
if (!rbac_json.ok()) {
|
509
|
+
return rbac_json.status();
|
510
|
+
}
|
511
|
+
return FilterConfig{kXdsHttpRbacFilterConfigName, std::move(*rbac_json)};
|
512
|
+
}
|
513
|
+
|
514
|
+
absl::StatusOr<XdsHttpFilterImpl::FilterConfig>
|
515
|
+
XdsHttpRbacFilter::GenerateFilterConfigOverride(
|
516
|
+
upb_strview serialized_filter_config, upb_arena* arena) const {
|
517
|
+
auto* rbac_per_route =
|
518
|
+
envoy_extensions_filters_http_rbac_v3_RBACPerRoute_parse(
|
519
|
+
serialized_filter_config.data, serialized_filter_config.size, arena);
|
520
|
+
if (rbac_per_route == nullptr) {
|
521
|
+
return absl::InvalidArgumentError("could not parse RBACPerRoute");
|
522
|
+
}
|
523
|
+
absl::StatusOr<Json> rbac_json;
|
524
|
+
const auto* rbac =
|
525
|
+
envoy_extensions_filters_http_rbac_v3_RBACPerRoute_rbac(rbac_per_route);
|
526
|
+
if (rbac == nullptr) {
|
527
|
+
rbac_json = Json::Object();
|
528
|
+
} else {
|
529
|
+
rbac_json = ParseHttpRbacToJson(rbac);
|
530
|
+
if (!rbac_json.ok()) {
|
531
|
+
return rbac_json.status();
|
532
|
+
}
|
533
|
+
}
|
534
|
+
return FilterConfig{kXdsHttpRbacFilterConfigOverrideName,
|
535
|
+
std::move(*rbac_json)};
|
536
|
+
}
|
537
|
+
|
538
|
+
const grpc_channel_filter* XdsHttpRbacFilter::channel_filter() const {
|
539
|
+
return &RbacFilter::kFilterVtable;
|
540
|
+
}
|
541
|
+
|
542
|
+
grpc_channel_args* XdsHttpRbacFilter::ModifyChannelArgs(
|
543
|
+
grpc_channel_args* args) const {
|
544
|
+
grpc_arg arg_to_add = grpc_channel_arg_integer_create(
|
545
|
+
const_cast<char*>(GRPC_ARG_PARSE_RBAC_METHOD_CONFIG), 1);
|
546
|
+
grpc_channel_args* new_args =
|
547
|
+
grpc_channel_args_copy_and_add(args, &arg_to_add, 1);
|
548
|
+
grpc_channel_args_destroy(args);
|
549
|
+
return new_args;
|
550
|
+
}
|
551
|
+
|
552
|
+
absl::StatusOr<XdsHttpFilterImpl::ServiceConfigJsonEntry>
|
553
|
+
XdsHttpRbacFilter::GenerateServiceConfig(
|
554
|
+
const FilterConfig& hcm_filter_config,
|
555
|
+
const FilterConfig* filter_config_override) const {
|
556
|
+
Json policy_json = filter_config_override != nullptr
|
557
|
+
? filter_config_override->config
|
558
|
+
: hcm_filter_config.config;
|
559
|
+
// The policy JSON may be empty, that's allowed.
|
560
|
+
return ServiceConfigJsonEntry{"rbacPolicy", policy_json.Dump()};
|
561
|
+
}
|
562
|
+
|
563
|
+
} // namespace grpc_core
|
@@ -0,0 +1,54 @@
|
|
1
|
+
//
|
2
|
+
// Copyright 2021 gRPC authors.
|
3
|
+
//
|
4
|
+
// Licensed under the Apache License, Version 2.0 (the "License");
|
5
|
+
// you may not use this file except in compliance with the License.
|
6
|
+
// You may obtain a copy of the License at
|
7
|
+
//
|
8
|
+
// http://www.apache.org/licenses/LICENSE-2.0
|
9
|
+
//
|
10
|
+
// Unless required by applicable law or agreed to in writing, software
|
11
|
+
// distributed under the License is distributed on an "AS IS" BASIS,
|
12
|
+
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
13
|
+
// See the License for the specific language governing permissions and
|
14
|
+
// limitations under the License.
|
15
|
+
//
|
16
|
+
|
17
|
+
#ifndef GRPC_CORE_EXT_XDS_XDS_HTTP_RBAC_FILTER_H
|
18
|
+
#define GRPC_CORE_EXT_XDS_XDS_HTTP_RBAC_FILTER_H
|
19
|
+
|
20
|
+
#include <grpc/support/port_platform.h>
|
21
|
+
|
22
|
+
#include "src/core/ext/xds/xds_http_filters.h"
|
23
|
+
|
24
|
+
namespace grpc_core {
|
25
|
+
|
26
|
+
extern const char* kXdsHttpRbacFilterConfigName;
|
27
|
+
extern const char* kXdsHttpRbacFilterConfigOverrideName;
|
28
|
+
|
29
|
+
class XdsHttpRbacFilter : public XdsHttpFilterImpl {
|
30
|
+
public:
|
31
|
+
void PopulateSymtab(upb_symtab* symtab) const override;
|
32
|
+
|
33
|
+
absl::StatusOr<FilterConfig> GenerateFilterConfig(
|
34
|
+
upb_strview serialized_filter_config, upb_arena* arena) const override;
|
35
|
+
|
36
|
+
absl::StatusOr<FilterConfig> GenerateFilterConfigOverride(
|
37
|
+
upb_strview serialized_filter_config, upb_arena* arena) const override;
|
38
|
+
|
39
|
+
const grpc_channel_filter* channel_filter() const override;
|
40
|
+
|
41
|
+
grpc_channel_args* ModifyChannelArgs(grpc_channel_args* args) const override;
|
42
|
+
|
43
|
+
absl::StatusOr<ServiceConfigJsonEntry> GenerateServiceConfig(
|
44
|
+
const FilterConfig& hcm_filter_config,
|
45
|
+
const FilterConfig* filter_config_override) const override;
|
46
|
+
|
47
|
+
bool IsSupportedOnClients() const override { return false; }
|
48
|
+
|
49
|
+
bool IsSupportedOnServers() const override { return true; }
|
50
|
+
};
|
51
|
+
|
52
|
+
} // namespace grpc_core
|
53
|
+
|
54
|
+
#endif // GRPC_CORE_EXT_XDS_XDS_HTTP_RBAC_FILTER_H
|