]> git.cameronkatri.com Git - mandoc.git/log
mandoc.git
10 years agoThe macro SCALE_HS_INIT() is always passed the result of strlen() or
Ingo Schwarze [Tue, 12 Aug 2014 19:28:03 +0000 (19:28 +0000)]
The macro SCALE_HS_INIT() is always passed the result of strlen() or
an equivalent number as its argument, and strlen() measures the width
of a string in characters, not in basic units.  No functional change
right now, but important for the upcoming scaling unit fixes.

10 years agowork around lack of d_namlen and ALIGN/ALIGNBYTES on Linux
Ingo Schwarze [Mon, 11 Aug 2014 03:19:39 +0000 (03:19 +0000)]
work around lack of d_namlen and ALIGN/ALIGNBYTES on Linux

10 years agorevert previous; i missed that config.h needs sys/types.h and stdio.h
Ingo Schwarze [Mon, 11 Aug 2014 02:21:27 +0000 (02:21 +0000)]
revert previous; i missed that config.h needs sys/types.h and stdio.h
for itself because it uses size_t and FILE...

10 years agotypo
Ingo Schwarze [Mon, 11 Aug 2014 02:05:54 +0000 (02:05 +0000)]
typo

10 years agoProvide a fallback version of fts(3) for systems lacking it.
Ingo Schwarze [Mon, 11 Aug 2014 01:39:00 +0000 (01:39 +0000)]
Provide a fallback version of fts(3) for systems lacking it.
I chose the OpenBSD version because it apparently contains various
bugfixes that never made it into libnbcompat.  To reduce size and
complexity, i stripped out the features we don't need.

10 years agoGet rid of HAVE_CONFIG_H, it is always defined; idea from libnbcompat.
Ingo Schwarze [Sun, 10 Aug 2014 23:54:41 +0000 (23:54 +0000)]
Get rid of HAVE_CONFIG_H, it is always defined; idea from libnbcompat.
Include <sys/types.h> where needed, it does not belong in config.h.
Remove <stdio.h> from config.h; if it is missing somewhere, it should
be added, but i cannot find a *.c file where it is missing.

10 years agoNew section about deployment by Kristaps. VERSION_1_13_1
Ingo Schwarze [Sun, 10 Aug 2014 17:22:26 +0000 (17:22 +0000)]
New section about deployment by Kristaps.
New paragraph about fts(3) by me.
And various minor tweaks, some by Kristaps and some by me.

10 years ago1.13.1 release notes
Ingo Schwarze [Sun, 10 Aug 2014 16:32:57 +0000 (16:32 +0000)]
1.13.1 release notes

10 years agosync after adding config.h to mansearch_const.c;
Ingo Schwarze [Sun, 10 Aug 2014 16:21:08 +0000 (16:21 +0000)]
sync after adding config.h to mansearch_const.c;
committing on behalf of kristaps@ because i want to release now

10 years agoClarifications in comments and standard output suggested by
Ingo Schwarze [Sun, 10 Aug 2014 02:45:04 +0000 (02:45 +0000)]
Clarifications in comments and standard output suggested by
Paul Onyschuk <ptmelville at gmail dot com> (Alpine Linux)

10 years agommap(2) requires MAP_PRIVATE ^ MAP_SHARED for flags;
Ingo Schwarze [Sat, 9 Aug 2014 14:24:53 +0000 (14:24 +0000)]
mmap(2) requires MAP_PRIVATE ^ MAP_SHARED for flags;
found by kristaps@ on Mac OS X

10 years agomissing #include "config.h",
Ingo Schwarze [Sat, 9 Aug 2014 14:05:21 +0000 (14:05 +0000)]
missing #include "config.h",
hence missing definition of __BEGIN_DECLS;
found by Thomas Klausner <wiz at NetBSD> on SunOS 5.11

