/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 mandos-monitor

  • Committer: Teddy Hogeborn
  • Date: 2016-03-09 21:23:21 UTC
  • Revision ID: teddy@recompile.se-20160309212321-2qlkzj9tecepc8xq
Server: Add Python 3 compatibility

Add Python 3 compatibility by not using the python-avahi module.  Also
fix miscellaneous things which differs in Python 3.  Especially hard
to fix is loading and saving clients data between Python 3 and 2,
since pickle formats have problems with strings.

* INSTALL: Remove python-avahi (and change python-gobject to
  python-gi, which is preferred now).
* debian/control (Source: mandos/Build-Depends-Indep): Remove
  "python-avahi".
* mandos: Wrap future_builtins import in try-except clause.  Do not
  import avahi module.  Use codecs.decode(..., "base64) instead of
  .decode("base64).  Use .keys(), .values(), and .items() instead of
  .iterkeys(), .itervalues(), and .iteritems().
  (alternate_dbus_interfaces/wrapper): Python 3 still requires the
  "black magic", but luckily it still works.  The Python 3 type()
  constructor requires first argument to be a string, not a byte
  string.
  (copy_function): New.  Use throughout.
  (Avahi, avahi): New class and global variable.
  (GnuTLS._need_version): Changed to be a byte string.
  (main): Decode byte strings loaded from pickle file.
  (main/cleanup): Dump using pickle prototoc 2 which Python 2 can
  read.

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
4
4
# Mandos Monitor - Control and monitor the Mandos server
5
5
6
 
# Copyright © 2009-2015 Teddy Hogeborn
7
 
# Copyright © 2009-2015 Björn Påhlsson
 
6
# Copyright © 2009-2016 Teddy Hogeborn
 
7
# Copyright © 2009-2016 Björn Påhlsson
8
8
9
9
# This program is free software: you can redistribute it and/or modify
10
10
# it under the terms of the GNU General Public License as published by
40
40
 
41
41
from dbus.mainloop.glib import DBusGMainLoop
42
42
try:
43
 
    import gobject
 
43
    from gi.repository import GObject
44
44
except ImportError:
45
 
    from gi.repository import GObject as gobject
 
45
    import gobject as GObject
46
46
 
47
47
import dbus
48
48
 
60
60
domain = 'se.recompile'
61
61
server_interface = domain + '.Mandos'
62
62
client_interface = domain + '.Mandos.Client'
63
 
version = "1.7.0"
 
63
version = "1.7.5"
64
64
 
65
65
try:
66
66
    dbus.OBJECT_MANAGER_IFACE
172
172
        """
173
173
        if flag and self._update_timer_callback_tag is None:
174
174
            # Will update the shown timer value every second
175
 
            self._update_timer_callback_tag = (gobject.timeout_add
 
175
            self._update_timer_callback_tag = (GObject.timeout_add
176
176
                                               (1000,
177
177
                                                self.update_timer))
178
178
        elif not (flag or self._update_timer_callback_tag is None):
179
 
            gobject.source_remove(self._update_timer_callback_tag)
 
179
            GObject.source_remove(self._update_timer_callback_tag)
180
180
            self._update_timer_callback_tag = None
181
181
    
182
182
    def checker_completed(self, exitstatus, condition, command):
309
309
            self.update_hook()
310
310
    
311
311
    def update_timer(self):
312
 
        """called by gobject. Will indefinitely loop until
313
 
        gobject.source_remove() on tag is called"""
 
312
        """called by GObject. Will indefinitely loop until
 
313
        GObject.source_remove() on tag is called"""
314
314
        self.update()
315
315
        return True             # Keep calling this
316
316
    
317
317
    def delete(self, **kwargs):
318
318
        if self._update_timer_callback_tag is not None:
319
 
            gobject.source_remove(self._update_timer_callback_tag)
 
319
            GObject.source_remove(self._update_timer_callback_tag)
320
320
            self._update_timer_callback_tag = None
321
321
        for match in self.match_objects:
322
322
            match.remove()
465
465
                              "q: Quit  ?: Help"))
466
466
        
467
467
        self.busname = domain + '.Mandos'
468
 
        self.main_loop = gobject.MainLoop()
 
468
        self.main_loop = GObject.MainLoop()
469
469
    
470
470
    def client_not_found(self, fingerprint, address):
471
471
        self.log_message("Client with address {} and fingerprint {}"
640
640
                            path=path)
641
641
        
642
642
        self.refresh()
643
 
        self._input_callback_tag = (gobject.io_add_watch
 
643
        self._input_callback_tag = (GObject.io_add_watch
644
644
                                    (sys.stdin.fileno(),
645
 
                                     gobject.IO_IN,
 
645
                                     GObject.IO_IN,
646
646
                                     self.process_input))
647
647
        self.main_loop.run()
648
648
        # Main loop has finished, we should close everything now
649
 
        gobject.source_remove(self._input_callback_tag)
 
649
        GObject.source_remove(self._input_callback_tag)
650
650
        self.screen.stop()
651
651
    
652
652
    def stop(self):