summaryrefslogtreecommitdiffstats
path: root/usr.sbin/httpd/server.c (follow)
Commit message (Collapse)AuthorAgeFilesLines
* httpd(8) sent a 408 response every time a connection request timeoutflorian2019-10-141-2/+5
| | | | | | | | | | | | | | | | was reached. This is not what other servers are doing, it leads to ugly log messages and might confuse some clients. benno@ analyzed that the correct behavior is (probably) to send a 408 when we are in the middle of receiving headers and time out there and just close the connection in all other cases. In particular, if a connection gets opened and no request is received at all just close the connection. If a connection is set to keep-alive and a request was handled and no further request is coming in just close the connection. The later is the usual cause for spurious log messages and client confusion. Reported over the years by many. Input, explanations and OK benno
* When system calls indicate an error they return -1, not some arbitraryderaadt2019-06-281-3/+3
| | | | | | value < 0. errno is only updated in this case. Change all (most?) callers of syscalls to follow this better, and let's see if this strictness helps us in the future.
* httpd(8): add support for setting custom FastCGI parameters.pirofti2019-02-191-1/+10
| | | | | | | | | | | | This commit extends the existing grammar by adding the param option to the fastcgi directive: fastcgi param name value. Example usage: fastcgi param VAR1 hello fastcgi param VAR2 world With help and OK florian@ Rogue manpage bits, feel free to modify them.
* Allow httpd(8) to start when TLS is configured but a cert is not yetflorian2019-01-081-1/+12
| | | | | | | | | | | | | available. Assuming a httpd.conf based on /etc/examples/httpd.conf, httpd(8) will only listen on port 80 and serve the acme-challenge directory for acme-client(1). The workflow to get a certificate then becomes acme-client -vAD example.com && rcctl reload httpd Without the need to edit the httpd.conf yet again. Once the cert is in place and httpd is reloaded it starts to serve on port 443. Idea, tweaks & OK deraadt, OK benno
* Backout my previous commit:benno2018-10-111-5/+3
| | | | | | | | | | | | | | | date: 2018/10/01 19:24:09; author: benno; state: Exp; lines: +7 -1; commitid: 0O8fyHPNvPd8rvYU; Only send 408 Timeout responses when we have seen at least part of a request. Without a request, just close the connection when we hit request timeout. Prompted by a bug report from Nikola Kolev, thanks. ok reyk@ and some suggestions from claudio@ and bluhm@ Mark Patruck (mark AT wrapped DOT cx) found a problem with it, thanks for the report. ok reyk@ bluhm@ sthen@ deraadt@
* Only send 408 Timeout responses when we have seen at least part of abenno2018-10-011-3/+5
| | | | | | | request. Without a request, just close the connection when we hit request timeout. Prompted by a bug report from Nikola Kolev, thanks. ok reyk@ and some suggestions from claudio@ and bluhm@
* Add support for client certificate authentication to httpd.jsing2018-05-191-2/+69
| | | | | | | | From Jack Burton <jack at saosce dot com dot au> - thanks! Also tested by Jan Klemkow <j.klemkow at wemelug dot de>. ok beck@ reyk@
* Don't do OCSP stapling only if the staple file is 0 length.beck2017-11-291-3/+3
| | | | | | | | This allows something external (like ocspcheck) to disable the stapling deliberatly if it can not retreive a valid staple by truncating the staple file to indicate "do not provide a staple", while the file not existin will still be treated as a configuration error ok claudio@ florian@, and prompted by @jsing
* Disable oscp stapling on invalid staple, rather than failing to start.beck2017-11-281-3/+13
| | | | ok claudio@ florian@
* Convert httpd to tls_config_set_ecdhecurves(), allowing a list of curvesjsing2017-08-111-5/+5
| | | | | | to be specified, rather than a single curve. ok beck@
* Rework the way that TLS configuration is sent/received via imsgs, so thatjsing2017-07-191-2/+2
| | | | | | | | | | are no longer limited by the 16KB maximum size of a single imsg. Configuration data that is larger than a single message is now chunked and sent via multiple imsgs. Prompted by a diff from Jack Burton <jack at saosce dot com dot au>. ok reyk@
* some freezero() callsderaadt2017-04-171-15/+5
|
* Implement TLS ticket support in httpd. Off by default. Useclaudio2017-03-251-1/+64
| | | | | | | tls ticket lifetime default to turn it on with a 2h ticket lifetime. Rekeying happens after a quarter of that time. OK reky@ and bob@
* /tmp/cvsspEkokreyk2017-02-071-3/+3
|
* Fix support for HTTP pipelining by handling all requests in the buffer.reyk2017-02-021-3/+1
| | | | Tested & OK jung@
* remove extra call setting OCSP staple now that it is done abovebeck2017-01-311-10/+1
| | | | | using keypair_ocsp.. ok reyk@
* Correct mistake I made when converting this to new funcitonbeck2017-01-311-2/+3
|
* Add tls_config_[add|set]keypair_ocsp functions so that ocsp staples may bebeck2017-01-311-15/+8
| | | | | | | | added associated to a keypair used for SNI, and are usable for more than just the "main" certificate. Modify httpd to use this. Bump libtls minor. ok jsing@
* Do not set EVBUFFER_EOF on read/write errors and handle EOF correctly.reyk2017-01-311-4/+8
| | | | | | | Either libevent or the TLS callback can trigger an EOF when the connection is closed. OK sunil@ jung@ benno@
* Stop accessing verbose and debug variables from log.c directly.reyk2017-01-091-3/+2
| | | | | | | | This replaces log_verbose() and "extern int verbose" with the two functions log_setverbose() and log_getverbose(). Pointed out by benno@ OK krw@ eric@ gilles@ (OK gilles@ for the snmpd bits as well)
* Check the return value of tls_config_set_protocols(), now that it returnsjsing2016-11-171-4/+7
| | | | an int.
* Move OCSP loading into a separate function - it is not part of the keypairjsing2016-11-171-16/+23
| | | | | | and this way we can give a separate specific error message. ok beck@ reyk@
* Fix tcp ip ttl / minttl on IPv6 sockets.jca2016-11-101-7/+25
| | | | ok florian@
* conditionalize ocsp load properlybeck2016-11-061-8/+10
| | | | ok jsing@
* Add OCSP stapling support to httpdbeck2016-11-061-1/+32
| | | | ok jsing@ bcook@
* Kill (remove) the ps_pid from privsep struct since it is not being usedrzalamena2016-08-301-5/+3
| | | | | | anymore. Also fix the process initialization prototypes. ok reyk@
* Kill p_instance from proc.c and remove static proc_id unused variables.rzalamena2016-08-271-9/+1
| | | | | | | | | To keep the debug functionality intact and correct we'll use the pid field in the imsg header to pass the instance number. Remember to always pass 'ps_instance + 1' otherwise libutil will fill imsg header pid field with the imsgbuf pid (which is the current process pid). ok reyk@
* Replace the static env variables with a single global variable.rzalamena2016-08-261-23/+21
| | | | ok reyk@
* Enable SNI support in httpd(8).jsing2016-08-221-6/+27
| | | | ok reyk@
* stop including sys/param.h for nitems. define locally as needed.tedu2016-08-161-2/+1
| | | | ok natano reyk
* Turn "TLS handshake failed -" log message into a debug message - itreyk2016-08-161-2/+2
| | | | | | happens way too often and does not provide much information. OK jung@
* Rename server_handshake_tls() to server_tls_handshake() to align withreyk2016-08-161-6/+6
| | | | | the other server_tls_* functions (and I like the prefix notation better). No functional change.
* Move server_match() from parse.y to server.c; use env instead of conf,jsing2016-08-151-1/+28
| | | | which is actually the same thing (cluebat from reyk@).
* Use lowercase 'tls' in debug and log messages for consistency.jsing2016-08-151-6/+6
| | | | Requested by reyk@
* Make httpd stricter with respect to TLS configuration - in particular, dojsing2016-08-151-1/+25
| | | | | | | | | | | | not allow TLS and non-TLS to be configured on the same port, do not allow TLS options to be specified without a TLS listener and ensure that the TLS options are the same when a server is specified on the same address/port. Currently, these configurations are permitted but do not work as intended. Also factor out and reuse the server matching code, which was previously duplicated. ok reyk@
* Include the TLS configuration errors in log messages. Also set thejsing2016-04-281-11/+11
| | | | certificate and private key at the same time.
* Use log_warnx() instead of log_warn() when the failure will not havejsing2016-04-191-10/+10
| | | | | | resulted in errno being set. ok reyk@
* sync with relayd, use proc_compose()reyk2015-12-021-3/+2
|
* Retire socket_set_blockmode() in favor of the SOCK_NONBLOCK type flag.reyk2015-11-231-7/+3
| | | | | | As done in iked and snmpd. OK jung@
* pledge(2) for httpd.florian2015-11-051-1/+4
| | | | | | | | | | | | | | | | | | | | 1) The main process listens on sockets and accepts connections. It creates and opens log files, creates and kills child processes. On start up and on receiving a HUP signal it parses the configuration. It passes on file descriptors for logging or requests to it's children. 2) The logger process writes log messages to a file descriptor passed in from the main process. 3) The server process reads the request from a file descriptor passed in from the main process. It reads a file or creates a directory index to send a response. Additionally this process handles fastcgi requests. It connects to AF_UNIX, AF_INET or AF_INET6 sockets. A re-factoring might make it possible to drop the additional fastcgi privileges when only static files are served. with deraadt@ some time ago prodding & OK deraadt@ tweaks and OK reyk@
* Fix server_handshake_tls() - we should only call server_input() in the casejsing2015-09-111-8/+6
| | | | | | where the handshake has successfully completed. ok beck@
* fix return type for tls_read/writebeck2015-09-101-3/+3
| | | | jointly with jsing@
* fix after libtls api changesbeck2015-09-101-12/+12
| | | | ok jsing@
* Update httpd to call tls_handshake() after tls_accept_socket().jsing2015-09-101-12/+16
| | | | ok beck@
* Fix a regression that was introduced with server.c r1.64: Do NOT freereyk2015-09-071-2/+1
| | | | | | | | | | srv_conf->auth in serverconfig_free() because it was not allocated in config_getserver() but assigned as a reference by id from a global list that is maintained independently. This fixes a potential double-free. This fix also makes srv_conf->auth "const" to emphasize that the read-only auth pointer was not allocated here. OK jsing@
* Change httpd(8) to use C99-style fixed-width integers (uintN_t insteadreyk2015-08-201-3/+3
| | | | | | | | | | | | | | | | of u_intN_t) and replace u_int with unsigned int. Mixing both variants is a bad style and most contributors seem to prefer this style; it also helps us to get used to it, portability, and standardization. Theoretically no binary change, except one in practice: httpd.o has a different checksum because gcc with -O2 pads/optimizes "struct privsep" differently when using "unsigned int" instead "u_int" for the affected members. "u_int" is just a typedef of "unsigned int", -O0 doesn't build the difference and clang with -O2 doesn't do it either - it is just another curiosity from gcc-land. OK semarie@
* Fix rev 1.70 of server.c by only re-enabling the bufferevent if weflorian2015-08-031-4/+8
| | | | | | | | previously disabled it because we were reading to fast (from disk). Problem noted and tracked down to that commit by weerd@ and independently by stsp@. Tested by weerd@, stsp@, reyk@ OK bluhm@, reyk@
* backout the previous: it broke wordpress somehow.reyk2015-07-291-3/+1
| | | | | | we need more care to find a proper fix for the fastcgi headers. acknowledged by deraadt@
* Read fcgi response records until we have the whole http header and canflorian2015-07-291-1/+3
| | | | | | parse it. Otherwise http headers can leak into the body. Pointed out by Jean-Philippe Ouellet on bugs@ Thanks! OK reyk, commit ASAP deraadt@
* libtls has been changed to set SSL_MODE_ENABLE_PARTIAL_WRITE andreyk2015-07-181-24/+5
| | | | | | | | | | SSL_MODE_ACCEPT_MOVING_WRITE_BUFFER by default. This gives tls_write() a similar short write semantics as write(2) and a workaround in httpd to cope with the previous differences can be removed. Specifically, httpd can stop copying data into a local buffer that was used to keep it around for repeated writes. OK bluhm@