Opened 14 years ago

Last modified 7 years ago

#132 closed enhancement (Implemented)

convert "router.exit" requests to "or-address.router.exit"

Reported by: goodell Owned by:
Priority: Low Milestone:
Component: Core Tor/Tor Version:
Severity: Keywords:
Cc: goodell Actual Points:
Parent ID: Points:
Reviewer: Sponsor:

Description

Connection requests for "router.exit" should not simply be terminated. Instead, they should be interpreted as requests to services running on the OR in question. I am including a patch that prepends the address of the OR, as provided by the descriptor, to requests of the form "router.exit".

I have tested this patch thoroughly, and it works.

Note that this feature might provide an alternative way of resolving the oft-asked question on the mailing list "how do I access a resource on a particular server but know that I am exiting Tor from a node running on that server?"

<pre>
diff -u or/connection_edge.c or.patch/connection_edge.c
--- or/connection_edge.c 2005-05-07 01:55:06.000000000 -0400
+++ or.patch/connection_edge.c 2005-05-09 13:01:47.000000000 -0400
@@ -914,7 +914,13 @@

if (addresstype == EXIT_HOSTNAME) {

/* .exit -- modify conn to specify the exit node. */
char *s = strrchr(socks->address,'.');

if (!s
s[1] == '\0') {

+ if (!s) {
+ char *orig = tor_strdup(socks->address);
+ strlcpy(socks->address, "127.0.0.1.", sizeof(socks->address));
+ strlcat(socks->address, orig, sizeof(socks->address));
+ s = strrchr(socks->address,'.');
+ }
+ if (s[1] == '\0') {

log_fn(LOG_WARN,"Malformed exit address '%s'. Refusing.",

safe_str(socks->address));

connection_mark_unattached_ap(conn, END_STREAM_REASON_TORPROTOCOL);

</pre>

[Automatically added by flyspray2trac: Operating System: All]

Child Tickets

Change History (3)

comment:1 Changed 14 years ago by goodell

CORRECTION: I included the old patch by mistake. The correct patch should be:

<pre>
diff -u or/connection_edge.c or.patch/connection_edge.c
--- or/connection_edge.c 2005-05-07 01:55:06.000000000 -0400
+++ or.patch/connection_edge.c 2005-05-09 14:51:25.000000000 -0400
@@ -914,6 +914,19 @@

if (addresstype == EXIT_HOSTNAME) {

/* .exit -- modify conn to specify the exit node. */
char *s = strrchr(socks->address,'.');

+ if (!s) {
+ struct in_addr in;
+ char *orig = tor_strdup(socks->address);
+ routerinfo_t *r = router_get_by_nickname(socks->address);
+
+ if(r) {
+ in.s_addr = htonl(r->addr);
+ strlcpy(socks->address, inet_ntoa(in), sizeof(socks->address));
+ strlcat(socks->address, ".", sizeof(socks->address));
+ strlcat(socks->address, orig, sizeof(socks->address));
+ s = strrchr(socks->address,'.');
+ }
+ }

if (!s
s[1] == '\0') {

log_fn(LOG_WARN,"Malformed exit address '%s'. Refusing.",

safe_str(socks->address));

</pre>

comment:2 Changed 14 years ago by nickm

flyspray2trac: bug closed.

comment:3 Changed 7 years ago by nickm

Component: Tor ClientTor
Note: See TracTickets for help on using tickets.