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