grpc 1.74.1 → 1.75.0.pre1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (368) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +83 -41
  3. data/include/grpc/credentials.h +7 -1
  4. data/src/core/call/client_call.cc +4 -4
  5. data/src/core/call/filter_fusion.h +1230 -0
  6. data/src/core/call/metadata.cc +22 -0
  7. data/src/core/call/metadata.h +24 -2
  8. data/src/core/channelz/channelz.cc +10 -17
  9. data/src/core/channelz/channelz.h +58 -19
  10. data/src/core/channelz/channelz_registry.cc +0 -162
  11. data/src/core/channelz/channelz_registry.h +14 -7
  12. data/src/core/channelz/property_list.cc +19 -23
  13. data/src/core/channelz/property_list.h +3 -1
  14. data/src/core/channelz/v2tov1/convert.cc +683 -0
  15. data/src/core/channelz/v2tov1/convert.h +58 -0
  16. data/src/core/channelz/v2tov1/legacy_api.cc +425 -0
  17. data/src/core/channelz/v2tov1/legacy_api.h +32 -0
  18. data/src/core/channelz/v2tov1/property_list.cc +118 -0
  19. data/src/core/channelz/v2tov1/property_list.h +52 -0
  20. data/src/core/client_channel/client_channel_filter.cc +5 -4
  21. data/src/core/client_channel/client_channel_filter.h +2 -2
  22. data/src/core/client_channel/client_channel_internal.h +2 -1
  23. data/src/core/client_channel/load_balanced_call_destination.cc +6 -5
  24. data/src/core/client_channel/subchannel.cc +14 -6
  25. data/src/core/client_channel/subchannel.h +2 -0
  26. data/src/core/config/core_configuration.cc +3 -1
  27. data/src/core/config/core_configuration.h +12 -0
  28. data/src/core/credentials/transport/alts/alts_credentials.cc +5 -0
  29. data/src/core/credentials/transport/alts/check_gcp_environment_windows.cc +2 -0
  30. data/src/core/credentials/transport/channel_creds_registry_init.cc +3 -1
  31. data/src/core/credentials/transport/ssl/ssl_credentials.cc +1 -1
  32. data/src/core/credentials/transport/ssl/ssl_security_connector.cc +8 -3
  33. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.cc +29 -24
  34. data/src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h +19 -8
  35. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.cc +96 -54
  36. data/src/core/credentials/transport/tls/grpc_tls_certificate_provider.h +15 -2
  37. data/src/core/credentials/transport/tls/spiffe_utils.cc +371 -0
  38. data/src/core/credentials/transport/tls/spiffe_utils.h +171 -0
  39. data/src/core/credentials/transport/tls/ssl_utils.cc +11 -10
  40. data/src/core/credentials/transport/tls/ssl_utils.h +4 -2
  41. data/src/core/credentials/transport/tls/tls_credentials.cc +2 -0
  42. data/src/core/credentials/transport/tls/tls_security_connector.cc +11 -26
  43. data/src/core/credentials/transport/tls/tls_security_connector.h +12 -12
  44. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +1 -2
  45. data/src/core/ext/filters/http/client/http_client_filter.cc +3 -6
  46. data/src/core/ext/filters/http/client_authority_filter.cc +1 -2
  47. data/src/core/ext/filters/http/message_compress/compression_filter.cc +8 -8
  48. data/src/core/ext/filters/http/server/http_server_filter.cc +3 -6
  49. data/src/core/ext/filters/message_size/message_size_filter.cc +4 -4
  50. data/src/core/ext/filters/rbac/rbac_filter.cc +1 -1
  51. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -5
  52. data/src/core/ext/transport/chttp2/transport/chttp2_transport.cc +3 -2
  53. data/src/core/ext/transport/chttp2/transport/flow_control.cc +1 -0
  54. data/src/core/ext/transport/chttp2/transport/flow_control.h +1 -0
  55. data/src/core/ext/transport/chttp2/transport/frame.cc +89 -6
  56. data/src/core/ext/transport/chttp2/transport/frame.h +38 -0
  57. data/src/core/ext/transport/chttp2/transport/header_assembler.h +5 -14
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +4 -1
  59. data/src/core/ext/transport/chttp2/transport/http2_client_transport.cc +294 -78
  60. data/src/core/ext/transport/chttp2/transport/http2_client_transport.h +128 -9
  61. data/src/core/ext/transport/chttp2/transport/http2_settings.cc +11 -38
  62. data/src/core/ext/transport/chttp2/transport/http2_settings.h +52 -35
  63. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.cc +61 -0
  64. data/src/core/ext/transport/chttp2/transport/http2_settings_manager.h +142 -0
  65. data/src/core/ext/transport/chttp2/transport/http2_transport.cc +81 -3
  66. data/src/core/ext/transport/chttp2/transport/http2_transport.h +12 -1
  67. data/src/core/ext/transport/chttp2/transport/message_assembler.h +2 -2
  68. data/src/core/ext/transport/chttp2/transport/parsing.cc +2 -1
  69. data/src/core/ext/transport/chttp2/transport/ping_promise.cc +2 -1
  70. data/src/core/ext/transport/chttp2/transport/ping_promise.h +22 -5
  71. data/src/core/ext/transport/chttp2/transport/stream_data_queue.h +607 -0
  72. data/src/core/ext/transport/chttp2/transport/writable_streams.h +254 -0
  73. data/src/core/ext/transport/chttp2/transport/writing.cc +6 -4
  74. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb.h +4959 -0
  75. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.c +1111 -0
  76. data/src/core/ext/upb-gen/src/proto/grpc/channelz/channelz.upb_minitable.h +108 -0
  77. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb.h +142 -54
  78. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.c +18 -14
  79. data/src/core/ext/upb-gen/src/proto/grpc/channelz/v2/property_list.upb_minitable.h +2 -2
  80. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.c +716 -0
  81. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/channelz.upbdefs.h +227 -0
  82. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.c +86 -88
  83. data/src/core/ext/upbdefs-gen/src/proto/grpc/channelz/v2/property_list.upbdefs.h +2 -2
  84. data/src/core/filter/auth/auth_filters.h +2 -2
  85. data/src/core/filter/fused_filters.cc +154 -0
  86. data/src/core/handshaker/security/legacy_secure_endpoint.cc +1 -1
  87. data/src/core/handshaker/security/pipelined_secure_endpoint.cc +965 -0
  88. data/src/core/handshaker/security/secure_endpoint.cc +28 -13
  89. data/src/core/handshaker/security/secure_endpoint.h +8 -0
  90. data/src/core/lib/channel/promise_based_filter.cc +15 -25
  91. data/src/core/lib/channel/promise_based_filter.h +6 -5
  92. data/src/core/lib/event_engine/ares_resolver.h +3 -1
  93. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +9 -5
  94. data/src/core/lib/event_engine/cf_engine/cf_engine.h +2 -1
  95. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.cc +263 -0
  96. data/src/core/lib/event_engine/cf_engine/cfsocket_listener.h +107 -0
  97. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +31 -3
  98. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +12 -0
  99. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +12 -10
  100. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.h +6 -4
  101. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.cc +15 -14
  102. data/src/core/lib/event_engine/posix_engine/ev_poll_posix.h +7 -5
  103. data/src/core/lib/event_engine/posix_engine/event_poller.h +0 -8
  104. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.cc +11 -5
  105. data/src/core/lib/event_engine/posix_engine/event_poller_posix_default.h +3 -2
  106. data/src/core/lib/event_engine/posix_engine/grpc_polled_fd_posix.h +1 -0
  107. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +4 -4
  108. data/src/core/lib/event_engine/posix_engine/lockfree_event.h +3 -4
  109. data/src/core/lib/event_engine/posix_engine/posix_endpoint.cc +2 -2
  110. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +188 -199
  111. data/src/core/lib/event_engine/posix_engine/posix_engine.h +30 -45
  112. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +1 -1
  113. data/src/core/lib/event_engine/posix_engine/tcp_socket_utils.h +1 -1
  114. data/src/core/lib/event_engine/windows/grpc_polled_fd_windows.cc +2 -1
  115. data/src/core/lib/experiments/experiments.cc +120 -6
  116. data/src/core/lib/experiments/experiments.h +46 -3
  117. data/src/core/lib/iomgr/combiner.cc +1 -1
  118. data/src/core/lib/iomgr/exec_ctx.h +3 -9
  119. data/src/core/lib/iomgr/socket_mutator.cc +1 -1
  120. data/src/core/lib/iomgr/socket_utils_posix.cc +1 -1
  121. data/src/core/lib/iomgr/socket_utils_posix.h +1 -1
  122. data/src/core/lib/iomgr/tcp_client_posix.cc +1 -1
  123. data/src/core/lib/iomgr/tcp_posix.cc +3 -3
  124. data/src/core/lib/promise/activity.h +2 -2
  125. data/src/core/lib/promise/mpsc.cc +8 -8
  126. data/src/core/lib/promise/party.cc +7 -7
  127. data/src/core/lib/promise/party.h +4 -4
  128. data/src/core/lib/promise/poll.h +10 -0
  129. data/src/core/lib/resource_quota/memory_quota.cc +90 -3
  130. data/src/core/lib/resource_quota/memory_quota.h +20 -9
  131. data/src/core/lib/resource_quota/periodic_update.cc +14 -0
  132. data/src/core/lib/resource_quota/periodic_update.h +8 -0
  133. data/src/core/lib/resource_quota/resource_quota.cc +15 -4
  134. data/src/core/lib/resource_quota/resource_quota.h +3 -0
  135. data/src/core/lib/security/authorization/grpc_server_authz_filter.cc +1 -2
  136. data/src/core/lib/surface/call.cc +5 -5
  137. data/src/core/lib/surface/call.h +6 -5
  138. data/src/core/lib/surface/completion_queue.cc +2 -4
  139. data/src/core/lib/surface/filter_stack_call.cc +1 -1
  140. data/src/core/lib/surface/version.cc +2 -2
  141. data/src/core/lib/transport/promise_endpoint.cc +2 -2
  142. data/src/core/lib/transport/promise_endpoint.h +3 -3
  143. data/src/core/load_balancing/endpoint_list.cc +29 -2
  144. data/src/core/load_balancing/grpclb/client_load_reporting_filter.cc +3 -3
  145. data/src/core/load_balancing/grpclb/client_load_reporting_filter.h +1 -1
  146. data/src/core/load_balancing/pick_first/pick_first.cc +12 -5
  147. data/src/core/load_balancing/xds/xds_cluster_impl.cc +5 -3
  148. data/src/core/net/socket_mutator.cc +19 -0
  149. data/src/core/net/socket_mutator.h +25 -0
  150. data/src/core/plugin_registry/grpc_plugin_registry.cc +6 -0
  151. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver.h +6 -1
  152. data/src/core/resolver/dns/c_ares/grpc_ares_ev_driver_windows.cc +2 -1
  153. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.cc +8 -5
  154. data/src/core/resolver/dns/c_ares/grpc_ares_wrapper.h +2 -1
  155. data/src/core/resolver/xds/xds_dependency_manager.cc +1 -1
  156. data/src/core/server/server.cc +1 -1
  157. data/src/core/server/server_call_tracer_filter.cc +0 -66
  158. data/src/core/server/server_call_tracer_filter.h +64 -0
  159. data/src/core/server/server_config_selector_filter.cc +1 -1
  160. data/src/core/service_config/service_config_channel_arg_filter.cc +3 -60
  161. data/src/core/service_config/service_config_channel_arg_filter.h +82 -0
  162. data/src/core/telemetry/call_tracer.cc +20 -14
  163. data/src/core/telemetry/call_tracer.h +22 -17
  164. data/src/core/telemetry/metrics.h +8 -8
  165. data/src/core/telemetry/stats_data.cc +151 -151
  166. data/src/core/telemetry/stats_data.h +87 -87
  167. data/src/core/transport/auth_context.cc +20 -0
  168. data/src/core/transport/auth_context.h +4 -0
  169. data/src/core/transport/auth_context_comparator_registry.h +69 -0
  170. data/src/core/tsi/alts/handshaker/alts_handshaker_client.cc +2 -3
  171. data/src/core/tsi/ssl_transport_security.cc +202 -32
  172. data/src/core/tsi/ssl_transport_security.h +19 -10
  173. data/src/core/tsi/ssl_transport_security_utils.cc +21 -0
  174. data/src/core/tsi/ssl_transport_security_utils.h +4 -0
  175. data/src/core/util/http_client/httpcli_security_connector.cc +3 -1
  176. data/src/core/util/latent_see.cc +178 -146
  177. data/src/core/util/latent_see.h +245 -188
  178. data/src/core/util/single_set_ptr.h +5 -2
  179. data/src/core/util/useful.h +91 -0
  180. data/src/core/util/windows/directory_reader.cc +1 -0
  181. data/src/core/util/windows/thd.cc +1 -3
  182. data/src/core/util/work_serializer.cc +1 -1
  183. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.cc +32 -5
  184. data/src/core/xds/grpc/file_watcher_certificate_provider_factory.h +5 -0
  185. data/src/core/xds/grpc/xds_certificate_provider.cc +5 -6
  186. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +1 -1
  187. data/src/ruby/lib/grpc/version.rb +1 -1
  188. data/third_party/cares/cares/include/ares.h +925 -460
  189. data/third_party/cares/cares/include/ares_dns.h +86 -71
  190. data/third_party/cares/cares/include/ares_dns_record.h +1118 -0
  191. data/third_party/cares/cares/include/ares_nameser.h +215 -189
  192. data/third_party/cares/cares/include/ares_version.h +37 -14
  193. data/third_party/cares/cares/src/lib/ares_addrinfo2hostent.c +305 -0
  194. data/third_party/cares/cares/src/lib/ares_addrinfo_localhost.c +245 -0
  195. data/third_party/cares/cares/src/lib/ares_android.c +216 -164
  196. data/third_party/cares/cares/src/lib/ares_android.h +25 -14
  197. data/third_party/cares/cares/src/lib/ares_cancel.c +68 -44
  198. data/third_party/cares/cares/src/lib/ares_close_sockets.c +137 -0
  199. data/third_party/cares/cares/src/lib/ares_conn.c +511 -0
  200. data/third_party/cares/cares/src/lib/ares_conn.h +196 -0
  201. data/third_party/cares/cares/src/lib/ares_cookie.c +461 -0
  202. data/third_party/cares/cares/src/lib/ares_data.c +93 -181
  203. data/third_party/cares/cares/src/lib/ares_data.h +50 -39
  204. data/third_party/cares/cares/src/lib/ares_destroy.c +127 -89
  205. data/third_party/cares/cares/src/lib/ares_free_hostent.c +35 -24
  206. data/third_party/cares/cares/src/lib/ares_free_string.c +24 -16
  207. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +45 -38
  208. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +549 -663
  209. data/third_party/cares/cares/src/lib/ares_getenv.c +25 -15
  210. data/third_party/cares/cares/src/lib/ares_getenv.h +26 -18
  211. data/third_party/cares/cares/src/lib/ares_gethostbyaddr.c +163 -221
  212. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +222 -223
  213. data/third_party/cares/cares/src/lib/ares_getnameinfo.c +328 -338
  214. data/third_party/cares/cares/src/lib/ares_hosts_file.c +952 -0
  215. data/third_party/cares/cares/src/lib/ares_inet_net_pton.h +25 -19
  216. data/third_party/cares/cares/src/lib/ares_init.c +425 -2091
  217. data/third_party/cares/cares/src/lib/ares_ipv6.h +63 -33
  218. data/third_party/cares/cares/src/lib/ares_library_init.c +110 -54
  219. data/third_party/cares/cares/src/lib/ares_metrics.c +261 -0
  220. data/third_party/cares/cares/src/lib/ares_options.c +418 -332
  221. data/third_party/cares/cares/src/lib/ares_parse_into_addrinfo.c +179 -0
  222. data/third_party/cares/cares/src/lib/ares_private.h +558 -356
  223. data/third_party/cares/cares/src/lib/ares_process.c +1224 -1369
  224. data/third_party/cares/cares/src/lib/ares_qcache.c +430 -0
  225. data/third_party/cares/cares/src/lib/ares_query.c +126 -121
  226. data/third_party/cares/cares/src/lib/ares_search.c +564 -262
  227. data/third_party/cares/cares/src/lib/ares_send.c +264 -93
  228. data/third_party/cares/cares/src/lib/ares_set_socket_functions.c +588 -0
  229. data/third_party/cares/cares/src/lib/ares_setup.h +115 -111
  230. data/third_party/cares/cares/src/lib/ares_socket.c +425 -0
  231. data/third_party/cares/cares/src/lib/ares_socket.h +163 -0
  232. data/third_party/cares/cares/src/lib/ares_sortaddrinfo.c +447 -0
  233. data/third_party/cares/cares/src/lib/ares_strerror.c +83 -48
  234. data/third_party/cares/cares/src/lib/ares_sysconfig.c +639 -0
  235. data/third_party/cares/cares/src/lib/ares_sysconfig_files.c +839 -0
  236. data/third_party/cares/cares/src/lib/ares_sysconfig_mac.c +373 -0
  237. data/third_party/cares/cares/src/lib/ares_sysconfig_win.c +621 -0
  238. data/third_party/cares/cares/src/lib/ares_timeout.c +136 -73
  239. data/third_party/cares/cares/src/lib/ares_update_servers.c +1362 -0
  240. data/third_party/cares/cares/src/lib/ares_version.c +29 -4
  241. data/third_party/cares/cares/src/lib/config-dos.h +88 -89
  242. data/third_party/cares/cares/src/lib/config-win32.h +122 -77
  243. data/third_party/cares/cares/src/lib/dsa/ares_array.c +394 -0
  244. data/third_party/cares/cares/src/lib/dsa/ares_htable.c +447 -0
  245. data/third_party/cares/cares/src/lib/dsa/ares_htable.h +174 -0
  246. data/third_party/cares/cares/src/lib/dsa/ares_htable_asvp.c +224 -0
  247. data/third_party/cares/cares/src/lib/dsa/ares_htable_dict.c +228 -0
  248. data/third_party/cares/cares/src/lib/dsa/ares_htable_strvp.c +210 -0
  249. data/third_party/cares/cares/src/lib/dsa/ares_htable_szvp.c +188 -0
  250. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpstr.c +186 -0
  251. data/third_party/cares/cares/src/lib/dsa/ares_htable_vpvp.c +194 -0
  252. data/third_party/cares/cares/src/lib/dsa/ares_llist.c +382 -0
  253. data/third_party/cares/cares/src/lib/dsa/ares_slist.c +479 -0
  254. data/third_party/cares/cares/src/lib/dsa/ares_slist.h +207 -0
  255. data/third_party/cares/cares/src/lib/event/ares_event.h +191 -0
  256. data/third_party/cares/cares/src/lib/event/ares_event_configchg.c +743 -0
  257. data/third_party/cares/cares/src/lib/event/ares_event_epoll.c +192 -0
  258. data/third_party/cares/cares/src/lib/event/ares_event_kqueue.c +248 -0
  259. data/third_party/cares/cares/src/lib/event/ares_event_poll.c +140 -0
  260. data/third_party/cares/cares/src/lib/event/ares_event_select.c +159 -0
  261. data/third_party/cares/cares/src/lib/event/ares_event_thread.c +567 -0
  262. data/third_party/cares/cares/src/lib/event/ares_event_wake_pipe.c +166 -0
  263. data/third_party/cares/cares/src/lib/event/ares_event_win32.c +978 -0
  264. data/third_party/cares/cares/src/lib/event/ares_event_win32.h +161 -0
  265. data/third_party/cares/cares/src/lib/include/ares_array.h +276 -0
  266. data/third_party/cares/cares/src/lib/include/ares_buf.h +732 -0
  267. data/third_party/cares/cares/src/lib/include/ares_htable_asvp.h +130 -0
  268. data/third_party/cares/cares/src/lib/include/ares_htable_dict.h +123 -0
  269. data/third_party/cares/cares/src/lib/include/ares_htable_strvp.h +130 -0
  270. data/third_party/cares/cares/src/lib/include/ares_htable_szvp.h +118 -0
  271. data/third_party/cares/cares/src/lib/include/ares_htable_vpstr.h +111 -0
  272. data/third_party/cares/cares/src/lib/include/ares_htable_vpvp.h +128 -0
  273. data/third_party/cares/cares/src/lib/include/ares_llist.h +239 -0
  274. data/third_party/cares/cares/src/lib/include/ares_mem.h +38 -0
  275. data/third_party/cares/cares/src/lib/include/ares_str.h +244 -0
  276. data/third_party/cares/cares/src/lib/inet_net_pton.c +202 -157
  277. data/third_party/cares/cares/src/lib/inet_ntop.c +87 -69
  278. data/third_party/cares/cares/src/lib/legacy/ares_create_query.c +78 -0
  279. data/third_party/cares/cares/src/lib/legacy/ares_expand_name.c +99 -0
  280. data/third_party/cares/cares/src/lib/legacy/ares_expand_string.c +107 -0
  281. data/third_party/cares/cares/src/lib/legacy/ares_fds.c +80 -0
  282. data/third_party/cares/cares/src/lib/legacy/ares_getsock.c +85 -0
  283. data/third_party/cares/cares/src/lib/legacy/ares_parse_a_reply.c +107 -0
  284. data/third_party/cares/cares/src/lib/legacy/ares_parse_aaaa_reply.c +109 -0
  285. data/third_party/cares/cares/src/lib/legacy/ares_parse_caa_reply.c +137 -0
  286. data/third_party/cares/cares/src/lib/legacy/ares_parse_mx_reply.c +110 -0
  287. data/third_party/cares/cares/src/lib/legacy/ares_parse_naptr_reply.c +132 -0
  288. data/third_party/cares/cares/src/lib/legacy/ares_parse_ns_reply.c +154 -0
  289. data/third_party/cares/cares/src/lib/legacy/ares_parse_ptr_reply.c +213 -0
  290. data/third_party/cares/cares/src/lib/legacy/ares_parse_soa_reply.c +115 -0
  291. data/third_party/cares/cares/src/lib/legacy/ares_parse_srv_reply.c +114 -0
  292. data/third_party/cares/cares/src/lib/legacy/ares_parse_txt_reply.c +144 -0
  293. data/third_party/cares/cares/src/lib/legacy/ares_parse_uri_reply.c +113 -0
  294. data/third_party/cares/cares/src/lib/record/ares_dns_mapping.c +982 -0
  295. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.c +307 -0
  296. data/third_party/cares/cares/src/lib/record/ares_dns_multistring.h +72 -0
  297. data/third_party/cares/cares/src/lib/record/ares_dns_name.c +673 -0
  298. data/third_party/cares/cares/src/lib/record/ares_dns_parse.c +1329 -0
  299. data/third_party/cares/cares/src/lib/record/ares_dns_private.h +273 -0
  300. data/third_party/cares/cares/src/lib/record/ares_dns_record.c +1661 -0
  301. data/third_party/cares/cares/src/lib/record/ares_dns_write.c +1229 -0
  302. data/third_party/cares/cares/src/lib/str/ares_buf.c +1498 -0
  303. data/third_party/cares/cares/src/lib/str/ares_str.c +508 -0
  304. data/third_party/cares/cares/src/lib/str/ares_strsplit.c +90 -0
  305. data/third_party/cares/cares/src/lib/str/ares_strsplit.h +51 -0
  306. data/third_party/cares/cares/src/lib/thirdparty/apple/dnsinfo.h +122 -0
  307. data/third_party/cares/cares/src/lib/util/ares_iface_ips.c +628 -0
  308. data/third_party/cares/cares/src/lib/util/ares_iface_ips.h +139 -0
  309. data/third_party/cares/cares/src/lib/util/ares_math.c +158 -0
  310. data/third_party/cares/cares/src/lib/util/ares_math.h +45 -0
  311. data/third_party/cares/cares/src/lib/util/ares_rand.c +389 -0
  312. data/third_party/cares/cares/src/lib/util/ares_rand.h +36 -0
  313. data/third_party/cares/cares/src/lib/util/ares_threads.c +614 -0
  314. data/third_party/cares/cares/src/lib/util/ares_threads.h +60 -0
  315. data/third_party/cares/cares/src/lib/util/ares_time.h +48 -0
  316. data/third_party/cares/cares/src/lib/util/ares_timeval.c +95 -0
  317. data/third_party/cares/cares/src/lib/util/ares_uri.c +1626 -0
  318. data/third_party/cares/cares/src/lib/util/ares_uri.h +252 -0
  319. data/third_party/cares/cares/src/lib/windows_port.c +16 -9
  320. metadata +121 -49
  321. data/src/core/util/ring_buffer.h +0 -122
  322. data/third_party/cares/cares/include/ares_rules.h +0 -125
  323. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +0 -266
  324. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +0 -240
  325. data/third_party/cares/cares/src/lib/ares__close_sockets.c +0 -61
  326. data/third_party/cares/cares/src/lib/ares__get_hostent.c +0 -260
  327. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +0 -229
  328. data/third_party/cares/cares/src/lib/ares__read_line.c +0 -73
  329. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +0 -258
  330. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +0 -507
  331. data/third_party/cares/cares/src/lib/ares__timeval.c +0 -111
  332. data/third_party/cares/cares/src/lib/ares_create_query.c +0 -197
  333. data/third_party/cares/cares/src/lib/ares_expand_name.c +0 -311
  334. data/third_party/cares/cares/src/lib/ares_expand_string.c +0 -67
  335. data/third_party/cares/cares/src/lib/ares_fds.c +0 -59
  336. data/third_party/cares/cares/src/lib/ares_getsock.c +0 -66
  337. data/third_party/cares/cares/src/lib/ares_iphlpapi.h +0 -221
  338. data/third_party/cares/cares/src/lib/ares_llist.c +0 -63
  339. data/third_party/cares/cares/src/lib/ares_llist.h +0 -39
  340. data/third_party/cares/cares/src/lib/ares_mkquery.c +0 -24
  341. data/third_party/cares/cares/src/lib/ares_nowarn.c +0 -260
  342. data/third_party/cares/cares/src/lib/ares_nowarn.h +0 -61
  343. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +0 -90
  344. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +0 -92
  345. data/third_party/cares/cares/src/lib/ares_parse_caa_reply.c +0 -199
  346. data/third_party/cares/cares/src/lib/ares_parse_mx_reply.c +0 -164
  347. data/third_party/cares/cares/src/lib/ares_parse_naptr_reply.c +0 -183
  348. data/third_party/cares/cares/src/lib/ares_parse_ns_reply.c +0 -177
  349. data/third_party/cares/cares/src/lib/ares_parse_ptr_reply.c +0 -228
  350. data/third_party/cares/cares/src/lib/ares_parse_soa_reply.c +0 -179
  351. data/third_party/cares/cares/src/lib/ares_parse_srv_reply.c +0 -168
  352. data/third_party/cares/cares/src/lib/ares_parse_txt_reply.c +0 -214
  353. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +0 -184
  354. data/third_party/cares/cares/src/lib/ares_platform.c +0 -11042
  355. data/third_party/cares/cares/src/lib/ares_platform.h +0 -43
  356. data/third_party/cares/cares/src/lib/ares_rand.c +0 -279
  357. data/third_party/cares/cares/src/lib/ares_strcasecmp.c +0 -66
  358. data/third_party/cares/cares/src/lib/ares_strcasecmp.h +0 -30
  359. data/third_party/cares/cares/src/lib/ares_strdup.c +0 -42
  360. data/third_party/cares/cares/src/lib/ares_strdup.h +0 -24
  361. data/third_party/cares/cares/src/lib/ares_strsplit.c +0 -94
  362. data/third_party/cares/cares/src/lib/ares_strsplit.h +0 -42
  363. data/third_party/cares/cares/src/lib/ares_writev.c +0 -79
  364. data/third_party/cares/cares/src/lib/ares_writev.h +0 -36
  365. data/third_party/cares/cares/src/lib/bitncmp.c +0 -59
  366. data/third_party/cares/cares/src/lib/bitncmp.h +0 -26
  367. data/third_party/cares/cares/src/lib/setup_once.h +0 -554
  368. data/third_party/cares/cares/src/tools/ares_getopt.h +0 -53
