/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-31">
 
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>
 
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>
175
198
        <term><option>--global-options
176
199
        <replaceable>OPTIONS</replaceable></option></term>
177
200
        <term><option>-g
178
201
        <replaceable>OPTIONS</replaceable></option></term>
179
202
        <listitem>
180
203
          <para>
181
 
            Global options given to all plugins as additional start
182
 
            arguments.  Options are specified with a -o flag followed
183
 
            by a comma separated string of options.
184
 
          </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>
185
210
        </listitem>
186
211
      </varlistentry>
187
 
 
 
212
      
188
213
      <varlistentry>
189
214
        <term><option>--options-for
190
215
        <replaceable>PLUGIN</replaceable><literal>:</literal
194
219
        ><replaceable>OPTION</replaceable></option></term>
195
220
        <listitem>
196
221
          <para>
197
 
            Plugin specific options given to the plugin as additional
198
 
            start arguments.  Options are specified with a -o flag
199
 
            followed by a comma separated string of options.
200
 
          </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>
201
238
        </listitem>
202
239
      </varlistentry>
203
240
 
208
245
        <replaceable>PLUGIN</replaceable></option></term>
209
246
        <listitem>
210
247
          <para>
211
 
            Disable a specific plugin
 
248
            Disable the plugin named
 
249
            <replaceable>PLUGIN</replaceable>.  The plugin will not be
 
250
            started.
212
251
          </para>       
213
252
        </listitem>
214
253
      </varlistentry>
218
257
        <replaceable>ID</replaceable></option></term>
219
258
        <listitem>
220
259
          <para>
221
 
            Group ID the plugins will run as
 
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.
222
264
          </para>
223
265
        </listitem>
224
266
      </varlistentry>
228
270
        <replaceable>ID</replaceable></option></term>
229
271
        <listitem>
230
272
          <para>
231
 
            User ID the plugins will run as
 
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.
232
277
          </para>
233
278
        </listitem>
234
279
      </varlistentry>
238
283
        <replaceable>DIRECTORY</replaceable></option></term>
239
284
        <listitem>
240
285
          <para>
241
 
            Specify a different plugin directory
 
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.
242
290
          </para>
243
291
        </listitem>
244
292
      </varlistentry>
247
295
        <term><option>--debug</option></term>
248
296
        <listitem>
249
297
          <para>
250
 
            Debug mode
 
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.
251
309
          </para>
252
310
        </listitem>
253
311
      </varlistentry>
257
315
        <term><option>-?</option></term>
258
316
        <listitem>
259
317
          <para>
260
 
            Gives a help message
 
318
            Gives a help message about options and their meanings.
261
319
          </para>
262
320
        </listitem>
263
321
      </varlistentry>
266
324
        <term><option>--usage</option></term>
267
325
        <listitem>
268
326
          <para>
269
 
            Gives a short usage message
 
327
            Gives a short usage message.
270
328
          </para>
271
329
        </listitem>
272
330
      </varlistentry>
276
334
        <term><option>-V</option></term>
277
335
        <listitem>
278
336
          <para>
279
 
            Prints the program version
 
337
            Prints the program version.
280
338
          </para>
281
339
        </listitem>
282
340
      </varlistentry>
283
341
    </variablelist>
284
342
  </refsect1>
285
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
  
286
383
  <refsect1 id="exit_status">
287
384
    <title>EXIT STATUS</title>
288
385
    <para>
289
 
    </para>
290
 
  </refsect1>
291
 
 
 
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
  
292
400
  <refsect1 id="file">
293
401
    <title>FILES</title>
294
402
    <para>
295
 
    </para>
296
 
  </refsect1>
297
 
 
298
 
  <refsect1 id="notes">
299
 
    <title>NOTES</title>
300
 
    <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>
301
425
    </para>
302
426
  </refsect1>
303
427
  
304
428
  <refsect1 id="bugs">
305
429
    <title>BUGS</title>
306
430
    <para>
 
431
      There is no <option>--enable</option> option to enable disabled
 
432
      plugins.
307
433
    </para>
308
434
  </refsect1>
309
 
 
 
435
  
310
436
  <refsect1 id="examples">
311
437
    <title>EXAMPLE</title>
312
438
    <para>
313
439
    </para>
314
440
  </refsect1>
315
 
 
 
441
  
316
442
  <refsect1 id="security">
317
443
    <title>SECURITY</title>
318
444
    <para>
319
445
    </para>
320
446
  </refsect1>
321
 
 
 
447
  
322
448
  <refsect1 id="see_also">
323
449
    <title>SEE ALSO</title>
324
450
    <para>
332
458
      <manvolnum>8mandos</manvolnum></citerefentry>
333
459
    </para>
334
460
  </refsect1>
335
 
 
 
461
  
336
462
</refentry>
337
463
<!-- Local Variables: -->
338
464
<!-- time-stamp-start: "<!ENTITY TIMESTAMP [\"']" -->