Files
strongswan-ext/doc/manpage.d/ipsec_optionsfrom.3.html
T
Martin Willi 997358a6c4 - import of strongswan-2.7.0
- applied patch for charon
2006-04-28 07:14:48 +00:00

276 lines
5.8 KiB
HTML

Content-type: text/html
<HTML><HEAD><TITLE>Manpage of IPSEC_OPTIONSFROM</TITLE>
</HEAD><BODY>
<H1>IPSEC_OPTIONSFROM</H1>
Section: C Library Functions (3)<BR>Updated: 16 Oct 1998<BR><A HREF="#index">Index</A>
<A HREF="http://localhost/cgi-bin/man/man2html">Return to Main Contents</A><HR>
<A NAME="lbAB">&nbsp;</A>
<H2>NAME</H2>
ipsec optionsfrom - read additional ``command-line'' options from file
<A NAME="lbAC">&nbsp;</A>
<H2>SYNOPSIS</H2>
<B>#include &lt;<A HREF="file:/usr/include/freeswan.h">freeswan.h</A>&gt;</B>
<P>
<B>const char *optionsfrom(char *filename, int *argcp,</B>
<BR>
&nbsp;
<B>char ***argvp, int optind, FILE *errsto);</B>
<A NAME="lbAD">&nbsp;</A>
<H2>DESCRIPTION</H2>
<I>Optionsfrom</I>
is called from within a
<I><A HREF="getopt_long.3.html">getopt_long</A></I>(3)
scan,
as the result of the appearance of an option (preferably
<B>--optionsfrom</B>)
to insert additional ``command-line'' arguments
into the scan immediately after
the option.
Typically this would be done to pick up options which are
security-sensitive and should not be visible to
<I><A HREF="ps.1.html">ps</A></I>(1)
and similar commands,
and hence cannot be supplied as part
of the actual command line or the environment.
<P>
<I>Optionsfrom</I>
reads the additional arguments from the specified
<I>filename</I>,
allocates a new argument vector to hold pointers to the existing
arguments plus the new ones,
and amends
<I>argc</I>
and
<I>argv</I>
(via the pointers
<I>argcp</I>
and
<I>argvp</I>,
which must point to the
<I>argc</I>
and
<I>argv</I>
being supplied to
<I><A HREF="getopt_long.3.html">getopt_long</A></I>(3))
accordingly.
<I>Optind</I>
must be the index, in the original argument vector,
of the next argument.
<P>
If
<I>errsto</I>
is NULL,
<I>optionsfrom</I>
returns NULL for success and
a pointer to a string-literal error message for failure;
see DIAGNOSTICS.
If
<I>errsto</I>
is non-NULL and an error occurs,
<I>optionsfrom</I>
prints a suitable complaint onto the
<I>errsto</I>
descriptor and invokes
<I>exit</I>
with an exit status of 2;
this is a convenience for cases where more sophisticated
responses are not required.
<P>
The text of existing arguments is not disturbed by
<I>optionsfrom</I>,
so pointers to them and into them remain valid.
<P>
The file of additional arguments is an ASCII text file.
Lines consisting solely of white space,
and lines beginning with
<B>#</B>,
are comments and are ignored.
Otherwise, a line which does not begin with
<B>-</B>
is taken to be a single argument;
if it both begins and ends with double-quote (&quot;),
those quotes are stripped off (note, no other processing is done within
the line!).
A line beginning with
<B>-</B>
is considered to contain multiple arguments separated by white space.
<P>
Because
<I>optionsfrom</I>
reads its entire file before the
<I><A HREF="getopt_long.3.html">getopt_long</A></I>(3)
scan is resumed, an
<I>optionsfrom</I>
file can contain another
<B>--optionsfrom</B>
option.
Obviously, infinite loops are possible here.
If
<I>errsto</I>
is non-NULL,
<I>optionsfrom</I>
considers it an error to be called more than 100 times.
If
<I>errsto</I>
is NULL,
loop detection is up to the caller
(and the internal loop counter is zeroed out).
<A NAME="lbAE">&nbsp;</A>
<H2>EXAMPLE</H2>
A reasonable way to invoke
<I>optionsfrom</I>
would be like so:
<P>
<PRE>
<B>#include &lt;<A HREF="file:/usr/include/getopt.h">getopt.h</A>&gt;
struct option opts[] = {
/* ... */
&quot;optionsfrom&quot;, 1, NULL, '+',
/* ... */
};
int
main(argc, argv)
int argc;
char *argv[];
{
int opt;
extern char *optarg;
extern int optind;
while ((opt = getopt_long(argc, argv, &quot;&quot;, opts, NULL)) != EOF)
switch (opt) {
/* ... */
case '+': /* optionsfrom */
optionsfrom(optarg, &amp;argc, &amp;argv, optind, stderr);
/* does not return on error */
break;
/* ... */
}
/* ... */
</B></PRE>
<A NAME="lbAF">&nbsp;</A>
<H2>SEE ALSO</H2>
<A HREF="getopt_long.3.html">getopt_long</A>(3)
<A NAME="lbAG">&nbsp;</A>
<H2>DIAGNOSTICS</H2>
Errors in
<I>optionsfrom</I>
are:
unable to open file;
attempt to allocate temporary storage for argument or
argument vector failed;
read error in file;
line too long.
<A NAME="lbAH">&nbsp;</A>
<H2>HISTORY</H2>
Written for the FreeS/WAN project by Henry Spencer.
<A NAME="lbAI">&nbsp;</A>
<H2>BUGS</H2>
The double-quote convention is rather simplistic.
<P>
Line length is currently limited to 1023 bytes,
and there is no continuation convention.
<P>
The restriction of error reports to literal strings
(so that callers don't need to worry about freeing them or copying them)
does limit the precision of error reporting.
<P>
The error-reporting convention lends itself
to slightly obscure code,
because many readers will not think of NULL as signifying success.
<P>
There is a certain element of unwarranted chumminess with
the insides of
<I><A HREF="getopt_long.3.html">getopt_long</A></I>(3)
here.
No non-public interfaces are actually used, but
<I>optionsfrom</I>
does rely on
<I><A HREF="getopt_long.3.html">getopt_long</A></I>(3)
being well-behaved in certain ways that are not actually
promised by the specs.
<P>
<HR>
<A NAME="index">&nbsp;</A><H2>Index</H2>
<DL>
<DT><A HREF="#lbAB">NAME</A><DD>
<DT><A HREF="#lbAC">SYNOPSIS</A><DD>
<DT><A HREF="#lbAD">DESCRIPTION</A><DD>
<DT><A HREF="#lbAE">EXAMPLE</A><DD>
<DT><A HREF="#lbAF">SEE ALSO</A><DD>
<DT><A HREF="#lbAG">DIAGNOSTICS</A><DD>
<DT><A HREF="#lbAH">HISTORY</A><DD>
<DT><A HREF="#lbAI">BUGS</A><DD>
</DL>
<HR>
This document was created by
<A HREF="http://localhost/cgi-bin/man/man2html">man2html</A>,
using the manual pages.<BR>
Time: 21:40:18 GMT, November 11, 2003
</BODY>
</HTML>