Commit Graph

506 Commits

Author SHA1 Message Date
Robert James Kaes
2736a19518 (debugging_free): Rather than assert on a NULL pointer, log the NULL
pointer and return.
2003-06-26 18:14:13 +00:00
Robert James Kaes
ddcac5ae09 Added a test to define INADDR_NONE if it's not present. For example,
SunOS (solaris 2.8) does not include this define.  [Thank to Ben
Hartshorne for pointing this out.]
2003-06-25 18:20:22 +00:00
Robert James Kaes
4c9141aac6 Removed the "ViaHeader" directive and replaced it with the
"ViaProxyName" directive.  The "Via" HTTP header is _required_ by the
HTTP spec, so the code has been changed to always send the header.
However, including the proxy's host name could be considered a
security threat, so the "ViaProxyName" directive is used to set the
token sent in the "Via" header.  If the directive is not enabled the
proxy's host name will be used.
2003-06-20 17:02:13 +00:00
Robert James Kaes
b081019d5a (connect_to_upstream): Fixed an off-by-one error in the snprintf()
call used to build the URL for the upstream proxy. [Patch suggested by
David T. Pierso]
2003-06-06 16:14:50 +00:00
Robert James Kaes
91e082671a (upstream_get):
(upstream_add): Added support to allow ip addresses and networks to be
used when matching an upstream proxy directive.
[Code by Peter da Silva]
2003-06-02 21:55:14 +00:00
Robert James Kaes
ea50171a95 Changed the safefree() macro to make it safe to use a conditional
statement, and also safe to use with a rvalue that has a side
effect.  [Bug fix recommended by Peter da Silva]
2003-05-31 23:04:15 +00:00
Robert James Kaes
77ca1c8ce0 # Changed all the for calls to use the != test rather than < test.
The change was recommended in the C/C++ User Journal magazine.
2003-05-31 23:02:21 +00:00
Robert James Kaes
af5e1e29f6 # Changed the calls to vector_getentry() to use the new calling
convention.
2003-05-30 16:22:30 +00:00
Robert James Kaes
1955dcd47b (vector_getentry): Changed the API to return the data pointer and have
the length returned in a argument variable pointer.  This should be a
more natural way of using the function.
2003-05-30 16:21:48 +00:00
Robert James Kaes
c3eaebd1c5 # Added a vector_prepend() function and recoded the old vector_insert()
to be a general "insert" for both vector_append() and vector_prepend()
2003-05-29 21:07:22 +00:00
Robert James Kaes
8ab278998f # Renamed the vector_insert() calls to vector_append() 2003-05-29 20:48:25 +00:00
Robert James Kaes
42f9f37afc (vector_append): Renamed the vector_insert() function to more
accurately indicate that entries are appended to the end of the
vector.
2003-05-29 20:47:52 +00:00
Robert James Kaes
4a377a712d Improved the upstream proxy support by making the upstream proxy
server configurable based on the destination host.  [Code written by
Peter da Silva]
2003-05-29 19:44:00 +00:00
Robert James Kaes
5e1303ecd1 (establish_http_connection): If the port being requested is not a
standard HTTP port (80 or 443) append the port string to the host
header; otherwise, leave the host string with only the host's domain
name.

Replaced all occurrences of constant 80 and 443 with defines HTTP_PORT
and HTTP_PORT_SSL.
2003-05-05 16:46:05 +00:00
Robert James Kaes
ac88af1f71 Fixed a bug that would kill a child process because of an invalid
safefree() call.  Basically, destroy_conn() was trying to free memory
not allocated by malloc.  [Fix by David T. Pierson]
2003-05-04 04:35:10 +00:00
Robert James Kaes
c94bfa8223 (build_url): Rebuild the URL from the component pieces. This function
is used by the transparent proxy code.  [Anatole Shaw]
(process_request): Fixed up the transparent proxy code so that
filtering can be done on the whole URL.  [Anatole Shaw]

(pull_client_data): Added a bug fix for Internet Explorer (IE).  IE
will leave an extra CR and LF after the data in an HTTP POST.  The new
code will eat the extra bytes if they're present.  Thanks to Yannick
Koehler for finding the bug and offering an explanation as to why it
was happening.

