grpc 0.13.1 → 0.14.1.pre1

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

Potentially problematic release.


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

Files changed (724) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +2098 -828
  3. data/include/grpc/byte_buffer.h +1 -1
  4. data/include/grpc/byte_buffer_reader.h +1 -20
  5. data/include/grpc/census.h +4 -4
  6. data/include/grpc/compression.h +6 -5
  7. data/include/grpc/grpc.h +31 -20
  8. data/include/grpc/grpc_security.h +17 -31
  9. data/include/grpc/grpc_security_constants.h +114 -0
  10. data/include/grpc/grpc_zookeeper.h +1 -1
  11. data/include/grpc/impl/codegen/alloc.h +1 -1
  12. data/include/grpc/impl/codegen/atm.h +1 -1
  13. data/include/grpc/impl/codegen/atm_gcc_atomic.h +1 -1
  14. data/include/grpc/impl/codegen/atm_gcc_sync.h +1 -1
  15. data/include/grpc/impl/codegen/atm_win32.h +1 -1
  16. data/include/grpc/impl/codegen/byte_buffer.h +1 -1
  17. data/{src/core/client_config/lb_policies/round_robin.h → include/grpc/impl/codegen/byte_buffer_reader.h} +19 -8
  18. data/include/grpc/impl/codegen/grpc_types.h +20 -3
  19. data/include/grpc/impl/codegen/log.h +9 -2
  20. data/include/grpc/impl/codegen/port_platform.h +102 -17
  21. data/include/grpc/impl/codegen/propagation_bits.h +3 -3
  22. data/include/grpc/impl/codegen/slice.h +3 -3
  23. data/include/grpc/impl/codegen/slice_buffer.h +3 -3
  24. data/include/grpc/impl/codegen/status.h +1 -1
  25. data/include/grpc/impl/codegen/sync_generic.h +1 -1
  26. data/include/grpc/impl/codegen/sync_posix.h +1 -1
  27. data/include/grpc/impl/codegen/sync_win32.h +1 -1
  28. data/include/grpc/impl/codegen/time.h +3 -3
  29. data/include/grpc/status.h +1 -1
  30. data/include/grpc/support/alloc.h +1 -1
  31. data/include/grpc/support/atm.h +1 -1
  32. data/include/grpc/support/atm_gcc_atomic.h +4 -4
  33. data/include/grpc/support/atm_gcc_sync.h +1 -1
  34. data/include/grpc/support/atm_win32.h +1 -1
  35. data/include/grpc/support/avl.h +1 -1
  36. data/include/grpc/support/cmdline.h +1 -1
  37. data/include/grpc/support/cpu.h +1 -1
  38. data/include/grpc/support/histogram.h +1 -1
  39. data/include/grpc/support/host_port.h +1 -1
  40. data/include/grpc/support/log.h +1 -1
  41. data/include/grpc/support/log_win32.h +1 -1
  42. data/include/grpc/support/port_platform.h +1 -1
  43. data/include/grpc/support/slice.h +1 -1
  44. data/include/grpc/support/slice_buffer.h +1 -1
  45. data/include/grpc/support/string_util.h +3 -1
  46. data/include/grpc/support/subprocess.h +2 -2
  47. data/include/grpc/support/sync.h +1 -1
  48. data/include/grpc/support/sync_generic.h +1 -1
  49. data/include/grpc/support/sync_posix.h +1 -1
  50. data/include/grpc/support/sync_win32.h +1 -1
  51. data/include/grpc/support/thd.h +1 -1
  52. data/include/grpc/support/time.h +1 -1
  53. data/include/grpc/support/tls.h +1 -1
  54. data/include/grpc/support/tls_gcc.h +45 -1
  55. data/include/grpc/support/tls_msvc.h +3 -3
  56. data/include/grpc/support/tls_pthread.h +1 -1
  57. data/include/grpc/support/useful.h +1 -1
  58. data/src/boringssl/err_data.c +258 -252
  59. data/src/core/{census → ext/census}/aggregation.h +3 -3
  60. data/src/core/{statistics → ext/census}/census_interface.h +3 -3
  61. data/src/core/{statistics → ext/census}/census_rpc_stats.h +4 -4
  62. data/src/core/{census → ext/census}/context.c +2 -2
  63. data/src/core/{census → ext/census}/grpc_context.c +2 -2
  64. data/src/core/{census → ext/census}/grpc_filter.c +30 -16
  65. data/src/core/{census → ext/census}/grpc_filter.h +4 -4
  66. data/src/core/ext/census/grpc_plugin.c +82 -0
  67. data/src/core/{census → ext/census}/initialize.c +1 -1
  68. data/src/core/{census → ext/census}/mlog.c +2 -2
  69. data/src/core/{census → ext/census}/mlog.h +4 -4
  70. data/src/core/{census → ext/census}/operation.c +0 -0
  71. data/src/core/{census → ext/census}/placeholders.c +0 -0
  72. data/src/core/{census → ext/census}/rpc_metric_id.h +3 -3
  73. data/src/core/{census → ext/census}/tracing.c +0 -0
  74. data/src/core/{surface → ext/client_config}/channel_connectivity.c +8 -21
  75. data/src/core/{channel → ext/client_config}/client_channel.c +80 -35
  76. data/src/core/{channel → ext/client_config}/client_channel.h +5 -5
  77. data/src/core/{client_config/subchannel_factory.c → ext/client_config/client_channel_factory.c} +14 -6
  78. data/src/core/ext/client_config/client_channel_factory.h +85 -0
  79. data/src/core/{client_config → ext/client_config}/client_config.c +4 -2
  80. data/src/core/{client_config → ext/client_config}/client_config.h +4 -4
  81. data/src/core/ext/client_config/client_config_plugin.c +95 -0
  82. data/src/core/{client_config → ext/client_config}/connector.c +2 -2
  83. data/src/core/{client_config → ext/client_config}/connector.h +7 -10
  84. data/src/core/{client_config → ext/client_config}/default_initial_connect_string.c +1 -1
  85. data/src/core/{client_config → ext/client_config}/initial_connect_string.c +1 -1
  86. data/src/core/{client_config → ext/client_config}/initial_connect_string.h +4 -4
  87. data/src/core/{client_config → ext/client_config}/lb_policy.c +12 -3
  88. data/src/core/{client_config → ext/client_config}/lb_policy.h +19 -6
  89. data/src/core/{client_config → ext/client_config}/lb_policy_factory.c +4 -3
  90. data/src/core/{client_config → ext/client_config}/lb_policy_factory.h +14 -9
  91. data/src/core/{client_config → ext/client_config}/lb_policy_registry.c +4 -9
  92. data/src/core/{client_config → ext/client_config}/lb_policy_registry.h +7 -6
  93. data/src/core/ext/client_config/parse_address.c +137 -0
  94. data/src/core/ext/client_config/parse_address.h +56 -0
  95. data/src/core/{client_config → ext/client_config}/resolver.c +1 -1
  96. data/src/core/{client_config → ext/client_config}/resolver.h +6 -6
  97. data/src/core/{client_config → ext/client_config}/resolver_factory.c +1 -1
  98. data/src/core/{client_config → ext/client_config}/resolver_factory.h +7 -7
  99. data/src/core/{client_config → ext/client_config}/resolver_registry.c +25 -11
  100. data/src/core/{client_config → ext/client_config}/resolver_registry.h +9 -5
  101. data/src/core/{client_config → ext/client_config}/subchannel.c +90 -126
  102. data/src/core/{client_config → ext/client_config}/subchannel.h +15 -15
  103. data/src/core/{channel → ext/client_config}/subchannel_call_holder.c +9 -8
  104. data/src/core/{channel → ext/client_config}/subchannel_call_holder.h +7 -7
  105. data/src/core/{client_config → ext/client_config}/subchannel_index.c +3 -2
  106. data/src/core/{client_config → ext/client_config}/subchannel_index.h +5 -5
  107. data/src/core/{client_config → ext/client_config}/uri_parser.c +69 -1
  108. data/src/core/{client_config → ext/client_config}/uri_parser.h +15 -3
  109. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.c +18 -9
  110. data/src/core/{client_config/lb_policies → ext/lb_policy/grpclb}/load_balancer_api.h +5 -5
  111. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.c +1 -1
  112. data/src/core/{proto → ext/lb_policy/grpclb/proto}/grpc/lb/v0/load_balancer.pb.h +0 -0
  113. data/src/core/{client_config/lb_policies → ext/lb_policy/pick_first}/pick_first.c +95 -32
  114. data/src/core/{client_config/lb_policies → ext/lb_policy/round_robin}/round_robin.c +98 -34
  115. data/src/core/{client_config/resolvers → ext/resolver/dns/native}/dns_resolver.c +83 -39
  116. data/src/core/{client_config/resolvers → ext/resolver/sockaddr}/sockaddr_resolver.c +66 -169
  117. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.c +1 -1
  118. data/src/core/{transport/chttp2 → ext/transport/chttp2/alpn}/alpn.h +3 -3
  119. data/src/core/{surface → ext/transport/chttp2/client/insecure}/channel_create.c +65 -59
  120. data/src/core/{surface → ext/transport/chttp2/client/secure}/secure_channel_create.c +77 -69
  121. data/src/core/{surface → ext/transport/chttp2/server/insecure}/server_chttp2.c +8 -11
  122. data/src/core/{security → ext/transport/chttp2/server/secure}/server_secure_chttp2.c +14 -17
  123. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.c +28 -74
  124. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/bin_encoder.h +5 -5
  125. data/src/core/ext/transport/chttp2/transport/chttp2_plugin.c +46 -0
  126. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.c +551 -310
  127. data/src/core/{transport → ext/transport/chttp2/transport}/chttp2_transport.h +5 -5
  128. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame.h +3 -3
  129. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.c +30 -14
  130. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_data.h +10 -7
  131. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.c +2 -2
  132. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_goaway.h +5 -5
  133. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.c +2 -2
  134. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_ping.h +5 -5
  135. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.c +9 -5
  136. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_rst_stream.h +8 -6
  137. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.c +6 -6
  138. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_settings.h +5 -5
  139. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.c +11 -5
  140. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/frame_window_update.h +8 -6
  141. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.c +21 -12
  142. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_encoder.h +8 -6
  143. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.c +42 -25
  144. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_parser.h +7 -7
  145. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.c +21 -11
  146. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/hpack_table.h +4 -4
  147. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/http2_errors.h +3 -3
  148. data/src/core/ext/transport/chttp2/transport/huffsyms.c +105 -0
  149. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/huffsyms.h +3 -3
  150. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.c +2 -2
  151. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/incoming_metadata.h +4 -4
  152. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/internal.h +81 -37
  153. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/parsing.c +54 -21
  154. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.c +1 -1
  155. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/status_conversion.h +4 -4
  156. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_lists.c +10 -2
  157. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.c +1 -1
  158. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/stream_map.h +3 -3
  159. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.c +4 -4
  160. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/timeout_encoding.h +4 -4
  161. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.c +1 -1
  162. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/varint.h +3 -3
  163. data/src/core/{transport/chttp2 → ext/transport/chttp2/transport}/writing.c +30 -20
  164. data/src/core/{channel → lib/channel}/channel_args.c +3 -15
  165. data/src/core/{channel → lib/channel}/channel_args.h +11 -15
  166. data/src/core/{channel → lib/channel}/channel_stack.c +5 -3
  167. data/src/core/{channel → lib/channel}/channel_stack.h +13 -8
  168. data/src/core/lib/channel/channel_stack_builder.c +277 -0
  169. data/src/core/lib/channel/channel_stack_builder.h +161 -0
  170. data/src/core/{channel → lib/channel}/compress_filter.c +51 -16
  171. data/src/core/{channel → lib/channel}/compress_filter.h +6 -4
  172. data/src/core/{channel → lib/channel}/connected_channel.c +34 -24
  173. data/src/core/lib/channel/connected_channel.h +42 -0
  174. data/src/core/{channel → lib/channel}/context.h +3 -3
  175. data/src/core/{channel → lib/channel}/http_client_filter.c +24 -13
  176. data/src/core/{channel → lib/channel}/http_client_filter.h +4 -4
  177. data/src/core/{channel → lib/channel}/http_server_filter.c +39 -19
  178. data/src/core/{channel → lib/channel}/http_server_filter.h +4 -4
  179. data/src/core/{compression → lib/compression}/algorithm_metadata.h +4 -4
  180. data/src/core/{compression → lib/compression}/compression_algorithm.c +46 -9
  181. data/src/core/{compression → lib/compression}/message_compress.c +1 -1
  182. data/src/core/{compression → lib/compression}/message_compress.h +3 -3
  183. data/src/core/{debug → lib/debug}/trace.c +2 -2
  184. data/src/core/{debug → lib/debug}/trace.h +3 -3
  185. data/src/core/{httpcli → lib/http}/format_request.c +8 -8
  186. data/src/core/{httpcli → lib/http}/format_request.h +4 -4
  187. data/src/core/{httpcli → lib/http}/httpcli.c +24 -19
  188. data/src/core/{httpcli → lib/http}/httpcli.h +14 -33
  189. data/src/core/{httpcli → lib/http}/httpcli_security_connector.c +5 -5
  190. data/src/core/lib/http/parser.c +341 -0
  191. data/src/core/lib/http/parser.h +119 -0
  192. data/src/core/{iomgr → lib/iomgr}/closure.c +8 -2
  193. data/src/core/{iomgr → lib/iomgr}/closure.h +7 -4
  194. data/src/core/{iomgr → lib/iomgr}/endpoint.c +1 -1
  195. data/src/core/{iomgr → lib/iomgr}/endpoint.h +5 -5
  196. data/src/core/{iomgr → lib/iomgr}/endpoint_pair.h +4 -4
  197. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_posix.c +8 -7
  198. data/src/core/{iomgr → lib/iomgr}/endpoint_pair_windows.c +4 -4
  199. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.c +1936 -0
  200. data/src/core/lib/iomgr/ev_poll_and_epoll_posix.h +41 -0
  201. data/src/core/lib/iomgr/ev_posix.c +164 -0
  202. data/src/core/lib/iomgr/ev_posix.h +158 -0
  203. data/src/core/{iomgr → lib/iomgr}/exec_ctx.c +78 -3
  204. data/src/core/{iomgr → lib/iomgr}/exec_ctx.h +25 -10
  205. data/src/core/{iomgr → lib/iomgr}/executor.c +3 -3
  206. data/src/core/{iomgr → lib/iomgr}/executor.h +5 -5
  207. data/src/core/{iomgr → lib/iomgr}/iocp_windows.c +6 -6
  208. data/src/core/{iomgr → lib/iomgr}/iocp_windows.h +5 -5
  209. data/src/core/{iomgr → lib/iomgr}/iomgr.c +13 -10
  210. data/src/core/{iomgr → lib/iomgr}/iomgr.h +3 -3
  211. data/src/core/{iomgr → lib/iomgr}/iomgr_internal.h +5 -9
  212. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.c +6 -6
  213. data/src/core/{iomgr → lib/iomgr}/iomgr_posix.h +4 -4
  214. data/src/core/{iomgr → lib/iomgr}/iomgr_windows.c +7 -4
  215. data/src/core/{iomgr → lib/iomgr}/pollset.h +11 -11
  216. data/src/core/{iomgr → lib/iomgr}/pollset_set.h +5 -5
  217. data/src/core/{iomgr → lib/iomgr}/pollset_set_windows.c +2 -2
  218. data/src/core/lib/iomgr/pollset_set_windows.h +39 -0
  219. data/src/core/{iomgr → lib/iomgr}/pollset_windows.c +7 -7
  220. data/src/core/{iomgr → lib/iomgr}/pollset_windows.h +8 -5
  221. data/src/core/{iomgr → lib/iomgr}/resolve_address.h +10 -9
  222. data/src/core/{iomgr → lib/iomgr}/resolve_address_posix.c +22 -22
  223. data/src/core/{iomgr → lib/iomgr}/resolve_address_windows.c +20 -12
  224. data/src/core/{iomgr → lib/iomgr}/sockaddr.h +5 -5
  225. data/src/core/{iomgr → lib/iomgr}/sockaddr_posix.h +5 -5
  226. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.c +9 -16
  227. data/src/core/{iomgr → lib/iomgr}/sockaddr_utils.h +4 -4
  228. data/src/core/{iomgr → lib/iomgr}/sockaddr_win32.h +6 -4
  229. data/src/core/{iomgr → lib/iomgr}/socket_utils_common_posix.c +29 -7
  230. data/src/core/{iomgr → lib/iomgr}/socket_utils_linux.c +2 -2
  231. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.c +1 -1
  232. data/src/core/{iomgr → lib/iomgr}/socket_utils_posix.h +14 -4
  233. data/src/core/{iomgr → lib/iomgr}/socket_windows.c +7 -5
  234. data/src/core/{iomgr → lib/iomgr}/socket_windows.h +6 -6
  235. data/src/core/{iomgr → lib/iomgr}/tcp_client.h +6 -6
  236. data/src/core/{iomgr → lib/iomgr}/tcp_client_posix.c +33 -18
  237. data/src/core/{iomgr → lib/iomgr}/tcp_client_windows.c +30 -20
  238. data/src/core/{iomgr → lib/iomgr}/tcp_posix.c +9 -10
  239. data/src/core/{iomgr → lib/iomgr}/tcp_posix.h +6 -6
  240. data/src/core/{iomgr → lib/iomgr}/tcp_server.h +6 -6
  241. data/src/core/{iomgr → lib/iomgr}/tcp_server_posix.c +24 -37
  242. data/src/core/{iomgr → lib/iomgr}/tcp_server_windows.c +8 -36
  243. data/src/core/{iomgr → lib/iomgr}/tcp_windows.c +27 -17
  244. data/src/core/{iomgr → lib/iomgr}/tcp_windows.h +5 -5
  245. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.c +1 -1
  246. data/src/core/{iomgr → lib/iomgr}/time_averaged_stats.h +3 -3
  247. data/src/core/{iomgr → lib/iomgr}/timer.c +31 -4
  248. data/src/core/{iomgr → lib/iomgr}/timer.h +6 -7
  249. data/src/core/{iomgr → lib/iomgr}/timer_heap.c +2 -2
  250. data/src/core/{iomgr → lib/iomgr}/timer_heap.h +4 -4
  251. data/src/core/{iomgr → lib/iomgr}/udp_server.c +13 -37
  252. data/src/core/{iomgr → lib/iomgr}/udp_server.h +11 -10
  253. data/src/core/lib/iomgr/unix_sockets_posix.c +89 -0
  254. data/src/core/{client_config/resolvers/sockaddr_resolver.h → lib/iomgr/unix_sockets_posix.h} +15 -11
  255. data/src/core/lib/iomgr/unix_sockets_posix_noop.c +59 -0
  256. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_eventfd.c +2 -2
  257. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_nospecial.c +1 -1
  258. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.c +8 -3
  259. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_pipe.h +4 -4
  260. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.c +2 -2
  261. data/src/core/{iomgr → lib/iomgr}/wakeup_fd_posix.h +3 -3
  262. data/src/core/{iomgr → lib/iomgr}/workqueue.h +10 -10
  263. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.c +5 -6
  264. data/src/core/{iomgr → lib/iomgr}/workqueue_posix.h +5 -5
  265. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.c +1 -1
  266. data/src/core/{iomgr → lib/iomgr}/workqueue_windows.h +3 -3
  267. data/src/core/{json → lib/json}/json.c +1 -1
  268. data/src/core/{json → lib/json}/json.h +4 -4
  269. data/src/core/{json → lib/json}/json_common.h +3 -3
  270. data/src/core/{json → lib/json}/json_reader.c +16 -4
  271. data/src/core/{json → lib/json}/json_reader.h +4 -4
  272. data/src/core/{json → lib/json}/json_string.c +4 -4
  273. data/src/core/{json → lib/json}/json_writer.c +1 -1
  274. data/src/core/{json → lib/json}/json_writer.h +4 -4
  275. data/src/core/{profiling → lib/profiling}/basic_timers.c +3 -2
  276. data/src/core/{profiling → lib/profiling}/stap_timers.c +2 -2
  277. data/src/core/{profiling → lib/profiling}/timers.h +3 -3
  278. data/src/core/{security → lib/security}/auth_filters.h +4 -4
  279. data/src/core/{security → lib/security}/b64.c +2 -2
  280. data/src/core/{security → lib/security}/b64.h +4 -4
  281. data/src/core/{security → lib/security}/client_auth_filter.c +16 -16
  282. data/src/core/{security → lib/security}/credentials.c +42 -26
  283. data/src/core/{security → lib/security}/credentials.h +11 -10
  284. data/src/core/{security → lib/security}/credentials_metadata.c +1 -1
  285. data/src/core/{security → lib/security}/credentials_posix.c +3 -3
  286. data/src/core/{security → lib/security}/credentials_win32.c +3 -3
  287. data/src/core/{security → lib/security}/google_default_credentials.c +10 -9
  288. data/src/core/{security → lib/security}/handshake.c +4 -4
  289. data/src/core/{security → lib/security}/handshake.h +6 -6
  290. data/src/core/{security → lib/security}/json_token.c +4 -4
  291. data/src/core/{security → lib/security}/json_token.h +4 -4
  292. data/src/core/{security → lib/security}/jwt_verifier.c +14 -14
  293. data/src/core/{security → lib/security}/jwt_verifier.h +5 -5
  294. data/src/core/{security → lib/security}/secure_endpoint.c +9 -8
  295. data/src/core/{security → lib/security}/secure_endpoint.h +4 -4
  296. data/src/core/{security → lib/security}/security_connector.c +53 -21
  297. data/src/core/{security → lib/security}/security_connector.h +8 -8
  298. data/src/core/{security → lib/security}/security_context.c +5 -5
  299. data/src/core/{security → lib/security}/security_context.h +5 -5
  300. data/src/core/{security → lib/security}/server_auth_filter.c +9 -9
  301. data/src/core/{support → lib/support}/alloc.c +5 -3
  302. data/src/core/{support → lib/support}/avl.c +1 -1
  303. data/src/core/lib/support/backoff.c +76 -0
  304. data/src/core/lib/support/backoff.h +68 -0
  305. data/src/core/{support → lib/support}/block_annotate.h +3 -3
  306. data/src/core/{support → lib/support}/cmdline.c +1 -1
  307. data/src/core/{support → lib/support}/cpu_iphone.c +0 -0
  308. data/src/core/{support → lib/support}/cpu_linux.c +2 -2
  309. data/src/core/{support → lib/support}/cpu_posix.c +2 -2
  310. data/src/core/{support → lib/support}/cpu_windows.c +0 -0
  311. data/src/core/{support → lib/support}/env.h +3 -3
  312. data/src/core/{support → lib/support}/env_linux.c +3 -3
  313. data/src/core/{support → lib/support}/env_posix.c +2 -2
  314. data/src/core/{support → lib/support}/env_win32.c +27 -21
  315. data/src/core/{support → lib/support}/histogram.c +1 -1
  316. data/src/core/{support → lib/support}/host_port.c +1 -1
  317. data/src/core/{support → lib/support}/load_file.c +4 -4
  318. data/src/core/{support → lib/support}/load_file.h +4 -4
  319. data/src/core/{support → lib/support}/log.c +33 -0
  320. data/src/core/{support → lib/support}/log_android.c +2 -2
  321. data/src/core/{support → lib/support}/log_linux.c +6 -5
  322. data/src/core/{support → lib/support}/log_posix.c +3 -3
  323. data/src/core/{support → lib/support}/log_win32.c +8 -22
  324. data/src/core/{support → lib/support}/murmur_hash.c +1 -1
  325. data/src/core/{support → lib/support}/murmur_hash.h +3 -3
  326. data/src/core/{support → lib/support}/slice.c +0 -0
  327. data/src/core/{support → lib/support}/slice_buffer.c +0 -0
  328. data/src/core/{support → lib/support}/stack_lockfree.c +7 -7
  329. data/src/core/{support → lib/support}/stack_lockfree.h +3 -3
  330. data/src/core/{support → lib/support}/string.c +1 -1
  331. data/src/core/{support → lib/support}/string.h +4 -4
  332. data/src/core/{support → lib/support}/string_posix.c +1 -1
  333. data/src/core/{support/string_win32.c → lib/support/string_util_win32.c} +23 -38
  334. data/src/core/lib/support/string_win32.c +83 -0
  335. data/src/core/{support → lib/support}/string_win32.h +3 -3
  336. data/src/core/{support → lib/support}/subprocess_posix.c +3 -3
  337. data/src/core/{support → lib/support}/subprocess_windows.c +3 -3
  338. data/src/core/{support → lib/support}/sync.c +2 -2
  339. data/src/core/{support → lib/support}/sync_posix.c +3 -3
  340. data/src/core/{support → lib/support}/sync_win32.c +1 -1
  341. data/src/core/{support → lib/support}/thd.c +0 -0
  342. data/src/core/{support → lib/support}/thd_internal.h +3 -3
  343. data/src/core/{support → lib/support}/thd_posix.c +4 -3
  344. data/src/core/{support → lib/support}/thd_win32.c +1 -1
  345. data/src/core/{support → lib/support}/time.c +2 -2
  346. data/src/core/{support → lib/support}/time_posix.c +12 -6
  347. data/src/core/{support → lib/support}/time_precise.c +0 -0
  348. data/src/core/{support → lib/support}/time_precise.h +3 -3
  349. data/src/core/{support → lib/support}/time_win32.c +7 -7
  350. data/src/core/{support → lib/support}/tls_pthread.c +0 -0
  351. data/src/core/{support → lib/support}/tmpfile.h +4 -4
  352. data/src/core/lib/support/tmpfile_msys.c +73 -0
  353. data/src/core/{support → lib/support}/tmpfile_posix.c +5 -5
  354. data/src/core/{support → lib/support}/tmpfile_win32.c +5 -5
  355. data/src/core/{support → lib/support}/wrap_memcpy.c +0 -0
  356. data/src/core/{surface → lib/surface}/alarm.c +3 -3
  357. data/src/core/{surface → lib/surface}/api_trace.c +1 -1
  358. data/src/core/{surface → lib/surface}/api_trace.h +4 -4
  359. data/src/core/{surface → lib/surface}/byte_buffer.c +3 -3
  360. data/src/core/{surface → lib/surface}/byte_buffer_reader.c +3 -3
  361. data/src/core/{surface → lib/surface}/call.c +145 -73
  362. data/src/core/{surface → lib/surface}/call.h +14 -7
  363. data/src/core/{surface → lib/surface}/call_details.c +1 -1
  364. data/src/core/{surface → lib/surface}/call_log_batch.c +2 -2
  365. data/src/core/{surface → lib/surface}/call_test_only.h +3 -3
  366. data/src/core/{surface → lib/surface}/channel.c +33 -34
  367. data/src/core/{surface → lib/surface}/channel.h +9 -9
  368. data/src/core/lib/surface/channel_init.c +140 -0
  369. data/src/core/lib/surface/channel_init.h +87 -0
  370. data/src/core/{surface → lib/surface}/channel_ping.c +4 -4
  371. data/src/core/lib/surface/channel_stack_type.c +54 -0
  372. data/src/core/{httpcli/parser.h → lib/surface/channel_stack_type.h} +22 -28
  373. data/src/core/{surface → lib/surface}/completion_queue.c +15 -11
  374. data/src/core/{surface → lib/surface}/completion_queue.h +4 -4
  375. data/src/core/{surface → lib/surface}/event_string.c +2 -2
  376. data/src/core/{surface → lib/surface}/event_string.h +3 -3
  377. data/src/core/lib/surface/init.c +217 -0
  378. data/src/core/{surface → lib/surface}/init.h +4 -3
  379. data/src/core/lib/surface/init_secure.c +89 -0
  380. data/src/core/{surface → lib/surface}/lame_client.c +31 -19
  381. data/src/core/{iomgr/pollset_set_windows.h → lib/surface/lame_client.h} +7 -5
  382. data/src/core/{surface → lib/surface}/metadata_array.c +1 -1
  383. data/src/core/{surface → lib/surface}/server.c +208 -183
  384. data/src/core/{surface → lib/surface}/server.h +6 -11
  385. data/src/core/{surface → lib/surface}/surface_trace.h +5 -5
  386. data/src/core/{surface → lib/surface}/validate_metadata.c +1 -1
  387. data/src/core/{surface → lib/surface}/version.c +2 -2
  388. data/src/core/{transport → lib/transport}/byte_stream.c +1 -1
  389. data/src/core/{transport → lib/transport}/byte_stream.h +4 -4
  390. data/src/core/{transport → lib/transport}/connectivity_state.c +2 -2
  391. data/src/core/{transport → lib/transport}/connectivity_state.h +4 -4
  392. data/src/core/{transport → lib/transport}/metadata.c +71 -19
  393. data/src/core/{transport → lib/transport}/metadata.h +11 -4
  394. data/src/core/{transport → lib/transport}/metadata_batch.c +2 -2
  395. data/src/core/{transport → lib/transport}/metadata_batch.h +4 -4
  396. data/src/core/{transport → lib/transport}/static_metadata.c +100 -32
  397. data/src/core/{transport → lib/transport}/static_metadata.h +58 -58
  398. data/src/core/{transport → lib/transport}/transport.c +25 -5
  399. data/src/core/{transport → lib/transport}/transport.h +41 -16
  400. data/src/core/{transport → lib/transport}/transport_impl.h +8 -5
  401. data/src/core/{transport → lib/transport}/transport_op_string.c +2 -2
  402. data/src/core/{tsi → lib/tsi}/fake_transport_security.c +18 -14
  403. data/src/core/{tsi → lib/tsi}/fake_transport_security.h +4 -4
  404. data/src/core/{tsi → lib/tsi}/ssl_transport_security.c +173 -63
  405. data/src/core/{tsi → lib/tsi}/ssl_transport_security.h +24 -6
  406. data/src/core/{tsi → lib/tsi}/ssl_types.h +3 -3
  407. data/src/core/{tsi → lib/tsi}/transport_security.c +12 -28
  408. data/src/core/{tsi → lib/tsi}/transport_security.h +4 -4
  409. data/src/core/{tsi → lib/tsi}/transport_security_interface.h +12 -3
  410. data/src/core/plugin_registry/grpc_plugin_registry.c +66 -0
  411. data/src/ruby/ext/grpc/extconf.rb +14 -20
  412. data/src/ruby/ext/grpc/rb_byte_buffer.c +2 -3
  413. data/src/ruby/ext/grpc/rb_call.c +37 -4
  414. data/src/ruby/ext/grpc/rb_call_credentials.c +13 -3
  415. data/src/ruby/ext/grpc/rb_channel.c +2 -3
  416. data/src/ruby/ext/grpc/rb_channel_args.c +2 -3
  417. data/src/ruby/ext/grpc/rb_channel_credentials.c +31 -3
  418. data/src/ruby/ext/grpc/rb_completion_queue.c +2 -2
  419. data/src/ruby/ext/grpc/rb_event_thread.c +1 -1
  420. data/src/ruby/ext/grpc/rb_grpc.c +4 -2
  421. data/src/ruby/ext/grpc/rb_grpc_imports.generated.c +8 -0
  422. data/src/ruby/ext/grpc/rb_grpc_imports.generated.h +14 -2
  423. data/src/ruby/ext/grpc/rb_server.c +2 -3
  424. data/src/ruby/ext/grpc/rb_server_credentials.c +16 -13
  425. data/src/ruby/ext/grpc/rb_signal.c +70 -0
  426. data/src/ruby/ext/grpc/rb_signal.h +39 -0
  427. data/src/ruby/lib/grpc.rb +21 -13
  428. data/src/ruby/lib/grpc/core/time_consts.rb +2 -2
  429. data/src/ruby/lib/grpc/errors.rb +2 -2
  430. data/src/ruby/lib/grpc/generic/active_call.rb +10 -3
  431. data/src/ruby/lib/grpc/generic/bidi_call.rb +2 -2
  432. data/src/ruby/lib/grpc/generic/client_stub.rb +10 -7
  433. data/src/ruby/lib/grpc/generic/rpc_desc.rb +2 -2
  434. data/src/ruby/lib/grpc/generic/rpc_server.rb +21 -61
  435. data/src/ruby/lib/grpc/generic/service.rb +5 -15
  436. data/src/ruby/lib/grpc/grpc.rb +3 -3
  437. data/src/ruby/{bin/interop/interop_server.rb → lib/grpc/signals.rb} +39 -20
  438. data/src/ruby/lib/grpc/version.rb +2 -2
  439. data/src/ruby/pb/generate_proto_ruby.sh +9 -2
  440. data/src/ruby/pb/grpc/health/checker.rb +1 -1
  441. data/src/ruby/pb/grpc/testing/duplicate/echo_duplicate_services.rb +28 -0
  442. data/src/ruby/pb/grpc/testing/metrics.rb +28 -0
  443. data/src/ruby/pb/grpc/testing/metrics_services.rb +27 -0
  444. data/src/ruby/pb/test/client.rb +12 -23
  445. data/src/ruby/pb/test/server.rb +1 -1
  446. data/src/ruby/spec/client_server_spec.rb +1 -1
  447. data/src/ruby/spec/generic/client_stub_spec.rb +18 -17
  448. data/src/ruby/spec/generic/rpc_server_spec.rb +23 -7
  449. data/src/ruby/spec/generic/service_spec.rb +0 -69
  450. data/src/ruby/{bin/interop/interop_client.rb → spec/pb/duplicate/codegen_spec.rb} +41 -21
  451. data/src/ruby/spec/pb/health/checker_spec.rb +1 -1
  452. data/third_party/boringssl/crypto/asn1/a_bitstr.c +184 -176
  453. data/third_party/boringssl/crypto/asn1/a_bool.c +42 -44
  454. data/third_party/boringssl/crypto/asn1/a_bytes.c +236 -245
  455. data/third_party/boringssl/crypto/asn1/a_d2i_fp.c +173 -192
  456. data/third_party/boringssl/crypto/asn1/a_dup.c +43 -35
  457. data/third_party/boringssl/crypto/asn1/a_enum.c +107 -109
  458. data/third_party/boringssl/crypto/asn1/a_gentm.c +180 -181
  459. data/third_party/boringssl/crypto/asn1/a_i2d_fp.c +73 -80
  460. data/third_party/boringssl/crypto/asn1/a_int.c +357 -353
  461. data/third_party/boringssl/crypto/asn1/a_mbstr.c +272 -253
  462. data/third_party/boringssl/crypto/asn1/a_object.c +293 -309
  463. data/third_party/boringssl/crypto/asn1/a_octet.c +13 -6
  464. data/third_party/boringssl/crypto/asn1/a_print.c +54 -52
  465. data/third_party/boringssl/crypto/asn1/a_strnid.c +179 -157
  466. data/third_party/boringssl/crypto/asn1/a_time.c +125 -129
  467. data/third_party/boringssl/crypto/asn1/a_type.c +79 -86
  468. data/third_party/boringssl/crypto/asn1/a_utctm.c +246 -255
  469. data/third_party/boringssl/crypto/asn1/a_utf8.c +159 -135
  470. data/third_party/boringssl/crypto/asn1/asn1_lib.c +361 -368
  471. data/third_party/boringssl/crypto/asn1/asn1_locl.h +11 -11
  472. data/third_party/boringssl/crypto/asn1/asn1_par.c +309 -351
  473. data/third_party/boringssl/crypto/asn1/asn_pack.c +30 -29
  474. data/third_party/boringssl/crypto/asn1/bio_asn1.c +375 -394
  475. data/third_party/boringssl/crypto/asn1/bio_ndef.c +146 -149
  476. data/third_party/boringssl/crypto/asn1/f_enum.c +128 -134
  477. data/third_party/boringssl/crypto/asn1/f_int.c +131 -139
  478. data/third_party/boringssl/crypto/asn1/f_string.c +125 -133
  479. data/third_party/boringssl/crypto/asn1/t_bitst.c +30 -29
  480. data/third_party/boringssl/crypto/asn1/t_pkey.c +45 -47
  481. data/third_party/boringssl/crypto/asn1/tasn_dec.c +1099 -1216
  482. data/third_party/boringssl/crypto/asn1/tasn_enc.c +556 -592
  483. data/third_party/boringssl/crypto/asn1/tasn_fre.c +175 -193
  484. data/third_party/boringssl/crypto/asn1/tasn_new.c +271 -288
  485. data/third_party/boringssl/crypto/asn1/tasn_prn.c +462 -508
  486. data/third_party/boringssl/crypto/asn1/tasn_typ.c +28 -21
  487. data/third_party/boringssl/crypto/asn1/x_bignum.c +62 -52
  488. data/third_party/boringssl/crypto/asn1/x_long.c +101 -86
  489. data/third_party/boringssl/crypto/bio/buffer.c +3 -3
  490. data/third_party/boringssl/crypto/bn/asm/x86_64-gcc.c +8 -68
  491. data/third_party/boringssl/crypto/bn/bn.c +1 -1
  492. data/third_party/boringssl/crypto/bn/bn_asn1.c +9 -22
  493. data/third_party/boringssl/crypto/bn/convert.c +9 -4
  494. data/third_party/boringssl/crypto/bn/div.c +0 -20
  495. data/third_party/boringssl/crypto/bn/exponentiation.c +22 -13
  496. data/third_party/boringssl/crypto/bn/generic.c +6 -242
  497. data/third_party/boringssl/crypto/bn/internal.h +9 -70
  498. data/third_party/boringssl/crypto/bn/montgomery.c +1 -2
  499. data/third_party/boringssl/crypto/bn/mul.c +6 -26
  500. data/third_party/boringssl/crypto/bn/rsaz_exp.c +21 -28
  501. data/third_party/boringssl/crypto/bytestring/asn1_compat.c +51 -0
  502. data/third_party/boringssl/crypto/bytestring/ber.c +128 -87
  503. data/third_party/boringssl/crypto/bytestring/cbb.c +37 -3
  504. data/third_party/boringssl/crypto/bytestring/internal.h +39 -10
  505. data/third_party/boringssl/crypto/chacha/chacha_vec.c +18 -13
  506. data/third_party/boringssl/crypto/cipher/e_aes.c +2 -2
  507. data/third_party/boringssl/crypto/cipher/e_chacha20poly1305.c +4 -9
  508. data/third_party/boringssl/crypto/cipher/tls_cbc.c +39 -10
  509. data/third_party/boringssl/crypto/conf/conf.c +9 -0
  510. data/third_party/boringssl/crypto/cpu-intel.c +1 -1
  511. data/third_party/boringssl/crypto/crypto.c +2 -0
  512. data/third_party/boringssl/crypto/curve25519/curve25519.c +125 -120
  513. data/third_party/boringssl/crypto/curve25519/internal.h +45 -0
  514. data/third_party/boringssl/crypto/curve25519/x25519-x86_64.c +225 -0
  515. data/third_party/boringssl/crypto/dh/check.c +32 -10
  516. data/third_party/boringssl/crypto/dh/dh.c +1 -1
  517. data/third_party/boringssl/crypto/digest/md32_common.h +0 -60
  518. data/third_party/boringssl/crypto/dsa/dsa.c +47 -21
  519. data/third_party/boringssl/crypto/dsa/dsa_asn1.c +249 -64
  520. data/third_party/boringssl/crypto/ec/ec.c +45 -31
  521. data/third_party/boringssl/crypto/ec/ec_asn1.c +315 -382
  522. data/third_party/boringssl/crypto/ec/ec_key.c +1 -4
  523. data/third_party/boringssl/crypto/ec/ec_montgomery.c +0 -9
  524. data/third_party/boringssl/crypto/ec/internal.h +1 -19
  525. data/third_party/boringssl/crypto/ec/oct.c +12 -0
  526. data/third_party/boringssl/crypto/ec/p224-64.c +4 -65
  527. data/third_party/boringssl/crypto/ec/p256-64.c +9 -71
  528. data/third_party/boringssl/crypto/ec/p256-x86_64-table.h +1 -6
  529. data/third_party/boringssl/crypto/ec/p256-x86_64.c +3 -13
  530. data/third_party/boringssl/crypto/ec/simple.c +0 -76
  531. data/third_party/boringssl/crypto/ecdsa/ecdsa.c +1 -1
  532. data/third_party/boringssl/crypto/ecdsa/ecdsa_asn1.c +10 -24
  533. data/third_party/boringssl/crypto/evp/evp.c +4 -3
  534. data/third_party/boringssl/crypto/evp/evp_asn1.c +101 -0
  535. data/third_party/boringssl/crypto/evp/evp_ctx.c +22 -51
  536. data/third_party/boringssl/crypto/evp/internal.h +28 -27
  537. data/third_party/boringssl/crypto/evp/p_dsa_asn1.c +78 -249
  538. data/third_party/boringssl/crypto/evp/p_ec.c +19 -66
  539. data/third_party/boringssl/crypto/evp/p_ec_asn1.c +74 -231
  540. data/third_party/boringssl/crypto/evp/p_rsa.c +90 -13
  541. data/third_party/boringssl/crypto/evp/p_rsa_asn1.c +49 -48
  542. data/third_party/boringssl/crypto/internal.h +16 -1
  543. data/third_party/boringssl/crypto/mem.c +2 -2
  544. data/third_party/boringssl/crypto/modes/ctr.c +2 -1
  545. data/third_party/boringssl/crypto/modes/gcm.c +5 -3
  546. data/third_party/boringssl/crypto/obj/obj_dat.h +6 -3
  547. data/third_party/boringssl/crypto/pem/pem_all.c +83 -102
  548. data/third_party/boringssl/crypto/pem/pem_info.c +286 -309
  549. data/third_party/boringssl/crypto/pem/pem_lib.c +690 -710
  550. data/third_party/boringssl/crypto/pem/pem_oth.c +15 -16
  551. data/third_party/boringssl/crypto/pem/pem_pk8.c +132 -119
  552. data/third_party/boringssl/crypto/pem/pem_pkey.c +144 -220
  553. data/third_party/boringssl/crypto/pem/pem_x509.c +3 -3
  554. data/third_party/boringssl/crypto/pem/pem_xaux.c +5 -4
  555. data/third_party/boringssl/crypto/pkcs8/pkcs8.c +54 -60
  556. data/third_party/boringssl/crypto/poly1305/poly1305_arm.c +3 -1
  557. data/third_party/boringssl/crypto/poly1305/poly1305_vec.c +48 -50
  558. data/third_party/boringssl/crypto/rand/rand.c +2 -0
  559. data/third_party/boringssl/crypto/rsa/blinding.c +8 -48
  560. data/third_party/boringssl/crypto/rsa/internal.h +1 -9
  561. data/third_party/boringssl/crypto/rsa/padding.c +73 -77
  562. data/third_party/boringssl/crypto/rsa/rsa.c +1 -1
  563. data/third_party/boringssl/crypto/rsa/rsa_asn1.c +27 -46
  564. data/third_party/boringssl/crypto/rsa/rsa_impl.c +23 -34
  565. data/third_party/boringssl/crypto/test/scoped_types.h +3 -0
  566. data/third_party/boringssl/crypto/thread_win.c +15 -13
  567. data/third_party/boringssl/crypto/time_support.c +0 -6
  568. data/third_party/boringssl/crypto/x509/a_digest.c +26 -27
  569. data/third_party/boringssl/crypto/x509/a_sign.c +63 -64
  570. data/third_party/boringssl/crypto/x509/a_strex.c +482 -413
  571. data/third_party/boringssl/crypto/x509/a_verify.c +45 -51
  572. data/third_party/boringssl/crypto/x509/asn1_gen.c +715 -769
  573. data/third_party/boringssl/crypto/x509/by_dir.c +355 -393
  574. data/third_party/boringssl/crypto/x509/by_file.c +186 -206
  575. data/third_party/boringssl/crypto/x509/charmap.h +11 -11
  576. data/third_party/boringssl/crypto/x509/i2d_pr.c +21 -22
  577. data/third_party/boringssl/crypto/x509/t_crl.c +50 -51
  578. data/third_party/boringssl/crypto/x509/t_x509.c +414 -406
  579. data/third_party/boringssl/crypto/x509/t_x509a.c +44 -42
  580. data/third_party/boringssl/crypto/x509/vpm_int.h +13 -13
  581. data/third_party/boringssl/crypto/x509/x509_att.c +241 -219
  582. data/third_party/boringssl/crypto/x509/x509_cmp.c +343 -359
  583. data/third_party/boringssl/crypto/x509/x509_d2.c +36 -35
  584. data/third_party/boringssl/crypto/x509/x509_def.c +23 -13
  585. data/third_party/boringssl/crypto/x509/x509_ext.c +75 -75
  586. data/third_party/boringssl/crypto/x509/x509_lu.c +574 -612
  587. data/third_party/boringssl/crypto/x509/x509_obj.c +104 -115
  588. data/third_party/boringssl/crypto/x509/x509_r2x.c +40 -40
  589. data/third_party/boringssl/crypto/x509/x509_req.c +181 -174
  590. data/third_party/boringssl/crypto/x509/x509_set.c +71 -76
  591. data/third_party/boringssl/crypto/x509/x509_trs.c +193 -171
  592. data/third_party/boringssl/crypto/x509/x509_txt.c +135 -138
  593. data/third_party/boringssl/crypto/x509/x509_v3.c +174 -167
  594. data/third_party/boringssl/crypto/x509/x509_vfy.c +2079 -2130
  595. data/third_party/boringssl/crypto/x509/x509_vpm.c +486 -522
  596. data/third_party/boringssl/crypto/x509/x509cset.c +96 -99
  597. data/third_party/boringssl/crypto/x509/x509name.c +280 -275
  598. data/third_party/boringssl/crypto/x509/x509rset.c +15 -14
  599. data/third_party/boringssl/crypto/x509/x509spki.c +62 -60
  600. data/third_party/boringssl/crypto/x509/x509type.c +58 -60
  601. data/third_party/boringssl/crypto/x509/x_algor.c +70 -73
  602. data/third_party/boringssl/crypto/x509/x_all.c +282 -328
  603. data/third_party/boringssl/crypto/x509/x_attrib.c +36 -42
  604. data/third_party/boringssl/crypto/x509/x_crl.c +397 -418
  605. data/third_party/boringssl/crypto/x509/x_exten.c +5 -5
  606. data/third_party/boringssl/crypto/x509/x_info.c +30 -27
  607. data/third_party/boringssl/crypto/x509/x_name.c +387 -388
  608. data/third_party/boringssl/crypto/x509/x_pkey.c +32 -29
  609. data/third_party/boringssl/crypto/x509/x_pubkey.c +261 -280
  610. data/third_party/boringssl/crypto/x509/x_req.c +30 -33
  611. data/third_party/boringssl/crypto/x509/x_sig.c +2 -2
  612. data/third_party/boringssl/crypto/x509/x_spki.c +9 -7
  613. data/third_party/boringssl/crypto/x509/x_val.c +2 -2
  614. data/third_party/boringssl/crypto/x509/x_x509.c +120 -119
  615. data/third_party/boringssl/crypto/x509/x_x509a.c +99 -91
  616. data/third_party/boringssl/crypto/x509v3/ext_dat.h +57 -51
  617. data/third_party/boringssl/crypto/x509v3/pcy_cache.c +199 -214
  618. data/third_party/boringssl/crypto/x509v3/pcy_data.c +57 -64
  619. data/third_party/boringssl/crypto/x509v3/pcy_int.h +95 -90
  620. data/third_party/boringssl/crypto/x509v3/pcy_lib.c +86 -87
  621. data/third_party/boringssl/crypto/x509v3/pcy_map.c +61 -64
  622. data/third_party/boringssl/crypto/x509v3/pcy_node.c +108 -117
  623. data/third_party/boringssl/crypto/x509v3/pcy_tree.c +676 -724
  624. data/third_party/boringssl/crypto/x509v3/v3_akey.c +128 -136
  625. data/third_party/boringssl/crypto/x509v3/v3_akeya.c +7 -6
  626. data/third_party/boringssl/crypto/x509v3/v3_alt.c +499 -507
  627. data/third_party/boringssl/crypto/x509v3/v3_bcons.c +54 -47
  628. data/third_party/boringssl/crypto/x509v3/v3_bitst.c +67 -67
  629. data/third_party/boringssl/crypto/x509v3/v3_conf.c +330 -328
  630. data/third_party/boringssl/crypto/x509v3/v3_cpols.c +354 -338
  631. data/third_party/boringssl/crypto/x509v3/v3_crld.c +441 -496
  632. data/third_party/boringssl/crypto/x509v3/v3_enum.c +35 -33
  633. data/third_party/boringssl/crypto/x509v3/v3_extku.c +66 -63
  634. data/third_party/boringssl/crypto/x509v3/v3_genn.c +157 -159
  635. data/third_party/boringssl/crypto/x509v3/v3_ia5.c +45 -43
  636. data/third_party/boringssl/crypto/x509v3/v3_info.c +124 -112
  637. data/third_party/boringssl/crypto/x509v3/v3_int.c +30 -26
  638. data/third_party/boringssl/crypto/x509v3/v3_lib.c +231 -204
  639. data/third_party/boringssl/crypto/x509v3/v3_ncons.c +353 -381
  640. data/third_party/boringssl/crypto/x509v3/v3_pci.c +252 -270
  641. data/third_party/boringssl/crypto/x509v3/v3_pcia.c +9 -8
  642. data/third_party/boringssl/crypto/x509v3/v3_pcons.c +58 -61
  643. data/third_party/boringssl/crypto/x509v3/v3_pku.c +35 -34
  644. data/third_party/boringssl/crypto/x509v3/v3_pmaps.c +72 -74
  645. data/third_party/boringssl/crypto/x509v3/v3_prn.c +146 -121
  646. data/third_party/boringssl/crypto/x509v3/v3_purp.c +651 -582
  647. data/third_party/boringssl/crypto/x509v3/v3_skey.c +76 -72
  648. data/third_party/boringssl/crypto/x509v3/v3_sxnet.c +139 -131
  649. data/third_party/boringssl/crypto/x509v3/v3_utl.c +1072 -1068
  650. data/third_party/boringssl/include/openssl/asn1.h +40 -38
  651. data/third_party/boringssl/include/openssl/base.h +10 -1
  652. data/third_party/boringssl/include/openssl/bio.h +10 -11
  653. data/third_party/boringssl/include/openssl/bn.h +12 -9
  654. data/third_party/boringssl/include/openssl/buf.h +1 -1
  655. data/third_party/boringssl/include/openssl/bytestring.h +29 -0
  656. data/third_party/boringssl/include/openssl/conf.h +25 -0
  657. data/third_party/boringssl/include/openssl/crypto.h +6 -1
  658. data/third_party/boringssl/include/openssl/curve25519.h +6 -3
  659. data/third_party/boringssl/include/openssl/dh.h +7 -3
  660. data/third_party/boringssl/include/openssl/dsa.h +108 -51
  661. data/third_party/boringssl/include/openssl/ec.h +46 -21
  662. data/third_party/boringssl/include/openssl/ec_key.h +78 -42
  663. data/third_party/boringssl/include/openssl/ecdsa.h +4 -4
  664. data/third_party/boringssl/include/openssl/err.h +3 -2
  665. data/third_party/boringssl/include/openssl/evp.h +120 -37
  666. data/third_party/boringssl/include/openssl/mem.h +4 -13
  667. data/third_party/boringssl/include/openssl/obj_mac.h +4 -0
  668. data/third_party/boringssl/include/openssl/pem.h +0 -9
  669. data/third_party/boringssl/include/openssl/pkcs8.h +6 -2
  670. data/third_party/boringssl/include/openssl/rand.h +3 -0
  671. data/third_party/boringssl/include/openssl/rsa.h +42 -42
  672. data/third_party/boringssl/include/openssl/ssl.h +115 -41
  673. data/third_party/boringssl/include/openssl/stack.h +0 -3
  674. data/third_party/boringssl/include/openssl/stack_macros.h +0 -256
  675. data/third_party/boringssl/include/openssl/tls1.h +1 -1
  676. data/third_party/boringssl/include/openssl/x509.h +0 -2
  677. data/third_party/boringssl/include/openssl/x509_vfy.h +5 -0
  678. data/third_party/boringssl/ssl/d1_both.c +102 -101
  679. data/third_party/boringssl/ssl/d1_clnt.c +145 -150
  680. data/third_party/boringssl/ssl/d1_lib.c +63 -62
  681. data/third_party/boringssl/ssl/d1_pkt.c +73 -71
  682. data/third_party/boringssl/ssl/d1_srvr.c +116 -125
  683. data/third_party/boringssl/ssl/dtls_record.c +3 -3
  684. data/third_party/boringssl/ssl/internal.h +210 -208
  685. data/third_party/boringssl/ssl/pqueue/pqueue.c +2 -2
  686. data/third_party/boringssl/ssl/s3_both.c +116 -130
  687. data/third_party/boringssl/ssl/s3_clnt.c +589 -740
  688. data/third_party/boringssl/ssl/s3_enc.c +52 -151
  689. data/third_party/boringssl/ssl/s3_lib.c +70 -76
  690. data/third_party/boringssl/ssl/s3_pkt.c +105 -144
  691. data/third_party/boringssl/ssl/s3_srvr.c +542 -806
  692. data/third_party/boringssl/ssl/ssl_aead_ctx.c +1 -1
  693. data/third_party/boringssl/ssl/ssl_cert.c +2 -2
  694. data/third_party/boringssl/ssl/ssl_cipher.c +7 -3
  695. data/third_party/boringssl/ssl/ssl_ecdh.c +374 -0
  696. data/third_party/boringssl/ssl/ssl_lib.c +260 -221
  697. data/third_party/boringssl/ssl/ssl_session.c +17 -17
  698. data/third_party/boringssl/ssl/t1_enc.c +128 -273
  699. data/third_party/boringssl/ssl/t1_lib.c +134 -258
  700. data/third_party/boringssl/ssl/test/test_config.h +2 -0
  701. data/third_party/boringssl/ssl/tls_record.c +52 -15
  702. metadata +385 -359
  703. data/src/core/channel/client_uchannel.c +0 -243
  704. data/src/core/channel/client_uchannel.h +0 -60
  705. data/src/core/channel/connected_channel.h +0 -51
  706. data/src/core/client_config/lb_policies/pick_first.h +0 -43
  707. data/src/core/client_config/resolvers/dns_resolver.h +0 -42
  708. data/src/core/client_config/subchannel_factory.h +0 -66
  709. data/src/core/httpcli/parser.c +0 -211
  710. data/src/core/iomgr/fd_posix.c +0 -451
  711. data/src/core/iomgr/fd_posix.h +0 -192
  712. data/src/core/iomgr/pollset_multipoller_with_epoll.c +0 -324
  713. data/src/core/iomgr/pollset_multipoller_with_poll_posix.c +0 -234
  714. data/src/core/iomgr/pollset_posix.c +0 -633
  715. data/src/core/iomgr/pollset_posix.h +0 -153
  716. data/src/core/iomgr/pollset_set_posix.c +0 -202
  717. data/src/core/iomgr/pollset_set_posix.h +0 -45
  718. data/src/core/surface/init.c +0 -174
  719. data/src/core/surface/init_secure.c +0 -42
  720. data/src/core/surface/server_create.c +0 -48
  721. data/src/core/transport/chttp2/huffsyms.c +0 -297
  722. data/src/ruby/bin/grpc_ruby_interop_client +0 -33
  723. data/src/ruby/bin/grpc_ruby_interop_server +0 -33
  724. data/third_party/boringssl/crypto/dsa/internal.h +0 -78
