[BACK]Return to man.cgi.8 CVS log [TXT][DIR] Up to [cvsweb.bsd.lv] / mandoc

Annotation of mandoc/man.cgi.8, Revision 1.11

1.11    ! schwarze    1: .\"     $Id: man.cgi.8,v 1.10 2014/08/22 15:49:50 schwarze Exp $
1.1       schwarze    2: .\"
                      3: .\" Copyright (c) 2014 Ingo Schwarze <schwarze@openbsd.org>
                      4: .\"
                      5: .\" Permission to use, copy, modify, and distribute this software for any
                      6: .\" purpose with or without fee is hereby granted, provided that the above
                      7: .\" copyright notice and this permission notice appear in all copies.
                      8: .\"
                      9: .\" THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
                     10: .\" WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
                     11: .\" MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
                     12: .\" ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
                     13: .\" WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
                     14: .\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
                     15: .\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
                     16: .\"
1.11    ! schwarze   17: .Dd $Mdocdate: August 22 2014 $
1.1       schwarze   18: .Dt MAN.CGI 8
                     19: .Os
                     20: .Sh NAME
                     21: .Nm man.cgi
                     22: .Nd CGI program to search and display manual pages
                     23: .Sh DESCRIPTION
                     24: The
                     25: .Nm
                     26: CGI program searches for manual pages on a WWW server
                     27: and displays them to HTTP clients,
                     28: providing functionality equivalent to the
                     29: .Xr apropos 1
                     30: and
                     31: .Xr man 1
                     32: utilities.
                     33: It can use multiple manual trees in parallel.
                     34: .Ss HTML search interface
                     35: At the top of each generated HTML page,
                     36: .Nm
                     37: displays a search form containing these elements:
                     38: .Bl -enum
                     39: .It
1.4       schwarze   40: An input box for search queries, expecting
                     41: either a name of a manual page or an
1.1       schwarze   42: .Ar expression
                     43: using the syntax described in the
                     44: .Xr apropos 1
                     45: manual; filling this in is required for each search.
1.11    ! schwarze   46: .Pp
        !            47: The expression is broken into words at whitespace.
        !            48: Whitespace characters and backslashes can be escaped
        !            49: by prepending a backslash.
        !            50: The effect of prepending a backslash to another character is undefined;
        !            51: in the current implementation, it has no effect.
1.1       schwarze   52: .It
1.4       schwarze   53: A
                     54: .Dq Submit
                     55: button to send a search request from the client to the server.
                     56: .It
                     57: A
                     58: .Dq Reset
                     59: button to undo any changes to the input boxes and the dropdown menus
                     60: and reset them to the values contained in the
                     61: .Ev QUERY_STRING .
                     62: .It
                     63: Radio buttons to select pages either by name like in
                     64: .Xr man 1
                     65: or using
                     66: .Xr apropos 1
                     67: queries.
                     68: .It
                     69: A dropdown menu to optionally select a manual section.
1.1       schwarze   70: If one is provided, it has the same effect as the
1.4       schwarze   71: .Xr man 1
                     72: and
1.1       schwarze   73: .Xr apropos 1
                     74: .Fl s
                     75: option.
                     76: Otherwise, pages from all sections are shown.
                     77: .It
1.4       schwarze   78: A dropdown menu to optionally select an architecture.
1.1       schwarze   79: If one is provided, it has the same effect as the
1.4       schwarze   80: .Xr man 1
                     81: and
