tor

The Tor anonymity network
git clone https://git.dasho.dev/tor.git
Log | Files | Refs | README | LICENSE

commit 8b7df723596d068cbf91abf7535651ab8445810b
parent ad52fe7e88754fd8c7c1eb3da9bbf593d7752af9
Author: Nick Mathewson <nickm@torproject.org>
Date:   Fri, 15 Jun 2018 13:01:50 -0400

Split socks_request_t into its own header.

Diffstat:
Msrc/or/circuituse.c | 1+
Msrc/or/connection.c | 1+
Msrc/or/connection_edge.c | 1+
Msrc/or/control.c | 1+
Msrc/or/dnsserv.c | 1+
Msrc/or/include.am | 1+
Msrc/or/main.c | 1+
Msrc/or/or.h | 48------------------------------------------------
Msrc/or/proto_socks.c | 2++
Msrc/or/relay.c | 1+
Asrc/or/socks_request_st.h | 59+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Msrc/test/fuzz/fuzz_http_connect.c | 1+
Msrc/test/test_connection.c | 1+
Msrc/test/test_entryconn.c | 1+
Msrc/test/test_hs_client.c | 1+
Msrc/test/test_relaycell.c | 1+
Msrc/test/test_socks.c | 1+
17 files changed, 75 insertions(+), 48 deletions(-)