@@ -1,6 +1,7 @@
1
1
  /* pcy_map.c */
2
- /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3
- * project 2004.
2
+ /*
3
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
4
+ * 2004.
4
5
  */
5
6
  /* ====================================================================
6
7
  * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
@@ -10,7 +11,7 @@
10
11
  * are met:
11
12
  *
12
13
  * 1. Redistributions of source code must retain the above copyright
13
- * notice, this list of conditions and the following disclaimer.
14
+ * notice, this list of conditions and the following disclaimer.
14
15
  *
15
16
  * 2. Redistributions in binary form must reproduce the above copyright
16
17
  * notice, this list of conditions and the following disclaimer in
@@ -62,72 +63,68 @@
62
63
 
63
64
  #include "pcy_int.h"
64
65
 
65
-
66
- /* Set policy mapping entries in cache.
67
- * Note: this modifies the passed POLICY_MAPPINGS structure
66
+ /*
67
+ * Set policy mapping entries in cache. Note: this modifies the passed
68
+ * POLICY_MAPPINGS structure
68
69
  */
69
70
 
70
71
  int policy_cache_set_mapping(X509 *x, POLICY_MAPPINGS *maps)
71
- {
72
- POLICY_MAPPING *map;
73
- X509_POLICY_DATA *data;
74
- X509_POLICY_CACHE *cache = x->policy_cache;
75
- size_t i;
76
- int ret = 0;
77
- if (sk_POLICY_MAPPING_num(maps) == 0)
78
- {
79
- ret = -1;
80
- goto bad_mapping;
81
- }
82
- for (i = 0; i < sk_POLICY_MAPPING_num(maps); i++)
83
- {
84
- map = sk_POLICY_MAPPING_value(maps, i);
85
- /* Reject if map to or from anyPolicy */
86
- if ((OBJ_obj2nid(map->subjectDomainPolicy) == NID_any_policy)
87
- || (OBJ_obj2nid(map->issuerDomainPolicy) == NID_any_policy))
88
- {
89
- ret = -1;
90
- goto bad_mapping;
91
- }
72
+ {
73
+ POLICY_MAPPING *map;
74
+ X509_POLICY_DATA *data;
75
+ X509_POLICY_CACHE *cache = x->policy_cache;
76
+ size_t i;
77
+ int ret = 0;
78
+ if (sk_POLICY_MAPPING_num(maps) == 0) {
79
+ ret = -1;
80
+ goto bad_mapping;
81
+ }
82
+ for (i = 0; i < sk_POLICY_MAPPING_num(maps); i++) {
83
+ map = sk_POLICY_MAPPING_value(maps, i);
84
+ /* Reject if map to or from anyPolicy */
85
+ if ((OBJ_obj2nid(map->subjectDomainPolicy) == NID_any_policy)
86
+ || (OBJ_obj2nid(map->issuerDomainPolicy) == NID_any_policy)) {
87
+ ret = -1;
88
+ goto bad_mapping;
89
+ }
92
90
 
93
- /* Attempt to find matching policy data */
94
- data = policy_cache_find_data(cache, map->issuerDomainPolicy);
95
- /* If we don't have anyPolicy can't map */
96
- if (!data && !cache->anyPolicy)
97
- continue;
91
+ /* Attempt to find matching policy data */
92
+ data = policy_cache_find_data(cache, map->issuerDomainPolicy);
93
+ /* If we don't have anyPolicy can't map */
94
+ if (!data && !cache->anyPolicy)
95
+ continue;
98
96
 
99
- /* Create a NODE from anyPolicy */
100
- if (!data)
101
- {
102
- data = policy_data_new(NULL, map->issuerDomainPolicy,
103
- cache->anyPolicy->flags
104
- & POLICY_DATA_FLAG_CRITICAL);
105
- if (!data)
106
- goto bad_mapping;
107
- data->qualifier_set = cache->anyPolicy->qualifier_set;
108
- /*map->issuerDomainPolicy = NULL;*/
109
- data->flags |= POLICY_DATA_FLAG_MAPPED_ANY;
110
- data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
111
- if (!sk_X509_POLICY_DATA_push(cache->data, data))
112
- {
113
- policy_data_free(data);
114
- goto bad_mapping;
115
- }
116
- }
117
- else
118
- data->flags |= POLICY_DATA_FLAG_MAPPED;
119
- if (!sk_ASN1_OBJECT_push(data->expected_policy_set,
120
- map->subjectDomainPolicy))
121
- goto bad_mapping;
122
- map->subjectDomainPolicy = NULL;
97
+ /* Create a NODE from anyPolicy */
98
+ if (!data) {
99
+ data = policy_data_new(NULL, map->issuerDomainPolicy,
100
+ cache->anyPolicy->flags
101
+ & POLICY_DATA_FLAG_CRITICAL);
102
+ if (!data)
103
+ goto bad_mapping;
104
+ data->qualifier_set = cache->anyPolicy->qualifier_set;
105
+ /*
106
+ * map->issuerDomainPolicy = NULL;
107
+ */
108
+ data->flags |= POLICY_DATA_FLAG_MAPPED_ANY;
109
+ data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
110
+ if (!sk_X509_POLICY_DATA_push(cache->data, data)) {
111
+ policy_data_free(data);
112
+ goto bad_mapping;
113
+ }
114
+ } else
115
+ data->flags |= POLICY_DATA_FLAG_MAPPED;
116
+ if (!sk_ASN1_OBJECT_push(data->expected_policy_set,
117
+ map->subjectDomainPolicy))
118
+ goto bad_mapping;
119
+ map->subjectDomainPolicy = NULL;
123
120
 
124
- }
121
+ }
125
122
 
126
- ret = 1;
127
- bad_mapping:
128
- if (ret == -1)
129
- x->ex_flags |= EXFLAG_INVALID_POLICY;
130
- sk_POLICY_MAPPING_pop_free(maps, POLICY_MAPPING_free);
131
- return ret;
123
+ ret = 1;
124
+ bad_mapping:
125
+ if (ret == -1)
126
+ x->ex_flags |= EXFLAG_INVALID_POLICY;
127
+ sk_POLICY_MAPPING_pop_free(maps, POLICY_MAPPING_free);
128
+ return ret;
132
129
 
133
- }
130
+ }
@@ -1,6 +1,7 @@
1
1
  /* pcy_node.c */
