/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 TODO

  • Committer: Teddy Hogeborn
  • Date: 2019-08-02 22:16:53 UTC
  • Revision ID: teddy@recompile.se-20190802221653-ic1iko9hbefzwsk7
Fix bug in server Debian package: Fails to start on first install

There has been a very long-standing bug where installation of the
server (the "mandos" Debian package) would fail to start the server
properly right after installation.  It would work on manual (re)start
after installation, or after reboot, and even after package purge and
reinstall, it would then work the first time.  The problem, it turns
out, is when the new "_mandos" user (and corresponding group) is
created, the D-Bus server is not reloaded, and is therefore not aware
of that user, and does not recognize the user and group name in the
/etc/dbus-1/system.d/mandos.conf file.  The Mandos server, when it
tries to start and access the D-Bus, is then not permitted to connect
to its D-Bus bus name, and disables D-Bus use as a fallback measure;
i.e. the server works, but it is not controllable via D-Bus commands
(via mandos-ctl or mandos-monitor).  The next time the D-Bus daemon is
reloaded for any reason, the new user & group would become visible to
the D-Bus daemon and after that, any restart of the Mandos server
would succeed and it would bind to its D-Bus name properly, and
thereby be visible and controllable by mandos-ctl & mandos-monitor.
This was mostly invisible when using sysvinit, but systemd makes the
problem visible since the systemd service file for the Mandos server
is configured to not consider the Mandos server "started" until the
D-Bus name has been bound; this makes the starting of the service wait
for 90 seconds and then fail with a timeout error.

Fixing this should also make the Debian CI autopkgtest tests work.

* debian/mandos.postinst (configure): After creating (or renaming)
                                      user & group, reload D-Bus
                                      daemon (if present).

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
-*- org -*-
2
2
 
3
 
* Use _attribute_((nonnull)) wherever possible.
 
3
* Testing
 
4
** python-nemu
4
5
 
5
6
* mandos-applet
6
7
 
7
8
* mandos-client
 
9
** TODO A --server option which only adds to the server list.
 
10
   (Unlike --connect, which implicitly disables zeroconf.)