Changed all calls of connptr->remote_content_length to
connptr->content_length.server
2003-04-16 18:11:58 +00:00
Robert James Kaes
648e8f1438 # Changed it again to this time use the TINYPROXY_DEBUG environment
variable to determine whether to wait for a connection from GDB.
2003-04-16 18:04:58 +00:00
Robert James Kaes
4a942bc59a # The programmer is now made to _explicitly_ enable the GDB support in
the child handling function.
2003-04-16 16:39:23 +00:00
Robert James Kaes
6ff4192069 Removed the remote_content_length field in the "conn" structure and
replaced it with a smaller structure containing both the remote/server
and the local/client content-length fields if they're present in the
HTTP response headers.
2003-04-16 16:37:59 +00:00
Robert James Kaes
bcf25dc67e (add_error_variable): Test whether connptr->error_variable is NULL,
and if so call safemalloc().  This is needed since saferealloc() will
assert() if the first argument is a NULL pointer.
2003-04-01 16:41:33 +00:00
Robert James Kaes
7cd19206cc (establish_http_connection): Always include the port number for the
requested server.  This fixes a problem when the server is not
listening on the default port, 80.
[Fix suggested by duncan@sapio.co.uk]
2003-03-26 16:47:30 +00:00
Robert James Kaes
63a7914830 # Moved the location of the "initializing" log message to below the
processing of the command line options.
2003-03-17 04:24:19 +00:00
Robert James Kaes
d2c9ffac23 Made get_html_file() and lookup_variable() static functions since they
are only used with this file.
2003-03-14 22:49:03 +00:00
Robert James Kaes
5faa0879ec # Added copyright notices for Steve. Reformatted the source code to
better match the existing tinyproxy practise.  Included a few bug
  fixes from Steve.
2003-03-14 22:45:59 +00:00
Robert James Kaes
cc90414b29 (send_http_message): Changed the function to use the new http_message
API.
2003-03-14 06:15:27 +00:00
Robert James Kaes
c76183a3f0 # Updated all the calls to indicate_http_error() to include a
terminating NULL.  The va_arg() function requires it to work
  properly.
2003-03-14 06:13:04 +00:00
Robert James Kaes
75dd0b22c4 Allow the URL for the statistic page to be controlled from the
configuration file, rather than being hard-coded in the program.
[John M Wright]
2003-03-13 21:42:46 +00:00
Robert James Kaes
a46bfdc2e0 Moved the send_http_error_message() and indicate_http_error()
functions into the htmlerror.c file, and recoded them to use the new
variable substitution system. [Steven Young]
2003-03-13 21:34:38 +00:00
Robert James Kaes
badd237fe6 # Added variables to config structure to keep track of the files to be
displayed for various HTTP errors and the stats page. [Steven Young]
2003-03-13 21:32:33 +00:00
Robert James Kaes
b06f26cba1 # Changed showstats() to use the HTML variable functions when
possible.  It still retains the hard-coded page for when an HTML file
  is not available. [Steven Young]
2003-03-13 21:31:03 +00:00
Robert James Kaes
cb8aaf521e # Changed calls to indicate_http_error() to use the new HTML variable
substitution mechanism. [Steven Young]
2003-03-13 21:29:45 +00:00
Robert James Kaes
7995027c8c # Added parser support for the error file configuration keywords
(ErrorFile, DefaultErrorFile, StatFile) [Steven Young]
2003-03-13 21:28:37 +00:00
Robert James Kaes
056bbf84bd # Added variables to keep track of the variables to be substituted in
.html files displayed to the client [Steven Young]
2003-03-13 21:27:29 +00:00
Robert James Kaes
a830af5097 # Steve Young's code to implement file based HTML error messages,
rather than the hard coded string.
2003-03-13 21:25:06 +00:00
Robert James Kaes
d28d9fb195 # Added htmlerror.c and htmlerror.h 2003-03-13 21:23:01 +00:00
Robert James Kaes
2057ffdb50 # Changed the wording of the header comment to remove the reference to
"dnsserver"
2003-03-13 19:31:09 +00:00
Robert James Kaes
99ec965544 # (child_main): If this is a debugging build output the child process
ID and wait for 10 seconds so we have time to connect gdb to the
  child.  This is needed if we want to use gdb against the child
  process.
2003-03-13 19:30:19 +00:00
Robert James Kaes
0a3a1d7c71 Fixed up the include order for the <sys/time.h> and <time.h> headers. 2003-03-13 16:56:28 +00:00
Robert James Kaes
e04ff12768 # Include the http_message.[ch] into the compiled tinyproxy object. 2003-03-13 05:28:46 +00:00
Robert James Kaes
686826c3b0 An API to handle HTTP messages as concrete entities. 2003-03-13 05:25:30 +00:00
Robert James Kaes
2f9370afe7 (chomp): Fixed up the code to prevent negative array access. Added
code to make sure the supplied arguments are valid.
2003-03-13 05:20:06 +00:00
Robert James Kaes
20d3008c38 (main): Removed duplicate code calling the filter_destroy() function.
Once is enough.  [Detected by John M Wright]
2003-02-26 22:37:38 +00:00
Robert James Kaes
40c4d3c57a # (connect_to_upstream): Improved the preprocessor directives to make
sure the function would compile cleanly regardless of how the
  directive was set.
