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,211 @@
|
|
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_MATCHERS_H
|
16
|
+
#define GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MATCHERS_H
|
17
|
+
|
18
|
+
#include <grpc/support/port_platform.h>
|
19
|
+
|
20
|
+
#include <memory>
|
21
|
+
|
22
|
+
#include "src/core/lib/matchers/matchers.h"
|
23
|
+
#include "src/core/lib/security/authorization/evaluate_args.h"
|
24
|
+
#include "src/core/lib/security/authorization/rbac_policy.h"
|
25
|
+
|
26
|
+
namespace grpc_core {
|
27
|
+
|
28
|
+
// Describes the rules for matching permission or principal.
|
29
|
+
class AuthorizationMatcher {
|
30
|
+
public:
|
31
|
+
virtual ~AuthorizationMatcher() = default;
|
32
|
+
|
33
|
+
// Returns whether or not the permission/principal matches the rules of the
|
34
|
+
// matcher.
|
35
|
+
virtual bool Matches(const EvaluateArgs& args) const = 0;
|
36
|
+
|
37
|
+
// Creates an instance of a matcher based off the rules defined in Permission
|
38
|
+
// config.
|
39
|
+
static std::unique_ptr<AuthorizationMatcher> Create(
|
40
|
+
Rbac::Permission permission);
|
41
|
+
|
42
|
+
// Creates an instance of a matcher based off the rules defined in Principal
|
43
|
+
// config.
|
44
|
+
static std::unique_ptr<AuthorizationMatcher> Create(
|
45
|
+
Rbac::Principal principal);
|
46
|
+
};
|
47
|
+
|
48
|
+
class AlwaysAuthorizationMatcher : public AuthorizationMatcher {
|
49
|
+
public:
|
50
|
+
explicit AlwaysAuthorizationMatcher() = default;
|
51
|
+
|
52
|
+
bool Matches(const EvaluateArgs&) const override { return true; }
|
53
|
+
};
|
54
|
+
|
55
|
+
class AndAuthorizationMatcher : public AuthorizationMatcher {
|
56
|
+
public:
|
57
|
+
explicit AndAuthorizationMatcher(
|
58
|
+
std::vector<std::unique_ptr<AuthorizationMatcher>> matchers)
|
59
|
+
: matchers_(std::move(matchers)) {}
|
60
|
+
|
61
|
+
bool Matches(const EvaluateArgs& args) const override;
|
62
|
+
|
63
|
+
private:
|
64
|
+
std::vector<std::unique_ptr<AuthorizationMatcher>> matchers_;
|
65
|
+
};
|
66
|
+
|
67
|
+
class OrAuthorizationMatcher : public AuthorizationMatcher {
|
68
|
+
public:
|
69
|
+
explicit OrAuthorizationMatcher(
|
70
|
+
std::vector<std::unique_ptr<AuthorizationMatcher>> matchers)
|
71
|
+
: matchers_(std::move(matchers)) {}
|
72
|
+
|
73
|
+
bool Matches(const EvaluateArgs& args) const override;
|
74
|
+
|
75
|
+
private:
|
76
|
+
std::vector<std::unique_ptr<AuthorizationMatcher>> matchers_;
|
77
|
+
};
|
78
|
+
|
79
|
+
// Negates matching the provided permission/principal.
|
80
|
+
class NotAuthorizationMatcher : public AuthorizationMatcher {
|
81
|
+
public:
|
82
|
+
explicit NotAuthorizationMatcher(
|
83
|
+
std::unique_ptr<AuthorizationMatcher> matcher)
|
84
|
+
: matcher_(std::move(matcher)) {}
|
85
|
+
|
86
|
+
bool Matches(const EvaluateArgs& args) const override;
|
87
|
+
|
88
|
+
private:
|
89
|
+
std::unique_ptr<AuthorizationMatcher> matcher_;
|
90
|
+
};
|
91
|
+
|
92
|
+
class MetadataAuthorizationMatcher : public AuthorizationMatcher {
|
93
|
+
public:
|
94
|
+
explicit MetadataAuthorizationMatcher(bool invert) : invert_(invert) {}
|
95
|
+
|
96
|
+
// In RBAC, metadata refers to the Envoy metadata which has no relation to
|
97
|
+
// gRPC metadata. Envoy metadata is a generic state shared between filters,
|
98
|
+
// which has no gRPC equivalent. RBAC implementations in gRPC will treat Envoy
|
99
|
+
// metadata as an empty map. Since ValueMatcher can only match if a value is
|
100
|
+
// present (even NullMatch), the metadata matcher will not match unless invert
|
101
|
+
// is set to true.
|
102
|
+
bool Matches(const EvaluateArgs&) const override { return invert_; }
|
103
|
+
|
104
|
+
private:
|
105
|
+
const bool invert_;
|
106
|
+
};
|
107
|
+
|
108
|
+
// Perform a match against HTTP headers.
|
109
|
+
class HeaderAuthorizationMatcher : public AuthorizationMatcher {
|
110
|
+
public:
|
111
|
+
explicit HeaderAuthorizationMatcher(HeaderMatcher matcher)
|
112
|
+
: matcher_(std::move(matcher)) {}
|
113
|
+
|
114
|
+
bool Matches(const EvaluateArgs& args) const override;
|
115
|
+
|
116
|
+
private:
|
117
|
+
const HeaderMatcher matcher_;
|
118
|
+
};
|
119
|
+
|
120
|
+
// Perform a match against IP Cidr Range.
|
121
|
+
class IpAuthorizationMatcher : public AuthorizationMatcher {
|
122
|
+
public:
|
123
|
+
enum class Type {
|
124
|
+
kDestIp,
|
125
|
+
kSourceIp,
|
126
|
+
kDirectRemoteIp,
|
127
|
+
kRemoteIp,
|
128
|
+
};
|
129
|
+
|
130
|
+
IpAuthorizationMatcher(Type type, Rbac::CidrRange range);
|
131
|
+
|
132
|
+
bool Matches(const EvaluateArgs& args) const override;
|
133
|
+
|
134
|
+
private:
|
135
|
+
const Type type_;
|
136
|
+
// Subnet masked address.
|
137
|
+
grpc_resolved_address subnet_address_;
|
138
|
+
const uint32_t prefix_len_;
|
139
|
+
};
|
140
|
+
|
141
|
+
// Perform a match against port number of the destination (local) address.
|
142
|
+
class PortAuthorizationMatcher : public AuthorizationMatcher {
|
143
|
+
public:
|
144
|
+
explicit PortAuthorizationMatcher(int port) : port_(port) {}
|
145
|
+
|
146
|
+
bool Matches(const EvaluateArgs& args) const override;
|
147
|
+
|
148
|
+
private:
|
149
|
+
const int port_;
|
150
|
+
};
|
151
|
+
|
152
|
+
// Matches the principal name as described in the peer certificate. Uses URI SAN
|
153
|
+
// or DNS SAN in that order, otherwise uses subject field.
|
154
|
+
class AuthenticatedAuthorizationMatcher : public AuthorizationMatcher {
|
155
|
+
public:
|
156
|
+
explicit AuthenticatedAuthorizationMatcher(StringMatcher auth)
|
157
|
+
: matcher_(std::move(auth)) {}
|
158
|
+
|
159
|
+
bool Matches(const EvaluateArgs& args) const override;
|
160
|
+
|
161
|
+
private:
|
162
|
+
const StringMatcher matcher_;
|
163
|
+
};
|
164
|
+
|
165
|
+
// Perform a match against the request server from the client's connection
|
166
|
+
// request. This is typically TLS SNI. Currently unsupported.
|
167
|
+
class ReqServerNameAuthorizationMatcher : public AuthorizationMatcher {
|
168
|
+
public:
|
169
|
+
explicit ReqServerNameAuthorizationMatcher(
|
170
|
+
StringMatcher requested_server_name)
|
171
|
+
: matcher_(std::move(requested_server_name)) {}
|
172
|
+
|
173
|
+
bool Matches(const EvaluateArgs&) const override;
|
174
|
+
|
175
|
+
private:
|
176
|
+
const StringMatcher matcher_;
|
177
|
+
};
|
178
|
+
|
179
|
+
// Perform a match against the path header of HTTP request.
|
180
|
+
class PathAuthorizationMatcher : public AuthorizationMatcher {
|
181
|
+
public:
|
182
|
+
explicit PathAuthorizationMatcher(StringMatcher path)
|
183
|
+
: matcher_(std::move(path)) {}
|
184
|
+
|
185
|
+
bool Matches(const EvaluateArgs& args) const override;
|
186
|
+
|
187
|
+
private:
|
188
|
+
const StringMatcher matcher_;
|
189
|
+
};
|
190
|
+
|
191
|
+
// Performs a match for policy field in RBAC, which is a collection of
|
192
|
+
// permission and principal matchers. Policy matches iff, we find a match in one
|
193
|
+
// of its permissions and a match in one of its principals.
|
194
|
+
class PolicyAuthorizationMatcher : public AuthorizationMatcher {
|
195
|
+
public:
|
196
|
+
explicit PolicyAuthorizationMatcher(Rbac::Policy policy)
|
197
|
+
: permissions_(
|
198
|
+
AuthorizationMatcher::Create(std::move(policy.permissions))),
|
199
|
+
principals_(
|
200
|
+
AuthorizationMatcher::Create(std::move(policy.principals))) {}
|
201
|
+
|
202
|
+
bool Matches(const EvaluateArgs& args) const override;
|
203
|
+
|
204
|
+
private:
|
205
|
+
std::unique_ptr<AuthorizationMatcher> permissions_;
|
206
|
+
std::unique_ptr<AuthorizationMatcher> principals_;
|
207
|
+
};
|
208
|
+
|
209
|
+
} // namespace grpc_core
|
210
|
+
|
211
|
+
#endif // GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MATCHERS_H
|
@@ -0,0 +1,442 @@
|
|
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/rbac_policy.h"
|
18
|
+
|
19
|
+
#include "absl/strings/str_format.h"
|
20
|
+
#include "absl/strings/str_join.h"
|
21
|
+
|
22
|
+
namespace grpc_core {
|
23
|
+
|
24
|
+
//
|
25
|
+
// Rbac
|
26
|
+
//
|
27
|
+
|
28
|
+
Rbac::Rbac(Rbac::Action action, std::map<std::string, Policy> policies)
|
29
|
+
: action(action), policies(std::move(policies)) {}
|
30
|
+
|
31
|
+
Rbac::Rbac(Rbac&& other) noexcept
|
32
|
+
: action(other.action), policies(std::move(other.policies)) {}
|
33
|
+
|
34
|
+
Rbac& Rbac::operator=(Rbac&& other) noexcept {
|
35
|
+
action = other.action;
|
36
|
+
policies = std::move(other.policies);
|
37
|
+
return *this;
|
38
|
+
}
|
39
|
+
|
40
|
+
std::string Rbac::ToString() const {
|
41
|
+
std::vector<std::string> contents;
|
42
|
+
contents.push_back(absl::StrFormat(
|
43
|
+
"Rbac action=%s{", action == Rbac::Action::kAllow ? "Allow" : "Deny"));
|
44
|
+
for (const auto& p : policies) {
|
45
|
+
contents.push_back(absl::StrFormat("{\n policy_name=%s\n%s\n}", p.first,
|
46
|
+
p.second.ToString()));
|
47
|
+
}
|
48
|
+
contents.push_back("}");
|
49
|
+
return absl::StrJoin(contents, "\n");
|
50
|
+
}
|
51
|
+
|
52
|
+
//
|
53
|
+
// CidrRange
|
54
|
+
//
|
55
|
+
|
56
|
+
Rbac::CidrRange::CidrRange(std::string address_prefix, uint32_t prefix_len)
|
57
|
+
: address_prefix(std::move(address_prefix)), prefix_len(prefix_len) {}
|
58
|
+
|
59
|
+
Rbac::CidrRange::CidrRange(Rbac::CidrRange&& other) noexcept
|
60
|
+
: address_prefix(std::move(other.address_prefix)),
|
61
|
+
prefix_len(other.prefix_len) {}
|
62
|
+
|
63
|
+
Rbac::CidrRange& Rbac::CidrRange::operator=(Rbac::CidrRange&& other) noexcept {
|
64
|
+
address_prefix = std::move(other.address_prefix);
|
65
|
+
prefix_len = other.prefix_len;
|
66
|
+
return *this;
|
67
|
+
}
|
68
|
+
|
69
|
+
std::string Rbac::CidrRange::ToString() const {
|
70
|
+
return absl::StrFormat("CidrRange{address_prefix=%s,prefix_len=%d}",
|
71
|
+
address_prefix, prefix_len);
|
72
|
+
}
|
73
|
+
|
74
|
+
//
|
75
|
+
// Permission
|
76
|
+
//
|
77
|
+
|
78
|
+
Rbac::Permission Rbac::Permission::MakeAndPermission(
|
79
|
+
std::vector<std::unique_ptr<Permission>> permissions) {
|
80
|
+
Permission permission;
|
81
|
+
permission.type = Permission::RuleType::kAnd;
|
82
|
+
permission.permissions = std::move(permissions);
|
83
|
+
return permission;
|
84
|
+
}
|
85
|
+
|
86
|
+
Rbac::Permission Rbac::Permission::MakeOrPermission(
|
87
|
+
std::vector<std::unique_ptr<Permission>> permissions) {
|
88
|
+
Permission permission;
|
89
|
+
permission.type = Permission::RuleType::kOr;
|
90
|
+
permission.permissions = std::move(permissions);
|
91
|
+
return permission;
|
92
|
+
}
|
93
|
+
|
94
|
+
Rbac::Permission Rbac::Permission::MakeNotPermission(Permission permission) {
|
95
|
+
Permission not_permission;
|
96
|
+
not_permission.type = Permission::RuleType::kNot;
|
97
|
+
not_permission.permissions.push_back(
|
98
|
+
absl::make_unique<Rbac::Permission>(std::move(permission)));
|
99
|
+
return not_permission;
|
100
|
+
}
|
101
|
+
|
102
|
+
Rbac::Permission Rbac::Permission::MakeAnyPermission() {
|
103
|
+
Permission permission;
|
104
|
+
permission.type = Permission::RuleType::kAny;
|
105
|
+
return permission;
|
106
|
+
}
|
107
|
+
|
108
|
+
Rbac::Permission Rbac::Permission::MakeHeaderPermission(
|
109
|
+
HeaderMatcher header_matcher) {
|
110
|
+
Permission permission;
|
111
|
+
permission.type = Permission::RuleType::kHeader;
|
112
|
+
permission.header_matcher = std::move(header_matcher);
|
113
|
+
return permission;
|
114
|
+
}
|
115
|
+
|
116
|
+
Rbac::Permission Rbac::Permission::MakePathPermission(
|
117
|
+
StringMatcher string_matcher) {
|
118
|
+
Permission permission;
|
119
|
+
permission.type = Permission::RuleType::kPath;
|
120
|
+
permission.string_matcher = std::move(string_matcher);
|
121
|
+
return permission;
|
122
|
+
}
|
123
|
+
|
124
|
+
Rbac::Permission Rbac::Permission::MakeDestIpPermission(CidrRange ip) {
|
125
|
+
Permission permission;
|
126
|
+
permission.type = Permission::RuleType::kDestIp;
|
127
|
+
permission.ip = std::move(ip);
|
128
|
+
return permission;
|
129
|
+
}
|
130
|
+
|
131
|
+
Rbac::Permission Rbac::Permission::MakeDestPortPermission(int port) {
|
132
|
+
Permission permission;
|
133
|
+
permission.type = Permission::RuleType::kDestPort;
|
134
|
+
permission.port = port;
|
135
|
+
return permission;
|
136
|
+
}
|
137
|
+
|
138
|
+
Rbac::Permission Rbac::Permission::MakeMetadataPermission(bool invert) {
|
139
|
+
Permission permission;
|
140
|
+
permission.type = Permission::RuleType::kMetadata;
|
141
|
+
permission.invert = invert;
|
142
|
+
return permission;
|
143
|
+
}
|
144
|
+
|
145
|
+
Rbac::Permission Rbac::Permission::MakeReqServerNamePermission(
|
146
|
+
StringMatcher string_matcher) {
|
147
|
+
Permission permission;
|
148
|
+
permission.type = Permission::RuleType::kReqServerName;
|
149
|
+
permission.string_matcher = std::move(string_matcher);
|
150
|
+
return permission;
|
151
|
+
}
|
152
|
+
|
153
|
+
Rbac::Permission::Permission(Rbac::Permission&& other) noexcept
|
154
|
+
: type(other.type), invert(other.invert) {
|
155
|
+
switch (type) {
|
156
|
+
case RuleType::kAnd:
|
157
|
+
case RuleType::kOr:
|
158
|
+
case RuleType::kNot:
|
159
|
+
permissions = std::move(other.permissions);
|
160
|
+
break;
|
161
|
+
case RuleType::kAny:
|
162
|
+
break;
|
163
|
+
case RuleType::kHeader:
|
164
|
+
header_matcher = std::move(other.header_matcher);
|
165
|
+
break;
|
166
|
+
case RuleType::kPath:
|
167
|
+
case RuleType::kReqServerName:
|
168
|
+
string_matcher = std::move(other.string_matcher);
|
169
|
+
break;
|
170
|
+
case RuleType::kDestIp:
|
171
|
+
ip = std::move(other.ip);
|
172
|
+
break;
|
173
|
+
default:
|
174
|
+
port = other.port;
|
175
|
+
}
|
176
|
+
}
|
177
|
+
|
178
|
+
Rbac::Permission& Rbac::Permission::operator=(
|
179
|
+
Rbac::Permission&& other) noexcept {
|
180
|
+
type = other.type;
|
181
|
+
invert = other.invert;
|
182
|
+
switch (type) {
|
183
|
+
case RuleType::kAnd:
|
184
|
+
case RuleType::kOr:
|
185
|
+
case RuleType::kNot:
|
186
|
+
permissions = std::move(other.permissions);
|
187
|
+
break;
|
188
|
+
case RuleType::kAny:
|
189
|
+
break;
|
190
|
+
case RuleType::kHeader:
|
191
|
+
header_matcher = std::move(other.header_matcher);
|
192
|
+
break;
|
193
|
+
case RuleType::kPath:
|
194
|
+
case RuleType::kReqServerName:
|
195
|
+
string_matcher = std::move(other.string_matcher);
|
196
|
+
break;
|
197
|
+
case RuleType::kDestIp:
|
198
|
+
ip = std::move(other.ip);
|
199
|
+
break;
|
200
|
+
default:
|
201
|
+
port = other.port;
|
202
|
+
}
|
203
|
+
return *this;
|
204
|
+
}
|
205
|
+
|
206
|
+
std::string Rbac::Permission::ToString() const {
|
207
|
+
switch (type) {
|
208
|
+
case RuleType::kAnd: {
|
209
|
+
std::vector<std::string> contents;
|
210
|
+
contents.reserve(permissions.size());
|
211
|
+
for (const auto& permission : permissions) {
|
212
|
+
contents.push_back(permission->ToString());
|
213
|
+
}
|
214
|
+
return absl::StrFormat("and=[%s]", absl::StrJoin(contents, ","));
|
215
|
+
}
|
216
|
+
case RuleType::kOr: {
|
217
|
+
std::vector<std::string> contents;
|
218
|
+
contents.reserve(permissions.size());
|
219
|
+
for (const auto& permission : permissions) {
|
220
|
+
contents.push_back(permission->ToString());
|
221
|
+
}
|
222
|
+
return absl::StrFormat("or=[%s]", absl::StrJoin(contents, ","));
|
223
|
+
}
|
224
|
+
case RuleType::kNot:
|
225
|
+
return absl::StrFormat("not %s", permissions[0]->ToString());
|
226
|
+
case RuleType::kAny:
|
227
|
+
return "any";
|
228
|
+
case RuleType::kHeader:
|
229
|
+
return absl::StrFormat("header=%s", header_matcher.ToString());
|
230
|
+
case RuleType::kPath:
|
231
|
+
return absl::StrFormat("path=%s", string_matcher.ToString());
|
232
|
+
case RuleType::kDestIp:
|
233
|
+
return absl::StrFormat("dest_ip=%s", ip.ToString());
|
234
|
+
case RuleType::kDestPort:
|
235
|
+
return absl::StrFormat("dest_port=%d", port);
|
236
|
+
case RuleType::kMetadata:
|
237
|
+
return absl::StrFormat("%smetadata", invert ? "invert " : "");
|
238
|
+
case RuleType::kReqServerName:
|
239
|
+
return absl::StrFormat("requested_server_name=%s",
|
240
|
+
string_matcher.ToString());
|
241
|
+
default:
|
242
|
+
return "";
|
243
|
+
}
|
244
|
+
}
|
245
|
+
|
246
|
+
//
|
247
|
+
// Principal
|
248
|
+
//
|
249
|
+
|
250
|
+
Rbac::Principal Rbac::Principal::MakeAndPrincipal(
|
251
|
+
std::vector<std::unique_ptr<Principal>> principals) {
|
252
|
+
Principal principal;
|
253
|
+
principal.type = Principal::RuleType::kAnd;
|
254
|
+
principal.principals = std::move(principals);
|
255
|
+
return principal;
|
256
|
+
}
|
257
|
+
|
258
|
+
Rbac::Principal Rbac::Principal::MakeOrPrincipal(
|
259
|
+
std::vector<std::unique_ptr<Principal>> principals) {
|
260
|
+
Principal principal;
|
261
|
+
principal.type = Principal::RuleType::kOr;
|
262
|
+
principal.principals = std::move(principals);
|
263
|
+
return principal;
|
264
|
+
}
|
265
|
+
|
266
|
+
Rbac::Principal Rbac::Principal::MakeNotPrincipal(Principal principal) {
|
267
|
+
Principal not_principal;
|
268
|
+
not_principal.type = Principal::RuleType::kNot;
|
269
|
+
not_principal.principals.push_back(
|
270
|
+
absl::make_unique<Rbac::Principal>(std::move(principal)));
|
271
|
+
return not_principal;
|
272
|
+
}
|
273
|
+
|
274
|
+
Rbac::Principal Rbac::Principal::MakeAnyPrincipal() {
|
275
|
+
Principal principal;
|
276
|
+
principal.type = Principal::RuleType::kAny;
|
277
|
+
return principal;
|
278
|
+
}
|
279
|
+
|
280
|
+
Rbac::Principal Rbac::Principal::MakeAuthenticatedPrincipal(
|
281
|
+
StringMatcher string_matcher) {
|
282
|
+
Principal principal;
|
283
|
+
principal.type = Principal::RuleType::kPrincipalName;
|
284
|
+
principal.string_matcher = std::move(string_matcher);
|
285
|
+
return principal;
|
286
|
+
}
|
287
|
+
|
288
|
+
Rbac::Principal Rbac::Principal::MakeSourceIpPrincipal(CidrRange ip) {
|
289
|
+
Principal principal;
|
290
|
+
principal.type = Principal::RuleType::kSourceIp;
|
291
|
+
principal.ip = std::move(ip);
|
292
|
+
return principal;
|
293
|
+
}
|
294
|
+
|
295
|
+
Rbac::Principal Rbac::Principal::MakeDirectRemoteIpPrincipal(CidrRange ip) {
|
296
|
+
Principal principal;
|
297
|
+
principal.type = Principal::RuleType::kDirectRemoteIp;
|
298
|
+
principal.ip = std::move(ip);
|
299
|
+
return principal;
|
300
|
+
}
|
301
|
+
|
302
|
+
Rbac::Principal Rbac::Principal::MakeRemoteIpPrincipal(CidrRange ip) {
|
303
|
+
Principal principal;
|
304
|
+
principal.type = Principal::RuleType::kRemoteIp;
|
305
|
+
principal.ip = std::move(ip);
|
306
|
+
return principal;
|
307
|
+
}
|
308
|
+
|
309
|
+
Rbac::Principal Rbac::Principal::MakeHeaderPrincipal(
|
310
|
+
HeaderMatcher header_matcher) {
|
311
|
+
Principal principal;
|
312
|
+
principal.type = Principal::RuleType::kHeader;
|
313
|
+
principal.header_matcher = std::move(header_matcher);
|
314
|
+
return principal;
|
315
|
+
}
|
316
|
+
|
317
|
+
Rbac::Principal Rbac::Principal::MakePathPrincipal(
|
318
|
+
StringMatcher string_matcher) {
|
319
|
+
Principal principal;
|
320
|
+
principal.type = Principal::RuleType::kPath;
|
321
|
+
principal.string_matcher = std::move(string_matcher);
|
322
|
+
return principal;
|
323
|
+
}
|
324
|
+
|
325
|
+
Rbac::Principal Rbac::Principal::MakeMetadataPrincipal(bool invert) {
|
326
|
+
Principal principal;
|
327
|
+
principal.type = Principal::RuleType::kMetadata;
|
328
|
+
principal.invert = invert;
|
329
|
+
return principal;
|
330
|
+
}
|
331
|
+
|
332
|
+
Rbac::Principal::Principal(Rbac::Principal&& other) noexcept
|
333
|
+
: type(other.type), invert(other.invert) {
|
334
|
+
switch (type) {
|
335
|
+
case RuleType::kAnd:
|
336
|
+
case RuleType::kOr:
|
337
|
+
case RuleType::kNot:
|
338
|
+
principals = std::move(other.principals);
|
339
|
+
break;
|
340
|
+
case RuleType::kAny:
|
341
|
+
break;
|
342
|
+
case RuleType::kHeader:
|
343
|
+
header_matcher = std::move(other.header_matcher);
|
344
|
+
break;
|
345
|
+
case RuleType::kPrincipalName:
|
346
|
+
case RuleType::kPath:
|
347
|
+
string_matcher = std::move(other.string_matcher);
|
348
|
+
break;
|
349
|
+
default:
|
350
|
+
ip = std::move(other.ip);
|
351
|
+
}
|
352
|
+
}
|
353
|
+
|
354
|
+
Rbac::Principal& Rbac::Principal::operator=(Rbac::Principal&& other) noexcept {
|
355
|
+
type = other.type;
|
356
|
+
invert = other.invert;
|
357
|
+
switch (type) {
|
358
|
+
case RuleType::kAnd:
|
359
|
+
case RuleType::kOr:
|
360
|
+
case RuleType::kNot:
|
361
|
+
principals = std::move(other.principals);
|
362
|
+
break;
|
363
|
+
case RuleType::kAny:
|
364
|
+
break;
|
365
|
+
case RuleType::kHeader:
|
366
|
+
header_matcher = std::move(other.header_matcher);
|
367
|
+
break;
|
368
|
+
case RuleType::kPrincipalName:
|
369
|
+
case RuleType::kPath:
|
370
|
+
string_matcher = std::move(other.string_matcher);
|
371
|
+
break;
|
372
|
+
default:
|
373
|
+
ip = std::move(other.ip);
|
374
|
+
}
|
375
|
+
return *this;
|
376
|
+
}
|
377
|
+
|
378
|
+
std::string Rbac::Principal::ToString() const {
|
379
|
+
switch (type) {
|
380
|
+
case RuleType::kAnd: {
|
381
|
+
std::vector<std::string> contents;
|
382
|
+
contents.reserve(principals.size());
|
383
|
+
for (const auto& principal : principals) {
|
384
|
+
contents.push_back(principal->ToString());
|
385
|
+
}
|
386
|
+
return absl::StrFormat("and=[%s]", absl::StrJoin(contents, ","));
|
387
|
+
}
|
388
|
+
case RuleType::kOr: {
|
389
|
+
std::vector<std::string> contents;
|
390
|
+
contents.reserve(principals.size());
|
391
|
+
for (const auto& principal : principals) {
|
392
|
+
contents.push_back(principal->ToString());
|
393
|
+
}
|
394
|
+
return absl::StrFormat("or=[%s]", absl::StrJoin(contents, ","));
|
395
|
+
}
|
396
|
+
case RuleType::kNot:
|
397
|
+
return absl::StrFormat("not %s", principals[0]->ToString());
|
398
|
+
case RuleType::kAny:
|
399
|
+
return "any";
|
400
|
+
case RuleType::kPrincipalName:
|
401
|
+
return absl::StrFormat("principal_name=%s", string_matcher.ToString());
|
402
|
+
case RuleType::kSourceIp:
|
403
|
+
return absl::StrFormat("source_ip=%s", ip.ToString());
|
404
|
+
case RuleType::kDirectRemoteIp:
|
405
|
+
return absl::StrFormat("direct_remote_ip=%s", ip.ToString());
|
406
|
+
case RuleType::kRemoteIp:
|
407
|
+
return absl::StrFormat("remote_ip=%s", ip.ToString());
|
408
|
+
case RuleType::kHeader:
|
409
|
+
return absl::StrFormat("header=%s", header_matcher.ToString());
|
410
|
+
case RuleType::kPath:
|
411
|
+
return absl::StrFormat("path=%s", string_matcher.ToString());
|
412
|
+
case RuleType::kMetadata:
|
413
|
+
return absl::StrFormat("%smetadata", invert ? "invert " : "");
|
414
|
+
default:
|
415
|
+
return "";
|
416
|
+
}
|
417
|
+
}
|
418
|
+
|
419
|
+
//
|
420
|
+
// Policy
|
421
|
+
//
|
422
|
+
|
423
|
+
Rbac::Policy::Policy(Permission permissions, Principal principals)
|
424
|
+
: permissions(std::move(permissions)), principals(std::move(principals)) {}
|
425
|
+
|
426
|
+
Rbac::Policy::Policy(Rbac::Policy&& other) noexcept
|
427
|
+
: permissions(std::move(other.permissions)),
|
428
|
+
principals(std::move(other.principals)) {}
|
429
|
+
|
430
|
+
Rbac::Policy& Rbac::Policy::operator=(Rbac::Policy&& other) noexcept {
|
431
|
+
permissions = std::move(other.permissions);
|
432
|
+
principals = std::move(other.principals);
|
433
|
+
return *this;
|
434
|
+
}
|
435
|
+
|
436
|
+
std::string Rbac::Policy::ToString() const {
|
437
|
+
return absl::StrFormat(
|
438
|
+
" Policy {\n Permissions{%s}\n Principals{%s}\n }",
|
439
|
+
permissions.ToString(), principals.ToString());
|
440
|
+
}
|
441
|
+
|
442
|
+
} // namespace grpc_core
|