grpc 1.34.0 → 1.35.0.pre1

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

Potentially problematic release.


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

Files changed (458) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +808 -2787
  3. data/etc/roots.pem +257 -573
  4. data/include/grpc/compression.h +1 -1
  5. data/include/grpc/grpc.h +14 -0
  6. data/include/grpc/grpc_security.h +61 -3
  7. data/include/grpc/impl/codegen/atm_windows.h +4 -0
  8. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  9. data/include/grpc/impl/codegen/grpc_types.h +1 -1
  10. data/include/grpc/impl/codegen/log.h +0 -2
  11. data/include/grpc/impl/codegen/sync_windows.h +4 -0
  12. data/include/grpc/slice_buffer.h +3 -3
  13. data/include/grpc/support/sync.h +3 -3
  14. data/include/grpc/support/time.h +7 -7
  15. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -4
  16. data/src/core/ext/filters/client_channel/client_channel.cc +2734 -1498
  17. data/src/core/ext/filters/client_channel/client_channel.h +0 -4
  18. data/src/core/ext/filters/client_channel/client_channel_plugin.cc +1 -1
  19. data/src/core/ext/filters/client_channel/config_selector.h +4 -0
  20. data/src/core/ext/filters/client_channel/dynamic_filters.cc +186 -0
  21. data/src/core/ext/filters/client_channel/dynamic_filters.h +99 -0
  22. data/src/core/ext/filters/client_channel/health/health_check_client.cc +6 -6
  23. data/src/core/ext/filters/client_channel/health/health_check_client.h +2 -2
  24. data/src/core/ext/filters/client_channel/http_connect_handshaker.cc +4 -5
  25. data/src/core/ext/filters/client_channel/http_proxy.cc +21 -20
  26. data/src/core/ext/filters/client_channel/lb_policy.cc +1 -1
  27. data/src/core/ext/filters/client_channel/lb_policy.h +2 -3
  28. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +32 -30
  29. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.cc +3 -3
  30. data/src/core/ext/filters/client_channel/lb_policy/grpclb/load_balancer_api.h +1 -1
  31. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +162 -20
  32. data/src/core/ext/filters/client_channel/lb_policy/xds/xds.h +0 -8
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_channel_args.h +24 -0
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +5 -2
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +1 -1
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +1262 -0
  37. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/dns_resolver_ares.cc +7 -14
  38. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.h +1 -32
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver_posix.cc +2 -2
  40. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +454 -16
  41. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.h +5 -0
  42. data/src/core/ext/filters/client_channel/resolver/dns/native/dns_resolver.cc +6 -9
  43. data/src/core/ext/filters/client_channel/resolver/fake/fake_resolver.cc +2 -2
  44. data/src/core/ext/filters/client_channel/resolver/sockaddr/sockaddr_resolver.cc +18 -31
  45. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +3 -5
  46. data/src/core/ext/filters/client_channel/resolver_factory.h +6 -6
  47. data/src/core/ext/filters/client_channel/resolver_registry.cc +40 -39
  48. data/src/core/ext/filters/client_channel/resolver_registry.h +2 -2
  49. data/src/core/ext/filters/client_channel/resolver_result_parsing.cc +11 -13
  50. data/src/core/ext/filters/client_channel/resolver_result_parsing.h +8 -8
  51. data/src/core/ext/filters/client_channel/retry_throttle.cc +5 -3
  52. data/src/core/ext/filters/client_channel/retry_throttle.h +3 -1
  53. data/src/core/ext/filters/client_channel/service_config_call_data.h +19 -1
  54. data/src/core/ext/filters/client_channel/subchannel.cc +34 -50
  55. data/src/core/ext/filters/client_channel/subchannel.h +12 -18
  56. data/src/core/ext/filters/deadline/deadline_filter.cc +4 -2
  57. data/src/core/ext/filters/http/client_authority_filter.cc +6 -6
  58. data/src/core/ext/filters/http/http_filters_plugin.cc +6 -3
  59. data/src/core/ext/filters/message_size/message_size_filter.cc +1 -1
  60. data/src/core/ext/filters/workarounds/workaround_utils.cc +1 -1
  61. data/src/core/ext/transport/chttp2/client/authority.cc +3 -3
  62. data/src/core/ext/transport/chttp2/client/insecure/channel_create.cc +20 -8
  63. data/src/core/ext/transport/chttp2/client/insecure/channel_create_posix.cc +21 -10
  64. data/src/core/ext/transport/chttp2/client/secure/secure_channel_create.cc +26 -14
  65. data/src/core/ext/transport/chttp2/server/chttp2_server.cc +178 -86
  66. data/src/core/ext/transport/chttp2/server/insecure/server_chttp2_posix.cc +12 -5
  67. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +7 -8
  68. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -1
  69. data/src/core/ext/transport/chttp2/transport/frame_settings.h +2 -1
  70. data/src/core/ext/transport/chttp2/transport/frame_window_update.cc +6 -6
  71. data/src/core/ext/transport/chttp2/transport/writing.cc +1 -1
  72. data/src/core/ext/transport/inproc/inproc_transport.cc +42 -8
  73. data/src/core/ext/upb-generated/envoy/annotations/deprecation.upb.h +1 -0
  74. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.c +1 -1
  75. data/src/core/ext/upb-generated/envoy/annotations/resource.upb.h +7 -0
  76. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.c +27 -27
  77. data/src/core/ext/upb-generated/envoy/config/accesslog/v3/accesslog.upb.h +139 -40
  78. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.c +13 -13
  79. data/src/core/ext/upb-generated/envoy/config/cluster/v3/circuit_breaker.upb.h +44 -17
  80. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.c +111 -111
  81. data/src/core/ext/upb-generated/envoy/config/cluster/v3/cluster.upb.h +424 -241
  82. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.c +3 -3
  83. data/src/core/ext/upb-generated/envoy/config/cluster/v3/filter.upb.h +13 -5
  84. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.c +22 -22
  85. data/src/core/ext/upb-generated/envoy/config/cluster/v3/outlier_detection.upb.h +47 -21
  86. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.c +21 -21
  87. data/src/core/ext/upb-generated/envoy/config/core/v3/address.upb.h +88 -39
  88. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.c +4 -4
  89. data/src/core/ext/upb-generated/envoy/config/core/v3/backoff.upb.h +15 -6
  90. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.c +44 -44
  91. data/src/core/ext/upb-generated/envoy/config/core/v3/base.upb.h +200 -78
  92. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.c +17 -17
  93. data/src/core/ext/upb-generated/envoy/config/core/v3/config_source.upb.h +72 -35
  94. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.c +1 -1
  95. data/src/core/ext/upb-generated/envoy/config/core/v3/event_service_config.upb.h +7 -0
  96. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.c +7 -7
  97. data/src/core/ext/upb-generated/envoy/config/core/v3/extension.upb.h +27 -11
  98. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.c +30 -30
  99. data/src/core/ext/upb-generated/envoy/config/core/v3/grpc_service.upb.h +136 -49
  100. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.c +39 -39
  101. data/src/core/ext/upb-generated/envoy/config/core/v3/health_check.upb.h +157 -89
  102. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.c +4 -4
  103. data/src/core/ext/upb-generated/envoy/config/core/v3/http_uri.upb.h +17 -9
  104. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.c +47 -47
  105. data/src/core/ext/upb-generated/envoy/config/core/v3/protocol.upb.h +163 -78
  106. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.c +1 -1
  107. data/src/core/ext/upb-generated/envoy/config/core/v3/proxy_protocol.upb.h +7 -0
  108. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.c +2 -2
  109. data/src/core/ext/upb-generated/envoy/config/core/v3/socket_option.upb.h +9 -2
  110. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.c +1 -1
  111. data/src/core/ext/upb-generated/envoy/config/core/v3/substitution_format_string.upb.h +7 -0
  112. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.c +13 -13
  113. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint.upb.h +59 -36
  114. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.c +16 -16
  115. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/endpoint_components.upb.h +61 -29
  116. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.c +26 -26
  117. data/src/core/ext/upb-generated/envoy/config/endpoint/v3/load_report.upb.h +101 -66
  118. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.c +2 -2
  119. data/src/core/ext/upb-generated/envoy/config/listener/v3/api_listener.upb.h +11 -3
  120. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.c +28 -28
  121. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener.upb.h +122 -77
  122. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.c +23 -23
  123. data/src/core/ext/upb-generated/envoy/config/listener/v3/listener_components.upb.h +106 -54
  124. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.c +2 -2
  125. data/src/core/ext/upb-generated/envoy/config/listener/v3/udp_listener_config.upb.h +13 -0
  126. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.c +16 -16
  127. data/src/core/ext/upb-generated/envoy/config/rbac/v3/rbac.upb.h +81 -35
  128. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.c +7 -7
  129. data/src/core/ext/upb-generated/envoy/config/route/v3/route.upb.h +38 -22
  130. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.c +203 -203
  131. data/src/core/ext/upb-generated/envoy/config/route/v3/route_components.upb.h +845 -495
  132. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.c +5 -5
  133. data/src/core/ext/upb-generated/envoy/config/route/v3/scoped_route.upb.h +26 -6
  134. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.c +3 -3
  135. data/src/core/ext/upb-generated/envoy/config/trace/v3/http_tracer.upb.h +17 -3
  136. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.c +87 -87
  137. data/src/core/ext/upb-generated/envoy/extensions/filters/network/http_connection_manager/v3/http_connection_manager.upb.h +343 -204
  138. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/cert.upb.h +1 -0
  139. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.c +20 -20
  140. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/common.upb.h +85 -46
  141. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.c +7 -7
  142. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/secret.upb.h +33 -11
  143. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.c +32 -32
  144. data/src/core/ext/upb-generated/envoy/extensions/transport_sockets/tls/v3/tls.upb.h +118 -67
  145. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.c +1 -1
  146. data/src/core/ext/upb-generated/envoy/service/cluster/v3/cds.upb.h +7 -0
  147. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.c +1 -1
  148. data/src/core/ext/upb-generated/envoy/service/discovery/v3/ads.upb.h +7 -0
  149. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.c +29 -29
  150. data/src/core/ext/upb-generated/envoy/service/discovery/v3/discovery.upb.h +120 -82
  151. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.c +1 -1
  152. data/src/core/ext/upb-generated/envoy/service/endpoint/v3/eds.upb.h +7 -0
  153. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.c +1 -1
  154. data/src/core/ext/upb-generated/envoy/service/listener/v3/lds.upb.h +7 -0
  155. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.c +7 -7
  156. data/src/core/ext/upb-generated/envoy/service/load_stats/v3/lrs.upb.h +31 -16
  157. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.c +1 -1
  158. data/src/core/ext/upb-generated/envoy/service/route/v3/rds.upb.h +7 -0
  159. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.c +1 -1
  160. data/src/core/ext/upb-generated/envoy/service/route/v3/srds.upb.h +7 -0
  161. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.c +5 -5
  162. data/src/core/ext/upb-generated/envoy/type/matcher/v3/metadata.upb.h +25 -11
  163. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.c +1 -1
  164. data/src/core/ext/upb-generated/envoy/type/matcher/v3/number.upb.h +7 -0
  165. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.c +1 -1
  166. data/src/core/ext/upb-generated/envoy/type/matcher/v3/path.upb.h +7 -0
  167. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.c +6 -6
  168. data/src/core/ext/upb-generated/envoy/type/matcher/v3/regex.upb.h +29 -8
  169. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.c +2 -2
  170. data/src/core/ext/upb-generated/envoy/type/matcher/v3/string.upb.h +16 -3
  171. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.c +3 -3
  172. data/src/core/ext/upb-generated/envoy/type/matcher/v3/value.upb.h +19 -0
  173. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.c +7 -7
  174. data/src/core/ext/upb-generated/envoy/type/metadata/v3/metadata.upb.h +46 -3
  175. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.c +8 -8
  176. data/src/core/ext/upb-generated/envoy/type/tracing/v3/custom_tag.upb.h +41 -8
  177. data/src/core/ext/upb-generated/envoy/type/v3/http.upb.h +1 -0
  178. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.c +3 -3
  179. data/src/core/ext/upb-generated/envoy/type/v3/percent.upb.h +15 -2
  180. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.c +3 -3
  181. data/src/core/ext/upb-generated/envoy/type/v3/range.upb.h +19 -0
  182. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.c +1 -1
  183. data/src/core/ext/upb-generated/envoy/type/v3/semantic_version.upb.h +7 -0
  184. data/src/core/ext/upb-generated/google/api/annotations.upb.h +1 -0
  185. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.c +34 -34
  186. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/checked.upb.h +149 -72
  187. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.c +34 -34
  188. data/src/core/ext/upb-generated/google/api/expr/v1alpha1/syntax.upb.h +142 -59
  189. data/src/core/ext/upb-generated/google/api/http.upb.c +3 -3
  190. data/src/core/ext/upb-generated/google/api/http.upb.h +25 -6
  191. data/src/core/ext/upb-generated/google/protobuf/any.upb.c +1 -1
  192. data/src/core/ext/upb-generated/google/protobuf/any.upb.h +7 -0
  193. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.c +90 -90
  194. data/src/core/ext/upb-generated/google/protobuf/descriptor.upb.h +455 -292
  195. data/src/core/ext/upb-generated/google/protobuf/duration.upb.c +1 -1
  196. data/src/core/ext/upb-generated/google/protobuf/duration.upb.h +7 -0
  197. data/src/core/ext/upb-generated/google/protobuf/empty.upb.c +1 -1
  198. data/src/core/ext/upb-generated/google/protobuf/empty.upb.h +7 -0
  199. data/src/core/ext/upb-generated/google/protobuf/struct.upb.c +4 -4
  200. data/src/core/ext/upb-generated/google/protobuf/struct.upb.h +22 -3
  201. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.c +1 -1
  202. data/src/core/ext/upb-generated/google/protobuf/timestamp.upb.h +7 -0
  203. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.c +9 -9
  204. data/src/core/ext/upb-generated/google/protobuf/wrappers.upb.h +55 -0
  205. data/src/core/ext/upb-generated/google/rpc/status.upb.c +1 -1
  206. data/src/core/ext/upb-generated/google/rpc/status.upb.h +10 -3
  207. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.c +4 -4
  208. data/src/core/ext/upb-generated/src/proto/grpc/gcp/altscontext.upb.h +11 -3
  209. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.c +41 -41
  210. data/src/core/ext/upb-generated/src/proto/grpc/gcp/handshaker.upb.h +149 -76
  211. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.c +5 -5
  212. data/src/core/ext/upb-generated/src/proto/grpc/gcp/transport_security_common.upb.h +21 -6
  213. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.c +2 -2
  214. data/src/core/ext/upb-generated/src/proto/grpc/health/v1/health.upb.h +13 -0
  215. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.c +17 -17
  216. data/src/core/ext/upb-generated/src/proto/grpc/lb/v1/load_balancer.upb.h +82 -25
  217. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.c +3 -3
  218. data/src/core/ext/upb-generated/udpa/annotations/migrate.upb.h +19 -0
  219. data/src/core/ext/upb-generated/udpa/annotations/security.upb.c +1 -1
  220. data/src/core/ext/upb-generated/udpa/annotations/security.upb.h +7 -0
  221. data/src/core/ext/upb-generated/udpa/annotations/sensitive.upb.h +1 -0
  222. data/src/core/ext/upb-generated/udpa/annotations/status.upb.c +2 -2
  223. data/src/core/ext/upb-generated/udpa/annotations/status.upb.h +9 -2
  224. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.c +1 -1
  225. data/src/core/ext/upb-generated/udpa/annotations/versioning.upb.h +7 -0
  226. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.c +1 -1
  227. data/src/core/ext/upb-generated/udpa/core/v1/authority.upb.h +7 -0
  228. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.c +5 -5
  229. data/src/core/ext/upb-generated/udpa/core/v1/collection_entry.upb.h +21 -7
  230. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.c +2 -2
  231. data/src/core/ext/upb-generated/udpa/core/v1/context_params.upb.h +7 -0
  232. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.c +4 -4
  233. data/src/core/ext/upb-generated/udpa/core/v1/resource.upb.h +17 -8
  234. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.c +7 -7
  235. data/src/core/ext/upb-generated/udpa/core/v1/resource_locator.upb.h +31 -18
  236. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.c +5 -5
  237. data/src/core/ext/upb-generated/udpa/core/v1/resource_name.upb.h +19 -11
  238. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.c +3 -3
  239. data/src/core/ext/upb-generated/udpa/data/orca/v1/orca_load_report.upb.h +7 -0
  240. data/src/core/ext/upb-generated/validate/validate.upb.c +64 -64
  241. data/src/core/ext/upb-generated/validate/validate.upb.h +296 -157
  242. data/src/core/ext/xds/certificate_provider_store.cc +10 -7
  243. data/src/core/ext/xds/certificate_provider_store.h +12 -7
  244. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +25 -0
  245. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +1 -4
  246. data/src/core/ext/xds/xds_api.cc +220 -31
  247. data/src/core/ext/xds/xds_api.h +41 -10
  248. data/src/core/ext/xds/xds_bootstrap.h +0 -1
  249. data/src/core/ext/xds/xds_certificate_provider.cc +61 -2
  250. data/src/core/ext/xds/xds_certificate_provider.h +40 -2
  251. data/src/core/ext/xds/xds_client.cc +31 -29
  252. data/src/core/ext/xds/xds_client.h +6 -1
  253. data/src/core/ext/xds/xds_client_stats.cc +2 -2
  254. data/src/core/ext/xds/xds_server_config_fetcher.cc +131 -0
  255. data/src/core/lib/channel/channel_args.cc +8 -8
  256. data/src/core/lib/channel/channel_trace.h +1 -1
  257. data/src/core/lib/channel/channelz.cc +13 -14
  258. data/src/core/lib/channel/channelz.h +0 -1
  259. data/src/core/lib/channel/channelz_registry.h +0 -1
  260. data/src/core/lib/channel/handshaker.cc +2 -2
  261. data/src/core/lib/compression/compression_args.cc +3 -2
  262. data/src/core/lib/debug/stats.h +2 -2
  263. data/src/core/lib/debug/stats_data.h +13 -13
  264. data/src/core/lib/gpr/alloc.cc +3 -2
  265. data/src/core/lib/gpr/log.cc +53 -16
  266. data/src/core/lib/gpr/log_linux.cc +3 -1
  267. data/src/core/lib/gpr/log_posix.cc +3 -1
  268. data/src/core/lib/gpr/log_windows.cc +3 -1
  269. data/src/core/lib/gpr/spinlock.h +10 -2
  270. data/src/core/lib/gpr/string.cc +22 -21
  271. data/src/core/lib/gpr/string.h +5 -6
  272. data/src/core/lib/gpr/sync.cc +4 -4
  273. data/src/core/lib/gpr/time.cc +12 -12
  274. data/src/core/lib/gprpp/arena.h +3 -2
  275. data/src/core/lib/gprpp/ref_counted.h +2 -2
  276. data/src/core/lib/gprpp/ref_counted_ptr.h +9 -1
  277. data/src/core/lib/gprpp/thd_posix.cc +6 -1
  278. data/src/core/lib/gprpp/thd_windows.cc +3 -1
  279. data/src/core/lib/http/httpcli.cc +1 -1
  280. data/src/core/lib/http/httpcli.h +2 -3
  281. data/src/core/lib/http/httpcli_security_connector.cc +1 -1
  282. data/src/core/lib/http/parser.cc +1 -2
  283. data/src/core/lib/iomgr/call_combiner.cc +8 -5
  284. data/src/core/lib/iomgr/combiner.cc +2 -1
  285. data/src/core/lib/iomgr/endpoint.h +1 -1
  286. data/src/core/lib/iomgr/error.cc +15 -11
  287. data/src/core/lib/iomgr/error_internal.h +1 -1
  288. data/src/core/lib/iomgr/ev_epoll1_linux.cc +20 -13
  289. data/src/core/lib/iomgr/ev_epollex_linux.cc +17 -13
  290. data/src/core/lib/iomgr/ev_poll_posix.cc +9 -7
  291. data/src/core/lib/iomgr/exec_ctx.h +6 -4
  292. data/src/core/lib/iomgr/executor.cc +2 -1
  293. data/src/core/lib/iomgr/executor.h +1 -1
  294. data/src/core/lib/iomgr/executor/threadpool.h +1 -1
  295. data/src/core/lib/iomgr/iomgr.cc +1 -1
  296. data/src/core/lib/iomgr/load_file.h +1 -1
  297. data/src/core/lib/iomgr/lockfree_event.cc +19 -14
  298. data/src/core/lib/iomgr/lockfree_event.h +2 -2
  299. data/src/core/lib/iomgr/parse_address.cc +52 -46
  300. data/src/core/lib/iomgr/parse_address.h +13 -9
  301. data/src/core/lib/iomgr/poller/eventmanager_libuv.h +1 -1
  302. data/src/core/lib/iomgr/pollset_set_custom.cc +1 -1
  303. data/src/core/lib/iomgr/python_util.h +1 -1
  304. data/src/core/lib/iomgr/resolve_address.cc +4 -4
  305. data/src/core/lib/iomgr/resource_quota.cc +4 -4
  306. data/src/core/lib/iomgr/sockaddr_utils.cc +10 -10
  307. data/src/core/lib/iomgr/sockaddr_utils.h +1 -1
  308. data/src/core/lib/iomgr/socket_factory_posix.cc +3 -2
  309. data/src/core/lib/iomgr/socket_mutator.cc +3 -2
  310. data/src/core/lib/iomgr/tcp_client.cc +3 -3
  311. data/src/core/lib/iomgr/tcp_client_custom.cc +7 -6
  312. data/src/core/lib/iomgr/tcp_custom.cc +22 -17
  313. data/src/core/lib/iomgr/tcp_posix.cc +9 -6
  314. data/src/core/lib/iomgr/tcp_server_custom.cc +28 -22
  315. data/src/core/lib/iomgr/timer_custom.cc +3 -3
  316. data/src/core/lib/iomgr/timer_generic.cc +3 -3
  317. data/src/core/lib/iomgr/timer_manager.cc +2 -2
  318. data/src/core/lib/iomgr/udp_server.cc +1 -2
  319. data/src/core/lib/iomgr/udp_server.h +1 -2
  320. data/src/core/lib/iomgr/unix_sockets_posix.cc +17 -18
  321. data/src/core/lib/json/json.h +10 -0
  322. data/src/core/lib/security/authorization/evaluate_args.cc +5 -10
  323. data/src/core/lib/security/authorization/evaluate_args.h +1 -1
  324. data/src/core/lib/security/context/security_context.cc +4 -3
  325. data/src/core/lib/security/credentials/alts/check_gcp_environment.cc +1 -1
  326. data/src/core/lib/security/credentials/credentials.cc +6 -6
  327. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +413 -0
  328. data/src/core/lib/security/credentials/external/aws_external_account_credentials.h +80 -0
  329. data/src/core/lib/security/credentials/external/aws_request_signer.cc +15 -10
  330. data/src/core/lib/security/credentials/external/aws_request_signer.h +1 -2
  331. data/src/core/lib/security/credentials/external/external_account_credentials.cc +217 -31
  332. data/src/core/lib/security/credentials/external/external_account_credentials.h +7 -5
  333. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +5 -6
  334. data/src/core/lib/security/credentials/external/file_external_account_credentials.h +3 -4
  335. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +20 -18
  336. data/src/core/lib/security/credentials/external/url_external_account_credentials.h +5 -6
  337. data/src/core/lib/security/credentials/fake/fake_credentials.cc +2 -1
  338. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +18 -12
  339. data/src/core/lib/security/credentials/insecure/insecure_credentials.cc +18 -5
  340. data/src/core/lib/security/credentials/jwt/json_token.cc +1 -1
  341. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +3 -3
  342. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +37 -44
  343. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.h +5 -4
  344. data/src/core/lib/security/credentials/plugin/plugin_credentials.cc +1 -1
  345. data/src/core/lib/security/credentials/ssl/ssl_credentials.cc +5 -5
  346. data/src/core/lib/security/credentials/ssl/ssl_credentials.h +1 -1
  347. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.cc +1 -6
  348. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h +1 -6
  349. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.cc +326 -5
  350. data/src/core/lib/security/credentials/tls/grpc_tls_certificate_provider.h +64 -0
  351. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.cc +1 -1
  352. data/src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h +0 -1
  353. data/src/core/lib/security/credentials/tls/tls_credentials.cc +1 -1
  354. data/src/core/lib/security/credentials/tls/tls_utils.cc +91 -0
  355. data/src/core/lib/security/credentials/tls/tls_utils.h +38 -0
  356. data/src/core/lib/security/credentials/xds/xds_credentials.cc +140 -10
  357. data/src/core/lib/security/credentials/xds/xds_credentials.h +27 -9
  358. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -1
  359. data/src/core/lib/security/security_connector/fake/fake_security_connector.cc +1 -1
  360. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.cc +46 -13
  361. data/src/core/lib/security/security_connector/insecure/insecure_security_connector.h +23 -6
  362. data/src/core/lib/security/security_connector/local/local_security_connector.cc +1 -1
  363. data/src/core/lib/security/security_connector/security_connector.cc +3 -2
  364. data/src/core/lib/security/security_connector/ssl/ssl_security_connector.cc +4 -4
  365. data/src/core/lib/security/security_connector/ssl_utils.cc +2 -2
  366. data/src/core/lib/security/security_connector/ssl_utils.h +12 -19
  367. data/src/core/lib/security/security_connector/tls/tls_security_connector.cc +57 -12
  368. data/src/core/lib/security/security_connector/tls/tls_security_connector.h +2 -3
  369. data/src/core/lib/security/transport/secure_endpoint.cc +2 -2
  370. data/src/core/lib/security/transport/security_handshaker.cc +2 -2
  371. data/src/core/lib/slice/slice_intern.cc +4 -5
  372. data/src/core/lib/slice/slice_internal.h +2 -2
  373. data/src/core/lib/surface/call.cc +32 -24
  374. data/src/core/lib/surface/call_details.cc +8 -8
  375. data/src/core/lib/surface/channel.cc +16 -10
  376. data/src/core/lib/surface/channel.h +3 -2
  377. data/src/core/lib/surface/channel_init.cc +1 -1
  378. data/src/core/lib/surface/completion_queue.cc +23 -18
  379. data/src/core/lib/surface/completion_queue.h +16 -16
  380. data/src/core/lib/surface/init.cc +6 -5
  381. data/src/core/lib/surface/lame_client.cc +20 -46
  382. data/src/core/lib/surface/lame_client.h +4 -0
  383. data/src/core/lib/surface/server.cc +59 -15
  384. data/src/core/lib/surface/server.h +37 -5
  385. data/src/core/lib/surface/version.cc +1 -1
  386. data/src/core/lib/transport/authority_override.cc +6 -4
  387. data/src/core/lib/transport/authority_override.h +5 -2
  388. data/src/core/lib/transport/connectivity_state.h +6 -4
  389. data/src/core/lib/transport/error_utils.h +1 -1
  390. data/src/core/lib/transport/metadata_batch.h +4 -4
  391. data/src/core/lib/transport/static_metadata.cc +1 -1
  392. data/src/core/lib/transport/status_metadata.cc +4 -3
  393. data/src/core/lib/transport/transport.h +7 -7
  394. data/src/core/lib/uri/uri_parser.cc +131 -249
  395. data/src/core/lib/uri/uri_parser.h +57 -21
  396. data/src/core/plugin_registry/grpc_plugin_registry.cc +10 -4
  397. data/src/core/tsi/alts/crypt/gsec.cc +5 -4
  398. data/src/core/tsi/alts/frame_protector/frame_handler.cc +8 -6
  399. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +1 -1
  400. data/src/core/tsi/alts/handshaker/alts_tsi_handshaker.cc +23 -23
  401. data/src/core/tsi/alts/zero_copy_frame_protector/alts_iovec_record_protocol.cc +8 -6
  402. data/src/core/tsi/alts/zero_copy_frame_protector/alts_zero_copy_grpc_protector.cc +4 -4
  403. data/src/core/tsi/fake_transport_security.cc +5 -3
  404. data/src/core/tsi/ssl/session_cache/ssl_session_boringssl.cc +1 -1
  405. data/src/core/tsi/ssl_transport_security.cc +62 -49
  406. data/src/core/tsi/ssl_transport_security.h +6 -6
  407. data/src/core/tsi/transport_security.cc +6 -6
  408. data/src/core/tsi/transport_security_interface.h +1 -1
  409. data/src/ruby/ext/grpc/rb_event_thread.c +2 -0
  410. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +12 -0
  411. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +31 -13
  412. data/src/ruby/lib/grpc/version.rb +1 -1
  413. data/src/ruby/pb/src/proto/grpc/testing/messages_pb.rb +28 -0
  414. data/src/ruby/pb/src/proto/grpc/testing/test_services_pb.rb +18 -0
  415. data/src/ruby/spec/pb/codegen/package_option_spec.rb +2 -6
  416. data/third_party/abseil-cpp/absl/container/flat_hash_map.h +606 -0
  417. data/third_party/abseil-cpp/absl/container/internal/raw_hash_map.h +197 -0
  418. data/third_party/abseil-cpp/absl/status/internal/statusor_internal.h +399 -0
  419. data/third_party/abseil-cpp/absl/status/statusor.cc +71 -0
  420. data/third_party/abseil-cpp/absl/status/statusor.h +760 -0
  421. data/third_party/upb/third_party/wyhash/wyhash.h +145 -0
  422. data/third_party/upb/upb/decode.c +248 -167
  423. data/third_party/upb/upb/decode.h +20 -1
  424. data/third_party/upb/upb/decode.int.h +163 -0
  425. data/third_party/upb/upb/decode_fast.c +1040 -0
  426. data/third_party/upb/upb/decode_fast.h +126 -0
  427. data/third_party/upb/upb/def.c +525 -516
  428. data/third_party/upb/upb/def.h +16 -31
  429. data/third_party/upb/upb/def.hpp +37 -123
  430. data/third_party/upb/upb/encode.c +227 -169
  431. data/third_party/upb/upb/encode.h +27 -2
  432. data/third_party/upb/upb/json_decode.c +1443 -0
  433. data/third_party/upb/upb/json_decode.h +23 -0
  434. data/third_party/upb/upb/json_encode.c +713 -0
  435. data/third_party/upb/upb/json_encode.h +36 -0
  436. data/third_party/upb/upb/msg.c +167 -88
  437. data/third_party/upb/upb/msg.h +174 -34
  438. data/third_party/upb/upb/port_def.inc +74 -61
  439. data/third_party/upb/upb/port_undef.inc +3 -7
  440. data/third_party/upb/upb/reflection.c +36 -19
  441. data/third_party/upb/upb/table.c +34 -197
  442. data/third_party/upb/upb/table.int.h +14 -5
  443. data/third_party/upb/upb/text_encode.c +45 -22
  444. data/third_party/upb/upb/text_encode.h +4 -1
  445. data/third_party/upb/upb/upb.c +18 -41
  446. data/third_party/upb/upb/upb.h +36 -7
  447. data/third_party/upb/upb/upb.hpp +4 -4
  448. data/third_party/upb/upb/upb.int.h +29 -0
  449. metadata +60 -46
  450. data/src/core/ext/filters/client_channel/lb_policy/xds/eds.cc +0 -909
  451. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_ev_driver.cc +0 -485
  452. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper_fallback.cc +0 -68
  453. data/src/core/ext/filters/client_channel/resolving_lb_policy.cc +0 -355
  454. data/src/core/ext/filters/client_channel/resolving_lb_policy.h +0 -138
  455. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.cc +0 -265
  456. data/src/core/ext/xds/google_mesh_ca_certificate_provider_factory.h +0 -104
  457. data/src/core/lib/gprpp/map.h +0 -53
  458. data/third_party/upb/upb/port.c +0 -26
