/mandos/trunk

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/trunk

« back to all changes in this revision

Viewing changes to plugin-runner.xml

  • Committer: Teddy Hogeborn
  • Date: 2008-09-01 16:53:17 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080901165317-77dccp81zyqimt2j
* plugin-runner.c (add_environment): Override existing environment
                                     variables when asked to do so.
                                     All callers changed.
  (main): Removed old argp.args_doc string.  Parse argument file
          before normal command line arguments.  Use ARGP_IN_ORDER
          flag in both calls to argp_parse.  Do not strdup() strings
          to be sent to add_environment().

* plugin-runner.xml (OPTIONS): Document "--global-env" and "--envs-for".
  (FILES): Note that the config file is parsed before the command line
           options.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="UTF-8"?>
 
2
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
 
3
        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
 
4
<!ENTITY VERSION "1.0">
 
5
<!ENTITY COMMANDNAME "plugin-runner">
 
6
<!ENTITY TIMESTAMP "2008-09-01">
 
7
]>
 
8
 
 
9
<refentry xmlns:xi="http://www.w3.org/2001/XInclude">
 
10
  <refentryinfo>
 
11
    <title>Mandos Manual</title>
 
12
    <!-- Nwalsh’s docbook scripts use this to generate the footer: -->
 
13
    <productname>Mandos</productname>
 
14
    <productnumber>&VERSION;</productnumber>
 
15
    <date>&TIMESTAMP;</date>
 
16
    <authorgroup>
 
17
      <author>
 
18
        <firstname>Björn</firstname>
 
19
        <surname>Påhlsson</surname>
 
20
        <address>
 
21
          <email>belorn@fukt.bsnet.se</email>
 
22
        </address>
 
23
      </author>
 
24
      <author>
 
25
        <firstname>Teddy</firstname>
 
26
        <surname>Hogeborn</surname>
 
27
        <address>
 
28
          <email>teddy@fukt.bsnet.se</email>
 
29
        </address>
 
30
      </author>
 
31
    </authorgroup>
 
32
    <copyright>
 
33
      <year>2008</year>
 
34
      <holder>Teddy Hogeborn</holder>
 
35
      <holder>Björn Påhlsson</holder>
 
36
    </copyright>
 
37
    <xi:include href="legalnotice.xml"/>
 
38
  </refentryinfo>
 
39
 
 
40
  <refmeta>
 
41
    <refentrytitle>&COMMANDNAME;</refentrytitle>
 
42
    <manvolnum>8mandos</manvolnum>
 
43
  </refmeta>
 
44
  
 
45
  <refnamediv>
 
46
    <refname><command>&COMMANDNAME;</command></refname>
 
47
    <refpurpose>
 
48
      Run Mandos plugins.  Pass data from first succesful one.
 
49
    </refpurpose>
 
50
  </refnamediv>
 
51
 
 
52
  <refsynopsisdiv>
 
53
    <cmdsynopsis>
 
54
      <command>&COMMANDNAME;</command>
 
55
      <group rep="repeat">
 
56
        <arg choice="plain"><option>--global-env=<replaceable
 
57
        >VAR</replaceable><literal>=</literal><replaceable
 
58
        >value</replaceable></option></arg>
 
59
        <arg choice="plain"><option>-e
 
60
        <replaceable>VAR</replaceable><literal>=</literal><replaceable
 
61
        >value</replaceable> </option></arg>
 
62
      </group>
 
63
      <sbr/>
 
64
      <group rep="repeat">
 
65
        <arg choice="plain"><option>--env-for=<replaceable
 
66
        >PLUGIN</replaceable><literal>:</literal><replaceable
 
67
        >ENV</replaceable><literal>=</literal><replaceable
 
68
        >value</replaceable></option></arg>
 
69
        <arg choice="plain"><option>-f<replaceable>
 
70
        PLUGIN</replaceable><literal>:</literal><replaceable
 
71
        >ENV</replaceable><literal>=</literal><replaceable
 
72
        >value</replaceable> </option></arg>
 
73
      </group>
 
74
      <sbr/>
 
75
      <group rep="repeat">
 
76
        <arg choice="plain"><option>--global-options=<replaceable
 
