grpc 1.55.3 → 1.56.0.pre3

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 (385) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +100 -70
  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 +82 -98
  11. data/src/core/ext/filters/client_channel/client_channel.h +4 -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/hpack_parser.cc +543 -567
  56. data/src/core/ext/transport/chttp2/transport/hpack_parser.h +9 -150
  57. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.cc +32 -46
  58. data/src/core/ext/transport/chttp2/transport/hpack_parser_table.h +5 -18
  59. data/src/core/ext/transport/chttp2/transport/internal.h +1 -15
  60. data/src/core/ext/transport/chttp2/transport/parsing.cc +12 -12
  61. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.c +11 -2
  62. data/src/core/ext/upb-generated/xds/data/orca/v3/orca_load_report.upb.h +15 -0
  63. data/src/core/ext/xds/certificate_provider_store.cc +4 -9
  64. data/src/core/ext/xds/certificate_provider_store.h +1 -1
  65. data/src/core/ext/xds/file_watcher_certificate_provider_factory.cc +30 -42
  66. data/src/core/ext/xds/file_watcher_certificate_provider_factory.h +14 -9
  67. data/src/core/ext/xds/xds_api.cc +9 -6
  68. data/src/core/ext/xds/xds_api.h +3 -2
  69. data/src/core/ext/xds/xds_audit_logger_registry.cc +122 -0
  70. data/src/core/ext/xds/xds_audit_logger_registry.h +68 -0
  71. data/src/core/ext/xds/xds_bootstrap_grpc.cc +21 -9
  72. data/src/core/ext/xds/xds_bootstrap_grpc.h +5 -0
  73. data/src/core/ext/xds/xds_client.cc +5 -4
  74. data/src/core/ext/xds/xds_client_stats.h +1 -1
  75. data/src/core/ext/xds/xds_cluster.cc +20 -19
  76. data/src/core/ext/xds/xds_cluster_specifier_plugin.cc +11 -8
  77. data/src/core/ext/xds/xds_common_types.cc +3 -1
  78. data/src/core/ext/xds/xds_http_fault_filter.cc +16 -13
  79. data/src/core/ext/xds/xds_http_fault_filter.h +2 -1
  80. data/src/core/ext/xds/xds_http_filters.h +4 -2
  81. data/src/core/ext/xds/xds_http_rbac_filter.cc +154 -67
  82. data/src/core/ext/xds/xds_http_rbac_filter.h +2 -1
  83. data/src/core/ext/xds/xds_http_stateful_session_filter.cc +15 -11
  84. data/src/core/ext/xds/xds_http_stateful_session_filter.h +2 -1
  85. data/src/core/ext/xds/xds_lb_policy_registry.cc +22 -16
  86. data/src/core/ext/xds/xds_listener.cc +1 -0
  87. data/src/core/ext/xds/xds_route_config.cc +40 -3
  88. data/src/core/ext/xds/xds_routing.cc +2 -2
  89. data/src/core/ext/xds/xds_transport_grpc.cc +3 -1
  90. data/src/core/lib/avl/avl.h +5 -0
  91. data/src/core/lib/backoff/random_early_detection.h +0 -5
  92. data/src/core/lib/channel/channel_args.cc +80 -22
  93. data/src/core/lib/channel/channel_args.h +34 -1
  94. data/src/core/lib/channel/channel_trace.cc +16 -12
  95. data/src/core/lib/channel/channelz.cc +159 -132
  96. data/src/core/lib/channel/channelz.h +42 -35
  97. data/src/core/lib/channel/channelz_registry.cc +23 -20
  98. data/src/core/lib/channel/connected_channel.cc +17 -6
  99. data/src/core/lib/channel/promise_based_filter.cc +0 -4
  100. data/src/core/lib/channel/promise_based_filter.h +2 -0
  101. data/src/core/lib/compression/compression_internal.cc +2 -5
  102. data/src/core/lib/config/config_vars.cc +20 -18
  103. data/src/core/lib/config/config_vars.h +4 -4
  104. data/src/core/lib/config/load_config.cc +13 -0
  105. data/src/core/lib/config/load_config.h +6 -0
  106. data/src/core/lib/debug/event_log.h +1 -1
  107. data/src/core/lib/debug/stats_data.h +1 -1
  108. data/src/core/lib/debug/trace.cc +24 -55
  109. data/src/core/lib/debug/trace.h +3 -1
  110. data/src/core/lib/event_engine/cf_engine/cf_engine.cc +211 -0
  111. data/src/core/lib/event_engine/cf_engine/cf_engine.h +86 -0
  112. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.cc +354 -0
  113. data/src/core/lib/event_engine/cf_engine/cfstream_endpoint.h +146 -0
  114. data/src/core/lib/event_engine/cf_engine/cftype_unique_ref.h +79 -0
  115. data/src/core/lib/event_engine/default_event_engine.cc +13 -1
  116. data/src/core/lib/event_engine/default_event_engine_factory.cc +14 -2
  117. data/src/core/lib/event_engine/poller.h +2 -2
  118. data/src/core/lib/event_engine/posix.h +4 -0
  119. data/src/core/lib/event_engine/posix_engine/ev_epoll1_linux.cc +1 -1
  120. data/src/core/lib/event_engine/posix_engine/lockfree_event.cc +7 -18
  121. data/src/core/lib/event_engine/posix_engine/posix_endpoint.h +9 -0
  122. data/src/core/lib/event_engine/posix_engine/posix_engine.cc +3 -2
  123. data/src/core/lib/event_engine/posix_engine/posix_engine.h +1 -2
  124. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.cc +4 -33
  125. data/src/core/lib/event_engine/posix_engine/posix_engine_listener.h +7 -11
  126. data/src/core/lib/event_engine/posix_engine/timer_manager.h +1 -1
  127. data/src/core/lib/event_engine/shim.cc +7 -1
  128. data/src/core/lib/event_engine/{thread_pool.cc → thread_pool/original_thread_pool.cc} +28 -25
  129. data/src/core/lib/event_engine/{thread_pool.h → thread_pool/original_thread_pool.h} +11 -15
  130. data/src/core/lib/event_engine/thread_pool/thread_pool.h +50 -0
  131. data/src/core/lib/event_engine/{executor/executor.h → thread_pool/thread_pool_factory.cc} +17 -15
  132. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.cc +489 -0
  133. data/src/core/lib/event_engine/thread_pool/work_stealing_thread_pool.h +249 -0
  134. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.cc +166 -0
  135. data/src/core/lib/event_engine/thready_event_engine/thready_event_engine.h +108 -0
  136. data/src/core/lib/event_engine/windows/iocp.cc +4 -3
  137. data/src/core/lib/event_engine/windows/iocp.h +3 -3
  138. data/src/core/lib/event_engine/windows/win_socket.cc +6 -6
  139. data/src/core/lib/event_engine/windows/win_socket.h +4 -4
  140. data/src/core/lib/event_engine/windows/windows_endpoint.cc +11 -10
  141. data/src/core/lib/event_engine/windows/windows_endpoint.h +3 -2
  142. data/src/core/lib/event_engine/windows/windows_engine.cc +19 -17
  143. data/src/core/lib/event_engine/windows/windows_engine.h +6 -6
  144. data/src/core/lib/event_engine/windows/windows_listener.cc +3 -3
  145. data/src/core/lib/event_engine/windows/windows_listener.h +3 -2
  146. data/src/core/lib/event_engine/work_queue/basic_work_queue.cc +63 -0
  147. data/src/core/lib/event_engine/work_queue/basic_work_queue.h +71 -0
  148. data/src/core/lib/event_engine/work_queue/work_queue.h +62 -0
  149. data/src/core/lib/experiments/config.cc +38 -7
  150. data/src/core/lib/experiments/config.h +16 -0
  151. data/src/core/lib/experiments/experiments.cc +67 -20
  152. data/src/core/lib/experiments/experiments.h +27 -21
  153. data/src/core/lib/gpr/log_internal.h +55 -0
  154. data/src/core/lib/gprpp/crash.cc +10 -0
  155. data/src/core/lib/gprpp/crash.h +3 -0
  156. data/src/core/lib/gprpp/per_cpu.cc +33 -0
  157. data/src/core/lib/gprpp/per_cpu.h +29 -6
  158. data/src/core/lib/gprpp/time.cc +1 -0
  159. data/src/core/lib/iomgr/cfstream_handle.cc +1 -1
  160. data/src/core/lib/iomgr/endpoint_cfstream.cc +10 -8
  161. data/src/core/lib/iomgr/ev_apple.cc +12 -12
  162. data/src/core/lib/iomgr/ev_epoll1_linux.cc +10 -3
  163. data/src/core/lib/iomgr/event_engine_shims/endpoint.cc +15 -1
  164. data/src/core/lib/iomgr/iocp_windows.cc +24 -3
  165. data/src/core/lib/iomgr/iocp_windows.h +11 -0
  166. data/src/core/lib/iomgr/iomgr_posix_cfstream.cc +1 -1
  167. data/src/core/lib/iomgr/socket_utils_common_posix.cc +4 -2
  168. data/src/core/lib/iomgr/socket_windows.cc +61 -7
  169. data/src/core/lib/iomgr/socket_windows.h +9 -2
  170. data/src/core/lib/iomgr/tcp_client_cfstream.cc +14 -3
  171. data/src/core/lib/iomgr/tcp_server_posix.cc +156 -140
  172. data/src/core/lib/iomgr/tcp_server_utils_posix.h +1 -13
  173. data/src/core/lib/iomgr/tcp_server_utils_posix_common.cc +0 -21
  174. data/src/core/lib/iomgr/tcp_server_windows.cc +1 -1
  175. data/src/core/lib/json/json.h +2 -166
  176. data/src/core/lib/json/json_object_loader.cc +8 -9
  177. data/src/core/lib/json/json_object_loader.h +25 -18
  178. data/src/core/lib/json/json_reader.cc +13 -6
  179. data/src/core/lib/json/json_util.cc +6 -11
  180. data/src/core/lib/json/json_writer.cc +7 -8
  181. data/src/core/lib/load_balancing/lb_policy.h +13 -0
  182. data/src/core/lib/load_balancing/lb_policy_registry.cc +2 -1
  183. data/src/core/lib/matchers/matchers.cc +3 -4
  184. data/src/core/lib/matchers/matchers.h +2 -1
  185. data/src/core/lib/promise/activity.cc +5 -0
  186. data/src/core/lib/promise/activity.h +10 -0
  187. data/src/core/lib/promise/detail/promise_factory.h +1 -1
  188. data/src/core/lib/promise/party.cc +31 -13
  189. data/src/core/lib/promise/party.h +11 -2
  190. data/src/core/lib/promise/pipe.h +9 -2
  191. data/src/core/lib/promise/prioritized_race.h +95 -0
  192. data/src/core/lib/promise/sleep.cc +2 -1
  193. data/src/core/lib/resolver/server_address.cc +0 -8
  194. data/src/core/lib/resolver/server_address.h +0 -6
  195. data/src/core/lib/resource_quota/memory_quota.cc +7 -7
  196. data/src/core/lib/resource_quota/memory_quota.h +1 -2
  197. data/src/core/lib/security/authorization/audit_logging.cc +98 -0
  198. data/src/core/lib/security/authorization/audit_logging.h +73 -0
  199. data/src/core/lib/security/authorization/grpc_authorization_engine.cc +47 -2
  200. data/src/core/lib/security/authorization/grpc_authorization_engine.h +18 -1
  201. data/src/core/lib/security/authorization/rbac_policy.cc +36 -4
  202. data/src/core/lib/security/authorization/rbac_policy.h +19 -2
  203. data/src/core/lib/security/authorization/stdout_logger.cc +75 -0
  204. data/src/core/lib/security/authorization/stdout_logger.h +61 -0
  205. data/src/core/lib/security/certificate_provider/certificate_provider_factory.h +8 -4
  206. data/src/core/lib/security/certificate_provider/certificate_provider_registry.cc +8 -18
  207. data/src/core/lib/security/certificate_provider/certificate_provider_registry.h +14 -8
  208. data/src/core/lib/security/credentials/external/aws_external_account_credentials.cc +19 -12
  209. data/src/core/lib/security/credentials/external/external_account_credentials.cc +4 -2
  210. data/src/core/lib/security/credentials/external/file_external_account_credentials.cc +1 -0
  211. data/src/core/lib/security/credentials/external/url_external_account_credentials.cc +1 -0
  212. data/src/core/lib/security/credentials/google_default/google_default_credentials.cc +1 -0
  213. data/src/core/lib/security/credentials/jwt/json_token.cc +15 -14
  214. data/src/core/lib/security/credentials/jwt/jwt_credentials.cc +4 -2
  215. data/src/core/lib/security/credentials/jwt/jwt_verifier.cc +1 -0
  216. data/src/core/lib/security/credentials/oauth2/oauth2_credentials.cc +1 -0
  217. data/src/core/lib/security/security_connector/alts/alts_security_connector.cc +1 -5
  218. data/src/core/lib/security/util/json_util.cc +1 -0
  219. data/src/core/lib/service_config/service_config_call_data.h +49 -20
  220. data/src/core/lib/service_config/service_config_impl.cc +2 -1
  221. data/src/core/lib/surface/call.cc +38 -23
  222. data/src/core/lib/surface/completion_queue.cc +6 -2
  223. data/src/core/lib/surface/validate_metadata.cc +22 -37
  224. data/src/core/lib/surface/validate_metadata.h +3 -13
  225. data/src/core/lib/surface/version.cc +2 -2
  226. data/src/core/lib/transport/batch_builder.cc +15 -12
  227. data/src/core/lib/transport/batch_builder.h +39 -35
  228. data/src/core/plugin_registry/grpc_plugin_registry.cc +0 -2
  229. data/src/core/plugin_registry/grpc_plugin_registry_extra.cc +2 -0
  230. data/src/ruby/ext/grpc/extconf.rb +8 -9
  231. data/src/ruby/lib/grpc/version.rb +1 -1
  232. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_mbstr.c +9 -8
  233. data/third_party/boringssl-with-bazel/src/crypto/asn1/a_strnid.c +1 -1
  234. data/third_party/boringssl-with-bazel/src/crypto/asn1/internal.h +3 -3
  235. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_dec.c +10 -6
  236. data/third_party/boringssl-with-bazel/src/crypto/asn1/tasn_enc.c +7 -4
  237. data/third_party/boringssl-with-bazel/src/crypto/bio/bio.c +6 -4
  238. data/third_party/boringssl-with-bazel/src/crypto/bio/fd.c +2 -1
  239. data/third_party/boringssl-with-bazel/src/crypto/bio/file.c +5 -9
  240. data/third_party/boringssl-with-bazel/src/crypto/bio/pair.c +4 -2
  241. data/third_party/boringssl-with-bazel/src/crypto/blake2/blake2.c +31 -22
  242. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/e_tls.c +29 -26
  243. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/internal.h +8 -0
  244. data/third_party/boringssl-with-bazel/src/crypto/cipher_extra/tls_cbc.c +189 -13
  245. data/third_party/boringssl-with-bazel/src/crypto/cpu_aarch64_openbsd.c +62 -0
  246. data/third_party/boringssl-with-bazel/src/crypto/cpu_arm_openbsd.c +31 -0
  247. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519.c +6 -4
  248. data/third_party/boringssl-with-bazel/src/crypto/curve25519/curve25519_tables.h +795 -795
  249. data/third_party/boringssl-with-bazel/src/crypto/curve25519/internal.h +1 -5
  250. data/third_party/boringssl-with-bazel/src/crypto/dsa/dsa.c +4 -0
  251. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/hash_to_curve.c +18 -6
  252. data/third_party/boringssl-with-bazel/src/crypto/ec_extra/internal.h +15 -7
  253. data/third_party/boringssl-with-bazel/src/crypto/ecdh_extra/ecdh_extra.c +1 -1
  254. data/third_party/boringssl-with-bazel/src/crypto/evp/p_rsa.c +1 -1
  255. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/bcm.c +1 -0
  256. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/dh/dh.c +3 -0
  257. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec.c +24 -24
  258. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_key.c +1 -1
  259. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/ec_montgomery.c +7 -7
  260. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/internal.h +74 -74
  261. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/oct.c +1 -2
  262. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p224-64.c +11 -11
  263. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256-nistz.c +12 -12
  264. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256.c +14 -15
  265. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/p256_table.h +1 -1
  266. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple.c +10 -10
  267. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/simple_mul.c +23 -23
  268. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ec/wnaf.c +13 -13
  269. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdh/ecdh.c +1 -1
  270. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/ecdsa/ecdsa.c +2 -2
  271. data/third_party/boringssl-with-bazel/src/crypto/{hkdf → fipsmodule/hkdf}/hkdf.c +1 -1
  272. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/cbc.c +2 -10
  273. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ctr.c +1 -4
  274. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm.c +115 -133
  275. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/gcm_nohw.c +12 -14
  276. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/internal.h +57 -47
  277. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/ofb.c +1 -8
  278. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/modes/polyval.c +27 -28
  279. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rand/urandom.c +11 -23
  280. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/internal.h +21 -16
  281. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/padding.c +5 -288
  282. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa.c +143 -83
  283. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/rsa/rsa_impl.c +95 -183
  284. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/self_check/self_check.c +71 -0
  285. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/internal.h +8 -0
  286. data/third_party/boringssl-with-bazel/src/crypto/fipsmodule/tls/kdf.c +33 -0
  287. data/third_party/boringssl-with-bazel/src/crypto/hpke/hpke.c +162 -6
  288. data/third_party/boringssl-with-bazel/src/crypto/internal.h +18 -0
  289. data/third_party/boringssl-with-bazel/src/crypto/kyber/kyber.c +18 -11
  290. data/third_party/boringssl-with-bazel/src/crypto/obj/obj_dat.h +6 -13
  291. data/third_party/boringssl-with-bazel/src/crypto/pem/pem_lib.c +18 -14
  292. data/third_party/boringssl-with-bazel/src/crypto/{refcount_lock.c → refcount_no_threads.c} +3 -13
  293. data/third_party/boringssl-with-bazel/src/crypto/refcount_win.c +89 -0
  294. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/internal.h +77 -0
  295. data/third_party/boringssl-with-bazel/src/crypto/rsa_extra/rsa_crypt.c +568 -0
  296. data/third_party/boringssl-with-bazel/src/crypto/trust_token/internal.h +62 -0
  297. data/third_party/boringssl-with-bazel/src/crypto/trust_token/pmbtoken.c +218 -44
  298. data/third_party/boringssl-with-bazel/src/crypto/trust_token/trust_token.c +35 -0
  299. data/third_party/boringssl-with-bazel/src/crypto/trust_token/voprf.c +588 -39
  300. data/third_party/boringssl-with-bazel/src/crypto/x509/a_sign.c +27 -18
  301. data/third_party/boringssl-with-bazel/src/crypto/x509/asn1_gen.c +1 -1
  302. data/third_party/boringssl-with-bazel/src/crypto/x509/name_print.c +17 -39
  303. data/third_party/boringssl-with-bazel/src/crypto/x509/t_x509.c +39 -48
  304. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_att.c +0 -140
  305. data/third_party/boringssl-with-bazel/src/crypto/x509/x509_req.c +72 -23
  306. data/third_party/boringssl-with-bazel/src/crypto/x509/x509name.c +11 -14
  307. data/third_party/boringssl-with-bazel/src/crypto/x509/x509spki.c +1 -1
  308. data/third_party/boringssl-with-bazel/src/crypto/x509/x_x509a.c +2 -2
  309. data/third_party/boringssl-with-bazel/src/crypto/x509v3/internal.h +1 -1
  310. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_conf.c +33 -46
  311. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_cpols.c +1 -0
  312. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_info.c +3 -5
  313. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_lib.c +14 -46
  314. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_prn.c +14 -26
  315. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_skey.c +17 -10
  316. data/third_party/boringssl-with-bazel/src/crypto/x509v3/v3_utl.c +1 -1
  317. data/third_party/boringssl-with-bazel/src/include/openssl/aead.h +5 -7
  318. data/third_party/boringssl-with-bazel/src/include/openssl/asn1.h +6 -4
  319. data/third_party/boringssl-with-bazel/src/include/openssl/base.h +32 -1
  320. data/third_party/boringssl-with-bazel/src/include/openssl/bio.h +0 -4
  321. data/third_party/boringssl-with-bazel/src/include/openssl/blake2.h +1 -4
  322. data/third_party/boringssl-with-bazel/src/include/openssl/evp.h +3 -3
  323. data/third_party/boringssl-with-bazel/src/include/openssl/hpke.h +28 -0
  324. data/third_party/boringssl-with-bazel/src/include/openssl/nid.h +2 -11
  325. data/third_party/boringssl-with-bazel/src/include/openssl/pem.h +0 -3
  326. data/third_party/boringssl-with-bazel/src/include/openssl/rsa.h +91 -1
  327. data/third_party/boringssl-with-bazel/src/include/openssl/span.h +5 -0
  328. data/third_party/boringssl-with-bazel/src/include/openssl/ssl.h +149 -20
  329. data/third_party/boringssl-with-bazel/src/include/openssl/thread.h +4 -0
  330. data/third_party/boringssl-with-bazel/src/include/openssl/tls1.h +4 -0
  331. data/third_party/boringssl-with-bazel/src/include/openssl/trust_token.h +8 -0
  332. data/third_party/boringssl-with-bazel/src/include/openssl/x509.h +774 -615
  333. data/third_party/boringssl-with-bazel/src/include/openssl/x509v3.h +42 -10
  334. data/third_party/boringssl-with-bazel/src/ssl/encrypted_client_hello.cc +11 -6
  335. data/third_party/boringssl-with-bazel/src/ssl/extensions.cc +2 -4
  336. data/third_party/boringssl-with-bazel/src/ssl/handshake_client.cc +24 -16
  337. data/third_party/boringssl-with-bazel/src/ssl/internal.h +65 -18
  338. data/third_party/boringssl-with-bazel/src/ssl/s3_both.cc +37 -18
  339. data/third_party/boringssl-with-bazel/src/ssl/ssl_cipher.cc +187 -193
  340. data/third_party/boringssl-with-bazel/src/ssl/ssl_key_share.cc +13 -129
  341. data/third_party/boringssl-with-bazel/src/ssl/ssl_lib.cc +85 -10
  342. data/third_party/boringssl-with-bazel/src/ssl/ssl_privkey.cc +17 -4
  343. data/third_party/boringssl-with-bazel/src/ssl/ssl_versions.cc +27 -19
  344. data/third_party/boringssl-with-bazel/src/ssl/tls13_client.cc +1 -1
  345. data/third_party/boringssl-with-bazel/src/ssl/tls13_enc.cc +5 -21
  346. data/third_party/boringssl-with-bazel/src/ssl/tls13_server.cc +5 -2
  347. data/third_party/boringssl-with-bazel/src/third_party/fiat/curve25519_64_msvc.h +1281 -0
  348. data/third_party/boringssl-with-bazel/src/third_party/fiat/p256_64_msvc.h +2002 -0
  349. data/third_party/cares/cares/include/ares.h +23 -1
  350. data/third_party/cares/cares/{src/lib → include}/ares_nameser.h +9 -7
  351. data/third_party/cares/cares/include/ares_rules.h +2 -2
  352. data/third_party/cares/cares/include/ares_version.h +3 -3
  353. data/third_party/cares/cares/src/lib/ares__addrinfo2hostent.c +266 -0
  354. data/third_party/cares/cares/src/lib/ares__addrinfo_localhost.c +240 -0
  355. data/third_party/cares/cares/src/lib/ares__parse_into_addrinfo.c +49 -80
  356. data/third_party/cares/cares/src/lib/ares__readaddrinfo.c +37 -43
  357. data/third_party/cares/cares/src/lib/ares__sortaddrinfo.c +12 -4
  358. data/third_party/cares/cares/src/lib/ares_data.c +16 -0
  359. data/third_party/cares/cares/src/lib/ares_data.h +7 -0
  360. data/third_party/cares/cares/src/lib/ares_destroy.c +8 -0
  361. data/third_party/cares/cares/src/lib/ares_expand_name.c +17 -6
  362. data/third_party/cares/cares/src/lib/ares_freeaddrinfo.c +1 -0
  363. data/third_party/cares/cares/src/lib/ares_getaddrinfo.c +156 -78
  364. data/third_party/cares/cares/src/lib/ares_gethostbyname.c +130 -326
  365. data/third_party/cares/cares/src/lib/ares_init.c +97 -485
  366. data/third_party/cares/cares/src/lib/ares_library_init.c +2 -89
  367. data/third_party/cares/cares/src/lib/ares_parse_a_reply.c +23 -142
  368. data/third_party/cares/cares/src/lib/ares_parse_aaaa_reply.c +22 -142
  369. data/third_party/cares/cares/src/lib/ares_parse_uri_reply.c +184 -0
  370. data/third_party/cares/cares/src/lib/ares_private.h +30 -16
  371. data/third_party/cares/cares/src/lib/ares_process.c +55 -16
  372. data/third_party/cares/cares/src/lib/ares_query.c +1 -35
  373. data/third_party/cares/cares/src/lib/ares_rand.c +279 -0
  374. data/third_party/cares/cares/src/lib/ares_send.c +5 -7
  375. data/third_party/cares/cares/src/lib/ares_strdup.c +12 -19
  376. data/third_party/cares/cares/src/lib/ares_strsplit.c +44 -128
  377. data/third_party/cares/cares/src/lib/ares_strsplit.h +9 -10
  378. data/third_party/cares/cares/src/lib/inet_net_pton.c +78 -116
  379. data/third_party/cares/cares/src/tools/ares_getopt.h +53 -0
  380. metadata +50 -16
  381. data/src/core/ext/filters/client_channel/health/health_check_client.cc +0 -175
  382. data/src/core/ext/filters/client_channel/health/health_check_client.h +0 -43
  383. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.cc +0 -176
  384. data/src/core/ext/transport/chttp2/transport/hpack_parse_result.h +0 -325
  385. data/third_party/cares/cares/src/lib/ares_library_init.h +0 -43
