/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/mandos-client.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:
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
4
<!ENTITY COMMANDNAME "mandos-client">
5
 
<!ENTITY TIMESTAMP "2016-07-10">
 
5
<!ENTITY TIMESTAMP "2015-03-08">
6
6
<!ENTITY % common SYSTEM "../common.ent">
7
7
%common;
8
8
]>
33
33
    <copyright>
34
34
      <year>2008</year>
35
35
      <year>2009</year>
36
 
      <year>2010</year>
37
 
      <year>2011</year>
38
36
      <year>2012</year>
39
37
      <year>2013</year>
40
38
      <year>2014</year>
41
 
      <year>2015</year>
42
 
      <year>2016</year>
43
39
      <holder>Teddy Hogeborn</holder>
44
40
      <holder>Björn Påhlsson</holder>
45
41
    </copyright>
102
98
      </arg>
103
99
      <sbr/>
104
100
      <arg>
105
 
        <option>--dh-params <replaceable>FILE</replaceable></option>
106
 
      </arg>
107
 
      <sbr/>
108
 
      <arg>
109
101
        <option>--delay <replaceable>SECONDS</replaceable></option>
110
102
      </arg>
111
103
      <sbr/>
320
312
          <para>
321
313
            Sets the number of bits to use for the prime number in the
322
314
            TLS Diffie-Hellman key exchange.  The default value is
323
 
            selected automatically based on the OpenPGP key.  Note
324
 
            that if the <option>--dh-params</option> option is used,
325
 
            the values from that file will be used instead.
326
 
          </para>
327
 
        </listitem>
328
 
      </varlistentry>
329
 
      
330
 
      <varlistentry>
331
 
        <term><option>--dh-params=<replaceable
332
 
        >FILE</replaceable></option></term>
333
 
        <listitem>
334
 
          <para>
335
 
            Specifies a PEM-encoded PKCS#3 file to read the parameters
336
 
            needed by the TLS Diffie-Hellman key exchange from.  If
337
 
            this option is not given, or if the file for some reason
338
 
            could not be used, the parameters will be generated on
339
 
            startup, which will take some time and processing power.
340
 
            Those using servers running under time, power or processor
341
 
            constraints may want to generate such a file in advance
342
 
            and use this option.
 
315
            selected automatically based on the OpenPGP key.
343
316
          </para>
344
317
        </listitem>
345
318
      </varlistentry>
472
445
  
473
446
  <refsect1 id="environment">
474
447
    <title>ENVIRONMENT</title>
475
 
    <variablelist>
476
 
      <varlistentry>
477
 
        <term><envar>MANDOSPLUGINHELPERDIR</envar></term>
478
 
        <listitem>
479
 
          <para>
480
 
            This environment variable will be assumed to contain the
481
 
            directory containing any helper executables.  The use and
482
 
            nature of these helper executables, if any, is
483
 
            purposefully not documented.
484
 
        </para>
485
 
        </listitem>
486
 
      </varlistentry>
487
 
    </variablelist>
488
448
    <para>
489
 
      This program does not use any other environment variables, not
490
 
      even the ones provided by <citerefentry><refentrytitle
 
449
      This program does not use any environment variables, not even
 
450
      the ones provided by <citerefentry><refentrytitle
491
451
      >cryptsetup</refentrytitle><manvolnum>8</manvolnum>
492
452
    </citerefentry>.
493
453
    </para>
693
653
    </variablelist>
694
654
  </refsect1>
695
655
  
696
 
  <refsect1 id="bugs">
697
 
    <title>BUGS</title>
698
 
    <xi:include href="../bugs.xml"/>
699
 
  </refsect1>
 
656
<!--   <refsect1 id="bugs"> -->
 
657
<!--     <title>BUGS</title> -->
 
658
<!--     <para> -->
 
659
<!--     </para> -->
 
660
<!--   </refsect1> -->
700
661
  
701
662
  <refsect1 id="example">
702
663
    <title>EXAMPLE</title>
842
803
      </varlistentry>
843
804
      <varlistentry>
844
805
        <term>
845
 
          <ulink url="https://www.gnutls.org/">GnuTLS</ulink>
 
806
          <ulink url="http://www.gnu.org/software/gnutls/"
 
807
          >GnuTLS</ulink>
846
808
        </term>
847
809
      <listitem>
848
810
        <para>
854
816
      </varlistentry>
855
817
      <varlistentry>
856
818
        <term>
857
 
          <ulink url="https://www.gnupg.org/related_software/gpgme/"
 
819
          <ulink url="http://www.gnupg.org/related_software/gpgme/"
858
820
                 >GPGME</ulink>
859
821
        </term>
860
822
        <listitem>
898
860
      </varlistentry>
899
861
      <varlistentry>
900
862
        <term>
901
 
          RFC 5246: <citetitle>The Transport Layer Security (TLS)
902
 
          Protocol Version 1.2</citetitle>
 
863
          RFC 4346: <citetitle>The Transport Layer Security (TLS)
 
864
          Protocol Version 1.1</citetitle>
903
865
        </term>
904
866
      <listitem>
905
867
        <para>
906
 
          TLS 1.2 is the protocol implemented by GnuTLS.
 
868
          TLS 1.1 is the protocol implemented by GnuTLS.
907
869
        </para>
908
870
      </listitem>
909
871
      </varlistentry>
920
882
      </varlistentry>
921
883
      <varlistentry>
922
884
        <term>
923
 
          RFC 6091: <citetitle>Using OpenPGP Keys for Transport Layer
 
885
          RFC 5081: <citetitle>Using OpenPGP Keys for Transport Layer
924
886
          Security</citetitle>
925
887
        </term>
926
888
      <listitem>