2
- /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
3
- * project 2004.
2
+ /*
3
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
4
+ * 2004.
4
5
  */
5
6
  /* ====================================================================
6
7
  * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
@@ -10,7 +11,7 @@
10
11
  * are met:
11
12
  *
12
13
  * 1. Redistributions of source code must retain the above copyright
13
- * notice, this list of conditions and the following disclaimer.
14
+ * notice, this list of conditions and the following disclaimer.
14
15
  *
15
16
  * 2. Redistributions in binary form must reproduce the above copyright
16
17
  * notice, this list of conditions and the following disclaimer in
@@ -62,136 +63,126 @@
62
63
 
63
64
  #include "pcy_int.h"
64
65
 
65
-
66
- static int node_cmp(const X509_POLICY_NODE **a,
67
- const X509_POLICY_NODE **b)
68
- {
69
- return OBJ_cmp((*a)->data->valid_policy, (*b)->data->valid_policy);
70
- }
66
+ static int node_cmp(const X509_POLICY_NODE **a, const X509_POLICY_NODE **b)
67
+ {
68
+ return OBJ_cmp((*a)->data->valid_policy, (*b)->data->valid_policy);
69
+ }
71
70
 
72
71
  STACK_OF(X509_POLICY_NODE) *policy_node_cmp_new(void)
73
- {
74
- return sk_X509_POLICY_NODE_new(node_cmp);
75
- }
72
+ {
73
+ return sk_X509_POLICY_NODE_new(node_cmp);
74
+ }
76
75
 
77
76
  X509_POLICY_NODE *tree_find_sk(STACK_OF(X509_POLICY_NODE) *nodes,
78
- const ASN1_OBJECT *id)
79
- {
80
- X509_POLICY_DATA n;
81
- X509_POLICY_NODE l;
82
- size_t idx;
77
+ const ASN1_OBJECT *id)
78
+ {
79
+ X509_POLICY_DATA n;
80
+ X509_POLICY_NODE l;
81
+ size_t idx;
83
82
 
84
- n.valid_policy = (ASN1_OBJECT *)id;
85
- l.data = &n;
83
+ n.valid_policy = (ASN1_OBJECT *)id;
84
+ l.data = &n;
86
85
 
87
- if (!sk_X509_POLICY_NODE_find(nodes, &idx, &l))
88
- return NULL;
86
+ if (!sk_X509_POLICY_NODE_find(nodes, &idx, &l))
87
+ return NULL;
89
88
 
90
- return sk_X509_POLICY_NODE_value(nodes, idx);
89
+ return sk_X509_POLICY_NODE_value(nodes, idx);
91
90
 
92
- }
91
+ }
93
92
 
94
93
  X509_POLICY_NODE *level_find_node(const X509_POLICY_LEVEL *level,
95
- const X509_POLICY_NODE *parent,
96
- const ASN1_OBJECT *id)
97
- {
98
- X509_POLICY_NODE *node;
99
- size_t i;
100
- for (i = 0; i < sk_X509_POLICY_NODE_num(level->nodes); i++)
101
- {
102
- node = sk_X509_POLICY_NODE_value(level->nodes, i);
103
- if (node->parent == parent)
104
- {
105
- if (!OBJ_cmp(node->data->valid_policy, id))
106
- return node;
107
- }
108
- }
109
- return NULL;
110
- }
94
+ const X509_POLICY_NODE *parent,
95
+ const ASN1_OBJECT *id)
96
+ {
97
+ X509_POLICY_NODE *node;
98
+ size_t i;
99
+ for (i = 0; i < sk_X509_POLICY_NODE_num(level->nodes); i++) {
100
+ node = sk_X509_POLICY_NODE_value(level->nodes, i);
101
+ if (node->parent == parent) {
102
+ if (!OBJ_cmp(node->data->valid_policy, id))
103
+ return node;
104
+ }
105
+ }
106
+ return NULL;
107
+ }
111
108
 
112
109
  X509_POLICY_NODE *level_add_node(X509_POLICY_LEVEL *level,
113
- const X509_POLICY_DATA *data,
114
- X509_POLICY_NODE *parent,
115
- X509_POLICY_TREE *tree)
116
- {
117
- X509_POLICY_NODE *node;
118
- node = OPENSSL_malloc(sizeof(X509_POLICY_NODE));
119
- if (!node)
120
- return NULL;
121
- node->data = data;
122
- node->parent = parent;
123
- node->nchild = 0;
124
- if (level)
125
- {
126
- if (OBJ_obj2nid(data->valid_policy) == NID_any_policy)
127
- {
128
- if (level->anyPolicy)
129
- goto node_error;
130
- level->anyPolicy = node;
131
- }
132
- else
133
- {
134
-
135
- if (!level->nodes)
136
- level->nodes = policy_node_cmp_new();
137
- if (!level->nodes)
138
- goto node_error;
139
- if (!sk_X509_POLICY_NODE_push(level->nodes, node))
140
- goto node_error;
141
- }
142
- }
143
-
144
- if (tree)
145
- {
146
- if (!tree->extra_data)
147
- tree->extra_data = sk_X509_POLICY_DATA_new_null();
148
- if (!tree->extra_data)
149
- goto node_error;
150
- if (!sk_X509_POLICY_DATA_push(tree->extra_data, data))
151
- goto node_error;
152
- }
153
-
154
- if (parent)
155
- parent->nchild++;
156
-
157
- return node;
158
-
159
- node_error:
160
- policy_node_free(node);
161
- return 0;
162
-
163
- }
110
+ const X509_POLICY_DATA *data,
111
+ X509_POLICY_NODE *parent,
112
+ X509_POLICY_TREE *tree)
113
+ {
114
+ X509_POLICY_NODE *node;
115
+ node = OPENSSL_malloc(sizeof(X509_POLICY_NODE));
116
+ if (!node)
117
+ return NULL;
118
+ node->data = data;
119
+ node->parent = parent;
120
+ node->nchild = 0;
121
+ if (level) {
122
+ if (OBJ_obj2nid(data->valid_policy) == NID_any_policy) {
123
+ if (level->anyPolicy)
124
+ goto node_error;
125
+ level->anyPolicy = node;
126
+ } else {
127
+
128
+ if (!level->nodes)
129
+ level->nodes = policy_node_cmp_new();
130
+ if (!level->nodes)
131
+ goto node_error;
132
+ if (!sk_X509_POLICY_NODE_push(level->nodes, node))
133
+ goto node_error;
134
+ }
135
+ }
136
+
137
+ if (tree) {
138
+ if (!tree->extra_data)
139
+ tree->extra_data = sk_X509_POLICY_DATA_new_null();
140
+ if (!tree->extra_data)
141
+ goto node_error;
142
+ if (!sk_X509_POLICY_DATA_push(tree->extra_data, data))
143
+ goto node_error;
144
+ }
145
+
146
+ if (parent)
147
+ parent->nchild++;
148
+
149
+ return node;
150
+
151
+ node_error:
152
+ policy_node_free(node);
153
+ return 0;
154
+
155
+ }
164
156
 
165
157
  void policy_node_free(X509_POLICY_NODE *node)
166
- {
167
- OPENSSL_free(node);
168
- }
158
+ {
159
+ OPENSSL_free(node);
160
+ }
169
161
 
170
- /* See if a policy node matches a policy OID. If mapping enabled look through
162
+ /*
163
+ * See if a policy node matches a policy OID. If mapping enabled look through
171
164
  * expected policy set otherwise just valid policy.
172
165
  */
