Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge r1862968, r1863191, r1867878, r1867882, r1867968, r1867971, r18…
…69421, r1874491, r1874511, r1879119, r1879136, r1879860, r1881459, r1881559, r1867970 from trunk: Add experimental support for fd passing in mod_cgid. Attaches CGI script stderr to the error log specific to the vhost, by passing the appropriate fd over the AF_UNIX socket from the request handling thread to the cgid server process. * modules/generators/config5.m4: Add --enable-cgid-fdpassing. * modules/generators/mod_cgid.c (sock_readhdr): New function, also returns auxiliary control data (the stderr fd) if available. (sock_write): Take optional aux fd argument, send it as control data. (send_req, get_req): Adjust accordingly to pass/receive the stderr fd. (cgid_server): Use passed fd if available, limit the lifetime. PR: 60692 mod_cgid: Continuation of r1862968, experimental fd passing support. Split out CGI bucket implementation from mod_cgi and use in both mod_cgi and mod_cgid, bringing stderr handling in mod_cgid up to par with mod_cgi. (There is a lot of code which has been copied between mod_cgi{,d} so there's scope for further reduction of source duplication between the modules using this header) * modules/generators/cgi_common.h: Copied from mod_cgi.c, removed everything but the CGI bucket implementation with only one change: (struct cgi_bucket_data, cgi_bucket_create, cgi_bucket_read): Take a timeout on bucket creation, store and use on reads. * modules/generators/mod_cgi.c [APR_FILES_AS_SOCKETS]: Include cgi_common.h. (cgi_handler): Pass configured timeout to CGI bucket. * modules/generators/mod_cgid.c: Include cgi_common.h. (log_script_err): Copy from mod_cgi.c. (log_script): Use log_script_err. (send_req): Take fd for stderr. (cgid_child_errfn): Handle fd-passing case by writing error to stderr for client to pass through ap_log_rerror. (cgid_handler): Create pipe for stderr, pass write-end to server via send_req, use read-end to create CGI bucket. Handle stderr output in failure paths. PR: 54221 * modules/generators/mod_cgid.c (sock_readhdr): Only set up control message block when required; add some additional error handling. * modules/generators/cgi_common.h (cgi_bucket_create): Disable APR timeout handling here for all callers. * modules/generators/mod_cgi.c (cgi_handler): ... drop it here. PR: 63797 Move common (and near-identical) code for CGI response output handling to cgi_common.h; the diff between the modules for this code was as follows: https://people.apache.org/~jorton/mod_cgi-to-cgid-handler.diff Change from previous: mod_cgi will now explicitly discard output when returning HTTP_MOVED_TEMPORARILY for relative redirects (should not be functionally different), TRACE1 logging of ap_pass_brigade failures for mod_cgid is dropped. * modules/generators/cgi_common.h (cgi_handle_response): New function, factored out from mod_cgid. (discard_script_output): Copied function from mod_cgi/d unchanged. * modules/generator/mod_cgid.c (cgid_handler), modules/generator/mod_cgi.c (cgi_handler): Use cgi_handle_response. Fix build broken w/o --enable-cgid-fdpassing by r1867968: * modules/generators/cgi_common.h: Only define CGI bucket type if WANT_CGI_BUCKET is defined. * modules/generators/mod_cgi.c: Always include cgi_common.h, defining WANT_CGI_BUCKET iff APR_FILES_AS_SOCKETS is defined * modules/generators/mod_cgid.c: Always include cgi_common.h, defining WANT_CGI_BUCKET iff HAVE_CGID_FDPASSING (--enable-cgid-fdpassing). Add comment, no functional change. * modules/generators/cgi_common.h (cgi_handle_request): Factor out near-identical common code from mod_cgid, mod_cgi. * modules/generators/mod_cgid.c (cgid_handler), modules/generators/mod_cgi.c (cgi_handler): Adjust to use cgi_handle_request. * modules/generators/cgi_common.h (cgi_handle_request): Catch (unlikely) apr_bucket_read() failure when reading request. * modules/generators/mod_cgid.c (cgid_handler): Bail immediately with a 503 response on errors when talking to the daemon. Check the pid returned is not zero. * modules/generators/mod_cgid.c (get_req): Add basic sanity checking for the structure received in the CGI daemon. * modules/generators/mod_cgid.c (get_cgi_pid): Fix test for pid=0. (cgid_handler): Remove duplicated test for pid=0 here added in r1879119. * modules/generators/cgi_common.h (cgi_handle_response): Avoid trying to read the output brigade twice in the case of a timeout. PR: 64709 Further re-unification of code duplicated across mod_cgi/mod_cgid into cgi_common.h. Functional changes: - brings the PR 61980 fix to mod_cgid as well, and - some mod_cgid-specific APLOGNOs are dropped in favour of the code used in the equivalent error path in mod_cgi ... otherwise no user-visible changes (intended). * modules/generators/cgi_common.h (log_scripterror, log_script_err): Move here from mod_cgi. (cgi_handle_exec): Move here, renamed from mod_cgi's handle_exec. (cgi_optfns_retrieve): New function, split out from mod_cgi's cgi_post_config. * modules/generators/mod_cgid.c: Adjust accordingly, update to pass logno separately. (register_hooks): Register cgi_optfns_retrieve. * modules/generators/mod_cgi.c: Adjust accordingly. (register_hooks): Register cgi_optfns_retrieve. * modules/generators/cgi_common.h (discard_script_output): Simplify slightly and ensure constant rather than unlimited memory consumption when discarding CGI script output (for e.g. a redirect response). Github: closes #209 Reviewed by: jorton, ylavic, covener git-svn-id: https://svn.apache.org/repos/asf/httpd/httpd/branches/2.4.x@1918379 13f79535-47bb-0310-9956-ffa450edef68
- Loading branch information