/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 plugins.d/password-prompt.xml

  • Committer: Teddy Hogeborn
  • Date: 2015-05-23 20:18:34 UTC
  • mto: This revision was merged to the branch mainline in revision 756.
  • Revision ID: teddy@recompile.se-20150523201834-e89ex4ito93yni8x
mandos: Use multiprocessing module to run checkers.

For a long time, the Mandos server has occasionally logged the message
"ERROR: Child process vanished".  This was never a fatal error, but it
has been annoying and slightly worrying, since a definite cause was
not found.  One potential cause could be the "multiprocessing" and
"subprocess" modules conflicting w.r.t. SIGCHLD.  To avoid this,
change the running of checkers from using subprocess.Popen
asynchronously to instead first create a multiprocessing.Process()
(which is asynchronous) calling a function, and have that function
then call subprocess.call() (which is synchronous).  In this way, the
only thing using any asynchronous subprocesses is the multiprocessing
module.

This makes it necessary to change one small thing in the D-Bus API,
since the subprocesses.call() function does not expose the raw wait(2)
status value.

DBUS-API (CheckerCompleted): Change the second value provided by this
                             D-Bus signal from the raw wait(2) status
                             to the actual terminating signal number.
mandos (subprocess_call_pipe): New function to be called by
                               multiprocessing.Process (starting a
                               separate process).
(Client.last_checker signal): New attribute for signal which
                              terminated last checker.  Like
                              last_checker_status, only not accessible
                              via D-Bus.
(Client.checker_callback): Take new "connection" argument and use it
                           to get returncode; set last_checker_signal.
                           Return False so gobject does not call this
                           callback again.
(Client.start_checker): Start checker using a multiprocessing.Process
                        instead of a subprocess.Popen.
(ClientDBus.checker_callback): Take new "connection" argument.        Call
                               Client.checker_callback early to have
                               it set last_checker_status and
                               last_checker_signal; use those.  Change
                               second value provided to D-Bus signal
                               CheckerCompleted to use
                               last_checker_signal if checker was
                               terminated by signal.
mandos-monitor: Update to reflect DBus API change.
(MandosClientWidget.checker_completed): Take "signal" instead of
                                        "condition" argument.  Use it
                                        accordingly.  Remove dead code
                                        (os.WCOREDUMP case).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
<?xml version="1.0" encoding="UTF-8"?>
2
2
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
3
3
        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
4
 
<!ENTITY VERSION "1.0">
5
4
<!ENTITY COMMANDNAME "password-prompt">
6
 
<!ENTITY TIMESTAMP "2008-09-01">
 
5
<!ENTITY TIMESTAMP "2012-01-01">
 
6
<!ENTITY % common SYSTEM "../common.ent">
 
7
%common;
7
8
]>
8
9
 
9
10
<refentry xmlns:xi="http://www.w3.org/2001/XInclude">
11
12
    <title>Mandos Manual</title>
12
13
    <!-- NWalsh’s docbook scripts use this to generate the footer: -->
13
14
    <productname>Mandos</productname>
14
 
    <productnumber>&VERSION;</productnumber>
 
15
    <productnumber>&version;</productnumber>
15
16
    <date>&TIMESTAMP;</date>
16
17
    <authorgroup>
17
18
      <author>
18
19
        <firstname>Björn</firstname>
19
20
        <surname>Påhlsson</surname>
20
21
        <address>
21
 
          <email>belorn@fukt.bsnet.se</email>
 
22
          <email>belorn@recompile.se</email>
22
23
        </address>
23
24
      </author>
24
25
      <author>
25
26
        <firstname>Teddy</firstname>
26
27
        <surname>Hogeborn</surname>
27
28
        <address>
28
 
          <email>teddy@fukt.bsnet.se</email>
 
29
          <email>teddy@recompile.se</email>
29
30
        </address>
30
31
      </author>
31
32
    </authorgroup>
32
33
    <copyright>
33
34
      <year>2008</year>
 
35
      <year>2009</year>
 
36
      <year>2011</year>
 
37
      <year>2012</year>
34
38
      <holder>Teddy Hogeborn</holder>
35
39
      <holder>Björn Påhlsson</holder>
36
40
    </copyright>
83
87
    <title>DESCRIPTION</title>
84
88
    <para>
85
89
      All <command>&COMMANDNAME;</command> does is prompt for a
86
 
      password and output any given password to standard output.  This
87
 
      is not very useful on its own.  This program is really meant to
88
 
      run as a plugin in the <application>Mandos</application>
89
 
      client-side system, where it is used as a fallback and
90
 
      alternative to retriving passwords from a <application
91
 
      >Mandos</application> server.
 
90
      password and output any given password to standard output.
 
91
    </para>
 
92
    <para>
 
93
      This program is not very useful on its own.  This program is
 
94
      really meant to run as a plugin in the <application
 
95
      >Mandos</application> client-side system, where it is used as a
 
96
      fallback and alternative to retrieving passwords from a
 
97
      <application >Mandos</application> server.
92
98
    </para>
93
99
    <para>
94
100
      This program is little more than a <citerefentry><refentrytitle
179
185
    <title>ENVIRONMENT</title>
180
186
    <variablelist>
181
187
      <varlistentry>
182
 
        <term><envar>cryptsource</envar></term>
183
 
        <term><envar>crypttarget</envar></term>
 
188
        <term><envar>CRYPTTAB_SOURCE</envar></term>
 
189
        <term><envar>CRYPTTAB_NAME</envar></term>
184
190
        <listitem>
185
191
          <para>
186
192
            If set, these environment variables will be assumed to
240
246
      <para>
241
247
        Show a prefix before the prompt; in this case, a host name.
242
248
        It might be useful to be reminded of which host needs a
243
 
        password, in case of KVM switches, etc.
 
249
        password, in case of <acronym>KVM</acronym> switches, etc.
244
250
      </para>
245
251
      <para>
246
252
 
270
276
      >plugin-runner</refentrytitle><manvolnum>8mandos</manvolnum>
271
277
      </citerefentry>, and will, when run standalone, outside, in a
272
278
      normal environment, immediately output on its standard output
273
 
      any presumably secret password it just recieved.  Therefore,
 
279
      any presumably secret password it just received.  Therefore,
274
280
      when running this program standalone (which should never
275
281
      normally be done), take care not to type in any real secret
276
282
      password by force of habit, since it would then immediately be
288
294
  <refsect1 id="see_also">
289
295
    <title>SEE ALSO</title>
290
296
    <para>
 
297
      <citerefentry><refentrytitle>intro</refentrytitle>
 
298
      <manvolnum>8mandos</manvolnum></citerefentry>
291
299
      <citerefentry><refentrytitle>crypttab</refentrytitle>
292
300
      <manvolnum>5</manvolnum></citerefentry>
293
 
      <citerefentry><refentrytitle>password-request</refentrytitle>
 
301
      <citerefentry><refentrytitle>mandos-client</refentrytitle>
294
302
      <manvolnum>8mandos</manvolnum></citerefentry>
295
303
      <citerefentry><refentrytitle>plugin-runner</refentrytitle>
296
304
      <manvolnum>8mandos</manvolnum></citerefentry>,