/mandos/release

To get this branch, use:
bzr branch http://bzr.recompile.se/loggerhead/mandos/release

« back to all changes in this revision

Viewing changes to mandos-ctl

  • Committer: Björn Påhlsson
  • Date: 2008-07-20 02:52:20 UTC
  • Revision ID: belorn@braxen-20080720025220-r5u0388uy9iu23h6
Added following support:
Pluginbased client handler
rewritten Mandos client
       Avahi instead of udp server discovery
       openpgp encrypted key support
Passprompt stand alone application for direct console input
Added logging for Mandos server

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
#!/usr/bin/python
2
 
# -*- mode: python; coding: utf-8 -*-
3
 
 
4
 
import sys
5
 
import dbus
6
 
from optparse import OptionParser
7
 
import locale
8
 
 
9
 
locale.setlocale(locale.LC_ALL, u'')
10
 
 
11
 
tablewords = {
12
 
    'name': u'Name',
13
 
    'enabled': u'Enabled',
14
 
    'timeout': u'Timeout',
15
 
    'last_checked_ok': u'Last Successful Check',
16
 
    'created': u'Created',
17
 
    'interval': u'Interval',
18
 
    'host': u'Host',
19
 
    'fingerprint': u'Fingerprint',
20
 
    'checker_running': u'Check Is Running',
21
 
    'last_enabled': u'Last Enabled',
22
 
    'checker': u'Checker',
23
 
    }
24
 
defaultkeywords = ('name', 'enabled', 'timeout', 'last_checked_ok',
25
 
                   'checker')
26
 
busname = 'org.mandos-system.Mandos'
27
 
server_path = '/Mandos'
28
 
server_interface = 'org.mandos_system.Mandos'
29
 
client_interface = 'org.mandos_system.Mandos.Client'
30
 
version = "1.0.2"
31
 
 
32
 
bus = dbus.SystemBus()
33
 
mandos_dbus_objc = bus.get_object(busname, server_path)
34
 
mandos_serv = dbus.Interface(mandos_dbus_objc,
35
 
                             dbus_interface = server_interface)
36
 
mandos_clients = mandos_serv.GetAllClientsWithProperties()
37
 
 
38
 
def print_clients():
39
 
    def valuetostring(x):
40
 
        if type(x) is dbus.Boolean:
41
 
            return u"Yes" if x else u"No"
42
 
        else:
43
 
            return unicode(x)
44
 
    format_string = u' '.join(u'%%-%ds' %
45
 
                              max(len(tablewords[key]),
46
 
                                  max(len(valuetostring(client[key]))
47
 
                                      for client in
48
 
                                      mandos_clients.itervalues()))
49
 
                              for key in keywords)
50
 
    print format_string % tuple(tablewords[key] for key in keywords) 
51
 
    for client in mandos_clients.itervalues():
52
 
        print format_string % tuple(valuetostring(client[key])
53
 
                                    for key in keywords)
54
 
 
55
 
parser = OptionParser(version = "%%prog %s" % version)
56
 
parser.add_option("-a", "--all", action="store_true",
57
 
                  help="Print all fields")
58
 
parser.add_option("-e", "--enable", action="store_true",
59
 
                  help="Enable specified client")
60
 
parser.add_option("-d", "--disable", action="store_true",
61
 
                  help="disable specified client")
62
 
parser.add_option("-b", "--bumptimeout", action="store_true",
63
 
                  help="Bump timeout of specified client")
64
 
parser.add_option("-s", "--startchecker", action="store_true",
65
 
                  help="Start checker for specified client")
66
 
parser.add_option("-S", "--stopchecker", action="store_true",
67
 
                  help="Stop checker for specified client")
68
 
options, client_names = parser.parse_args()
69
 
 
70
 
clients=[]
71
 
for name in client_names:
72
 
    for path, client in mandos_clients.iteritems():
73
 
        if client['name'] == name:
74
 
            client_objc = bus.get_object(busname, path)
75
 
            clients.append(dbus.Interface(client_objc,
76
 
                                          dbus_interface
77
 
                                          = client_interface))
78
 
            break
79
 
    else:
80
 
        print >> sys.stderr, "Client not found on server: %r" % name
81
 
        sys.exit(1)
82
 
 
83
 
if not clients:
84
 
    keywords = defaultkeywords
85
 
    if options.all:
86
 
        keywords = ('name', 'enabled', 'timeout', 'last_checked_ok',
87
 
                    'created', 'interval', 'host', 'fingerprint',
88
 
                    'checker_running', 'last_enabled', 'checker')
89
 
    print_clients()
90
 
 
91
 
for client in clients:
92
 
    if options.enable:
93
 
        client.Enable()
94
 
    if options.disable:
95
 
        client.Disable()
96
 
    if options.bumptimeout:
97
 
        client.BumpTimeout()
98
 
    if options.startchecker:
99
 
        client.StartChecker()
100
 
    if options.stopchecker:
101
 
        client.StopChecker()
102