* Grumpy's changelog * What's new in v0.21 [07 Feb 2011]: - Removed gopher support from Grumpy (gopher support forked into the Motsognir project), - Added support for serving very big files (up to 8EiB - was: 2GiB max), - Added basic support for automatic language detection (with redirection to another ressource). What's new in v0.20 [16 Mar 2010]: - The URL-encoding/decoding function handles the quote character (%22) properly now, - Added a specific protection against Slowloris-like attacks, - Added the possibility to block specific file types when requested from a referer different than the host (usually known as "bandwidth stealing"), - Added new MIME types auto-detection: text/calendar, text/x-vcard, text/html, text/x-perl, text/x-sh, text/x-csh, text/x-ksh, image/vnd.djvu, application/vnd.kde.kword, application/x-bittorrent, - When executing a gopher CGI script, Grumpy sets the SERVER_PORT variable, - Added support for Content-MD5 HTTP header on "200" responses (no MD5 on partial downloads), - Outputting a 416 error (Range Request Not Satisfiable) when requested range start is greater than the requested file's size, - Fixed a bug in range requests handling (the returned ressource's size was always "0"). What's new in v0.19 [08 Jul 2009]: - The DocType declaration of the HTML file provided to gopher clients dumbly following a non-gopher URL has been changed from XHTML 1.0 to HTML 3.2, and a refresh time of 10 seconds has been added, - Added support for CGI-style scripts to the gopher server, - CGI line terminators are CR/LF now (were: LF), - Added MIME support for HTTP content-type declarations (over 60 MIME types are detected automatically). What's new in v0.18 [26 Jul 2009]: - Added a handler for gopher URL links ("URL:"), which provides a follow-page to dumb gopher clients, - General cleaning of the generated directory listing's html code, - Added a new configuration token "DirListCSS", which allows to specify a custom CSS style for HTML directory listings, - Added new configuration tokens "HttpLogFile" and "GopherLogFile", which allows to specify specific log files for HTTP and Gopher events (before, all logs were written to "/var/log/grumpy.log" on Linux, and ".\grumpy.log" on Windows), - Directory listings (html) do not generate recursive ("..") links for parent directories anymore (absolute paths are generated instead), - Added support for percent-encoded UTF-8 HTTP requests (requires a UTF-8 filesystem). What's new in v0.17b [15 Apr 2009]: - Fixed a serious bug in the Gopher module (after having processed the Gopher request, Grumpy wasn't closing the connection, and processed that request again via the HTTP engine). What's new in v0.17 [02 Apr 2009]: - Grumpy is able to ban HTTP requests by their User-Agent, - The source code has been optimized to allow a Windows port version, - UTF-8 BOM headers (if any) are handled correctly in all configuration files, - Fixed a serious bug in the URL %-decoder (could cause Grumpy to loop indefinetely in specific conditions), - The security module is checking any %-encoded requests a bit deeper, - Directory listings are buffered now (thus are transmitted faster), and contain a content-length declaration, - Any http request containging an asterisk in the filename (like "/boo*") is answered with a 404 Not Found, - Http requests containing two or more "?" chars are rejected by the security module, - Gopher requests containing at least one "?" or "*" chars are rejected by the gopher's security module, - If a specific port was used to access Grumpy, the http directory listing will display it (extracted from the "Host" header), - All returned http error pages have a content-length declaration in their header now, - Columns "Date / Time" and "Size" of any HTTP directory listing are not wrapable anymore (spaces won't be breaked), - HTTP directory listings aren't using deprecated html statements anymore (the produced html code is entirely style-based now), - The parser for descript.ion files has been optimized (much faster now), - Added a brute-force protection for HTTP auth attempts (responses to false credentials are delayed for 2 seconds each time), - Range specifications of HTTP requests using units different than "bytes" are ignored, - Connections durations are written to the log file. What's new in v0.16 [26 Feb 2009]: - Any gopher request is truncated at its first TAB (if any found), - Gopher requests coming to the server are now checked against some security rules, - When returning a text file, the gopher server is replacing all "." (dot-CR/LF) lines by ". " (dot-space-CR/LF), - Added the possiblity to create gopher links through *.gopherlink files, - Added support for the "P" gopher filetype (for *.pdf files), - Added support for gophermaps, overwritting gopher directory listings (requires a grumpy.gophermap file in the directory), - Gopher directory's description (found in the "." entry of its descript.ion file) are wrapped if longer than 70 characters, - Gopher directory listings are sorted by entries' descriptions (was: by entries' selectors), - When geting a CONNECT HTTP request, the server answers with a 501 ("not implemented") code, - The HTTP server may serve some additional (customizable) headers: x-powered-by, x-hosted-by, x-server-admin, x-disclaimer, - HTTP responses contain a "Last-Modified" header (whenever possible), - The header of a directory listing is set to the directory's description (if any), - Added support for absolute URI requests (eg. GET "http://domain.com/index.htm" - see RFC 2616). What's new in v0.15 [25 Jan 2009]: - Added the Gopher engine. Grumpy can work as a HTTP and Gopher server now. What's new in v0.14 [14 Dec 2008]: - Server side parameters (like /file.htm?param1) aren't treated as part of the ressource anymore, - In directory listing mode, the main entry's description wasn't htmlized - fixed, - Support for CGI sripts & programs (disabled by default), - Minor optimizations in the way GMT time is handled, - Logs are dated using GMT time now, - Added an ETAG header to any returned file, - Added the support for request containing "If-None-Match" (answering by a 304 code when needed), - HTTP 0.9 is denied right after the request (doesn't wait for the end of header anymore), - Grumpy answers with the request's HTTP version (was answering in HTTP/1.1 all the time before), - Cleaning the html code which is generated when listing directory content, - Added the remote IP to logs (based on REMOTE_HOST and/or REMOTE_ADDR variables), - Fixed a bug in the partial download support: "Range: bytes=0-" was returning the first byte of the file, instead of the whole document, - Added configurable domain redirects (301 codes), - Decoding more %encoded characters in URLs, - Security warnings doesn't necessarily brake the connection anymore. What's new in v0.13 [09 Nov 2008]: - Added the possibility to customize the 400, 401, 403 and 404 error pages, - Fixed a small bug in the directory listing module (blank page when the directory was empty), - Any not HTTP/1.0 request without the Host header gets a 400 code, - Fixed virtual host detection when a port is specified (eg. "Host: mydomain.com:81"), - Line terminators are always CR/LF now (were single LF), - Authentication file is checked recursively (.grumpy.auth protects any subdirectories now). What's new in v0.12 [21 Oct 2008]: - Any text inserted into html code (when listing directories) is htmlized first (eg. ">" = ">"), - Big improvement of server's performances: data is transfered 20x faster (files are buffered into 1K chunks, instead of being sent byte per byte), - Added basic QoS support (bandwidth limitation), - Each log line is written separately (avoiding to loose logs when connection is reseted), and each log is identified by the PID of the running Grumpy's instance, - Log overflow limit - any connection generating more than 100 lines of logs is aborted, - Added support for partial downloads (Ranges header), - Added virtual hosts support, - Directory listing is limited to 20'000 entries now (twice as before), - The sorting routine used for sorting files for the directory listing has been improved (about 15x faster for a 1K entries list), - When there's too much entries in a directory (more than 20'000), the directory listing displays a warning, - In directory listing mode, Grumpy displays how much times it took to generate the page. What's new in v0.11 [13 Oct 2008]: - Implementation of the HEAD command, - Directory content is sorted (only first 10'000 entries are displayed), - When listing a directory's content, any file/dir starting by a dot are hided, - The "Date" header is returning the real GMT time (was: local time with "GMT" suffix), - The server performs % encoding/decoding on the fly (only most generic codes: %20, %21, etc...), - A security routine checks the sanity of each http request (evasion attempts, dangerous encodings, etc...), - Added a short "about" screen (-h or --help), - Basic HTTP authorization support (configurable per directory via the .grumpy.auth file), - Each returned code is followed by a short message (ie. "404 Not found" rather than just "404"), - Directories listings are somehow nicer (changed color scheme, added the host name, a description column and date/time...). What's new in v0.10 [03 Oct 2008]: - First public release.