Add flag adns_if_tormode to provide a basic TOR mode.
authorWerner Koch <wk@gnupg.org>
Tue, 20 Oct 2015 12:48:23 +0000 (14:48 +0200)
committerWerner Koch <wk@gnupg.org>
Tue, 20 Oct 2015 12:48:23 +0000 (14:48 +0200)
commit56eef0afa4c01d2352f8b671a9b22405dc8119db
tree77ed06abcb0118728352c199a408a919e49a982e
parentcd40bf7477fa0f245235910ed177bbcafb7cd287
Add flag adns_if_tormode to provide a basic TOR mode.

* src/adns.h (adns_if_tormode): New.
* src/query.c (adns_submit): For a VC in tormode.
(adns_submit_reverse_any): Ditto.
(adns_synchronous): Ditto.
* src/event.c (use_socks_p, socks_connect): New.  Based on code from
Libassuan.
(adns__tcp_tryconnect): Move setnonblock after the init of ADDR.  Call
socks_connect if needed.

* client/adh-opts.c (global_options): Add "--use-tor"
(ov_tormode): New.
* client/adnshost.h (ov_tormode): New declaration.
* client/adh-query.c (ensure_adns_init): Enable TOR mode uf OV_TORMODE
is set.
--

This patch has the problem that connecting to the TOR server and more
important establishing the TOR connection will block.  Changing this
would require quite some report of the TCP code in ADNS.

In fact it has always been the case that when falling back to TCP mode
and the connect would have blocked the connection won't be established
but times outs.  There is no retry code for if connect returns with
EWOULDBLOCK or EINPROGRESS.

To test the code this command can be used.

  adnshost --config 'nameserver 8.8.8.8' --use-tor NAME

Signed-off-by: Werner Koch <wk@gnupg.org>
client/adh-opts.c
client/adh-query.c
client/adnshost.h
src/adns.h
src/event.c
src/internal.h
src/query.c