quark web server
git clone git://git.suckless.org/quark
Log | Files | Refs | LICENSE

commit a20136fa18dba7fd44812be235010a4517aef783
parent 444b8f5b32d0263f1a20e18eb3044bfeed334361
Author: Laslo Hunhold <dev@frign.de>
Date:   Mon,  5 Mar 2018 09:51:29 +0100

Update the documentation to reflect the new flag-centric usage

Mhttp.c | 2+-
Mmain.c | 8++++----
Mquark.1 | 125+++++++++++++++++++++++++++++++++++++++++++++++++++++++++----------------------
Mutil.h | 2+-
4 files changed, 96 insertions(+), 41 deletions(-)

diff --git a/http.c b/http.c @@ -336,7 +336,7 @@ http_send_response(int fd, struct request *r) return http_send_status(fd, (errno == EACCES) ? S_FORBIDDEN : S_NOT_FOUND); } - vhostmatch = s.vhost[i].name; + vhostmatch = s.vhost[i].chost; break; } } diff --git a/main.c b/main.c @@ -94,10 +94,10 @@ static void usage(void) { const char *opts = "[-u user] [-g group] [-n num] [-d dir] [-l] " - "[-i index] [-v vhost] ... [-m map] ..."; + "[-i file] [-v vhost] ... [-m map] ..."; - die("usage: %s -h host -p port %s\n" - " %s -U socket [-p port] %s", argv0, + die("usage: %s -h host -p port %s\n" + " %s -U file [-p port] %s", argv0, opts, argv0, opts); } @@ -170,7 +170,7 @@ main(int argc, char *argv[]) sizeof(struct vhost)))) { die("reallocarray:"); } - if (!(s.vhost[s.vhost_len - 1].name = strtok(tok, " ")) || + if (!(s.vhost[s.vhost_len - 1].chost = strtok(tok, " ")) || !(s.vhost[s.vhost_len - 1].regex = strtok(NULL, " ")) || !(s.vhost[s.vhost_len - 1].dir = strtok(NULL, " ")) || !(s.vhost[s.vhost_len - 1].prefix = strtok(NULL, " ")) || diff --git a/quark.1 b/quark.1 @@ -1,65 +1,120 @@ -.Dd 2018-02-05 +.Dd 2018-03-05 .Dt QUARK 1 +.Os suckless.org .Sh NAME .Nm quark -.Nd simple web server +.Nd simple static web server .Sh SYNOPSIS .Nm -.Op Fl l | L -.Op Fl v | V -.Oo -.Oo -.Op Fl h Ar host -.Op Fl p Ar port -.Oc -| -.Op Fl U Ar sockfile -.Oc +.Fl h Ar host +.Fl p Ar port +.Op Fl u Ar user +.Op Fl g Ar group +.Op Fl n Ar num .Op Fl d Ar dir +.Op Fl l +.Op Fl i Ar file +.Oo Fl v Ar vhost Oc ... +.Oo Fl m Ar map Oc ... +.Nm +.Fl U Ar file +.Op Fl p Ar port .Op Fl u Ar user .Op Fl g Ar group +.Op Fl n Ar num +.Op Fl d Ar dir +.Op Fl l +.Op Fl i Ar file +.Oo Fl v Ar vhost Oc ... +.Oo Fl m Ar map Oc ... .Sh DESCRIPTION .Nm -is a simple HTTP GET only web server that can be multiplexed using -UNIX-domain sockets. +is a simple HTTP GET/HEAD-only web server for static content. .Sh OPTIONS .Bl -tag -width Ds .It Fl d Ar dir Serve .Ar dir after chrooting into it. -.It Fl l -Disable directory listing. -.It Fl L -Enable directory listing. +The default is ".". .It Fl g Ar group -Set group ID to the ID of -.Ar group -when dropping privileges. +Set group ID when dropping privileges, and in socket mode the group of the +socket file, to the ID of +.Ar group . +The default is "nogroup". .It Fl h Ar host Use .Ar host as the server hostname. +.It Fl i Ar file +Set +.Ar file +as the directory index. +The default is "index.html". +.It Fl l +Enable directory listing. +.It Fl m Ar map +Add the target prefix mapping rule specified by +.Ar map , +which has the form +.Qq Pa chost from to , +where each element is separated with whitespace. +.Pp +The prefix +.Pa from +of all matching targets, especially only of those requests for the canonical +virtual host +.Pa chost +when virtual hosts are specified, is then replaced with +.Pa to . +If no virtual hosts are given, +.Pa chost +is ignored. +.It Fl n Ar num +Set the maximum number of threads to +.Ar num . +The default is 512. .It Fl p Ar port -Listen on port +In host mode, listen on port .Ar port for incoming connections. -.It Fl u Ar user -Set user ID to the ID of -.Ar user -when dropping privileges. -.It Fl U Ar sockfile -Create the UNIX-domain socket file -.Ar sockfile , +In socket mode, use +.Ar port +for constructing proper virtual host +redirects on non-standard ports. +.It Fl U Ar file +Create the UNIX-domain socket +.Ar file , listen on it for incoming connections and remove it on exit. -Its user and group owners are equal to the user and group IDs used for dropping -privileges to. -.It Fl v -Disable virtual hosts. -.It Fl V -Enable virtual hosts. +.It Fl u Ar user +Set user ID when dropping privileges, +and in socket mode the user of the socket file, +to the ID of +.Ar user . +The default is "nobody". +.It Fl v Ar vhost +Add the virtual host specified by +.Ar vhost , +which has the form +.Qq Pa chost regex dir prefix , +where each element is separated with whitespace. +.Pp +A request matching the virtual host regular expression +.Pa regex +(see +.Xr regex 3) +is redirected to the canonical host +.Pa chost , +if they differ, using the directory +.Pa dir +as the root directory, optionally prefixing the target with +.Pa prefix . +If any virtual hosts are specified, all requests on non-matching +hosts are discarded. .El .Sh CUSTOMIZATION .Nm can be customized by creating a custom config.h from config.def.h and (re)compiling the source code. This keeps it fast, secure and simple. +.Sh AUTHORS +.An Laslo Hunhold Aq Mt dev@frign.de diff --git a/util.h b/util.h @@ -10,7 +10,7 @@ /* main server struct */ struct vhost { - char *name; + char *chost; char *regex; char *dir; char *prefix;