]> git.cameronkatri.com Git - mandoc.git/log
mandoc.git
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.

10 years agonamespace cleanups:
Ingo Schwarze [Wed, 9 Jul 2014 14:18:59 +0000 (14:18 +0000)]
namespace cleanups:
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

10 years agoremove obsolete __sun includes
Ingo Schwarze [Wed, 9 Jul 2014 12:09:04 +0000 (12:09 +0000)]
remove obsolete __sun includes
and improve some whitespace and comments

10 years agoset a reasonable default for .Os
Ingo Schwarze [Wed, 9 Jul 2014 11:34:46 +0000 (11:34 +0000)]
set a reasonable default for .Os

10 years agomark defos as const; nobody needs to change it,
Ingo Schwarze [Wed, 9 Jul 2014 11:31:43 +0000 (11:31 +0000)]
mark defos as const; nobody needs to change it,
and it is occasionally useful to be able to pass literal strings

10 years agodelete forgotten, obsolete rew_warn() prototype
Ingo Schwarze [Wed, 9 Jul 2014 11:28:26 +0000 (11:28 +0000)]
delete forgotten, obsolete rew_warn() prototype

10 years agooops, forgot to trim the newline character
Ingo Schwarze [Wed, 9 Jul 2014 09:27:01 +0000 (09:27 +0000)]
oops, forgot to trim the newline character

10 years agoSimplify pathgen() even more.
Ingo Schwarze [Wed, 9 Jul 2014 09:19:03 +0000 (09:19 +0000)]
Simplify pathgen() even more.
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).

10 years agoinclude manpath= when printing queries, and omit empty parameters
Ingo Schwarze [Wed, 9 Jul 2014 08:53:28 +0000 (08:53 +0000)]
include manpath= when printing queries, and omit empty parameters

10 years agoThis one needs "config.h", too.
Ingo Schwarze [Wed, 9 Jul 2014 08:20:34 +0000 (08:20 +0000)]
This one needs "config.h", too.

10 years agoSwitch over man.cgi to SQLite. While here:
Ingo Schwarze [Wed, 9 Jul 2014 07:30:47 +0000 (07:30 +0000)]
Switch over man.cgi to SQLite.  While here:
* 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.

10 years agoClean up ERROR messages related to document structure and macros:
Ingo Schwarze [Mon, 7 Jul 2014 21:36:20 +0000 (21:36 +0000)]
Clean up ERROR messages related to document structure and macros:
Hierarchical naming and mention macro names in messages.

10 years agoSimplify man_unscope(), removing 18 lines of code, that is,
Ingo Schwarze [Mon, 7 Jul 2014 19:18:15 +0000 (19:18 +0000)]
Simplify man_unscope(), removing 18 lines of code, that is,
removing one function argument, one function definition,
three function invocations and two pointless assert()s.
No functional change.

10 years agono need to delete any content from .Rs blocks,
Ingo Schwarze [Mon, 7 Jul 2014 16:12:20 +0000 (16:12 +0000)]
no need to delete any content from .Rs blocks,
and downgrade the related message from ERROR to WARNING

10 years agono need to skip content before first section header
Ingo Schwarze [Mon, 7 Jul 2014 15:03:43 +0000 (15:03 +0000)]
no need to skip content before first section header

10 years agoimplement .dei and .ami
Ingo Schwarze [Mon, 7 Jul 2014 11:35:06 +0000 (11:35 +0000)]
implement .dei and .ami

10 years agoClean up messages related to plain text and to escape sequences.
Ingo Schwarze [Sun, 6 Jul 2014 19:09:00 +0000 (19:09 +0000)]
Clean up messages related to plain text and to escape sequences.
* Mention invalid escape sequences and string names, and fallbacks.
* Hierarchical naming.

10 years agoAfter skipping an escape sequence with incomplete arguments,
Ingo Schwarze [Sun, 6 Jul 2014 18:51:13 +0000 (18:51 +0000)]
After skipping an escape sequence with incomplete arguments,
do not throw away the rest of the string to be rendered.

10 years agoFix expansion of escape sequences with incomplete arguments.
Ingo Schwarze [Sun, 6 Jul 2014 18:46:55 +0000 (18:46 +0000)]
Fix expansion of escape sequences with incomplete arguments.
* For \* and \n, discard the incomplete arg, expand to empty string.
* For \B, discard the incomplete arg, expand to the digit 0.
* For \w, use the incomplete arg (behaviour unchanged).

