Commit Graph

354 Commits

Author SHA1 Message Date
Robert James Kaes
b4ef24844f First change all the hashmap related calls to use the new API.
The remove_connection_headers() function now handles both the Connection
header _and_ the Proxy-Connection header.
2002-04-25 18:58:08 +00:00
Robert James Kaes
d1031e2c8f The hashmap API changed, so this function needs to be changed as well. 2002-04-25 18:56:43 +00:00
Robert James Kaes
ce51a74045 Removed the hashmap_keys() function and added the "iterator" concept.
This required a bunch of changes to the source (like the inclusion of the
end_iterator member variable.)  All this was required by sites like Yahoo
which send out multiple "Set-Cookie" headers.  tinyproxy needs to handle
this situation correctly.
2002-04-25 18:55:56 +00:00
Robert James Kaes
b5df4f1cf0 hashmap_search() only takes two arguments, so removed the unneeded NULL. 2002-04-25 18:52:09 +00:00
Robert James Kaes
d7c3f23610 bind_address has been moved inside the config structure. Fixed up a
problem where "data" was being freed even if it had not been allocated
(because of an error condition.)
2002-04-24 16:48:34 +00:00
Robert James Kaes
335d787018 Fixed a couple of problems where tinyproxy was trying to free a memory
block which had not been allocated.

Also, the "proxy-connection" to the list of headers we don't pass.
2002-04-24 16:47:19 +00:00
Robert James Kaes
89ada2df28 Moved bind_address inside the config structure. 2002-04-24 16:45:45 +00:00
Robert James Kaes
c5b9ec889e Renamed the LOCKing macros and added assert debugging code. Also, moved
the mutex initialization into a function call so that I can use an
error checking mutex once I figure out how to get it to work on my
computer.
2002-04-22 19:41:17 +00:00
Robert James Kaes
08077cc9e1 The "Bind" directive sets a binding address which the outgoing connections
will use.
2002-04-22 19:35:24 +00:00
Robert James Kaes
1953348c90 Added the "Proxy-Connection" header to the list of client headers which
are not passed along.
2002-04-22 19:34:50 +00:00
Robert James Kaes
2ec7a4dd72 The log_message() function now stores the messages if the configuration
file has not been read yet.  The reason for this is that we don't know
where to log the messgaes until _after_ the config file has been
processed.
2002-04-22 19:34:20 +00:00
Robert James Kaes
60f61c8f0c Added the "Bind" directive. 2002-04-22 19:33:01 +00:00
Robert James Kaes
aa68eb8540 Whoops. The previous include only had the code conditionally removed.
Remove for real this time.
2002-04-18 21:54:50 +00:00
Robert James Kaes
1db154464e Removed the call to inet_aton() since the gethostbyname() function handles
the dotted-decimal case itself.
2002-04-18 21:53:33 +00:00
Robert James Kaes
60f0a86c75 The stats now wait until after the client has finished sending all its
headers before sending the HTTP response back.  This should be more
standards compliant.
2002-04-18 21:43:53 +00:00
Robert James Kaes
73a53daf38 Removed the call to hstrerror() in the getpeer_string() function. It's
not available on all machines.
2002-04-18 18:48:22 +00:00
Robert James Kaes
d14b612e13 Fixed a memory leak in the hashmap_delete function. The array of maps was
not being deleted.
2002-04-18 18:40:38 +00:00
Robert James Kaes
9a8d732a13 Changed all calls to strdup to safestrdup. This should provide better
memory usage tracking.
2002-04-18 17:59:21 +00:00
Robert James Kaes
a66aae880c Fixed a memory leak in reading in headers from the client or server. 2002-04-18 17:58:52 +00:00
Robert James Kaes
3b5a4b7362 Replaced the explicit header includes with one call to tinyproxy.h. Also,
added the utils.h header and changed all the malloc, calloc, free, and
strdup to the appropriate safe variety.
2002-04-18 17:57:20 +00:00
Robert James Kaes
ce4687fbf9 Added the debuggin_strdup() function and the associated safestrdup()
macro.  Also, added asserts to the other debugging_* functions.
2002-04-18 17:49:14 +00:00
Robert James Kaes
43860d2469 Moved the filter_destroy() logic from inside the signal handler. It's now
been moved to inside the main() function.
2002-04-18 17:04:04 +00:00
Robert James Kaes
5822ec3d44 Moved the log rotation code out of the signal handler and into it's own
function.  The signal handler now simply sets a flag which is monitored
inside the thread_main_loop() function.  The log rotation code has also
been tightened to handle any error conditions better.  Credit to Petr
Lampa for suggesting that system functions inside of a signal handler is
bad magic.
2002-04-18 16:57:06 +00:00
Robert James Kaes
3e60a5b819 Removed the LOOKUP_LOCK() and LOOKUP_UNLOCK() macros since I believe I
need locking around both gethostbyname() and gethostbyaddr() at the same
time.
2002-04-17 20:56:13 +00:00
Robert James Kaes
1d85484c3a If the initialize_conn() function fails, close the socket and return.
Also, changed the call to check_acl() to include the peer's IP and string
addresses.
2002-04-17 20:55:21 +00:00
Robert James Kaes
42098699db Removed the close(connfd) call since the socket has already been closed
from within the handle_connection() function.