10 years agoDo not hardcode stuff in ./configure that is actually user-configurable
Ingo Schwarze [Fri, 8 Aug 2014 23:47:21 +0000 (23:47 +0000)]
Do not hardcode stuff in ./configure that is actually user-configurable
in the Makefile; instead, pass it down via the environment just
like CFLAGS.
Nice suggestion from kristaps@ hoping to make MacOS X happier.

10 years agoDelete the __attribute__((__bounded__(...))) annotation.
Ingo Schwarze [Fri, 8 Aug 2014 23:43:47 +0000 (23:43 +0000)]
Delete the __attribute__((__bounded__(...))) annotation.
That's an OpenBSD-specific gcc-4.2.1 security extension.
It's certainly a bad idea to use such stuff in a compatibility header,
as other operating systems just won't understand it.

10 years agoadd INSTALL and bump VERSION
Ingo Schwarze [Fri, 8 Aug 2014 20:34:06 +0000 (20:34 +0000)]
add INSTALL and bump VERSION

10 years agomention neatroff
Ingo Schwarze [Fri, 8 Aug 2014 20:04:36 +0000 (20:04 +0000)]
mention neatroff

10 years agoprovide some instructions for manual installation
Ingo Schwarze [Fri, 8 Aug 2014 16:45:39 +0000 (16:45 +0000)]
provide some instructions for manual installation

10 years agoWhen .Sm is called without an argument, groff toggles the spacing mode,
Ingo Schwarze [Fri, 8 Aug 2014 16:38:06 +0000 (16:38 +0000)]
When .Sm is called without an argument, groff toggles the spacing mode,
so let us do the same for compatibility.  Using this feature is of
course not recommended except in manual page obfuscation contests.

10 years agosome corrections and improvements with respect to prologue macros;
Ingo Schwarze [Fri, 8 Aug 2014 01:52:40 +0000 (01:52 +0000)]
some corrections and improvements with respect to prologue macros;
found while working on mandoc(1) messages

10 years agodocument warning and error messages, using quite some feedback from jmc@;
Ingo Schwarze [Fri, 8 Aug 2014 01:50:59 +0000 (01:50 +0000)]
document warning and error messages, using quite some feedback from jmc@;
more cleanup is likely to happen when it's in

10 years agoBring the handling of defective prologues even closer to groff,
Ingo Schwarze [Wed, 6 Aug 2014 15:09:05 +0000 (15:09 +0000)]
Bring the handling of defective prologues even closer to groff,
in particular relaxing the distinction between prologue and body
and further improving messages.
* The last .Dd wins and the last .Os wins, even in the body.
* The last .Dt before the first body macro wins.
* Missing title in .Dt defaults to UNTITLED.  Warn about it.
* Missing section in .Dt does not default to 1.  But warn about it.
* Do not warn multiple times about the same mdoc(7) prologue macro.
* Warn about missing .Os.
* Incomplete .TH defaults to empty strings.  Warn about it.

10 years agosync after sqlite3_errstr() compat addition
Ingo Schwarze [Tue, 5 Aug 2014 16:12:25 +0000 (16:12 +0000)]
sync after sqlite3_errstr() compat addition

10 years agostrcasestr() wants _GNU_SOURCE on Linux
Ingo Schwarze [Tue, 5 Aug 2014 16:03:03 +0000 (16:03 +0000)]
strcasestr() wants _GNU_SOURCE on Linux

10 years agoNULL is in <stddef.h>; found on Linux
Ingo Schwarze [Tue, 5 Aug 2014 16:00:37 +0000 (16:00 +0000)]
NULL is in <stddef.h>; found on Linux

10 years agomansearch.h uses uint64_t, so it needs stdint.h; found on Linux
Ingo Schwarze [Tue, 5 Aug 2014 15:29:30 +0000 (15:29 +0000)]
mansearch.h uses uint64_t, so it needs stdint.h; found on Linux