1.1       schwarze   82: .Xr apropos 1
                     83: .Fl S
                     84: option.
                     85: By default, pages for all architectures are shown.
                     86: .It
                     87: A dropdown menu to select a manual tree.
                     88: If the configuration file
                     89: .Pa /var/www/man/manpath.conf
                     90: contains only one manpath, the dropdown menu is not shown.
                     91: By default, the first manpath given in the file is used.
                     92: .El
                     93: .Ss Program output
                     94: The
                     95: .Nm
                     96: program generates five kinds of output pages:
                     97: .Bl -tag -width Ds
                     98: .It The index page.
                     99: This is returned when calling
                    100: .Nm
                    101: without
                    102: .Ev PATH_INFO
                    103: and without a
                    104: .Ev QUERY_STRING .
                    105: It serves as a starting point for using the program
                    106: and shows the search form only.
                    107: .It A list page.
                    108: Lists are returned when searches match more than one manual page.
                    109: The first column shows the names and section numbers of manuals
                    110: as clickable links.
                    111: The second column shows the one-line descriptions of the manuals.
                    112: .It A manual page.
                    113: This output format is used when a search matches exactly one
                    114: manual page, or when a link on a list page or an
                    115: .Ic \&Xr
                    116: link on another manual page is followed.
                    117: .It A no-result page.
                    118: This is shown when a search request returns no results -
                    119: eiher because it violates the query syntax, or because
                    120: the search does not match any manual pages.
                    121: .It \&An error page.
                    122: This cannot happen by merely clicking the
                    123: .Dq Search
                    124: button, but only by manually entering an invalid URI.
                    125: It does not show the search form, but only an error message
                    126: and a link back to the index page.
                    127: .El
                    128: .Ss Setup
                    129: For each manual tree, create one first-level subdirectory below
                    130: .Pa /var/www/man .
                    131: The name of one of these directories is called a
                    132: .Dq manpath
                    133: in the context of
                    134: .Nm .
                    135: Create a single ASCII text file
                    136: .Pa /var/www/man/manpath.conf
                    137: containing the names of these directories, one per line.
                    138: The directory given first is used as the default manpath.
                    139: .Pp
                    140: Inside each of these directories, use the same directory and file
                    141: structure as found below
                    142: .Pa /usr/share/man ,
                    143: that is, second-level subdirectories
                    144: .Pa /var/www/man/*/man1 , /var/www/man/*/man2
                    145: etc. containing source
                    146: .Xr mdoc 7
                    147: and
                    148: .Xr man 7
                    149: manuals with file name extensions matching the section numbers,
                    150: second-level subdirectories
                    151: .Pa /var/www/man/*/cat1 , /var/www/man/*/cat2
                    152: etc. containing preformatted manuals with the file name extension
                    153: .Sq 0 ,
                    154: and optional third-level subdirectories for architectures.
                    155: Use
                    156: .Xr makewhatis 8
                    157: to create a
                    158: .Xr mandoc.db 5
                    159: database inside each manpath.
                    160: .Pp
                    161: Configure your web server to execute CGI programs located in
                    162: .Pa /cgi-bin .
                    163: When using
                    164: .Xr nginx 8 ,
                    165: the
                    166: .Xr slowcgi 8
                    167: proxy daemon is needed to translate FastCGI requests to plain old CGI.
1.6       schwarze  168: .Pp
                    169: To compile
                    170: .Nm ,
                    171: first copy
                    172: .Pa cgi.h.example
                    173: to
                    174: .Pa cgi.h
                    175: and edit it according to your needs.
                    176: It contains the following compile-time definitions:
                    177: .Bl -tag -width Ds
                    178: .It Ev COMPAT_OLDURI
                    179: Only useful for running on www.openbsd.org to deal with old URIs containing
                    180: .Qq "manpath=OpenBSD "
                    181: where the blank character has to be translated to a hyphen.
                    182: When compiling for other sites, this definition can be deleted.
                    183: .It Ev CSS_DIR
                    184: An optional path to the directory containing the CSS files,
                    185: to be specified relative to the server's document root,
                    186: and to be specified without a trailing slash.
                    187: When not specified, the CSS files
                    188: are assumed to be in the document root.
                    189: This is used in generated HTML code.
                    190: .It Ev CUSTOMIZE_BEGIN
                    191: A HTML string to be inserted right after opening the
                    192: .Aq BODY
                    193: element.
                    194: .It Ev CUSTOMIZE_TITLE
                    195: An ASCII string to be used for the HTML
                    196: .Aq TITLE
                    197: element.
1.8       schwarze  198: .It Ev HTTP_HOST
                    199: The FQDN of the (possibly virtual) host the HTTP server is running on.
                    200: This is used for
                    201: .Ic Location:
                    202: headers in HTTP 303 responses.
