/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/askpass-fifo.xml

  • Committer: teddy at recompile
  • Date: 2020-04-05 21:30:59 UTC
  • Revision ID: teddy@recompile.se-20200405213059-fb2a61ckqynrmatk
Fix file descriptor leak in mandos-client

When the local network has Mandos servers announcing themselves using
real, globally reachable, IPv6 addresses (i.e. not link-local
addresses), but there is no router on the local network providing IPv6
RA (Router Advertisement) packets, the client cannot reach the server
by normal means, since the client only has a link-local IPv6 address,
and has no usable route to reach the server's global IPv6 address.
(This is not a common situation, and usually only happens when the
router itself reboots and runs a Mandos client, since it cannot then
give RA packets to itself.)  The client code has a solution for
this, which consists of adding a temporary local route to reach the
address of the server during communication, and removing this
temporary route afterwards.

This solution with a temporary route works, but has a file descriptor
leak; it leaks one file descriptor for each addition and for each
removal of a route.  If one server requiring an added route is present
on the network, but no servers gives a password, making the client
retry after the default ten seconds, and we furthermore assume a
default 1024 open files limit, the client runs out of file descriptors
after about 90 minutes, after which time the client process will be
useless and fail to retrieve any passwords, necessitating manual
password entry via the keyboard.

Fix this by eliminating the file descriptor leak in the client.

* plugins.d/mandos-client.c (add_delete_local_route): Do
  close(devnull) also in parent process, also if fork() fails, and on
  any failure in child process.

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
<?xml version="1.0" encoding="UTF-8"?>
 
2
<!DOCTYPE refentry PUBLIC "-//OASIS//DTD DocBook XML V4.5//EN"
 
3
        "http://www.oasis-open.org/docbook/xml/4.5/docbookx.dtd" [
 
4
<!ENTITY COMMANDNAME "askpass-fifo">
 
5
<!ENTITY TIMESTAMP "2019-02-10">
 
6
<!ENTITY % common SYSTEM "../common.ent">
 
7
%common;
 
8
]>
 
9
 
 
10
<refentry xmlns:xi="http://www.w3.org/2001/XInclude">
 
11
  <refentryinfo>
 
12
    <title>Mandos Manual</title>
 
13
    <!-- NWalsh’s docbook scripts use this to generate the footer: -->
 
14
    <productname>Mandos</productname>
 
15
    <productnumber>&version;</productnumber>
 
16
    <date>&TIMESTAMP;</date>
 
17
    <authorgroup>
 
18
      <author>
 
19
        <firstname>Björn</firstname>
 
20
        <surname>Påhlsson</surname>
 
21
        <address>
 
22
          <email>belorn@recompile.se</email>
 
23
        </address>
 
24
      </author>
 
25
      <author>
 
26
        <firstname>Teddy</firstname>
 
27
        <surname>Hogeborn</surname>
 
28
        <address>
 
29
          <email>teddy@recompile.se</email>
 
30
        </address>
 
31
      </author>
 
32
    </authorgroup>
 
33
    <copyright>
 
34
      <year>2008</year>
 
35
      <year>2009</year>
 
36
      <year>2010</year>
 
37
      <year>2011</year>
 
38
      <year>2012</year>
 
39
      <year>2013</year>
 
40
      <year>2014</year>
 
41
      <year>2015</year>
 
42
      <year>2016</year>
 
43
      <year>2017</year>
 
44
      <year>2018</year>
 
45
      <year>2019</year>
 
46
      <holder>Teddy Hogeborn</holder>
 
47
      <holder>Björn Påhlsson</holder>
 
48
    </copyright>
 
49
  </refentryinfo>
 
50
  
 
51
  <refmeta>
 
52
    <refentrytitle>&COMMANDNAME;</refentrytitle>
 
53
    <manvolnum>8mandos</manvolnum>
 
54
  </refmeta>
 
55
  
 
56
  <refnamediv>
 
57
    <refname><command>&COMMANDNAME;</command></refname>
 
58
    <refpurpose>Mandos plugin to get a password from a
 
59
    FIFO.</refpurpose>
 
60
  </refnamediv>
 
61
  
 
62
  <refsynopsisdiv>
 
63
    <cmdsynopsis>
 
64
      <command>&COMMANDNAME;</command>
 
65
    </cmdsynopsis>
 
66
  </refsynopsisdiv>
 
67
  
 
68
  <refsect1 id="description">
 
69
    <title>DESCRIPTION</title>
 
70
    <para>
 
71
      This program reads a password from a <acronym>FIFO</acronym> and
 