10 years agoAbsurdly, the return value of sqlite3_column_text()
Ingo Schwarze [Tue, 5 Aug 2014 14:43:10 +0000 (14:43 +0000)]
Absurdly, the return value of sqlite3_column_text()
is "const unsigned char *", which causes warnings with GCC on Linux.
Explicitly cast to "const char *" to avoid this.
Issue noticed by kristaps@.

10 years agoSince old SQLite versions do not have sqlite3_errstr(),
Ingo Schwarze [Tue, 5 Aug 2014 12:50:52 +0000 (12:50 +0000)]
Since old SQLite versions do not have sqlite3_errstr(),
provide a dummy fallback implementation.
Do not bother to decode the error, SQLite error codes
are not useful enough for that to be worthwhile.
Note that using sqlite3_errmsg(db) would be a bad idea:
On malloc() failure, db is NULL, which would cause a segfault.
Issue noticed by kristaps@.

10 years agoIf an old SQLite version doesn't provide SQLITE_DETERMINISTIC,
Ingo Schwarze [Tue, 5 Aug 2014 12:34:08 +0000 (12:34 +0000)]
If an old SQLite version doesn't provide SQLITE_DETERMINISTIC,
simply ignore it, as using it is merely an optimization.
Issue noticed by kristaps@.

10 years agoPortability fix:
Ingo Schwarze [Tue, 5 Aug 2014 11:19:13 +0000 (11:19 +0000)]
Portability fix:
* POSIX syntax is 'include Makefile.depend', not '.include "Makefile.depend"'
* gmake(1) runs the build rule for the included file (duh), so delete the rule
* consequently, we have to mark the 'depend' maintainer target .PHONY
* as it's now .PHONY anyway, drop some prerequisites that are now useless
Issue noticed by kristaps@.

10 years agoSync library documentation with reality.
Ingo Schwarze [Tue, 5 Aug 2014 05:48:56 +0000 (05:48 +0000)]
Sync library documentation with reality.
Split mandoc_escape(3), mandoc_malloc(3), and mchars_alloc(3)
out of mandoc(3), adding lots of new information.

10 years agoSwitch to autogenerated dependency rules; they are less error-prone.
Ingo Schwarze [Tue, 5 Aug 2014 05:27:16 +0000 (05:27 +0000)]
Switch to autogenerated dependency rules; they are less error-prone.
Provide a maintainer target to regenerate them.

10 years agoProperly partition the build system and install some missing stuff:
Ingo Schwarze [Tue, 5 Aug 2014 03:02:40 +0000 (03:02 +0000)]
Properly partition the build system and install some missing stuff:
* Introduce targets base-build, db-build, cgi-build.
* Introduce targets base-install, db-install, cgi-install.
* Introduce a BUILD_TARGETS variable to contain db-build and cgi-build.
* Introduce an INSTALL_TARGETS variable and fill it using BUILD_TARGETS.
* Install the whatis(1) and makewhatis(8) binaries.
* Install the apropos(1), whatis(1), and makewhatis(8) manuals.
* Install mandoc_aux.h.
* Do not build manpage(1) by default.

10 years agoVarious minor corrections:
Ingo Schwarze [Tue, 5 Aug 2014 01:45:02 +0000 (01:45 +0000)]
Various minor corrections:
* Do not unconditionally use -I/usr/local/include and -L/usr/local/lib.
* Do not install programs and libs root-writeable.
* Add missing test-strcasestr.c and test-strsep.c to TESTSRCS.
* Add missing cgi.h.example and mandoc_html.3 to SRCS.
* Add missing mandoc_html.3.html to WWW_MANS.

10 years agosort user settings; no functional change
Ingo Schwarze [Tue, 5 Aug 2014 01:07:00 +0000 (01:07 +0000)]
sort user settings; no functional change

10 years agoremove strnlen(3) compat, we no longer use it
Ingo Schwarze [Mon, 4 Aug 2014 23:44:29 +0000 (23:44 +0000)]
remove strnlen(3) compat, we no longer use it