77
        >OPTIONS</replaceable></option></arg>
 
78
        <arg choice="plain"><option>-g<replaceable>
 
79
        OPTIONS</replaceable> </option></arg>
 
80
      </group>
 
81
      <sbr/>
 
82
      <group rep="repeat">
 
83
        <arg choice="plain"><option>--options-for=<replaceable
 
84
        >PLUGIN</replaceable><literal>:</literal><replaceable
 
85
        >OPTIONS</replaceable></option></arg>
 
86
        <arg choice="plain"><option>-f<replaceable>
 
87
        PLUGIN</replaceable><literal>:</literal><replaceable
 
88
        >OPTIONS</replaceable> </option></arg>
 
89
      </group>
 
90
      <sbr/>
 
91
      <group rep="repeat">
 
92
        <arg choice="plain"><option>--disable=<replaceable
 
93
        >PLUGIN</replaceable></option></arg>
 
94
        <arg choice="plain"><option>-d
 
95
        <replaceable>PLUGIN</replaceable> </option></arg>
 
96
      </group>
 
97
      <sbr/>
 
98
      <arg><option>--groupid=<replaceable
 
99
      >ID</replaceable></option></arg>
 
100
      <sbr/>
 
101
      <arg><option>--userid=<replaceable
 
102
      >ID</replaceable></option></arg>
 
103
      <sbr/>
 
104
      <arg><option>--plugin-dir=<replaceable
 
105
      >DIRECTORY</replaceable></option></arg>
 
106
      <sbr/>
 
107
      <arg><option>--debug</option></arg>
 
108
    </cmdsynopsis>
 
109
    <cmdsynopsis>
 
110
      <command>&COMMANDNAME;</command>
 
111
      <group choice="req">
 
112
        <arg choice="plain"><option>--help</option></arg>
 
113
        <arg choice="plain"><option>-?</option></arg>
 
114
      </group>
 
115
    </cmdsynopsis>
 
116
    <cmdsynopsis>
 
117
      <command>&COMMANDNAME;</command>
 
118
      <arg choice="plain"><option>--usage</option></arg>
 
119
    </cmdsynopsis>
 
120
    <cmdsynopsis>
 
121
      <command>&COMMANDNAME;</command>
 
122
      <group choice="req">
 
123
        <arg choice="plain"><option>--version</option></arg>
 
124
        <arg choice="plain"><option>-V</option></arg>
 
125
      </group>
 
126
    </cmdsynopsis>
 
127
  </refsynopsisdiv>
 
128
  
 
129
  <refsect1 id="description">
 
130
    <title>DESCRIPTION</title>
 
131
    <para>
 
132
      <command>&COMMANDNAME;</command> is a program which is meant to
 
133
      be specified as <quote>keyscript</quote> in <citerefentry>
 
134
      <refentrytitle>crypttab</refentrytitle>
 
135
      <manvolnum>5</manvolnum></citerefentry> for the root disk.  The
 
136
      aim of this program is therefore to output a password, which
 
137
      then <citerefentry><refentrytitle>cryptsetup</refentrytitle>
 
138
      <manvolnum>8</manvolnum></citerefentry> will use to try and
 
139
      unlock the root disk.
 
140
    </para>
 
141
    <para>
 
142
      This program is not meant to be invoked directly, but can be in
 
143
      order to test it.  Note that any password obtained will simply
 
144
      be output on standard output.
 
145
    </para>
 
146
  </refsect1>
 
147
  
 
148
  <refsect1 id="purpose">
 
149
    <title>PURPOSE</title>
 
150
    <para>
 
151
      The purpose of this is to enable <emphasis>remote and unattended
 
152
      rebooting</emphasis> of client host computer with an
 
153
      <emphasis>encrypted root file system</emphasis>.  See <xref
 
154
      linkend="overview"/> for details.
 
155
    </para>
 
156
  </refsect1>
 
157
  
 
158
  <refsect1>
 
159
    <title>OPTIONS</title>
 
160
    <variablelist>
 
161
      <varlistentry>
 
162
        <term><option>--global-env
 
163
        <replaceable>VAR</replaceable><literal>=</literal><replaceable
 