72
      outputs it to standard output.
 
73
    </para>
 
74
    <para>
 
75
      This program is not very useful on its own.  This program is
 
76
      really meant to run as a plugin in the <application
 
77
      >Mandos</application> client-side system, where it is used as a
 
78
      fallback and alternative to retrieving passwords from a
 
79
      <application >Mandos</application> server.
 
80
    </para>
 
81
    <para>
 
82
      This program is meant to be imitate a feature of the
 
83
      <command>askpass</command> program, so that programs written to
 
84
      interface with it can keep working under the
 
85
      <application>Mandos</application> system.
 
86
    </para>
 
87
  </refsect1>
 
88
  
 
89
  <refsect1 id="options">
 
90
    <title>OPTIONS</title>
 
91
    <para>
 
92
      This program takes no options.
 
93
    </para>
 
94
  </refsect1>
 
95
  
 
96
  <refsect1 id="exit_status">
 
97
    <title>EXIT STATUS</title>
 
98
    <para>
 
99
      If exit status is 0, the output from the program is the password
 
100
      as it was read.  Otherwise, if exit status is other than 0, the
 
101
      program was interrupted or encountered an error, and any output
 
102
      so far could be corrupt and/or truncated, and should therefore
 
103
      be ignored.
 
104
    </para>
 
105
  </refsect1>
 
106
  
 
107
  <refsect1 id="files">
 
108
    <title>FILES</title>
 
109
    <variablelist>
 
110
      <varlistentry>
 
111
        <term><filename>/lib/cryptsetup/passfifo</filename></term>
 
112
        <listitem>
 
113
          <para>
 
114
            This is the <acronym>FIFO</acronym> where this program
 
115
            will read the password.  If it does not exist, it will be
 
116
            created.
 
117
          </para>
 
118
        </listitem>
 
119
      </varlistentry>
 
120
    </variablelist>
 
121
  </refsect1>
 
122
  
 
123
  <refsect1 id="bugs">
 
124
    <title>BUGS</title>
 
125
    <xi:include href="../bugs.xml"/>
 
126
  </refsect1>
 
127
  
 
128
  <refsect1 id="example">
 
129
    <title>EXAMPLE</title>
 
130
    <para>
 
131
      Note that normally, this program will not be invoked directly,
 
132
      but instead started by the Mandos <citerefentry><refentrytitle
 
133
      >plugin-runner</refentrytitle><manvolnum>8mandos</manvolnum>
 
134
      </citerefentry>.
 
135
    </para>
 
136
    <informalexample>
 
137
      <para>
 
138
        This program takes no options.
 
139
      </para>
 
140
      <para>
 
141
        <userinput>&COMMANDNAME;</userinput>
 
142
      </para>
 
143
    </informalexample>
 
144
  </refsect1>
 
145
  
 
146
  <refsect1 id="security">
 
147
    <title>SECURITY</title>
 
148
    <para>
 
149
      The only thing that could be considered worthy of note is
 
150
      this:  This program is meant to be run by <citerefentry>
 
151
      <refentrytitle>plugin-runner</refentrytitle><manvolnum
 
152
      >8mandos</manvolnum></citerefentry>, and will, when run
 
153
      standalone, outside, in a normal environment, immediately output
 
154
      on its standard output any presumably secret password it just
 
155
      received.  Therefore, when running this program standalone
 
156
      (which should never normally be done), take care not to type in
 
157
      any real secret password by force of habit, since it would then
 
158
      immediately be shown as output.
 
159
    </para>
 
160
  </refsect1>
 
161
  
 
162
  <refsect1 id="see_also">
 
163
    <title>SEE ALSO</title>
 
164
    <para>
 
165
      <citerefentry><refentrytitle>intro</refentrytitle>
 
166
      <manvolnum>8mandos</manvolnum></citerefentry>,
 
167
      <citerefentry><refentrytitle>fifo</refentrytitle>
 
168
      <manvolnum>7</manvolnum></citerefentry>,
 
169
      <citerefentry><refentrytitle>plugin-runner</refentrytitle>
 
170
      <manvolnum>8mandos</manvolnum></citerefentry>
 
171
    </para>
 
172
  </refsect1>
 
173
</refentry>
 
174
<!-- Local Variables: -->
 
175
<!-- time-stamp-start: "<!ENTITY TIMESTAMP [\"']" -->
 
176
<!-- time-stamp-end: "[\"']>" -->
 
177
<!-- time-stamp-format: "%:y-%02m-%02d" -->
 
178
<!-- End: -->