38
35
dbus_interface = server_interface)
39
36
mandos_clients = mandos_serv.GetAllClientsWithProperties()
41
def datetime_to_milliseconds(dt):
42
"Return the 'timeout' attribute in milliseconds"
43
return ((dt.days * 24 * 60 * 60 * 1000)
45
+ (dt.microseconds // 1000))
47
def milliseconds_to_string(ms):
48
td = datetime.timedelta(0, 0, 0, ms)
49
return "%s%02d:%02d:%02d" % (("%dT" % td.days) if td.days else "", # days
50
td.seconds // 3600, # hours
51
(td.seconds % 3600) // 60, # minutes
52
(td.seconds % 60)) # seconds
55
def string_to_delta(interval):
56
"""Parse a string and return a datetime.timedelta
58
>>> string_to_delta('7d')
60
>>> string_to_delta('60s')
61
datetime.timedelta(0, 60)
62
>>> string_to_delta('60m')
63
datetime.timedelta(0, 3600)
64
>>> string_to_delta('24h')
66
>>> string_to_delta(u'1w')
68
>>> string_to_delta('5m 30s')
69
datetime.timedelta(0, 330)
71
timevalue = datetime.timedelta(0)
72
regexp = re.compile("\d+[dsmhw]")
74
for s in regexp.findall(interval):
76
suffix = unicode(s[-1])
79
delta = datetime.timedelta(value)
81
delta = datetime.timedelta(0, value)
83
delta = datetime.timedelta(0, 0, 0, 0, value)
85
delta = datetime.timedelta(0, 0, 0, 0, 0, value)
87
delta = datetime.timedelta(0, 0, 0, 0, 0, 0, value)
90
except (ValueError, IndexError):
95
def print_clients(clients):
96
def valuetostring(value, keyword):
97
if type(value) is dbus.Boolean:
98
return u"Yes" if value else u"No"
99
if keyword in ("timeout", "interval"):
100
return milliseconds_to_string(value)
101
return unicode(value)
40
if type(x) is dbus.Boolean:
41
return u"Yes" if x else u"No"
103
44
format_string = u' '.join(u'%%-%ds' %
104
45
max(len(tablewords[key]),
105
max(len(valuetostring(client[key], key))
46
max(len(valuetostring(client[key]))
48
mandos_clients.itervalues()))
108
49
for key in keywords)
109
50
print format_string % tuple(tablewords[key] for key in keywords)
110
for client in clients:
111
print format_string % tuple(valuetostring(client[key], key)
51
for client in mandos_clients.itervalues():
52
print format_string % tuple(valuetostring(client[key])
112
53
for key in keywords)
114
55
parser = OptionParser(version = "%%prog %s" % version)
118
59
help="Enable specified client")
119
60
parser.add_option("-d", "--disable", action="store_true",
120
61
help="disable specified client")
121
parser.add_option("-b", "--bump-timeout", action="store_true",
62
parser.add_option("-b", "--bumptimeout", action="store_true",
122
63
help="Bump timeout of specified client")
123
parser.add_option("--start-checker", action="store_true",
64
parser.add_option("-s", "--startchecker", action="store_true",
124
65
help="Start checker for specified client")
125
parser.add_option("--stop-checker", action="store_true",
126
help="Stop checker for specified client")
127
parser.add_option("-v", "--is-valid", action="store_true",
128
help="Stop checker for specified client")
129
parser.add_option("-c", "--checker", type="string",
130
help="Set checker command for specified client")
131
parser.add_option("-t", "--timeout", type="string",
132
help="Set timeout for specified client")
133
parser.add_option("-i", "--interval", type="string",
134
help="Set checker interval for specified client")
135
parser.add_option("-H", "--host", type="string",
136
help="Set host for specified client")
137
parser.add_option("-s", "--secret", type="string",
138
help="Set password blob (file) for specified client")
66
parser.add_option("-S", "--stopchecker", action="store_true",
67
help="Stop checker for specified client")
139
68
options, client_names = parser.parse_args()
157
86
keywords = ('name', 'enabled', 'timeout', 'last_checked_ok',
158
87
'created', 'interval', 'host', 'fingerprint',
159
88
'checker_running', 'last_enabled', 'checker')
160
print_clients(mandos_clients.values())
162
91
for client in clients:
163
92
if options.enable:
165
94
if options.disable:
167
if options.bump_timeout:
96
if options.bumptimeout:
168
97
client.BumpTimeout()
169
if options.start_checker:
98
if options.startchecker:
170
99
client.StartChecker()
171
if options.stop_checker:
100
if options.stopchecker:
172
101
client.StopChecker()
174
sys.exit(0 if client.IsStillValid() else 1)
176
client.SetChecker(options.checker)
178
client.SetHost(options.host)
180
client.SetInterval(datetime_to_milliseconds
181
(string_to_delta(options.interval)))
183
client.SetTimeout(datetime_to_milliseconds
184
(string_to_delta(options.timeout)))
186
client.SetSecret(dbus.ByteArray(open(options.secret, 'rb').read()))