10 years agoSimplify by allowing only one post-handler.
Ingo Schwarze [Sat, 2 Aug 2014 00:02:42 +0000 (00:02 +0000)]
Simplify by allowing only one post-handler.
Saves 36 static arrays and 10 lines of code
at the expense of only five new trivial static functions.
No functional change.

10 years agoSimplify by allowing only one pre-handler.
Ingo Schwarze [Fri, 1 Aug 2014 22:22:11 +0000 (22:22 +0000)]
Simplify by allowing only one pre-handler.
Saves 12 static arrays and 19 lines of code.
No functional change.

10 years agoSimplify man(7) validation:
Ingo Schwarze [Fri, 1 Aug 2014 21:24:17 +0000 (21:24 +0000)]
Simplify man(7) validation:
Drop pre-handlers, they were almost unused.
Drop the needless complexity of allowing more than one post-handler.

This saves one internal interface function, one static function, one
private struct definition, sixteen static arrays, and 45 lines of code.
No functional change.

10 years agoFix floating point handling: When converting double to size_t,
Ingo Schwarze [Fri, 1 Aug 2014 19:38:29 +0000 (19:38 +0000)]
Fix floating point handling: When converting double to size_t,
properly round to the nearest M (=0.001m), which is the smallest
available unit.

This avoids weirdness like (size_t)(0.6 * 10.0) == 5
by instead calculating (size_t)(0.6 * 10.0 + 0.0005) == 6,
and so it fixes the indentation of the readline(3) manual.

10 years agoClarity with respect to floating point handling:
Ingo Schwarze [Fri, 1 Aug 2014 19:25:52 +0000 (19:25 +0000)]
Clarity with respect to floating point handling:
Write double constants as double rather than integer literals.
Remove useless explicit (double) cast done at one place and nowhere else.
No functional change.

10 years agodemacrify: get rid of man_nmsg(), man_pmsg(), mdoc_nmsg(), mdoc_pmsg()
Ingo Schwarze [Fri, 1 Aug 2014 17:40:34 +0000 (17:40 +0000)]
demacrify: get rid of man_nmsg(), man_pmsg(), mdoc_nmsg(), mdoc_pmsg()

10 years agomention requests and macros in more messages
Ingo Schwarze [Fri, 1 Aug 2014 17:27:44 +0000 (17:27 +0000)]
mention requests and macros in more messages

10 years agoDynamically allocate the stack of roff(7) .ie condition values
Ingo Schwarze [Fri, 1 Aug 2014 15:08:46 +0000 (15:08 +0000)]
Dynamically allocate the stack of roff(7) .ie condition values
and thus get rid of the last useless fatal error.

10 years agoSplit MANDOCERR_IGNARGV into one message for .An and one for .Bl
Ingo Schwarze [Thu, 31 Jul 2014 09:22:21 +0000 (09:22 +0000)]
Split MANDOCERR_IGNARGV into one message for .An and one for .Bl
and report the macro name and argument.

10 years agoIn .Bl -column, if some of the column width declarations are given
Ingo Schwarze [Thu, 31 Jul 2014 00:41:10 +0000 (00:41 +0000)]
In .Bl -column, if some of the column width declarations are given
right after the -column argument and some at the very end of the
argument list, after some other arguments like -compact, concatenate
the column lists.
This gets rid of one of the last useless FATAL errors
and actually shortens the code by a few lines.

This fixes an issue introduced more than five years ago, at first
causing an assert() since mdoc_action.c rev. 1.14 (June 17, 2009),
then later a FATAL error since mdoc_validate rev. 1.130 (Nov. 30, 2010),
and marked as "TODO" ever since.

