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

  • Committer: Teddy Hogeborn
  • Date: 2019-02-28 20:57:45 UTC
  • Revision ID: teddy@recompile.se-20190228205745-zl3bd1yoz0q343lm
mandos-ctl: Use isinstance(x, X) instead of type(x) is X

* mandos-ctl (print_clients): Don't use type(value) and check for
                              dbus.Boolean instances exactly; use
                              isinstance() to be more generic.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
#!/usr/bin/python
2
 
# -*- mode: python; coding: utf-8 -*-
 
2
# -*- mode: python; coding: utf-8; after-save-hook: (lambda () (let ((command (if (and (boundp 'tramp-file-name-structure) (string-match (car tramp-file-name-structure) (buffer-file-name))) (tramp-file-name-localname (tramp-dissect-file-name (buffer-file-name))) (buffer-file-name)))) (if (= (shell-command (format "%s --check" (shell-quote-argument command)) "*Test*") 0) (let ((w (get-buffer-window "*Test*"))) (if w (delete-window w)) (kill-buffer "*Test*")) (display-buffer "*Test*")))); -*-
3
3
#
4
4
# Mandos Monitor - Control and monitor the Mandos server
5
5
#
41
41
import collections
42
42
import json
43
43
import unittest
 
44
import logging
44
45
 
45
46
import dbus
46
47
 
 
48
# Show warnings by default
 
49
if not sys.warnoptions:
 
50
    import warnings
 
51
    warnings.simplefilter("default")
 
52
 
 
53
log = logging.getLogger(sys.argv[0])
 
54
logging.basicConfig(level="INFO", # Show info level messages
 
55
                    format="%(message)s") # Show basic log messages
 
56
 
 
57
logging.captureWarnings(True)   # Show warnings via the logging system
 
58
 
47
59
if sys.version_info.major == 2:
48
60
    str = unicode
49
61
 
237
249
 
238
250
def print_clients(clients, keywords):
239
251
    def valuetostring(value, keyword):
240
 
        if type(value) is dbus.Boolean:
 
252
        if isinstance(value, dbus.Boolean):
241
253
            return "Yes" if value else "No"
242
254
        if keyword in ("Timeout", "Interval", "ApprovalDelay",
243
255
                       "ApprovalDuration", "ExtendedTimeout"):
350
362
        bus = dbus.SystemBus()
351
363
        mandos_dbus_objc = bus.get_object(busname, server_path)
352
364
    except dbus.exceptions.DBusException:
353
 
        print("Could not connect to Mandos server", file=sys.stderr)
 
365
        log.critical("Could not connect to Mandos server")
354
366
        sys.exit(1)
355
367
 
356
368
    mandos_serv = dbus.Interface(mandos_dbus_objc,
375
387
            os.dup2(stderrcopy, sys.stderr.fileno())
376
388
            os.close(stderrcopy)
377
389
    except dbus.exceptions.DBusException as e:
378
 
        print("Access denied: "
379
 
              "Accessing mandos server through D-Bus: {}".format(e),
380
 
              file=sys.stderr)
 
390
        log.critical("Failed to access Mandos server through D-Bus:"
 
391
                     "\n%s", e)
381
392
        sys.exit(1)
382
393
 
383
394
    # Compile dict of (clients: properties) to process
394
405
                    clients[client_objc] = client
395
406
                    break
396
407
            else:
397
 
                print("Client not found on server: {!r}"
398
 
                      .format(name), file=sys.stderr)
 
408
                log.critical("Client not found on server: %r", name)
399
409
                sys.exit(1)
400
410
 
401
411
    if not has_actions(options) and clients:
490
500
                               dbus_interface=client_interface)
491
501
 
492
502
 
 
503
class Test_milliseconds_to_string(unittest.TestCase):
 
504
    def test_all(self):
 
505
        self.assertEqual(milliseconds_to_string(93785000),
 
506
                         "1T02:03:05")
 
507
    def test_no_days(self):
 
508
        self.assertEqual(milliseconds_to_string(7385000), "02:03:05")
 
509
    def test_all_zero(self):
 
510
        self.assertEqual(milliseconds_to_string(0), "00:00:00")
 
511
    def test_no_fractional_seconds(self):
 
512
        self.assertEqual(milliseconds_to_string(400), "00:00:00")
 
513
        self.assertEqual(milliseconds_to_string(900), "00:00:00")
 
514
        self.assertEqual(milliseconds_to_string(1900), "00:00:01")
 
515
 
 
516
 
493
517
def should_only_run_tests():
494
518
    parser = argparse.ArgumentParser(add_help=False)
495
519
    parser.add_argument("--check", action='store_true')