Added tests to make sure pthread_create() succeeds.

Added defined tests for pthread_cancel() since it's not available on all
platforms.
2002-04-17 20:54:26 +00:00
Robert James Kaes
44bbdb2623 Changed the check_acl() function to require the peer IP address and string
address from the calling function.
2002-04-17 20:52:45 +00:00
Robert James Kaes
04da777bed Removed the duplicate calls to strlen(). 2002-04-16 03:22:16 +00:00
Robert James Kaes
0e4436a070 Tightened the lookup_domain() function. 2002-04-16 03:21:46 +00:00
Robert James Kaes
ca10b1353d Various code clean up. There is nothing new here, just mechanical changes
to the source to either remove code which is not needed, or consolidate
common code into a common section.
2002-04-16 03:20:43 +00:00
Robert James Kaes
c722851bce Cleaned up the return values of the two anonymous functions to make the
code cleaner and smaller.
2002-04-16 03:19:19 +00:00
Robert James Kaes
4b7de22999 Added a test to make sure the "whole_buffer" could be allocated. 2002-04-15 04:16:01 +00:00
Robert James Kaes
550145d49e Changed the variable type in read_request_line() to an unsigned variable
in order to detect negative returns.
2002-04-15 04:14:03 +00:00
Robert James Kaes
f0b6861998 Added an assert() call to detect design errors. 2002-04-15 04:13:14 +00:00
Robert James Kaes
a5d3212751 Changed the error boolean flag into a pointer to an error string and an
error code.  We're storing this information because tinyproxy doesn't
output the error information until _after_ the client has sent it's
information.
2002-04-15 02:07:27 +00:00
Robert James Kaes
c86d22226f Added additional error handling for the bind() and listen() system calls
when setting up the listening socket.
2002-04-13 19:03:18 +00:00
Robert James Kaes
be47c1791d Modified the opensock() function to respect the Listen directive. If it's
set, bind all outgoing addresses to this local address.
2002-04-13 05:20:19 +00:00
Robert James Kaes
ecb249f424 Added code to support the new ConnectPort directive which is needed to
improve security of the tinyproxy system.  This new directive allows the
admin to block CONNECT methods to illegal ports.
2002-04-12 17:00:42 +00:00
Robert James Kaes
660e4d5687 Added the support code to process a ConnectPort configuration directive. 2002-04-12 16:59:37 +00:00
Robert James Kaes
f1a451faea Added a write_via_header() function which is now used in both header
processing functions.  Also, added a list of headers to drop in the
process server header functions.
2002-04-12 03:09:04 +00:00
Robert James Kaes
85a82af5f5 Did a bit of consolidation by moving code into remove_connection_headers()
and added the get_content_length() function.

