grpc 1.35.0 → 1.36.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of grpc might be problematic. Click here for more details.

Files changed (335) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +60 -57
  3. data/include/grpc/grpc_security.h +16 -11
  4. data/src/core/ext/filters/client_channel/client_channel.cc +32 -26
  5. data/src/core/ext/filters/client_channel/client_channel.h +0 -2
  6. data/src/core/ext/filters/client_channel/config_selector.h +1 -1
  7. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +2 -2
  8. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +3 -5
  9. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel.h +1 -2
  10. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb_channel_secure.cc +1 -2
  11. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +1 -1
  12. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +8 -6
  13. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +289 -170
  14. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +5 -0
  15. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -3
  16. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +231 -109
  17. data/src/core/ext/filters/client_channel/resolver.cc +2 -5
  18. data/src/core/ext/filters/client_channel/resolver.h +1 -12
  19. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +36 -45
  20. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +29 -41
  21. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +16 -14
  22. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +18 -15
  23. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +362 -0
  24. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +4 -4
  25. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +22 -74
  26. data/src/core/ext/filters/client_channel/server_address.cc +6 -0
  27. data/src/core/ext/filters/client_channel/server_address.h +31 -0
  28. data/src/core/ext/filters/client_channel/subchannel.cc +2 -2
  29. data/src/core/ext/filters/max_age/max_age_filter.cc +35 -32
  30. data/src/core/ext/transport/chttp2/client/chttp2_connector.cc +1 -1
  31. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +47 -22
  32. data/src/core/ext/transport/chttp2/server/chttp2_server.h +11 -2
  33. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2.cc +11 -1
  34. data/src/core/ext/transport/chttp2/server/secure/server_secure_chttp2.cc +62 -18
  35. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +0 -1
  36. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +11 -16
  37. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +42 -59
  38. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +3 -2
  39. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +15 -0
  40. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +25 -1
  41. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +75 -0
  42. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +2 -2
  43. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +9 -9
  44. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +7 -7
  45. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +28 -13
  46. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +0 -1
  47. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +11 -5
  48. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +41 -7
  49. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +0 -1
  50. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +23 -21
  51. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  52. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +13 -9
  53. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +37 -5
  54. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +0 -1
  55. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +11 -9
  56. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +44 -27
  57. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +42 -16
  58. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +106 -0
  59. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +0 -1
  60. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.c +29 -0
  61. data/src/core/ext/upb-generated/envoy/extensions/clusters/aggregate/v3/cluster.upb.h +67 -0
  62. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +13 -16
  63. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +51 -42
  64. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.c +0 -1
  65. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +16 -13
  66. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +50 -18
  67. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +4 -7
  68. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +0 -17
  69. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +0 -1
  70. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +30 -23
  71. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +85 -73
  72. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +0 -3
  73. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +0 -3
  74. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +0 -1
  75. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +0 -2
  76. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +0 -1
  77. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +21 -4
  78. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +29 -0
  79. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/authority.upb.c +5 -5
  80. data/src/core/ext/upb-generated/xds/core/v3/authority.upb.h +60 -0
  81. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.c +52 -0
  82. data/src/core/ext/upb-generated/xds/core/v3/collection_entry.upb.h +143 -0
  83. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.c +42 -0
  84. data/src/core/ext/upb-generated/xds/core/v3/context_params.upb.h +84 -0
  85. data/src/core/ext/upb-generated/{udpa/core/v1 → xds/core/v3}/resource.upb.c +9 -9
  86. data/src/core/ext/upb-generated/xds/core/v3/resource.upb.h +94 -0
  87. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.c +54 -0
  88. data/src/core/ext/upb-generated/xds/core/v3/resource_locator.upb.h +166 -0
  89. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.c +36 -0
  90. data/src/core/ext/upb-generated/xds/core/v3/resource_name.upb.h +85 -0
  91. data/src/core/ext/upbdefs-generated/envoy/config/accesslog/v3/accesslog.upbdefs.c +168 -171
  92. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.c +405 -420
  93. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/cluster.upbdefs.h +2 -2
  94. data/src/core/ext/upbdefs-generated/envoy/config/cluster/v3/outlier_detection.upbdefs.c +12 -9
  95. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.c +177 -171
  96. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/base.upbdefs.h +10 -0
  97. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/config_source.upbdefs.c +88 -88
  98. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/health_check.upbdefs.c +153 -153
  99. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/proxy_protocol.upbdefs.c +4 -7
  100. data/src/core/ext/upbdefs-generated/envoy/config/core/v3/substitution_format_string.upbdefs.c +33 -20
  101. data/src/core/ext/upbdefs-generated/envoy/config/endpoint/v3/endpoint.upbdefs.c +56 -59
  102. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener.upbdefs.c +116 -111
  103. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/listener_components.upbdefs.c +129 -121
  104. data/src/core/ext/upbdefs-generated/envoy/config/listener/v3/udp_listener_config.upbdefs.c +21 -24
  105. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route.upbdefs.c +17 -13
  106. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.c +747 -724
  107. data/src/core/ext/upbdefs-generated/envoy/config/route/v3/route_components.upbdefs.h +5 -0
  108. data/src/core/ext/upbdefs-generated/envoy/config/trace/v3/http_tracer.upbdefs.c +22 -25
  109. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.c +51 -0
  110. data/src/core/ext/upbdefs-generated/envoy/extensions/clusters/aggregate/v3/cluster.upbdefs.h +35 -0
  111. data/src/core/ext/upbdefs-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upbdefs.c +369 -376
  112. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/cert.upbdefs.c +12 -16
  113. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/common.upbdefs.c +112 -108
  114. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/secret.upbdefs.c +45 -53
  115. data/src/core/ext/upbdefs-generated/envoy/extensions/transport_sockets/tls/v3/tls.upbdefs.c +177 -180
  116. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.c +92 -102
  117. data/src/core/ext/upbdefs-generated/envoy/service/discovery/v3/discovery.upbdefs.h +5 -0
  118. data/src/core/ext/upbdefs-generated/envoy/service/endpoint/v3/eds.upbdefs.c +32 -42
  119. data/src/core/ext/upbdefs-generated/envoy/service/listener/v3/lds.upbdefs.c +30 -40
  120. data/src/core/ext/upbdefs-generated/envoy/service/load_stats/v3/lrs.upbdefs.c +4 -7
  121. data/src/core/ext/upbdefs-generated/envoy/service/route/v3/rds.upbdefs.c +38 -44
  122. data/src/core/ext/upbdefs-generated/envoy/type/matcher/v3/string.upbdefs.c +30 -33
  123. data/src/core/ext/upbdefs-generated/validate/validate.upbdefs.c +14 -11
  124. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.c +42 -0
  125. data/src/core/ext/upbdefs-generated/xds/core/v3/authority.upbdefs.h +35 -0
  126. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.c +62 -0
  127. data/src/core/ext/upbdefs-generated/xds/core/v3/collection_entry.upbdefs.h +40 -0
  128. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.c +45 -0
  129. data/src/core/ext/upbdefs-generated/xds/core/v3/context_params.upbdefs.h +40 -0
  130. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.c +49 -0
  131. data/src/core/ext/upbdefs-generated/xds/core/v3/resource.upbdefs.h +35 -0
  132. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.c +67 -0
  133. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_locator.upbdefs.h +40 -0
  134. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.c +50 -0
  135. data/src/core/ext/upbdefs-generated/xds/core/v3/resource_name.upbdefs.h +35 -0
  136. data/src/core/ext/xds/xds_api.cc +738 -567
  137. data/src/core/ext/xds/xds_api.h +46 -84
  138. data/src/core/ext/xds/xds_bootstrap.cc +59 -40
  139. data/src/core/ext/xds/xds_bootstrap.h +12 -4
  140. data/src/core/ext/xds/xds_certificate_provider.cc +180 -74
  141. data/src/core/ext/xds/xds_certificate_provider.h +83 -44
  142. data/src/core/ext/xds/xds_client.cc +13 -11
  143. data/src/core/ext/xds/xds_client.h +3 -0
  144. data/src/core/ext/xds/xds_client_stats.cc +2 -1
  145. data/src/core/ext/xds/xds_server_config_fetcher.cc +147 -11
  146. data/src/core/lib/channel/handshaker.cc +2 -5
  147. data/src/core/lib/channel/handshaker.h +1 -1
  148. data/src/core/lib/gpr/log.cc +6 -1
  149. data/src/core/lib/gprpp/mpscq.cc +2 -2
  150. data/src/core/lib/gprpp/ref_counted.h +1 -1
  151. data/src/core/lib/gprpp/sync.h +129 -40
  152. data/src/core/lib/gprpp/time_util.cc +77 -0
  153. data/src/core/lib/gprpp/time_util.h +42 -0
  154. data/src/core/lib/http/httpcli_security_connector.cc +2 -2
  155. data/src/core/lib/iomgr/ev_apple.cc +10 -7
  156. data/src/core/lib/iomgr/ev_epollex_linux.cc +4 -4
  157. data/src/core/lib/iomgr/iomgr_posix.cc +0 -1
  158. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +0 -1
  159. data/src/core/lib/iomgr/sockaddr_utils.cc +1 -1
  160. data/src/core/lib/iomgr/socket_utils_common_posix.cc +1 -0
  161. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  162. data/src/core/lib/iomgr/tcp_posix.cc +4 -4
  163. data/src/core/lib/security/authorization/matchers.cc +339 -0
  164. data/src/core/lib/security/authorization/matchers.h +158 -0
  165. data/src/core/lib/security/authorization/mock_cel/activation.h +1 -1
  166. data/src/core/lib/security/authorization/mock_cel/cel_value.h +9 -7
  167. data/src/core/lib/security/credentials/alts/alts_credentials.cc +2 -1
  168. data/src/core/lib/security/credentials/alts/alts_credentials.h +1 -1
  169. data/src/core/lib/security/credentials/credentials.h +2 -1
  170. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +1 -1
  171. data/src/core/lib/security/credentials/external/external_account_credentials.cc +2 -2
  172. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -1
  173. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -1
  174. data/src/core/lib/security/credentials/fake/fake_credentials.cc +1 -1
  175. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +7 -6
  176. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +2 -2
  177. data/src/core/lib/security/credentials/jwt/json_token.cc +0 -3
  178. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +0 -3
  179. data/src/core/lib/security/credentials/local/local_credentials.cc +2 -1
  180. data/src/core/lib/security/credentials/local/local_credentials.h +1 -1
  181. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +2 -1
  182. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  183. data/src/core/lib/security/credentials/tls/tls_credentials.cc +2 -1
  184. data/src/core/lib/security/credentials/tls/tls_credentials.h +1 -1
  185. data/src/core/lib/security/credentials/xds/xds_credentials.cc +128 -59
  186. data/src/core/lib/security/credentials/xds/xds_credentials.h +3 -3
  187. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +5 -5
  188. data/src/core/lib/security/security_connector/ssl_utils.cc +3 -0
  189. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +26 -14
  190. data/src/core/lib/security/transport/security_handshaker.cc +1 -3
  191. data/src/core/lib/slice/slice_intern.cc +1 -1
  192. data/src/core/lib/surface/init.cc +13 -15
  193. data/src/core/lib/surface/server.cc +3 -3
  194. data/src/core/lib/surface/server.h +3 -0
  195. data/src/core/lib/surface/version.cc +2 -2
  196. data/src/core/lib/transport/metadata.cc +6 -2
  197. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
  198. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +17 -20
  199. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +16 -21
  200. data/src/core/tsi/fake_transport_security.cc +1 -1
  201. data/src/core/tsi/ssl/session_cache/ssl_session.h +0 -3
  202. data/src/core/tsi/ssl/session_cache/ssl_session_cache.cc +0 -2
  203. data/src/core/tsi/ssl/session_cache/ssl_session_cache.h +2 -4
  204. data/src/core/tsi/ssl_transport_security.cc +0 -3
  205. data/src/core/tsi/ssl_transport_security.h +0 -3
  206. data/src/ruby/lib/grpc/version.rb +1 -1
  207. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +7 -0
  208. data/third_party/abseil-cpp/absl/synchronization/internal/graphcycles.cc +1 -0
  209. data/third_party/boringssl-with-bazel/err_data.c +725 -723
  210. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_bitstr.c +3 -3
  211. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_enum.c +2 -2
  212. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_int.c +5 -5
  213. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_object.c +3 -10
  214. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_octet.c +3 -3
  215. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_type.c +4 -2
  216. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_utctm.c +2 -2
  217. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_lib.c +15 -14
  218. data/third_party/boringssl-with-bazel/src/crypto/asn1/asn1_locl.h +30 -0
  219. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +28 -79
  220. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +39 -85
  221. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_fre.c +5 -16
  222. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_new.c +10 -61
  223. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_typ.c +0 -2
  224. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_utl.c +2 -2
  225. data/third_party/boringssl-with-bazel/src/crypto/bio/socket_helper.c +4 -0
  226. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +158 -0
  227. data/third_party/boringssl-with-bazel/src/crypto/bn_extra/bn_asn1.c +3 -10
  228. data/third_party/boringssl-with-bazel/src/crypto/bytestring/ber.c +8 -9
  229. data/third_party/boringssl-with-bazel/src/crypto/bytestring/cbs.c +60 -45
  230. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_chacha20poly1305.c +6 -81
  231. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +87 -0
  232. data/third_party/boringssl-with-bazel/src/crypto/cpu-aarch64-win.c +41 -0
  233. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/dh_asn1.c +0 -0
  234. data/third_party/boringssl-with-bazel/src/crypto/{dh → dh_extra}/params.c +179 -0
  235. data/third_party/boringssl-with-bazel/src/crypto/digest_extra/digest_extra.c +25 -0
  236. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/ec_asn1.c +2 -17
  237. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +3 -1
  238. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/bn.c +13 -20
  239. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/div.c +2 -3
  240. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bn/internal.h +9 -1
  241. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/check.c +0 -0
  242. data/third_party/boringssl-with-bazel/src/crypto/{dh → fipsmodule/dh}/dh.c +136 -213
  243. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +12 -0
  244. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +9 -1
  245. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/internal.h +28 -0
  246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/rand.c +128 -38
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +0 -7
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +51 -32
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +147 -0
  250. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +18 -29
  251. data/third_party/boringssl-with-bazel/src/crypto/hpke/internal.h +13 -4
  252. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305.c +10 -7
  253. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_arm.c +13 -11
  254. data/third_party/boringssl-with-bazel/src/crypto/poly1305/poly1305_vec.c +4 -0
  255. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/passive.c +34 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/rand_extra/rand_extra.c +4 -0
  257. data/third_party/boringssl-with-bazel/src/crypto/stack/stack.c +7 -13
  258. data/third_party/boringssl-with-bazel/src/crypto/x509/rsa_pss.c +5 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_cmp.c +1 -1
  260. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_ext.c +10 -7
  261. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_r2x.c +1 -1
  262. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_set.c +8 -8
  263. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_v3.c +1 -1
  264. data/third_party/boringssl-with-bazel/src/crypto/x509/x509cset.c +29 -23
  265. data/third_party/boringssl-with-bazel/src/crypto/x509/x_crl.c +1 -2
  266. data/third_party/boringssl-with-bazel/src/crypto/x509/x_pkey.c +2 -2
  267. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509.c +39 -6
  268. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  269. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_akey.c +3 -3
  270. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_alt.c +11 -10
  271. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_bitst.c +3 -3
  272. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +25 -25
  273. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +2 -2
  274. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_enum.c +2 -1
  275. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_genn.c +40 -20
  276. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_ia5.c +3 -4
  277. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +25 -36
  278. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +1 -1
  279. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +6 -6
  280. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +6 -6
  281. data/third_party/boringssl-with-bazel/src/include/openssl/arm_arch.h +3 -3
  282. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +652 -545
  283. data/third_party/boringssl-with-bazel/src/include/openssl/asn1t.h +0 -167
  284. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +10 -5
  285. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +62 -0
  286. data/third_party/boringssl-with-bazel/src/include/openssl/bytestring.h +22 -7
  287. data/third_party/boringssl-with-bazel/src/include/openssl/cipher.h +15 -0
  288. data/third_party/boringssl-with-bazel/src/include/openssl/dh.h +56 -26
  289. data/third_party/boringssl-with-bazel/src/include/openssl/digest.h +1 -0
  290. data/third_party/boringssl-with-bazel/src/include/openssl/ec.h +15 -0
  291. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +12 -2
  292. data/third_party/boringssl-with-bazel/src/include/openssl/rand.h +3 -0
  293. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +2 -1
  294. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +42 -24
  295. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +27 -8
  296. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +287 -98
  297. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +139 -36
  298. data/third_party/boringssl-with-bazel/src/ssl/handshake.cc +4 -3
  299. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +11 -20
  300. data/third_party/boringssl-with-bazel/src/ssl/handshake_server.cc +10 -5
  301. data/third_party/boringssl-with-bazel/src/ssl/internal.h +37 -16
  302. data/third_party/boringssl-with-bazel/src/ssl/s3_lib.cc +0 -1
  303. data/third_party/boringssl-with-bazel/src/ssl/ssl_asn1.cc +7 -8
  304. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +20 -14
  305. data/third_party/boringssl-with-bazel/src/ssl/ssl_session.cc +7 -8
  306. data/third_party/boringssl-with-bazel/src/ssl/ssl_transcript.cc +2 -2
  307. data/third_party/boringssl-with-bazel/src/ssl/t1_enc.cc +5 -7
  308. data/third_party/boringssl-with-bazel/src/ssl/t1_lib.cc +329 -31
  309. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +2 -2
  310. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +48 -15
  311. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +66 -24
  312. metadata +77 -65
  313. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +0 -60
  314. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +0 -52
  315. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +0 -143
  316. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +0 -42
  317. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +0 -84
  318. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +0 -94
  319. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +0 -54
  320. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +0 -173
  321. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +0 -36
  322. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +0 -92
  323. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.c +0 -42
  324. data/src/core/ext/upbdefs-generated/udpa/core/v1/authority.upbdefs.h +0 -35
  325. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.c +0 -62
  326. data/src/core/ext/upbdefs-generated/udpa/core/v1/collection_entry.upbdefs.h +0 -40
  327. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.c +0 -45
  328. data/src/core/ext/upbdefs-generated/udpa/core/v1/context_params.upbdefs.h +0 -40
  329. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.c +0 -49
  330. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource.upbdefs.h +0 -35
  331. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.c +0 -68
  332. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_locator.upbdefs.h +0 -40
  333. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.c +0 -51
  334. data/src/core/ext/upbdefs-generated/udpa/core/v1/resource_name.upbdefs.h +0 -35
  335. data/src/core/lib/iomgr/iomgr_posix.h +0 -26