diff --git a/src/or/circuituse.c b/src/or/circuituse.c @@ -62,6 +62,7 @@ #include "entry_connection_st.h" #include "or_circuit_st.h" #include "origin_circuit_st.h" +#include "socks_request_st.h" static void circuit_expire_old_circuits_clientside(void); static void circuit_increment_failure_count(void); diff --git a/src/or/connection.c b/src/or/connection.c @@ -119,6 +119,7 @@ #include "listener_connection_st.h" #include "or_connection_st.h" #include "port_cfg_st.h" +#include "socks_request_st.h" static connection_t *connection_listener_new( const struct sockaddr *listensockaddr, diff --git a/src/or/connection_edge.c b/src/or/connection_edge.c @@ -102,6 +102,7 @@ #include "entry_connection_st.h" #include "or_circuit_st.h" #include "origin_circuit_st.h" +#include "socks_request_st.h" #ifdef HAVE_LINUX_TYPES_H #include <linux/types.h> diff --git a/src/or/control.c b/src/or/control.c @@ -90,6 +90,7 @@ #include "rend_authorized_client_st.h" #include "rend_encoded_v2_service_descriptor_st.h" #include "rend_service_descriptor_st.h" +#include "socks_request_st.h" #ifndef _WIN32 #include <pwd.h> diff --git a/src/or/dnsserv.c b/src/or/dnsserv.c @@ -33,6 +33,7 @@ #include "control_connection_st.h" #include "entry_connection_st.h" #include "listener_connection_st.h" +#include "socks_request_st.h" #include <event2/dns.h> #include <event2/dns_compat.h> diff --git a/src/or/include.am b/src/or/include.am @@ -294,6 +294,7 @@ ORHEADERS = \ src/or/scheduler.h \ src/or/server_port_cfg_st.h \ src/or/shared_random_client.h \ + src/or/socks_request_st.h \ src/or/statefile.h \ src/or/status.h \ src/or/torcert.h \ diff --git a/src/or/main.c b/src/or/main.c @@ -125,6 +125,7 @@ #include "entry_connection_st.h" #include "or_connection_st.h" #include "port_cfg_st.h" +#include "socks_request_st.h" #ifdef HAVE_SYSTEMD # if defined(__COVERITY__) && !defined(__INCLUDE_LEVEL__) diff --git a/src/or/or.h b/src/or/or.h @@ -3587,54 +3587,6 @@ typedef struct { #define SOCKS_COMMAND_IS_RESOLVE(c) ((c)==SOCKS_COMMAND_RESOLVE || \ (c)==SOCKS_COMMAND_RESOLVE_PTR) -/** State of a SOCKS request from a user to an OP. Also used to encode other - * information for non-socks user request (such as those on TransPort and - * DNSPort) */ -struct socks_request_t { - /** Which version of SOCKS did the client use? One of "0, 4, 5" -- where - * 0 means that no socks handshake ever took place, and this is just a - * stub connection (e.g. see connection_ap_make_link()). */ - uint8_t socks_version; - /** If using socks5 authentication, which authentication type did we - * negotiate? currently we support 0 (no authentication) and 2 - * (username/password). */ - uint8_t auth_type; - /** What is this stream's goal? One of the SOCKS_COMMAND_* values */ - uint8_t command; - /** Which kind of listener created this stream? */ - uint8_t listener_type; - size_t replylen; /**< Length of <b>reply</b>. */ - uint8_t reply[MAX_SOCKS_REPLY_LEN]; /**< Write an entry into this string if - * we want to specify our own socks reply, - * rather than using the default socks4 or - * socks5 socks reply. We use this for the - * two-stage socks5 handshake. - */ - char address[MAX_SOCKS_ADDR_LEN]; /**< What address did the client ask to - connect to/resolve? */ - uint16_t port; /**< What port did the client ask to connect to? */ - unsigned int has_finished : 1; /**< Has the SOCKS handshake finished? Used to - * make sure we send back a socks reply for - * every connection. */ - unsigned int got_auth : 1; /**< Have we received any authentication data? */ - /** If this is set, we will choose "no authentication" instead of - * "username/password" authentication if both are offered. Used as input to - * parse_socks. */ - unsigned int socks_prefer_no_auth : 1; - - /** Number of bytes in username; 0 if username is NULL */ - size_t usernamelen; - /** Number of bytes in password; 0 if password is NULL */ - uint8_t passwordlen; - /** The negotiated username value if any (for socks5), or the entire - * authentication string (for socks4). This value is NOT nul-terminated; - * see usernamelen for its length. */ - char *username; - /** The negotiated password value if any (for socks5). This value is NOT - * nul-terminated; see passwordlen for its length. */ - char *password; -}; - /********************************* circuitbuild.c **********************/ /** How many hops does a general-purpose circuit have by default? */ diff --git a/src/or/proto_socks.c b/src/or/proto_socks.c @@ -14,6 +14,8 @@ #include "proto_socks.h" #include "reasons.h" +#include "socks_request_st.h" + static void socks_request_set_socks5_error(socks_request_t *req, socks5_reply_status_t reason); diff --git a/src/or/relay.c b/src/or/relay.c @@ -87,6 +87,7 @@ #include "entry_connection_st.h" #include "or_circuit_st.h" #include "origin_circuit_st.h" +#include "socks_request_st.h" static edge_connection_t *relay_lookup_conn(circuit_t *circ, cell_t *cell, cell_direction_t cell_direction, diff --git a/src/or/socks_request_st.h b/src/or/socks_request_st.h @@ -0,0 +1,59 @@ +/* Copyright (c) 2001 Matej Pfajfar. + * Copyright (c) 2001-2004, Roger Dingledine. + * Copyright (c) 2004-2006, Roger Dingledine, Nick Mathewson. + * Copyright (c) 2007-2017, The Tor Project, Inc. */ +/* See LICENSE for licensing information */ + +#ifndef SOCKS_REQUEST_ST_H +#define SOCKS_REQUEST_ST_H + +/** State of a SOCKS request from a user to an OP. Also used to encode other + * information for non-socks user request (such as those on TransPort and + * DNSPort) */ +struct socks_request_t { + /** Which version of SOCKS did the client use? One of "0, 4, 5" -- where + * 0 means that no socks handshake ever took place, and this is just a + * stub connection (e.g. see connection_ap_make_link()). */ + uint8_t socks_version; + /** If using socks5 authentication, which authentication type did we + * negotiate? currently we support 0 (no authentication) and 2 + * (username/password). */ + uint8_t auth_type; + /** What is this stream's goal? One of the SOCKS_COMMAND_* values */ + uint8_t command; + /** Which kind of listener created this stream? */ + uint8_t listener_type; + size_t replylen; /**< Length of <b>reply</b>. */ + uint8_t reply[MAX_SOCKS_REPLY_LEN]; /**< Write an entry into this string if + * we want to specify our own socks reply, + * rather than using the default socks4 or + * socks5 socks reply. We use this for the + * two-stage socks5 handshake. + */ + char address[MAX_SOCKS_ADDR_LEN]; /**< What address did the client ask to + connect to/resolve? */ + uint16_t port; /**< What port did the client ask to connect to? */ + unsigned int has_finished : 1; /**< Has the SOCKS handshake finished? Used to + * make sure we send back a socks reply for + * every connection. */ + unsigned int got_auth : 1; /**< Have we received any authentication data? */ + /** If this is set, we will choose "no authentication" instead of + * "username/password" authentication if both are offered. Used as input to + * parse_socks. */ + unsigned int socks_prefer_no_auth : 1; + + /** Number of bytes in username; 0 if username is NULL */ + size_t usernamelen; + /** Number of bytes in password; 0 if password is NULL */ + uint8_t passwordlen; + /** The negotiated username value if any (for socks5), or the entire + * authentication string (for socks4). This value is NOT nul-terminated; + * see usernamelen for its length. */ + char *username; + /** The negotiated password value if any (for socks5). This value is NOT + * nul-terminated; see passwordlen for its length. */ + char *password; +}; + +#endif + diff --git a/src/test/fuzz/fuzz_http_connect.c b/src/test/fuzz/fuzz_http_connect.c @@ -16,6 +16,7 @@ #include "torlog.h" #include "entry_connection_st.h" +#include "socks_request_st.h" #include "fuzzing.h" diff --git a/src/test/test_connection.c b/src/test/test_connection.c @@ -27,6 +27,7 @@ #include "dir_connection_st.h" #include "entry_connection_st.h" #include "or_connection_st.h" +#include "socks_request_st.h" static void * test_conn_get_basic_setup(const struct testcase_t *tc); static int test_conn_get_basic_teardown(const struct testcase_t *tc, diff --git a/src/test/test_entryconn.c b/src/test/test_entryconn.c @@ -20,6 +20,7 @@ #include "rendcache.h" #include "entry_connection_st.h" +#include "socks_request_st.h" static void * entryconn_rewrite_setup(const struct testcase_t *tc) diff --git a/src/test/test_hs_client.c b/src/test/test_hs_client.c @@ -42,6 +42,7 @@ #include "dir_connection_st.h" #include "entry_connection_st.h" #include "origin_circuit_st.h" +#include "socks_request_st.h" static int mock_connection_ap_handshake_send_begin(entry_connection_t *ap_conn) diff --git a/src/test/test_relaycell.c b/src/test/test_relaycell.c @@ -19,6 +19,7 @@ #include "crypt_path_st.h" #include "entry_connection_st.h" #include "origin_circuit_st.h" +#include "socks_request_st.h" static int srm_ncalls; static entry_connection_t *srm_conn; diff --git a/src/test/test_socks.c b/src/test/test_socks.c @@ -9,6 +9,7 @@ #include "proto_socks.h" #include "test.h" #include "log_test_helpers.h" +#include "socks_request_st.h" typedef struct socks_test_data_t { socks_request_t *req;