10 years agoFix handling of escape sequences taking numeric arguments.
Ingo Schwarze [Sun, 6 Jul 2014 18:37:34 +0000 (18:37 +0000)]
Fix handling of escape sequences taking numeric arguments.
* Repair detection of invalid delimiters.
* Discard the invalid delimiter together with the invalid sequence.

Note to self: In general, strchr("\0...", c) is a thoroughly bad idea.

10 years agoCleanup with respect to bad macro arguments.
Ingo Schwarze [Sat, 5 Jul 2014 12:34:17 +0000 (12:34 +0000)]
Cleanup with respect to bad macro arguments.
* Fix .Sm with invalid arg: move arg out and toggle mode.
* Promote "unknown standard" from WARNING to ERROR, it loses information.
* Delete MANDOCERR_BADWIDTH, it would only indicate a mandoc(1) bug.
* Do not report MANDOCERR_BL_LATETYPE when there is no type at all.
* Mention macro names, arguments and fallbacks.

10 years agoCleanup regarding -offset and -width:
Ingo Schwarze [Sat, 5 Jul 2014 01:12:20 +0000 (01:12 +0000)]
Cleanup regarding -offset and -width:
* Bugfix: Last one wins, not first one.
* Fix .Bl -width without argument: it means 0n, so do not ignore it.
* Report macro names, argument names and fallbacks in related messages.
* Simplify: Garbage collect auxiliary variables in pre_bd() and pre_bl().

10 years agoClean up messages regarding excess arguments:
Ingo Schwarze [Fri, 4 Jul 2014 16:12:08 +0000 (16:12 +0000)]
Clean up messages regarding excess arguments:
* Downgrade ".Bf -emphasis Em" from FATAL to WARNING.
* Mention the macros, the arguments, and the fallbacks.
* Hierarchical naming.

10 years agoClean up messages related to missing arguments.
Ingo Schwarze [Fri, 4 Jul 2014 01:50:06 +0000 (01:50 +0000)]
Clean up messages related to missing arguments.
* Do not warn about empty -column cells, they seem valid to me.
* Downgrade empty item and missing -std from ERROR to WARNING.
* Hierarchical naming.
* Descriptive, not imperative style.
* Mention macro names, argument names, and fallbacks.
* Garbage collect some unreachable code in post_it().

10 years agoFix formatting of empty .Bl -inset item heads.
Ingo Schwarze [Thu, 3 Jul 2014 23:24:56 +0000 (23:24 +0000)]
Fix formatting of empty .Bl -inset item heads.
Downgrade empty item heads from ERROR to WARNING.
Show the list type in the error message.
Choose better variable names for nodes in post_it().

10 years agoMANDOCERR_NOARGS reported three completely unrelated classes of problems.
Ingo Schwarze [Thu, 3 Jul 2014 21:23:54 +0000 (21:23 +0000)]
MANDOCERR_NOARGS reported three completely unrelated classes of problems.
Split the roff(7) parts out of it and report the request names for these cases.

10 years agoImprove and test the messages about empty macros,
Ingo Schwarze [Wed, 2 Jul 2014 20:19:11 +0000 (20:19 +0000)]
Improve and test the messages about empty macros,
in particular reporting the macro names involved.

