| CGIPARSE(8) | DACS Web Services and CGI | CGIPARSE(8) |
cgiparse — CGI parameter parsing utility
cgiparse [mode] [-enc
{ none | url | mime | dacs }] [-in filename] [-checkdup] [-d] [-duperror]
[-nodups] [-nonewline] [-qs query-string] [-copy filename] [[-n name filename]...]
This program is part of the DACS suite. It is a stand-alone program that neither accepts the usual DACS command line options (dacsoptions) nor accesses any DACS configuration files.
This utility is used by web-based scripts (shell scripts in particular)
to obtain their CGI parameters,
which can be obtained from a URI's
query component or in an encoded entity-body
read from the standard input (as with the POST method).
The
form
content types
application/x-www-form-urlencoded and
multipart/form-data are both understood.
The program has several different modes of operation, one of which may be specified by the first command line argument.
cgiparse combines query parameters
found in the QUERY_STRING environment variable with
parameters found in the message body it reads from the standard input.
RFC 3875
states (S4.1.7) that the query string value is case-sensitive.
Duplicate parameter names are allowed by default;
see -nodups and -duperror,
which override duplicate handling described below.
The mode may be exactly
one of the following:
-arg variable-nameEmit the value of the CGI parameter
variable-name, then exit.
If there is no such parameter, the exit status will be
1 instead of 0.
If more than one instance of variable-name
is present, only one will be considered.
-checkdupCheck if any parameter name occurs more than once,
then terminate.
If a duplicate is found, the exit status will be
1, otherwise 0.
-targ variable-nameTest if the CGI parameter
variable-name exists.
If there is no such parameter, the exit status will be
1, otherwise it will be 0.
-htmlEmit an HTML document that lists the CGI parameter names and their values. All instances of duplicate parameter names are output.
-oneEmit a listing of the CGI parameter values (without the names). All parameter values are output, including those associated with duplicate parameter names.
-sh--shellEmit CGI parameters as a single line in the format:
variable-name='variable-value'; [...]
It is an error if any
variable-name or
variable-value is syntactically unsuitable for
this format.
The returned string can be used as the argument to
eval to set the CGI parameters
as shell variables.
All parameters are output, including duplicates,
in which case a variable will be assigned the value from the parameter instance
that happens to appear last in the list.
-textLike -html except emit text.
This is the default.
In this mode,
the program's stdout is usually written to a file.
Each line of the file has the format:
variable-namevariable-value
A space separates the name from the corresponding value.
The file is typically read by a script to obtain the parameters,
or cgiparse can be run with the
-in flag to retrieve a parameter.
All instances of duplicate parameter names are output.
--versionPrint version information to stderr and exit.
Additionally, cgiparse recognizes these options and modifiers:
[-enc
{ url | mime | dacs | none }]
If writing the parsed CGI parameters
(-text), encode the parameter value using the specified
method:
urlSelects URL encoding.
mimeSelects MIME base-64 encoding.
dacsSelects DACS base-64 encoding.
noneIndicates that no encoding is performed (use this only when you are sure this cannot cause a problem).
For details about these encodings, please see
dacs.exprs(5).
The default is none.
If reading the parsed CGI parameters
(-in),
decode the parameter values using the specified method.
The default is none, which means that no decoding
is performed; if the parameters were encoded,
they will be returned in that encoding, but other than this case
the decoding method must match the encoding method previously used
or an error is likely to occur.
-qs query-stringInstead of using the environment variable
QUERY_STRING to get a query component,
use query-string.
-nonewlineWith -arg,
do not emit a newline after printing a parameter value.
-nodupsIf a duplicate parameter name is read, all but one (arbitrary) instance will be discarded.
-duperrorIf a duplicate parameter name is read, processing terminates immediately.
-dEnable debugging output.
-copy filenameAppend the input stream to filename.
This can be useful for debugging purposes.
-in filenameInstead of parsing CGI parameters,
read variable name/value pairs
(in the format produced by the -text flag)
from filename.
If filename is "-",
stdin is read.
-n name filenameIf parsing succeeds, and there is a MIME
body part with a name exactly matching name, then:
if the content disposition is multipart/form-data,
write the content as quoted-printable text to
filename;
if the content disposition is base64,
write the decoded content to filename;
otherwise the content is written verbatim
to filename.
If the output file exists it is truncated.
The following shell script demonstrates one way of using cgiparse.
#! /bin/sh
tmpfile=/tmp/cgiparse.$$
cgiparse > ${tmpfile}
chmod 0600 ${tmpfile}
echo "Context-Type: text/plain"
echo ""
done=
while [ "${done}x" = x ]
do
a=
b=
read a b
if [ $? = 1 ]
then
done=1
break
else
echo "Arg: ${a}"
echo "Is: ${b}"
fi
done < ${tmpfile}
rm -f ${tmpfile}
exit 0
The following code fragment uses cgiparse to save and then look up its CGI parameters:
#! /bin/sh
tmpfile=/tmp/cgiparse.$$
trap 'rm -f ${tmpfile}; exit 1' EXIT 1 2 3 13 15
cgiparse -enc mime > ${tmpfile}
chmod 0600 ${tmpfile}
mode=`cgiparse -in ${tmpfile} -enc mime -arg MODE`
target=`cgiparse -in ${tmpfile} -enc mime -arg TARGET`
The following script will
print "1 2 3"
to its standard output:
#! /bin/sh args=`cgiparse -sh -qs "a=1&b=2&c=3"` eval "$args" echo "$a $b $c"
There do not appear to be any official recommendations concerning
how to handle apparently "malformed" CGI query strings
that do not look like a sequence of
pairs.
The parsing routines that cgiparse uses
will flag an error if they see strings containing a component like
"name=value=foo", for example, although
"foo=" is fine.
The manner in which duplicate CGI parameters is handled is not standardized and context-specific. cgiparse could do a little better in this respect.
RFC 3875, RFC 3986, The WWW Common Gateway Interface, Version 1.2, HTML 4.01 Specification, dacs_prenv(8)
Copyright © 2003-2014 Distributed Systems Software.
See the
LICENSE
file that accompanies the distribution
for licensing information.
| DACS Version 1.4.40 | 1-Feb-2018 | CGIPARSE(8) |
| Table of Contents | ![]() |
Font:
|
−− | Set | ++ |
$Id: cgiparse.8.xml 2742 2014-12-03 18:39:39Z brachman $