Commit Graph

222 Commits (9b42da71f4df7b783cf07a58ffa095e293c43380)

Author SHA1 Message Date
rofl0r 2182eff358 fix segfault in DNS mapping lookup code
the allocatorthread got pointers to RAM which were reallocated
behind the back, and if realloc() couldn't grow in-place, lead
to segfaults in applications that do a lot of DNS-lookups such
as webbrowsers.

closes #66
closes #31

thanks to @ravomavain for tracking down the issue.
2015-06-06 11:43:53 +01:00
rofl0r 68e42d59f7 fixup for 9ab7dbe 2015-05-21 14:04:10 +01:00
rofl0r 9ab7dbeb3b fix for CVE-2015-3887
closes #60
2015-05-21 13:46:22 +01:00
rofl0r ba61b48fd7 fix compilation with openbsd
closes #52
2015-04-08 11:09:48 +01:00
Aleksey Filippov 4e986caa2a support MSG_FASTOPEN on old kernels 2015-02-17 15:30:43 +01:00
Aleksey Filippov 8dd08e2cd2 add sendto hook to handle MSG_FASTOPEN flag 2015-01-23 17:14:37 +01:00
rofl0r 25ee4c318d hostsreader: use temporary vars for string manipulation
working directly with the passed variables could lead to bugs when
some lines in the hosts file aren't well-formed and the loop is taken
several times while the buf vars are already modified.
2014-11-14 13:19:06 +01:00
rofl0r 4fb7eb0532 replace problematic hostentdb with hostsreader
the hostentdb introduced between 4.2 and 4.3
(via af5c6f0c6a )
had several issues:
- it caused breakage on FreeBSD and was commented out there
- prevented usage of the hostdb when proxy_dns was turned off
  (issue #42)
- required dynamic memory allocation which was accessed from several
  threads
- wouldnt reflect changes to the hosts file made during program run

the only sensible solution is to remove the hostentdb and replace it
with a home-grown hosts parser (we can't use gethostent() since
that would mess up the gethostent()-state from different threads).

the new parser used here is deliberately held simple and only meant
to provide the user with means to reference hardcoded ipv4 addresses
via his hosts file.

fixes #42
2014-11-14 12:33:58 +01:00
rofl0r cd4aee1997 print proxychains version on DLL init
framework to print version stolen from musl
2014-07-22 14:10:11 +02:00
rofl0r 7852269282 libproxychains.c: whitespace cleanup 2014-07-21 13:18:20 +02:00
rofl0r d3586380bd get_chain_data: reject invalid entries in proxylist section 2014-07-21 13:17:24 +02:00
rofl0r 5168bc4eed bail out when no proxy was configured 2014-07-21 12:37:01 +02:00
rofl0r 82d0b13b8f main.c: remove trailing whitespace noise 2014-07-09 19:16:33 +02:00
rofl0r ed7c89072a main.c: append previously existing LD_PRELOAD contents rather than overwriting
some broken programs like pulseaudio rely on LD_PRELOAD hacks to function,
if we just override the environment variable, those will stop working.

simplified version of patch suggested by @hexchain

closes #35
2014-07-09 19:12:30 +02:00
rofl0r 84d9a97a08 main.c: remove code duplication around LD_PRELOAD 2014-07-09 18:07:24 +02:00
rofl0r f669139c9e common.c: fix trailing whitespace 2014-07-02 10:10:53 +02:00
rofl0r 530fee89ce proxy_getaddrinfo: don't use strncpy
the strncpy function is both dangerous and slow.
dangerous because it doesn't do what the naive programmer expects
(bounded strcpy), and slow because it pads the entire bufsize
with zeroes.
2014-01-22 22:22:24 +01:00
rofl0r b76aa653c9 proxy_getaddrinfo: fix case when func was used in lieu of inet_aton 2014-01-22 16:13:20 +01:00
rofl0r f868928c4b fix incorrect poll.h inclusion
sys/poll.h is a glibc legacy alias for poll.h.
the latter is specified by POSIX, the former not.
on glibc one of them just includes the other so it doesnt hurt.
2014-01-08 14:57:13 +01:00
David ecbd735508 Chromium tried to close our pipes and falls into infinity loop.
If return value of close() is -1, chromium will fall into infinity loop.
2014-01-08 13:38:59 +08:00
rofl0r fa0f355ce8 add missing INIT() to close hook
this caused a crash when the gcc initializer was not called first.
2013-08-30 23:44:27 +02:00
rofl0r 8a84f980bb fix indentation of debug.c 2013-06-26 12:22:12 +02:00
crass 354a4ce4e2 Add round_robin to example config. 2013-06-26 12:22:12 +02:00
crass f603e50cb3 Add support for round robin mode. 2013-06-26 12:22:11 +02:00
crass 5c4c166802 Add DUMP_PROXY_CHAIN for debug builds and debug.c. 2013-06-25 12:56:41 +02:00
rofl0r b9ca1cdefd proxychains.conf: add hint that proxy must be in ipv4 notation 2013-05-02 13:44:49 +02:00
rofl0r 64a7cd26dc fix case where proxy was using a DNS name or non-dotted ipv4
it is generally invalid to use a DNS name since DNS subsystem
is only available once connected to the proxy; because
DNS is done server-side.

closes #19
2013-05-02 13:44:49 +02:00
mancha 2aba83087e libproxychains.c: fix NULL pointer dereference after fopen().
if a configuration file can be accessed by proxychains but there is a
mandatory access control (or other) block on the target appication's
ability to read that file, fopen() creates a NULL pointer that will
cause a segfault in fgets().

closes #17

Signed-off-by: mancha <mancha1@hush.com>
2013-04-30 04:06:36 -04:00
rofl0r f3af1239a9 better regex for obsolete proxyresolv script (thx yhzarcali)
closes #11
2013-01-29 18:43:21 +01:00
rofl0r 1da09e49e5 hook close() to prevent rude programs like ssh to close our pipes
those pipes are needed to talk with the dns-name allocator thread.

closes #9
2013-01-21 01:54:45 +01:00
rofl0r 173b90368e update proxyresolv 2013-01-06 19:20:44 +01:00
rofl0r c8bfdc15e6 remove old proxychains launcher script 2013-01-06 19:12:15 +01:00
rofl0r 5526afb56d FreeBSD support 2012-12-25 19:08:05 +01:00
rofl0r be4efc0fd5 fix no-newline warnings on old compilers 2012-12-25 18:01:11 +01:00
rofl0r 5ecd5ac51d fix compilation on musl libc 2012-12-18 09:38:32 +01:00
rofl0r 1c265b9628 getnameinfo: check size and family of salen 2012-12-17 23:21:58 +01:00
rofl0r 346474a43b getnameinfo: return error if buffers are too small 2012-12-17 22:41:51 +01:00
rofl0r ce655fdac8 fix the never-ending issues with the wrong glibc prototype of getnameinfo
this bug was fixed shortly before 2.14 release, so we checked for that.
however some distros decided to backport this fix to earlier versions,
breaking our compiletime check.

http://sourceware.org/git/?p=glibc.git;a=commitdiff;h=e4ecafe004b3d4270b3a9dace8f970047400ed38

the portable solution is to stick the function into a separate comilation
unit that does not see the glibc prototype.

closes #7
2012-12-17 22:17:04 +01:00
rofl0r af5c6f0c6a replace hostent lookup with better performing in-memory copy.
the central dns resolver function proxy_gethostbyname() used
to iterate over the gethostent() db (/etc/hosts) on each dns
request.
since this is not threadsafe, we synchronized access to it
previously using mutexes. the parsing of this file is slow,
and blocking all threads to do it even moreso.
since gethostent_r() is only available on a few platforms,
i decided to read the hostent db once and then use a quick
in-memory lookup on further usage.

+ some further refactoring.
2012-11-08 01:18:19 +01:00
rofl0r c698d48c03 move stringfromipv4 into common.c 2012-11-07 22:00:03 +01:00
rofl0r 03ee84060e remove THREAD_SAFE ifdefs. from now on, pthreads are required.
additionally we have some explicit init and deinit routines for
core.c now, so that we dont need to share variables with
libproxychains.c.
2012-11-07 21:31:19 +01:00
rofl0r bd07ca49b9 use pipe instead of pipe2 2012-11-07 21:31:18 +01:00
rofl0r f570a66902 use mutexes also to protect the pipe communication
wasn't threadsafe before.
2012-11-07 21:31:18 +01:00
rofl0r d0abc93c74 preliminary first fork-safe version
instead of allocating memory in the child, we now use the allocator
thread to do all the necessary allocations himself.
additionally we provide a clean API to query the ip <-> dns mapping.
these functions connect via a pipe to the allocator thread, and
exchange messages.

further cleanup is needed, but it seems to work so far.
thread-safety is not yet guaranteed.

closes #1
2012-11-07 21:31:11 +01:00
rofl0r 25afe98b20 failed attempt to use shared memory for the ip <-> dns mapping
this is in order to get irssi, which forks for DNS lookups,
and similar programs, to work as intended.

in a previous attempt i learned that shared memory created in a
child process is not visible to the parent;
in this attempt i spin off a thread from the parent which listens
on a pipe and manages the shared memory allocation from the parent
address-space. however this doesnt work as expected:
memory allocated in the parent after the child forked is not visi-
ble to the child as well.

so what happens is: irssi starts a child process, the thread allocs
memory and hands it to the child, the child attempts to write and
segfaults. however irssi doesnt crash. since now the memory is
already allocated, doing the dns lookup again will succeed.

i.e. the dns lookup works now in irssi by luck.
all but the first dns lookups will suceed.

however this is not good enough for me to be satisfied, i commit
this only for documentation purposes.
2012-11-07 16:49:14 +01:00
rofl0r 7bca3ba5ef main.c: fixed forgotten initialization for second loop using i
this caused the combination of -q -f somefile to not find the dll
in the current dir, because it started iterating the directory
list with 2 instead of 0.
2012-11-04 06:14:33 +01:00
rofl0r e05cafc8e2 put a mutex lock around gethostent() usage, to prevent internal
races. the external usage was covered by the latest commit.
2012-11-04 05:23:51 +01:00
rofl0r 2d58820635 proxy_gethostbyname: fix thread safety issues arising from ...
gethostent() usage.

also set hostent.h_aliases member to a valid pointer.
2012-11-04 05:02:57 +01:00
rofl0r b851b39a37 add RcB tags to core.h
this is handy as it allows me to do quick testprograms using my RcB program,
without specifying dozens of things on the command line.
2012-11-04 05:01:38 +01:00
rofl0r e8d49b02e8 gethostbyaddr hook: also set aliases.
i inspected behaviour of libc's and they all seem to set a valid
h_aliases pointer, of which the first one should be NULL, if no
aliases exist.
2012-11-04 04:58:48 +01:00
rofl0r 859dabb302 common.h: supply a default for SYSCONFDIR if not passed via CFLAGS 2012-11-04 04:57:45 +01:00
rofl0r bddb79a286 fix bug which lead to segfault in ubuntu 12.04 telnet
it called gethostbyname and expected that the h->h_name was set.

this code path here which gets only active if the passed name
equals the gethostname() result failed to set a couple of values.

additionally fixed usage of strncpy, which causes the entire
memory buffer to be written, even when the string is much shorter.

a similar bugfix was independently discovered by semion laptev, but my
version is threadsafe - his version introduces a new static buffer,
even though we have plenty of thread-safe space reserved exactly
for this usage case, thus causing a regression.
2012-11-04 01:00:58 +01:00
guanqun bbf8b7aab0 fix typo in help message 2012-08-27 23:30:45 +08:00
rofl0r 01b8c81e90 add some default localnets (commented) to config 2012-08-16 16:44:51 +02:00
rofl0r 923c4f1026 fix core.h to be usable on its own 2012-08-06 01:26:34 +02:00
rofl0r 108610e30e core.c: add getservbyname_r replacement function for mac 2012-08-06 01:26:03 +02:00
rofl0r 0f1bc719fd put base64 variable to the place it gets used 2012-08-04 17:55:37 +02:00
rofl0r 068e088a8b tunnel_to: use better suited type 2012-08-03 10:43:59 +02:00
rofl0r 40bb78b53f fix omission in common.c 2012-07-16 02:42:09 +02:00
rofl0r 80e58726e2 correct copyright of main.c 2012-07-16 02:36:35 +02:00
rofl0r ab3ca31871 getaddrinfo: cosmetics 2012-07-16 01:34:00 +02:00
rofl0r 037edbcb8e proxy_getaddrinfo: fix segfault when hints is NULL 2012-07-16 01:19:30 +02:00
rofl0r 40edf758ee make getaddrinfo threadsafe 2012-07-16 01:05:28 +02:00
rofl0r 4b999cdae7 use threadsafe getservbyname_r 2012-07-14 17:59:56 +02:00
rofl0r 71e15e2edd simplify log func 2012-07-14 17:59:06 +02:00
rofl0r e5e87c8f22 put abort functionality into get_config_path to further reduce code duplication 2012-07-08 23:47:56 +02:00
rofl0r fba5f5694c use config file lookup routine from a common place 2012-07-08 23:32:50 +02:00
rofl0r 3004240462 slightly better error message 2012-07-08 21:23:39 +02:00
rofl0r 364c785970 print everything to stderr, and fflush on PDEBUG 2012-07-08 04:18:42 +02:00
rofl0r 1fc7e38ee0 fixup for d95ef42d48 2012-07-08 04:09:50 +02:00
rofl0r 2c9c4d9da7 simplify load_sym code and remove potential aliasing violation. 2012-07-08 00:27:46 +02:00
rofl0r d95ef42d48 externalize some variables, which are used from both C files 2012-07-08 00:16:00 +02:00
Jahrome 229eb7cc5a bugfix: localnet never used if no port specified. Fix typo. 2012-05-22 23:11:03 +02:00
rofl0r 45f50ac754 cosmetic fix 2012-04-24 02:04:02 +02:00
rofl0r d72e668767 use sane defaults 2012-04-24 01:48:17 +02:00
rofl0r 561679fbcd remove dead code 2012-04-24 01:46:57 +02:00
rofl0r bc23ef8f46 fix debug message 2012-04-23 22:56:44 +02:00
rofl0r 88a54e872a use dynloader to call init() func when gcc is available, and lock it properly 2012-04-23 22:21:40 +02:00
rofl0r caed782652 macros 2012-04-23 22:21:40 +02:00
rofl0r f55c6bc4d5 fix PDEBUG macro 2012-04-23 22:21:40 +02:00
rofl0r 49293b180d some cleanup in core.h 2012-04-23 20:26:13 +02:00
rofl0r 3260ee812a debloat init_lib() 2012-04-23 19:51:14 +02:00
Jianing Yang 65471b750c bugfix: localnet conflicts with proxydns 2012-03-07 17:58:37 +01:00
rofl0r e99dd76941 complete sysconfdir support 2012-01-30 18:29:35 +01:00
rofl0r f4e4c8c2b1 remove unnecessary sprintf call 2012-01-29 02:34:04 +01:00
rofl0r dbb172b510 use PROXYCHAINS_CONF_FILE consistently 2012-01-28 18:34:40 +01:00
rofl0r 48373ab7a5 fix forgotten etc 2012-01-28 18:33:40 +01:00
rofl0r 070051bb73 use macros for mutex stuff 2012-01-27 21:30:42 +01:00
rofl0r c36db11ebc complete mac support 2012-01-27 20:48:24 +01:00
rofl0r 5b5cc604a6 remove dangerous uses of inet_ntoa 2012-01-27 20:00:22 +01:00
rofl0r 526fb8b410 pass dll_name to proxychains app, makes it easier to port to MAC 2012-01-27 19:31:01 +01:00
rofl0r 2acdcd9707 pass install prefix to proxychains app, to find /etc 2012-01-27 19:28:00 +01:00
rofl0r 3bb03892fa remove superfluous DEBUG checks 2012-01-27 19:14:17 +01:00
rofl0r e32ef26fec ran indent tool on the source code
now everythings finally correctly indented and future patches
will not be overshadowed by whitespace noise.
used the following settings
--braces-on-func-def-line
--braces-on-struct-decl-line
--braces-on-if-line
--dont-break-procedure-type
--leave-preprocessor-space
--continue-at-parentheses
-linux
-i8
-brace-indent1
--case-indentation8
--space-after-cast
--line-length120
--no-space-after-for
--no-space-after-if
--no-space-after-while
--leave-optional-blank-lines
--ignore-profile
--space-special-semicolon
--indent-label8
2012-01-27 19:03:21 +01:00
rofl0r 80817dbf6f fix *all* trailing whitespace at once 2012-01-27 17:55:37 +01:00
rofl0r 73c4195ce3 remove magic number 2012-01-27 17:50:04 +01:00
rofl0r cce902b301 eliminate dead code 2012-01-27 17:48:41 +01:00
rofl0r 4da71e1b44 make remote_dns_subnet a config option 2012-01-26 12:44:42 +01:00
rofl0r 75d41dea3d use the right tool for the job. getopt clearly isnt 2012-01-26 05:11:52 +01:00
Adam Hamsik 75bd465038 Fix localnet issue with fix suggested in #issue 4 on github. 2012-01-24 08:42:04 +01:00
rofl0r 8fd0d95bc3 add quiet mode to proxychains launcher
this will be passed on to the DLL via a env variable
- additionally, now everything prints to stderr
- fixes a bug which would print DLL init even in quiet mode
- fixed a couple of bugs in argv parsing
2012-01-24 08:26:37 +01:00
rofl0r 150e624182 add proper feature tests for putenv, getenv 2012-01-24 07:14:45 +01:00
rofl0r c3a0f677fb fix signedness of hashfunc 2012-01-17 16:09:55 +01:00
rofl0r 0845d1c044 fix potential buffer overflow (exists in vanilla 3.1 as well) 2011-11-07 17:07:00 +01:00
rofl0r 16fa60a705 oh wait. checking the hash is not enough. 2011-11-07 04:11:20 +01:00
rofl0r 08d6feace8 fix SOCKSv4a 2011-11-07 00:09:46 +01:00
rofl0r a6d778a0f1 cleanup debug code and remove warnings 2011-11-06 23:35:57 +01:00
rofl0r 6ac6abd3de add possibility to search for DLL in exe's path 2011-11-06 17:47:44 +01:00
rofl0r 41e73ab58d fix realloc and add a layer of threadsafety upon dns-list accesses 2011-11-06 17:46:11 +01:00
rofl0r d5ae1f9202 buff is unsigned char now 2011-11-06 15:47:00 +01:00
rofl0r 4cb2cf3416 fix index algo 2011-11-06 15:18:50 +01:00
rofl0r 5de7fa20c8 implemented remote proxy dns lookup via use of reserved ip ranges and a lookup table 2011-11-06 14:12:50 +01:00
rofl0r d30b0a8712 cleaned up main program 2011-11-06 14:11:36 +01:00
rofl0r b1febc25d6 fix getopt usage (C) unknown author 2011-09-10 23:13:26 +02:00
rofl0r c377789d14 care about the argv array when the filename is passed 2011-09-10 23:05:07 +02:00
rofl0r 2f1958d551 remove nonexisting docs 2011-09-10 22:34:01 +02:00
rofl0r b8bdfc2d5e care about HOME also in proxychains loader. put common symbols in common.h 2011-09-10 22:32:27 +02:00
rofl0r 4d517cdfb0 exact fix for the wrong getnameinfo prototype in GLIBC < 2.14 2011-09-04 18:13:30 +02:00
rofl0r 218d242aab some cosmetic changes 2011-09-04 02:03:47 +02:00
rofl0r 5095296ddf fixed a couple of bugs, warnings, added basic gethostbyaddr support and a plain Makefile 2011-09-04 01:45:16 +02:00
rofl0r a6792b937d fixed usage of int instead of socklen_t 2011-09-02 22:53:50 +02:00
rofl0r 86be015f0d remove gnu autocrap 2011-09-02 20:32:04 +02:00