The process_server_headers() function was rewritten to remove the
Connection header correctly, and also retrieve the Content-Length value.
This value is needed in the relay_connection() function since there are
some remote machines which do not properly close down the connection once
the body has been retrieved.  Thanks to James Flemer for finding a test
case for this problem.
2002-04-11 20:44:15 +00:00
Robert James Kaes
ce06f27a35 Added the remote_content_length variable to store the number of bytes the
remote server is supposed to be transmiting to the client.
2002-04-11 20:27:51 +00:00
Robert James Kaes
abdfa8b2da Removed the dependency on LIBOBJS and instead use the ADDITIONAL_OBJECTS
variable in conjunction with _DEPENDENCIES and _LDADD.  The change here
makes filter a "required" module in the sense that it will always be
compiled (to make sure it doesn't get out of date), but it will
conditionally included in the object file.
2002-04-10 21:51:01 +00:00
Robert James Kaes
a903b6d997 Added an extra new line at the end of the file to quiet picky compilers.
:)
2002-04-10 17:29:18 +00:00
Robert James Kaes
4fa5cef491 The malloc/free functions should be in stdlib.h, but if we can't find
stdlib.h then try including malloc.h.  Maybe this will allow clean
compiling on some platforms.
2002-04-09 22:02:05 +00:00
Robert James Kaes
eef4559783 Removed the compare_header() function since it's been replaced by a call
the anonymous_search().

Added a few more log_message() calls to better explain error conditions.

Fixed up a problem with X-Tinyproxy sending logic.
2002-04-09 20:06:24 +00:00
Robert James Kaes
0c5bd57698 Added more include logic code to be more portable. 2002-04-09 20:05:15 +00:00
Robert James Kaes
7409281e34 Replaced the internally used linked list with a call to the hashmap
module.  Code reuse is a good thing.
2002-04-09 20:04:39 +00:00
Robert James Kaes
3c631c6e5c James Flemer cleaned up the make_netmask() function to remove the static
table.  Very nice.
2002-04-09 19:11:09 +00:00
Robert James Kaes
2f54303d98 Cleaned up the include lines to be slightly more portable (I hope.) 2002-04-09 16:28:13 +00:00
Robert James Kaes
eb78e5e1f4 Added the cancelation setting to make sure the thread stops immediately. 2002-04-09 00:37:43 +00:00
Robert James Kaes
0d66719c5a Just moved the looping code from main() into thread_main_loop(). 2002-04-08 21:35:10 +00:00
Robert James Kaes
bf82c863bc Just a variable name change to make it easier to read. 2002-04-07 21:37:07 +00:00
Robert James Kaes
1d52d9d510 Updated the copyright notice. 2002-04-07 21:36:39 +00:00
Robert James Kaes
fb736ec3fb A _tonne_ of changes. It would almost be easier to just read the source
itself to find out all the changes.  Changed the process_client_header()
function to use the hashmap and vector modules.  I've made this change to
better handle the Connection header.  The Connection header, it it's
present, lists all the headers which should _not_ be transmitted any
further along.  An HTTP/1.1 proxy must respect this.

