Many hyperlinks are disabled.
Use anonymous login
to enable hyperlinks.
Overview
Comment: | Enhancements to althttpd.c: Add the --input FILE command-line option to simplify debugging using lldb. Improvements to comments. |
---|---|
Downloads: | Tarball | ZIP archive |
Timelines: | family | ancestors | descendants | both | trunk |
Files: | files | file ages | folders |
SHA3-256: |
a537e6f3fcc89bc13b0ef92d8e958ac7 |
User & Date: | drh 2019-02-15 17:00:20.256 |
Context
2019-02-15
| ||
18:16 | In althttpd.c, refactor some of the CGI processing logic as a preliminary step toward adding SCGI support. (check-in: 3e667aef3a user: drh tags: trunk) | |
17:00 | Enhancements to althttpd.c: Add the --input FILE command-line option to simplify debugging using lldb. Improvements to comments. (check-in: a537e6f3fc user: drh tags: trunk) | |
11:43 | Fix a typo in the ALTER TABLE documentation. (check-in: 625c9fbdad user: drh tags: trunk) | |
Changes
Changes to misc/althttpd.c.
1 2 3 4 5 6 7 8 9 10 11 12 | /* ** A small, simple HTTP server. ** ** Features: ** ** * Launched from inetd/xinetd/stunnel4, or as a stand-alone server ** * One process per request ** * Deliver static content or run CGI ** * Virtual sites based on the "Host:" property of the HTTP header ** * Runs in a chroot jail ** * Unified log file in a CSV format ** * Small code base (this 1 file) to facilitate security auditing | | | | | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | /* ** A small, simple HTTP server. ** ** Features: ** ** * Launched from inetd/xinetd/stunnel4, or as a stand-alone server ** * One process per request ** * Deliver static content or run CGI ** * Virtual sites based on the "Host:" property of the HTTP header ** * Runs in a chroot jail ** * Unified log file in a CSV format ** * Small code base (this 1 file) to facilitate security auditing ** * Simple setup - no configuration files to misconfigure ** ** This file implements a small and simple but secure and effective web ** server. There are no frills. Anything that could be reasonably ** omitted has been. ** ** Setup rules: ** ** (1) Launch as root from inetd like this: ** ** httpd -logfile logfile -root /home/www -user nobody ** ** It will automatically chroot to /home/www and become user "nobody". ** The logfile name should be relative to the chroot jail. ** ** (2) Directories of the form "*.website" (ex: www_sqlite_org.website) ** contain content. The directory is chosen based on the HTTP_HOST ** request header. If there is no HTTP_HOST header or if the ** corresponding host directory does not exist, then the ** "default.website" is used. If the HTTP_HOST header contains any ** charaters other than [a-zA-Z0-9_.,*~/] then a 403 error is ** generated. ** |
︙ | ︙ | |||
1441 1442 1443 1444 1445 1446 1447 | NotFound(300); /* LOG: Path element begins with "." or "-" */ } } /* Figure out what the root of the filesystem should be. If the ** HTTP_HOST parameter exists (stored in zHttpHost) then remove the ** port number from the end (if any), convert all characters to lower | | | | | | 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 | NotFound(300); /* LOG: Path element begins with "." or "-" */ } } /* Figure out what the root of the filesystem should be. If the ** HTTP_HOST parameter exists (stored in zHttpHost) then remove the ** port number from the end (if any), convert all characters to lower ** case, and convert non-alphanumber characters (including ".") to "_". ** Then try to find a directory with that name and the extension .website. ** If not found, look for "default.website". */ if( zScript[0]!='/' ){ NotFound(310); /* LOG: URI does not start with "/" */ } if( strlen(zRoot)+40 >= sizeof(zLine) ){ NotFound(320); /* LOG: URI too long */ } if( zHttpHost==0 || zHttpHost[0]==0 ){ NotFound(330); /* LOG: Missing HOST: parameter */ }else if( strlen(zHttpHost)+strlen(zRoot)+10 >= sizeof(zLine) ){ NotFound(340); /* LOG: HOST parameter too long */ }else{ sprintf(zLine, "%s/%s", zRoot, zHttpHost); |
︙ | ︙ | |||
2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 | if( atoi(zArg)==0 ){ useChrootJail = 0; } }else if( strcmp(z, "-debug")==0 ){ if( atoi(zArg) ){ useTimeout = 0; } }else if( strcmp(z, "-datetest")==0 ){ TestParseRfc822Date(); printf("Ok\n"); exit(0); }else{ Malfunction(510, /* LOG: unknown command-line argument on launch */ "unknown argument: [%s]\n", z); | > > > > > > > | 2013 2014 2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 | if( atoi(zArg)==0 ){ useChrootJail = 0; } }else if( strcmp(z, "-debug")==0 ){ if( atoi(zArg) ){ useTimeout = 0; } }else if( strcmp(z, "-input")==0 ){ fclose(stdin); stdin = fopen(zArg, "rb"); if( stdin==0 ){ Malfunction(501, /* LOG: cannot open --input file */ "cannot open --input file \"%s\"\n", zArg); } }else if( strcmp(z, "-datetest")==0 ){ TestParseRfc822Date(); printf("Ok\n"); exit(0); }else{ Malfunction(510, /* LOG: unknown command-line argument on launch */ "unknown argument: [%s]\n", z); |
︙ | ︙ | |||
2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 | INSERT INTO xref VALUES(450,'dup(1) failed'); INSERT INTO xref VALUES(460,'Excess URI content past static file name'); INSERT INTO xref VALUES(470,'ETag Cache Hit'); INSERT INTO xref VALUES(480,'fopen() failed for static content'); INSERT INTO xref VALUES(2,'Normal HEAD reply'); INSERT INTO xref VALUES(0,'Normal reply'); INSERT INTO xref VALUES(500,'unknown IP protocol'); INSERT INTO xref VALUES(510,'unknown command-line argument on launch'); INSERT INTO xref VALUES(520,'--root argument missing'); INSERT INTO xref VALUES(530,'chdir() failed'); INSERT INTO xref VALUES(540,'chroot() failed'); INSERT INTO xref VALUES(550,'server startup failed'); INSERT INTO xref VALUES(560,'setgid() failed'); INSERT INTO xref VALUES(570,'setuid() failed'); INSERT INTO xref VALUES(580,'unknown user'); INSERT INTO xref VALUES(590,'cannot run as root'); INSERT INTO xref VALUES(600,'malloc() failed'); INSERT INTO xref VALUES(610,'malloc() failed'); COMMIT; #endif /* SQL */ | > | 2166 2167 2168 2169 2170 2171 2172 2173 2174 2175 2176 2177 2178 2179 2180 2181 2182 2183 2184 2185 2186 | INSERT INTO xref VALUES(450,'dup(1) failed'); INSERT INTO xref VALUES(460,'Excess URI content past static file name'); INSERT INTO xref VALUES(470,'ETag Cache Hit'); INSERT INTO xref VALUES(480,'fopen() failed for static content'); INSERT INTO xref VALUES(2,'Normal HEAD reply'); INSERT INTO xref VALUES(0,'Normal reply'); INSERT INTO xref VALUES(500,'unknown IP protocol'); INSERT INTO xref VALUES(501,'cannot open --input file'); INSERT INTO xref VALUES(510,'unknown command-line argument on launch'); INSERT INTO xref VALUES(520,'--root argument missing'); INSERT INTO xref VALUES(530,'chdir() failed'); INSERT INTO xref VALUES(540,'chroot() failed'); INSERT INTO xref VALUES(550,'server startup failed'); INSERT INTO xref VALUES(560,'setgid() failed'); INSERT INTO xref VALUES(570,'setuid() failed'); INSERT INTO xref VALUES(580,'unknown user'); INSERT INTO xref VALUES(590,'cannot run as root'); INSERT INTO xref VALUES(600,'malloc() failed'); INSERT INTO xref VALUES(610,'malloc() failed'); COMMIT; #endif /* SQL */ |