8
11
** TODO [#B] Use capabilities instead of seteuid().
9
 
** TODO [#B] Use struct sockaddr_storage instead of a union
 
12
   https://forums.grsecurity.net/viewtopic.php?f=7&t=2522
10
13
** TODO [#B] Use getaddrinfo(hints=AI_NUMERICHOST) instead of inet_pton()
11
 
** TODO [#B] Use getnameinfo(serv=NULL, NI_NUMERICHOST) instead of inet_ntop()
12
 
** TODO [#B] Prefer /run/tmp over /tmp, if it exists
 
14
** TODO [#C] Make start_mandos_communication() take "struct server".
 
15
** TODO [#C] --interfaces=regex,eth*,noregex (bridge-utils-interfaces(5))
 
16
** TODO [#A] Detect partial writes to stdout and exit with EX_TEMPFAIL
 
17
** TODO [#B] Use reallocarray() with GNU LibC 2.29 or later.
13
18
 
14
19
* splashy
15
20
** TODO [#B] use scandir(3) instead of readdir(3)
 
21
** TODO [#A] Detect partial writes to stdout and exit with EX_TEMPFAIL
16
22
 
17
 
* usplash
18
 
** TODO [#A] Make it work again
 
23
* usplash (Deprecated)
 
24
** TODO [#B] Make it work again
19
25
** TODO [#B] use scandir(3) instead of readdir(3)
20
 
** TODO Use [[info:libc:Argz%20Functions][argz_extract]]
 
26
** TODO [#A] Detect partial writes to stdout and exit with EX_TEMPFAIL
21
27
 
22
28
* askpass-fifo
23
 
** TODO [#B] Drop privileges after opening FIFO.
 
29
** TODO [#A] Detect partial writes to stdout and exit with EX_TEMPFAIL
24
30
 
25
31
* password-prompt
26
32
** TODO [#B] lock stdin (with flock()?)
 
33
** TODO [#A] Detect partial writes to stdout and exit with EX_TEMPFAIL
27
34
 
28
35
* plymouth
 
36
** TODO [#A] Detect partial writes to stdout and exit with EX_TEMPFAIL
 
37
** TODO [#B] Use reallocarray() with GNU LibC 2.29 or later.
29
38
 
30
39
* TODO [#B] passdev
31
40
 
32
41
* plugin-runner
33
42
** TODO handle printing for errors for plugins
34
 
*** Hook up stderr of plugins, buffer them, and prepend mandos pluig [plugin name]
35
 
** TODO [#B] use scandir(3) instead of readdir(3)
 
43
*** Hook up stderr of plugins, buffer them, and prepend "Mandos Plugin [plugin name]"
36
44
** TODO [#C] use same file name rules as run-parts(8)
37
45
** kernel command line option for debug info
38
 
** TODO [#B] Use openat()
 
46
** TODO [#A] Restart plugins which exit with EX_TEMPFAIL
39
47
 
40
48
* mandos (server)
41
 
** TODO [#A] Make all attributes properties!
 
49
** TODO [#B] --notify-command
 
50
   This would allow the mandos.service to use
 
51
   --notify-command="systemd-notify --pid --ready"
 
52
** TODO [#B] python-systemd
 
53
*** import systemd.daemon; systemd.daemon.notify()
42
54
** TODO [#B] Log level                                                    :BUGS:
43
 
** TODO Persistent state                                                  :BUGS:
44
 
   /var/lib/mandos/*
45
55
*** TODO /etc/mandos/clients.d/*.conf
46
56
    Watch this directory and add/remove/update clients?
47
57
** TODO [#C] config for TXT record
48
 
** TODO Log level option
49
 
   syslogger.setLevel(logging.WARNING)
50
 
   + SetLogLevel D-Bus call
51
 
** TODO Implement --foreground                                            :BUGS:
52
 
   [[info:standards:Option%20Table][Table of Long Options]]
53
 
** TODO Implement --socket
54
 
   [[info:standards:Option%20Table][Table of Long Options]]
55
 
** TODO Date+time on console log messages                                 :BUGS:
56
 
   Is this the default?
 
58
** TODO Log level dbus option
 
59
   SetLogLevel D-Bus call
57
60
** TODO [#C] DBusServiceObjectUsingSuper
58
61
** TODO [#B] Global enable/disable flag
59
 
** TODO [#B] By-client countdown on secrets given
60
 
** TODO [#B] Fix problem with fsck taking a really long time
61
 
   Whenever a client successfully gets a secret it could get a
62
 
   one-time timeout boost to allow for an fsck-incurred delay
63
 
** TODO [#B] Support RFC 3339 time duration syntax
64
 
** More D-Bus methods
65
 
*** NeedsPassword(50) - Timeout, default disapprove
 
62
** TODO [#B] By-client countdown on number of secrets given
 
63
** D-Bus Client method NeedsPassword(50) - Timeout, default disapprove
66
64
    + SetPass(u"gazonk", True) -> Approval, persistent
67
65
    + Approve(False) -> Close client connection immediately
68
66
** TODO [#C] python-parsedatetime
69
 
** TODO [#C] systemd/launchd
70
 
   http://0pointer.de/blog/projects/systemd.html
71
67
** TODO Separate logging logic to own object
72
 
** TODO make clients to a dict!
73
 
** TODO [#A] Limit approval_delay to max gnutls/tls timeout value
 
68
** TODO [#B] Limit approval_delay to max gnutls/tls timeout value
74
69
** TODO [#B] break the wait on approval_delay if connection dies
75
70
** TODO Generate Client.runtime_expansions from client options + extra
76
71
** TODO Allow %%(checker)s as a runtime expansion
77
 
** TODO Use python-tlslite?
78
 
 
79
 
* mandos.xml
80
 
** Add mandos contact info in manual pages
 
72
** TODO D-Bus AddClient() method on server object
 
73
** TODO Use org.freedesktop.DBus.Method.NoReply annotation on async methods. :2:
 
74
** TODO Save state periodically to recover better from hard shutdowns
 
75
** TODO CheckerCompleted method, deprecate CheckedOK
 
76
** TODO Secret Service API?
 
77
   https://standards.freedesktop.org/secret-service/
 
78
** TODO Remove D-Bus interfaces with old domain name                      :2:
 
79
** TODO Remove old string_to_delta format                                 :2:
 
80
** TODO http://0pointer.de/blog/projects/stateless.html
 
81
*** File in /usr/lib/sysusers.d to create user+group "_mandos"
 
82
** TODO Error handling on error parsing config files
 
83
** TODO init.d script error handling
 
84
** TODO D-Bus server properties; address, port, interface, etc.           :2:
 
85
** Python 3                                                               :2:
 
86
*** TODO [#C] In Python 3.3, use shlex.quote() instead of re.escape()
81
87
 
82
88
* mandos-ctl
83
 
*** Handle "no D-Bus server" and/or "no Mandos server found" better
84
 
*** [#B] --dump option
85
 
** TODO Support RFC 3339 time duration syntax
 
89
** TODO Remove old string_to_delta format                                 :2:
86
90
 
87
91
* TODO mandos-dispatch
88
92
  Listens for specified D-Bus signals and spawns shell commands with
89
93
  arguments.
90
94
 
91
95
* mandos-monitor
 
96
** TODO --servicename                                                  :BUGS:
92
97
** TODO help should be toggleable
93
98
** Urwid client data displayer
94
99
   Better view of client data in the listing
95
100
*** Properties popup
96
 
** Nicer crashes. Stack traces Messes up shell.
97
 
*** Print a nice "We are sorry" message, save stack trace to log.
98
 
** Show timeout countdown for approval
 
101
** Print a nice "We are sorry" message, save stack trace to log.
99
102
 
100
103
* mandos-keygen
101
104
** TODO "--secfile" option
103
106
** TODO [#B] "--test" option
104
107
   For testing decryption before rebooting.
105
108
 
106
 
* Makefile
107
 
** TODO [#C] Implement DEB_BUILD_OPTIONS
108
 
   http://www.debian.org/doc/debian-policy/ch-source.html#s-debianrules-options
109
 
 
110
109
* Package
111
110
** /usr/share/initramfs-tools/hooks/mandos
112
111
*** TODO [#C] use same file name rules as run-parts(8)
113
112
*** TODO [#C] Do not install in initrd.img if configured not to.
114
113
    Use "/etc/initramfs-tools/hooksconf.d/mandos"?
115
 
** TODO [#C] /etc/bash_completion.d/mandos
 
114
** TODO [#C] $(pkg-config --variable=completionsdir bash-completion)
116
115
   From XML sources directly?
117
116
 
118
117
* Side Stuff
119
 
** TODO Locate which packet move the other bin/sh when busy box is deactivated
120
 
** TODO contact owner of packet, and ask them to have that shell static in position regardless of busybox
 
118
** TODO Locate which package moves the other bin/sh when busybox is deactivated
 
119
** TODO contact owner of package, and ask them to have that shell static in position regardless of busybox
 
120
 
 
121
* [[http://www.undeadly.org/cgi?action=article&sid=20110530221728][OpenBSD]]
121
122
 
122
123
 
123
124
#+STARTUP: showall