Other changes are basically cosmetic.
2002-04-07 21:35:59 +00:00
Robert James Kaes
5e9aa90009 Update the list of source code files to include the vector and hashmap
files.
2002-04-07 21:33:38 +00:00
Robert James Kaes
97a72783f5 Cleaned up some of the code to handle errors better. Also, a little bit
easier to read in the variable department.
2002-04-07 21:32:01 +00:00
Robert James Kaes
5b3658b122 A hashmap implementation. I use this for storing the headers from the
client.
2002-04-07 21:30:02 +00:00
Robert James Kaes
54f369a734 Added the vector module which is a vector implementation. I use it in the
hashmap implementation.
2002-04-07 21:29:23 +00:00
Robert James Kaes
e70b98252a Added define check for XTINYPROXY_ENABLE. Although, I'm not sure if this
is the correct way to do this, since grammar.c probably doesn't get
recomplied even if config.h is changed.  Must look into this more.
2002-04-02 17:17:30 +00:00
Robert James Kaes
1819c0f818 Added code to check for "errors" from the accept call in thread_main() and
also a new thread_kill_threads() function which should cancel all threads
when the main thread is being closed.
2002-01-25 00:01:45 +00:00
Robert James Kaes
388920bc53 Added code which checks to see if the user has signalled that tinyproxy
should be closed.
2002-01-08 02:02:25 +00:00
Robert James Kaes
ea0d956a57 Removed an unused header. 2001-12-28 22:31:12 +00:00
Robert James Kaes
a0dee6c57f Check for errors returned by the accept() function. 2001-12-28 22:29:11 +00:00
Robert James Kaes
9520866ab3 Changed send_http_message() to use the write_message() function.
Changed httperr() to use the same concept as the write_message() function.
Still haven't figured out how to combine the code.
2001-12-24 00:02:32 +00:00
Robert James Kaes
b10221fa07 Added the write_message() function (from reqs.c) 2001-12-24 00:01:32 +00:00
Robert James Kaes
475e526a48 Moved write_message() into sock.c because I'm using it in other places. 2001-12-24 00:01:02 +00:00
Robert James Kaes
831b00dc7a Made the error message regarding the Idle timeout more verbose, and
changed the level to WARNING.
2001-12-23 22:00:36 +00:00
Robert James Kaes
c3124815a1 Cleaned up the code which sends the "Via" header. It now uses
write_message().
2001-12-23 21:55:08 +00:00
Robert James Kaes
b68354a9da Add a pre-processor test around the sys/types.h header file, to make sure
it's available before we try to include it.
2001-12-23 18:44:02 +00:00
Robert James Kaes
4ed73b6f07 Fixed up the order of some of the includes to cope with OpenBSD. Also,
test for the MSG_NOSIGNAL define.
2001-12-23 03:28:03 +00:00
Robert James Kaes
d6e5285e95 Updated the copyright notice. 2001-12-20 04:48:52 +00:00
Robert James Kaes
93f0406b7e Created the CHECK_CRLF() macro to handle the tests for the appropriate
control characters in a string.
2001-12-20 04:48:32 +00:00
Robert James Kaes
7240af4333 Changed the calls to write() to send() so that we can use send(...,
MSG_NOSIGNAL) and not get signals sent to the process. (easier for
debugging and the system doesn't need to worry about signals.)
2001-12-19 20:41:28 +00:00
Robert James Kaes
63a1fa96cc Removed duplicate code from process_server_headers() and removed the calls
to strlen(); readline() already returns the length of the string, so use
that instead.
2001-12-19 20:40:23 +00:00
Robert James Kaes
e964cf0d35 Damn---removed the debugging code from write_message(). 2001-12-19 05:20:01 +00:00
Robert James Kaes
5140f01d5c Opps! Fixed a problem with negative numbers. :) 2001-12-19 05:19:03 +00:00
Robert James Kaes
56b541d76b Redefined HTTP_LINE_LENGTH to be based on MAXBUFFSIZE (and set to around
16 KB.)

Added the TUNNEL_CONFIGURED() macro to help with testing for the tunnel
support code.

Create the write_message() function to encapsulate the code which sends
the information to the file descriptor.

Moved the tunnel code into it's own function.
2001-12-19 05:13:40 +00:00
Robert James Kaes
17103bf8fe Updated the list of headers to ignore. 2001-12-18 05:01:03 +00:00
Robert James Kaes
faf655c5db Added the code to log the request when in tunnelling mode. 2001-12-17 19:10:56 +00:00
Robert James Kaes
9448787ff2 Added UPSTREAM_CONFIGURED() macro to help clean up the code.
Ignore any blank lines when tinyproxy is expecting a request line.

