/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: Teddy Hogeborn
  • Date: 2008-08-02 10:48:24 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080802104824-fx0miwp9o4g9r31e
* plugbasedclient.c (struct process): New fields "eof", "completed",
                                      and "status".
  (handle_sigchld): New function.
  (main): Initialize "dir" to NULL to only closedir() it if necessary.
          Move "process_list" to be a global variable to be accessible
          by "handle_sigchld".  Make "handle_sigchld" handle SIGCHLD.
          Remove redundant check for NULL "dir".  Free "filename" when
          no longer used.  Block SIGCHLD around fork()/exec().
          Restore normal signals in child.  Only loop while running
          processes exist.  Print process buffer when the process is
          done and it has emitted EOF, not when it only emits EOF.
          Remove processes from list which exit non-cleanly.  In
          cleaning up, closedir() if necessary.  Bug fix: set next
          pointer correctly when freeing process list.

* plugins.d/passprompt.c (main): Do not ignore SIGQUIT.

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