/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
 
<?xml-stylesheet type="text/xsl"
3
 
        href="http://docbook.sourceforge.net/release/xsl/current/manpages/docbook.xsl"?>
 
1
<?xml version="1.0" encoding="UTF-8"?>
4
2
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
5
3
        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
6
4
<!ENTITY VERSION "1.0">
7
5
<!ENTITY COMMANDNAME "plugin-runner">
8
 
<!ENTITY TIMESTAMP "2008-08-30">
 
6
<!ENTITY TIMESTAMP "2008-09-01">
9
7
]>
10
8
 
11
 
<refentry>
 
9
<refentry xmlns:xi="http://www.w3.org/2001/XInclude">
12
10
  <refentryinfo>
13
11
    <title>Mandos Manual</title>
14
 
    <!-- NWalsh's docbook scripts use this to generate the footer: -->
 
12
    <!-- Nwalsh’s docbook scripts use this to generate the footer: -->
15
13
    <productname>Mandos</productname>
16
14
    <productnumber>&VERSION;</productnumber>
17
15
    <date>&TIMESTAMP;</date>
33
31
    </authorgroup>
34
32
    <copyright>
35
33
      <year>2008</year>
36
 
      <holder>Teddy Hogeborn &amp; Björn Påhlsson</holder>
 
34
      <holder>Teddy Hogeborn</holder>
 
35
      <holder>Björn Påhlsson</holder>
37
36
    </copyright>
38
 
    <legalnotice>
39
 
      <para>
40
 
        This manual page is free software: you can redistribute it
41
 
        and/or modify it under the terms of the GNU General Public
42
 
        License as published by the Free Software Foundation,
43
 
        either version 3 of the License, or (at your option) any
44
 
        later version.
45
 
      </para>
46
 
 
47
 
      <para>
48
 
        This manual page is distributed in the hope that it will
49
 
        be useful, but WITHOUT ANY WARRANTY; without even the
50
 
        implied warranty of MERCHANTABILITY or FITNESS FOR A
51
 
        PARTICULAR PURPOSE.  See the GNU General Public License
52
 
        for more details.
53
 
      </para>
54
 
 
55
 
      <para>
56
 
        You should have received a copy of the GNU General Public
57
 
        License along with this program; If not, see
58
 
        <ulink url="http://www.gnu.org/licenses/"/>.
59
 
      </para>
60
 
    </legalnotice>
 
37
    <xi:include href="legalnotice.xml"/>
61
38
  </refentryinfo>
62
39
 
63
40
  <refmeta>
76
53
    <cmdsynopsis>
77
54
      <command>&COMMANDNAME;</command>
78
55
      <group rep="repeat">
79
 
        <arg choice="plain"><option>--global-envs=<replaceable
 
56
        <arg choice="plain"><option>--global-env=<replaceable
80
57
        >VAR</replaceable><literal>=</literal><replaceable
81
58
        >value</replaceable></option></arg>
82
59
        <arg choice="plain"><option>-e
85
62
      </group>
86
63
      <sbr/>
87
64
      <group rep="repeat">
88
 
        <arg choice="plain"><option>--envs-for=<replaceable
 
65
        <arg choice="plain"><option>--env-for=<replaceable
89
66
        >PLUGIN</replaceable><literal>:</literal><replaceable
90
67
        >ENV</replaceable><literal>=</literal><replaceable
91
68
        >value</replaceable></option></arg>
132
109
    <cmdsynopsis>
133
110
      <command>&COMMANDNAME;</command>
134
111
      <group choice="req">
135
 
        <arg choice='plain'><option>--help</option></arg>
136
 
        <arg choice='plain'><option>-?</option></arg>
 
112
        <arg choice="plain"><option>--help</option></arg>
 
113
        <arg choice="plain"><option>-?</option></arg>
137
114
      </group>
138
115
    </cmdsynopsis>
139
116
    <cmdsynopsis>
140
117
      <command>&COMMANDNAME;</command>
141
 
      <arg choice='plain'><option>--usage</option></arg>
 
118
      <arg choice="plain"><option>--usage</option></arg>
142
119
    </cmdsynopsis>
143
120
    <cmdsynopsis>
144
121
      <command>&COMMANDNAME;</command>
145
122
      <group choice="req">
146
 
        <arg choice='plain'><option>--version</option></arg>
147
 
        <arg choice='plain'><option>-V</option></arg>
 
123
        <arg choice="plain"><option>--version</option></arg>
 
124
        <arg choice="plain"><option>-V</option></arg>
148
125
      </group>
149
126
    </cmdsynopsis>
150
127
  </refsynopsisdiv>
151
 
 
 
128
  
152
129
  <refsect1 id="description">
153
130
    <title>DESCRIPTION</title>
154
131
    <para>
155
 
      <command>&COMMANDNAME;</command> is a plugin runner that waits
156
 
      for any of its plugins to return sucessfull with a password, and
157
 
      passes it to cryptsetup as stdout message. This command is not
158
 
      meant to be invoked directly, but is instead meant to be run by
159
 
      cryptsetup by being specified in /etc/crypttab as a keyscript
160
 
      and subsequlently started in the initrd environment. See
161
 
      <citerefentry><refentrytitle>crypttab</refentrytitle>
162
 
      <manvolnum>5</manvolnum></citerefentry> for more information on
163
 
      keyscripts.
164
 
    </para>
165
 
 
166
 
    <para>
167
 
      plugins is looked for in the plugins directory which by default will be
