Paul Querna [Mon, 27 Oct 2008 00:43:45 +0000 (00:43 +0000)]
* modules/cache/mod_socache_dbm.c
(socache_dbm_init) Use AP_NEED_SET_MUTEX_PERMS to determine when we need to
set the file permissions on the created DBM files, rather than listing
a hodgepodge of operating systems by hand.
Paul Querna [Mon, 27 Oct 2008 00:40:36 +0000 (00:40 +0000)]
* modules/cache/mod_socache_dbm.c: Fix compile by including unixd.h on operating
systems that need it, which is required for for the use of unixd_config
inside socache_dbm_init.
Jim Jagielski [Thu, 23 Oct 2008 12:01:53 +0000 (12:01 +0000)]
Fix the io buffersize code. Have the docs match the code
and allow more flexibility in settings. Also, document
the ProxyPass/worker options of io and rec buffersize.
Ruediger Pluem [Wed, 22 Oct 2008 09:34:21 +0000 (09:34 +0000)]
* Improve the way to detect whether buckets in the filter chain need to be
flushed by using the main requests bytes_count field instead of the
subrequest field.
* Do not reset conn->need_flush. This prevents SegFaults from not flushing
buckets in the filter chain.
Chris Darroch [Thu, 16 Oct 2008 21:09:27 +0000 (21:09 +0000)]
Prior to authn/z refactoring in r368027, if authorization Require
directives had no matching AuthType and associated authentication
directives, requests would generally fall through in the
check_user_id hook to mod_authn_default.c's authentication_no_user()
handler, which returned DECLINED if ap_auth_type() was not set.
The ap_process_request_internal() function in request.c would handle
this case by logging an "AuthType not set!" error and returning
HTTP_INTERNAL_SERVER_ERROR.
The refactoring removes this error handling in request.c, so
individual modules will need to test for a lack of authentication,
as necessary. Since some modules such as mod_authz_host.c support
Require directives that do not need any authentication, the
mod_authn_default.c handler no longer returns DECLINED if ap_auth_type()
is not set. (Also, mod_authn_default can be compiled out with
--disable-authn-default, so it can't be relied upon to exist.)
Since r->user may now be NULL, individual handlers must test for that
case when necessary. Otherwise, most Require directives in the
absence of AuthType directives cause handlers to crash while performing
strcmp() and friends on a NULL r->user value.
NOTE: I can't test mod_authnz_ldap.c myself, so I'm not sure if it
needs similar fixes. On the one hand, a NULL r->user in the authz
handlers always generates a log message. However, it appears that
authn_ldap_build_filter() will sometimes then be called, perform no
action, which may result in a possibly uninitialized filtbuf buffer
being passed to util_ldap_cache_getuserdn(). I don't know if that
could cause problems in the LDAP cache code. If someone familiar with
LDAP authz could take a look, that would be much appreciated.
Ruediger Pluem [Wed, 15 Oct 2008 19:43:51 +0000 (19:43 +0000)]
* Add the possibility to set the worker parameters connectiontimeout and ping
in milliseconds and the parameter acquire in seconds.
Add the new currently static function ap_timeout_parameter_parse that
should become a general utility function once its API is hammered out.
Ruediger Pluem [Wed, 15 Oct 2008 00:53:39 +0000 (00:53 +0000)]
* Revert r703998.
The call to apr_socket_timeout_set before apr_socket_connect already sets the
socket to non-blocking mode because the timeout of the socket is -1 after creation. A further
call to apr_socket_timeout_set (after the connect call does not do this, because the old
and the new timeout are >=0). The further code expects the socket to be in non-blocking
mode, otherwise we have regressions with ssl. This can be notified by running t/ssl/proxy
on 2.2.x which runs much much slower with the patch applied. This does not happen
on trunk because the socket is set back to non blocking by the core output filter
(async write completion).
Graham Leggett [Tue, 14 Oct 2008 22:39:32 +0000 (22:39 +0000)]
Export and install the mod_rewrite.h header to ensure the optional
rewrite_mapfunc_t and ap_register_rewrite_mapfunc functions are
available to third party modules.
Ruediger Pluem [Wed, 8 Oct 2008 13:32:07 +0000 (13:32 +0000)]
* Recheck again if idle workers are still available when we are signaled that
they are. This is needed since it can happen that we are signaled by a
worker thread that went idle but received a context switch before it could
tell us. If it does signal us later once it is on CPU again there might be
no idle worker left. See
https://issues.apache.org/bugzilla/show_bug.cgi?id=45605#c4
Reimplement ThreadStackSize to behave as on unix for any
Windows 2003/2008 (XP/Vista) servers. Virtual allocations
will only consume pages once referenced, while the page
alignment will vary by ThreadStackSize setting so that the
maximum number of threads and minimum stack VM profile will
be wasted.
Paul Querna [Sat, 20 Sep 2008 11:58:08 +0000 (11:58 +0000)]
Introduce Suspendable Requests to the Event MPM.
Using this basic framework, you can return SUSPENDED from an HTTP Handler,
and then register a callback that is invoked by the MPM at a later time.
This initial version only supports _timers_ as callbacks, but in the future I
would like to add things like wait for socket activity, on a socket specified by
the handler.
Once in a callback, It is then the responsibility of the callback fucntion
to finish the HTTP Request handling, but this alows you to do cool things like
a fully async proxy, COMET support, or even rate limiting.
To prove I'm not insane, I've inlcuded an example module, mod_dialup.
You can configure it like this:
<Location "/docs">
ModemStandard "V.32"
</Location>
And for static files inside that path, you will be rate limited to V.32 speeds,
aka 9.6 kilobits/second.
Does anyone besides Rüdiger read commit emails :-) ?
I know there are likely huge problems with this, but I would like to see how far
we can push the Event MPM, figure out what to do better, if there is anything,
and then really dive into the 3.0 development before ApacheCon.
* server/mpm/experimental/event/fdqueue.h:
(timer_event_t): New structure to hold timer events and callback functions.
* server/mpm/experimental/event/fdqueue.c
(ap_queue_empty): Modify to also look at Timer Ring.
(ap_queue_init): Initialize Timer Ring.
(ap_queue_push_timer): New function, pushes a timer event into the queue.
(ap_queue_pop_something): Renamed function, returns a timer event or
a socket/pool for a worker thread to run.
* server/mpm/experimental/event/event.c
(process_socket): If the connection is in SUSPENDED state, don't force it
into linger mode yet, the callback will have to take care of that.
(push_timer2worker): New shortcut function, pushes timer event into queue
for a worker to run.
(timer_free_ring): New global data structure to recycle memory used by
timer events.
(timer_ring): New global data structure to hold active timer events.
(g_timer_ring_mtx): Thread mutex to protect timer event data structures.
(ap_mpm_register_timed_callback): New Function, registers a callback to be
invoked by the MPM at a later time.
(listener_thread): Calculate our wakeup time based on the upcoming Event
Queue, and after pollset_poll runs, push any Timers that have passed
onto worker threads to run.
(worker_thread): Call new queue pop method, and if the Timer Event is
non-null, invoke the callback. Once the callback is done, push the
structure onto the timer_free_ring, to be recycled.
(child_main): Initialize new mutex and ring structures.
* server/config.c
(ap_invoke_handler): Allow SUSPENDED aa valid return code from handlers.
* modules/http/http_core.c
(ap_process_http_async_connection): Don't close the connection when in
SUSPENDED state.
* modules/http/http_request.c
(ap_process_request_after_handler): New function, body pulled from the old,
ap_process_async_request. Split to let handlers invoke this so they
don't need to know all of the details of finishing a request.
(ap_process_async_request): If the handler returns SUSPENDED, don't do
anything but return.
* include/ap_mmn.h: Bump MMN.
* include/ap_mpm.h
(ap_mpm_register_timed_callback): New function.
* include/httpd.h:
(SUSPENDED): New return code for handlers.
(request_rec::invoke_mtx): New mutex to protect callback invokcations
from being run before the original handler finishes running.
(conn_state_e): Add a suspended state.
* include/http_request.h
(ap_process_request_after_handler): New function to make it easier for
handlers to finish the HTTP Request.
* modules/test/config.m4: Add mod_dialup to build.
* modules/test/mod_dialup.c: New rate limiting module, requires the Event MPM
to work.
Ensure it's abundently clear that these scripts may be bad news
with stupid-assed clients which contravine their prime directives,
such as content-type, or do not harm humans.
Flaws such as utf-7 decoding ensure that even txt->html transforms
are insufficient.