[Author Prev][Author Next][Thread Prev][Thread Next][Author Index][Thread Index]
[or-cvs] r16802: {tor} We should not alter an addr_policy_t that has been canonical (in tor/trunk: . src/common src/or)
Author: nickm
Date: 2008-09-08 23:48:01 -0400 (Mon, 08 Sep 2008)
New Revision: 16802
Modified:
tor/trunk/ChangeLog
tor/trunk/src/common/container.h
tor/trunk/src/or/policies.c
Log:
We should not alter an addr_policy_t that has been canonicalized.
Modified: tor/trunk/ChangeLog
===================================================================
--- tor/trunk/ChangeLog 2008-09-08 21:13:16 UTC (rev 16801)
+++ tor/trunk/ChangeLog 2008-09-09 03:48:01 UTC (rev 16802)
@@ -10,6 +10,8 @@
say which? -NM)
- When testing for libevent functions, set the LDFLAGS variable
correctly. (Found by Riastradh.)
+ - Fix an assertion bug in parsing policy-related options; possible fix
+ for bug 811.
o Minor features:
- Use a lockfile to make sure that two Tor processes are not
Modified: tor/trunk/src/common/container.h
===================================================================
--- tor/trunk/src/common/container.h 2008-09-08 21:13:16 UTC (rev 16801)
+++ tor/trunk/src/common/container.h 2008-09-09 03:48:01 UTC (rev 16802)
@@ -222,6 +222,15 @@
--var ## _sl_len; \
STMT_END
+/** Helper: While in a SMARTLIST_FOREACH loop over the list <b>sl</b> indexed
+ * with the variable <b>var</b>, replace the current element with <b>val</b>.
+ * Does not deallocate the current value of <b>var</b>.
+ */
+#define SMARTLIST_REPLACE_CURRENT(sl, var, val) \
+ STMT_BEGIN \
+ smartlist_set(sl, var ## _sl_idx, val); \
+ STMT_END
+
/* Helper: Given two lists of items, possibly of different types, such that
* both lists are sorted on some common field (as determened by a comparison
* expression <b>cmpexpr</b>), and such that one list (<b>sl1</b>) has no
Modified: tor/trunk/src/or/policies.c
===================================================================
--- tor/trunk/src/or/policies.c 2008-09-08 21:13:16 UTC (rev 16801)
+++ tor/trunk/src/or/policies.c 2008-09-09 03:48:01 UTC (rev 16802)
@@ -102,6 +102,10 @@
* Given a linked list of config lines containing "allow" and "deny"
* tokens, parse them and append the result to <b>dest</b>. Return -1
* if any tokens are malformed (and don't append any), else return 0.
+ *
+ * If <b>assume_action</b> is nonnegative, then insert its action
+ * (ADDR_POLICY_ACCEPT or ADDR_POLICY_REJECT) for items that specify no
+ * action.
*/
static int
parse_addr_policy(config_line_t *cfg, smartlist_t **dest,
@@ -399,11 +403,18 @@
return -1;
}
if (*policy) {
- SMARTLIST_FOREACH(*policy, addr_policy_t *, n, {
- /* ports aren't used. */
- n->prt_min = 1;
- n->prt_max = 65535;
- });
+ SMARTLIST_FOREACH_BEGIN(*policy, addr_policy_t *, n) {
+ /* ports aren't used in these. */
+ if (n->prt_min > 1 || n->prt_max != 65535) {
+ addr_policy_t newp, *c;
+ memcpy(&newp, n, sizeof(newp));
+ newp.prt_min = 1;
+ newp.prt_max = 65535;
+ c = addr_policy_get_canonical_entry(&newp);
+ SMARTLIST_REPLACE_CURRENT(*policy, n, c);
+ addr_policy_free(n);
+ }
+ } SMARTLIST_FOREACH_END(n);
}
return 0;
}