168
 
      /conf/conf.d/mandos/plugins.d if not changed by option --plugin-dir.
169
 
    </para>
170
 
  </refsect1>
 
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
  
171
158
  <refsect1>
172
159
    <title>OPTIONS</title>
173
160
    <variablelist>
174
161
      <varlistentry>
175
 
        <term><literal>-g</literal>,<literal>--global-options
176
 
        <replaceable>OPTIONS</replaceable></literal></term>
177
 
        <listitem>
178
 
          <para>
179
 
            Global options given to all plugins as additional start
180
 
            arguments.  Options are specified with a -o flag followed
181
 
            by a comma separated string of options.
182
 
          </para>       
183
 
        </listitem>
184
 
      </varlistentry>
185
 
 
186
 
      <varlistentry>
187
 
        <term><literal>-o</literal>,<literal> --options-for
188
 
        <replaceable>PLUGIN</replaceable>:<replaceable>OPTION</replaceable>
189
 
        </literal></term>
190
 
        <listitem>
191
 
          <para>
192
 
            Plugin specific options given to the plugin as additional
193
 
            start arguments.  Options are specified with a -o flag
194
 
            followed by a comma separated string of options.
195
 
          </para>       
196
 
        </listitem>
197
 
      </varlistentry>
198
 
 
199
 
      <varlistentry>
200
 
        <term><literal>-d</literal>,<literal> --disable
201
 
        <replaceable>PLUGIN</replaceable>
202
 
        </literal></term>
203
 
        <listitem>
204
 
          <para>
205
 
            Disable a specific plugin
206
 
          </para>       
207
 
        </listitem>
208
 
      </varlistentry>
209
 
 
210
 
      <varlistentry>
211
 
        <term><literal>--groupid <replaceable>ID</replaceable>
212
 
        </literal></term>
213
 
        <listitem>
214
 
          <para>
215
 
            Group ID the plugins will run as
216
 
          </para>
217
 
        </listitem>
218
 
      </varlistentry>
219
 
 
220
 
      <varlistentry>
221
 
        <term><literal>--userid <replaceable>ID</replaceable>
222
 
        </literal></term>
223
 
        <listitem>
224
 
          <para>
225
 
            User ID the plugins will run as
226
 
          </para>
227
 
        </listitem>
228
 
      </varlistentry>
229
 
 
230
 
      <varlistentry>
231
 
        <term><literal>--plugin-dir <replaceable>DIRECTORY</replaceable>
232
 
        </literal></term>
233
 
        <listitem>
234
 
          <para>
235
 
            Specify a different plugin directory
236
 
          </para>
237
 
        </listitem>
238
 
      </varlistentry>
239
 
      
240
 
      <varlistentry>
241
 
        <term><literal>--debug</literal></term>
242
 
        <listitem>
243
 
          <para>
244
 
            Debug mode
245
 
          </para>
246
 
        </listitem>
247
 
      </varlistentry>
248
 
      
249
 
      <varlistentry>
250
 
        <term><literal>-?</literal>, <literal>--help</literal></term>
251
 
        <listitem>
252
 
          <para>
253
 
            Gives a help message
254
 
          </para>
255
 
        </listitem>
256
 
      </varlistentry>
257
 
      
258
 
      <varlistentry>
259
 
        <term><literal>--usage</literal></term>
260
 
        <listitem>
261
 
          <para>
262
 
            Gives a short usage message
263
 
          </para>
264
 
        </listitem>
265
 
      </varlistentry>
266
 
 
267
 
      <varlistentry>
268
 
        <term><literal>-V</literal>, <literal>--version</literal></term>
269
 
        <listitem>
270
 
          <para>
271
 
            Prints the program version
 
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.
272
338
          </para>
273
339
        </listitem>
274
340
      </varlistentry>
275
341
    </variablelist>
276
342
  </refsect1>
277
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
  
278
383
  <refsect1 id="exit_status">
279
384
    <title>EXIT STATUS</title>
280
385
    <para>
281
 
    </para>
282
 
  </refsect1>
283
 
 
 
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
  
284
400
  <refsect1 id="file">
285
401
    <title>FILES</title>
286
402
    <para>
287
 
    </para>
288
 
  </refsect1>
289
 
 
290
 
  <refsect1 id="notes">
291
 
    <title>NOTES</title>
292
 
    <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>
293
425
    </para>
294
426
  </refsect1>
295
427
  
296
428
  <refsect1 id="bugs">
297
429
    <title>BUGS</title>
298
430
    <para>
 
431
      There is no <option>--enable</option> option to enable disabled
 
432
      plugins.
299
433
    </para>
300
434
  </refsect1>
301
 
 
 
435
  
302
436
  <refsect1 id="examples">
303
437
    <title>EXAMPLE</title>
304
438
    <para>
305
439
    </para>
306
440
  </refsect1>
307
 
 
 
441
  
308
442
  <refsect1 id="security">
309
443
    <title>SECURITY</title>
310
444
    <para>
311
445
    </para>
312
446
  </refsect1>
313
 
 
 
447
  
314
448
  <refsect1 id="see_also">
315
449
    <title>SEE ALSO</title>
316
450
    <para>
324
458
      <manvolnum>8mandos</manvolnum></citerefentry>
325
459
    </para>
326
460
  </refsect1>
327
 
 
 
461
  
328
462
</refentry>
329
463
<!-- Local Variables: -->
330
464
<!-- time-stamp-start: "<!ENTITY TIMESTAMP [\"']" -->