10 years agoWhen .Sm is called without an argument, groff toggles the spacing mode,
Ingo Schwarze [Wed, 2 Jul 2014 19:55:10 +0000 (19:55 +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 agoDisentangle the MANDOCERR_CHILD message, which reported three
Ingo Schwarze [Wed, 2 Jul 2014 13:10:45 +0000 (13:10 +0000)]
Disentangle the MANDOCERR_CHILD message, which reported three
completely different things, into three distinct messages.
Also mention the macro names we are talking about.

10 years agoClean up warnings related to macros and nesting.
Ingo Schwarze [Wed, 2 Jul 2014 11:43:20 +0000 (11:43 +0000)]
Clean up warnings related to macros and nesting.
* Hierarchical naming of enum mandocerr items.
* Improve the wording to make it comprehensible.
* Mention the offending macro.
* Garbage collect one chunk of ancient, long unreachable code.

10 years agoFix the column numbers associated with in_line_argn() macros;
Ingo Schwarze [Wed, 2 Jul 2014 08:21:39 +0000 (08:21 +0000)]
Fix the column numbers associated with in_line_argn() macros;
this bug is more than four years old, introduced by kristaps@
in mdocml.bsd.lv rev. 1.46, March 30, 2010.

10 years agoChange column display in -Ttree to be 1-based instead of 0-based
Ingo Schwarze [Wed, 2 Jul 2014 07:10:38 +0000 (07:10 +0000)]
Change column display in -Ttree to be 1-based instead of 0-based
such that column numbers agree between messages and -Ttree.

10 years agoImprove "skipping paragraph macro" messages,
Ingo Schwarze [Wed, 2 Jul 2014 05:52:24 +0000 (05:52 +0000)]
Improve "skipping paragraph macro" messages,
showing which macro was skipped and before or after what.

10 years agoImplement the obsolete macros .En .Es .Fr .Ot for backward compatibility,
Ingo Schwarze [Wed, 2 Jul 2014 03:48:07 +0000 (03:48 +0000)]
Implement the obsolete macros .En .Es .Fr .Ot for backward compatibility,
since this is hardly more complicated than explicitly ignoring them
as we did in the past.  Of course, do not use them!

10 years agoClean up the warnings related to document structure.
Ingo Schwarze [Tue, 1 Jul 2014 22:37:15 +0000 (22:37 +0000)]
Clean up the warnings related to document structure.
* Hierarchical naming of the related enum mandocerr items.
* Mention the offending macro, section title, or string.
While here, improve some wordings:
* Descriptive instead of imperative style.
* Uniform style for "missing" and "skipping".
* Where applicable, mention the fallback used.

10 years agoThe previous commit to this file broke the control flow keywords \{ and \}
Ingo Schwarze [Tue, 1 Jul 2014 00:32:29 +0000 (00:32 +0000)]
The previous commit to this file broke the control flow keywords \{ and \}
when they immediately follow a request or macro name, without intervening
whitespace.  Minimal fix.

The lesson learnt here is that, despite their appearance, \{ and \} are
not escape sequences, so never skip them when parsing for names.

10 years agogarbage collect two unused enum mandocerr items
Ingo Schwarze [Mon, 30 Jun 2014 23:45:07 +0000 (23:45 +0000)]
garbage collect two unused enum mandocerr items
and fix a couple of comments while here

10 years agoUse the freshly improved roff_getname() function
Ingo Schwarze [Sun, 29 Jun 2014 23:26:00 +0000 (23:26 +0000)]
Use the freshly improved roff_getname() function
for the main roff request parsing routine, roff_parse().

In request or macro invocations, escape sequences now terminate the
request or macro name; what follows is treated as arguments.  Besides,
the names of user-defined macros can now contain backslashes (eek!).

10 years agoUse the freshly improved roff_getname() function
Ingo Schwarze [Sun, 29 Jun 2014 22:38:47 +0000 (22:38 +0000)]
Use the freshly improved roff_getname() function
for the .de parsing routine, roff_block(),
to correctly handle names terminated by escape sequences.
Besides, this saves us 20 lines of code.

10 years agoMajor roff_getname() cleanup.
Ingo Schwarze [Sun, 29 Jun 2014 22:14:10 +0000 (22:14 +0000)]
Major roff_getname() cleanup.
* Return the name even if it is terminated by an escape sequence, not a blank.
* Skip the full escape sequence using mandoc_escape(), not just the first byte.
* Make it non-destructive, return the length instead of writing a '\0'.
* Let .ds and .as cope with the above changes to the internal interface.
* Fix .rm and .rr to accept an escape sequence as the end of a name.
* Fix .nr and .rr to not set/delete a register with an empty name.

10 years agoBugfix in roff_setstrn():
Ingo Schwarze [Sun, 29 Jun 2014 21:20:31 +0000 (21:20 +0000)]
Bugfix in roff_setstrn():
Do not call strcmp() on an array of char that might not be NUL-terminated.

10 years agoImprove messages related to the roff(7) .so request.
Ingo Schwarze [Wed, 25 Jun 2014 00:20:19 +0000 (00:20 +0000)]
Improve messages related to the roff(7) .so request.

In all these messages, show the filename argument that was passed
to the .so request.

In case of failure, show an additional message reporting the file
and the line number where the failing request was found.
The existing message reporting the reason for the failure -
for example, "Permission denied" - is left in place, unchanged.

Inspired by a question asked by Nick@ after he saw the
confusing old messages that used to be emitted in this area.

10 years agoDeprecate .Tn and .Ux, and make it clearer that .Bt and .Ud are deprecated.
Ingo Schwarze [Tue, 24 Jun 2014 21:43:08 +0000 (21:43 +0000)]
Deprecate .Tn and .Ux, and make it clearer that .Bt and .Ud are deprecated.
Do not use these macros in new documents, they provide no value.
Instead, usually no macro and no markup is needed at all.
Of course, they remain supported for compatibility with existing manuals.

Jason McIntyre (OpenBSD), Thomas Klausner (NetBSD) and
Franco Fichtner (DragonFly) are OK with this documentation change.

10 years agoBelow DIAGNOSTICS, document the SYSERR message level;
Ingo Schwarze [Mon, 23 Jun 2014 22:03:30 +0000 (22:03 +0000)]
Below DIAGNOSTICS, document the SYSERR message level;
jmc@ wondered what it meant and agrees with this patch.

10 years agoMinimal COMPATIBILITY cleanup:
Ingo Schwarze [Sun, 22 Jun 2014 17:07:06 +0000 (17:07 +0000)]
Minimal COMPATIBILITY cleanup:
* Mention that the list is incomplete.
* I implemented %C for groff -current, and it was accepted.
* Font family is \F, not \f.
* Escapes and scaling widths are documented in roff(7), not here.
* Quoting quotes by doubling them is now supported.

10 years agoMinimal cleanup of the COMPATIBILITY section:
Ingo Schwarze [Sun, 22 Jun 2014 16:39:45 +0000 (16:39 +0000)]
Minimal cleanup of the COMPATIBILITY section:
* Mention that the list is incomplete.
* Quoting quotes by doubling them is documented in the
Ossanna/Kernighan/Ritter Nroff/Troff User's Manual, Section 7.3.
* Our roff(7) manual documents handling of escape sequences;
besides, we partially support \w and \z now.
* Scaling widths are documented in roff(7) as well, and f is not \f.
* Negative arguments to .sp are handled now.

10 years agoReduce the verbosity of error messages caused by open(2) failures.
Ingo Schwarze [Sat, 21 Jun 2014 22:24:01 +0000 (22:24 +0000)]
Reduce the verbosity of error messages caused by open(2) failures.
Suggested by and ok jmc@.

10 years agoPrefix messages about bad command line options and arguments
Ingo Schwarze [Sat, 21 Jun 2014 16:18:25 +0000 (16:18 +0000)]
Prefix messages about bad command line options and arguments
with "mandoc: " or "makewhatis: ", respectively,
similar to what we already do for other messages.

10 years agoAs suggested by jmc@, only include line and column numbers into messages
Ingo Schwarze [Fri, 20 Jun 2014 23:02:31 +0000 (23:02 +0000)]
As suggested by jmc@, only include line and column numbers into messages
when they are meaningful, to avoid confusing stuff like this:
$ mandoc /dev/null
mandoc: /dev/null:0:1: FATAL: not a manual
Instead, just say:
mandoc: /dev/null: FATAL: not a manual

Another example this applies to is documents having a prologue,
but lacking a body.  Do not throw a FATAL error for these; instead,
issue a WARNING and show the empty document, in the man(7) case with
the same amount of blank lines as groff does.  Also downgrade mdoc(7)
documents having content before the first .Sh from FATAL to WARNING.

10 years agoStart systematic improvements of error reporting.
Ingo Schwarze [Fri, 20 Jun 2014 17:24:00 +0000 (17:24 +0000)]
Start systematic improvements of error reporting.
So far, this covers all WARNINGs related to the prologue.

1) hierarchical naming of MANDOCERR_* constants
2) mention the macro name in messages where that adds clarity
3) add one missing MANDOCERR_DATE_MISSING msg
4) fix the wording of one message related to the man(7) prologue

