Add -. option

This commit is contained in:
Neale Pickett 2012-06-22 13:10:26 -06:00
parent dcb83f3e47
commit b4cb8c1e96
2 changed files with 21 additions and 3 deletions

10
eris.c
View File

@ -75,6 +75,7 @@
int doauth = 0; int doauth = 0;
int docgi = 0; int docgi = 0;
int doidx = 0; int doidx = 0;
int nochdir = 0;
int redirect = 0; int redirect = 0;
int portappend = 0; int portappend = 0;
@ -244,7 +245,7 @@ parse_options(int argc, char *argv[])
{ {
int opt; int opt;
while (-1 != (opt = getopt(argc, argv, "acdhkprv"))) { while (-1 != (opt = getopt(argc, argv, "acdhkprv."))) {
switch (opt) { switch (opt) {
case 'a': case 'a':
doauth = 1; doauth = 1;
@ -255,6 +256,9 @@ parse_options(int argc, char *argv[])
case 'd': case 'd':
doidx = 1; doidx = 1;
break; break;
case '.':
nochdir = 1;
break;
case 'p': case 'p':
portappend = 1; portappend = 1;
break; break;
@ -264,6 +268,7 @@ parse_options(int argc, char *argv[])
case 'v': case 'v':
printf(FNORD "\n"); printf(FNORD "\n");
exit(0); exit(0);
case 'h':
default: default:
fprintf(stderr, "Usage: %s [OPTIONS]\n", fprintf(stderr, "Usage: %s [OPTIONS]\n",
argv[0]); argv[0]);
@ -271,6 +276,7 @@ parse_options(int argc, char *argv[])
fprintf(stderr, "-a Enable authentication\n"); fprintf(stderr, "-a Enable authentication\n");
fprintf(stderr, "-c Enable CGI\n"); fprintf(stderr, "-c Enable CGI\n");
fprintf(stderr, "-d Enable directory listing\n"); fprintf(stderr, "-d Enable directory listing\n");
fprintf(stderr, "-. Serve out of ./ (no vhosting)\n");
fprintf(stderr, "-p Append port to hostname directory\n"); fprintf(stderr, "-p Append port to hostname directory\n");
fprintf(stderr, "-r Enable symlink redirection\n"); fprintf(stderr, "-r Enable symlink redirection\n");
fprintf(stderr, "-v Print version and exit\n"); fprintf(stderr, "-v Print version and exit\n");
@ -711,7 +717,7 @@ handle_request()
} }
/* Try to change into the appropriate directory */ /* Try to change into the appropriate directory */
{ if (! nochdir) {
char fn[PATH_MAX]; char fn[PATH_MAX];
if (host) { if (host) {

14
test.sh
View File

@ -110,6 +110,13 @@ title "Logging busybox"
H "Options"
title "-."
printf 'GET /eris HTTP/1.0\r\n\r\n' | $HTTPD -. 2>/dev/null | grep -q 'HTTP/1.. 200 OK' && pass || fail
H "Tomfoolery" H "Tomfoolery"
title "Non-header" title "Non-header"
@ -150,7 +157,7 @@ title "ANSI C Date"
printf 'GET / HTTP/1.0\r\nIf-Modified-Since: Sun Feb 27 12:12:12 2030\r\n\r\n' | $HTTPD 2>/dev/null | grep -q 'HTTP/1.. 304 ' && pass || fail printf 'GET / HTTP/1.0\r\nIf-Modified-Since: Sun Feb 27 12:12:12 2030\r\n\r\n' | $HTTPD 2>/dev/null | grep -q 'HTTP/1.. 304 ' && pass || fail
title "ims persist" title "ims persist"
printf 'GET / HTTP/1.0\r\nIf-Modified-Since: %s\r\n\r\nGET / HTTP/1.0\r\n\r\n' | $HTTPD 2>/dev/null | d | grep -q 'HTTP/1.. 304.*HTTP/1.. 200' printf 'GET / HTTP/1.1\r\nIf-Modified-Since: %s\r\n\r\nGET / HTTP/1.0\r\n\r\n' "$ims" | $HTTPD 2>/dev/null | d | grep -q 'HTTP/1.. 304.*HTTP/1.. 200' && pass || fail
@ -214,6 +221,11 @@ printf 'GET / HTTP/1.0\r\nHost: empty\r\n\r\n' | $HTTPD_IDX 2>/dev/null | grep -
title "CGI output bare newlines" title "CGI output bare newlines"
printf 'GET /a.cgi HTTP/1.0\r\n\r\n' | $HTTPD_CGI 2>/dev/null | d | grep -q '#%#%' && pass || fail printf 'GET /a.cgi HTTP/1.0\r\n\r\n' | $HTTPD_CGI 2>/dev/null | d | grep -q '#%#%' && pass || fail
## Note: fnord gets a pass on this since it only claims to be an HTTP/1.0
## server. Eris is not 1.1 compliant either, but it at least tries to fake it. You
## should consider how much of HTTP/1.1 you want before deploying either. In practice,
## with browsers, both seems sufficient. Some tools, notably httperf, fail
## with fnord.
# 3. Should process both requests; instead drops second # 3. Should process both requests; instead drops second
title "Multiple requests in one packet" title "Multiple requests in one packet"
printf 'GET / HTTP/1.1\r\nHost: a\r\nConnection: keep-alive\r\n\r\nGET / HTTP/1.1\r\nHost: a\r\nConnection: keep-alive\r\n\r\n' | $HTTPD 2>/dev/null | grep -c '^HTTP/1.' | grep -q 2 && pass || fail printf 'GET / HTTP/1.1\r\nHost: a\r\nConnection: keep-alive\r\n\r\nGET / HTTP/1.1\r\nHost: a\r\nConnection: keep-alive\r\n\r\n' | $HTTPD 2>/dev/null | grep -c '^HTTP/1.' | grep -q 2 && pass || fail