mirror of
https://gitlab.torproject.org/tpo/core/tor.git
synced 2024-12-06 19:41:15 +01:00
Bug #8405: Report SOCKS username/password in CIRC status events
Introduces two new circuit status name-value parameters: SOCKS_USERNAME
and SOCKS_PASSWORD. Values are enclosing in quotes and unusual characters
are escaped.
Example:
650 CIRC 5 EXTENDED [...] SOCKS_USERNAME="my_username" SOCKS_PASSWORD="my_password"
This commit is contained in:
committed by
Nick Mathewson
parent
f75ca04520
commit
cb714d896c
@@ -1381,6 +1381,20 @@ esc_for_log(const char *s)
|
||||
return result;
|
||||
}
|
||||
|
||||
/** Similar to esc_for_log. Allocate and return a new string representing
|
||||
* the first n characters in <b>chars</b>, surround by quotes and using
|
||||
* standard C escapes. If a NUL character is encountered in <b>chars</b>,
|
||||
* the resulting string will be terminated there.
|
||||
*/
|
||||
char *
|
||||
esc_for_log_len(const char *chars, size_t n)
|
||||
{
|
||||
char *string = tor_strndup(chars, n);
|
||||
char *string_escaped = esc_for_log(string);
|
||||
tor_free(string);
|
||||
return string_escaped;
|
||||
}
|
||||
|
||||
/** Allocate and return a new string representing the contents of <b>s</b>,
|
||||
* surrounded by quotes and using standard C escapes.
|
||||
*
|
||||
|
||||
@@ -239,6 +239,7 @@ int tor_mem_is_zero(const char *mem, size_t len);
|
||||
int tor_digest_is_zero(const char *digest);
|
||||
int tor_digest256_is_zero(const char *digest);
|
||||
char *esc_for_log(const char *string) ATTR_MALLOC;
|
||||
char *esc_for_log_len(const char *chars, size_t n) ATTR_MALLOC;
|
||||
const char *escaped(const char *string);
|
||||
|
||||
char *tor_escape_str_for_pt_args(const char *string,
|
||||
|
||||
@@ -1882,6 +1882,20 @@ circuit_describe_status_for_controller(origin_circuit_t *circ)
|
||||
smartlist_add_asprintf(descparts, "TIME_CREATED=%s", tbuf);
|
||||
}
|
||||
|
||||
// Show username and/or password if available.
|
||||
if (circ->socks_username_len > 0) {
|
||||
char* socks_username_escaped = esc_for_log_len(circ->socks_username,
|
||||
(size_t) circ->socks_username_len);
|
||||
smartlist_add_asprintf(descparts, "SOCKS_USERNAME=%s", socks_username_escaped);
|
||||
tor_free(socks_username_escaped);
|
||||
}
|
||||
if (circ->socks_password_len > 0) {
|
||||
char* socks_password_escaped = esc_for_log_len(circ->socks_password,
|
||||
(size_t) circ->socks_password_len);
|
||||
smartlist_add_asprintf(descparts, "SOCKS_PASSWORD=%s", socks_password_escaped);
|
||||
tor_free(socks_password_escaped);
|
||||
}
|
||||
|
||||
rv = smartlist_join_strings(descparts, " ", 0, NULL);
|
||||
|
||||
SMARTLIST_FOREACH(descparts, char *, cp, tor_free(cp));
|
||||
|
||||
Reference in New Issue
Block a user