summaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* The names of all other struct query memebers match the correspondingIngo Schwarze2014-07-251-12/+16
| | | | | | QUERY_STRING keys, so rename "expr" to "query". Also add some missing function prototypes. No functional change.
* clean up pg_show() to not modify a string returned from getenv(3)Ingo Schwarze2014-07-251-14/+19
|
* Rewrite http_parse() completely:Ingo Schwarze2014-07-251-47/+102
| | | | | | | | | 1. Make sure the last occurrence of each key is used, even if it is empty, in which case it resets the value to the default. 2. When there is an HTTP encoding error, skip the affected key-value pair only, but not all subsequent key-value pairs. 3. Do not modify a string returned from getenv(3). 4. Do not assume the NULL pointer is all null bits.
* Sort result pages first by section number, then by name.Ingo Schwarze2014-07-243-11/+21
| | | | | | | | By moving the sort from cgi.c to mansearch.c, we get two advantages: Easier access to the data needed for sorting, in particular the section number, and the apropos(1) command line utility profits as well. Feature requested by deraadt@.
* Provide a dropdown entry "All Architectures" and make it the default.Ingo Schwarze2014-07-241-1/+25
| | | | | | | Still, amd64 remains the default in the following sense: If a man(1) mode search returns more than one page of the same name, prefer amd64 over other architectures for immediate display. ok deraadt@ daniel@
* improve FATAL handling in makewhatis(8)Ingo Schwarze2014-07-241-0/+11
|
* Partially document the core of the HTML formatter.Ingo Schwarze2014-07-231-0/+249
| | | | Stuff i learnt during my audit for XSS vulnerabilities.
* Security fix:Ingo Schwarze2014-07-232-27/+49
| | | | | | | | | | After decoding numeric (\N) and one-character (\<, \> etc.) character escape sequences, do not forget to HTML-encode the resulting ASCII character. Malicious manuals were able to smuggle XSS content by roff-escaping the HTML-special characters they need. That's a classic bug type in many web applications, actually... :-( Found myself while auditing the HTML formatter for safe output handling.
* Security fix:Ingo Schwarze2014-07-221-1/+4
| | | | | | | | | | The function print_encode() is used both for plain text and for quoted attribute values. Escape the '"' character such that malicious manuals cannot pull off XSS attacks using malformed .Lk, .Mt, .%U, and .UR macros (and maybe others) to trigger the latter case. In the former case, escaping does no harm. Issue found by Sebastien Marie <semarie-openbsd at latrappe dot fr>.
* Security fix to prevent XSS attacks:Ingo Schwarze2014-07-222-1/+79
| | | | | | | | Restrict the character set of strings passed into html_alloc(), in particular architecture names that come from the QUERY_STRING, but also SCRIPT_NAME and manpath.conf content for additional safety, and bail out safely on violations. Issue reported by Sebastien Marie <semarie-openbsd at latrappe dot fr>.
* fix a minibug reported by kristaps@:Ingo Schwarze2014-07-211-5/+9
| | | | preserve manpath and arch in .Xr links
* Kristaps points out that the current HTTP/1.1 draft standard (RFCIngo Schwarze2014-07-213-3/+9
| | | | | | | | | | | | | | | | | | 2616) requires the Location: response-header field to be an absolute URI (14.30), and only the most recent proposed standard (RFC 7231), which is barely a month old, allows a relative Location: (7.1.2). While most modern browsers appear to support relative Location: headers, some may not, and it's maybe a bit early to rely on relative Location: headers. I'm not going back to the HTTP_HOST or SERVER_NAME CGI variables, though. While some CGI programs certainly require those, in which case both the CGI programmer and the web server admin have to be very careful to keep the system secure and reliable, man.cgi(8) does not really need them. We always know at compile time which domain we are running for, and for man.cgi(8), security and reliability are definitely much more important than flexibility. So make HTTP_HOST a compile-time definition for now.
* Security fix:Ingo Schwarze2014-07-191-4/+33
| | | | | | | | | | | Validate the manpath up front and report a Bad Request if it is not listed in manpath.conf, such that clients can't probe which directories exist on the server. In case of configuration errors, consistently report Internal Server Error without disclosing any further information. Partially based on a patch from Sebastien Marie <semarie-openbsd at latrappe dot fr>, but avoiding a couple of issues with that patch and approaching the issue in a somewhat more rigorous way.
* Security fix:Ingo Schwarze2014-07-191-1/+28
| | | | | | | | | | | | Validate the name of the file to show before opening it. Only allow relative filenames starting with "man" or "cat" and containing neither "/.." nor "../". While here, correct the condition discarding an initial "./". Vulnerability found by Sebastien Marie <semarie-openbsd at latrappe dot fr>. Many thanks for sending a patch; however, i did not use it but made the checks even stricter.
* Do not use the HTTP_HOST CGI variable,Ingo Schwarze2014-07-182-11/+2
| | | | | | | | just make the HTTP redirect Location: relative. Less user input is good, it reduces the attack surface. Besides, this removes one global variable and 4 lines of code. Patch from Sebastien Marie <semarie-openbsd at latrappe dot fr>.
* When the MAN_DIR/manpath.conf configuration file does not exist or is empty,Ingo Schwarze2014-07-181-2/+12
| | | | | | | | | log the problem, hand the pg_error_internal() error page to the client, and exit(3) in a controlled way instead of stumbling on and segfaulting later. Patch from Sebastien Marie <semarie-openbsd at latrappe dot fr>, messages tweaked by me.
* Compatibility hack for the old "manpath=OpenBSD<blank>" query parameter format;Ingo Schwarze2014-07-133-25/+72
| | | | | unfortunate, more than 400 links needing this are scattered all around the www.openbsd.org website, and CVSweb needs this as well.
* Make the calltree a bit easier to understand by giving theIngo Schwarze2014-07-131-22/+21
| | | | | | functions that call resp_begin_html() names starting with "pg_" and those called after resp_begin_html() names with "resp_". No functional change, purely renaming functions.
* make source vs. formatted guessing a bit more robustIngo Schwarze2014-07-131-0/+2
|
* By popular demand, bring man.cgi default mode closer to what man(1) does:Ingo Schwarze2014-07-131-20/+46
| | | | | | Even when there are multiple pages with the same name in different sections, show one of them, using the same priorities as in the default man.conf(5) file.
* Unconfuse .Fa documentation:Ingo Schwarze2014-07-131-7/+19
| | | | | | | You can use .Fa with just a type, without a name, but when you give both, which is the usual case, they need to go into one single .Fa argument. Observed by bentley@; ok jmc@ bentley@.
* Install the manuals of the web interface below the same directoryIngo Schwarze2014-07-133-4/+12
| | | | | | | | as manpath.conf, such that we do not need to mix our own documentation into the documentation we are serving, which may not even be possible if the latter is updated automatically. Based on an idea by beck@.
* update after recent code changesIngo Schwarze2014-07-131-56/+56
|
* Polish the search form using feedback from beck@ and others,Ingo Schwarze2014-07-121-27/+96
| | | | in particular introduce a section dropdown and an architecture dropdown.
* Polish the search form using feedback from beck@ and others,Ingo Schwarze2014-07-121-1/+1
| | | | in particular introduce a section dropdown and an architecture dropdown.
* No need for run-time configuration, add minimal compile-timeIngo Schwarze2014-07-123-18/+19
| | | | | configuration facilities, just two paths and two HTML strings. Show the title on all pages, not just the index page.
* Simplify: Delete 74 lines of code including one enum type, oneIngo Schwarze2014-07-121-98/+25
| | | | | | global lookup table, two functions, two function arguments, one struct member, one local variable, and the "search/" and "show/" part of the URIs, all without losing functionality.
* Start fixing issues that beck@ helped find:Ingo Schwarze2014-07-121-37/+34
| | | | | | | | | | | | Distinguish between man(1) and apropos(1) mode by adding back the classical QUERY_STRING variable "apropos=". Change the default back to "apropos=0". Control it by adding a HTML <SELECT> element for it. Rename the "expr=" QUERY_STRING variable back to its classical name "query=", i don't see how the new name is better than the classical one. While here, drop the concept of a "legacy mode". Simply continue to support the features, and use what we consider best.
* Fix whatis(1) to correctly match words instead of any substrings.Ingo Schwarze2014-07-122-23/+52
| | | | | While here, also provide an internal mode (MANSEARCH_MAN) to match complete names, to be used by man.cgi(8).
* fix the two manual links on the index pageIngo Schwarze2014-07-121-7/+8
|
* merge OpenBSD rev. 1.3 by tedu@:Ingo Schwarze2014-07-111-6/+8
| | | | | make http decode linear time. also remove a redundant null check.
* merge OpenBSD rev. 1.2 by tedu@:Ingo Schwarze2014-07-111-8/+9
| | | | http headers must end lines with CRLF.
* add HISTORY sectionIngo Schwarze2014-07-111-0/+8
|
* Link to the new man.cgi(8) manual, now that we have it! :-)Ingo Schwarze2014-07-101-2/+5
| | | | While here, s/satisfy/match/ when talking about queries.
* Full rewrite of the man.cgi(8) manual.Ingo Schwarze2014-07-103-124/+326
| | | | | | | | | | | | Almost everything in the old man.cgi(7) was outdated in one way or another - catman, catman.conf, CACHE_DIR, /cache, manroots, replacing '/' with spaces, /tmp... Instead, document the HTML and URI interfaces, the output and the setup, and complete the listings of ENVIRONMENT variables and FILES. Using section 8 instead of section 7 because that's the usual place for CGI programs, see for example bgplg(8) and slowcgi(8).
* some sugar for the index pageIngo Schwarze2014-07-091-2/+10
|
* Clean up error reporting:Ingo Schwarze2014-07-091-49/+50
| | | | | | | * Consistent naming and use of resp_* functions. * Split resp_noresult() out of resp_search() and reuse it. * Log information about internal errors. * And some minor fixes.
* namespace cleanups:Ingo Schwarze2014-07-091-44/+47
| | | | | | | | | | CGI variable: s/CACHE_DIR/MAN_DIR/ because it's static, not a cache default MAN_DIR: /cache/man.cgi/ -> /man/ see above global variable: s/cache/mandir/ see above global variable: s/css/cssdir/ for consistency with mandir global variable: s/host/httphost/ for consistency with HTTP_HOST global variable: s/progname/scriptname/ for consistency with SCRIPT_NAME struct query: member s/manroot/manpath/ for consistency with QUERY_STRING
* remove obsolete __sun includesIngo Schwarze2014-07-091-9/+2
| | | | and improve some whitespace and comments
* set a reasonable default for .OsIngo Schwarze2014-07-091-1/+2
|
* mark defos as const; nobody needs to change it,Ingo Schwarze2014-07-095-6/+8
| | | | and it is occasionally useful to be able to pass literal strings
* delete forgotten, obsolete rew_warn() prototypeIngo Schwarze2014-07-091-2/+0
|
* oops, forgot to trim the newline characterIngo Schwarze2014-07-091-0/+2
|
* Simplify pathgen() even more.Ingo Schwarze2014-07-091-27/+13
| | | | | | Let manpath.conf be a plain text list of the directories to use. As a bonus, this makes the order configurable. Get rid of <dirent.h>, opendir(3), readdir(3), stat(2).
* include manpath= when printing queries, and omit empty parametersIngo Schwarze2014-07-091-12/+32
|
* This one needs "config.h", too.Ingo Schwarze2014-07-091-0/+4
|
* Switch over man.cgi to SQLite. While here:Ingo Schwarze2014-07-092-377/+100
| | | | | | | * Simplify pathgen(), just use the subdirs of the cache dir. * Simplify URI paths, just use show/<manpath>/<filename>. * Drop struct paths, just use plain strings. * Garbage collect unused headers.
* Clean up ERROR messages related to document structure and macros:Ingo Schwarze2014-07-077-40/+59
| | | | Hierarchical naming and mention macro names in messages.
* Simplify man_unscope(), removing 18 lines of code, that is,Ingo Schwarze2014-07-073-50/+25
| | | | | | removing one function argument, one function definition, three function invocations and two pointless assert()s. No functional change.
* no need to delete any content from .Rs blocks,Ingo Schwarze2014-07-073-36/+13
| | | | and downgrade the related message from ERROR to WARNING