1.6       schwarze  203: .It Ev MAN_DIR
                    204: A path to the
                    205: .Nm
                    206: data directory to be used instead of
                    207: .Pa /var/www/man ,
                    208: relative to the web server
                    209: .Xr chroot 2
                    210: directory, to be specified without a trailing slash.
                    211: This is prepended to the manpath when opening
                    212: .Xr mandoc.db 5
                    213: and manual page files.
                    214: .El
                    215: .Pp
                    216: After editing
                    217: .Pa cgi.h ,
                    218: run
                    219: .Pp
                    220: .Dl make man.cgi
                    221: .Pp
                    222: and copy the files to the proper locations.
                    223: Reading the
                    224: .Cm installcgi
                    225: target in the
                    226: .Pa Makefile
                    227: can help with that, but do not run it without carefully checking it
                    228: because the directory layouts of web servers vary greatly.
1.1       schwarze  229: .Ss URI interface
                    230: .Nm
                    231: uniform resource identifiers are not needed for interactive use,
                    232: but can be useful for deep linking.
                    233: They consist of:
                    234: .Bl -enum
                    235: .It
                    236: The
                    237: .Cm http://
                    238: protocol specifier.
                    239: .It
                    240: The host name and a following slash.
                    241: .It
                    242: The path to the program, normally
                    243: .Pa cgi-bin/man.cgi/ .
                    244: .It
1.4       schwarze  245: To show a single page, a slash, the manpath, another slash,
1.1       schwarze  246: and the name of the requested file, for example
                    247: .Pa /OpenBSD-current/man1/mandoc.1 .
                    248: .It
1.4       schwarze  249: For searches, a query string starting with a question mark
1.1       schwarze  250: and consisting of
                    251: .Ar key Ns = Ns Ar value
                    252: pairs, separated by ampersands, for example
1.4       schwarze  253: .Pa ?manpath=OpenBSD-current&query=mandoc .
1.1       schwarze  254: Supported keys are
                    255: .Cm manpath ,
1.4       schwarze  256: .Cm query ,
1.1       schwarze  257: .Cm sec ,
                    258: .Cm arch ,
                    259: corresponding to
                    260: .Xr apropos 1
                    261: .Fl M ,
                    262: .Ar expression ,
                    263: .Fl s ,
                    264: .Fl S ,
1.4       schwarze  265: respectively, and
                    266: .Cm apropos ,
                    267: which is a boolean parameter to select or deselect the
                    268: .Xr apropos 1
                    269: query mode.
1.1       schwarze  270: For backward compatibility with the traditional
                    271: .Nm ,
1.4       schwarze  272: .Cm sektion
1.1       schwarze  273: is supported as an alias for
                    274: .Cm sec .
                    275: .El
1.9       schwarze  276: .Ss Restricted character set
                    277: For security reasons, in particular to prevent cross site scripting
                    278: attacks, some strings used by
                    279: .Nm
                    280: can only contain the following characters:
                    281: .Pp
                    282: .Bl -dash -compact -offset indent
                    283: .It
                    284: lower case and upper case ASCII letters
                    285: .It
                    286: the ten decimal digits
                    287: .It
                    288: the dash
                    289: .Pq Sq -
                    290: .It
                    291: the dot
                    292: .Pq Sq \&.
                    293: .It
                    294: the slash
                    295: .Pq Sq /
                    296: .It
                    297: the underscore
                    298: .Pq Sq _
                    299: .El
                    300: .Pp
                    301: In particular, this applies to the
                    302: .Ev SCRIPT_NAME ,
                    303: to all manpaths, and to all architecture names.
1.1       schwarze  304: .Sh ENVIRONMENT
                    305: The web server may pass the following CGI variables to
                    306: .Nm :
                    307: .Bl -tag -width Ds
                    308: .It Ev PATH_INFO
                    309: The final part of the URI path passed from the client to the server,
                    310: starting after the
                    311: .Ev SCRIPT_NAME
                    312: and ending before the
                    313: .Ev QUERY_STRING .
                    314: It is used by the
                    315: .Cm show
