summaryrefslogtreecommitdiff
path: root/src/or/or.h
diff options
context:
space:
mode:
authorNick Mathewson <nickm@torproject.org>2012-08-09 15:48:43 -0400
committerNick Mathewson <nickm@torproject.org>2012-08-09 15:48:43 -0400
commitdfe03d36c8749eb07e9bb2ea47e88ff05e9e3127 (patch)
tree37daa659761760dcd12e680bbe1b952cee40ea24 /src/or/or.h
parent91b52a259a271df7ceeea6d8bf7adbd4d7e15a6c (diff)
downloadtor-dfe03d36c8749eb07e9bb2ea47e88ff05e9e3127.tar.gz
tor-dfe03d36c8749eb07e9bb2ea47e88ff05e9e3127.zip
Don't infer we have a FooPort from the presence of a FooPort line
Thanks to the changes we started making with SocksPort and friends in 0.2.3.3-alpha, any of our code that did "if (options->Sockport)" became wrong, since "SocksPort 0" would make that test true whereas using the default SocksPort value would make it false. (We didn't actually do "if (options->SockPort)" but we did have tests for TransPort. When we moved DirPort, ORPort, and ControlPort over to the same system in 0.2.3.9-alpha, the problem got worse, since our code is littered with checks for DirPort and ORPort as booleans. This code renames the current linelist-based FooPort options to FooPort_lines, and adds new FooPort_set options which get set at parse-and-validate time on the or_options_t. FooPort_set is true iff we will actually try to open a listener of the given type. (I renamed the FooPort options rather than leave them alone so that every previous user of a FooPort would need to get inspected, and so that any new code that forgetfully uses FooPort will need fail to compile.) Fix for bug 6507.
Diffstat (limited to 'src/or/or.h')
-rw-r--r--src/or/or.h33
1 files changed, 26 insertions, 7 deletions
diff --git a/src/or/or.h b/src/or/or.h
index 3a53e5ed86..bb9d34035c 100644
--- a/src/or/or.h
+++ b/src/or/or.h
@@ -3012,19 +3012,38 @@ typedef struct {
int DirAllowPrivateAddresses;
char *User; /**< Name of user to run Tor as. */
char *Group; /**< Name of group to run Tor as. */
- config_line_t *ORPort; /**< Ports to listen on for OR connections. */
- config_line_t *SocksPort; /**< Ports to listen on for SOCKS connections. */
+ config_line_t *ORPort_lines; /**< Ports to listen on for OR connections. */
+ config_line_t *SocksPort_lines; /**< Ports to listen on for SOCKS connections. */
/** Ports to listen on for transparent pf/netfilter connections. */
- config_line_t *TransPort;
- config_line_t *NATDPort; /**< Ports to listen on for transparent natd
+ config_line_t *TransPort_lines;
+ config_line_t *NATDPort_lines; /**< Ports to listen on for transparent natd
* connections. */
- config_line_t *ControlPort; /**< Port to listen on for control
+ config_line_t *ControlPort_lines; /**< Port to listen on for control
* connections. */
config_line_t *ControlSocket; /**< List of Unix Domain Sockets to listen on
* for control connections. */
+
int ControlSocketsGroupWritable; /**< Boolean: Are control sockets g+rw? */
- config_line_t *DirPort; /**< Port to listen on for directory connections. */
- config_line_t *DNSPort; /**< Port to listen on for DNS requests. */
+ config_line_t *DirPort_lines; /**< Port to listen on for directory connections. */
+ config_line_t *DNSPort_lines; /**< Port to listen on for DNS requests. */
+
+ /** @name port booleans
+ *
+ * Derived booleans: True iff there is a non-listener port on an AF_INET or
+ * AF_INET6 address of the given type configured in one of the _lines
+ * options above.
+ *
+ * @{
+ */
+ unsigned int ORPort_set : 1;
+ unsigned int SocksPort_set : 1;
+ unsigned int TransPort_set : 1;
+ unsigned int NATDPort_set : 1;
+ unsigned int ControlPort_set : 1;
+ unsigned int DirPort_set : 1;
+ unsigned int DNSPort_set : 1;
+ /**@}*/
+
int AssumeReachable; /**< Whether to publish our descriptor regardless. */
int AuthoritativeDir; /**< Boolean: is this an authoritative directory? */
int V1AuthoritativeDir; /**< Boolean: is this an authoritative directory