10 years agoRemove the useless FATAL error "argument count wrong, violates syntax".
Ingo Schwarze [Wed, 30 Jul 2014 23:38:52 +0000 (23:38 +0000)]
Remove the useless FATAL error "argument count wrong, violates syntax".
The last remaining instance was .It in .Bl -column with more than one
excessive .Ta.  However, simply downgrading from FATAL to ERROR, it just
works fine, almost the same way as in groff, without any other changes.

10 years agoImprove handling of next-line scope broken by end of file.
Ingo Schwarze [Wed, 30 Jul 2014 23:01:39 +0000 (23:01 +0000)]
Improve handling of next-line scope broken by end of file.
Detect the condition earlier, report in the error message
which block is broken, and delete the broken block.
Consequently, empty section headers can no longer happen.

10 years agogarbage collect three unused global flags; no functional change
Ingo Schwarze [Wed, 30 Jul 2014 21:18:24 +0000 (21:18 +0000)]
garbage collect three unused global flags; no functional change

10 years agoSimplify: replace one global flag by one local variable.
Ingo Schwarze [Wed, 30 Jul 2014 20:06:36 +0000 (20:06 +0000)]
Simplify: replace one global flag by one local variable.
No functional change.

10 years agoGet rid of the useless FATAL error "child violates parent syntax".
Ingo Schwarze [Wed, 30 Jul 2014 17:06:26 +0000 (17:06 +0000)]
Get rid of the useless FATAL error "child violates parent syntax".
When finding items outside lists, simply skip them and throw an ERROR.
Handle subsections before the first section instead of bailing out.

10 years agoRemove two useless FATAL errors.
Ingo Schwarze [Wed, 30 Jul 2014 14:50:08 +0000 (14:50 +0000)]
Remove two useless FATAL errors.
When a file contains neither text nor macros, treat it as an empty document.
When the mdoc(7) document prologue is incomplete, use some default values.

10 years agobetter name and wording for the last two non-generic errors
Ingo Schwarze [Wed, 30 Jul 2014 12:58:21 +0000 (12:58 +0000)]
better name and wording for the last two non-generic errors

10 years agoVarious improvements related to .Ex and .Rv:
Ingo Schwarze [Wed, 30 Jul 2014 00:19:16 +0000 (00:19 +0000)]
Various improvements related to .Ex and .Rv:
* let .Nm fall back to the empty string, not to UNKNOWN
* never let .Rv copy an argument from .Nm
* avoid spurious \fR after empty .Nm in -Tman
* correct handling of .Ex and .Rv in -Tman
* correct the wording of the output for .Rv without arguments
* use non-breaking spaces in .Ex and .Rv output where required
* split MANDOCERR_NONAME into a warning for .Ex and an error for .Nm

10 years agomove some things here from my private TODO list,
Ingo Schwarze [Tue, 29 Jul 2014 15:20:10 +0000 (15:20 +0000)]
move some things here from my private TODO list,
and remove some items that have already been taken care of

10 years agoPartial implementation of .Bd -centered.
Ingo Schwarze [Tue, 29 Jul 2014 13:58:18 +0000 (13:58 +0000)]
Partial implementation of .Bd -centered.

In groff, .Bd -centered operates in fill mode, which is relatively
hard to implement, while this implementation operates in non-fill
mode so far.  As long as you pay attention that your lines do not
overflow, it works.  To make sure that rendering is the same for
mandoc and groff, it is recommended to insert .br between lines
for now.  This implementation will need improvement later.

10 years agocode readability; no functional change
Ingo Schwarze [Sun, 27 Jul 2014 21:53:17 +0000 (21:53 +0000)]
code readability; no functional change

10 years agoEven for UTF-8 output, a non-breaking space character has the same width
Ingo Schwarze [Sun, 27 Jul 2014 21:52:16 +0000 (21:52 +0000)]
Even for UTF-8 output, a non-breaking space character has the same width
as a normal space character, and not width 0.  Bug reported by bentley@.

