1
0
mirror of git://git.gnupg.org/gnupg.git synced 2024-12-22 10:19:57 +01:00

dirmngr: Make --use-tor work - still leaks DNS.

* dirmngr/dirmngr.c (set_tor_mode): New.
(main, reread_configuration): Call it.
* dirmngr/http.c (http_raw_connect, send_request): Check whether TOR
mode is enabled if the FORCE_TOR flag is given.
--

The patch for http.c is a sanity check because tor mode is anyway
global as long as the Assuan socket wrappers are used.

Signed-off-by: Werner Koch <wk@gnupg.org>
This commit is contained in:
Werner Koch 2015-10-19 13:12:24 +02:00
parent 8c609eaf35
commit 6983fd131f
No known key found for this signature in database
GPG Key ID: E3FDFF218E45B72B
3 changed files with 36 additions and 9 deletions

View File

@ -465,6 +465,20 @@ set_debug (void)
} }
static void
set_tor_mode (void)
{
if (opt.use_tor)
{
if (assuan_sock_set_flag (ASSUAN_INVALID_FD, "tor-mode", 1))
{
log_error ("error enabling TOR mode: %s\n", strerror (errno));
log_info ("(is your Libassuan recent enough?)\n");
}
}
}
static void static void
wrong_args (const char *text) wrong_args (const char *text)
{ {
@ -985,11 +999,10 @@ main (int argc, char **argv)
if (opt.use_tor) if (opt.use_tor)
{ {
log_info ("WARNING: ***************************************\n"); log_info ("WARNING: ***************************************\n");
log_info ("WARNING: TOR mode (--use-tor) DOES NOT YET WORK!\n"); log_info ("WARNING: TOR mode (--use-tor) MAY NOT FULLY WORK!\n");
log_info ("WARNING: ***************************************\n"); log_info ("WARNING: ***************************************\n");
} }
/* Print a warning if an argument looks like an option. */ /* Print a warning if an argument looks like an option. */
if (!opt.quiet && !(pargs.flags & ARGPARSE_FLAG_STOP_SEEN)) if (!opt.quiet && !(pargs.flags & ARGPARSE_FLAG_STOP_SEEN))
{ {
@ -1018,6 +1031,7 @@ main (int argc, char **argv)
} }
set_debug (); set_debug ();
set_tor_mode ();
/* Get LDAP server list from file. */ /* Get LDAP server list from file. */
#if USE_LDAP #if USE_LDAP
@ -1783,6 +1797,7 @@ reread_configuration (void)
fclose (fp); fclose (fp);
set_debug (); set_debug ();
set_tor_mode ();
} }

View File

@ -751,9 +751,14 @@ http_raw_connect (http_t *r_hd, const char *server, unsigned short port,
if ((flags & HTTP_FLAG_FORCE_TOR)) if ((flags & HTTP_FLAG_FORCE_TOR))
{ {
log_error ("TOR support is not yet available\n"); int mode;
if (assuan_sock_get_flag (ASSUAN_INVALID_FD, "tor-mode", &mode) || !mode)
{
log_error ("TOR support is not available\n");
return gpg_err_make (default_errsource, GPG_ERR_NOT_IMPLEMENTED); return gpg_err_make (default_errsource, GPG_ERR_NOT_IMPLEMENTED);
} }
}
/* Create the handle. */ /* Create the handle. */
hd = xtrycalloc (1, sizeof *hd); hd = xtrycalloc (1, sizeof *hd);
@ -1466,9 +1471,14 @@ send_request (http_t hd, const char *httphost, const char *auth,
if ((hd->flags & HTTP_FLAG_FORCE_TOR)) if ((hd->flags & HTTP_FLAG_FORCE_TOR))
{ {
log_error ("TOR support is not yet available\n"); int mode;
if (assuan_sock_get_flag (ASSUAN_INVALID_FD, "tor-mode", &mode) || !mode)
{
log_error ("TOR support is not available\n");
return gpg_err_make (default_errsource, GPG_ERR_NOT_IMPLEMENTED); return gpg_err_make (default_errsource, GPG_ERR_NOT_IMPLEMENTED);
} }
}
server = *hd->uri->host ? hd->uri->host : "localhost"; server = *hd->uri->host ? hd->uri->host : "localhost";
port = hd->uri->port ? hd->uri->port : 80; port = hd->uri->port ? hd->uri->port : 80;

View File

@ -238,9 +238,11 @@ useful for debugging.
@item --use-tor @item --use-tor
@opindex use-tor @opindex use-tor
This options is not yet functional! It will eventually switch GnuPG This option switches Dirmngr and thus GnuPG into ``TOR mode'' to route
into a TOR mode to route all network access via TOR (an anonymity all network access via TOR (an anonymity network). WARNING: As of now
network). this still leaks the DNS queries; e.g. to lookup the hosts in a
keyserver pool. Certain other features are disabled if this mode is
active.
@item --keyserver @code{name} @item --keyserver @code{name}
@opindex keyserver @opindex keyserver