@@ -26,6 +26,8 @@
26
26
 
27
27
  #include "src/core/lib/gprpp/ref_counted.h"
28
28
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
29
+ #include "src/core/lib/gprpp/thd.h"
30
+ #include "src/core/lib/iomgr/load_file.h"
29
31
  #include "src/core/lib/iomgr/pollset_set.h"
30
32
  #include "src/core/lib/security/credentials/tls/grpc_tls_certificate_distributor.h"
31
33
  #include "src/core/lib/security/security_connector/ssl_utils.h"
@@ -59,14 +61,76 @@ class StaticDataCertificateProvider final
59
61
  std::string root_certificate,
60
62
  grpc_core::PemKeyCertPairList pem_key_cert_pairs);
61
63
 
64
+ ~StaticDataCertificateProvider() override;
65
+
66
+ RefCountedPtr<grpc_tls_certificate_distributor> distributor() const override {
67
+ return distributor_;
68
+ }
69
+
70
+ private:
71
+ struct WatcherInfo {
72
+ bool root_being_watched = false;
73
+ bool identity_being_watched = false;
74
+ };
75
+ RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
76
+ std::string root_certificate_;
77
+ grpc_core::PemKeyCertPairList pem_key_cert_pairs_;
78
+ // Guards members below.
79
+ grpc_core::Mutex mu_;
80
+ // Stores each cert_name we get from the distributor callback and its watcher
81
+ // information.
82
+ std::map<std::string, WatcherInfo> watcher_info_;
83
+ };
84
+
85
+ // A provider class that will watch the credential changes on the file system.
86
+ class FileWatcherCertificateProvider final
87
+ : public grpc_tls_certificate_provider {
88
+ public:
89
+ FileWatcherCertificateProvider(std::string private_key_path,
90
+ std::string identity_certificate_path,
91
+ std::string root_cert_path,
92
+ unsigned int refresh_interval_sec);
93
+
94
+ ~FileWatcherCertificateProvider() override;
95
+
62
96
  RefCountedPtr<grpc_tls_certificate_distributor> distributor() const override {
63
97
  return distributor_;
64
98
  }
65
99
 
66
100
  private:
101
+ struct WatcherInfo {
102
+ bool root_being_watched = false;
103
+ bool identity_being_watched = false;
104
+ };
105
+ // Force an update from the file system regardless of the interval.
106
+ void ForceUpdate();
107
+ // Read the root certificates from files and update the distributor.
108
+ absl::optional<std::string> ReadRootCertificatesFromFile(
109
+ const std::string& root_cert_full_path);
110
+ // Read the root certificates from files and update the distributor.
111
+ absl::optional<PemKeyCertPairList> ReadIdentityKeyCertPairFromFiles(
112
+ const std::string& private_key_path,
113
+ const std::string& identity_certificate_path);
114
+
115
+ // Information that is used by the refreshing thread.
116
+ std::string private_key_path_;
117
+ std::string identity_certificate_path_;
118
+ std::string root_cert_path_;
119
+ unsigned int refresh_interval_sec_ = 0;
120
+
67
121
  RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
122
+ grpc_core::Thread refresh_thread_;
123
+ gpr_event shutdown_event_;
124
+
125
+ // Guards members below.
126
+ grpc_core::Mutex mu_;
127
+ // The most-recent credential data. It will be empty if the most recent read
128
+ // attempt failed.
68
129
  std::string root_certificate_;
69
130
  grpc_core::PemKeyCertPairList pem_key_cert_pairs_;
131
+ // Stores each cert_name we get from the distributor callback and its watcher
132
+ // information.
133
+ std::map<std::string, WatcherInfo> watcher_info_;
70
134
  };