10 years agoChoosing the right encoding is a tricky business...
Ingo Schwarze [Fri, 25 Jul 2014 21:05:41 +0000 (21:05 +0000)]
Choosing the right encoding is a tricky business...

Printing query strings for URIs *always* needs URI-encoding, and when
embedding the URI into an HTML document, it needs replacement of
the "&" separators by "&amp;" *in addition to that*, not instead.
Delete the function html_primtquery(), it was completely wrong.

You can see the badness by entering "mandoc &sec=2" into the query input
box before this patch and click "Submit".  You come to the right page at
first (...man.cgi?query=mandoc+%26sec%3D2&apropos=0&sec=0&...), but now
the link to mandoc(1) is wrong: ...mandoc.1?query=mandoc &amp;sec=2&amp;...
Clicking on that, the "&sec=2" disappears from the query input box and
suddenly you have the first dropdown set to "2 - System Calls".  Oops.

10 years agoSort the URI keys for .Xr links in the same order used by the search form,
Ingo Schwarze [Fri, 25 Jul 2014 20:09:09 +0000 (20:09 +0000)]
Sort the URI keys for .Xr links in the same order used by the search form,
and leave out the manpath when it is the default.
For building the HTML formatter options, do not use a static buffer.

10 years agooops, we must not try to validate a manpath we don't have;
Ingo Schwarze [Fri, 25 Jul 2014 19:37:34 +0000 (19:37 +0000)]
oops, we must not try to validate a manpath we don't have;
fixing an oversight introduced in rev. 1.77

10 years agoWe cannot easily control the order of the QUERY_STRING keys generated
Ingo Schwarze [Fri, 25 Jul 2014 18:20:39 +0000 (18:20 +0000)]
We cannot easily control the order of the QUERY_STRING keys generated
by the search form, it's just the order of the fields in the form.
Actually, that's not too bad; the generated URI resembles the
generating form.

To minimize confusion for people looking at URIs, give the keys
in the same order when generating URIs for search listings and
search redirections, the latter being used instead of search
listings that would have only one single entry.  Also, if the
manpath is the default, remove it form the generated URIs.

10 years agoIn generated .Xr links, avoid double encoding of ampersands
Ingo Schwarze [Fri, 25 Jul 2014 17:52:04 +0000 (17:52 +0000)]
In generated .Xr links, avoid double encoding of ampersands
and avoid empty arch= keys.

10 years agoEven though this is not XHTML yet, remove some gratuitious violations
Ingo Schwarze [Fri, 25 Jul 2014 17:34:06 +0000 (17:34 +0000)]
Even though this is not XHTML yet, remove some gratuitious violations
of XHTML syntax.  Also add some cosmetic newlines to the HTML code.

10 years agoThe names of all other struct query memebers match the corresponding
Ingo Schwarze [Fri, 25 Jul 2014 16:56:06 +0000 (16:56 +0000)]
The names of all other struct query memebers match the corresponding
QUERY_STRING keys, so rename "expr" to "query".
Also add some missing function prototypes.
No functional change.

10 years agoclean up pg_show() to not modify a string returned from getenv(3)
Ingo Schwarze [Fri, 25 Jul 2014 16:43:37 +0000 (16:43 +0000)]
clean up pg_show() to not modify a string returned from getenv(3)

10 years agoRewrite http_parse() completely:
Ingo Schwarze [Fri, 25 Jul 2014 16:07:13 +0000 (16:07 +0000)]
Rewrite http_parse() completely:
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.

10 years agoSort result pages first by section number, then by name.
Ingo Schwarze [Thu, 24 Jul 2014 20:30:45 +0000 (20:30 +0000)]
Sort result pages first by section number, then by name.
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@.

10 years agoProvide a dropdown entry "All Architectures" and make it the default.
Ingo Schwarze [Thu, 24 Jul 2014 08:26:57 +0000 (08:26 +0000)]
Provide a dropdown entry "All Architectures" and make it the default.
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@

