policies.h 3.8 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  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 int exit_policy_parser_cfg_t;
  21. int firewall_is_fascist_or(void);
  22. int fascist_firewall_allows_address_or(const tor_addr_t *addr, uint16_t port);
  23. int fascist_firewall_allows_or(const routerinfo_t *ri);
  24. int fascist_firewall_allows_node(const node_t *node);
  25. int fascist_firewall_allows_address_dir(const tor_addr_t *addr, uint16_t port);
  26. int dir_policy_permits_address(const tor_addr_t *addr);
  27. int socks_policy_permits_address(const tor_addr_t *addr);
  28. int authdir_policy_permits_address(uint32_t addr, uint16_t port);
  29. int authdir_policy_valid_address(uint32_t addr, uint16_t port);
  30. int authdir_policy_badexit_address(uint32_t addr, uint16_t port);
  31. int validate_addr_policies(const or_options_t *options, char **msg);
  32. void policy_expand_private(smartlist_t **policy);
  33. void policy_expand_unspec(smartlist_t **policy);
  34. int policies_parse_from_options(const or_options_t *options);
  35. addr_policy_t *addr_policy_get_canonical_entry(addr_policy_t *ent);
  36. int cmp_addr_policies(smartlist_t *a, smartlist_t *b);
  37. MOCK_DECL(addr_policy_result_t, compare_tor_addr_to_addr_policy,
  38. (const tor_addr_t *addr, uint16_t port, const smartlist_t *policy));
  39. addr_policy_result_t compare_tor_addr_to_node_policy(const tor_addr_t *addr,
  40. uint16_t port, const node_t *node);
  41. int policies_parse_exit_policy_from_options(const or_options_t *or_options,
  42. uint32_t local_address,
  43. tor_addr_t *ipv6_local_address,
  44. int reject_interface_addresses,
  45. smartlist_t **result);
  46. int policies_parse_exit_policy(config_line_t *cfg, smartlist_t **dest,
  47. exit_policy_parser_cfg_t options,
  48. uint32_t local_address,
  49. tor_addr_t *ipv6_local_address,
  50. int reject_interface_addresses);
  51. void policies_exit_policy_append_reject_star(smartlist_t **dest);
  52. void addr_policy_append_reject_addr(smartlist_t **dest,
  53. const tor_addr_t *addr);
  54. void policies_set_node_exitpolicy_to_reject_all(node_t *exitrouter);
  55. int exit_policy_is_general_exit(smartlist_t *policy);
  56. int policy_is_reject_star(const smartlist_t *policy, sa_family_t family);
  57. int getinfo_helper_policies(control_connection_t *conn,
  58. const char *question, char **answer,
  59. const char **errmsg);
  60. int policy_write_item(char *buf, size_t buflen, addr_policy_t *item,
  61. int format_for_desc);
  62. void addr_policy_list_free(smartlist_t *p);
  63. void addr_policy_free(addr_policy_t *p);
  64. void policies_free_all(void);
  65. char *policy_summarize(smartlist_t *policy, sa_family_t family);
  66. short_policy_t *parse_short_policy(const char *summary);
  67. char *write_short_policy(const short_policy_t *policy);
  68. void short_policy_free(short_policy_t *policy);
  69. int short_policy_is_reject_star(const short_policy_t *policy);
  70. addr_policy_result_t compare_tor_addr_to_short_policy(
  71. const tor_addr_t *addr, uint16_t port,
  72. const short_policy_t *policy);
  73. #endif