173
166
 
174
167
  int policy_node_match(const X509_POLICY_LEVEL *lvl,
175
- const X509_POLICY_NODE *node, const ASN1_OBJECT *oid)
176
- {
177
- size_t i;
178
- ASN1_OBJECT *policy_oid;
179
- const X509_POLICY_DATA *x = node->data;
180
-
181
- if ( (lvl->flags & X509_V_FLAG_INHIBIT_MAP)
182
- || !(x->flags & POLICY_DATA_FLAG_MAP_MASK))
183
- {
184
- if (!OBJ_cmp(x->valid_policy, oid))
185
- return 1;
186
- return 0;
187
- }
188
-
189
- for (i = 0; i < sk_ASN1_OBJECT_num(x->expected_policy_set); i++)
190
- {
191
- policy_oid = sk_ASN1_OBJECT_value(x->expected_policy_set, i);
192
- if (!OBJ_cmp(policy_oid, oid))
193
- return 1;
194
- }
195
- return 0;
196
-
197
- }
168
+ const X509_POLICY_NODE *node, const ASN1_OBJECT *oid)
169
+ {
170
+ size_t i;
171
+ ASN1_OBJECT *policy_oid;
172
+ const X509_POLICY_DATA *x = node->data;
173
+
174
+ if ((lvl->flags & X509_V_FLAG_INHIBIT_MAP)
175
+ || !(x->flags & POLICY_DATA_FLAG_MAP_MASK)) {
176
+ if (!OBJ_cmp(x->valid_policy, oid))
177
+ return 1;
178
+ return 0;
179
+ }
180
+
181
+ for (i = 0; i < sk_ASN1_OBJECT_num(x->expected_policy_set); i++) {
182
+ policy_oid = sk_ASN1_OBJECT_value(x->expected_policy_set, i);
183
+ if (!OBJ_cmp(policy_oid, oid))
184
+ return 1;
185
+ }
186
+ return 0;
187
+
188
+ }
@@ -1,5 +1,6 @@
1
- /* Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL
2
- * project 2004.
1
+ /*
2
+ * Written by Dr Stephen N Henson (steve@openssl.org) for the OpenSSL project
3
+ * 2004.
3
4
  */
