grpc 1.55.0 → 1.56.0

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

Potentially problematic release.


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

Files changed (374) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -68
  3. data/include/grpc/event_engine/event_engine.h +4 -3
  4. data/include/grpc/grpc_audit_logging.h +96 -0
  5. data/include/grpc/module.modulemap +2 -0
  6. data/include/grpc/support/json.h +218 -0
  7. data/src/core/ext/filters/backend_metrics/backend_metric_filter.cc +5 -0
  8. data/src/core/ext/filters/client_channel/backend_metric.cc +2 -0
  9. data/src/core/ext/filters/client_channel/channel_connectivity.cc +4 -4
  10. data/src/core/ext/filters/client_channel/client_channel.cc +86 -104
  11. data/src/core/ext/filters/client_channel/client_channel.h +6 -0
  12. data/src/core/ext/filters/client_channel/client_channel_channelz.cc +19 -18
  13. data/src/core/ext/filters/client_channel/client_channel_internal.h +16 -21
  14. data/src/core/ext/filters/client_channel/config_selector.h +9 -24
  15. data/src/core/ext/filters/client_channel/lb_policy/backend_metric_data.h +3 -0
  16. data/src/core/ext/filters/client_channel/lb_policy/grpclb/grpclb.cc +5 -4
  17. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.cc +455 -0
  18. data/src/core/ext/filters/client_channel/lb_policy/health_check_client.h +54 -0
  19. data/src/core/ext/filters/client_channel/lb_policy/health_check_client_internal.h +186 -0
  20. data/src/core/ext/filters/client_channel/lb_policy/oob_backend_metric.cc +2 -7
  21. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.cc +52 -20
  22. data/src/core/ext/filters/client_channel/lb_policy/outlier_detection/outlier_detection.h +23 -2
  23. data/src/core/ext/filters/client_channel/lb_policy/pick_first/pick_first.cc +19 -6
  24. data/src/core/ext/filters/client_channel/lb_policy/priority/priority.cc +1 -9
  25. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.cc +16 -7
  26. data/src/core/ext/filters/client_channel/lb_policy/ring_hash/ring_hash.h +18 -1
  27. data/src/core/ext/filters/client_channel/lb_policy/rls/rls.cc +12 -9
  28. data/src/core/ext/filters/client_channel/lb_policy/round_robin/round_robin.cc +6 -4
  29. data/src/core/ext/filters/client_channel/lb_policy/subchannel_list.h +36 -13
  30. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/static_stride_scheduler.cc +76 -6
  31. data/src/core/ext/filters/client_channel/lb_policy/weighted_round_robin/weighted_round_robin.cc +32 -39
  32. data/src/core/ext/filters/client_channel/lb_policy/weighted_target/weighted_target.cc +4 -10
  33. data/src/core/ext/filters/client_channel/lb_policy/xds/cds.cc +52 -47
  34. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_impl.cc +1 -9
  35. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_manager.cc +14 -16
  36. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_cluster_resolver.cc +40 -43
  37. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_override_host.cc +7 -12
  38. data/src/core/ext/filters/client_channel/lb_policy/xds/xds_wrr_locality.cc +12 -19
  39. data/src/core/ext/filters/client_channel/resolver/dns/c_ares/grpc_ares_wrapper.cc +35 -33
  40. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/event_engine_client_channel_resolver.cc +29 -4
  41. data/src/core/ext/filters/client_channel/resolver/dns/event_engine/service_config_helper.cc +1 -1
  42. data/src/core/ext/filters/client_channel/resolver/google_c2p/google_c2p_resolver.cc +28 -27
  43. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.cc +163 -46
  44. data/src/core/ext/filters/client_channel/resolver/xds/xds_resolver.h +16 -1
  45. data/src/core/ext/filters/client_channel/retry_service_config.cc +1 -0
  46. data/src/core/ext/filters/client_channel/service_config_channel_arg_filter.cc +10 -40
  47. data/src/core/ext/filters/client_channel/subchannel.cc +10 -196
  48. data/src/core/ext/filters/client_channel/subchannel.h +3 -43
  49. data/src/core/ext/filters/http/message_compress/compression_filter.cc +5 -5
  50. data/src/core/ext/filters/rbac/rbac_service_config_parser.cc +100 -6
  51. data/src/core/ext/filters/server_config_selector/server_config_selector_filter.cc +6 -8
  52. data/src/core/ext/filters/stateful_session/stateful_session_filter.cc +3 -3
  53. data/src/core/ext/filters/stateful_session/stateful_session_filter.h +16 -1
  54. data/src/core/ext/transport/chttp2/transport/flow_control.cc +46 -95
  55. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  56. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  57. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  58. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  59. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  60. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  61. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  62. data/src/core/ext/xds/xds_api.cc +9 -6
  63. data/src/core/ext/xds/xds_api.h +3 -2
  64. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  65. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  66. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  67. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  68. data/src/core/ext/xds/xds_client.cc +5 -4
  69. data/src/core/ext/xds/xds_client_stats.h +1 -1
  70. data/src/core/ext/xds/xds_cluster.cc +20 -19
  71. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  72. data/src/core/ext/xds/xds_common_types.cc +3 -1
  73. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  74. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  75. data/src/core/ext/xds/xds_http_filters.h +4 -2
  76. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  77. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  78. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  79. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  80. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  81. data/src/core/ext/xds/xds_listener.cc +1 -0
  82. data/src/core/ext/xds/xds_route_config.cc +40 -3
  83. data/src/core/ext/xds/xds_routing.cc +2 -2
  84. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  85. data/src/core/lib/avl/avl.h +5 -0
  86. data/src/core/lib/channel/channel_args.cc +80 -22
  87. data/src/core/lib/channel/channel_args.h +34 -1
  88. data/src/core/lib/channel/channel_trace.cc +16 -12
  89. data/src/core/lib/channel/channelz.cc +159 -132
  90. data/src/core/lib/channel/channelz.h +42 -35
  91. data/src/core/lib/channel/channelz_registry.cc +23 -20
  92. data/src/core/lib/channel/connected_channel.cc +17 -6
  93. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  94. data/src/core/lib/channel/promise_based_filter.h +2 -0
  95. data/src/core/lib/compression/compression_internal.cc +2 -5
  96. data/src/core/lib/config/config_vars.cc +20 -18
  97. data/src/core/lib/config/config_vars.h +4 -4
  98. data/src/core/lib/config/load_config.cc +13 -0
  99. data/src/core/lib/config/load_config.h +6 -0
  100. data/src/core/lib/debug/event_log.h +1 -1
  101. data/src/core/lib/debug/stats_data.h +1 -1
  102. data/src/core/lib/debug/trace.cc +24 -55
  103. data/src/core/lib/debug/trace.h +3 -1
  104. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  105. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  106. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  107. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  108. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  109. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  110. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  111. data/src/core/lib/event_engine/poller.h +2 -2
  112. data/src/core/lib/event_engine/posix.h +4 -0
  113. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  114. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  115. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  116. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +33 -19
  117. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -1
  118. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -4
  119. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -8
  120. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  121. data/src/core/lib/event_engine/shim.cc +7 -1
  122. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  123. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  124. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  125. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  126. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  127. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  128. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  129. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  130. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  131. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  132. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  133. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  134. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  135. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  136. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  137. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  138. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  139. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  140. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  141. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  142. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  143. data/src/core/lib/experiments/config.cc +38 -7
  144. data/src/core/lib/experiments/config.h +16 -0
  145. data/src/core/lib/experiments/experiments.cc +67 -20
  146. data/src/core/lib/experiments/experiments.h +27 -21
  147. data/src/core/lib/gpr/log_internal.h +55 -0
  148. data/src/core/lib/gprpp/crash.cc +10 -0
  149. data/src/core/lib/gprpp/crash.h +3 -0
  150. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  151. data/src/core/lib/gprpp/per_cpu.h +29 -6
  152. data/src/core/lib/gprpp/time.cc +1 -0
  153. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  154. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  155. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  156. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  157. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  158. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  159. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  160. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  161. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  162. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  163. data/src/core/lib/iomgr/socket_windows.h +9 -2
  164. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  165. data/src/core/lib/iomgr/tcp_server_posix.cc +148 -107
  166. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -1
  167. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  168. data/src/core/lib/json/json.h +2 -166
  169. data/src/core/lib/json/json_object_loader.cc +8 -9
  170. data/src/core/lib/json/json_object_loader.h +25 -18
  171. data/src/core/lib/json/json_reader.cc +13 -6
  172. data/src/core/lib/json/json_util.cc +6 -11
  173. data/src/core/lib/json/json_writer.cc +7 -8
  174. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  175. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  176. data/src/core/lib/matchers/matchers.cc +3 -4
  177. data/src/core/lib/matchers/matchers.h +2 -1
  178. data/src/core/lib/promise/activity.cc +5 -0
  179. data/src/core/lib/promise/activity.h +10 -0
  180. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  181. data/src/core/lib/promise/party.cc +31 -13
  182. data/src/core/lib/promise/party.h +11 -2
  183. data/src/core/lib/promise/pipe.h +9 -2
  184. data/src/core/lib/promise/prioritized_race.h +95 -0
  185. data/src/core/lib/promise/sleep.cc +2 -1
  186. data/src/core/lib/resolver/server_address.cc +0 -8
  187. data/src/core/lib/resolver/server_address.h +0 -6
  188. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  189. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  190. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  191. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  192. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  193. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  194. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  195. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  196. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  197. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  198. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  199. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  200. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  201. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  202. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  203. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  204. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  205. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  206. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  207. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  208. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  209. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  210. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  211. data/src/core/lib/security/util/json_util.cc +1 -0
  212. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  213. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  214. data/src/core/lib/surface/call.cc +38 -23
  215. data/src/core/lib/surface/completion_queue.cc +6 -2
  216. data/src/core/lib/surface/version.cc +2 -2
  217. data/src/core/lib/transport/batch_builder.cc +15 -12
  218. data/src/core/lib/transport/batch_builder.h +39 -35
  219. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  220. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  221. data/src/ruby/ext/grpc/extconf.rb +8 -9
  222. data/src/ruby/lib/grpc/version.rb +1 -1
  223. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  224. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  225. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  226. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  227. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  228. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  229. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  230. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  231. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  232. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  233. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  234. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  235. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  236. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  237. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  238. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  239. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  240. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  241. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  242. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  243. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  244. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  245. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  246. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  248. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  249. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  250. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  251. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  252. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  253. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  254. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  271. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  278. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  279. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  280. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  281. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  282. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  283. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  284. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  288. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  289. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  290. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  291. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  292. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  293. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  294. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  295. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  296. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  297. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  298. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  299. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  300. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  301. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  302. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  303. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  304. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  305. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  306. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  307. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  309. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  310. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  311. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  312. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  313. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  314. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  315. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  316. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  317. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  318. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  319. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  320. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  321. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  322. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  323. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  324. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  325. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  326. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  327. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  328. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  329. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  330. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  331. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  332. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  333. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  334. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  335. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  336. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  337. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  338. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  339. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  340. data/third_party/cares/cares/include/ares.h +23 -1
  341. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  342. data/third_party/cares/cares/include/ares_rules.h +2 -2
  343. data/third_party/cares/cares/include/ares_version.h +3 -3
  344. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  345. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  346. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  347. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  348. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  349. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  350. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  351. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  352. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  353. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  354. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  355. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  356. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  357. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  358. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  359. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  360. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  361. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  362. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  363. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  364. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  365. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  366. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  367. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  368. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  369. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  370. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  371. metadata +48 -12
  372. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  373. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  374. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -26,18 +26,27 @@