@@ -537,7 +537,7 @@ static void fd_notify_on_error(grpc_fd* fd, grpc_closure* closure) {
537
537
 
538
538
  static bool fd_has_pollset(grpc_fd* fd, grpc_pollset* pollset) {
539
539
  const int epfd = pollset->active_pollable->epfd;
540
- grpc_core::MutexLock lock(&fd->pollable_mu);
540
+ grpc_core::MutexLockForGprMu lock(&fd->pollable_mu);
541
541
  for (size_t i = 0; i < fd->pollset_fds.size(); ++i) {
542
542
  if (fd->pollset_fds[i] == epfd) {
543
543
  return true;
@@ -548,7 +548,7 @@ static bool fd_has_pollset(grpc_fd* fd, grpc_pollset* pollset) {
548
548
 
549
549
  static void fd_add_pollset(grpc_fd* fd, grpc_pollset* pollset) {
550
550
  const int epfd = pollset->active_pollable->epfd;
551
- grpc_core::MutexLock lock(&fd->pollable_mu);
551
+ grpc_core::MutexLockForGprMu lock(&fd->pollable_mu);
552
552
  fd->pollset_fds.push_back(epfd);
553
553
  }
554
554
 
@@ -684,7 +684,7 @@ static void pollset_maybe_finish_shutdown(grpc_pollset* pollset) {
684
684
  static grpc_error* kick_one_worker(grpc_pollset_worker* specific_worker) {
685
685
  GPR_TIMER_SCOPE("kick_one_worker", 0);
686
686
  pollable* p = specific_worker->pollable_obj;
687
- grpc_core::MutexLock lock(&p->mu);
687
+ grpc_core::MutexLockForGprMu lock(&p->mu);
688
688
  GPR_ASSERT(specific_worker != nullptr);
689
689
  if (specific_worker->kicked) {
690
690
  if (GRPC_TRACE_FLAG_ENABLED(grpc_polling_trace)) {
@@ -1296,7 +1296,7 @@ static void pollset_add_fd(grpc_pollset* pollset, grpc_fd* fd) {
1296
1296
  return;
1297
1297
  }
1298
1298
 
1299
- grpc_core::MutexLock lock(&pollset->mu);
1299
+ grpc_core::MutexLockForGprMu lock(&pollset->mu);
1300
1300
  grpc_error* error = pollset_add_fd_locked(pollset, fd);
1301
1301
 
1302
1302
  // If we are in PO_MULTI mode, we should update the pollsets of the FD.
@@ -25,7 +25,6 @@
25
25
  #include "src/core/lib/debug/trace.h"
26
26
  #include "src/core/lib/iomgr/ev_posix.h"
27
27
  #include "src/core/lib/iomgr/iomgr_internal.h"
28
- #include "src/core/lib/iomgr/iomgr_posix.h"
29
28
  #include "src/core/lib/iomgr/resolve_address.h"
30
29
  #include "src/core/lib/iomgr/tcp_client.h"
31
30
  #include "src/core/lib/iomgr/tcp_posix.h"
@@ -40,7 +40,6 @@
40
40
  #include "src/core/lib/iomgr/ev_apple.h"
41
41
  #include "src/core/lib/iomgr/ev_posix.h"
42
42
  #include "src/core/lib/iomgr/iomgr_internal.h"
43
- #include "src/core/lib/iomgr/iomgr_posix.h"
44
43
  #include "src/core/lib/iomgr/resolve_address.h"
45
44
  #include "src/core/lib/iomgr/tcp_client.h"
46
45
  #include "src/core/lib/iomgr/tcp_posix.h"
@@ -183,7 +183,7 @@ std::string grpc_sockaddr_to_string(const grpc_resolved_address* resolved_addr,
183
183
  if (ip != nullptr && grpc_inet_ntop(addr->sa_family, ip, ntop_buf,
184
184
  sizeof(ntop_buf)) != nullptr) {
185
185
  if (sin6_scope_id != 0) {
186
- // Enclose sin6_scope_id with the format defined in RFC 6784 section 2.
186
+ // Enclose sin6_scope_id with the format defined in RFC 6874 section 2.
187
187
  std::string host_with_scope =
188
188
  absl::StrFormat("%s%%25%" PRIu32, ntop_buf, sin6_scope_id);
189
189
  out = grpc_core::JoinHostPort(host_with_scope, port);
@@ -62,6 +62,7 @@ grpc_error* grpc_set_socket_zerocopy(int fd) {
62
62
  }
63
63
  return GRPC_ERROR_NONE;
64
64
  #else
65
+ (void)fd;
65
66
  return GRPC_OS_ERROR(ENOSYS, "setsockopt(SO_ZEROCOPY)");
66
67
  #endif
67
68
  }
@@ -38,7 +38,7 @@
38
38
  #include "src/core/lib/channel/channel_args.h"
39
39
  #include "src/core/lib/gpr/string.h"
40
40
  #include "src/core/lib/iomgr/ev_posix.h"
41
- #include "src/core/lib/iomgr/iomgr_posix.h"
41
+ #include "src/core/lib/iomgr/iomgr_internal.h"
42
42
  #include "src/core/lib/iomgr/sockaddr.h"
43
43
  #include "src/core/lib/iomgr/sockaddr_utils.h"
44
44
  #include "src/core/lib/iomgr/socket_mutator.h"
@@ -1241,11 +1241,11 @@ static void tcp_handle_error(void* arg /* grpc_tcp */, grpc_error* error) {
1241
1241
 
1242
1242
  #else /* GRPC_LINUX_ERRQUEUE */
1243
1243
  static TcpZerocopySendRecord* tcp_get_send_zerocopy_record(
1244
- grpc_tcp* tcp, grpc_slice_buffer* buf) {
1244
+ grpc_tcp* /*tcp*/, grpc_slice_buffer* /*buf*/) {
1245
1245
  return nullptr;
1246
1246
  }
1247
1247
 
1248
- static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* tcp) {}
1248
+ static void ZerocopyDisableAndWaitForRemaining(grpc_tcp* /*tcp*/) {}
1249
1249
 
1250
1250
  static bool tcp_write_with_timestamps(grpc_tcp* /*tcp*/, struct msghdr* /*msg*/,
1251
1251
  size_t /*sending_length*/,
@@ -1391,8 +1391,8 @@ static bool do_tcp_flush_zerocopy(grpc_tcp* tcp, TcpZerocopySendRecord* record,
1391
1391
 
1392
1392
  static void UnrefMaybePutZerocopySendRecord(grpc_tcp* tcp,
1393
1393
  TcpZerocopySendRecord* record,
1394
- uint32_t seq,
1395
- const char* /* tag */) {
1394
+ uint32_t /*seq*/,
1395
+ const char* /*tag*/) {
1396
1396
  if (record->Unref()) {
1397
1397
  tcp->tcp_zerocopy_send_ctx.PutSendRecord(record);
1398
1398
  }
@@ -0,0 +1,339 @@
1
+ // Copyright 2021 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include <grpc/support/port_platform.h>
16
+
17
+ #include "src/core/lib/security/authorization/matchers.h"
18
+
19
+ #include "absl/memory/memory.h"
20
+ #include "absl/strings/str_cat.h"
21
+ #include "absl/strings/str_format.h"
22
+ #include "absl/strings/str_join.h"
23
+ #include "absl/strings/str_split.h"
24
+
25
+ namespace grpc_core {
26
+
27
+ //
28
+ // StringMatcher
29
+ //
30
+
31
+ absl::StatusOr<StringMatcher> StringMatcher::Create(Type type,
32
+ const std::string& matcher,
33
+ bool case_sensitive) {
34
+ if (type == Type::SAFE_REGEX) {
35
+ RE2::Options options;
36
+ options.set_case_sensitive(case_sensitive);
37
+ auto regex_matcher = absl::make_unique<RE2>(matcher, options);
38
+ if (!regex_matcher->ok()) {
39
+ return absl::InvalidArgumentError(
40
+ "Invalid regex string specified in matcher.");
41
+ }
42
+ return StringMatcher(std::move(regex_matcher), case_sensitive);
43
+ } else {
44
+ return StringMatcher(type, matcher, case_sensitive);
45
+ }
46
+ }
47
+
48
+ StringMatcher::StringMatcher(Type type, const std::string& matcher,
49
+ bool case_sensitive)
50
+ : type_(type), string_matcher_(matcher), case_sensitive_(case_sensitive) {}
51
+
52
+ StringMatcher::StringMatcher(std::unique_ptr<RE2> regex_matcher,
53
+ bool case_sensitive)
54
+ : type_(Type::SAFE_REGEX),
55
+ regex_matcher_(std::move(regex_matcher)),
56
+ case_sensitive_(case_sensitive) {}
57
+
58
+ StringMatcher::StringMatcher(const StringMatcher& other)
59
+ : type_(other.type_), case_sensitive_(other.case_sensitive_) {
60
+ if (type_ == Type::SAFE_REGEX) {
61
+ RE2::Options options;
62
+ options.set_case_sensitive(other.case_sensitive_);
63
+ regex_matcher_ =
64
+ absl::make_unique<RE2>(other.regex_matcher_->pattern(), options);
65
+ } else {
66
+ string_matcher_ = other.string_matcher_;
67
+ }
68
+ }
69
+
70
+ StringMatcher& StringMatcher::operator=(const StringMatcher& other) {
71
+ type_ = other.type_;
72
+ if (type_ == Type::SAFE_REGEX) {
73
+ RE2::Options options;
74
+ options.set_case_sensitive(other.case_sensitive_);
75
+ regex_matcher_ =
76
+ absl::make_unique<RE2>(other.regex_matcher_->pattern(), options);
77
+ } else {
78
+ string_matcher_ = other.string_matcher_;
79
+ }
80
+ case_sensitive_ = other.case_sensitive_;
81
+ return *this;
82
+ }
83
+
84
+ StringMatcher::StringMatcher(StringMatcher&& other) noexcept
85
+ : type_(other.type_), case_sensitive_(other.case_sensitive_) {
86
+ if (type_ == Type::SAFE_REGEX) {
87
+ regex_matcher_ = std::move(other.regex_matcher_);
88
+ } else {
89
+ string_matcher_ = std::move(other.string_matcher_);
90
+ }
91
+ }
92
+
93
+ StringMatcher& StringMatcher::operator=(StringMatcher&& other) noexcept {
94
+ type_ = other.type_;
95
+ if (type_ == Type::SAFE_REGEX) {
96
+ regex_matcher_ = std::move(other.regex_matcher_);
97
+ } else {
98
+ string_matcher_ = std::move(other.string_matcher_);
99
+ }
100
+ case_sensitive_ = other.case_sensitive_;
101
+ return *this;
102
+ }
103
+
104
+ bool StringMatcher::operator==(const StringMatcher& other) const {
105
+ if (type_ != other.type_ || case_sensitive_ != other.case_sensitive_) {
106
+ return false;
107
+ }
108
+ if (type_ == Type::SAFE_REGEX) {
109
+ return regex_matcher_->pattern() == other.regex_matcher_->pattern();
110
+ } else {
111
+ return string_matcher_ == other.string_matcher_;
112
+ }
113
+ }
114
+
115
+ bool StringMatcher::Match(absl::string_view value) const {
116
+ switch (type_) {
117
+ case Type::EXACT:
118
+ return case_sensitive_ ? value == string_matcher_
119
+ : absl::EqualsIgnoreCase(value, string_matcher_);
120
+ case StringMatcher::Type::PREFIX:
121
+ return case_sensitive_
122
+ ? absl::StartsWith(value, string_matcher_)
123
+ : absl::StartsWithIgnoreCase(value, string_matcher_);
124
+ case StringMatcher::Type::SUFFIX:
125
+ return case_sensitive_ ? absl::EndsWith(value, string_matcher_)
126
+ : absl::EndsWithIgnoreCase(value, string_matcher_);
127
+ case StringMatcher::Type::CONTAINS:
128
+ return case_sensitive_
129
+ ? absl::StrContains(value, string_matcher_)
130
+ : absl::StrContains(absl::AsciiStrToLower(value),
131
+ absl::AsciiStrToLower(string_matcher_));
132
+ case StringMatcher::Type::SAFE_REGEX:
133
+ return RE2::FullMatch(std::string(value), *regex_matcher_);
134
+ default:
135
+ return false;
136
+ }
137
+ }
138
+
139
+ std::string StringMatcher::ToString() const {
140
+ switch (type_) {
141
+ case Type::EXACT:
142
+ return absl::StrFormat("StringMatcher{exact=%s%s}", string_matcher_,
143
+ case_sensitive_ ? "" : ", case_sensitive=false");
144
+ case Type::PREFIX:
145
+ return absl::StrFormat("StringMatcher{prefix=%s%s}", string_matcher_,
146
+ case_sensitive_ ? "" : ", case_sensitive=false");
147
+ case Type::SUFFIX:
148
+ return absl::StrFormat("StringMatcher{suffix=%s%s}", string_matcher_,
149
+ case_sensitive_ ? "" : ", case_sensitive=false");
150
+ case Type::CONTAINS:
151
+ return absl::StrFormat("StringMatcher{contains=%s%s}", string_matcher_,
152
+ case_sensitive_ ? "" : ", case_sensitive=false");
153
+ case Type::SAFE_REGEX:
154
+ return absl::StrFormat("StringMatcher{safe_regex=%s%s}",
155
+ regex_matcher_->pattern(),
156
+ case_sensitive_ ? "" : ", case_sensitive=false");
157
+ default:
158
+ return "";
159
+ }
160
+ }
161
+
162
+ //
163
+ // HeaderMatcher
164
+ //
165
+
166
+ absl::StatusOr<HeaderMatcher> HeaderMatcher::Create(
167
+ const std::string& name, Type type, const std::string& matcher,
168
+ int64_t range_start, int64_t range_end, bool present_match,
169
+ bool invert_match) {
170
+ if (static_cast<int>(type) < 5) {
171
+ // Only for EXACT, PREFIX, SUFFIX, SAFE_REGEX and CONTAINS.
172
+ absl::StatusOr<StringMatcher> string_matcher =
173
+ StringMatcher::Create(static_cast<StringMatcher::Type>(type), matcher,
174
+ /*case_sensitive=*/true);
175
+ if (!string_matcher.ok()) {
176
+ return string_matcher.status();
177
+ }
178
+ return HeaderMatcher(name, type, std::move(string_matcher.value()),
179
+ invert_match);
180
+ } else if (type == Type::RANGE) {
181
+ if (range_start > range_end) {
182
+ return absl::InvalidArgumentError(
183
+ "Invalid range specifier specified: end cannot be smaller than "
184
+ "start.");
185
+ }
186
+ return HeaderMatcher(name, range_start, range_end, invert_match);
187
+ } else {
188
+ return HeaderMatcher(name, present_match, invert_match);
189
+ }
190
+ }
191
+
192
+ HeaderMatcher::HeaderMatcher(const std::string& name, Type type,
193
+ StringMatcher string_matcher, bool invert_match)
194
+ : name_(name),
195
+ type_(type),
196
+ matcher_(std::move(string_matcher)),
197
+ invert_match_(invert_match) {}
198
+
199
+ HeaderMatcher::HeaderMatcher(const std::string& name, int64_t range_start,
200
+ int64_t range_end, bool invert_match)
201
+ : name_(name),
202
+ type_(Type::RANGE),
203
+ range_start_(range_start),
204
+ range_end_(range_end),
205
+ invert_match_(invert_match) {}
206
+
207
+ HeaderMatcher::HeaderMatcher(const std::string& name, bool present_match,
208
+ bool invert_match)
209
+ : name_(name),
210
+ type_(Type::PRESENT),
211
+ present_match_(present_match),
212
+ invert_match_(invert_match) {}
213
+
214
+ HeaderMatcher::HeaderMatcher(const HeaderMatcher& other)
215
+ : name_(other.name_),
216
+ type_(other.type_),
217
+ invert_match_(other.invert_match_) {
218
+ switch (type_) {
219
+ case Type::RANGE:
220
+ range_start_ = other.range_start_;
221
+ range_end_ = other.range_end_;
222
+ break;
223
+ case Type::PRESENT:
224
+ present_match_ = other.present_match_;
225
+ break;
226
+ default:
227
+ matcher_ = other.matcher_;
228
+ }
229
+ }
230
+
231
+ HeaderMatcher& HeaderMatcher::operator=(const HeaderMatcher& other) {
232
+ name_ = other.name_;
233
+ type_ = other.type_;
234
+ invert_match_ = other.invert_match_;
235
+ switch (type_) {
236
+ case Type::RANGE:
237
+ range_start_ = other.range_start_;
238
+ range_end_ = other.range_end_;
239
+ break;
240
+ case Type::PRESENT:
241
+ present_match_ = other.present_match_;
242
+ break;
243
+ default:
244
+ matcher_ = other.matcher_;
245
+ }
246
+ return *this;
247
+ }
248
+
249
+ HeaderMatcher::HeaderMatcher(HeaderMatcher&& other) noexcept
250
+ : name_(std::move(other.name_)),
251
+ type_(other.type_),
252
+ invert_match_(other.invert_match_) {
253
+ switch (type_) {
254
+ case Type::RANGE:
255
+ range_start_ = other.range_start_;
256
+ range_end_ = other.range_end_;
257
+ break;
258
+ case Type::PRESENT:
259
+ present_match_ = other.present_match_;
260
+ break;
261
+ default:
262
+ matcher_ = std::move(other.matcher_);
263
+ }
264
+ }
265
+
266
+ HeaderMatcher& HeaderMatcher::operator=(HeaderMatcher&& other) noexcept {
267
+ name_ = std::move(other.name_);
268
+ type_ = other.type_;
269
+ invert_match_ = other.invert_match_;
270
+ switch (type_) {
271
+ case Type::RANGE:
272
+ range_start_ = other.range_start_;
273
+ range_end_ = other.range_end_;
274
+ break;
275
+ case Type::PRESENT:
276
+ present_match_ = other.present_match_;
277
+ break;
278
+ default:
279
+ matcher_ = std::move(other.matcher_);
280
+ }
281
+ return *this;
282
+ }
283
+
284
+ bool HeaderMatcher::operator==(const HeaderMatcher& other) const {
285
+ if (name_ != other.name_) return false;
286
+ if (type_ != other.type_) return false;
287
+ if (invert_match_ != other.invert_match_) return false;
288
+ switch (type_) {
289
+ case Type::RANGE:
290
+ return range_start_ == other.range_start_ &&
291
+ range_end_ == other.range_end_;
292
+ case Type::PRESENT:
293
+ return present_match_ == other.present_match_;
294
+ default:
295
+ return matcher_ == other.matcher_;
296
+ }
297
+ }
298
+
299
+ bool HeaderMatcher::Match(
300
+ const absl::optional<absl::string_view>& value) const {
301
+ bool match;
302
+ if (type_ == Type::PRESENT) {
303
+ match = value.has_value() == present_match_;
304
+ } else if (!value.has_value()) {
305
+ // All other types fail to match if field is not present.
306
+ match = false;
307
+ } else if (type_ == Type::RANGE) {
308
+ int64_t int_value;
309
+ match = absl::SimpleAtoi(value.value(), &int_value) &&
310
+ int_value >= range_start_ && int_value < range_end_;
311
+ } else {
312
+ match = matcher_.Match(value.value());
313
+ }
314
+ return match != invert_match_;
315
+ }
316
+
317
+ std::string HeaderMatcher::ToString() const {
318
+ switch (type_) {
319
+ case Type::RANGE:
320
+ return absl::StrFormat("HeaderMatcher{%s %srange=[%d, %d]}", name_,
321
+ invert_match_ ? "not " : "", range_start_,
322
+ range_end_);
323
+ case Type::PRESENT:
324
+ return absl::StrFormat("HeaderMatcher{%s %spresent=%s}", name_,
325
+ invert_match_ ? "not " : "",
326
+ present_match_ ? "true" : "false");
327
+ case Type::EXACT:
328
+ case Type::PREFIX:
329
+ case Type::SUFFIX:
330
+ case Type::SAFE_REGEX:
331
+ case Type::CONTAINS:
332
+ return absl::StrFormat("HeaderMatcher{%s %s%s}", name_,
333
+ invert_match_ ? "not " : "", matcher_.ToString());
334
+ default:
335
+ return "";
336
+ }
337
+ }
338
+
339
+ } // namespace grpc_core
@@ -0,0 +1,158 @@
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
+ #include <string>
22
+
23
+ #include "absl/status/statusor.h"
24
+ #include "absl/strings/string_view.h"
25
+ #include "absl/types/optional.h"
26
+
27
+ #include "re2/re2.h"
28
+
29
+ namespace grpc_core {
30
+
31
+ class StringMatcher {
32
+ public:
33
+ enum class Type {
34
+ EXACT, // value stored in string_matcher_ field
35
+ PREFIX, // value stored in string_matcher_ field
36
+ SUFFIX, // value stored in string_matcher_ field
37
+ SAFE_REGEX, // pattern stored in regex_matcher_ field
38
+ CONTAINS, // value stored in string_matcher_ field
39
+ };
40
+
41
+ // Creates StringMatcher instance. Returns error status on failure.
42
+ static absl::StatusOr<StringMatcher> Create(Type type,
43
+ const std::string& matcher,
44
+ bool case_sensitive = true);
45
+
46
+ StringMatcher() = default;
47
+ StringMatcher(const StringMatcher& other);
48
+ StringMatcher& operator=(const StringMatcher& other);
49
+ StringMatcher(StringMatcher&& other) noexcept;
50
+ StringMatcher& operator=(StringMatcher&& other) noexcept;
51
+ bool operator==(const StringMatcher& other) const;
52
+
53
+ bool Match(absl::string_view value) const;
54
+
55
+ std::string ToString() const;
56
+
57
+ Type type() const { return type_; }
58
+
59
+ // Valid for EXACT, PREFIX, SUFFIX and CONTAINS
60
+ const std::string& string_matcher() const { return string_matcher_; }
61
+
62
+ // Valid for SAFE_REGEX
63
+ RE2* regex_matcher() const { return regex_matcher_.get(); }
64
+
65
+ bool case_sensitive() const { return case_sensitive_; }
66
+
67
+ private:
68
+ StringMatcher(Type type, const std::string& matcher, bool case_sensitive);
69
+ StringMatcher(std::unique_ptr<RE2> regex_matcher, bool case_sensitive);
70
+
71
+ Type type_ = Type::EXACT;
72
+ std::string string_matcher_;
73
+ std::unique_ptr<RE2> regex_matcher_;
74
+ bool case_sensitive_ = true;
75
+ };
76
+
77
+ class HeaderMatcher {
78
+ public:
79
+ enum class Type {
80
+ EXACT, // value stored in StringMatcher field
81
+ PREFIX, // value stored in StringMatcher field
82
+ SUFFIX, // value stored in StringMatcher field
83
+ SAFE_REGEX, // value stored in StringMatcher field
84
+ CONTAINS, // value stored in StringMatcher field
85
+ RANGE, // uses range_start and range_end fields
86
+ PRESENT, // uses present_match field
87
+ };
88
+
89
+ // Make sure that the first five HeaderMatcher::Type enum values match up to
90
+ // the corresponding StringMatcher::Type enum values, so that it's safe to
91
+ // convert by casting when delegating to StringMatcher.
92
+ static_assert(static_cast<StringMatcher::Type>(Type::EXACT) ==
93
+ StringMatcher::Type::EXACT,
94
+ "");
95
+ static_assert(static_cast<StringMatcher::Type>(Type::PREFIX) ==
96
+ StringMatcher::Type::PREFIX,
97
+ "");
98
+ static_assert(static_cast<StringMatcher::Type>(Type::SUFFIX) ==
99
+ StringMatcher::Type::SUFFIX,
100
+ "");
101
+ static_assert(static_cast<StringMatcher::Type>(Type::SAFE_REGEX) ==
102
+ StringMatcher::Type::SAFE_REGEX,
103
+ "");
104
+ static_assert(static_cast<StringMatcher::Type>(Type::CONTAINS) ==
105
+ StringMatcher::Type::CONTAINS,
106
+ "");
107
+
108
+ // Creates HeaderMatcher instance. Returns error status on failure.
109
+ static absl::StatusOr<HeaderMatcher> Create(
110
+ const std::string& name, Type type, const std::string& matcher,
111
+ int64_t range_start = 0, int64_t range_end = 0,
112
+ bool present_match = false, bool invert_match = false);
113
+
114
+ HeaderMatcher() = default;
115
+ HeaderMatcher(const HeaderMatcher& other);
116
+ HeaderMatcher& operator=(const HeaderMatcher& other);
117
+ HeaderMatcher(HeaderMatcher&& other) noexcept;
118
+ HeaderMatcher& operator=(HeaderMatcher&& other) noexcept;
119
+ bool operator==(const HeaderMatcher& other) const;
120
+
121
+ const std::string& name() const { return name_; }
122
+
123
+ Type type() const { return type_; }
124
+
125
+ // Valid for EXACT, PREFIX, SUFFIX and CONTAINS
126
+ const std::string& string_matcher() const {
127
+ return matcher_.string_matcher();
128
+ }
129
+
130
+ // Valid for SAFE_REGEX
131
+ RE2* regex_matcher() const { return matcher_.regex_matcher(); }
132
+
133
+ bool Match(const absl::optional<absl::string_view>& value) const;
134
+
135
+ std::string ToString() const;
136
+
137
+ private:
138
+ // For StringMatcher.
139
+ HeaderMatcher(const std::string& name, Type type, StringMatcher matcher,
140
+ bool invert_match);
141
+ // For RangeMatcher.
142
+ HeaderMatcher(const std::string& name, int64_t range_start, int64_t range_end,
143
+ bool invert_match);
144
+ // For PresentMatcher.
145
+ HeaderMatcher(const std::string& name, bool present_match, bool invert_match);
146
+
147
+ std::string name_;
148
+ Type type_ = Type::EXACT;
149
+ StringMatcher matcher_;
150
+ int64_t range_start_;
151
+ int64_t range_end_;
152
+ bool present_match_;
153
+ bool invert_match_ = false;
154
+ };
155
+
156
+ } // namespace grpc_core
157
+
158
+ #endif /* GRPC_CORE_LIB_SECURITY_AUTHORIZATION_MATCHERS_H */