@@ -39,23 +39,20 @@
39
39
  #include "ares_dns.h"
40
40
  #include "ares_private.h"
41
41
 
42
- int ares__parse_into_addrinfo2(const unsigned char *abuf,
43
- int alen,
44
- char **question_hostname,
45
- struct ares_addrinfo *ai)
42
+ int ares__parse_into_addrinfo(const unsigned char *abuf,
43
+ int alen, int cname_only_is_enodata,
44
+ unsigned short port,
45
+ struct ares_addrinfo *ai)
46
46
  {
47
47
  unsigned int qdcount, ancount;
48
48
  int status, i, rr_type, rr_class, rr_len, rr_ttl;
49
49
  int got_a = 0, got_aaaa = 0, got_cname = 0;
50
50
  long len;
51
51
  const unsigned char *aptr;
52
+ char *question_hostname = NULL;
52
53
  char *hostname, *rr_name = NULL, *rr_data;
53
54
  struct ares_addrinfo_cname *cname, *cnames = NULL;
54
- struct ares_addrinfo_node *node, *nodes = NULL;
55
- struct sockaddr_in *sin;
56
- struct sockaddr_in6 *sin6;
57
-
58
- *question_hostname = NULL;
55
+ struct ares_addrinfo_node *nodes = NULL;
59
56
 
60
57
  /* Give up if abuf doesn't have room for a header. */
61
58
  if (alen < HFIXEDSZ)
@@ -70,15 +67,16 @@ int ares__parse_into_addrinfo2(const unsigned char *abuf,
70
67
 
71
68
  /* Expand the name from the question, and skip past the question. */
72
69
  aptr = abuf + HFIXEDSZ;
73
- status = ares__expand_name_for_response(aptr, abuf, alen, question_hostname, &len, 0);
70
+ status = ares__expand_name_for_response(aptr, abuf, alen, &question_hostname, &len, 0);
74
71
  if (status != ARES_SUCCESS)
75
72
  return status;
76
73
  if (aptr + len + QFIXEDSZ > abuf + alen)
77
74
  {
78
- return ARES_EBADRESP;
75
+ status = ARES_EBADRESP;
76
+ goto failed_stat;
79
77
  }
80
78
 
81
- hostname = *question_hostname;
79
+ hostname = question_hostname;
82
80
 
83
81
  aptr += len + QFIXEDSZ;
84
82
 
@@ -121,30 +119,9 @@ int ares__parse_into_addrinfo2(const unsigned char *abuf,
121
119
  goto failed_stat;
122
120
  } /* LCOV_EXCL_STOP */
123
121
 
124
- node = ares__append_addrinfo_node(&nodes);
125
- if (!node)
126
- {
127
- status = ARES_ENOMEM;
128
- goto failed_stat;
129
- }
130
-
131
- sin = ares_malloc(sizeof(struct sockaddr_in));
132
- if (!sin)
133
- {
134
- status = ARES_ENOMEM;
135
- goto failed_stat;
136
- }
137
- memset(sin, 0, sizeof(struct sockaddr_in));
138
- memcpy(&sin->sin_addr.s_addr, aptr, sizeof(struct in_addr));
139
- sin->sin_family = AF_INET;
140
-
141
- node->ai_addr = (struct sockaddr *)sin;
142
- node->ai_family = AF_INET;
143
- node->ai_addrlen = sizeof(struct sockaddr_in);
144
-
145
- node->ai_ttl = rr_ttl;
146
-
147
- status = ARES_SUCCESS;
122
+ status = ares_append_ai_node(AF_INET, port, rr_ttl, aptr, &nodes);
123
+ if (status != ARES_SUCCESS)
124
+ goto failed_stat;
148
125
  }
149
126
  else if (rr_class == C_IN && rr_type == T_AAAA
150
127
  && rr_len == sizeof(struct ares_in6_addr)
@@ -157,31 +134,9 @@ int ares__parse_into_addrinfo2(const unsigned char *abuf,
157
134
  goto failed_stat;
158
135
  } /* LCOV_EXCL_STOP */
159
136
 
160
- node = ares__append_addrinfo_node(&nodes);
161
- if (!node)
162
- {
163
- status = ARES_ENOMEM;
164
- goto failed_stat;
165
- }
166
-
167
- sin6 = ares_malloc(sizeof(struct sockaddr_in6));
168
- if (!sin6)
169
- {
170
- status = ARES_ENOMEM;
171
- goto failed_stat;
172
- }
173
-
174
- memset(sin6, 0, sizeof(struct sockaddr_in6));
175
- memcpy(&sin6->sin6_addr.s6_addr, aptr, sizeof(struct ares_in6_addr));
176
- sin6->sin6_family = AF_INET6;
177
-
178
- node->ai_addr = (struct sockaddr *)sin6;
179
- node->ai_family = AF_INET6;
180
- node->ai_addrlen = sizeof(struct sockaddr_in6);
181
-
182
- node->ai_ttl = rr_ttl;
183
-
184
- status = ARES_SUCCESS;
137
+ status = ares_append_ai_node(AF_INET6, port, rr_ttl, aptr, &nodes);
138
+ if (status != ARES_SUCCESS)
139
+ goto failed_stat;
185
140
  }
186
141
 
187
142
  if (rr_class == C_IN && rr_type == T_CNAME)
@@ -208,10 +163,13 @@ int ares__parse_into_addrinfo2(const unsigned char *abuf,
208
163
  cname->ttl = rr_ttl;
209
164
  cname->alias = rr_name;
210
165
  cname->name = rr_data;
166
+ rr_name = NULL;
211
167
  }
212
168
  else
213
169
  {
170
+ /* rr_name is only saved for cname */
214
171
  ares_free(rr_name);
172
+ rr_name = NULL;
215
173
  }
216
174
 
217
175
 
@@ -225,36 +183,47 @@ int ares__parse_into_addrinfo2(const unsigned char *abuf,
225
183
 
226
184
  if (status == ARES_SUCCESS)
227
185
  {
228
- ares__addrinfo_cat_nodes(&ai->nodes, nodes);
229
- if (got_cname)
186
+ if (!got_a && !got_aaaa)
230
187
  {
231
- ares__addrinfo_cat_cnames(&ai->cnames, cnames);
232
- return status;
188
+ if (!got_cname || (got_cname && cname_only_is_enodata))
189
+ {
190
+ status = ARES_ENODATA;
191
+ goto failed_stat;
192
+ }
193
+ }
194
+
195
+ /* save the question hostname as ai->name */
196
+ if (ai->name == NULL || strcasecmp(ai->name, question_hostname) != 0)
197
+ {
198
+ ares_free(ai->name);
199
+ ai->name = ares_strdup(question_hostname);
200
+ if (!ai->name)
201
+ {
202
+ status = ARES_ENOMEM;
203
+ goto failed_stat;
204
+ }
233
205
  }
234
- else if (got_a == 0 && got_aaaa == 0)
206
+
207
+ if (got_a || got_aaaa)
208
+ {
209
+ ares__addrinfo_cat_nodes(&ai->nodes, nodes);
210
+ nodes = NULL;
211
+ }
212
+
213
+ if (got_cname)
235
214
  {
236
- /* the check for naliases to be zero is to make sure CNAME responses
237
- don't get caught here */
238
- status = ARES_ENODATA;
215
+ ares__addrinfo_cat_cnames(&ai->cnames, cnames);
216
+ cnames = NULL;
239
217
  }
240
218
  }
241
219
 
220
+ ares_free(question_hostname);
242
221
  return status;
243
222
 
244
223
  failed_stat:
224
+ ares_free(question_hostname);
245
225
  ares_free(rr_name);
246
226
  ares__freeaddrinfo_cnames(cnames);
247
227
  ares__freeaddrinfo_nodes(nodes);
248
228
  return status;
249
229
  }
250
-
251
- int ares__parse_into_addrinfo(const unsigned char *abuf,
252
- int alen,
253
- struct ares_addrinfo *ai)
254
- {
255
- int status;
256
- char *question_hostname;
257
- status = ares__parse_into_addrinfo2(abuf, alen, &question_hostname, ai);
258
- ares_free(question_hostname);
259
- return status;
260
- }
@@ -42,11 +42,10 @@ int ares__readaddrinfo(FILE *fp,
42
42
  char *txtaddr, *txthost, *txtalias;
43
43
  char *aliases[MAX_ALIASES];
44
44
  unsigned int i, alias_count;
45
- int status;
45
+ int status = ARES_SUCCESS;
46
46
  size_t linesize;
47
- ares_sockaddr addr;
48
47
  struct ares_addrinfo_cname *cname = NULL, *cnames = NULL;
49
- struct ares_addrinfo_node *node = NULL, *nodes = NULL;
48
+ struct ares_addrinfo_node *nodes = NULL;
50
49
  int match_with_alias, match_with_canonical;
51
50
  int want_cname = hints->ai_flags & ARES_AI_CANONNAME;
52
51
 
@@ -60,6 +59,12 @@ int ares__readaddrinfo(FILE *fp,
60
59
  return ARES_EBADFAMILY;
61
60
  }
62
61
 
62
+ ai->name = ares_strdup(name);
63
+ if(!ai->name)
64
+ {
65
+ status = ARES_ENOMEM;
66
+ goto fail;
67
+ }
63
68
 
64
69
  while ((status = ares__read_line(fp, &line, &linesize)) == ARES_SUCCESS)
65
70
  {
@@ -163,57 +168,36 @@ int ares__readaddrinfo(FILE *fp,
163
168
  continue;
164
169
  }
165
170
 
166
- /* Zero-out 'addr' struct, as there are members that we may not set, especially
167
- * for ipv6. We don't want garbage data */
168
- memset(&addr, 0, sizeof(addr));
169
-
170
171
  /*
171
172
  * Convert address string to network address for the requested families.
172
173
  * Actual address family possible values are AF_INET and AF_INET6 only.
173
174
  */
174
175
  if ((hints->ai_family == AF_INET) || (hints->ai_family == AF_UNSPEC))
175
176
  {
176
- addr.sa4.sin_port = htons(port);
177
- if (ares_inet_pton(AF_INET, txtaddr, &addr.sa4.sin_addr) > 0)
177
+ struct in_addr addr4;
178
+ if (ares_inet_pton(AF_INET, txtaddr, &addr4) == 1)
178
179
  {
179
- node = ares__append_addrinfo_node(&nodes);
180
- if(!node)
180
+ status = ares_append_ai_node(AF_INET, port, 0, &addr4, &nodes);
181
+ if (status != ARES_SUCCESS)
181
182
  {
182
- goto enomem;
183
+ goto fail;
183
184
  }
184
-
185
- node->ai_family = addr.sa.sa_family = AF_INET;
186
- node->ai_addrlen = sizeof(addr.sa4);
187
- node->ai_addr = ares_malloc(sizeof(addr.sa4));
188
- if (!node->ai_addr)
189
- {
190
- goto enomem;
191
- }
192
- memcpy(node->ai_addr, &addr.sa4, sizeof(addr.sa4));
193
185
  }
194
186
  }
195
187
  if ((hints->ai_family == AF_INET6) || (hints->ai_family == AF_UNSPEC))
196
188
  {
197
- addr.sa6.sin6_port = htons(port);
198
- if (ares_inet_pton(AF_INET6, txtaddr, &addr.sa6.sin6_addr) > 0)
189
+ struct ares_in6_addr addr6;
190
+ if (ares_inet_pton(AF_INET6, txtaddr, &addr6) == 1)
199
191
  {
200
- node = ares__append_addrinfo_node(&nodes);
201
- if (!node)
202
- {
203
- goto enomem;
204
- }
205
-
206
- node->ai_family = addr.sa.sa_family = AF_INET6;
207
- node->ai_addrlen = sizeof(addr.sa6);
208
- node->ai_addr = ares_malloc(sizeof(addr.sa6));
209
- if (!node->ai_addr)
192
+ status = ares_append_ai_node(AF_INET6, port, 0, &addr6, &nodes);
193
+ if (status != ARES_SUCCESS)
210
194
  {
211
- goto enomem;
195
+ goto fail;
212
196
  }
213
- memcpy(node->ai_addr, &addr.sa6, sizeof(addr.sa6));
214
197
  }
215
198
  }
216
- if (!node)
199
+
200
+ if (status != ARES_SUCCESS)
217
201
  /* Ignore line if invalid address string for the requested family. */
218
202
  continue;
219
203
 
@@ -224,7 +208,8 @@ int ares__readaddrinfo(FILE *fp,
224
208
  cname = ares__append_addrinfo_cname(&cnames);
225
209
  if (!cname)
226
210
  {
227
- goto enomem;
211
+ status = ARES_ENOMEM;
212
+ goto fail;
228
213
  }
229
214
  cname->alias = ares_strdup(aliases[i]);
230
215
  cname->name = ares_strdup(txthost);
@@ -235,7 +220,8 @@ int ares__readaddrinfo(FILE *fp,
235
220
  cname = ares__append_addrinfo_cname(&cnames);
236
221
  if (!cname)
237
222
  {
238
- goto enomem;
223
+ status = ARES_ENOMEM;
224
+ goto fail;
239
225
  }
240
226
  cname->name = ares_strdup(txthost);
241
227
  }
@@ -245,20 +231,28 @@ int ares__readaddrinfo(FILE *fp,
245
231
  /* Last read failed. */
246
232
  if (status == ARES_ENOMEM)
247
233
  {
248
- goto enomem;
234
+ goto fail;
235
+ }
236
+
237
+ /* If no results, its a failure */
238
+ if (!nodes)
239
+ {
240
+ status = ARES_ENOTFOUND;
241
+ goto fail;
249
242
  }
250
243
 
251
244
  /* Free line buffer. */
252
245
  ares_free(line);
253
-
254
246
  ares__addrinfo_cat_cnames(&ai->cnames, cnames);
255
247
  ares__addrinfo_cat_nodes(&ai->nodes, nodes);
256
248
 
257
- return node ? ARES_SUCCESS : ARES_ENOTFOUND;
249
+ return ARES_SUCCESS;
258
250
 
259
- enomem:
251
+ fail:
260
252
  ares_free(line);
261
253
  ares__freeaddrinfo_cnames(cnames);
262
254
  ares__freeaddrinfo_nodes(nodes);
263
- return ARES_ENOMEM;
255
+ ares_free(ai->name);
256
+ ai->name = NULL;
257
+ return status;
264
258
  }
@@ -301,11 +301,15 @@ static int rfc6724_compare(const void *ptr1, const void *ptr2)
301
301
  }
302
302
 
303
303
  /* Rule 2: Prefer matching scope. */
304
- scope_src1 = get_scope(&a1->src_addr.sa);
304
+ scope_src1 = ARES_IPV6_ADDR_SCOPE_NODELOCAL;
305
+ if (a1->has_src_addr)
306
+ scope_src1 = get_scope(&a1->src_addr.sa);
305
307
  scope_dst1 = get_scope(a1->ai->ai_addr);
306
308
  scope_match1 = (scope_src1 == scope_dst1);
307
309
 
308
- scope_src2 = get_scope(&a2->src_addr.sa);
310
+ scope_src2 = ARES_IPV6_ADDR_SCOPE_NODELOCAL;
311
+ if (a2->has_src_addr)
312
+ scope_src2 = get_scope(&a2->src_addr.sa);
309
313
  scope_dst2 = get_scope(a2->ai->ai_addr);
310
314
  scope_match2 = (scope_src2 == scope_dst2);
311
315
 
@@ -319,11 +323,15 @@ static int rfc6724_compare(const void *ptr1, const void *ptr2)
319
323
  /* Rule 4: Prefer home addresses. */
320
324
 
321
325
  /* Rule 5: Prefer matching label. */
322
- label_src1 = get_label(&a1->src_addr.sa);
326
+ label_src1 = 1;
327
+ if (a1->has_src_addr)
328
+ label_src1 = get_label(&a1->src_addr.sa);
323
329
  label_dst1 = get_label(a1->ai->ai_addr);
324
330
  label_match1 = (label_src1 == label_dst1);
325
331
 
326
- label_src2 = get_label(&a2->src_addr.sa);
332
+ label_src2 = 1;
333
+ if (a2->has_src_addr)
334
+ label_src2 = get_label(&a2->src_addr.sa);
327
335
  label_dst2 = get_label(a2->ai->ai_addr);
328
336
  label_match2 = (label_src2 == label_dst2);
329
337
 
@@ -77,6 +77,14 @@ void ares_free_data(void *dataptr)
77
77
  ares_free(ptr->data.srv_reply.host);
78
78
  break;
79
79
 
80
+ case ARES_DATATYPE_URI_REPLY:
81
+
82
+ if (ptr->data.uri_reply.next)
83
+ next_data = ptr->data.uri_reply.next;
84
+ if (ptr->data.uri_reply.uri)
85
+ ares_free(ptr->data.uri_reply.uri);
86
+ break;
87
+
80
88
  case ARES_DATATYPE_TXT_REPLY:
81
89
  case ARES_DATATYPE_TXT_EXT:
82
90
 
@@ -174,6 +182,14 @@ void *ares_malloc_data(ares_datatype type)
174
182
  ptr->data.srv_reply.port = 0;
175
183
  break;
176
184
 
185
+ case ARES_DATATYPE_URI_REPLY:
186
+ ptr->data.uri_reply.next = NULL;
187
+ ptr->data.uri_reply.priority = 0;
188
+ ptr->data.uri_reply.weight = 0;
189
+ ptr->data.uri_reply.uri = NULL;
190
+ ptr->data.uri_reply.ttl = 0;
191
+ break;
192
+
177
193
  case ARES_DATATYPE_TXT_EXT:
178
194
  ptr->data.txt_ext.record_start = 0;
179
195
  /* FALLTHROUGH */
@@ -1,3 +1,6 @@
1
+ #ifndef __ARES_DATA_H
2
+ #define __ARES_DATA_H
3
+
1
4
 
2
5
  /* Copyright (C) 2009-2013 by Daniel Stenberg
3
6
  *
@@ -23,6 +26,7 @@ typedef enum {
23
26
  ARES_DATATYPE_MX_REPLY, /* struct ares_mx_reply - introduced in 1.7.2 */
24
27
  ARES_DATATYPE_NAPTR_REPLY,/* struct ares_naptr_reply - introduced in 1.7.6 */
25
28
  ARES_DATATYPE_SOA_REPLY, /* struct ares_soa_reply - introduced in 1.9.0 */
29
+ ARES_DATATYPE_URI_REPLY, /* struct ares_uri_reply */
26
30
  #if 0
27
31
  ARES_DATATYPE_ADDR6TTL, /* struct ares_addrttl */
28
32
  ARES_DATATYPE_ADDRTTL, /* struct ares_addr6ttl */
@@ -67,8 +71,11 @@ struct ares_data {
67
71
  struct ares_naptr_reply naptr_reply;
68
72
  struct ares_soa_reply soa_reply;
69
73
  struct ares_caa_reply caa_reply;
74
+ struct ares_uri_reply uri_reply;
70
75
  } data;
71
76
  };
72
77
 
73
78
  void *ares_malloc_data(ares_datatype type);
74
79
 
80
+
81
+ #endif /* __ARES_DATA_H */
@@ -38,6 +38,8 @@ void ares_destroy_options(struct ares_options *options)
38
38
  ares_free(options->lookups);
39
39
  if(options->resolvconf_path)
40
40
  ares_free(options->resolvconf_path);
41
+ if(options->hosts_path)
42
+ ares_free(options->hosts_path);
41
43
  }
42
44
 
43
45
  void ares_destroy(ares_channel channel)
@@ -90,6 +92,12 @@ void ares_destroy(ares_channel channel)
90
92
  if (channel->resolvconf_path)
91
93
  ares_free(channel->resolvconf_path);
92
94
 
95
+ if (channel->hosts_path)
96
+ ares_free(channel->hosts_path);
97
+
98
+ if (channel->rand_state)
99
+ ares__destroy_rand_state(channel->rand_state);
100
+
93
101
  ares_free(channel);
94
102
  }
