[tor-commits] [torsocks/master] Send the SOCKS5 authentication for RESOLVE/RESOLVE_PTR requests.
dgoulet at torproject.org
dgoulet at torproject.org
Tue May 12 17:57:48 UTC 2015
commit 88466864b595bd24710b0428c4e3ca483480046d
Author: Yawning Angel <yawning at schwanenlied.me>
Date: Tue May 12 11:37:27 2015 +0000
Send the SOCKS5 authentication for RESOLVE/RESOLVE_PTR requests.
Signed-off-by: Yawning Angel <yawning at schwanenlied.me>
---
src/lib/torsocks.c | 50 ++++++++++++++++++++++++++++++++++++++++++++++++--
1 file changed, 48 insertions(+), 2 deletions(-)
diff --git a/src/lib/torsocks.c b/src/lib/torsocks.c
index be00581..5836c31 100644
--- a/src/lib/torsocks.c
+++ b/src/lib/torsocks.c
@@ -476,6 +476,7 @@ int tsocks_tor_resolve(int af, const char *hostname, void *ip_addr)
int ret;
size_t addr_len;
struct connection conn;
+ uint8_t socks5_method;
assert(hostname);
assert(ip_addr);
@@ -526,11 +527,33 @@ int tsocks_tor_resolve(int af, const char *hostname, void *ip_addr)
goto error;
}
- ret = setup_tor_connection(&conn, SOCKS5_NO_AUTH_METHOD);
+ /* Is this configuration is set to use SOCKS5 authentication. */
+ if (tsocks_config.socks5_use_auth) {
+ socks5_method = SOCKS5_USER_PASS_METHOD;
+ } else {
+ socks5_method = SOCKS5_NO_AUTH_METHOD;
+ }
+
+ ret = setup_tor_connection(&conn, socks5_method);
if (ret < 0) {
goto end_close;
}
+ /* For the user/pass method, send the request before resolve. */
+ if (socks5_method == SOCKS5_USER_PASS_METHOD) {
+ ret = socks5_send_user_pass_request(&conn,
+ tsocks_config.conf_file.socks5_username,
+ tsocks_config.conf_file.socks5_password);
+ if (ret < 0) {
+ goto end_close;
+ }
+
+ ret = socks5_recv_user_pass_reply(&conn);
+ if (ret < 0) {
+ goto end_close;
+ }
+ }
+
ret = socks5_send_resolve_request(hostname, &conn);
if (ret < 0) {
goto end_close;
@@ -560,6 +583,7 @@ int tsocks_tor_resolve_ptr(const char *addr, char **ip, int af)
{
int ret;
struct connection conn;
+ uint8_t socks5_method;
assert(addr);
assert(ip);
@@ -574,11 +598,33 @@ int tsocks_tor_resolve_ptr(const char *addr, char **ip, int af)
}
conn.dest_addr.domain = CONNECTION_DOMAIN_INET;
- ret = setup_tor_connection(&conn, SOCKS5_NO_AUTH_METHOD);
+ /* Is this configuration is set to use SOCKS5 authentication. */
+ if (tsocks_config.socks5_use_auth) {
+ socks5_method = SOCKS5_USER_PASS_METHOD;
+ } else {
+ socks5_method = SOCKS5_NO_AUTH_METHOD;
+ }
+
+ ret = setup_tor_connection(&conn, socks5_method);
if (ret < 0) {
goto end_close;
}
+ /* For the user/pass method, send the request before resolve ptr. */
+ if (socks5_method == SOCKS5_USER_PASS_METHOD) {
+ ret = socks5_send_user_pass_request(&conn,
+ tsocks_config.conf_file.socks5_username,
+ tsocks_config.conf_file.socks5_password);
+ if (ret < 0) {
+ goto end_close;
+ }
+
+ ret = socks5_recv_user_pass_reply(&conn);
+ if (ret < 0) {
+ goto end_close;
+ }
+ }
+
ret = socks5_send_resolve_ptr_request(&conn, addr, af);
if (ret < 0) {
goto end_close;
More information about the tor-commits
mailing list