164
        >value</replaceable></option></term>
 
165
        <term><option>-e
 
166
        <replaceable>VAR</replaceable><literal>=</literal><replaceable
 
167
        >value</replaceable></option></term>
 
168
        <listitem>
 
169
          <para>
 
170
            This option will add an environment variable setting to
 
171
            all plugins.  This will override any inherited environment
 
172
            variable.
 
173
          </para>
 
174
        </listitem>
 
175
      </varlistentry>
 
176
      
 
177
      <varlistentry>
 
178
        <term><option>--env-for
 
179
        <replaceable>PLUGIN</replaceable><literal>:</literal
 
180
        ><replaceable>ENV</replaceable><literal>=</literal
 
181
        ><replaceable>value</replaceable></option></term>
 
182
        <term><option>-f
 
183
        <replaceable>PLUGIN</replaceable><literal>:</literal
 
184
        ><replaceable>ENV</replaceable><literal>=</literal
 
185
        ><replaceable>value</replaceable></option></term>
 
186
        <listitem>
 
187
          <para>
 
188
            This option will add an environment variable setting to
 
189
            the <replaceable>PLUGIN</replaceable> plugin.  This will
 
190
            override any inherited environment variables or
 
191
            environment variables specified using
 
192
            <option>--global-env</option>.
 
193
          </para>
 
194
        </listitem>
 
195
      </varlistentry>
 
196
      
 
197
      <varlistentry>
 
198
        <term><option>--global-options
 
199
        <replaceable>OPTIONS</replaceable></option></term>
 
200
        <term><option>-g
 
201
        <replaceable>OPTIONS</replaceable></option></term>
 
202
        <listitem>
 
203
          <para>
 
204
            Pass some options to <emphasis>all</emphasis> plugins.
 
205
            <replaceable>OPTIONS</replaceable> is a comma separated
 
206
            list of options.  This is not a very useful option, except
 
207
            for specifying the <quote><option>--debug</option></quote>
 
208
            for all plugins.
 
209
          </para>
 
210
        </listitem>
 
211
      </varlistentry>
 
212
      
 
213
      <varlistentry>
 
214
        <term><option>--options-for
 
215
        <replaceable>PLUGIN</replaceable><literal>:</literal
 
216
        ><replaceable>OPTION</replaceable></option></term>
 
217
        <term><option>-o
 
218
        <replaceable>PLUGIN</replaceable><literal>:</literal
 
219
        ><replaceable>OPTION</replaceable></option></term>
 
220
        <listitem>
 
221
          <para>
 
222
            Pass some options to a specific plugin.  <replaceable
 
223
            >PLUGIN</replaceable> is the name (file basename) of a
 
224
            plugin, and <replaceable>OPTIONS</replaceable> is a comma
 
225
            separated list of options.
 
226
          </para>
 
227
          <para>
 
228
            Note that since options are not split on whitespace, the
 
229
            way to pass, to the plugin
 
230
            <quote><filename>foo</filename></quote>, the option
 
231
            <option>--bar</option> with the option argument
 
232
            <quote>baz</quote> is either
 
233
            <userinput>--options-for=foo:--bar=baz</userinput> or
 
234
            <userinput>--options-for=foo:--bar,baz</userinput>, but
 
235
            <emphasis>not</emphasis>
 
236
            <userinput>--options-for="foo:--bar baz"</userinput>.
 
237
          </para>
 
238
        </listitem>
 
239
      </varlistentry>
 
240
 
 
241
      <varlistentry>
 
242
        <term><option> --disable
 
243
        <replaceable>PLUGIN</replaceable></option></term>
 
244
        <term><option>-d
 
245
        <replaceable>PLUGIN</replaceable></option></term>
 
246
        <listitem>
 
247
          <para>
 
248
            Disable the plugin named
 
249
            <replaceable>PLUGIN</replaceable>.  The plugin will not be
 
250
            started.
 
251
          </para>       
 
252
        </listitem>
 
253
      </varlistentry>
 
254
 
 
255
      <varlistentry>
 
256
        <term><option>--groupid
 
257
        <replaceable>ID</replaceable></option></term>
 
258
        <listitem>
 
259
          <para>
 