4
5
  /* ====================================================================
5
6
  * Copyright (c) 2004 The OpenSSL Project. All rights reserved.
@@ -9,7 +10,7 @@
9
10
  * are met:
10
11
  *
11
12
  * 1. Redistributions of source code must retain the above copyright
12
- * notice, this list of conditions and the following disclaimer.
13
+ * notice, this list of conditions and the following disclaimer.
13
14
  *
14
15
  * 2. Redistributions in binary form must reproduce the above copyright
15
16
  * notice, this list of conditions and the following disclaimer in
@@ -66,811 +67,762 @@
66
67
 
67
68
  #include "pcy_int.h"
68
69
 
69
-
70
- /* Enable this to print out the complete policy tree at various point during
70
+ /*
71
+ * Enable this to print out the complete policy tree at various point during
71
72
  * evaluation.
72
73
  */
73
74
 
74
- /*#define OPENSSL_POLICY_DEBUG*/
75
+ /*
76
+ * #define OPENSSL_POLICY_DEBUG
77
+ */
75
78
 
76
79
  #ifdef OPENSSL_POLICY_DEBUG
77
80
 
78
81
  static void expected_print(BIO *err, X509_POLICY_LEVEL *lev,
79
- X509_POLICY_NODE *node, int indent)
80
- {
81
- if ( (lev->flags & X509_V_FLAG_INHIBIT_MAP)
82
- || !(node->data->flags & POLICY_DATA_FLAG_MAP_MASK))
83
- BIO_puts(err, " Not Mapped\n");
84
- else
85
- {
86
- int i;
87
- STACK_OF(ASN1_OBJECT) *pset = node->data->expected_policy_set;
88
- ASN1_OBJECT *oid;
89
- BIO_puts(err, " Expected: ");
90
- for (i = 0; i < sk_ASN1_OBJECT_num(pset); i++)
91
- {
92
- oid = sk_ASN1_OBJECT_value(pset, i);
93
- if (i)
94
- BIO_puts(err, ", ");
95
- i2a_ASN1_OBJECT(err, oid);
96
- }
97
- BIO_puts(err, "\n");
98
- }
99
- }
82
+ X509_POLICY_NODE *node, int indent)
83
+ {
84
+ if ((lev->flags & X509_V_FLAG_INHIBIT_MAP)
85
+ || !(node->data->flags & POLICY_DATA_FLAG_MAP_MASK))
86
+ BIO_puts(err, " Not Mapped\n");
87
+ else {
88
+ int i;
89
+ STACK_OF(ASN1_OBJECT) *pset = node->data->expected_policy_set;
90
+ ASN1_OBJECT *oid;
91
+ BIO_puts(err, " Expected: ");
92
+ for (i = 0; i < sk_ASN1_OBJECT_num(pset); i++) {
93
+ oid = sk_ASN1_OBJECT_value(pset, i);
94
+ if (i)
95
+ BIO_puts(err, ", ");
96
+ i2a_ASN1_OBJECT(err, oid);
97
+ }
98
+ BIO_puts(err, "\n");
99
+ }
100
+ }
100
101
 
101
102
  static void tree_print(char *str, X509_POLICY_TREE *tree,
102
- X509_POLICY_LEVEL *curr)
103
- {
104
- X509_POLICY_LEVEL *plev;
105
- X509_POLICY_NODE *node;
106
- int i;
107
- BIO *err;
108
- err = BIO_new_fp(stderr, BIO_NOCLOSE);
109
- if (!curr)
110
- curr = tree->levels + tree->nlevel;
111
- else
112
- curr++;
113
- BIO_printf(err, "Level print after %s\n", str);
114
- BIO_printf(err, "Printing Up to Level %ld\n", curr - tree->levels);
115
- for (plev = tree->levels; plev != curr; plev++)
116
- {
117
- BIO_printf(err, "Level %ld, flags = %x\n",
118
- plev - tree->levels, plev->flags);
119
- for (i = 0; i < sk_X509_POLICY_NODE_num(plev->nodes); i++)
120
- {
121
- node = sk_X509_POLICY_NODE_value(plev->nodes, i);
122
- X509_POLICY_NODE_print(err, node, 2);
123
- expected_print(err, plev, node, 2);
124
- BIO_printf(err, " Flags: %x\n", node->data->flags);
125
- }
126
- if (plev->anyPolicy)
127
- X509_POLICY_NODE_print(err, plev->anyPolicy, 2);
128
- }
129
-
130
- BIO_free(err);
131
-
132
- }
103
+ X509_POLICY_LEVEL *curr)
104
+ {
105
+ X509_POLICY_LEVEL *plev;
106
+ X509_POLICY_NODE *node;
107
+ int i;
108
+ BIO *err;
109
+ err = BIO_new_fp(stderr, BIO_NOCLOSE);
110
+ if (!curr)
111
+ curr = tree->levels + tree->nlevel;
112
+ else
113
+ curr++;
114
+ BIO_printf(err, "Level print after %s\n", str);
115
+ BIO_printf(err, "Printing Up to Level %ld\n", curr - tree->levels);
116
+ for (plev = tree->levels; plev != curr; plev++) {
117
+ BIO_printf(err, "Level %ld, flags = %x\n",
118
+ plev - tree->levels, plev->flags);
119
+ for (i = 0; i < sk_X509_POLICY_NODE_num(plev->nodes); i++) {
120
+ node = sk_X509_POLICY_NODE_value(plev->nodes, i);
121
+ X509_POLICY_NODE_print(err, node, 2);
122
+ expected_print(err, plev, node, 2);
123
+ BIO_printf(err, " Flags: %x\n", node->data->flags);
124
+ }
125
+ if (plev->anyPolicy)
126
+ X509_POLICY_NODE_print(err, plev->anyPolicy, 2);
127
+ }
128
+
129
+ BIO_free(err);
130
+
131
+ }
133
132
  #else
134
133
 
135
- #define tree_print(a,b,c) /* */
134
+ # define tree_print(a,b,c) /* */
136
135
 
137
136
  #endif
138
137
 
139
- /* Initialize policy tree. Return values:
140
- * 0 Some internal error occured.
141
- * -1 Inconsistent or invalid extensions in certificates.
142
- * 1 Tree initialized OK.
143
- * 2 Policy tree is empty.
144
- * 5 Tree OK and requireExplicitPolicy true.
145
- * 6 Tree empty and requireExplicitPolicy true.
138
+ /*
139
+ * Initialize policy tree. Return values: 0 Some internal error occured. -1
140
+ * Inconsistent or invalid extensions in certificates. 1 Tree initialized
141
+ * OK. 2 Policy tree is empty. 5 Tree OK and requireExplicitPolicy true. 6
142
+ * Tree empty and requireExplicitPolicy true.
146
143
  */
147
144
 