2003-01-28 21:21:55 +00:00
Robert James Kaes
2f98fec1aa # Style clean up. 2003-01-27 18:45:25 +00:00
Robert James Kaes
abbf826445 (display_usage): Removed the output line mentioning that regular
expression support was included.  It will be there always.
2003-01-27 18:44:43 +00:00
Robert James Kaes
2fc9c76969 (connect_to_upstream): Reorganized the preprocessor directives to make
sure the function's symbol name is stored, even if upstream was not
compiled it.  This should keep some compilers from reporting errors.
2003-01-27 18:42:18 +00:00
Robert James Kaes
cb7e3eef04 Added support for conditionally using case sensitive filtering files.
Code changes from James E. Flemer.
2003-01-27 17:57:45 +00:00
Robert James Kaes
212abd64d7 (process_client_headers): Fixed inverted anonymous header logic. Fix
comes from the FreeBSD port through James E. Flemer.
2003-01-27 17:39:02 +00:00
Robert James Kaes
59ec5dc69f (strip_username_password): New function to remove any
username/password part from the host URI.

(extract_http_url), (extract_ssl_url): Use the new
strip_username_password function to remove any non-host information
from the URI.
2002-12-04 17:36:48 +00:00
Robert James Kaes
0a20bdd5b4 Removed the "bool_t" type since it conflicts with the newer C standards.
The type was just replaced by "unsigned int" types.
2002-12-04 17:06:14 +00:00
Robert James Kaes
d069b4fce9 (extract_http_url): Removed the leading "http://" from all the tests,
since it's skipped by the caller before the URL is passed to this
function.

(process_request): Include code to handle proxy FTP requests as
well.  This also lead to a bit of a cleanup in the calling conventions
of extract_http_url function.  tinyproxy can handle both types of
resources by skipping the leading :// part.
2002-11-29 19:25:59 +00:00
Robert James Kaes
e58343012f Included code to disable the sending of the Via header. This is now
controlled by the ViaHeader configure directive.
2002-11-26 21:44:43 +00:00
Robert James Kaes
c826b18437 (child_main): Cleaned up the notice string to be more clear why a
child is being closed.
2002-11-21 21:54:09 +00:00
Robert James Kaes
22df8c29e4 (main): Check to see if the PID file was created successfully, and if
not report this to the user and close the program.
2002-11-21 21:52:59 +00:00
Robert James Kaes
48df7d401c # Changed the return type for pidfile_create() to int from void. 2002-11-21 21:52:03 +00:00
Robert James Kaes
820832a647 (create_file_safely): Rather than exiting the program if there is an
error, a negative "error code" is returned to the program.  The
various callers then need to decide what to do.