71
135
 
72
136
  } // namespace grpc_core
@@ -46,7 +46,7 @@ grpc_tls_server_authorization_check_config::
46
46
  grpc_tls_server_authorization_check_config::
47
47
  ~grpc_tls_server_authorization_check_config() {
48
48
  if (destruct_ != nullptr) {
49
- destruct_((void*)config_user_data_);
49
+ destruct_(config_user_data_);
50
50
  }
51
51
  }
52
52
 
@@ -147,7 +147,6 @@ struct grpc_tls_credentials_options
147
147
  server_authorization_check_config_ = std::move(config);
148
148
  }
149
149
  // Sets the provider in the options.
150
- // This should only be used by C-core API for Tls*Creds case.
151
150
  void set_certificate_provider(
152
151
  grpc_core::RefCountedPtr<grpc_tls_certificate_provider> provider) {
153
152
  provider_ = std::move(provider);
@@ -92,7 +92,7 @@ TlsCredentials::create_security_connector(
92
92
  }
93
93
  if (args != nullptr) {
94
94
  grpc_arg new_arg = grpc_channel_arg_string_create(
95
- (char*)GRPC_ARG_HTTP2_SCHEME, (char*)"https");
95
+ const_cast<char*>(GRPC_ARG_HTTP2_SCHEME), const_cast<char*>("https"));
96
96
  *new_args = grpc_channel_args_copy_and_add(args, &new_arg, 1);
97
97
  }