148
145
  static int tree_init(X509_POLICY_TREE **ptree, STACK_OF(X509) *certs,
149
- unsigned int flags)
150
- {
151
- X509_POLICY_TREE *tree;
152
- X509_POLICY_LEVEL *level;
153
- const X509_POLICY_CACHE *cache;
154
- X509_POLICY_DATA *data = NULL;
155
- X509 *x;
156
- int ret = 1;
157
- int i, n;
158
- int explicit_policy;
159
- int any_skip;
160
- int map_skip;
161
- *ptree = NULL;
162
- n = sk_X509_num(certs);
146
+ unsigned int flags)
147
+ {
148
+ X509_POLICY_TREE *tree;
149
+ X509_POLICY_LEVEL *level;
150
+ const X509_POLICY_CACHE *cache;
151
+ X509_POLICY_DATA *data = NULL;
152
+ X509 *x;
153
+ int ret = 1;
154
+ int i, n;
155
+ int explicit_policy;
156
+ int any_skip;
157
+ int map_skip;
158
+ *ptree = NULL;
159
+ n = sk_X509_num(certs);
163
160
 
164
161
  #if 0
165
- /* Disable policy mapping for now... */
166
- flags |= X509_V_FLAG_INHIBIT_MAP;
162
+ /* Disable policy mapping for now... */
163
+ flags |= X509_V_FLAG_INHIBIT_MAP;
167
164
  #endif
168
165
 
169
- if (flags & X509_V_FLAG_EXPLICIT_POLICY)
170
- explicit_policy = 0;
171
- else
172
- explicit_policy = n + 1;
173
-
174
- if (flags & X509_V_FLAG_INHIBIT_ANY)
175
- any_skip = 0;
176
- else
177
- any_skip = n + 1;
178
-
179
- if (flags & X509_V_FLAG_INHIBIT_MAP)
180
- map_skip = 0;
181
- else
182
- map_skip = n + 1;
183
-
184
- /* Can't do anything with just a trust anchor */
185
- if (n == 1)
186
- return 1;
187
- /* First setup policy cache in all certificates apart from the
188
- * trust anchor. Note any bad cache results on the way. Also can
189
- * calculate explicit_policy value at this point.
190
- */
191
- for (i = n - 2; i >= 0; i--)
192
- {
193
- x = sk_X509_value(certs, i);
194
- X509_check_purpose(x, -1, -1);
195
- cache = policy_cache_set(x);
196
- /* If cache NULL something bad happened: return immediately */
197
- if (cache == NULL)
198
- return 0;
199
- /* If inconsistent extensions keep a note of it but continue */
200
- if (x->ex_flags & EXFLAG_INVALID_POLICY)
201
- ret = -1;
202
- /* Otherwise if we have no data (hence no CertificatePolicies)
203
- * and haven't already set an inconsistent code note it.
204
- */
205
- else if ((ret == 1) && !cache->data)
206
- ret = 2;
207
- if (explicit_policy > 0)
208
- {
209
- if (!(x->ex_flags & EXFLAG_SI))
210
- explicit_policy--;
211
- if ((cache->explicit_skip != -1)
212
- && (cache->explicit_skip < explicit_policy))
213
- explicit_policy = cache->explicit_skip;
214
- }
215
- }
216
-
217
- if (ret != 1)
218
- {
219
- if (ret == 2 && !explicit_policy)
220
- return 6;
221
- return ret;
222
- }
223
-
224
-
225
- /* If we get this far initialize the tree */
226
-
227
- tree = OPENSSL_malloc(sizeof(X509_POLICY_TREE));
228
-
229
- if (!tree)
230
- return 0;
231
-
232
- tree->flags = 0;
233
- tree->levels = OPENSSL_malloc(sizeof(X509_POLICY_LEVEL) * n);
234
- tree->nlevel = 0;
235
- tree->extra_data = NULL;
236
- tree->auth_policies = NULL;
237
- tree->user_policies = NULL;
238
-
239
- if (!tree->levels)
240
- {
241
- OPENSSL_free(tree);
242
- return 0;
243
- }
244
-
245
- memset(tree->levels, 0, n * sizeof(X509_POLICY_LEVEL));
246
-
247
- tree->nlevel = n;
248
-
249
- level = tree->levels;
250
-
251
- /* Root data: initialize to anyPolicy */
252
-
253
- data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0);
254
-
255
- if (!data || !level_add_node(level, data, NULL, tree))
256
- goto bad_tree;
257
-
258
- for (i = n - 2; i >= 0; i--)
259
- {
260
- level++;
261
- x = sk_X509_value(certs, i);
262
- cache = policy_cache_set(x);
263
- level->cert = X509_up_ref(x);
264
-
265
- if (!cache->anyPolicy)
266
- level->flags |= X509_V_FLAG_INHIBIT_ANY;
267
-
268
- /* Determine inhibit any and inhibit map flags */
269
- if (any_skip == 0)
270
- {
271
- /* Any matching allowed if certificate is self
272
- * issued and not the last in the chain.
273
- */
274
- if (!(x->ex_flags & EXFLAG_SI) || (i == 0))
275
- level->flags |= X509_V_FLAG_INHIBIT_ANY;
276
- }
277
- else
278
- {
279
- if (!(x->ex_flags & EXFLAG_SI))
280
- any_skip--;
281
- if ((cache->any_skip >= 0)
282
- && (cache->any_skip < any_skip))
283
- any_skip = cache->any_skip;
284
- }
285
-
286
- if (map_skip == 0)
287
- level->flags |= X509_V_FLAG_INHIBIT_MAP;
288
- else
289
- {
290
- if (!(x->ex_flags & EXFLAG_SI))
291
- map_skip--;
292
- if ((cache->map_skip >= 0)
293
- && (cache->map_skip < map_skip))
294
- map_skip = cache->map_skip;
295
- }
296
-
297
- }
298
-
299
- *ptree = tree;
300
-
301
- if (explicit_policy)
302
- return 1;
303
- else
304
- return 5;
305
-
306
- bad_tree:
307
-
308
- X509_policy_tree_free(tree);
309
-
310
- return 0;
311
-
312
- }
166
+ if (flags & X509_V_FLAG_EXPLICIT_POLICY)
167
+ explicit_policy = 0;
168
+ else
169
+ explicit_policy = n + 1;
170
+
171
+ if (flags & X509_V_FLAG_INHIBIT_ANY)
172
+ any_skip = 0;
173
+ else
174
+ any_skip = n + 1;
175
+
176
+ if (flags & X509_V_FLAG_INHIBIT_MAP)
177
+ map_skip = 0;
178
+ else
179
+ map_skip = n + 1;
180
+
181
+ /* Can't do anything with just a trust anchor */
182
+ if (n == 1)
183
+ return 1;
184
+ /*
185
+ * First setup policy cache in all certificates apart from the trust
186
+ * anchor. Note any bad cache results on the way. Also can calculate
187
+ * explicit_policy value at this point.
188
+ */
189
+ for (i = n - 2; i >= 0; i--) {
190
+ x = sk_X509_value(certs, i);
191
+ X509_check_purpose(x, -1, -1);
192
+ cache = policy_cache_set(x);
193
+ /* If cache NULL something bad happened: return immediately */
194
+ if (cache == NULL)
195
+ return 0;
196
+ /*
197
+ * If inconsistent extensions keep a note of it but continue
198
+ */
199
+ if (x->ex_flags & EXFLAG_INVALID_POLICY)
200
+ ret = -1;
201
+ /*
202
+ * Otherwise if we have no data (hence no CertificatePolicies) and
203
+ * haven't already set an inconsistent code note it.
204
+ */
205
+ else if ((ret == 1) && !cache->data)
206
+ ret = 2;
207
+ if (explicit_policy > 0) {
208
+ if (!(x->ex_flags & EXFLAG_SI))
209
+ explicit_policy--;
210
+ if ((cache->explicit_skip != -1)
211
+ && (cache->explicit_skip < explicit_policy))
212
+ explicit_policy = cache->explicit_skip;
213
+ }
214
+ }
215
+
216
+ if (ret != 1) {
217
+ if (ret == 2 && !explicit_policy)
218
+ return 6;
219
+ return ret;
220
+ }
221
+
222
+ /* If we get this far initialize the tree */
223
+
224
+ tree = OPENSSL_malloc(sizeof(X509_POLICY_TREE));
225
+
226
+ if (!tree)
227
+ return 0;
228
+
229
+ tree->flags = 0;
230
+ tree->levels = OPENSSL_malloc(sizeof(X509_POLICY_LEVEL) * n);
231
+ tree->nlevel = 0;
232
+ tree->extra_data = NULL;
233
+ tree->auth_policies = NULL;
234
+ tree->user_policies = NULL;
235
+
236
+ if (!tree->levels) {
237
+ OPENSSL_free(tree);
238
+ return 0;
239
+ }
240
+
241
+ memset(tree->levels, 0, n * sizeof(X509_POLICY_LEVEL));
242
+
243
+ tree->nlevel = n;
244
+
245
+ level = tree->levels;
246
+
247
+ /* Root data: initialize to anyPolicy */
248
+
249
+ data = policy_data_new(NULL, OBJ_nid2obj(NID_any_policy), 0);
250
+
251
+ if (!data || !level_add_node(level, data, NULL, tree))
252
+ goto bad_tree;
253
+
254
+ for (i = n - 2; i >= 0; i--) {
255
+ level++;
256
+ x = sk_X509_value(certs, i);
257
+ cache = policy_cache_set(x);
258
+ level->cert = X509_up_ref(x);
259
+
260
+ if (!cache->anyPolicy)
261
+ level->flags |= X509_V_FLAG_INHIBIT_ANY;
262
+
263
+ /* Determine inhibit any and inhibit map flags */
264
+ if (any_skip == 0) {
265
+ /*
266
+ * Any matching allowed if certificate is self issued and not the
267
+ * last in the chain.
268
+ */
269
+ if (!(x->ex_flags & EXFLAG_SI) || (i == 0))
270
+ level->flags |= X509_V_FLAG_INHIBIT_ANY;
271
+ } else {
272
+ if (!(x->ex_flags & EXFLAG_SI))
273
+ any_skip--;
274
+ if ((cache->any_skip >= 0)
275
+ && (cache->any_skip < any_skip))
276
+ any_skip = cache->any_skip;
277
+ }
278
+
279
+ if (map_skip == 0)
280
+ level->flags |= X509_V_FLAG_INHIBIT_MAP;
281
+ else {
282
+ if (!(x->ex_flags & EXFLAG_SI))
283
+ map_skip--;
284
+ if ((cache->map_skip >= 0)
285
+ && (cache->map_skip < map_skip))
286
+ map_skip = cache->map_skip;
287
+ }
288
+
289
+ }
290
+
291
+ *ptree = tree;
292
+
293
+ if (explicit_policy)
294
+ return 1;
295
+ else
296
+ return 5;
297
+
298
+ bad_tree:
299
+
300
+ X509_policy_tree_free(tree);
301
+
302
+ return 0;
303
+
304
+ }
313
305
 
314
306
  static int tree_link_matching_nodes(X509_POLICY_LEVEL *curr,
315
- const X509_POLICY_DATA *data)
316
- {
317
- X509_POLICY_LEVEL *last = curr - 1;
318
- X509_POLICY_NODE *node;
319
- int matched = 0;
320
- size_t i;
321
- /* Iterate through all in nodes linking matches */
322
- for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++)
323
- {
324
- node = sk_X509_POLICY_NODE_value(last->nodes, i);
325
- if (policy_node_match(last, node, data->valid_policy))
326
- {
327
- if (!level_add_node(curr, data, node, NULL))
328
- return 0;
329
- matched = 1;
330
- }
331
- }
332
- if (!matched && last->anyPolicy)
333
- {
334
- if (!level_add_node(curr, data, last->anyPolicy, NULL))
335
- return 0;
336
- }
337
- return 1;
338
- }
339
-
340
- /* This corresponds to RFC3280 6.1.3(d)(1):
341
- * link any data from CertificatePolicies onto matching parent
342
- * or anyPolicy if no match.
307
+ const X509_POLICY_DATA *data)
308
+ {
309
+ X509_POLICY_LEVEL *last = curr - 1;
310
+ X509_POLICY_NODE *node;
311
+ int matched = 0;
312
+ size_t i;
313
+ /* Iterate through all in nodes linking matches */
314
+ for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++) {
315
+ node = sk_X509_POLICY_NODE_value(last->nodes, i);
316
+ if (policy_node_match(last, node, data->valid_policy)) {
317
+ if (!level_add_node(curr, data, node, NULL))
318
+ return 0;
319
+ matched = 1;
320
+ }
321
+ }
322
+ if (!matched && last->anyPolicy) {
323
+ if (!level_add_node(curr, data, last->anyPolicy, NULL))
324
+ return 0;
325
+ }
326
+ return 1;
327
+ }
328
+
329
+ /*
330
+ * This corresponds to RFC3280 6.1.3(d)(1): link any data from
331
+ * CertificatePolicies onto matching parent or anyPolicy if no match.
343
332
  */
344
333
 
345
334
  static int tree_link_nodes(X509_POLICY_LEVEL *curr,
346
- const X509_POLICY_CACHE *cache)
347
- {
348
- size_t i;
349
- X509_POLICY_DATA *data;
350
-
351
- for (i = 0; i < sk_X509_POLICY_DATA_num(cache->data); i++)
352
- {
353
- data = sk_X509_POLICY_DATA_value(cache->data, i);
354
- /* If a node is mapped any it doesn't have a corresponding
355
- * CertificatePolicies entry.
356
- * However such an identical node would be created
357
- * if anyPolicy matching is enabled because there would be
358
- * no match with the parent valid_policy_set. So we create
359
- * link because then it will have the mapping flags
360
- * right and we can prune it later.
361
- */
335
+ const X509_POLICY_CACHE *cache)
336
+ {
337
+ size_t i;
338
+ X509_POLICY_DATA *data;
339
+
340
+ for (i = 0; i < sk_X509_POLICY_DATA_num(cache->data); i++) {
341
+ data = sk_X509_POLICY_DATA_value(cache->data, i);
342
+ /*
343
+ * If a node is mapped any it doesn't have a corresponding
344
+ * CertificatePolicies entry. However such an identical node would
345
+ * be created if anyPolicy matching is enabled because there would be
346
+ * no match with the parent valid_policy_set. So we create link
347
+ * because then it will have the mapping flags right and we can prune
348
+ * it later.
349
+ */
362
350
  #if 0
363
- if ((data->flags & POLICY_DATA_FLAG_MAPPED_ANY)
364
- && !(curr->flags & X509_V_FLAG_INHIBIT_ANY))
365
- continue;
351
+ if ((data->flags & POLICY_DATA_FLAG_MAPPED_ANY)
352
+ && !(curr->flags & X509_V_FLAG_INHIBIT_ANY))
353
+ continue;
366
354
  #endif
367
- /* Look for matching nodes in previous level */
368
- if (!tree_link_matching_nodes(curr, data))
369
- return 0;
370
- }
371
- return 1;
372
- }
373
-
374
- /* This corresponds to RFC3280 6.1.3(d)(2):
375
- * Create new data for any unmatched policies in the parent and link
376
- * to anyPolicy.
355
+ /* Look for matching nodes in previous level */
356
+ if (!tree_link_matching_nodes(curr, data))
357
+ return 0;
358
+ }
359
+ return 1;
360
+ }
361
+
362
+ /*
363
+ * This corresponds to RFC3280 6.1.3(d)(2): Create new data for any unmatched
364
+ * policies in the parent and link to anyPolicy.
377
365
  */
378
366
 
379
367
  static int tree_add_unmatched(X509_POLICY_LEVEL *curr,
380
- const X509_POLICY_CACHE *cache,
381
- const ASN1_OBJECT *id,
382
- X509_POLICY_NODE *node,
383
- X509_POLICY_TREE *tree)
384
- {
385
- X509_POLICY_DATA *data;
386
- if (id == NULL)
387
- id = node->data->valid_policy;
388
- /* Create a new node with qualifiers from anyPolicy and
389
- * id from unmatched node.
390
- */
391
- data = policy_data_new(NULL, id, node_critical(node));
392
-
393
- if (data == NULL)
394
- return 0;
395
- /* Curr may not have anyPolicy */
396
- data->qualifier_set = cache->anyPolicy->qualifier_set;
397
- data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
398
- if (!level_add_node(curr, data, node, tree))
399
- {
400
- policy_data_free(data);
401
- return 0;
402
- }
403
-
404
- return 1;
405
- }
368
+ const X509_POLICY_CACHE *cache,
369
+ const ASN1_OBJECT *id,
370
+ X509_POLICY_NODE *node, X509_POLICY_TREE *tree)
371
+ {
372
+ X509_POLICY_DATA *data;
373
+ if (id == NULL)
374
+ id = node->data->valid_policy;
375
+ /*
376
+ * Create a new node with qualifiers from anyPolicy and id from unmatched
377
+ * node.
378
+ */
379
+ data = policy_data_new(NULL, id, node_critical(node));
380
+
381
+ if (data == NULL)
382
+ return 0;
383
+ /* Curr may not have anyPolicy */
384
+ data->qualifier_set = cache->anyPolicy->qualifier_set;
385
+ data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
386
+ if (!level_add_node(curr, data, node, tree)) {
387
+ policy_data_free(data);
388
+ return 0;
389
+ }
390
+
391
+ return 1;
392
+ }
406
393
 