Started on the plane back from Ottawa.

10 years agoPrefix error messages from mandoc(1) with "mandoc: "
Ingo Schwarze [Fri, 20 Jun 2014 16:11:42 +0000 (16:11 +0000)]
Prefix error messages from mandoc(1) with "mandoc: "
just like almost all other utility programs do.
Suggested by nick@ who wondered where messages came from
when calling mandoc(1) from inside a Perl script.
ok jmc@ nick@

10 years agolet the build system cope with the recent ohash changes
Ingo Schwarze [Fri, 20 Jun 2014 02:55:49 +0000 (02:55 +0000)]
let the build system cope with the recent ohash changes

10 years agotake a note about pandoc
Ingo Schwarze [Fri, 20 Jun 2014 02:53:13 +0000 (02:53 +0000)]
take a note about pandoc

10 years agoMerge from OpenBSD - Marc Espie improved the ohash interface:
Ingo Schwarze [Fri, 20 Jun 2014 02:24:40 +0000 (02:24 +0000)]
Merge from OpenBSD - Marc Espie improved the ohash interface:
* rename the halloc callback to calloc, provide overflow protection
* rename the hfree callback to free, drop the useless size argument
* prevent integer overflows in ohash_resize

10 years agosync to OpenBSD:
Ingo Schwarze [Fri, 20 Jun 2014 02:10:05 +0000 (02:10 +0000)]
sync to OpenBSD:
whitespace and comment changes, no functional change