26
26
 
27
27
  #include "absl/types/optional.h"
28
28
 
29
+ #include <grpc/grpc_audit_logging.h>
30
+
29
31
  #include "src/core/lib/matchers/matchers.h"
30
32
 
31
33
  namespace grpc_core {
32
34
 
33
35
  // Represents Envoy RBAC Proto. [See
34
- // https://github.com/envoyproxy/envoy/blob/release/v1.17/api/envoy/config/rbac/v3/rbac.proto]
36
+ // https://github.com/envoyproxy/envoy/blob/release/v1.26/api/envoy/config/rbac/v3/rbac.proto]
35
37
  struct Rbac {
36
38
  enum class Action {
37
39
  kAllow,
38
40
  kDeny,
39
41
  };
40
42
 
43
+ enum class AuditCondition {
44
+ kNone,
45
+ kOnDeny,
46
+ kOnAllow,
47
+ kOnDenyAndAllow,
48
+ };
49
+
41
50
  struct CidrRange {
42
51
  CidrRange() = default;
43
52
  CidrRange(std::string address_prefix, uint32_t prefix_len);
@@ -162,15 +171,23 @@ struct Rbac {
162
171
  };
163
172
 
164
173
  Rbac() = default;
165
- Rbac(Rbac::Action action, std::map<std::string, Policy> policies);
174
+ Rbac(std::string name, Rbac::Action action,
175
+ std::map<std::string, Policy> policies);
166
176
 
167
177
  Rbac(Rbac&& other) noexcept;
168
178
  Rbac& operator=(Rbac&& other) noexcept;
169
179
 
170
180
  std::string ToString() const;
171
181
 
182
+ // The authorization policy name or the HTTP RBAC filter name.
183
+ std::string name;
184
+
172
185
  Action action;
173
186
  std::map<std::string, Policy> policies;
187
+
188
+ AuditCondition audit_condition;
189
+ std::vector<std::unique_ptr<experimental::AuditLoggerFactory::Config>>
190
+ logger_configs;
174
191
  };
175
192
 
176
193
  } // namespace grpc_core
@@ -0,0 +1,75 @@
1
+ // Copyright 2023 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #include <grpc/support/port_platform.h>
16
+
17
+ #include "src/core/lib/security/authorization/stdout_logger.h"
18
+
19
+ #include <cstdio>
20
+ #include <initializer_list>
21
+ #include <memory>
22
+ #include <string>
23
+
24
+ #include "absl/status/statusor.h"
25
+ #include "absl/strings/str_format.h"
26
+ #include "absl/strings/string_view.h"
27
+ #include "absl/time/clock.h"
28
+ #include "absl/time/time.h"
29
+
30
+ #include <grpc/grpc_audit_logging.h>
31
+ #include <grpc/support/json.h>
32
+ #include <grpc/support/log.h>
33
+
34
+ namespace grpc_core {
35
+ namespace experimental {
36
+
37
+ namespace {
38
+
39
+ constexpr absl::string_view kName = "stdout_logger";
40
+ constexpr char kLogFormat[] =
41
+ "{\"grpc_audit_log\":{\"timestamp\":\"%s\",\"rpc_method\":\"%s\","
42
+ "\"principal\":\"%s\",\"policy_name\":\"%s\",\"matched_rule\":\"%s\","
43
+ "\"authorized\":%s}}\n";
44
+
45
+ } // namespace
46
+
47
+ void StdoutAuditLogger::Log(const AuditContext& context) {
48
+ absl::FPrintF(stdout, kLogFormat, absl::FormatTime(absl::Now()),
49
+ context.rpc_method(), context.principal(),
50
+ context.policy_name(), context.matched_rule(),
51
+ context.authorized() ? "true" : "false");
52
+ }
53
+
54
+ absl::string_view StdoutAuditLoggerFactory::Config::name() const {
55
+ return kName;
56
+ }
57
+
58
+ std::string StdoutAuditLoggerFactory::Config::ToString() const { return "{}"; }
59
+
60
+ absl::string_view StdoutAuditLoggerFactory::name() const { return kName; }
61
+
62
+ absl::StatusOr<std::unique_ptr<AuditLoggerFactory::Config>>
63
+ StdoutAuditLoggerFactory::ParseAuditLoggerConfig(const Json&) {
64
+ return std::make_unique<StdoutAuditLoggerFactory::Config>();
65
+ }
66
+
67
+ std::unique_ptr<AuditLogger> StdoutAuditLoggerFactory::CreateAuditLogger(
68
+ std::unique_ptr<AuditLoggerFactory::Config> config) {
69
+ // Sanity check.
70
+ GPR_ASSERT(config != nullptr && config->name() == name());
71
+ return std::make_unique<StdoutAuditLogger>();
72
+ }
73
+
74
+ } // namespace experimental
75
+ } // namespace grpc_core
@@ -0,0 +1,61 @@
1
+ // Copyright 2023 gRPC authors.
2
+ //
3
+ // Licensed under the Apache License, Version 2.0 (the "License");
4
+ // you may not use this file except in compliance with the License.
5
+ // You may obtain a copy of the License at
6
+ //
7
+ // http://www.apache.org/licenses/LICENSE-2.0
8
+ //
9
+ // Unless required by applicable law or agreed to in writing, software
10
+ // distributed under the License is distributed on an "AS IS" BASIS,
11
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ // See the License for the specific language governing permissions and
13
+ // limitations under the License.
14
+
15
+ #ifndef GRPC_SRC_CORE_LIB_SECURITY_AUTHORIZATION_STDOUT_LOGGER_H
16
+ #define GRPC_SRC_CORE_LIB_SECURITY_AUTHORIZATION_STDOUT_LOGGER_H
17
+
18
+ #include <grpc/support/port_platform.h>
19
+
20
+ #include <memory>
21
+ #include <string>
22
+
23
+ #include "absl/status/statusor.h"
24
+ #include "absl/strings/string_view.h"
25
+
26
+ #include <grpc/grpc_audit_logging.h>
27
+ #include <grpc/support/json.h>
28
+
29
+ namespace grpc_core {
30
+ namespace experimental {
31
+
32
+ class StdoutAuditLogger : public AuditLogger {
33
+ public:
34
+ StdoutAuditLogger() = default;
35
+ absl::string_view name() const override { return "stdout_logger"; }
36
+ void Log(const AuditContext&) override;
37
+ };
38
+
39
+ class StdoutAuditLoggerFactory : public AuditLoggerFactory {
40
+ public:
41
+ class Config : public AuditLoggerFactory::Config {
42
+ public:
43
+ Config() = default;
44
+ absl::string_view name() const override;
45
+ std::string ToString() const override;
46
+ };
47
+ StdoutAuditLoggerFactory() = default;
48
+
49
+ absl::string_view name() const override;
50
+
51
+ absl::StatusOr<std::unique_ptr<AuditLoggerFactory::Config>>
52
+ ParseAuditLoggerConfig(const Json& json) override;
53
+
54
+ std::unique_ptr<AuditLogger> CreateAuditLogger(
55
+ std::unique_ptr<AuditLoggerFactory::Config>) override;
56
+ };
57
+
58
+ } // namespace experimental
59
+ } // namespace grpc_core
60
+
61
+ #endif // GRPC_SRC_CORE_LIB_SECURITY_AUTHORIZATION_STDOUT_LOGGER_H
@@ -23,12 +23,15 @@
23
23
 
24
24
  #include <string>
25
25
 
26
+ #include "absl/strings/string_view.h"
27
+
26
28
  #include <grpc/grpc_security.h>
27
29
 
28
30
  #include "src/core/lib/gprpp/ref_counted.h"
29
31
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
30
- #include "src/core/lib/iomgr/error.h"
32
+ #include "src/core/lib/gprpp/validation_errors.h"
31
33
  #include "src/core/lib/json/json.h"
34
+ #include "src/core/lib/json/json_args.h"
32
35
 
33
36
  namespace grpc_core {
34
37
 
@@ -43,7 +46,7 @@ class CertificateProviderFactory {
43
46
 
44
47
  // Name of the type of the CertificateProvider. Unique to each type of
45
48
  // config.
46
- virtual const char* name() const = 0;
49
+ virtual absl::string_view name() const = 0;
47
50
 
48
51
  virtual std::string ToString() const = 0;
49
52
  };
@@ -51,10 +54,11 @@ class CertificateProviderFactory {
51
54
  virtual ~CertificateProviderFactory() = default;
52
55
 
53
56
  // Name of the plugin.
54
- virtual const char* name() const = 0;
57
+ virtual absl::string_view name() const = 0;
55
58
 
56
59
  virtual RefCountedPtr<Config> CreateCertificateProviderConfig(
57
- const Json& config_json, grpc_error_handle* error) = 0;
60
+ const Json& config_json, const JsonArgs& args,
61
+ ValidationErrors* errors) = 0;
58
62
 
59
63
  // Create a CertificateProvider instance from config.
60
64
  virtual RefCountedPtr<grpc_tls_certificate_provider>
@@ -20,11 +20,8 @@
20
20
 
21
21
  #include "src/core/lib/security/certificate_provider/certificate_provider_registry.h"
22
22
 
23
- #include <string.h>
24
-
25
- #include <algorithm>
23
+ #include <string>
26
24
  #include <utility>
27
- #include <vector>
28
25
 
29
26
  #include <grpc/support/log.h>
30
27
 
@@ -32,29 +29,22 @@ namespace grpc_core {
32
29
 
33
30
  void CertificateProviderRegistry::Builder::RegisterCertificateProviderFactory(
34
31
  std::unique_ptr<CertificateProviderFactory> factory) {
32
+ absl::string_view name = factory->name();
35
33
  gpr_log(GPR_DEBUG, "registering certificate provider factory for \"%s\"",
36
- factory->name());
37
- for (size_t i = 0; i < factories_.size(); ++i) {
38
- GPR_ASSERT(strcmp(factories_[i]->name(), factory->name()) != 0);
39
- }
40
- factories_.push_back(std::move(factory));
34
+ std::string(name).c_str());
35
+ GPR_ASSERT(factories_.emplace(name, std::move(factory)).second);
41
36
  }
42
37
 
43
38
  CertificateProviderRegistry CertificateProviderRegistry::Builder::Build() {
44
- CertificateProviderRegistry r;
45
- r.factories_ = std::move(factories_);
46
- return r;
39
+ return CertificateProviderRegistry(std::move(factories_));
47
40
  }
48
41
 
49
42
  CertificateProviderFactory*
50
43
  CertificateProviderRegistry::LookupCertificateProviderFactory(
51
44
  absl::string_view name) const {
52
- for (size_t i = 0; i < factories_.size(); ++i) {
53
- if (name == factories_[i]->name()) {
54
- return factories_[i].get();
55
- }
56
- }
57
- return nullptr;
45
+ auto it = factories_.find(name);
46
+ if (it == factories_.end()) return nullptr;
47
+ return it->second.get();
58
48
  }
59
49
 
60
50
  } // namespace grpc_core
@@ -21,8 +21,9 @@
21
21
 
22
22
  #include <grpc/support/port_platform.h>
23
23
 
24
+ #include <map>
24
25
  #include <memory>
25
- #include <vector>
26
+ #include <utility>
26
27
 
27
28
  #include "absl/strings/string_view.h"
28
29
 
@@ -32,20 +33,24 @@ namespace grpc_core {
32
33
 
33
34
  // Global registry for all the certificate provider plugins.
34
35
  class CertificateProviderRegistry {
36
+ private:
37
+ using FactoryMap =
38
+ std::map<absl::string_view, std::unique_ptr<CertificateProviderFactory>>;
39
+
35
40
  public:
36
41
  class Builder {
37
42
  public:
38
- // Register a provider with the registry. Can only be called after calling
39
- // InitRegistry(). The key of the factory is extracted from factory
40
- // parameter with method CertificateProviderFactory::name. If the same key
41
- // is registered twice, an exception is raised.
43
+ // Register a provider with the registry. The key of the factory is
44
+ // extracted from factory parameter with method
45
+ // CertificateProviderFactory::name. The registry with a given name
46
+ // cannot be registered twice.
42
47
  void RegisterCertificateProviderFactory(
43
48
  std::unique_ptr<CertificateProviderFactory> factory);
44
49
 
45
50
  CertificateProviderRegistry Build();
46
51
 
47
52
  private:
48
- std::vector<std::unique_ptr<CertificateProviderFactory>> factories_;
53
+ FactoryMap factories_;
49
54
  };
50
55
 
51
56
  CertificateProviderRegistry(const CertificateProviderRegistry&) = delete;
@@ -60,9 +65,10 @@ class CertificateProviderRegistry {
60
65
  absl::string_view name) const;
61
66
 
62
67
  private:
63
- CertificateProviderRegistry() = default;
68
+ explicit CertificateProviderRegistry(FactoryMap factories)
69
+ : factories_(std::move(factories)) {}
64
70
 
65
- std::vector<std::unique_ptr<CertificateProviderFactory>> factories_;
71
+ FactoryMap factories_;
66
72
  };
67
73
 
68
74
  } // namespace grpc_core
@@ -34,6 +34,7 @@
34
34
  #include <grpc/grpc.h>
35
35
  #include <grpc/grpc_security.h>
36
36
  #include <grpc/support/alloc.h>
37
+ #include <grpc/support/json.h>
37
38
  #include <grpc/support/log.h>
38
39
  #include <grpc/support/string_util.h>
39
40
 
@@ -487,19 +488,25 @@ void AwsExternalAccountCredentials::BuildSubjectToken() {
487
488
  }
488
489
  // Construct subject token
489
490
  Json::Array headers;
490
- headers.push_back(Json(
491
- {{"key", "Authorization"}, {"value", signed_headers["Authorization"]}}));
492
- headers.push_back(Json({{"key", "host"}, {"value", signed_headers["host"]}}));
491
+ headers.push_back(Json::FromObject(
492
+ {{"key", Json::FromString("Authorization")},
493
+ {"value", Json::FromString(signed_headers["Authorization"])}}));
493
494
  headers.push_back(
494
- Json({{"key", "x-amz-date"}, {"value", signed_headers["x-amz-date"]}}));
495
- headers.push_back(Json({{"key", "x-amz-security-token"},
496
- {"value", signed_headers["x-amz-security-token"]}}));
497
- headers.push_back(
498
- Json({{"key", "x-goog-cloud-target-resource"}, {"value", audience_}}));
499
- Json::Object object{{"url", Json(cred_verification_url_)},
500
- {"method", Json("POST")},
501
- {"headers", Json(headers)}};
502
- Json subject_token_json(object);
495
+ Json::FromObject({{"key", Json::FromString("host")},
496
+ {"value", Json::FromString(signed_headers["host"])}}));
497
+ headers.push_back(Json::FromObject(
498
+ {{"key", Json::FromString("x-amz-date")},
499
+ {"value", Json::FromString(signed_headers["x-amz-date"])}}));
500
+ headers.push_back(Json::FromObject(
501
+ {{"key", Json::FromString("x-amz-security-token")},
502
+ {"value", Json::FromString(signed_headers["x-amz-security-token"])}}));
503
+ headers.push_back(Json::FromObject(
504
+ {{"key", Json::FromString("x-goog-cloud-target-resource")},
505
+ {"value", Json::FromString(audience_)}}));
506
+ Json subject_token_json =
507
+ Json::FromObject({{"url", Json::FromString(cred_verification_url_)},
508
+ {"method", Json::FromString("POST")},
509
+ {"headers", Json::FromArray(headers)}});
503
510
  std::string subject_token = UrlEncode(JsonDump(subject_token_json));
