From f82dddeeb90ed5a7d76784712b065b4471f041d1 Mon Sep 17 00:00:00 2001 From: Farsheed Date: Fri, 27 Feb 2015 23:53:18 +0330 Subject: [PATCH] updated extension --- README.md | 358 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 358 insertions(+) create mode 100644 README.md diff --git a/README.md b/README.md new file mode 100644 index 0000000..9fc482e --- /dev/null +++ b/README.md @@ -0,0 +1,358 @@ + +This is a simple http server for pure static content. You +can use it to serve the content of a ftp server via http for +example. It is also nice to export some files the quick way +by starting a http server in a few seconds, without editing +some config file first. + +It uses sendfile() and knows how to use sendfile on linux and FreeBSD. +Adding other systems shouldn't be difficult. To use it with linux +you'll need a 2.2.x kernel and glibc 2.1. + +There is some sendfile emulation code which uses a userland bounce +buffer, this allows to compile and use webfs on systems without +sendfile(). + + +Features/Design: +================ + + * single process: select() + non-blocking I/O. + * trimmed to use as few system calls as possible per request. + * use sendfile to avoid copying data to userspace. + * optional thread support. Every thread has its own select + loop then (compile time option, off by default, edit the + Makefile to turn it on). + * automatically generates directory listings when asked for a + directory (check for index.html available as option), caches + the listings. + * no config file, just a few switches. Try "webfsd -h" for a + list, check the man page for a more indepth description. + * Uses /etc/mime.types to map file extentions to mime/types. + * Uses normal unix access rights, it will deliver every regular + file it is able to open for reading. If you want it to serve + public-readable files only, make sure it runs as nobody/nogroup. + * supports keep-alive and pipelined requests. + * serves byte ranges. + * supports virtual hosts. + * supports ipv6. + * optional logging in common log file format. + * optional error logging (to syslog / stderr). + * limited CGI support (GET requests only). + * optional SSL support. + + +Plans/BUGS/TODO +=============== + + * figure out why the acroread plugin doesn't like my + multipart/byteranges responses. + * benchmarking / profiling. + +Don't expect much more features. I want to keep it small and +simple. It is supported to serve just files and to do this in a good +and fast way. It is supposed to be HTTP/1.1 (RfC 2068) compliant. +Conditional compliant as there is no entity tag support. + + +Compile/Install +=============== + +$ make +$ su -c "make install" + +See INSTALL for more details. + + +Tuning +====== + +The default for the number of parallel connections is very low (32), +you might have to raise this. + +You probably don't get better performance by turning on threads. For +static content I/O bandwidth is the bottleneck. My box easily fills +up the network bandwidth while webfsd uses less than 10% CPU time +(Pentium III/450 MHz, Fast Ethernet, Tulip card). + +You might win with threads if you have a very fast network connection +and a lot of traffic. The sendfile() system call blocks if it has to +read from harddisk. While one thread waits for data in sendfile(), +another can keep the network card busy. You'll probably get best +results with a small number of threads (2-3) per CPU. + +Enough RAM probably also helps to speed up things. Although webfs +itself will not need very much memory, your kernel will happily use +the memory as cache for the data sent out via sendfile(). + +I have no benchmark numbers for webfsd. + + +Security +======== + +I can't guarantee that there are no security flaws. If you find one, +report it as a bug. I've done my very best while writing webfsd, I hope +there are no serious bugs like buffer overflows (and no other bugs of +course...). If webfsd dumps core, you /have/ a problem; this really +shouldn't happen. + +Don't use versions below 1.20, there are known security holes. + + +Changes in 1.21 +=============== + + * large file support. + * s/sprintf/snprintf/ in some places. + * changed timestamp handling, webfs doesn't attempt to parse them + any more but does a strcmp of rfc1123 dates. + * access log uses local time not GMT now. + * some ssl/cgi cleanups (based on patches from Ludo Stellingwerff). + * misc fixes. + + +Changes in 1.20 +=============== + + * CGI pipe setup bugfix. + * Don't allow ".." as hostname (security hole with vhosts enabled). + * fix buffer overflow in ls.c with very long file names. + * misc other fixes / cleanups. + + +Changes in 1.19 +=============== + + * documentation spell fixes (Ludo Stellingwerff). + * added missing items (last two) to the 1.18 Changes notes + (pointed out by Jedi/Sector One ). + * Makefile changes. + * finished user home-directory support. + + +Changes in 1.18 +=============== + + * added -j switch. + * compile fixes for the threaded version. + * use accept filters (FreeBSD). + * shuffled around access log locks. + * added optional SSL support (based on patches by + Ludo Stellingwerff ). + * run only the absolute needed code with root privileges + (bind+chroot) if installed suid-root. + * Makefile tweaks. + * fixed buffer overflow in request.c + * started user home-directory support. + + +Changes in 1.17 +=============== + + * fix bug in request cleanup code (didn't cleanup properly after + byte-range requests, thus making webfsd bomb out on non-range + requests following a byte-range request on the same keep-alive + connection). + + +Changes in 1.16 +=============== + + * fix bug in %xx handling (adding CGI support broke this). + + +Changes in 1.14 +=============== + + * allways use Host: supplied hostname if needed (redirect, ...). + * added -4 / -6 switches. + * Added CGI support (GET requests only). + * compile fix for OpenBSD + + +Changes in 1.13 +=============== + + * fixed a bug in Basic authentication. + + +Changes in 1.11 +=============== + + * bumped the version number this time :-) + * small freebsd update (use strmode). + * added -e switch. + + +Changes in 1.10 +=============== + + * fixed byte rage header parser to deal correctly with 64bit off_t. + + +Changes in 1.9 +============== + + * added pidfile support. + + +Changes in 1.8 +============== + + * added TCP_CORK support. + + +Changes in 1.7 +============== + + * one more security fix (drop secondary groups). + * catch malloc() failures in ls.c. + + +Changes in 1.6 +============== + + * security fix (parsing option '-n' did unchecked strcpy). + * documentation updates. + + +Changes in 1.5 +============== + + * fixed the sloppy usage of addrlen for the ipv6 name lookup + functions. Linux worked fine, but the BSD folks have some + more strict checks... + * allow to write the access log to stdout (use "-" as filename) + + +Changes in 1.4 +============== + + * fixed a bug in the base64 decoder (which broke basic auth for some + user/passwd combinations) + * added virtual host support. + * webfsd can chroot to $DOCUMENT_ROOT now. + + +Changes in 1.3 +============== + + * overwrite the -b user:pw command line option to hide the password + (doesn't show up in ps anymore) + + +Changes in 1.2 +============== + + * added ipv6 support. + * bugfix in logfile timestamps. + + +Changes in 1.1 +============== + + * added basic authentication (one username/password for all files) + + +Changes in 1.0 +============== + + * added some casts to compile cleanly on Solaris. + * new -F flag (don't run as daemon). + + +Changes in 0.9 +============== + + * fixed a quoting bug. + * documentation updates, minor tweaks. + + +Changes in 0.8 +============== + + * fixed a bug in the directory cache. + * fixed uncatched malloc()/realloc() failures. + * added optional pthreads support. Edit the Makefile to turn + it on. + + +Changes in 0.7 +============== + + * some portability problems fixed (0.6 didn't compile on FreeBSD). + * added a sendfile() emulation based on read()/write() as fallback + if there is no sendfile() available. + * bugfix: '#' must be quoted too... + + +Changes in 0.6 +============== + + * increased the listen backlog. + * optionally flush every logfile line to disk. + * new switch to specify the location of the mime.types file. + * byte range bug fixes. + * switch for the hostname has been changed ('-s' => '-n'). + * optional log errors to the syslog (switch '-s'). + * added sample start/stop script for RedHat. + + +Changes in 0.5 +============== + + * FreeBSD port (Charles Randall ) + * minor tweaks and spelling fixes. + + +Changes in 0.4 +============== + + * last-modified headers (and 304 responses) for directory listings. + * new switch: -f index.html (or whatever you want to use for + directory indices) + * killed the access() system calls in the ls() function. + * added cache for user/group names. + * wrote a manual page. + + +Changes in 0.3 +============== + + * multipart/byteranges improved: You'll get a correct Content-length: + header for the whole thing, and we can handle keep-alive on these + requests now. + * bugfix: catch accept() failures. + * bugfix: quote the path in 302 redirect responses. + * accept absolute URLs ("GET http://host/path HTTP/1.1") + * fixed handling of conditional GET requests (hope it is RFC-Compilant + now...). + * bugfix: '+' must be quoted using %xx. + + +Changes in 0.2 +============== + + * added URL quoting. + * root can set uid/gid now. + * webfs ditches any setuid/setgid priviliges after binding to the + TCP port by setting effective to real uid/gid. It should be safe + to install webfsd suid root to allow users to use ports below + 1024 (and _only_ this of course). If anyone finds a flaw in this + code drop me a note. + * more verbose directory listing. + * added logging. It does the usual logfile reopen on SIGHUP. + + +Changes in 0.1 +============== + + * first public release. + + +Have fun, + Gerd + +-- +Gerd Knorr