/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 19:22:08 UTC
  • Revision ID: teddy@recompile.se-20190228192208-1bkaewjx1vzar0sl
mandos-ctl: Use logging module instead of print() for errors

* mandos-ctl (log): New logging object.
  (main): Use log instead of print("<message>", file=sys.stderr).

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
#
40
40
import os
41
41
import collections
42
42
import json
 
43
import unittest
 
44
import logging
43
45
 
44
46
import dbus
45
47
 
 
48
log = logging.getLogger(sys.argv[0])
 
49
logging.basicConfig(level="INFO", # Show info level messages
 
50
                    format="%(message)s") # Show basic log messages
 
51
 
46
52
if sys.version_info.major == 2:
47
53
    str = unicode
48
54
 
76
82
server_path = "/"
77
83
server_interface = domain + ".Mandos"
78
84
client_interface = domain + ".Mandos.Client"
79
 
version = "1.7.20"
 
85
version = "1.8.3"
80
86
 
81
87
 
82
88
try:
345
351
    if options.all and not has_actions(options):
346
352
        parser.error("--all requires an action.")
347
353
 
348
 
    if options.check:
349
 
        import doctest
350
 
        fail_count, test_count = doctest.testmod()
351
 
        sys.exit(os.EX_OK if fail_count == 0 else 1)
352
 
 
353
354
    try:
354
355
        bus = dbus.SystemBus()
355
356
        mandos_dbus_objc = bus.get_object(busname, server_path)
356
357
    except dbus.exceptions.DBusException:
357
 
        print("Could not connect to Mandos server", file=sys.stderr)
 
358
        log.critical("Could not connect to Mandos server")
358
359
        sys.exit(1)
359
360
 
360
361
    mandos_serv = dbus.Interface(mandos_dbus_objc,
379
380
            os.dup2(stderrcopy, sys.stderr.fileno())
380
381
            os.close(stderrcopy)
381
382
    except dbus.exceptions.DBusException as e:
382
 
        print("Access denied: "
383
 
              "Accessing mandos server through D-Bus: {}".format(e),
384
 
              file=sys.stderr)
 
383
        log.critical("Failed to access Mandos server through D-Bus:"
 
384
                     "\n%s", e)
385
385
        sys.exit(1)
386
386
 
387
387
    # Compile dict of (clients: properties) to process
398
398
                    clients[client_objc] = client
399
399
                    break
400
400
            else:
401
 
                print("Client not found on server: {!r}"
402
 
                      .format(name), file=sys.stderr)
 
401
                log.critical("Client not found on server: %r", name)
403
402
                sys.exit(1)
404
403
 
405
404
    if not has_actions(options) and clients:
493
492
                client.Approve(dbus.Boolean(False),
494
493
                               dbus_interface=client_interface)
495
494
 
 
495
 
 
496
class Test_milliseconds_to_string(unittest.TestCase):
 
497
    def test_all(self):
 
498
        self.assertEqual(milliseconds_to_string(93785000),
 
499
                         "1T02:03:05")
 
500
    def test_no_days(self):
 
501
        self.assertEqual(milliseconds_to_string(7385000), "02:03:05")
 
502
    def test_all_zero(self):
 
503
        self.assertEqual(milliseconds_to_string(0), "00:00:00")
 
504
    def test_no_fractional_seconds(self):
 
505
        self.assertEqual(milliseconds_to_string(400), "00:00:00")
 
506
        self.assertEqual(milliseconds_to_string(900), "00:00:00")
 
507
        self.assertEqual(milliseconds_to_string(1900), "00:00:01")
 
508
 
 
509
 
 
510
def should_only_run_tests():
 
511
    parser = argparse.ArgumentParser(add_help=False)
 
512
    parser.add_argument("--check", action='store_true')
 
513
    args, unknown_args = parser.parse_known_args()
 
514
    run_tests = args.check
 
515
    if run_tests:
 
516
        # Remove --check argument from sys.argv
 
517
        sys.argv[1:] = unknown_args
 
518
    return run_tests
 
519
 
 
520
# Add all tests from doctest strings
 
521
def load_tests(loader, tests, none):
 
522
    import doctest
 
523
    tests.addTests(doctest.DocTestSuite())
 
524
    return tests
496
525
 
497
526
if __name__ == "__main__":
498
 
    main()
 
527
    if should_only_run_tests():
 
528
        # Call using ./tdd-python-script --check [--verbose]
 
529
        unittest.main()
 
530
    else:
 
531
        main()