dirmngr: Pass Tor credentials to libdns.

* dirmngr/dns-stuff.c (tor_credentials): Replace by ...
(tor_socks_user, tor_socks_password): new vars.
(enable_dns_tormode): Set these new vars.
(libdns_res_open): Tell libdns the socks credentials.

Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
Werner Koch 2016-12-16 20:25:02 +01:00
parent 59d3c3e4ba
commit ddb4808683
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
1 changed files with 13 additions and 9 deletions

View File

@ -118,8 +118,10 @@ static int tor_mode;
(40 should be sufficient for v6 but we add some extra for a scope.) */
static char tor_nameserver[40+20];
/* A string to hold the credentials presented to Tor. */
static char tor_credentials[50];
/* Two strings to hold the credentials presented to Tor. */
static char tor_socks_user[30];
static char tor_socks_password[20];
#ifdef USE_LIBDNS
/* Libdns gobal data. */
@ -177,15 +179,14 @@ recursive_resolver_p (void)
gpg_error_t
enable_dns_tormode (int new_circuit)
{
/* XXX: dns.c doesn't support SOCKS credentials. */
if (!*tor_credentials || new_circuit)
if (!*tor_socks_user || new_circuit)
{
static unsigned int counter;
gpgrt_snprintf (tor_credentials, sizeof tor_credentials,
"dirmngr-%lu:p%u",
(unsigned long)getpid (), counter);
gpgrt_snprintf (tor_socks_user, sizeof tor_socks_user,
"dirmngr-%lu", (unsigned long)getpid ());
gpgrt_snprintf (tor_socks_password, sizeof tor_socks_password,
"p%u", counter);
counter++;
}
tor_mode = 1;
@ -428,7 +429,10 @@ libdns_res_open (struct dns_resolver **r_res)
return err;
res = dns_res_open (libdns.resolv_conf, libdns.hosts, libdns.hints, NULL,
dns_opts (.socks_host=&libdns.socks_host), &derr);
dns_opts (.socks_host = &libdns.socks_host,
.socks_user = tor_socks_user,
.socks_password = tor_socks_password ),
&derr);
if (!res)
return libdns_error_to_gpg_error (derr);