10 years agoMore tweaking of set_basedir().
Ingo Schwarze [Fri, 20 Jun 2014 01:21:48 +0000 (01:21 +0000)]
More tweaking of set_basedir().

1) Do not error out when getcwd(3) fails, only fail when inaccessibility
of the cwd prevents processing of relative paths given on the command line.

2) Do not uselessly call set_basedir() twice in a row.
While fts_read(3) in treescan() does cause the cwd to jump around,
fts_close(3) is always called at the end, putting us back
where we came from.  The -d/-u fallback code already relied on this.

3) Fix the man-root-dir indicator in say().

10 years agoSome simple set_basedir() cleanup; more to come.
Ingo Schwarze [Thu, 19 Jun 2014 00:45:37 +0000 (00:45 +0000)]
Some simple set_basedir() cleanup; more to come.

1) Refrain from calling set_basedir() in the -t case,
and do not attempt to strip anything from the file names in that case.
Testing individual files cannot reasonably have any notion of a base dir.

2) Remove the possibility of passing NULL to set_basedir().
It was dangerous because it was not idempotent, and it served no purpose
except closing a file descriptor right before exit(), which is pointless.
Besides, the file descriptor is likely to be removed completely, soon.

3) Make sure that /foobar isn't treated as a subdirectory of /foo;
this fixes a bug reported by espie@.

10 years agoMerge OpenBSD rev. 1.108 by sthen@; original commit message:
Ingo Schwarze [Wed, 18 Jun 2014 19:34:04 +0000 (19:34 +0000)]
Merge OpenBSD rev. 1.108 by sthen@; original commit message:
Don't display "unable to open mandoc.db" error messages (SQLITE_CANTOPEN)
in the code which opens mandocdb's sqlite database when updating/deleting
individual files (as used and only really useful for pkg_add/pkg_delete).

10 years agosome new things to do
Ingo Schwarze [Tue, 10 Jun 2014 21:19:57 +0000 (21:19 +0000)]
some new things to do

10 years agoRender roff escape sequences contained in manual page descriptions
Ingo Schwarze [Wed, 7 May 2014 16:19:03 +0000 (16:19 +0000)]
Render roff escape sequences contained in manual page descriptions
before putting them into the mpages table.
Issue found by bentley@ in OpenBSD::Getopt(3p).

10 years agoFix two memory leaks in makewhatis -n:
Ingo Schwarze [Wed, 7 May 2014 15:10:36 +0000 (15:10 +0000)]
Fix two memory leaks in makewhatis -n:
1. As found by nigel@, names_check() requires database access.
2. Do not leak names and strings in -n mode.