(pidfile_create): Returns an error status depending on whether the PID
file was created successfully.
2002-11-21 21:51:34 +00:00
Robert James Kaes
d40a4e8af7 (relay_connection): Shutdown the client socket for writing once all
the data has been sent.
2002-11-13 17:48:48 +00:00
Robert James Kaes
a1e24ac839 (destroy_conn): Added code to log any error messages when the sockets
are closed.
2002-11-13 17:47:40 +00:00
Robert James Kaes
3b2be8ae88 Removed all the code supporting the TCP tunnelling feature of
tinyproxy.  There is really no need for this code, since there are
perfectly good programs out there (like rinetd) which are designed for
TCP tunnelling.  tinyproxy should be a good HTTP proxy, nothing more,
and nothing less; therefore, the tunnelling code is gone.
2002-11-03 17:10:33 +00:00
Robert James Kaes
69be2b84d7 (relay_connection): Ivan pointed out a bug with the code to send any
remaining data to the server when the connections are being closed.
It was a one line fix.
2002-10-17 19:27:08 +00:00
Robert James Kaes
1d39f204ca Fixed up the storing and sending of the internal tinyproxy logs prior
to when the log file is created.  Also, the log file is created with
the proper owner permissions.
2002-10-03 20:53:11 +00:00
Robert James Kaes
745c40650b #Style formatting change. 2002-10-03 20:50:59 +00:00
Robert James Kaes
942f22989a The internal log structure now uses a vector rather than a hash. This
change was required to actually display all the logs in the correct
order.  Also, all log lines are stored internally while tinyproxy is
starting.  At the appropriate point all the logs are written to the
log file.
2002-10-03 20:49:57 +00:00
Robert James Kaes
7fd291f407 Filtering is now case insensitive. 2002-10-03 20:40:39 +00:00
Robert James Kaes
2b44dbd7e4 #(makedaemon): Commented out the closing of the standard file
descriptors since we need them to display error messages.
2002-10-03 20:38:06 +00:00
Robert James Kaes
ac881909bf (child_main): Check to make sure memory could be allocated to handle
the child request.
(child_main_loop): Added a call to truncate_log_file() when the log
file is to be rotated.
2002-10-03 20:33:09 +00:00
Robert James Kaes
f8b5fe53e7 (main): Fixed up a bug reported by Oswald Buddenha where the log file was being initially created with the initial user's permissions, which is obviously a problem if tinyproxy is not running as the initial user. This is now fixed by delaying the creation of the log file until _after_ tinyproxy has been switched to the user it will run as. Confused yet? 2002-07-12 17:02:02 +00:00
Robert James Kaes
ab574cbec0 (create_file_safely):
(pidfile_create): Changed all the error logging to write to standard error and then exit the program.  This will prevent segmentation fault problems from occurring because the log file could not be created properly.
2002-07-09 19:02:57 +00:00
Robert James Kaes
4932b87fc9 (malloc_shared_memory): Changed the static character array to include the ".XXXXXX" string already. This saves one system call when creating a temporary file name. 2002-07-09 18:52:32 +00:00
Robert James Kaes
e50d0c4072 (child_make): Reset the various signals to the default signal handler so that the children can be properly destroyed. 2002-06-27 16:29:21 +00:00
Robert James Kaes
f0d7992765 (log_message): Changed the code so that the log is opened, written, and closed whenever a message is submitted. This allows the log file to be moved away, for example a rotating the log, and yet still have the information written to the correct file name by all the children. 2002-06-15 17:37:11 +00:00
Robert James Kaes
ac5d67c11a Renamed the "log_rotation_request" boolean to "received_sighup".
(main): Removed the log file creation code because it has been moved into the log.c file.  Also, removed the explicit fclose() for the log file since it will be close when the program has exited.
2002-06-15 17:35:03 +00:00
Robert James Kaes
8a9db93977 (child_main_loop): Moved the filter re-initiation code into the loop. This code is activated whenever the SIGHUP signal is received. 2002-06-15 17:31:31 +00:00
Robert James Kaes
fb688a2077 Removed the "logf" FILE structure from the config structure, and also renamed the "log_rotation_request" boolean to "received_sighup". 2002-06-15 17:29:59 +00:00
Robert James Kaes
2f84b170a6 Removed the rotate_log_files() function since I'm moving to an Apache style where the _user_ needs to move the log file themselves, and tinyproxy will continue to write to the original name. This allows more flexibility for users to determine their own log rotation scheme. 2002-06-15 17:28:19 +00:00
Robert James Kaes
1f2fe53c4b Added myself to the copyright since I've made a bunch of changes to this file. 2002-06-07 19:10:05 +00:00
Robert James Kaes
7e1de2012c Added code to handle the "FilterDefaultDeny" directive. The filter_set_default_policy() function is used to select the default policy (either default allow or default deny) for the filtering code. Also, the two filtering functions now support the policy code. 2002-06-07 18:36:22 +00:00
Robert James Kaes
ff56e32e8e Added the "FilterDefaultDeny" directive to allow the user to select whether the default policy of the filter is to allow everything which isn't denied, or to deny everything which isn't allowed. 2002-06-07 18:29:41 +00:00
Robert James Kaes
f47685c861 A bunch of changes from Petr Lampa that add transparent proxy support to tinyproxy. The additional code is in process_request(), but Petr also had to change around some of the other functions (like process_client_headers and handle_connection.) Note: Right now this code has not been tested, but it is believed to work. To enable run ./configure --enable-transparent-proxy 2002-06-06 20:32:30 +00:00
Robert James Kaes
0242d89877 (filter_domain): Removed code which stripped of a port number from the host name. The "host" variable will _always_ be just the name by the time filter_domain() is called. 2002-06-06 20:30:04 +00:00
Robert James Kaes
06d38ce529 (display_usage): Added a message indicating whether transparent proxy support has been compiled in. 2002-06-06 20:28:02 +00:00
Robert James Kaes
a72fc7ad09 Added a warning message to the Bind directive stating that it will be ignored if "transparent proxy" has been compiled into tinyproxy. 2002-06-06 20:26:13 +00:00
Robert James Kaes
2b5a3625bc (send_stored_logs): Actually included the code to output the stored logs. Plus, there was a bug with how I was calling the hashmap_is_end() function. This has now been fixed. 2002-06-06 20:24:21 +00:00
Robert James Kaes
e440dee245 (child_main): Added a DEBUG call to let me know which process has accepted a connection. This is needed for debugging using "gdb". 2002-06-05 17:02:15 +00:00
Robert James Kaes
89dee022e5 (malloc_shared_memory): Removed the assert() call for shared_file since it's now a static variable. 2002-06-05 17:01:09 +00:00
Robert James Kaes
b697ebf16b (acl_string_processing): Moved the string processing code out of check_acl() and into it's own function because it now does two (2) tests. If the ACL string is a complete host name, in other words doesn't start with a period, than a reverse DNS look-up is done on the host name and compared to the IP address of the client; otherwise, the normal text string comparison is done.
(check_acl): Moved the string text out of the function and removed some logging code by jumping to the "Deny" code at the end of the function.
2002-06-05 16:59:21 +00:00
Robert James Kaes
02f3bdf5ff Added a boolean "truncate_file" flag for the create_file_safely() function. 2002-05-31 18:27:13 +00:00
Robert James Kaes
833186b7be (create_file_safely): Added the "truncate_file" boolean flag. This is needed since I use this function for both the log file and the pid file, and they behave differently when tinyproxy is started.
(pidfile_create): Call create_file_safely() with a TRUE "truncate_file" flag so that the file is emptied whenever the pid file is needed.
2002-05-31 18:26:30 +00:00
Robert James Kaes
e340b3371b The log file is now opened in "append" mode so that you can restart tinyproxy without losing the log file. 2002-05-31 18:24:36 +00:00
Robert James Kaes
26a983b467 (process_server_headers): Since we're stripping off the carriage return and newline, we need to add them back on when sending the response header to the client. 2002-05-31 18:09:09 +00:00
Robert James Kaes
f548ce72b2 (getpeer_information): Fixed a problem retrieving the FQDN of a host because I was passing in an incorrect parameter to gethostbyaddr(). D'oh. 2002-05-31 18:08:01 +00:00
Robert James Kaes
12fc92828c (malloc_shared_memory): Removed the MMAP_ANON and open("/dev/zero") since they are not portable across a while enough spectrum of machines. Right now tinyproxy is using a "classic" temporary file method of sharing memory. This will likely be improved in the future. 2002-05-29 20:51:35 +00:00
Robert James Kaes
360deb4568 Changed the tests on the return value from malloc_shared_memory() to make tinyproxy more portable, since we can't be certain that "if (!ret_value)" would actually detect a mmap() error. 2002-05-29 20:49:55 +00:00
Robert James Kaes
9b13e9bda8 (add_header_to_connection): Removed the "double_cgi" boolean, since tinyproxy now ignores all the headers after a "double CGI" situation has occurred.
(get_all_headers): Instead of dropping duplicate headers when the "double CGI" situation occurs, tinyproxy will now drop _all_ the headers from the "inner" HTTP response.
2002-05-29 18:11:57 +00:00
Robert James Kaes
5fcb8553da (init_stats): Fixed a spelling mistake where the number of bytes being allocated was incorrect. 2002-05-29 17:31:01 +00:00
Robert James Kaes
e7fcb5fc7d (add_header_to_connection): Added a boolean to indicate that a "Double CGI" situation is in affect. This is needed to solve a problem with some sites (like cgi.ebay.com) where they are sending two HTTP response lines (and associated headers) with a response.
(get_all_headers): Detect if a "Double CGI" situation has occured.
2002-05-28 20:40:01 +00:00
Robert James Kaes
cf2bd809fb (get_all_headers): Added code to ignore a "response" line in a header. This was pointed out as being a problem with eBay (cgi.ebay.com)
(process_server_headers): Added code to make skip blank lines before a response line.
2002-05-28 04:53:33 +00:00
Robert James Kaes
4ce9674365 (process_request): Changed the filtering code around to handle both domains and URLs. 2002-05-27 02:00:22 +00:00
Robert James Kaes
35d3d79e92 Added into the config structure the filter_urls and filter_extended flags. 2002-05-27 01:59:28 +00:00
Robert James Kaes
d64dfc5d77 Some spelling fixes. 2002-05-27 01:58:41 +00:00