[tor-commits] [stegotorus/master] Make HTTP-steg 'peername' per-connection.
zwol at torproject.org
zwol at torproject.org
Fri Jul 20 23:17:07 UTC 2012
commit d64fb4c98988346538013981343fbec3c959661a
Author: Zack Weinberg <zackw at panix.com>
Date: Thu Mar 29 19:19:04 2012 -0700
Make HTTP-steg 'peername' per-connection.
---
src/audit-globals.sh | 2 --
src/steg/http.cc | 28 ++++++++++++----------------
2 files changed, 12 insertions(+), 18 deletions(-)
diff --git a/src/audit-globals.sh b/src/audit-globals.sh
index 1768640..3c21643 100644
--- a/src/audit-globals.sh
+++ b/src/audit-globals.sh
@@ -46,8 +46,6 @@ sed '
/^crypt init_crypto()::initialized$/d
# These are grandfathered; they need to be removed.
- /^steg\/http has_peer_name$/d
- /^steg\/http peername$/d
/^steg\/payloads payload_count$/d
/^steg\/payloads payload_hdrs$/d
/^steg\/payloads payloads$/d
diff --git a/src/steg/http.cc b/src/steg/http.cc
index 05ab940..1ee4254 100644
--- a/src/steg/http.cc
+++ b/src/steg/http.cc
@@ -54,12 +54,9 @@ int
http_server_receive(steg_t *s, conn_t *conn, struct evbuffer *dest, struct evbuffer* source);
int
-lookup_peer_name_from_ip(char* p_ip, char* p_name);
+lookup_peer_name_from_ip(const char* p_ip, char* p_name);
-static int has_peer_name = 0;
-static char peername[512];
-
namespace {
struct http_steg_config_t : steg_config_t
{
@@ -72,6 +69,7 @@ namespace {
{
http_steg_config_t *config;
conn_t *conn;
+ char peer_dnsname[512];
bool have_transmitted : 1;
bool have_received : 1;
@@ -161,6 +159,8 @@ http_steg_t::http_steg_t(http_steg_config_t *cf, conn_t *cn)
: config(cf), conn(cn),
have_transmitted(false), have_received(false)
{
+ memset(peer_dnsname, 0, sizeof peer_dnsname);
+
if (config->is_clientside)
load_payloads("traces/client.out");
else {
@@ -243,7 +243,7 @@ http_steg_t::transmit_room()
int
-lookup_peer_name_from_ip(char* p_ip, char* p_name) {
+lookup_peer_name_from_ip(const char* p_ip, char* p_name) {
struct addrinfo* ailist;
struct addrinfo* aip;
struct addrinfo hint;
@@ -330,9 +330,8 @@ http_client_cookie_transmit (http_steg_t *s, struct evbuffer *source,
}
buf[payload_len] = 0;
- if (has_peer_name == 0 && lookup_peer_name_from_ip((char*) conn->peername, peername))
- has_peer_name = 1;
-
+ if (s->peer_dnsname[0] == '\0')
+ lookup_peer_name_from_ip(conn->peername, s->peer_dnsname);
bzero(data2, sbuflen*4);
E.encode((char*) data, sbuflen, (char*) data2);
@@ -370,8 +369,8 @@ http_client_cookie_transmit (http_steg_t *s, struct evbuffer *source,
goto err;
}
- rval = evbuffer_add(dest, peername, strlen(peername));
- if (rval) {
+ rval = evbuffer_add(dest, s->peer_dnsname, strlen(s->peer_dnsname));
+ if (rval) {
log_warn("error adding peername field\n");
goto err;
}
@@ -515,11 +514,8 @@ http_client_uri_transmit (http_steg_t *s,
int len =0;
char buf[10000];
-
- if (has_peer_name == 0 && lookup_peer_name_from_ip((char*) conn->peername, peername))
- has_peer_name = 1;
-
-
+ if (s->peer_dnsname[0] == '\0')
+ lookup_peer_name_from_ip(conn->peername, s->peer_dnsname);
nv = evbuffer_peek(source, slen, NULL, NULL, 0);
iv = (evbuffer_iovec *)xzalloc(sizeof(struct evbuffer_iovec) * nv);
@@ -560,7 +556,7 @@ http_client_uri_transmit (http_steg_t *s,
if (evbuffer_add(dest, outbuf, datalen) || // add uri field
evbuffer_add(dest, "HTTP/1.1\r\nHost: ", 19) ||
- evbuffer_add(dest, peername, strlen(peername)) ||
+ evbuffer_add(dest, s->peer_dnsname, strlen(s->peer_dnsname)) ||
evbuffer_add(dest, strstr(buf, "\r\n"), len - (unsigned int) (strstr(buf, "\r\n") - buf)) || // add everything but first line
evbuffer_add(dest, "\r\n", 2)) {
log_debug("error ***********************");
More information about the tor-commits
mailing list