260
            Change to group ID <replaceable>ID</replaceable> on
 
261
            startup.  The default is 65534.  All plugins will be
 
262
            started using this group ID.  <emphasis>Note:</emphasis>
 
263
            This must be a number, not a name.
 
264
          </para>
 
265
        </listitem>
 
266
      </varlistentry>
 
267
 
 
268
      <varlistentry>
 
269
        <term><option>--userid
 
270
        <replaceable>ID</replaceable></option></term>
 
271
        <listitem>
 
272
          <para>
 
273
            Change to user ID <replaceable>ID</replaceable> on
 
274
            startup.  The default is 65534.  All plugins will be
 
275
            started using this user ID.  <emphasis>Note:</emphasis>
 
276
            This must be a number, not a name.
 
277
          </para>
 
278
        </listitem>
 
279
      </varlistentry>
 
280
 
 
281
      <varlistentry>
 
282
        <term><option>--plugin-dir
 
283
        <replaceable>DIRECTORY</replaceable></option></term>
 
284
        <listitem>
 
285
          <para>
 
286
            Specify a different plugin directory.  The default is
 
287
            <filename>/lib/mandos/plugins.d</filename>, which will
 
288
            exist in the initial <acronym>RAM</acronym> disk
 
289
            environment.
 
290
          </para>
 
291
        </listitem>
 
292
      </varlistentry>
 
293
      
 
294
      <varlistentry>
 
295
        <term><option>--debug</option></term>
 
296
        <listitem>
 
297
          <para>
 
298
            Enable debug mode.  This will enable a lot of output to
 
299
            standard error about what the program is doing.  The
 
300
            program will still perform all other functions normally.
 
301
            The default is to <emphasis>not</emphasis> run in debug
 
302
            mode.
 
303
          </para>
 
304
          <para>
 
305
            The plugins will <emphasis>not</emphasis> be affected by
 
306
            this option.  Use
 
307
            <userinput><option>--global-options=--debug</option></userinput>
 
308
            if complete debugging eruption is desired.
 
309
          </para>
 
310
        </listitem>
 
311
      </varlistentry>
 
312
      
 
313
      <varlistentry>
 
314
        <term><option>--help</option></term>
 
315
        <term><option>-?</option></term>
 
316
        <listitem>
 
317
          <para>
 
318
            Gives a help message about options and their meanings.
 
319
          </para>
 
320
        </listitem>
 
321
      </varlistentry>
 
322
      
 
323
      <varlistentry>
 
324
        <term><option>--usage</option></term>
 
325
        <listitem>
 
326
          <para>
 
327
            Gives a short usage message.
 
328
          </para>
 
329
        </listitem>
 
330
      </varlistentry>
 
331
 
 
332
      <varlistentry>
 
333
        <term><option>--version</option></term>
 
334
        <term><option>-V</option></term>
 
335
        <listitem>
 
336
          <para>
 
337
            Prints the program version.
 
338
          </para>
 
339
        </listitem>
 
340
      </varlistentry>
 
341
    </variablelist>
 
342
  </refsect1>
 
343
 
 
344
  <refsect1 id="overview">
 
345
    <title>OVERVIEW</title>
 
346
    <xi:include href="overview.xml"/>
 
347
    <para>
 
348
      This program will run on the client side in the initial
 
349
      <acronym>RAM</acronym> disk environment, and is responsible for
 
350
      getting a password.  It does this by running plugins, one of
 
351
      which will normally be the actual client program communicating
 
352
      with the server.
 
353
    </para>
 
354
  </refsect1>
 
355
  <refsect1 id="plugins">
 
356
    <title>PLUGINS</title>
 
357
    <para>
 
358
      This program will get a password by running a number of
 
359
      <firstterm>plugins</firstterm>, which are simply executable
 
360
      programs in a directory in the initial <acronym>RAM</acronym>
 
361
      disk environment.  The default directory is
 
362
      <filename>/lib/mandos/plugins.d</filename>, but this can be
 
363
      changed with the <option>--plugin-dir</option> option.  The
 
364
      plugins are started in parallel, and the first plugin to output
 
365
      a password <emphasis>and</emphasis> exit with a successful exit
 