504
511
  FinishRetrieveSubjectToken(subject_token, absl::OkStatus());
505
512
  }
@@ -40,6 +40,7 @@
40
40
  #include <grpc/grpc.h>
41
41
  #include <grpc/grpc_security.h>
42
42
  #include <grpc/support/alloc.h>
43
+ #include <grpc/support/json.h>
43
44
  #include <grpc/support/log.h>
44
45
  #include <grpc/support/string_util.h>
45
46
 
@@ -328,9 +329,10 @@ void ExternalAccountCredentials::ExchangeToken(
328
329
  Json::Object addtional_options_json_object;
329
330
  if (options_.client_id.empty() && options_.client_secret.empty()) {
330
331
  addtional_options_json_object["userProject"] =
331
- options_.workforce_pool_user_project;
332
+ Json::FromString(options_.workforce_pool_user_project);
332
333
  }
333
- Json addtional_options_json(std::move(addtional_options_json_object));
334
+ Json addtional_options_json =
335
+ Json::FromObject(std::move(addtional_options_json_object));
334
336
  body_parts.push_back(absl::StrFormat(
335
337
  "options=%s", UrlEncode(JsonDump(addtional_options_json)).c_str()));
336
338
  std::string body = absl::StrJoin(body_parts, "&");
@@ -25,6 +25,7 @@
25
25
  #include "absl/strings/string_view.h"
26
26
 
27
27
  #include <grpc/slice.h>
28
+ #include <grpc/support/json.h>
28
29
 
29
30
  #include "src/core/lib/iomgr/load_file.h"
30
31
  #include "src/core/lib/json/json.h"
@@ -33,6 +33,7 @@
33
33
  #include <grpc/grpc.h>
34
34
  #include <grpc/grpc_security.h>
35
35
  #include <grpc/support/alloc.h>
36
+ #include <grpc/support/json.h>
36
37
  #include <grpc/support/log.h>
37
38
  #include <grpc/support/string_util.h>
38
39
 
@@ -34,6 +34,7 @@
34
34
  #include <grpc/grpc_security_constants.h>
35
35
  #include <grpc/slice.h>
36
36
  #include <grpc/support/alloc.h>
37
+ #include <grpc/support/json.h>
37
38
  #include <grpc/support/log.h>
38
39
  #include <grpc/support/sync.h>
39
40
 
@@ -36,6 +36,7 @@
36
36
 
37
37
  #include <grpc/grpc_security.h>
38
38
  #include <grpc/support/alloc.h>
39
+ #include <grpc/support/json.h>
39
40
  #include <grpc/support/log.h>
40
41
  #include <grpc/support/time.h>
41
42
 
@@ -165,12 +166,12 @@ void grpc_auth_json_key_destruct(grpc_auth_json_key* json_key) {
165
166
  // --- jwt encoding and signature. ---
166
167
 
167
168
  static char* encoded_jwt_header(const char* key_id, const char* algorithm) {
168
- Json json = Json::Object{
169
- {"alg", algorithm},
170
- {"typ", GRPC_JWT_TYPE},
171
- {"kid", key_id},
172
- };
173
- std::string json_str = JsonDump(json);
169
+ Json json = Json::FromObject({
170
+ {"alg", Json::FromString(algorithm)},
171
+ {"typ", Json::FromString(GRPC_JWT_TYPE)},
172
+ {"kid", Json::FromString(key_id)},
173
+ });
174
+ std::string json_str = grpc_core::JsonDump(json);
174
175
  return grpc_base64_encode(json_str.c_str(), json_str.size(), 1, 0);
175
176
  }
176
177
 
@@ -185,20 +186,20 @@ static char* encoded_jwt_claim(const grpc_auth_json_key* json_key,
185
186
  }
186
187
 
187
188
  Json::Object object = {
188
- {"iss", json_key->client_email},
189
- {"aud", audience},
190
- {"iat", now.tv_sec},
191
- {"exp", expiration.tv_sec},
189
+ {"iss", Json::FromString(json_key->client_email)},
190
+ {"aud", Json::FromString(audience)},
191
+ {"iat", Json::FromNumber(now.tv_sec)},
192
+ {"exp", Json::FromNumber(expiration.tv_sec)},
192
193
  };
193
194
  if (scope != nullptr) {
194
- object["scope"] = scope;
195
+ object["scope"] = Json::FromString(scope);
195
196
  } else {
196
197
  // Unscoped JWTs need a sub field.
197
- object["sub"] = json_key->client_email;
198
+ object["sub"] = Json::FromString(json_key->client_email);
198
199
  }
199
200
 
200
- Json json(object);
201
- std::string json_str = JsonDump(json);
201
+ std::string json_str =
202
+ grpc_core::JsonDump(Json::FromObject(std::move(object)));
202
203
  return grpc_base64_encode(json_str.c_str(), json_str.size(), 1, 0);
203
204
  }
204
205
 
@@ -30,6 +30,7 @@
30
30
  #include "absl/strings/str_cat.h"
31
31
 
32
32
  #include <grpc/support/alloc.h>
33
+ #include <grpc/support/json.h>
33
34
  #include <grpc/support/log.h>
34
35
  #include <grpc/support/string_util.h>
35
36
  #include <grpc/support/sync.h>
@@ -145,9 +146,10 @@ static char* redact_private_key(const char* json_key) {
145
146
  return gpr_strdup("<Json failed to parse.>");
146
147
  }
147
148
  Json::Object object = json->object();
148
- object["private_key"] = "<redacted>";
149
+ object["private_key"] = Json::FromString("<redacted>");
149
150
  return gpr_strdup(
150
- grpc_core::JsonDump(Json(std::move(object)), /*indent=*/2).c_str());
151
+ grpc_core::JsonDump(Json::FromObject(std::move(object)), /*indent=*/2)
152
+ .c_str());
151
153
  }