407
394
  static int tree_link_unmatched(X509_POLICY_LEVEL *curr,
408
- const X509_POLICY_CACHE *cache,
409
- X509_POLICY_NODE *node,
410
- X509_POLICY_TREE *tree)
411
- {
412
- const X509_POLICY_LEVEL *last = curr - 1;
413
- size_t i;
414
-
415
- if ( (last->flags & X509_V_FLAG_INHIBIT_MAP)
416
- || !(node->data->flags & POLICY_DATA_FLAG_MAPPED))
417
- {
418
- /* If no policy mapping: matched if one child present */
419
- if (node->nchild)
420
- return 1;
421
- if (!tree_add_unmatched(curr, cache, NULL, node, tree))
422
- return 0;
423
- /* Add it */
424
- }
425
- else
426
- {
427
- /* If mapping: matched if one child per expected policy set */
428
- STACK_OF(ASN1_OBJECT) *expset = node->data->expected_policy_set;
429
- if ((size_t) node->nchild == sk_ASN1_OBJECT_num(expset))
430
- return 1;
431
- /* Locate unmatched nodes */
432
- for (i = 0; i < sk_ASN1_OBJECT_num(expset); i++)
433
- {
434
- ASN1_OBJECT *oid = sk_ASN1_OBJECT_value(expset, i);
435
- if (level_find_node(curr, node, oid))
436
- continue;
437
- if (!tree_add_unmatched(curr, cache, oid, node, tree))
438
- return 0;
439
- }
440
-
441
- }
442
-
443
- return 1;
444
-
445
- }
395
+ const X509_POLICY_CACHE *cache,
396
+ X509_POLICY_NODE *node, X509_POLICY_TREE *tree)
397
+ {
398
+ const X509_POLICY_LEVEL *last = curr - 1;
399
+ size_t i;
400
+
401
+ if ((last->flags & X509_V_FLAG_INHIBIT_MAP)
402
+ || !(node->data->flags & POLICY_DATA_FLAG_MAPPED)) {
403
+ /* If no policy mapping: matched if one child present */
404
+ if (node->nchild)
405
+ return 1;
406
+ if (!tree_add_unmatched(curr, cache, NULL, node, tree))
407
+ return 0;
408
+ /* Add it */
409
+ } else {
410
+ /* If mapping: matched if one child per expected policy set */
411
+ STACK_OF(ASN1_OBJECT) *expset = node->data->expected_policy_set;
412
+ if ((size_t)node->nchild == sk_ASN1_OBJECT_num(expset))
413
+ return 1;
414
+ /* Locate unmatched nodes */
415
+ for (i = 0; i < sk_ASN1_OBJECT_num(expset); i++) {
416
+ ASN1_OBJECT *oid = sk_ASN1_OBJECT_value(expset, i);
417
+ if (level_find_node(curr, node, oid))
418
+ continue;
419
+ if (!tree_add_unmatched(curr, cache, oid, node, tree))
420
+ return 0;
421
+ }
422
+
423
+ }
424
+
425
+ return 1;
426
+
427
+ }
446
428
 
447
429
  static int tree_link_any(X509_POLICY_LEVEL *curr,
448
- const X509_POLICY_CACHE *cache,
449
- X509_POLICY_TREE *tree)
450
- {
451
- size_t i;
452
- /*X509_POLICY_DATA *data;*/
453
- X509_POLICY_NODE *node;
454
- X509_POLICY_LEVEL *last = curr - 1;
455
-
456
- for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++)
457
- {
458
- node = sk_X509_POLICY_NODE_value(last->nodes, i);
459
-
460
- if (!tree_link_unmatched(curr, cache, node, tree))
461
- return 0;
430
+ const X509_POLICY_CACHE *cache,
431
+ X509_POLICY_TREE *tree)
432
+ {
433
+ size_t i;
434
+ /*
435
+ * X509_POLICY_DATA *data;
436
+ */
437
+ X509_POLICY_NODE *node;
438
+ X509_POLICY_LEVEL *last = curr - 1;
439
+
440
+ for (i = 0; i < sk_X509_POLICY_NODE_num(last->nodes); i++) {
441
+ node = sk_X509_POLICY_NODE_value(last->nodes, i);
442
+
443
+ if (!tree_link_unmatched(curr, cache, node, tree))
444
+ return 0;
462
445
 
463
446
  #if 0
464
447
 
465
- /* Skip any node with any children: we only want unmathced
466
- * nodes.
467
- *
468
- * Note: need something better for policy mapping
469
- * because each node may have multiple children
470
- */
471
- if (node->nchild)
472
- continue;
473
-
474
- /* Create a new node with qualifiers from anyPolicy and
475
- * id from unmatched node.
476
- */
477
- data = policy_data_new(NULL, node->data->valid_policy,
478
- node_critical(node));
479
-
480
- if (data == NULL)
481
- return 0;
482
- /* Curr may not have anyPolicy */
483
- data->qualifier_set = cache->anyPolicy->qualifier_set;
484
- data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
485
- if (!level_add_node(curr, data, node, tree))
486
- {
487
- policy_data_free(data);
488
- return 0;
489
- }
490
-
448
+ /*
449
+ * Skip any node with any children: we only want unmathced nodes.
450
+ * Note: need something better for policy mapping because each node
451
+ * may have multiple children
452
+ */
453
+ if (node->nchild)
454
+ continue;
455
+
456
+ /*
457
+ * Create a new node with qualifiers from anyPolicy and id from
458
+ * unmatched node.
459
+ */
460
+ data = policy_data_new(NULL, node->data->valid_policy,
461
+ node_critical(node));
462
+
463
+ if (data == NULL)
464
+ return 0;
465
+ /* Curr may not have anyPolicy */
466
+ data->qualifier_set = cache->anyPolicy->qualifier_set;
467
+ data->flags |= POLICY_DATA_FLAG_SHARED_QUALIFIERS;
468
+ if (!level_add_node(curr, data, node, tree)) {
469
+ policy_data_free(data);
470
+ return 0;
471
+ }
491
472
  #endif
492
473
 
493
- }
494
- /* Finally add link to anyPolicy */
495
- if (last->anyPolicy)
496
- {
497
- if (!level_add_node(curr, cache->anyPolicy,
498
- last->anyPolicy, NULL))
499
- return 0;
500
- }
501
- return 1;
502
- }
503
-
504
- /* Prune the tree: delete any child mapped child data on the current level
474
+ }
475
+ /* Finally add link to anyPolicy */
476
+ if (last->anyPolicy) {
477
+ if (!level_add_node(curr, cache->anyPolicy, last->anyPolicy, NULL))
478
+ return 0;
479
+ }
480
+ return 1;
481
+ }
482
+
483
+ /*
484
+ * Prune the tree: delete any child mapped child data on the current level
505
485
  * then proceed up the tree deleting any data with no children. If we ever
506
486
  * have no data on a level we can halt because the tree will be empty.
507
487
  */
508
488
 
509
489
  static int tree_prune(X509_POLICY_TREE *tree, X509_POLICY_LEVEL *curr)
510
- {
511
- STACK_OF(X509_POLICY_NODE) *nodes;
512
- X509_POLICY_NODE *node;
513
- int i;
514
- nodes = curr->nodes;
515
- if (curr->flags & X509_V_FLAG_INHIBIT_MAP)
516
- {
517
- for (i = sk_X509_POLICY_NODE_num(nodes) - 1; i >= 0; i--)
518
- {
519
- node = sk_X509_POLICY_NODE_value(nodes, i);
520
- /* Delete any mapped data: see RFC3280 XXXX */
521
- if (node->data->flags & POLICY_DATA_FLAG_MAP_MASK)
522
- {
523
- node->parent->nchild--;
524
- OPENSSL_free(node);
525
- (void)sk_X509_POLICY_NODE_delete(nodes,i);
526
- }
527
- }
528
- }
529
-
530
- for(;;) {
531
- --curr;
532
- nodes = curr->nodes;
533
- for (i = sk_X509_POLICY_NODE_num(nodes) - 1; i >= 0; i--)
534
- {
535
- node = sk_X509_POLICY_NODE_value(nodes, i);
536
- if (node->nchild == 0)
537
- {
538
- node->parent->nchild--;
539
- OPENSSL_free(node);
540
- (void)sk_X509_POLICY_NODE_delete(nodes, i);
541
- }
542
- }
543
- if (curr->anyPolicy && !curr->anyPolicy->nchild)
544
- {
545
- if (curr->anyPolicy->parent)
546
- curr->anyPolicy->parent->nchild--;
547
- OPENSSL_free(curr->anyPolicy);
548
- curr->anyPolicy = NULL;
549
- }
550
- if (curr == tree->levels)
551
- {
552
- /* If we zapped anyPolicy at top then tree is empty */
553
- if (!curr->anyPolicy)
554
- return 2;
555
- return 1;
556
- }
557
- }
558
-
559
- }
490
+ {
491
+ STACK_OF(X509_POLICY_NODE) *nodes;
492
+ X509_POLICY_NODE *node;
493
+ int i;
494
+ nodes = curr->nodes;
495
+ if (curr->flags & X509_V_FLAG_INHIBIT_MAP) {
496
+ for (i = sk_X509_POLICY_NODE_num(nodes) - 1; i >= 0; i--) {
497
+ node = sk_X509_POLICY_NODE_value(nodes, i);
498
+ /* Delete any mapped data: see RFC3280 XXXX */
499
+ if (node->data->flags & POLICY_DATA_FLAG_MAP_MASK) {
500
+ node->parent->nchild--;
501
+ OPENSSL_free(node);
502
+ (void)sk_X509_POLICY_NODE_delete(nodes, i);
503
+ }
504
+ }
505
+ }
506
+
507
+ for (;;) {
508
+ --curr;
509
+ nodes = curr->nodes;
510
+ for (i = sk_X509_POLICY_NODE_num(nodes) - 1; i >= 0; i--) {
511
+ node = sk_X509_POLICY_NODE_value(nodes, i);
512
+ if (node->nchild == 0) {
513
+ node->parent->nchild--;
514
+ OPENSSL_free(node);
515
+ (void)sk_X509_POLICY_NODE_delete(nodes, i);
516
+ }
517
+ }
518
+ if (curr->anyPolicy && !curr->anyPolicy->nchild) {
519
+ if (curr->anyPolicy->parent)
520
+ curr->anyPolicy->parent->nchild--;
521
+ OPENSSL_free(curr->anyPolicy);
522
+ curr->anyPolicy = NULL;
523
+ }
524
+ if (curr == tree->levels) {
525
+ /* If we zapped anyPolicy at top then tree is empty */
526
+ if (!curr->anyPolicy)
527
+ return 2;
528
+ return 1;
529
+ }
530
+ }
531
+
532
+ }
560
533
 
561
534
  static int tree_add_auth_node(STACK_OF(X509_POLICY_NODE) **pnodes,
562
- X509_POLICY_NODE *pcy)
563
- {
564
- if (!*pnodes)
565
- {
566
- *pnodes = policy_node_cmp_new();
567
- if (!*pnodes)
568
- return 0;
569
- }
570
- else if (sk_X509_POLICY_NODE_find(*pnodes, NULL, pcy))
571
- return 1;
572
-
573
- if (!sk_X509_POLICY_NODE_push(*pnodes, pcy))
574
- return 0;
575
-
576
- return 1;
577
-
578
- }
579
-
580
- /* Calculate the authority set based on policy tree.
581
- * The 'pnodes' parameter is used as a store for the set of policy nodes
582
- * used to calculate the user set. If the authority set is not anyPolicy
583
- * then pnodes will just point to the authority set. If however the authority
584
- * set is anyPolicy then the set of valid policies (other than anyPolicy)
585
- * is store in pnodes. The return value of '2' is used in this case to indicate
586
- * that pnodes should be freed.
535
+ X509_POLICY_NODE *pcy)
536
+ {
537
+ if (!*pnodes) {
538
+ *pnodes = policy_node_cmp_new();
539
+ if (!*pnodes)
540
+ return 0;
541
+ } else if (sk_X509_POLICY_NODE_find(*pnodes, NULL, pcy))
542
+ return 1;
543
+
544
+ if (!sk_X509_POLICY_NODE_push(*pnodes, pcy))
545
+ return 0;
546
+
547
+ return 1;
548
+
549
+ }
550
+
551
+ /*
552
+ * Calculate the authority set based on policy tree. The 'pnodes' parameter
553
+ * is used as a store for the set of policy nodes used to calculate the user
554
+ * set. If the authority set is not anyPolicy then pnodes will just point to
555
+ * the authority set. If however the authority set is anyPolicy then the set
556
+ * of valid policies (other than anyPolicy) is store in pnodes. The return
557
+ * value of '2' is used in this case to indicate that pnodes should be freed.
587
558
  */
588
559
 
589
560
  static int tree_calculate_authority_set(X509_POLICY_TREE *tree,
590
- STACK_OF(X509_POLICY_NODE) **pnodes)
591
- {
592
- X509_POLICY_LEVEL *curr;
593
- X509_POLICY_NODE *node, *anyptr;
594
- STACK_OF(X509_POLICY_NODE) **addnodes;
595
- int i;
596
- size_t j;
597
- curr = tree->levels + tree->nlevel - 1;
598
-
599
- /* If last level contains anyPolicy set is anyPolicy */
600
- if (curr->anyPolicy)
601
- {
602
- if (!tree_add_auth_node(&tree->auth_policies, curr->anyPolicy))
603
- return 0;
604
- addnodes = pnodes;
605
- }
606
- else
607
- /* Add policies to authority set */
608
- addnodes = &tree->auth_policies;
609
-
610
- curr = tree->levels;
611
- for (i = 1; i < tree->nlevel; i++)
612
- {
613
- /* If no anyPolicy node on this this level it can't
614
- * appear on lower levels so end search.
615
- */
616
- if (!(anyptr = curr->anyPolicy))
617
- break;
618
- curr++;
619
- for (j = 0; j < sk_X509_POLICY_NODE_num(curr->nodes); j++)
620
- {
621
- node = sk_X509_POLICY_NODE_value(curr->nodes, j);
622
- if ((node->parent == anyptr)
623
- && !tree_add_auth_node(addnodes, node))
624
- return 0;
625
- }
626
- }
627
-
628
- if (addnodes == pnodes)
629
- return 2;
630
-
631
- *pnodes = tree->auth_policies;
632
-
633
- return 1;
634
- }
561
+ STACK_OF(X509_POLICY_NODE) **pnodes)
562
+ {
563
+ X509_POLICY_LEVEL *curr;
564
+ X509_POLICY_NODE *node, *anyptr;
565
+ STACK_OF(X509_POLICY_NODE) **addnodes;
566
+ int i;
567
+ size_t j;
568
+ curr = tree->levels + tree->nlevel - 1;
569
+
570
+ /* If last level contains anyPolicy set is anyPolicy */
571
+ if (curr->anyPolicy) {
572
+ if (!tree_add_auth_node(&tree->auth_policies, curr->anyPolicy))
573
+ return 0;
574
+ addnodes = pnodes;
575
+ } else
576
+ /* Add policies to authority set */
577
+ addnodes = &tree->auth_policies;
578
+
579
+ curr = tree->levels;
580
+ for (i = 1; i < tree->nlevel; i++) {
581
+ /*
582
+ * If no anyPolicy node on this this level it can't appear on lower
583
+ * levels so end search.
584
+ */
585
+ if (!(anyptr = curr->anyPolicy))
586
+ break;
587
+ curr++;
588
+ for (j = 0; j < sk_X509_POLICY_NODE_num(curr->nodes); j++) {
589
+ node = sk_X509_POLICY_NODE_value(curr->nodes, j);
590
+ if ((node->parent == anyptr)
591
+ && !tree_add_auth_node(addnodes, node))
592
+ return 0;
593
+ }
594
+ }
595
+
596
+ if (addnodes == pnodes)
597
+ return 2;
598
+
599
+ *pnodes = tree->auth_policies;
600
+
601
+ return 1;
602
+ }
635
603
 