10 years agoimprove FATAL handling in makewhatis(8)
Ingo Schwarze [Thu, 24 Jul 2014 08:26:05 +0000 (08:26 +0000)]
improve FATAL handling in makewhatis(8)

10 years agoPartially document the core of the HTML formatter.
Ingo Schwarze [Wed, 23 Jul 2014 18:13:09 +0000 (18:13 +0000)]
Partially document the core of the HTML formatter.
Stuff i learnt during my audit for XSS vulnerabilities.

10 years agoSecurity fix:
Ingo Schwarze [Wed, 23 Jul 2014 15:00:08 +0000 (15:00 +0000)]
Security fix:
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.

10 years agoSecurity fix:
Ingo Schwarze [Tue, 22 Jul 2014 22:41:35 +0000 (22:41 +0000)]
Security fix:
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>.

10 years agoSecurity fix to prevent XSS attacks:
Ingo Schwarze [Tue, 22 Jul 2014 18:14:13 +0000 (18:14 +0000)]
Security fix to prevent XSS attacks:
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>.

10 years agofix a minibug reported by kristaps@:
Ingo Schwarze [Mon, 21 Jul 2014 22:33:01 +0000 (22:33 +0000)]
fix a minibug reported by kristaps@:
preserve manpath and arch in .Xr links

