commit ee655e64d757e972d3fa3748b6dc4ade8a829035 from: Omar Polo date: Mon Feb 01 13:19:06 2021 UTC sync CGI section with actual implementation commit - 38f8a798b117968e9ab9fc3cf153c642da92bf92 commit + ee655e64d757e972d3fa3748b6dc4ade8a829035 blob - e315ba1c4aba8a65531fd4384d9fdf4e3dcf6510 blob + f74e287e159d569d8a3244d269eb5d0c1d18b367 --- gmid.1 +++ gmid.1 @@ -234,47 +234,58 @@ except .Ic cert , Ic key , Ic root , Ic location No and Ic cgi . .El .Sh CGI -When CGI scripts are enabled for a directory, a request for an -executable file will execute it and fed its output to the client. +When CGI scripts are enabled, a matching request for an executable +file will execute it and fed its output to the client. .Pp -The CGI scripts are executed in the root directory of the virtual -host, or in the served directory if run without config, and inherits +The CGI scripts are executed in the directory they reside and inherit the environment from .Nm with these additional variables set: -.Bl -tag -width 18m +.Bl -tag -width 24m .It Ev GATEWAY_INTERFACE -"CGI/1.1" +.Dq CGI/1.1 +.It Ev GEMINI_DOCUMENT_ROOT +The root directory of the virtual host. +.It Ev GEMINI_SCRIPT_FILENAME +Full path to the CGI script being executed. +.It Ev GEMINI_URL +The full IRI of the request. +.It Ev GEMINI_URL_PATH +The path of the request. +.It Ev PATH_INFO +The portion of the requested path that is derived from the the IRI +path hierarchy following the part that identifies the script itself. +Can be unset. +.It Ev PATH_TRANSLATED +Present if and only if +.Ev PATH_INFO +is set. +It represent the translation of the +.Ev PATH_INFO . +.Nm +builds this by appending the +.Ev PATH_INFO +to the virtual host directory root. +.It Ev QUERY_STRING +The decoded query string. +.It Ev REMOTE_ADDR , Ev REMOTE_HOST +Textual representation of the client IP. +.It Ev REQUEST_METHOD +This is present only for RFC3875 (CGI) compliance. +It's always set to the empty string. +.It Ev SCRIPT_NAME +The part of the +.Ev GEMINI_URL_PATH +that identifies the current CGI script. +.It Ev SERVER_NAME +The name of the server +.It Ev SERVER_PORT +The port the server is listening on. .It Ev SERVER_PROTOCOL -"GEMINI" +.Dq GEMINI .It Ev SERVER_SOFTWARE -"gmid" -.It Ev SERVER_PORT -"1965" -.It Ev SERVER_NAME -The vhost. -This variable is not available when operating without a configuration. -.It Ev SCRIPT_NAME -The (public) path to the script, e.g. -.Pa "/cgi-bin/example.cgi" -.It Ev SCRIPT_EXECUTABLE -The full path to the executable. -.It Ev REQUEST_URI -The user request (without the query parameters.) -.It Ev REQUEST_RELATIVE -The request relative to the script. -.It Ev QUERY_STRING -The query parameters. -.It Ev REMOTE_HOST -The remote IP address. -.It Ev REMOTE_ADDR -The remote IP address. -.It Ev DOCUMENT_ROOT -The root directory being served, the one provided with the -.Ar d -parameter to -.Nm -or the root directory of the virtual host. +The name and version of the server, i.e. +.Dq gmid/1.5 .It Ev AUTH_TYPE The string "Certificate" if the client used a certificate, otherwise unset. @@ -285,30 +296,10 @@ The is the issuer of the client certificate if provide unset. .It Ev TLS_CLIENT_HASH The hash of the client certificate if provided, otherwise unset. -The format is "ALGO:HASH". +The format is +.Dq ALGO:HASH . .El .Pp -Let's say you have a script in -.Pa /cgi-bin/script -and the user request is -.Pa /cgi-bin/script/foo/bar?quux . -Then -.Ev SCRIPT_NAME -will be -.Pa cgi-bin/script , -.Ev SCRIPT_EXECUTABLE -will be -.Pa $DOCUMENT_ROOT/cgi-bin/script , -.Ev REQUEST_URI -will be -.Pa cgi-bin/script/foo/bar , -.Ev REQUEST_RELATIVE -will be -.Pa foo/bar -and -.Ev QUERY_STRING -will be -.Ar quux . .Sh MIME To auto-detect the MIME type of the response .Nm