@@ -31,6 +31,7 @@
31
31
  #include "absl/log/log.h"
32
32
  #include "absl/status/status.h"
33
33
  #include "absl/strings/string_view.h"
34
+ #include "src/core/credentials/transport/tls/spiffe_utils.h"
34
35
  #include "src/core/credentials/transport/tls/ssl_utils.h"
35
36
  #include "src/core/lib/debug/trace.h"
36
37
  #include "src/core/lib/iomgr/error.h"
@@ -39,26 +40,37 @@
39
40
  #include "src/core/lib/slice/slice_internal.h"
40
41
  #include "src/core/tsi/ssl_transport_security_utils.h"
41
42
  #include "src/core/util/load_file.h"
43
+ #include "src/core/util/match.h"
42
44
  #include "src/core/util/stat.h"
43
45
  #include "src/core/util/status_helper.h"
44
46
 
45
47
  namespace grpc_core {
46
48
  namespace {
47
49
 
48
- absl::Status ValidateRootCertificates(absl::string_view root_certificates) {
49
- if (root_certificates.empty()) return absl::OkStatus();
50
- absl::StatusOr<std::vector<X509*>> parsed_roots =
51
- ParsePemCertificateChain(root_certificates);
52
- if (!parsed_roots.ok()) {
53
- return absl::Status(
54
- parsed_roots.status().code(),
55
- absl::StrCat("Failed to parse root certificates as PEM: ",
56
- parsed_roots.status().message()));
57
- }
58
- for (X509* x509 : *parsed_roots) {
59
- X509_free(x509);
60
- }
61
- return absl::OkStatus();
50
+ absl::Status ValidateRootCertificates(const RootCertInfo* root_cert_info) {
51
+ if (root_cert_info == nullptr) return absl::OkStatus();
52
+ return Match(
53
+ *root_cert_info,
54
+ [&](const std::string& root_certificates) {
55
+ if (root_certificates.empty()) return absl::OkStatus();
56
+ absl::StatusOr<std::vector<X509*>> parsed_roots =
57
+ ParsePemCertificateChain(root_certificates);
58
+ if (!parsed_roots.ok()) {
59
+ return absl::Status(
60
+ parsed_roots.status().code(),
61
+ absl::StrCat("Failed to parse root certificates as PEM: ",
62
+ parsed_roots.status().message()));
63
+ }
64
+ for (X509* x509 : *parsed_roots) {
65
+ X509_free(x509);
66
+ }
67
+ return absl::OkStatus();
68
+ },
69
+ [&](const SpiffeBundleMap&) {
70
+ // SpiffeBundleMap validation is done when it is created - a value here
71
+ // inherently means that it is valid.
72
+ return absl::OkStatus();
73
+ });
62
74
  }
63
75
 
64
76
  absl::Status ValidatePemKeyCertPair(absl::string_view cert_chain,
@@ -88,23 +100,35 @@ absl::Status ValidatePemKeyCertPair(absl::string_view cert_chain,
88
100
  return absl::OkStatus();
89
101
  }
90
102
 
103
+ bool HasRootCertInfoChanged(
104
+ const absl::StatusOr<std::shared_ptr<RootCertInfo>>& old,
105
+ const absl::StatusOr<std::shared_ptr<RootCertInfo>>& updated) {
106
+ if (old.status() != updated.status()) return true; // Status changed.
107
+ if (!old.ok()) return false; // Both have same non-OK status.
108
+ // Both have OK status.
109
+ if (*old == nullptr) return *updated != nullptr;
110
+ if (*updated == nullptr) return true;
111
+ // Both have non-null value.
112
+ return **old != **updated;
113
+ }
114
+
91
115
  } // namespace
92
116
 
93
117
  StaticDataCertificateProvider::StaticDataCertificateProvider(
94
118
  std::string root_certificate, PemKeyCertPairList pem_key_cert_pairs)
95
119
  : distributor_(MakeRefCounted<grpc_tls_certificate_distributor>()),
96
- root_certificate_(std::move(root_certificate)),
120
+ root_cert_info_(std::make_shared<RootCertInfo>(root_certificate)),
97
121
  pem_key_cert_pairs_(std::move(pem_key_cert_pairs)) {
98
122
  distributor_->SetWatchStatusCallback([this](std::string cert_name,
99
123
  bool root_being_watched,
100
124
  bool identity_being_watched) {
101
125
  MutexLock lock(&mu_);
102
- std::optional<std::string> root_certificate;
126
+ std::shared_ptr<RootCertInfo> root_cert_info;
103
127
  std::optional<PemKeyCertPairList> pem_key_cert_pairs;
104
128
  StaticDataCertificateProvider::WatcherInfo& info = watcher_info_[cert_name];
105
129
  if (!info.root_being_watched && root_being_watched &&
106
- !root_certificate_.empty()) {
107
- root_certificate = root_certificate_;
130
+ !IsRootCertInfoEmpty(root_cert_info_.get())) {
131
+ root_cert_info = root_cert_info_;
108
132
  }
109
133
  info.root_being_watched = root_being_watched;
110
134
  if (!info.identity_being_watched && identity_being_watched &&
@@ -115,10 +139,10 @@ StaticDataCertificateProvider::StaticDataCertificateProvider(
115
139
  if (!info.root_being_watched && !info.identity_being_watched) {
116
140
  watcher_info_.erase(cert_name);
117
141
  }
118
- const bool root_has_update = root_certificate.has_value();
142
+ const bool root_has_update = root_cert_info != nullptr;
119
143
  const bool identity_has_update = pem_key_cert_pairs.has_value();
120
144
  if (root_has_update || identity_has_update) {
121
- distributor_->SetKeyMaterials(cert_name, std::move(root_certificate),
145
+ distributor_->SetKeyMaterials(cert_name, std::move(root_cert_info),
122
146
  std::move(pem_key_cert_pairs));
123
147
  }
124
148
  grpc_error_handle root_cert_error;
@@ -150,7 +174,7 @@ UniqueTypeName StaticDataCertificateProvider::type() const {
150
174
  }
151
175
 
152
176
  absl::Status StaticDataCertificateProvider::ValidateCredentials() const {
153
- absl::Status status = ValidateRootCertificates(root_certificate_);
177
+ absl::Status status = ValidateRootCertificates(root_cert_info_.get());
154
178
  if (!status.ok()) {
155
179
  return status;
156
180
  }
@@ -177,10 +201,12 @@ static constexpr int64_t kMinimumFileWatcherRefreshIntervalSeconds = 1;
177
201
 
178
202
  FileWatcherCertificateProvider::FileWatcherCertificateProvider(
179
203
  std::string private_key_path, std::string identity_certificate_path,
180
- std::string root_cert_path, int64_t refresh_interval_sec)
204
+ std::string root_cert_path, std::string spiffe_bundle_map_path,
205
+ int64_t refresh_interval_sec)
181
206
  : private_key_path_(std::move(private_key_path)),
182
207
  identity_certificate_path_(std::move(identity_certificate_path)),
183
208
  root_cert_path_(std::move(root_cert_path)),
209
+ spiffe_bundle_map_path_(std::move(spiffe_bundle_map_path)),
184
210
  refresh_interval_sec_(refresh_interval_sec),
185
211
  distributor_(MakeRefCounted<grpc_tls_certificate_distributor>()) {
186
212
  if (refresh_interval_sec_ < kMinimumFileWatcherRefreshIntervalSeconds) {
@@ -192,7 +218,9 @@ FileWatcherCertificateProvider::FileWatcherCertificateProvider(
192
218
  // Private key and identity cert files must be both set or both unset.
193
219
  CHECK(private_key_path_.empty() == identity_certificate_path_.empty());
194
220
  // Must be watching either root or identity certs.
195
- CHECK(!private_key_path_.empty() || !root_cert_path_.empty());
221
+ bool watching_root =
222
+ !root_cert_path_.empty() || !spiffe_bundle_map_path_.empty();
223
+ CHECK(!private_key_path_.empty() || watching_root);
196
224
  gpr_event_init(&shutdown_event_);
197
225
  ForceUpdate();
198
226
  auto thread_lambda = [](void* arg) {
@@ -216,13 +244,13 @@ FileWatcherCertificateProvider::FileWatcherCertificateProvider(
216
244
  bool root_being_watched,
217
245
  bool identity_being_watched) {
218
246
  MutexLock lock(&mu_);
219
- std::optional<std::string> root_certificate;
247
+ absl::StatusOr<std::shared_ptr<RootCertInfo>> roots = nullptr;
220
248
  std::optional<PemKeyCertPairList> pem_key_cert_pairs;
221
249
  FileWatcherCertificateProvider::WatcherInfo& info =
222
250
  watcher_info_[cert_name];
223
251
  if (!info.root_being_watched && root_being_watched &&
224
- !root_certificate_.empty()) {
225
- root_certificate = root_certificate_;
252
+ root_cert_info_.ok() && *root_cert_info_ != nullptr) {
253
+ roots = root_cert_info_;
226
254
  }
227
255
  info.root_being_watched = root_being_watched;
228
256
  if (!info.identity_being_watched && identity_being_watched &&
@@ -234,13 +262,13 @@ FileWatcherCertificateProvider::FileWatcherCertificateProvider(
234
262
  watcher_info_.erase(cert_name);
235
263
  }
236
264
  ExecCtx exec_ctx;
237
- if (root_certificate.has_value() || pem_key_cert_pairs.has_value()) {
238
- distributor_->SetKeyMaterials(cert_name, root_certificate,
265
+ if ((roots.ok() && *roots != nullptr) || pem_key_cert_pairs.has_value()) {
266
+ distributor_->SetKeyMaterials(cert_name, roots.ok() ? *roots : nullptr,
239
267
  pem_key_cert_pairs);
240
268
  }
241
269
  grpc_error_handle root_cert_error;
242
270
  grpc_error_handle identity_cert_error;
243
- if (root_being_watched && !root_certificate.has_value()) {
271
+ if (root_being_watched && (!roots.ok() || *roots == nullptr)) {
244
272
  root_cert_error =
245
273
  GRPC_ERROR_CREATE("Unable to get latest root certificates.");
246
274
  }
@@ -270,7 +298,10 @@ UniqueTypeName FileWatcherCertificateProvider::type() const {
270
298
 
271
299
  absl::Status FileWatcherCertificateProvider::ValidateCredentials() const {
272
300
  MutexLock lock(&mu_);
273
- absl::Status status = ValidateRootCertificates(root_certificate_);
301
+ if (!root_cert_info_.ok()) {
302
+ return root_cert_info_.status();
303
+ }
304
+ absl::Status status = ValidateRootCertificates(root_cert_info_->get());
274
305
  if (!status.ok()) {
275
306
  return status;
276
307
  }
@@ -285,25 +316,34 @@ absl::Status FileWatcherCertificateProvider::ValidateCredentials() const {
285
316
  }
286
317
 
287
318
  void FileWatcherCertificateProvider::ForceUpdate() {
288
- std::optional<std::string> root_certificate;
319
+ absl::StatusOr<std::shared_ptr<RootCertInfo>> root_cert_info = nullptr;
289
320
  std::optional<PemKeyCertPairList> pem_key_cert_pairs;
290
- if (!root_cert_path_.empty()) {
291
- root_certificate = ReadRootCertificatesFromFile(root_cert_path_);
321
+ if (!spiffe_bundle_map_path_.empty()) {
322
+ auto map = SpiffeBundleMap::FromFile(spiffe_bundle_map_path_);
323
+ if (map.ok()) {
324
+ root_cert_info = std::make_shared<RootCertInfo>(std::move(*map));
325
+ } else {
326
+ root_cert_info = absl::InvalidArgumentError(
327
+ absl::StrFormat("spiffe bundle map file %s failed to load: %s",
328
+ spiffe_bundle_map_path_, map.status().ToString()));
329
+ }
330
+ } else if (!root_cert_path_.empty()) {
331
+ std::optional<std::string> root_certificate =
332
+ ReadRootCertificatesFromFile(root_cert_path_);
333
+ if (root_certificate.has_value()) {
334
+ root_cert_info =
335
+ std::make_shared<RootCertInfo>(std::move(*root_certificate));
336
+ }
292
337
  }
293
338
  if (!private_key_path_.empty()) {
294
339
  pem_key_cert_pairs = ReadIdentityKeyCertPairFromFiles(
295
340
  private_key_path_, identity_certificate_path_);
296
341
  }
297
342
  MutexLock lock(&mu_);
298
- const bool root_cert_changed =
299
- (!root_certificate.has_value() && !root_certificate_.empty()) ||
300
- (root_certificate.has_value() && root_certificate_ != *root_certificate);
301
- if (root_cert_changed) {
302
- if (root_certificate.has_value()) {
303
- root_certificate_ = std::move(*root_certificate);
304
- } else {
305
- root_certificate_ = "";
306
- }
343
+ const bool root_changed =
344
+ HasRootCertInfoChanged(root_cert_info_, root_cert_info);
345
+ if (root_changed) {
346
+ root_cert_info_ = std::move(root_cert_info);
307
347
  }
308
348
  const bool identity_cert_changed =
309
349
  (!pem_key_cert_pairs.has_value() && !pem_key_cert_pairs_.empty()) ||
@@ -316,7 +356,7 @@ void FileWatcherCertificateProvider::ForceUpdate() {
316
356
  pem_key_cert_pairs_ = {};
317
357
  }
318
358
  }
319
- if (root_cert_changed || identity_cert_changed) {
359
+ if (root_changed || identity_cert_changed) {
320
360
  ExecCtx exec_ctx;
321
361
  grpc_error_handle root_cert_error =
322
362
  GRPC_ERROR_CREATE("Unable to get latest root certificates.");
@@ -325,24 +365,24 @@ void FileWatcherCertificateProvider::ForceUpdate() {
325
365
  for (const auto& p : watcher_info_) {
326
366
  const std::string& cert_name = p.first;
327
367
  const WatcherInfo& info = p.second;
328
- std::optional<std::string> root_to_report;
368
+ std::shared_ptr<RootCertInfo> root_to_report;
329
369
  std::optional<PemKeyCertPairList> identity_to_report;
330
370
  // Set key materials to the distributor if their contents changed.
331
- if (info.root_being_watched && !root_certificate_.empty() &&
332
- root_cert_changed) {
333
- root_to_report = root_certificate_;
371
+ if (info.root_being_watched && root_changed) {
372
+ root_to_report = root_cert_info_.ok() ? *root_cert_info_ : nullptr;
334
373
  }
335
374
  if (info.identity_being_watched && !pem_key_cert_pairs_.empty() &&
336
375
  identity_cert_changed) {
337
376
  identity_to_report = pem_key_cert_pairs_;
338
377
  }
339
- if (root_to_report.has_value() || identity_to_report.has_value()) {
378
+ if (root_to_report != nullptr || identity_to_report.has_value()) {
340
379
  distributor_->SetKeyMaterials(cert_name, std::move(root_to_report),
341
380
  std::move(identity_to_report));
342
381
  }
343
382
  // Report errors to the distributor if the contents are empty.
344
383
  const bool report_root_error =
345
- info.root_being_watched && root_certificate_.empty();
384
+ info.root_being_watched &&
385
+ (!root_cert_info_.ok() || *root_cert_info_ == nullptr);
346
386
  const bool report_identity_error =
347
387
  info.identity_being_watched && pem_key_cert_pairs_.empty();
348
388
  if (report_root_error || report_identity_error) {
@@ -369,9 +409,8 @@ FileWatcherCertificateProvider::ReadRootCertificatesFromFile(
369
409
  }
370
410
 
371
411
  namespace {
372
-
373
- // This helper function gets the last-modified time of |filename|. When failed,
374
- // it logs the error and returns 0.
412
+ // This helper function gets the last-modified time of |filename|. When
413
+ // failed, it logs the error and returns 0.
375
414
  time_t GetModificationTime(const char* filename) {
376
415
  time_t ts = 0;
377
416
  (void)GetFileModificationTime(filename, &ts);
@@ -473,12 +512,15 @@ grpc_tls_certificate_provider* grpc_tls_certificate_provider_static_data_create(
473
512
  grpc_tls_certificate_provider*
474
513
  grpc_tls_certificate_provider_file_watcher_create(
475
514
  const char* private_key_path, const char* identity_certificate_path,
476
- const char* root_cert_path, unsigned int refresh_interval_sec) {
515
+ const char* root_cert_path, const char* spiffe_bundle_map_path,
516
+ unsigned int refresh_interval_sec) {
477
517
  grpc_core::ExecCtx exec_ctx;
478
518
  return new grpc_core::FileWatcherCertificateProvider(
479
519
  private_key_path == nullptr ? "" : private_key_path,
480
520
  identity_certificate_path == nullptr ? "" : identity_certificate_path,
481
- root_cert_path == nullptr ? "" : root_cert_path, refresh_interval_sec);
521
+ root_cert_path == nullptr ? "" : root_cert_path,
522
+ spiffe_bundle_map_path == nullptr ? "" : spiffe_bundle_map_path,
523
+ refresh_interval_sec);
482
524
  }
483
525
 
484
526
  void grpc_tls_certificate_provider_release(
@@ -31,6 +31,7 @@
31
31
  #include "absl/status/statusor.h"
32
32
  #include "absl/strings/string_view.h"
33
33
  #include "src/core/credentials/transport/tls/grpc_tls_certificate_distributor.h"
34
+ #include "src/core/credentials/transport/tls/spiffe_utils.h"
34
35
  #include "src/core/credentials/transport/tls/ssl_utils.h"
35
36
  #include "src/core/util/ref_counted.h"
36
37
  #include "src/core/util/ref_counted_ptr.h"
@@ -121,7 +122,7 @@ class StaticDataCertificateProvider final
121
122
  }
122
123
 
123
124
  RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
124
- std::string root_certificate_;
125
+ std::shared_ptr<RootCertInfo> root_cert_info_;
125
126
  PemKeyCertPairList pem_key_cert_pairs_;
126
127
  // Guards members below.
127
128
  Mutex mu_;
@@ -137,6 +138,7 @@ class FileWatcherCertificateProvider final
137
138
  FileWatcherCertificateProvider(std::string private_key_path,
138
139
  std::string identity_certificate_path,
139
140
  std::string root_cert_path,
141
+ std::string spiffe_bundle_map_path,
140
142
  int64_t refresh_interval_sec);
141
143
 
142
144
  ~FileWatcherCertificateProvider() override;
@@ -178,6 +180,7 @@ class FileWatcherCertificateProvider final
178
180
  std::string private_key_path_;
179
181
  std::string identity_certificate_path_;
180
182
  std::string root_cert_path_;
183
+ std::string spiffe_bundle_map_path_;
181
184
  int64_t refresh_interval_sec_ = 0;
182
185
 
183
186
  RefCountedPtr<grpc_tls_certificate_distributor> distributor_;
@@ -188,8 +191,18 @@ class FileWatcherCertificateProvider final
188
191
  mutable Mutex mu_;
189
192
  // The most-recent credential data. It will be empty if the most recent read
190
193
  // attempt failed.
191
- std::string root_certificate_ ABSL_GUARDED_BY(mu_);
192
194
  PemKeyCertPairList pem_key_cert_pairs_ ABSL_GUARDED_BY(mu_);
195
+ // The most-recent root data.
196
+ // - If unset, the status will be OK and the value will be nullptr
197
+ // - If a SPIFFE Bundle Map is configured and fails to read, the status will
198
+ // be not-Ok
199
+ // - If a string root cert is configured and fails to read, the status will be
200
+ // OK with a nullptr
201
+ // - Otherwise, holds either a SpiffeBundleMap or a string root cert
202
+ // TODO(gtcooke94) - refactor the handling for string root cert files such
203
+ // that their failure is a non-ok status rather than a nullptr
204
+ absl::StatusOr<std::shared_ptr<RootCertInfo>> root_cert_info_
205
+ ABSL_GUARDED_BY(mu_) = nullptr;
193
206
  // Stores each cert_name we get from the distributor callback and its watcher
194
207
  // information.
195
208
  std::map<std::string, WatcherInfo> watcher_info_ ABSL_GUARDED_BY(mu_);