10 years agoKristaps points out that the current HTTP/1.1 draft standard (RFC
Ingo Schwarze [Mon, 21 Jul 2014 15:45:17 +0000 (15:45 +0000)]
Kristaps points out that the current HTTP/1.1 draft standard (RFC
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.

10 years agoSecurity fix:
Ingo Schwarze [Sat, 19 Jul 2014 13:15:11 +0000 (13:15 +0000)]
Security fix:
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.

10 years agoSecurity fix:
Ingo Schwarze [Sat, 19 Jul 2014 11:35:12 +0000 (11:35 +0000)]
Security fix:
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.

10 years agoDo not use the HTTP_HOST CGI variable,
Ingo Schwarze [Fri, 18 Jul 2014 19:03:39 +0000 (19:03 +0000)]
Do not use the HTTP_HOST CGI variable,
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>.

10 years agoWhen the MAN_DIR/manpath.conf configuration file does not exist or is empty,
Ingo Schwarze [Fri, 18 Jul 2014 14:46:25 +0000 (14:46 +0000)]
When the MAN_DIR/manpath.conf configuration file does not exist or is empty,
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.

10 years agoCompatibility hack for the old "manpath=OpenBSD<blank>" query parameter format;
Ingo Schwarze [Sun, 13 Jul 2014 15:38:36 +0000 (15:38 +0000)]
Compatibility hack for the old "manpath=OpenBSD<blank>" query parameter format;
unfortunate, more than 400 links needing this are scattered all around
the www.openbsd.org website, and CVSweb needs this as well.

10 years agoMake the calltree a bit easier to understand by giving the
Ingo Schwarze [Sun, 13 Jul 2014 12:55:45 +0000 (12:55 +0000)]
Make the calltree a bit easier to understand by giving the
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.

10 years agomake source vs. formatted guessing a bit more robust
Ingo Schwarze [Sun, 13 Jul 2014 12:45:23 +0000 (12:45 +0000)]
make source vs. formatted guessing a bit more robust

10 years agoBy popular demand, bring man.cgi default mode closer to what man(1) does:
Ingo Schwarze [Sun, 13 Jul 2014 12:31:23 +0000 (12:31 +0000)]
By popular demand, bring man.cgi default mode closer to what man(1) does:
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.

10 years agoUnconfuse .Fa documentation:
Ingo Schwarze [Sun, 13 Jul 2014 10:24:40 +0000 (10:24 +0000)]
Unconfuse .Fa documentation:
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@.

10 years agoInstall the manuals of the web interface below the same directory
Ingo Schwarze [Sun, 13 Jul 2014 09:39:32 +0000 (09:39 +0000)]
Install the manuals of the web interface below the same directory
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@.

10 years agoupdate after recent code changes
Ingo Schwarze [Sun, 13 Jul 2014 00:19:51 +0000 (00:19 +0000)]
update after recent code changes

10 years agoPolish the search form using feedback from beck@ and others,
Ingo Schwarze [Sat, 12 Jul 2014 23:46:44 +0000 (23:46 +0000)]
Polish the search form using feedback from beck@ and others,
in particular introduce a section dropdown and an architecture dropdown.

10 years agoPolish the search form using feedback from beck@ and others,
Ingo Schwarze [Sat, 12 Jul 2014 23:41:04 +0000 (23:41 +0000)]
Polish the search form using feedback from beck@ and others,
in particular introduce a section dropdown and an architecture dropdown.

10 years agoNo need for run-time configuration, add minimal compile-time
Ingo Schwarze [Sat, 12 Jul 2014 18:32:47 +0000 (18:32 +0000)]
No need for run-time configuration, add minimal compile-time
configuration facilities, just two paths and two HTML strings.
Show the title on all pages, not just the index page.

10 years agoSimplify: Delete 74 lines of code including one enum type, one
Ingo Schwarze [Sat, 12 Jul 2014 17:21:45 +0000 (17:21 +0000)]
Simplify: Delete 74 lines of code including one enum type, one
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.

10 years agoStart fixing issues that beck@ helped find:
Ingo Schwarze [Sat, 12 Jul 2014 16:14:35 +0000 (16:14 +0000)]
Start fixing issues that beck@ helped find:

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.

10 years agoFix whatis(1) to correctly match words instead of any substrings.
Ingo Schwarze [Sat, 12 Jul 2014 14:00:25 +0000 (14:00 +0000)]
Fix whatis(1) to correctly match words instead of any substrings.
While here, also provide an internal mode (MANSEARCH_MAN) to match
complete names, to be used by man.cgi(8).

10 years agofix the two manual links on the index page
Ingo Schwarze [Sat, 12 Jul 2014 01:55:30 +0000 (01:55 +0000)]
fix the two manual links on the index page

10 years agomerge OpenBSD rev. 1.3 by tedu@:
Ingo Schwarze [Fri, 11 Jul 2014 22:27:35 +0000 (22:27 +0000)]
merge OpenBSD rev. 1.3 by tedu@:
make http decode linear time.
also remove a redundant null check.

10 years agomerge OpenBSD rev. 1.2 by tedu@:
Ingo Schwarze [Fri, 11 Jul 2014 22:25:44 +0000 (22:25 +0000)]
merge OpenBSD rev. 1.2 by tedu@:
http headers must end lines with CRLF.

10 years agoadd HISTORY section
Ingo Schwarze [Fri, 11 Jul 2014 21:30:52 +0000 (21:30 +0000)]
add HISTORY section

10 years agoLink to the new man.cgi(8) manual, now that we have it! :-)
Ingo Schwarze [Thu, 10 Jul 2014 00:52:50 +0000 (00:52 +0000)]
Link to the new man.cgi(8) manual, now that we have it!   :-)
While here, s/satisfy/match/ when talking about queries.

10 years agoFull rewrite of the man.cgi(8) manual.
Ingo Schwarze [Thu, 10 Jul 2014 00:31:10 +0000 (00:31 +0000)]
Full rewrite of the man.cgi(8) manual.

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).

10 years agosome sugar for the index page
Ingo Schwarze [Wed, 9 Jul 2014 17:03:07 +0000 (17:03 +0000)]
some sugar for the index page

10 years agoClean up error reporting:
Ingo Schwarze [Wed, 9 Jul 2014 16:23:01 +0000 (16:23 +0000)]
Clean up error reporting:
* 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.