torsocks is just one of many ways to get curl to use Tor,
so we'll continue if we can't find torsocks in our PATH
and assume the user has a proxy configured via curlrc,
the command-line, environment variable, or even firewall
rules.
my $cmd = [ @cmd, $uri->as_string ];
if ($tor eq 'auto' && substr($uri->host, -6) eq '.onion' &&
(($env->{LD_PRELOAD}//'') !~ /torsocks/)) {
my $cmd = [ @cmd, $uri->as_string ];
if ($tor eq 'auto' && substr($uri->host, -6) eq '.onion' &&
(($env->{LD_PRELOAD}//'') !~ /torsocks/)) {
- unshift @$cmd, 'torsocks';
+ unshift @$cmd, which('torsocks');
} elsif (PublicInbox::Config::git_bool($tor)) {
} elsif (PublicInbox::Config::git_bool($tor)) {
- unshift @$cmd, 'torsocks';
+ unshift @$cmd, which('torsocks');
+
+ # continue anyways if torsocks is missing; a proxy may be
+ # specified via CLI, curlrc, environment variable, or even
+ # firewall rule
+ shift(@$cmd) if !$cmd->[0];
+
$lei->err("# @$cmd") if $verbose;
$? = 0;
my $fh = popen_rd($cmd, $env, $rdr);
$lei->err("# @$cmd") if $verbose;
$? = 0;
my $fh = popen_rd($cmd, $env, $rdr);