95
103
 
@@ -59,10 +59,21 @@ static int ares__isprint(int ch)
59
59
  return 0;
60
60
  }
61
61
 
62
- /* Character set allowed by hostnames */
62
+ /* Character set allowed by hostnames. This is to include the normal
63
+ * domain name character set plus:
64
+ * - underscores which are used in SRV records.
65
+ * - Forward slashes such as are used for classless in-addr.arpa
66
+ * delegation (CNAMEs)
67
+ * - Asterisks may be used for wildcard domains in CNAMEs as seen in the
68
+ * real world.
69
+ * While RFC 2181 section 11 does state not to do validation,
70
+ * that applies to servers, not clients. Vulnerabilities have been
71
+ * reported when this validation is not performed. Security is more
72
+ * important than edge-case compatibility (which is probably invalid
73
+ * anyhow). */
63
74
  static int is_hostnamech(int ch)
64
75
  {
65
- /* [A-Za-z0-9-.]
76
+ /* [A-Za-z0-9-*._/]
66
77
  * Don't use isalnum() as it is locale-specific
67
78
  */
68
79
  if (ch >= 'A' && ch <= 'Z')
@@ -71,7 +82,7 @@ static int is_hostnamech(int ch)
71
82
  return 1;
72
83
  if (ch >= '0' && ch <= '9')
73
84
  return 1;
74
- if (ch == '-' || ch == '.')
85
+ if (ch == '-' || ch == '.' || ch == '_' || ch == '/' || ch == '*')
75
86
  return 1;
76
87
 
77
88
  return 0;
@@ -168,9 +179,9 @@ int ares__expand_name_validated(const unsigned char *encoded,
168
179
  if (!ares__isprint(*p) && !(name_len == 1 && *p == 0))
169
180
  {
170
181
  *q++ = '\\';
171
- *q++ = '0' + *p / 100;
172
- *q++ = '0' + (*p % 100) / 10;
173
- *q++ = '0' + (*p % 10);
182
+ *q++ = (char)('0' + *p / 100);
183
+ *q++ = (char)('0' + (*p % 100) / 10);
184
+ *q++ = (char)('0' + (*p % 10));
174
185
  }
175
186
  else if (is_reservedch(*p))
176
187
  {
@@ -55,5 +55,6 @@ void ares_freeaddrinfo(struct ares_addrinfo *ai)
55
55
  return;
56
56
  ares__freeaddrinfo_cnames(ai->cnames);
57
57
  ares__freeaddrinfo_nodes(ai->nodes);
58
+ ares_free(ai->name);
58
59
  ares_free(ai);
59
60
  }