636
604
  static int tree_calculate_user_set(X509_POLICY_TREE *tree,
637
- STACK_OF(ASN1_OBJECT) *policy_oids,
638
- STACK_OF(X509_POLICY_NODE) *auth_nodes)
639
- {
640
- size_t i;
641
- X509_POLICY_NODE *node;
642
- ASN1_OBJECT *oid;
643
-
644
- X509_POLICY_NODE *anyPolicy;
645
- X509_POLICY_DATA *extra;
646
-
647
- /* Check if anyPolicy present in authority constrained policy set:
648
- * this will happen if it is a leaf node.
649
- */
650
-
651
- if (sk_ASN1_OBJECT_num(policy_oids) <= 0)
652
- return 1;
653
-
654
- anyPolicy = tree->levels[tree->nlevel - 1].anyPolicy;
655
-
656
- for (i = 0; i < sk_ASN1_OBJECT_num(policy_oids); i++)
657
- {
658
- oid = sk_ASN1_OBJECT_value(policy_oids, i);
659
- if (OBJ_obj2nid(oid) == NID_any_policy)
660
- {
661
- tree->flags |= POLICY_FLAG_ANY_POLICY;
662
- return 1;
663
- }
664
- }
665
-
666
- for (i = 0; i < sk_ASN1_OBJECT_num(policy_oids); i++)
667
- {
668
- oid = sk_ASN1_OBJECT_value(policy_oids, i);
669
- node = tree_find_sk(auth_nodes, oid);
670
- if (!node)
671
- {
672
- if (!anyPolicy)
673
- continue;
674
- /* Create a new node with policy ID from user set
675
- * and qualifiers from anyPolicy.
676
- */
677
- extra = policy_data_new(NULL, oid,
678
- node_critical(anyPolicy));
679
- if (!extra)
680
- return 0;
681
- extra->qualifier_set = anyPolicy->data->qualifier_set;
682
- extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS
683
- | POLICY_DATA_FLAG_EXTRA_NODE;
684
- node = level_add_node(NULL, extra, anyPolicy->parent,
685
- tree);
686
- }
687
- if (!tree->user_policies)
688
- {
689
- tree->user_policies = sk_X509_POLICY_NODE_new_null();
690
- if (!tree->user_policies)
691
- return 1;
692
- }
693
- if (!sk_X509_POLICY_NODE_push(tree->user_policies, node))
694
- return 0;
695
- }
696
- return 1;
697
-
698
- }
605
+ STACK_OF(ASN1_OBJECT) *policy_oids,
606
+ STACK_OF(X509_POLICY_NODE) *auth_nodes)
607
+ {
608
+ size_t i;
609
+ X509_POLICY_NODE *node;
610
+ ASN1_OBJECT *oid;
611
+
612
+ X509_POLICY_NODE *anyPolicy;
613
+ X509_POLICY_DATA *extra;
614
+
615
+ /*
616
+ * Check if anyPolicy present in authority constrained policy set: this
617
+ * will happen if it is a leaf node.
618
+ */
619
+
620
+ if (sk_ASN1_OBJECT_num(policy_oids) <= 0)
621
+ return 1;
622
+
623
+ anyPolicy = tree->levels[tree->nlevel - 1].anyPolicy;
624
+
625
+ for (i = 0; i < sk_ASN1_OBJECT_num(policy_oids); i++) {
626
+ oid = sk_ASN1_OBJECT_value(policy_oids, i);
627
+ if (OBJ_obj2nid(oid) == NID_any_policy) {
628
+ tree->flags |= POLICY_FLAG_ANY_POLICY;
629
+ return 1;
630
+ }
631
+ }
632
+
633
+ for (i = 0; i < sk_ASN1_OBJECT_num(policy_oids); i++) {
634
+ oid = sk_ASN1_OBJECT_value(policy_oids, i);
635
+ node = tree_find_sk(auth_nodes, oid);
636
+ if (!node) {
637
+ if (!anyPolicy)
638
+ continue;
639
+ /*
640
+ * Create a new node with policy ID from user set and qualifiers
641
+ * from anyPolicy.
642
+ */
643
+ extra = policy_data_new(NULL, oid, node_critical(anyPolicy));
644
+ if (!extra)
645
+ return 0;
646
+ extra->qualifier_set = anyPolicy->data->qualifier_set;
647
+ extra->flags = POLICY_DATA_FLAG_SHARED_QUALIFIERS
648
+ | POLICY_DATA_FLAG_EXTRA_NODE;
649
+ node = level_add_node(NULL, extra, anyPolicy->parent, tree);
650
+ }
651
+ if (!tree->user_policies) {
652
+ tree->user_policies = sk_X509_POLICY_NODE_new_null();
653
+ if (!tree->user_policies)
654
+ return 1;
655
+ }
656
+ if (!sk_X509_POLICY_NODE_push(tree->user_policies, node))
657
+ return 0;
658
+ }
659
+ return 1;
660
+
661
+ }
699
662
 
700
663
  static int tree_evaluate(X509_POLICY_TREE *tree)
701
- {
702
- int ret, i;
703
- X509_POLICY_LEVEL *curr = tree->levels + 1;
704
- const X509_POLICY_CACHE *cache;
705
-
706
- for(i = 1; i < tree->nlevel; i++, curr++)
707
- {
708
- cache = policy_cache_set(curr->cert);
709
- if (!tree_link_nodes(curr, cache))
710
- return 0;
711
-
712
- if (!(curr->flags & X509_V_FLAG_INHIBIT_ANY)
713
- && !tree_link_any(curr, cache, tree))
714
- return 0;
715
- tree_print("before tree_prune()", tree, curr);
716
- ret = tree_prune(tree, curr);
717
- if (ret != 1)
718
- return ret;
719
- }
720
-
721
- return 1;
722
-
723
- }
664
+ {
665
+ int ret, i;
666
+ X509_POLICY_LEVEL *curr = tree->levels + 1;
667
+ const X509_POLICY_CACHE *cache;
724
668
 
725
- static void exnode_free(X509_POLICY_NODE *node)
726
- {
727
- if (node->data && (node->data->flags & POLICY_DATA_FLAG_EXTRA_NODE))
728
- OPENSSL_free(node);
729
- }
669
+ for (i = 1; i < tree->nlevel; i++, curr++) {
670
+ cache = policy_cache_set(curr->cert);
671
+ if (!tree_link_nodes(curr, cache))
672
+ return 0;
673
+
674
+ if (!(curr->flags & X509_V_FLAG_INHIBIT_ANY)
675
+ && !tree_link_any(curr, cache, tree))
676
+ return 0;
677
+ tree_print("before tree_prune()", tree, curr);
678
+ ret = tree_prune(tree, curr);
679
+ if (ret != 1)
680
+ return ret;
681
+ }
682
+
683
+ return 1;
730
684
 
685
+ }
686
+
687
+ static void exnode_free(X509_POLICY_NODE *node)
688
+ {
689
+ if (node->data && (node->data->flags & POLICY_DATA_FLAG_EXTRA_NODE))
690
+ OPENSSL_free(node);
691
+ }
731
692
 
732
693
  void X509_policy_tree_free(X509_POLICY_TREE *tree)
733
- {
734
- X509_POLICY_LEVEL *curr;
735
- int i;
736
-
737
- if (!tree)
738
- return;
739
-
740
- sk_X509_POLICY_NODE_free(tree->auth_policies);
741
- sk_X509_POLICY_NODE_pop_free(tree->user_policies, exnode_free);
742
-
743
- for(i = 0, curr = tree->levels; i < tree->nlevel; i++, curr++)
744
- {
745
- if (curr->cert)
746
- X509_free(curr->cert);
747
- if (curr->nodes)
748
- sk_X509_POLICY_NODE_pop_free(curr->nodes,
749
- policy_node_free);
750
- if (curr->anyPolicy)
751
- policy_node_free(curr->anyPolicy);
752
- }
753
-
754
- if (tree->extra_data)
755
- sk_X509_POLICY_DATA_pop_free(tree->extra_data,
756
- policy_data_free);
757
-
758
- OPENSSL_free(tree->levels);
759
- OPENSSL_free(tree);
760
-
761
- }
762
-
763
- /* Application policy checking function.
764
- * Return codes:
765
- * 0 Internal Error.
766
- * 1 Successful.
767
- * -1 One or more certificates contain invalid or inconsistent extensions
768
- * -2 User constrained policy set empty and requireExplicit true.
694
+ {
695
+ X509_POLICY_LEVEL *curr;
696
+ int i;
697
+
698
+ if (!tree)
699
+ return;
700
+
701
+ sk_X509_POLICY_NODE_free(tree->auth_policies);
702
+ sk_X509_POLICY_NODE_pop_free(tree->user_policies, exnode_free);
703
+
704
+ for (i = 0, curr = tree->levels; i < tree->nlevel; i++, curr++) {
705
+ if (curr->cert)
706
+ X509_free(curr->cert);
707
+ if (curr->nodes)
708
+ sk_X509_POLICY_NODE_pop_free(curr->nodes, policy_node_free);
709
+ if (curr->anyPolicy)
710
+ policy_node_free(curr->anyPolicy);
711
+ }
712
+
713
+ if (tree->extra_data)
714
+ sk_X509_POLICY_DATA_pop_free(tree->extra_data, policy_data_free);
715
+
716
+ OPENSSL_free(tree->levels);
717
+ OPENSSL_free(tree);
718
+
719
+ }
720
+
721
+ /*
722
+ * Application policy checking function. Return codes: 0 Internal Error. 1
723
+ * Successful. -1 One or more certificates contain invalid or inconsistent
724
+ * extensions -2 User constrained policy set empty and requireExplicit true.
769
725
  */
770
726
 
771
727
  int X509_policy_check(X509_POLICY_TREE **ptree, int *pexplicit_policy,
772
- STACK_OF(X509) *certs,
773
- STACK_OF(ASN1_OBJECT) *policy_oids,
774
- unsigned int flags)
775
- {
776
- int ret;
777
- X509_POLICY_TREE *tree = NULL;
778
- STACK_OF(X509_POLICY_NODE) *nodes, *auth_nodes = NULL;
779
- *ptree = NULL;
728
+ STACK_OF(X509) *certs,
729
+ STACK_OF(ASN1_OBJECT) *policy_oids, unsigned int flags)
730
+ {
731
+ int ret;
732
+ X509_POLICY_TREE *tree = NULL;
733
+ STACK_OF(X509_POLICY_NODE) *nodes, *auth_nodes = NULL;
734
+ *ptree = NULL;
780
735
 
781
- *pexplicit_policy = 0;
782
- ret = tree_init(&tree, certs, flags);
736
+ *pexplicit_policy = 0;
737
+ ret = tree_init(&tree, certs, flags);
783
738
 
784
- switch (ret)
785
- {
739
+ switch (ret) {
786
740
 
787
- /* Tree empty requireExplicit False: OK */
788
- case 2:
789
- return 1;
741
+ /* Tree empty requireExplicit False: OK */
742
+ case 2:
743
+ return 1;
790
744
 
791
- /* Some internal error */
792
- case -1:
793
- return -1;
745
+ /* Some internal error */
746
+ case -1:
747
+ return -1;
794
748
 
795
- /* Some internal error */
796
- case 0:
797
- return 0;
749
+ /* Some internal error */
750
+ case 0:
751
+ return 0;
798
752
 
799
- /* Tree empty requireExplicit True: Error */
753
+ /* Tree empty requireExplicit True: Error */
800
754
 
801
- case 6:
802
- *pexplicit_policy = 1;
803
- return -2;
755
+ case 6:
756
+ *pexplicit_policy = 1;
757
+ return -2;
804
758
 
805
- /* Tree OK requireExplicit True: OK and continue */
806
- case 5:
807
- *pexplicit_policy = 1;
808
- break;
759
+ /* Tree OK requireExplicit True: OK and continue */
760
+ case 5:
761
+ *pexplicit_policy = 1;
762
+ break;
809
763
 
810
- /* Tree OK: continue */
764
+ /* Tree OK: continue */
811
765
 
812
- case 1:
813
- if (!tree)
814
- /*
815
- * tree_init() returns success and a null tree
816
- * if it's just looking at a trust anchor.
817
- * I'm not sure that returning success here is
818
- * correct, but I'm sure that reporting this
819
- * as an internal error which our caller
820
- * interprets as a malloc failure is wrong.
821
- */
822
- return 1;
823
- break;
824
- }
766
+ case 1:
767
+ if (!tree)
768
+ /*
769
+ * tree_init() returns success and a null tree
770
+ * if it's just looking at a trust anchor.
771
+ * I'm not sure that returning success here is
772
+ * correct, but I'm sure that reporting this
773
+ * as an internal error which our caller
774
+ * interprets as a malloc failure is wrong.
775
+ */
776
+ return 1;
777
+ break;
778
+ }
825
779
 
826
- if (!tree) goto error;
827
- ret = tree_evaluate(tree);
780
+ if (!tree)
781
+ goto error;
782
+ ret = tree_evaluate(tree);
828
783
 
829
- tree_print("tree_evaluate()", tree, NULL);
784
+ tree_print("tree_evaluate()", tree, NULL);
830
785
 
831
- if (ret <= 0)
832
- goto error;
786
+ if (ret <= 0)
787
+ goto error;
833
788
 
834
- /* Return value 2 means tree empty */
835
- if (ret == 2)
836
- {
837
- X509_policy_tree_free(tree);
838
- if (*pexplicit_policy)
839
- return -2;
840
- else
841
- return 1;
842
- }
789
+ /* Return value 2 means tree empty */
790
+ if (ret == 2) {
791
+ X509_policy_tree_free(tree);
792
+ if (*pexplicit_policy)
793
+ return -2;
794
+ else
795
+ return 1;
796
+ }
843
797
 
844
- /* Tree is not empty: continue */
798
+ /* Tree is not empty: continue */
845
799
 
846
- ret = tree_calculate_authority_set(tree, &auth_nodes);
800
+ ret = tree_calculate_authority_set(tree, &auth_nodes);
847
801
 
848
- if (!ret)
849
- goto error;
802
+ if (!ret)
803
+ goto error;
850
804
 
851
- if (!tree_calculate_user_set(tree, policy_oids, auth_nodes))
852
- goto error;
853
-
854
- if (ret == 2)
855
- sk_X509_POLICY_NODE_free(auth_nodes);
805
+ if (!tree_calculate_user_set(tree, policy_oids, auth_nodes))
806
+ goto error;
856
807
 
857
- if (tree)
858
- *ptree = tree;
808
+ if (ret == 2)
809
+ sk_X509_POLICY_NODE_free(auth_nodes);
859
810
 
860
- if (*pexplicit_policy)
861
- {
862
- nodes = X509_policy_tree_get0_user_policies(tree);
863
- if (sk_X509_POLICY_NODE_num(nodes) <= 0)
864
- return -2;
865
- }
811
+ if (tree)
812
+ *ptree = tree;
866
813
 
867
- return 1;
814
+ if (*pexplicit_policy) {
815
+ nodes = X509_policy_tree_get0_user_policies(tree);
816
+ if (sk_X509_POLICY_NODE_num(nodes) <= 0)
817
+ return -2;
818
+ }
868
819
 
869
- error:
820
+ return 1;
870
821
 
871
- X509_policy_tree_free(tree);
822
+ error:
872
823
 
873
- return 0;
824
+ X509_policy_tree_free(tree);
874
825
 
875
- }
826
+ return 0;
876
827
 
828
+ }