366
      code will make this plugin-runner output the password from that
 
367
      plugin, stop any other plugins, and exit.
 
368
    </para>
 
369
  </refsect1>
 
370
  
 
371
  <refsect1 id="fallback">
 
372
    <title>FALLBACK</title>
 
373
    <para>
 
374
      If no plugins succeed, this program will, as a fallback, ask for
 
375
      a password on the console using <citerefentry><refentrytitle
 
376
      >getpass</refentrytitle><manvolnum>3</manvolnum></citerefentry>,
 
377
      and output it.  This is not meant to be the normal mode of
 
378
      operation, as there is a separate plugin for getting a password
 
379
      from the console.
 
380
    </para>
 
381
  </refsect1>
 
382
  
 
383
  <refsect1 id="exit_status">
 
384
    <title>EXIT STATUS</title>
 
385
    <para>
 
386
      Exit status of this program is zero if no errors were
 
387
      encountered, and otherwise not.  The fallback (see <xref
 
388
      linkend="fallback"/>) may or may not have succeeded in either
 
389
      case.
 
390
    </para>
 
391
  </refsect1>
 
392
  
 
393
  <refsect1 id="environment">
 
394
    <title>ENVIRONMENT</title>
 
395
    <para>
 
396
      
 
397
    </para>
 
398
  </refsect1>
 
399
  
 
400
  <refsect1 id="file">
 
401
    <title>FILES</title>
 
402
    <para>
 
403
      <variablelist>
 
404
        <varlistentry>
 
405
          <term><filename
 
406
          >/conf/conf.d/mandos/plugin-runner.conf</filename></term>
 
407
          <listitem>
 
408
            <para>
 
409
              Since this program will be run as a keyscript, there is
 
410
              little to no opportunity to pass command line arguments
 
411
              to it.  Therefore, it will <emphasis>also</emphasis>
 
412
              read this file and use its contents as
 
413
              whitespace-separated command line options.  Also,
 
414
              everything from a <quote>#</quote> character to the end
 
415
              of a line is ignored.
 
416
            </para>
 
417
            <para>
 
418
              This file will be processed <emphasis>before</emphasis>
 
419
              the normal command line options, so the latter can
 
420
              override the former, if need be.
 
421
            </para>
 
422
          </listitem>
 
423
        </varlistentry>
 
424
      </variablelist>
 
425
    </para>
 
426
  </refsect1>
 
427
  
 
428
  <refsect1 id="bugs">
 
429
    <title>BUGS</title>
 
430
    <para>
 
431
      There is no <option>--enable</option> option to enable disabled
 
432
      plugins.
 
433
    </para>
 
434
  </refsect1>
 
435
  
 
436
  <refsect1 id="examples">
 
437
    <title>EXAMPLE</title>
 
438
    <para>
 
439
    </para>
 
440
  </refsect1>
 
441
  
 
442
  <refsect1 id="security">
 
443
    <title>SECURITY</title>
 
444
    <para>
 
445
    </para>
 
446
  </refsect1>
 
447
  
 
448
  <refsect1 id="see_also">
 
449
    <title>SEE ALSO</title>
 
450
    <para>
 
451
      <citerefentry><refentrytitle>cryptsetup</refentrytitle>
 
452
      <manvolnum>8</manvolnum></citerefentry>,
 
453
      <citerefentry><refentrytitle>mandos</refentrytitle>
 
454
      <manvolnum>8</manvolnum></citerefentry>,
 
455
      <citerefentry><refentrytitle>password-prompt</refentrytitle>
 
456
      <manvolnum>8mandos</manvolnum></citerefentry>,
 
457
      <citerefentry><refentrytitle>password-request</refentrytitle>
 
458
      <manvolnum>8mandos</manvolnum></citerefentry>
 
459
    </para>
 
460
  </refsect1>
 
461
  
 
462
</refentry>
 
463
<!-- Local Variables: -->
 
464
<!-- time-stamp-start: "<!ENTITY TIMESTAMP [\"']" -->
 
465
<!-- time-stamp-end: "[\"']>" -->
 
466
<!-- time-stamp-format: "%:y-%02m-%02d" -->
 
467
<!-- End: -->