152
154
 
153
155
  grpc_call_credentials* grpc_service_account_jwt_access_credentials_create(
@@ -45,6 +45,7 @@
45
45
  #include <grpc/grpc.h>
46
46
  #include <grpc/slice.h>
47
47
  #include <grpc/support/alloc.h>
48
+ #include <grpc/support/json.h>
48
49
  #include <grpc/support/log.h>
49
50
  #include <grpc/support/string_util.h>
50
51
  #include <grpc/support/time.h>
@@ -39,6 +39,7 @@
39
39
  #include <grpc/grpc_security.h>
40
40
  #include <grpc/slice.h>
41
41
  #include <grpc/support/alloc.h>
42
+ #include <grpc/support/json.h>
42
43
  #include <grpc/support/log.h>
43
44
  #include <grpc/support/string_util.h>
44
45
  #include <grpc/support/time.h>
@@ -130,11 +130,7 @@ class grpc_alts_channel_security_connector final
130
130
  }
131
131
 
132
132
  grpc_core::ArenaPromise<absl::Status> CheckCallHost(
133
- absl::string_view host, grpc_auth_context*) override {
134
- if (host.empty() || host != target_name_) {
135
- return grpc_core::Immediate(absl::UnauthenticatedError(
136
- "ALTS call host does not match target name"));
137
- }
133
+ absl::string_view, grpc_auth_context*) override {
138
134
  return grpc_core::ImmediateOkStatus();
139
135
  }