10 years agoDo not segfault in makewhatis -Q if the next .SH after .SH NAME
Ingo Schwarze [Wed, 7 May 2014 14:14:17 +0000 (14:14 +0000)]
Do not segfault in makewhatis -Q if the next .SH after .SH NAME
does not have any arguments.  Crash found by nigel@ in kermit(1).

10 years agoImprove error handling in dbopen(). If PRAGMA SQL statements fail,
Ingo Schwarze [Sun, 27 Apr 2014 23:08:56 +0000 (23:08 +0000)]
Improve error handling in dbopen().  If PRAGMA SQL statements fail,
report the error, close the database, and return failure from dbopen(),
such that the main program can recover and rebuild the database.

As noticed by stsp@, this can happen when database files are
accessible, but corrupt or in the wrong format, which will now
automatically be repaired.

Besides, use a safer idiom after sqlite3_open*() failure that also
handles out-of-memory situations correctly, and do not forget to
close the database after CREATE TABLE failure.

10 years agoOMRON used uppercase for the model names of their Motorola 88100 LUNA
Ingo Schwarze [Sun, 27 Apr 2014 22:42:15 +0000 (22:42 +0000)]
OMRON used uppercase for the model names of their Motorola 88100 LUNA
workstations, so show the kernel architecture names in uppercase
to the user, too.
Based on a patch from Kenji Aoyama@, thanks!

10 years agoFix a minor optimization i broke in rev. 1.163 on August 20, 2010:
Ingo Schwarze [Fri, 25 Apr 2014 14:11:30 +0000 (14:11 +0000)]
Fix a minor optimization i broke in rev. 1.163 on August 20, 2010:
Do not bother looking into the hash table when the length of the macro
already tells us it's invalid.  No functional change.
Noticed by jsg@, thanks!

10 years agoReduce the verbosity of makewhatis -t:
Ingo Schwarze [Fri, 25 Apr 2014 12:13:15 +0000 (12:13 +0000)]
Reduce the verbosity of makewhatis -t:
In the past, it always showed the title lines of the files processed.
Now, it only shows them when called with -D.
That is better because pkg_create calls makewhatis -t.
It is also more consistent with -D behaviour in non- -t modes.
Issue reported by ajacoutot@; ok espie@ ajacoutot@ jasper@.

10 years agoVarious Makefile improvements:
Ingo Schwarze [Thu, 24 Apr 2014 00:29:45 +0000 (00:29 +0000)]
Various Makefile improvements:
* Use sha256 rather than md5.
* Update .h dependencies for some objects.
* Provide `www' target to build everything needed for the web site.
* Move .SUFFIXES and .PHONY technicalities to the bottom.
* State Copyright and license, just for clarity.

10 years agomisplaced punctuation
Ingo Schwarze [Thu, 24 Apr 2014 00:28:19 +0000 (00:28 +0000)]
misplaced punctuation

10 years agoprototype for reallocarray()
Ingo Schwarze [Wed, 23 Apr 2014 23:29:10 +0000 (23:29 +0000)]
prototype for reallocarray()

10 years agoAudit malloc(3)/calloc(3)/realloc(3) usage.
Ingo Schwarze [Wed, 23 Apr 2014 21:40:47 +0000 (21:40 +0000)]
Audit malloc(3)/calloc(3)/realloc(3) usage.
First committed to wrong branch, sorry.

10 years agoAudit malloc(3)/calloc(3)/realloc(3) usage.
Ingo Schwarze [Wed, 23 Apr 2014 21:06:41 +0000 (21:06 +0000)]
Audit malloc(3)/calloc(3)/realloc(3) usage.
* Change eight reallocs to reallocarray to be safe from overflows.
* Change one malloc to reallocarray to be safe from overflows.
* Change one calloc to reallocarray, no zeroing needed.
* Change the order of arguments of three callocs (aesthetical).

10 years agoAudit strlcpy(3)/strlcat(3) usage:
Ingo Schwarze [Wed, 23 Apr 2014 19:09:16 +0000 (19:09 +0000)]
Audit strlcpy(3)/strlcat(3) usage:
* Add missing truncation checks to three calls.
* In four cases where we know that the distination buffer is large enough,
cast the return vailue to (void).

10 years agoespie@ suggests using SQL views
Ingo Schwarze [Wed, 23 Apr 2014 16:37:43 +0000 (16:37 +0000)]
espie@ suggests using SQL views