1.10      schwarze  316: page to acquire the manpath and filename it needs.
1.1       schwarze  317: .It Ev QUERY_STRING
                    318: The HTTP query string passed from the client to the server.
                    319: It is the final part of the URI, after the question mark.
                    320: It is used by the
                    321: .Cm search
                    322: page to acquire the named parameters it needs.
                    323: .It Ev SCRIPT_NAME
                    324: The path to the
                    325: .Nm
                    326: binary relative to the server root, usually
                    327: .Pa /cgi-bin/man.cgi .
                    328: This is used for generating URIs to be embedded
                    329: in generated HTML code and HTTP headers.
1.9       schwarze  330: If this contains any character not contained in the
                    331: .Sx Restricted character set ,
                    332: .Nm
                    333: reports an internal server error and exits without doing anything.
1.1       schwarze  334: .El
                    335: .Sh FILES
                    336: .Bl -tag -width Ds
                    337: .It Pa /var/www
                    338: Default web server
                    339: .Xr chroot 2
                    340: directory.
                    341: All the following paths are specified relative to this directory.
                    342: .It Pa /cgi-bin/man.cgi
                    343: The path to the
                    344: .Nm
                    345: program relative to the server root.
                    346: Can be overridden by
                    347: .Ev SCRIPT_NAME .
                    348: .It Pa /htdocs
                    349: The path to the server document root relative to the server root.
                    350: This is part of the web server configuration and not specific to
                    351: .Nm .
                    352: .It Pa /htdocs/man-cgi.css
                    353: A style sheet for general
                    354: .Nm
                    355: styling, referenced from each generated HTML page.
                    356: .It Pa /htdocs/man.css
                    357: A style sheet for
                    358: .Xr mandoc 1
                    359: HTML styling, referenced from each generated HTML page after
                    360: .Pa man-cgi.css .
                    361: .It Pa /man
                    362: Default
                    363: .Nm
                    364: data directory containing all the manual trees.
                    365: Can be overridden by
                    366: .Ev MAN_DIR .
1.5       schwarze  367: .It Pa /man/mandoc/man1/apropos.1 , /man/mandoc/man8/man.cgi.8
                    368: Manual pages documenting
                    369: .Nm
                    370: itself, linked from the index page.
1.1       schwarze  371: .It Pa /man/manpath.conf
                    372: The list of available manpaths, one per line.
1.9       schwarze  373: If any of the lines in this file contains a slash
                    374: .Pq Sq /
                    375: or any character not contained in the
                    376: .Sx Restricted character set ,
                    377: .Nm
                    378: reports an internal server error and exits without doing anything.
1.1       schwarze  379: .It Pa /man/OpenBSD-current/man1/mandoc.1
                    380: An example
                    381: .Xr mdoc 7
                    382: source file located below the
                    383: .Dq OpenBSD-current
                    384: manpath.
1.4       schwarze  385: .El
1.1       schwarze  386: .Sh COMPATIBILITY
                    387: The
                    388: .Nm
                    389: CGI program is call-compatible with queries from the traditional
                    390: .Pa man.cgi
                    391: script by Wolfram Schneider.
1.4       schwarze  392: However, the output may not be quite the same.
1.1       schwarze  393: .Sh SEE ALSO
                    394: .Xr apropos 1 ,
                    395: .Xr mandoc.db 5 ,
                    396: .Xr makewhatis 8 ,
                    397: .Xr slowcgi 8
1.2       schwarze  398: .Sh HISTORY
                    399: A version of
                    400: .Nm
                    401: based on
                    402: .Xr mandoc 1
                    403: first appeared in mdocml-1.12.1 (March 2012).
                    404: The current SQLite3-based version first appeared in
                    405: .Ox 5.6 .
1.1       schwarze  406: .Sh AUTHORS
                    407: .An -nosplit
                    408: The
                    409: .Nm
                    410: program was written by
                    411: .An Kristaps Dzonsons Aq Mt kristaps@bsd.lv
                    412: and ported to the SQLite3-based
                    413: .Xr mandoc.db 5
                    414: backend by
                    415: .An Ingo Schwarze Aq Mt schwarze@openbsd.org .

CVSweb