98
98
  return sc;
@@ -0,0 +1,91 @@
1
+ //
2
+ //
3
+ // Copyright 2020 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #include <grpc/support/port_platform.h>
20
+
21
+ #include "src/core/lib/security/credentials/tls/tls_utils.h"
22
+
23
+ #include "absl/strings/ascii.h"
24
+ #include "absl/strings/match.h"
25
+ #include "absl/strings/str_cat.h"
26
+
27
+ namespace grpc_core {
28
+
29
+ // Based on
30
+ // https://github.com/grpc/grpc-java/blob/ca12e7a339add0ef48202fb72434b9dc0df41756/xds/src/main/java/io/grpc/xds/internal/sds/trust/SdsX509TrustManager.java#L62
31
+ bool VerifySubjectAlternativeName(absl::string_view subject_alternative_name,
32
+ const std::string& matcher) {
33
+ if (subject_alternative_name.empty() ||
34
+ absl::StartsWith(subject_alternative_name, ".")) {
35
+ // Illegal pattern/domain name
36
+ return false;
37
+ }
38
+ if (matcher.empty() || absl::StartsWith(matcher, ".")) {
39
+ // Illegal domain name
40
+ return false;
41
+ }
42
+ // Normalize \a subject_alternative_name and \a matcher by turning them into
43
+ // absolute domain names if they are not yet absolute. This is needed because
44
+ // server certificates do not normally contain absolute names or patterns, but
45
+ // they should be treated as absolute. At the same time, any
46
+ // subject_alternative_name presented to this method should also be treated as
47
+ // absolute for the purposes of matching to the server certificate.
48
+ std::string normalized_san =
49
+ absl::EndsWith(subject_alternative_name, ".")
50
+ ? std::string(subject_alternative_name)
51
+ : absl::StrCat(subject_alternative_name, ".");
52
+ std::string normalized_matcher =
53
+ absl::EndsWith(matcher, ".") ? matcher : absl::StrCat(matcher, ".");
54
+ absl::AsciiStrToLower(&normalized_san);
55
+ absl::AsciiStrToLower(&normalized_matcher);
56
+ if (!absl::StrContains(normalized_san, "*")) {
57
+ return normalized_san == normalized_matcher;
58
+ }
59
+ // WILDCARD PATTERN RULES:
60
+ // 1. Asterisk (*) is only permitted in the left-most domain name label and
61
+ // must be the only character in that label (i.e., must match the whole
62
+ // left-most label). For example, *.example.com is permitted, while
63
+ // *a.example.com, a*.example.com, a*b.example.com, a.*.example.com are
64
+ // not permitted.
65
+ // 2. Asterisk (*) cannot match across domain name labels.
66
+ // For example, *.example.com matches test.example.com but does not match
67
+ // sub.test.example.com.
68
+ // 3. Wildcard patterns for single-label domain names are not permitted.
69
+ if (!absl::StartsWith(normalized_san, "*.")) {
70
+ // Asterisk (*) is only permitted in the left-most domain name label and
71
+ // must be the only character in that label
72
+ return false;
73
+ }
74
+ if (normalized_san == "*.") {
75
+ // Wildcard pattern for single-label domain name -- not permitted.
76
+ return false;
77
+ }
78
+ absl::string_view suffix = absl::string_view(normalized_san).substr(1);
79
+ if (absl::StrContains(suffix, "*")) {
80
+ // Asterisk (*) is not permitted in the suffix
81
+ return false;
82
+ }
83
+ if (!absl::EndsWith(normalized_matcher, suffix)) return false;
84
+ int suffix_start_index = normalized_matcher.length() - suffix.length();
85
+ // Asterisk matching across domain labels is not permitted.
86
+ return suffix_start_index <= 0 /* should not happen */ ||
87
+ normalized_matcher.find_last_of('.', suffix_start_index - 1) ==
88
+ std::string::npos;
89
+ }
90
+
91
+ } // namespace grpc_core
@@ -0,0 +1,38 @@
1
+ //
2
+ //
3
+ // Copyright 2020 gRPC authors.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+ //
17
+ //
18
+
19
+ #ifndef GRPC_CORE_LIB_SECURITY_CREDENTIALS_TLS_TLS_UTILS_H
20
+ #define GRPC_CORE_LIB_SECURITY_CREDENTIALS_TLS_TLS_UTILS_H
21
+
22
+ #include <grpc/support/port_platform.h>
23
+
24
+ #include <string>
25
+ #include <vector>
26
+
27
+ #include "absl/strings/string_view.h"
28
+
29
+ namespace grpc_core {
30
+
31
+ // Matches \a subject_alternative_name with \a matcher. Returns true if there
32
+ // is a match, false otherwise.
33
+ bool VerifySubjectAlternativeName(absl::string_view subject_alternative_name,
34
+ const std::string& matcher);
35
+
36
+ } // namespace grpc_core
37
+
38
+ #endif // GRPC_CORE_LIB_SECURITY_CREDENTIALS_TLS_TLS_UTILS_H
@@ -20,26 +20,156 @@
20
20
 