Instead of sending the request line to the remote server in pieces,
tinyproxy nows sends it in once go. This was done to fix a problem with
some sites like www.heise.de.

Changed all calls to connptr->ssl to connptr->connect_method.

Changed all calls to connptr->send_message to
connptr->send_response_message.

Moved the call to Via header code to inside to the tests to handle if
tinyproxy is sending an error message (don't need to send any headers.)
2001-12-17 00:11:32 +00:00
Robert James Kaes
fdb4952e5f Added the assert() calls to safe_write() to make sure the arguments are
sane.
2001-12-17 00:00:24 +00:00
Robert James Kaes
6919faea77 Removed reference to ternary.h 2001-12-15 20:08:24 +00:00
Robert James Kaes
997d3daa65 No longer need this system since it was only being used in the DNS caching
section and the anonymous header section. Once I had removed the DNS
caching, the ternary tree system was overkill for the anonymous header
code. Replaced in the anonymous header section with a simple linked list.
2001-12-15 20:07:45 +00:00
Robert James Kaes
b969ed4302 Changed safe_write() to fully send all the data in the buffer it was
passed. Also safe_write() and safe_read() now use char pointer buffers
rather than the void pointer style.
2001-12-15 20:04:04 +00:00
Robert James Kaes
cad9a5d11b Switched from using the ternary tree to a simple linked list. 2001-12-15 20:02:59 +00:00
Robert James Kaes
b811c2fbf8 Removed the references to ternary.c and ternary.h 2001-12-15 20:02:26 +00:00
Robert James Kaes
75ab2c8de3 Removed the include "dnscache.h" header file. 2001-12-15 06:02:16 +00:00
Robert James Kaes
a4934e2232 Added the host name lookup code (which use to be in the DNS caching
system.)
2001-12-15 05:58:30 +00:00
Robert James Kaes
b15be9de3e Removed the references to dnscache.c and dnscache.h 2001-12-15 05:57:40 +00:00
Robert James Kaes
bf18ec5adc Removed the DNS caching system because tinyproxy did not determine the TTL
of the host names being resolved, which is not recommended by RFC2616.
Basically, if a HTTP client doesn't respect the TTL is should not be
caching the address since it leaves itself open to DNS spoofing attacks.

Also, having a DNS caching system is an administater decision, and so
should not be included in the tinyproxy source.
2001-12-15 05:57:13 +00:00
Robert James Kaes
e0694a8f6e Added support for the <pthreads.h> header. 2001-11-26 05:23:49 +00:00
Robert James Kaes
09fdf9af74 Increased the maximum buffer size to 96 KB 2001-11-26 01:39:53 +00:00
Robert James Kaes
a03a1d3847 Fixed a problem with not buffering more than 2K (which is obviously a
problem. :)
2001-11-26 01:39:07 +00:00
Robert James Kaes
fa193dcd22 send_message changed to send_response_message in the conn_s structure. 2001-11-25 22:08:11 +00:00
Robert James Kaes
f8b61da4ae Added tests for _every_ header to make sure they are actually present on
the system.
2001-11-25 22:07:36 +00:00
Robert James Kaes
2f4ccc04ae Added an additional test to make sure the <regex.h> header is actually
present on the system.
2001-11-25 22:06:54 +00:00
Robert James Kaes
5e17d0736e Removed some of the members of the structures and renamed a few others. 2001-11-25 22:06:20 +00:00
Robert James Kaes
e9cfd1f82e makenewline() now copies the data into the structure rather than just
storing the pointer to the data.
add_to_buffer() is now exported.
Renamed writebuff() and readbuff() to write_buffer() and read_buffer().
2001-11-25 22:05:42 +00:00
Robert James Kaes
6e054e4a72 Added a new error code. 2001-11-25 02:22:05 +00:00