/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 "2012-06-13">
 
5
<!ENTITY TIMESTAMP "2015-03-08">
6
6
<!ENTITY % common SYSTEM "../common.ent">
7
7
%common;
8
8
]>
34
34
      <year>2008</year>
35
35
      <year>2009</year>
36
36
      <year>2012</year>
 
37
      <year>2013</year>
 
38
      <year>2014</year>
37
39
      <holder>Teddy Hogeborn</holder>
38
40
      <holder>Björn Påhlsson</holder>
39
41
    </copyright>
218
220
            assumed to separate the address from the port number.
219
221
          </para>
220
222
          <para>
221
 
            This option is normally only useful for testing and
222
 
            debugging.
 
223
            Normally, Zeroconf would be used to locate Mandos servers,
 
224
            in which case this option would only be used when testing
 
225
            and debugging.
223
226
          </para>
224
227
        </listitem>
225
228
      </varlistentry>
226
229
      
227
230
      <varlistentry>
228
231
        <term><option>--interface=<replaceable
229
 
        >NAME</replaceable></option></term>
 
232
        >NAME</replaceable><arg rep='repeat'>,<replaceable
 
233
        >NAME</replaceable></arg></option></term>
230
234
        <term><option>-i
231
 
        <replaceable>NAME</replaceable></option></term>
 
235
        <replaceable>NAME</replaceable><arg rep='repeat'>,<replaceable
 
236
        >NAME</replaceable></arg></option></term>
232
237
        <listitem>
233
238
          <para>
234
239
            Comma separated list of network interfaces that will be
237
242
            use all appropriate interfaces.
238
243
          </para>
239
244
          <para>
240
 
            If the <option>--connect</option> option is used, this
241
 
            specifies the interface to use to connect to the address
242
 
            given.
 
245
            If the <option>--connect</option> option is used, and
 
246
            exactly one interface name is specified (except
 
247
            <quote><literal>none</literal></quote>), this specifies
 
248
            the interface to use to connect to the address given.
243
249
          </para>
244
250
          <para>
245
251
            Note that since this program will normally run in the
254
260
          </para>
255
261
          <para>
256
262
            <replaceable>NAME</replaceable> can be the string
257
 
            <quote><literal>none</literal></quote>; this will not use
258
 
            any specific interface, and will not bring up an interface
259
 
            on startup.  This is not recommended, and only meant for
260
 
            advanced users.
 
263
            <quote><literal>none</literal></quote>; this will make
 
264
            <command>&COMMANDNAME;</command> only bring up interfaces
 
265
            specified <emphasis>before</emphasis> this string.  This
 
266
            is not recommended, and only meant for advanced users.
261
267
          </para>
262
268
        </listitem>
263
269
      </varlistentry>
305
311
        <listitem>
306
312
          <para>
307
313
            Sets the number of bits to use for the prime number in the
308
 
            TLS Diffie-Hellman key exchange.  Default is 1024.
 
314
            TLS Diffie-Hellman key exchange.  The default value is
 
315
            selected automatically based on the OpenPGP key.
309
316
          </para>
310
317
        </listitem>
311
318
      </varlistentry>
508
515
              It is not necessary to print any non-executable files
509
516
              already in the network hook directory, these will be
510
517
              copied implicitly if they otherwise satisfy the name
511
 
              requirement.
 
518
              requirements.
512
519
            </para>
513
520
          </listitem>
514
521
        </varlistentry>
662
669
    </para>
663
670
    <informalexample>
664
671
      <para>
665
 
        Normal invocation needs no options, if the network interface
 
672
        Normal invocation needs no options, if the network interfaces
666
673
        can be automatically determined:
667
674
      </para>
668
675
      <para>
671
678
    </informalexample>
672
679
    <informalexample>
673
680
      <para>
674
 
        Search for Mandos servers (and connect to them) using another
675
 
        interface:
 
681
        Search for Mandos servers (and connect to them) using one
 
682
        specific interface:
676
683
      </para>
677
684
      <para>
678
685
        <!-- do not wrap this line -->
742
749
    <para>
743
750
      It will also help if the checker program on the server is
744
751
      configured to request something from the client which can not be
745
 
      spoofed by someone else on the network, unlike unencrypted
746
 
      <acronym>ICMP</acronym> echo (<quote>ping</quote>) replies.
 
752
      spoofed by someone else on the network, like SSH server key
 
753
      fingerprints, and unlike unencrypted <acronym>ICMP</acronym>
 
754
      echo (<quote>ping</quote>) replies.
747
755
    </para>
748
756
    <para>
749
757
      <emphasis>Note</emphasis>: This makes it completely insecure to
842
850
              <para>
843
851
                This client uses IPv6 link-local addresses, which are
844
852
                immediately usable since a link-local addresses is
845
 
                automatically assigned to a network interfaces when it
 
853
                automatically assigned to a network interface when it
846
854
                is brought up.
847
855
              </para>
848
856
            </listitem>