21
21
  #include "src/core/lib/security/credentials/xds/xds_credentials.h"
22
22
 
23
+ #include "src/core/ext/xds/xds_certificate_provider.h"
24
+ #include "src/core/lib/security/credentials/tls/grpc_tls_credentials_options.h"
25
+ #include "src/core/lib/security/credentials/tls/tls_credentials.h"
26
+ #include "src/core/lib/security/credentials/tls/tls_utils.h"
27
+ #include "src/core/lib/uri/uri_parser.h"
28
+
23
29
  namespace grpc_core {
24
30
 
25
- constexpr const char XdsCredentials::kCredentialsTypeXds[];
31
+ const char kCredentialsTypeXds[] = "Xds";
32
+
33
+ namespace {
34
+
35
+ bool XdsVerifySubjectAlternativeNames(
36
+ const char* const* subject_alternative_names,
37
+ size_t subject_alternative_names_size,
38
+ const std::vector<XdsApi::StringMatcher>& matchers) {
39
+ if (matchers.empty()) return true;
40
+ for (size_t i = 0; i < subject_alternative_names_size; ++i) {
41
+ for (const auto& matcher : matchers) {
42
+ if (matcher.type() == XdsApi::StringMatcher::StringMatcherType::EXACT) {
43
+ // For EXACT match, use DNS rules for verifying SANs
44
+ // TODO(zhenlian): Right now, the SSL layer does not save the type of
45
+ // the SAN, so we are doing a DNS style verification for all SANs when
46
+ // the type is EXACT. When we expose the SAN type, change this to only
47
+ // do this verification when the SAN type is DNS and match type is
48
+ // EXACT. For all other cases, we should use matcher.Match().
49
+ if (VerifySubjectAlternativeName(subject_alternative_names[i],
50
+ matcher.string_matcher())) {
51
+ return true;
52
+ }
53
+ } else {
54
+ if (matcher.Match(subject_alternative_names[i])) {
55
+ return true;
56
+ }
57
+ }
58
+ }
59
+ }
60
+ return false;
61
+ }
62
+
63
+ int ServerAuthCheckSchedule(void* config_user_data,
64
+ grpc_tls_server_authorization_check_arg* arg) {
65
+ XdsCertificateProvider* xds_certificate_provider =
66
+ static_cast<XdsCertificateProvider*>(config_user_data);
67
+ if (XdsVerifySubjectAlternativeNames(
68
+ arg->subject_alternative_names, arg->subject_alternative_names_size,
69
+ xds_certificate_provider->subject_alternative_name_matchers())) {
70
+ arg->success = 1;
71
+ arg->status = GRPC_STATUS_OK;
72
+ } else {
73
+ arg->success = 0;
74
+ arg->status = GRPC_STATUS_UNAUTHENTICATED;
75
+ if (arg->error_details) {
76
+ arg->error_details->set_error_details(
77
+ "SANs from certificate did not match SANs from xDS control plane");
78
+ }
79
+ }
80
+
81
+ return 0; /* synchronous check */
82
+ }
83
+
84
+ void ServerAuthCheckDestroy(void* config_user_data) {
85
+ XdsCertificateProvider* xds_certificate_provider =
86
+ static_cast<XdsCertificateProvider*>(config_user_data);
87
+ xds_certificate_provider->Unref();
88
+ }
89
+
90
+ } // namespace
91
+
92
+ bool TestOnlyXdsVerifySubjectAlternativeNames(
93
+ const char* const* subject_alternative_names,
94
+ size_t subject_alternative_names_size,
95
+ const std::vector<XdsApi::StringMatcher>& matchers) {
96
+ return XdsVerifySubjectAlternativeNames(
97
+ subject_alternative_names, subject_alternative_names_size, matchers);
98
+ }
99
+
100
+ //
101
+ // XdsCredentials
102
+ //
26
103
 
27
- grpc_core::RefCountedPtr<grpc_channel_security_connector>
104
+ RefCountedPtr<grpc_channel_security_connector>
28
105
  XdsCredentials::create_security_connector(
29
- grpc_core::RefCountedPtr<grpc_call_credentials> call_creds,
30
- const char* target_name, const grpc_channel_args* args,
31
- grpc_channel_args** new_args) {
32
- /* TODO(yashkt) : To be filled */
33
- if (fallback_credentials_ != nullptr) {
34
- return fallback_credentials_->create_security_connector(
35
- std::move(call_creds), target_name, args, new_args);
106
+ RefCountedPtr<grpc_call_credentials> call_creds, const char* target_name,
107
+ const grpc_channel_args* args, grpc_channel_args** new_args) {
108
+ auto xds_certificate_provider =
109
+ XdsCertificateProvider::GetFromChannelArgs(args);
110
+ // TODO(yashykt): This arg will no longer need to be added after b/173119596
111
+ // is fixed.
112
+ grpc_arg override_arg = grpc_channel_arg_string_create(
113
+ const_cast<char*>(GRPC_SSL_TARGET_NAME_OVERRIDE_ARG),
114
+ const_cast<char*>(target_name));
115
+ const char* override_arg_name = GRPC_SSL_TARGET_NAME_OVERRIDE_ARG;
116
+ const grpc_channel_args* temp_args = args;
117
+ if (grpc_channel_args_find(args, override_arg_name) == nullptr) {
118
+ temp_args = grpc_channel_args_copy_and_add_and_remove(
119
+ args, &override_arg_name, 1, &override_arg, 1);
36
120
  }
37
- return nullptr;
121
+ RefCountedPtr<grpc_channel_security_connector> security_connector;
122
+ if (xds_certificate_provider != nullptr) {
123
+ auto tls_credentials_options =
124
+ MakeRefCounted<grpc_tls_credentials_options>();
125
+ tls_credentials_options->set_certificate_provider(xds_certificate_provider);
126
+ if (xds_certificate_provider->ProvidesRootCerts()) {
127
+ tls_credentials_options->set_watch_root_cert(true);
128
+ }
129
+ if (xds_certificate_provider->ProvidesIdentityCerts()) {
130
+ tls_credentials_options->set_watch_identity_pair(true);
131
+ }
132
+ tls_credentials_options->set_server_verification_option(
133
+ GRPC_TLS_SKIP_HOSTNAME_VERIFICATION);
134
+ tls_credentials_options->set_server_authorization_check_config(
135
+ MakeRefCounted<grpc_tls_server_authorization_check_config>(
136
+ xds_certificate_provider->Ref().release(), ServerAuthCheckSchedule,
137
+ nullptr, ServerAuthCheckDestroy));
138
+ auto tls_credentials =
139
+ MakeRefCounted<TlsCredentials>(std::move(tls_credentials_options));
140
+ security_connector = tls_credentials->create_security_connector(
141
+ std::move(call_creds), target_name, temp_args, new_args);
142
+ } else {
143
+ GPR_ASSERT(fallback_credentials_ != nullptr);
144
+ security_connector = fallback_credentials_->create_security_connector(
145
+ std::move(call_creds), target_name, temp_args, new_args);
146
+ }
147
+ if (temp_args != args) {
148
+ grpc_channel_args_destroy(temp_args);
149
+ }
150
+ return security_connector;
151
+ }
152
+
153
+ //
154
+ // XdsServerCredentials
155
+ //
156
+
157
+ RefCountedPtr<grpc_server_security_connector>
158
+ XdsServerCredentials::create_security_connector() {
159
+ // TODO(yashkt): Fill this
160
+ return fallback_credentials_->create_security_connector();
38
161
  }
39
162
 
40
163
  } // namespace grpc_core
41
164
 
42
165
  grpc_channel_credentials* grpc_xds_credentials_create(
43
166
  grpc_channel_credentials* fallback_credentials) {
167
+ GPR_ASSERT(fallback_credentials != nullptr);
44
168
  return new grpc_core::XdsCredentials(fallback_credentials->Ref());
45
169
  }
170
+
171
+ grpc_server_credentials* grpc_xds_server_credentials_create(
172
+ grpc_server_credentials* fallback_credentials) {
173
+ GPR_ASSERT(fallback_credentials != nullptr);
174
+ return new grpc_core::XdsServerCredentials(fallback_credentials->Ref());
175
+ }
@@ -23,29 +23,47 @@
23
23
 
24
24
  #include <grpc/grpc_security.h>
25
25
 
26
+ #include "src/core/ext/xds/xds_api.h"
26
27
  #include "src/core/lib/security/credentials/credentials.h"
27
28
 
28
29
  namespace grpc_core {
29
30
 
31
+ extern const char kCredentialsTypeXds[];
32
+
30
33
  class XdsCredentials final : public grpc_channel_credentials {
31
34
  public:
32
- static constexpr const char kCredentialsTypeXds[] = "Xds";
33
-
34
35
  explicit XdsCredentials(
35
- grpc_core::RefCountedPtr<grpc_channel_credentials> fallback_credentials)
36
+ RefCountedPtr<grpc_channel_credentials> fallback_credentials)
36
37
  : grpc_channel_credentials(kCredentialsTypeXds),
37
38
  fallback_credentials_(std::move(fallback_credentials)) {}
38
39
 
39
- grpc_core::RefCountedPtr<grpc_channel_security_connector>
40
- create_security_connector(
41
- grpc_core::RefCountedPtr<grpc_call_credentials> call_creds,
42
- const char* target_name, const grpc_channel_args* args,
43
- grpc_channel_args** new_args) override;
40
+ RefCountedPtr<grpc_channel_security_connector> create_security_connector(
41
+ RefCountedPtr<grpc_call_credentials> call_creds, const char* target_name,
42
+ const grpc_channel_args* args, grpc_channel_args** new_args) override;
43
+
44
+ private:
45
+ RefCountedPtr<grpc_channel_credentials> fallback_credentials_;
46
+ };
47
+
48
+ class XdsServerCredentials final : public grpc_server_credentials {
49
+ public:
50
+ explicit XdsServerCredentials(
51
+ RefCountedPtr<grpc_server_credentials> fallback_credentials)
52
+ : grpc_server_credentials(kCredentialsTypeXds),
53
+ fallback_credentials_(std::move(fallback_credentials)) {}
54
+
55
+ RefCountedPtr<grpc_server_security_connector> create_security_connector()
56
+ override;
44
57
 
45
58
  private:
46
- grpc_core::RefCountedPtr<grpc_channel_credentials> fallback_credentials_;
59
+ RefCountedPtr<grpc_server_credentials> fallback_credentials_;
47
60
  };
48
61
 
62
+ bool TestOnlyXdsVerifySubjectAlternativeNames(
63
+ const char* const* subject_alternative_names,
64
+ size_t subject_alternative_names_size,
65
+ const std::vector<XdsApi::StringMatcher>& matchers);
66
+
49
67
  } // namespace grpc_core
50
68
 
51
69
  #endif /* GRPC_CORE_LIB_SECURITY_CREDENTIALS_XDS_XDS_CREDENTIALS_H */