140
136
 
@@ -26,6 +26,7 @@
26
26
 
27
27
  #include "absl/strings/str_cat.h"
28
28
 
29
+ #include <grpc/support/json.h>
29
30
  #include <grpc/support/string_util.h>
30
31
 
31
32
  #include "src/core/lib/iomgr/error.h"
@@ -21,14 +21,14 @@
21
21
 
22
22
  #include <stddef.h>
23
23
 
24
- #include <map>
25
24
  #include <memory>
26
25
  #include <utility>
27
26
 
28
- #include "absl/strings/string_view.h"
29
-
27
+ #include "src/core/lib/channel/context.h"
28
+ #include "src/core/lib/gprpp/chunked_vector.h"
30
29
  #include "src/core/lib/gprpp/ref_counted_ptr.h"
31
30
  #include "src/core/lib/gprpp/unique_type_name.h"
31
+ #include "src/core/lib/resource_quota/arena.h"
32
32
  #include "src/core/lib/service_config/service_config.h"
33
33
  #include "src/core/lib/service_config/service_config_parser.h"
34
34
 
@@ -38,43 +38,72 @@ namespace grpc_core {
38
38
  /// A pointer to this object is stored in the call_context
39
39
  /// GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA element, so that filters can
40
40
  /// easily access method and global parameters for the call.
41
+ ///
42
+ /// Must be accessed when holding the call combiner (legacy filter) or from
43
+ /// inside the activity (promise-based filter).
41
44
  class ServiceConfigCallData {
42
45
  public:
43
- using CallAttributes = std::map<UniqueTypeName, absl::string_view>;
46
+ class CallAttributeInterface {
47
+ public:
48
+ virtual ~CallAttributeInterface() = default;
49
+ virtual UniqueTypeName type() const = 0;
50
+ };
51
+
52
+ ServiceConfigCallData(Arena* arena, grpc_call_context_element* call_context)
53
+ : call_attributes_(arena) {
54
+ call_context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].value = this;
55
+ call_context[GRPC_CONTEXT_SERVICE_CONFIG_CALL_DATA].destroy = Destroy;
56
+ }
44
57
 
45
- ServiceConfigCallData() : method_configs_(nullptr) {}
58
+ virtual ~ServiceConfigCallData() = default;
46
59
 
47
- ServiceConfigCallData(
60
+ void SetServiceConfig(
48
61
  RefCountedPtr<ServiceConfig> service_config,
49
- const ServiceConfigParser::ParsedConfigVector* method_configs,
50
- CallAttributes call_attributes)
51
- : service_config_(std::move(service_config)),
52
- method_configs_(method_configs),
53
- call_attributes_(std::move(call_attributes)) {}
62
+ const ServiceConfigParser::ParsedConfigVector* method_configs) {
63
+ service_config_ = std::move(service_config);
64
+ method_configs_ = method_configs;
65
+ }
54
66
 
55
67
  ServiceConfig* service_config() { return service_config_.get(); }
56
68
 
57
69
  ServiceConfigParser::ParsedConfig* GetMethodParsedConfig(size_t index) const {
58
- return method_configs_ != nullptr ? (*method_configs_)[index].get()
59
- : nullptr;
70
+ if (method_configs_ == nullptr) return nullptr;
71
+ return (*method_configs_)[index].get();
60
72
  }
61
73
 
62
74
  ServiceConfigParser::ParsedConfig* GetGlobalParsedConfig(size_t index) const {
75
+ if (service_config_ == nullptr) return nullptr;
63
76
  return service_config_->GetGlobalParsedConfig(index);
64
77
  }
65
78
 
66
- const CallAttributes& call_attributes() const { return call_attributes_; }
79
+ void SetCallAttribute(CallAttributeInterface* value) {
80
+ // Overwrite existing entry if we already have one for this type.
81
+ for (CallAttributeInterface*& attribute : call_attributes_) {
82
+ if (value->type() == attribute->type()) {
83
+ attribute = value;
84
+ return;
85
+ }
86
+ }
87
+ // Otherwise, add a new entry.
88
+ call_attributes_.EmplaceBack(value);
89
+ }
67
90
 
68
- // Must be called when holding the call combiner (legacy filter) or from
69
- // inside the activity (promise-based filter).
70
- void SetCallAttribute(UniqueTypeName name, absl::string_view value) {
71
- call_attributes_[name] = value;
91
+ CallAttributeInterface* GetCallAttribute(UniqueTypeName type) const {
92
+ for (CallAttributeInterface* attribute : call_attributes_) {
93
+ if (attribute->type() == type) return attribute;
94
+ }
95
+ return nullptr;
72
96
  }
73
97
 
74
98
  private:
99
+ static void Destroy(void* ptr) {
100
+ auto* self = static_cast<ServiceConfigCallData*>(ptr);
101
+ self->~ServiceConfigCallData();
102
+ }
103
+
75
104
  RefCountedPtr<ServiceConfig> service_config_;
76
- const ServiceConfigParser::ParsedConfigVector* method_configs_;
77
- CallAttributes call_attributes_;
105
+ const ServiceConfigParser::ParsedConfigVector* method_configs_ = nullptr;
106
+ ChunkedVector<CallAttributeInterface*, 4> call_attributes_;
78
107
  };
79
108
 
80
109
  } // namespace grpc_core