policies.h 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. /* Copyright (c) 2001 Matej Pfajfar.
  2. * Copyright (c) 2001-2004, Roger Dingledine.
  3. * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson.
  4. * Copyright (c) 2007-2015, The Tor Project, Inc. */
  5. /* See LICENSE for licensing information */
  6. /**
  7. * \file policies.h
  8. * \brief Header file for policies.c.
  9. **/
  10. #ifndef TOR_POLICIES_H
  11. #define TOR_POLICIES_H
  12. /* (length of
  13. * "accept6 [ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff]/128:65535-65535\n"
  14. * plus a terminating NUL, rounded up to a nice number.)
  15. */
  16. #define POLICY_BUF_LEN 72
  17. #define EXIT_POLICY_IPV6_ENABLED (1 << 0)
  18. #define EXIT_POLICY_REJECT_PRIVATE (1 << 1)
  19. #define EXIT_POLICY_ADD_DEFAULT (1 << 2)
  20. typedef enum firewall_connection_t {
  21. FIREWALL_OR_CONNECTION = 0,
  22. FIREWALL_DIR_CONNECTION = 1
  23. } firewall_connection_t;
  24. typedef int exit_policy_parser_cfg_t;
  25. int firewall_is_fascist_or(void);
  26. int fascist_firewall_use_ipv6(const or_options_t *options);
  27. int fascist_firewall_prefer_ipv6_orport(const or_options_t *options);
  28. int fascist_firewall_prefer_ipv6_dirport(const or_options_t *options);
  29. int fascist_firewall_allows_address_addr(const tor_addr_t *addr, uint16_t port,
  30. firewall_connection_t fw_connection,
  31. int pref_only);
  32. int fascist_firewall_allows_address_ap(const tor_addr_port_t *ap,
  33. firewall_connection_t fw_connection,
  34. int pref_only);
  35. int fascist_firewall_allows_address_ipv4h(uint32_t ipv4h_or_addr,
  36. uint16_t ipv4_or_port,
  37. firewall_connection_t fw_connection,
  38. int pref_only);
  39. int fascist_firewall_allows_rs(const routerstatus_t *rs,
  40. firewall_connection_t fw_connection,
  41. int pref_only);
  42. int fascist_firewall_allows_node(const node_t *node,
  43. firewall_connection_t fw_connection,
  44. int pref_only);
  45. int fascist_firewall_allows_dir_server(const dir_server_t *ds,
  46. firewall_connection_t fw_connection,
  47. int pref_only);
  48. const tor_addr_port_t * fascist_firewall_choose_address(
  49. const tor_addr_port_t *a,
  50. const tor_addr_port_t *b,
  51. int want_a,
  52. firewall_connection_t fw_connection,
  53. int pref_only);
  54. int fascist_firewall_choose_address_rs(const routerstatus_t *rs,
  55. firewall_connection_t fw_connection,
  56. int pref_only, tor_addr_port_t* ap);
  57. int fascist_firewall_choose_address_node(const node_t *node,
  58. firewall_connection_t fw_connection,
  59. int pref_only, tor_addr_port_t* ap);
  60. int fascist_firewall_choose_address_dir_server(const dir_server_t *ds,
  61. firewall_connection_t fw_connection,
  62. int pref_only, tor_addr_port_t* ap);
  63. int dir_policy_permits_address(const tor_addr_t *addr);
  64. int socks_policy_permits_address(const tor_addr_t *addr);
  65. int authdir_policy_permits_address(uint32_t addr, uint16_t port);
  66. int authdir_policy_valid_address(uint32_t addr, uint16_t port);
  67. int authdir_policy_badexit_address(uint32_t addr, uint16_t port);
  68. int validate_addr_policies(const or_options_t *options, char **msg);
  69. void policy_expand_private(smartlist_t **policy);
  70. void policy_expand_unspec(smartlist_t **policy);
  71. int policies_parse_from_options(const or_options_t *options);
  72. addr_policy_t *addr_policy_get_canonical_entry(addr_policy_t *ent);
  73. int cmp_addr_policies(smartlist_t *a, smartlist_t *b);
  74. MOCK_DECL(addr_policy_result_t, compare_tor_addr_to_addr_policy,
  75. (const tor_addr_t *addr, uint16_t port, const smartlist_t *policy));
  76. addr_policy_result_t compare_tor_addr_to_node_policy(const tor_addr_t *addr,
  77. uint16_t port, const node_t *node);
  78. int policies_parse_exit_policy_from_options(
  79. const or_options_t *or_options,
  80. uint32_t local_address,
  81. const tor_addr_t *ipv6_local_address,
  82. smartlist_t **result);
  83. int policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
  84. exit_policy_parser_cfg_t options,
  85. const smartlist_t *configured_addresses);
  86. void policies_parse_exit_policy_reject_private(
  87. smartlist_t **dest,
  88. int ipv6_exit,
  89. const smartlist_t *configured_addresses,
  90. int reject_interface_addresses,
  91. int reject_configured_port_addresses);
  92. void policies_exit_policy_append_reject_star(smartlist_t **dest);
  93. void addr_policy_append_reject_addr(smartlist_t **dest,
  94. const tor_addr_t *addr);
  95. void addr_policy_append_reject_addr_list(smartlist_t **dest,
  96. const smartlist_t *addrs);
  97. void policies_set_node_exitpolicy_to_reject_all(node_t *exitrouter);
  98. int exit_policy_is_general_exit(smartlist_t *policy);
  99. int policy_is_reject_star(const smartlist_t *policy, sa_family_t family);
  100. char * policy_dump_to_string(const smartlist_t *policy_list,
  101. int include_ipv4,
  102. int include_ipv6);
  103. int getinfo_helper_policies(control_connection_t *conn,
  104. const char *question, char **answer,
  105. const char **errmsg);
  106. int policy_write_item(char *buf, size_t buflen, const addr_policy_t *item,
  107. int format_for_desc);
  108. void addr_policy_list_free(smartlist_t *p);
  109. void addr_policy_free(addr_policy_t *p);
  110. void policies_free_all(void);
  111. char *policy_summarize(smartlist_t *policy, sa_family_t family);
  112. short_policy_t *parse_short_policy(const char *summary);
  113. char *write_short_policy(const short_policy_t *policy);
  114. void short_policy_free(short_policy_t *policy);
  115. int short_policy_is_reject_star(const short_policy_t *policy);
  116. addr_policy_result_t compare_tor_addr_to_short_policy(
  117. const tor_addr_t *addr, uint16_t port,
  118. const short_policy_t *policy);
  119. #ifdef POLICIES_PRIVATE
  120. STATIC void append_exit_policy_string(smartlist_t **policy, const char *more);
  121. STATIC int fascist_firewall_allows_address(const tor_addr_t *addr,
  122. uint16_t port,
  123. smartlist_t *firewall_policy,
  124. int pref_only, int pref_ipv6);
  125. #endif
  126. #endif