/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: 2014-07-25 23:16:04 UTC
  • mto: This revision was merged to the branch mainline in revision 724.
  • Revision ID: teddy@recompile.se-20140725231604-f5c4f82rn2o5ll1k
Use the .items() method instead of .iteritems().

This is strictly not a Python 2.7 change, but Python 2.7 backported
the new .viewitems() from Python 3, and instead of changing .items()
to .viewitems() and later having to change them all into .items()
again in Python 3, I opted to just change all .iteritems() to .items()
so the code will work both now and with Python 3.  The slowdown with
Python 2 is not significant, and with Python 3 it will again be fast.

* mandos (Client.__init__): Use .items() instead of .iteritems().
  (DBusObjectWithProperties.Introspect): - '' -
  (alternate_dbus_interfaces/wrapper): - '' -
  (main): - '' -
* mandos-ctl (main): - '' -

Show diffs side-by-side

added added

removed removed

Lines of Context:
3
3
4
4
# Mandos Monitor - Control and monitor the Mandos server
5
5
6
 
# Copyright © 2008-2012 Teddy Hogeborn
7
 
# Copyright © 2008-2012 Björn Påhlsson
 
6
# Copyright © 2008-2014 Teddy Hogeborn
 
7
# Copyright © 2008-2014 Björn Påhlsson
8
8
9
9
# This program is free software: you can redistribute it and/or modify
10
10
# it under the terms of the GNU General Public License as published by
26
26
from __future__ import (division, absolute_import, print_function,
27
27
                        unicode_literals)
28
28
 
29
 
from future_builtins import *
 
29
try:
 
30
    from future_builtins import *
 
31
except ImportError:
 
32
    pass
30
33
 
31
34
import sys
32
35
import argparse
39
42
 
40
43
import dbus
41
44
 
 
45
if sys.version_info[0] == 2:
 
46
    str = unicode
 
47
 
42
48
locale.setlocale(locale.LC_ALL, "")
43
49
 
44
50
tablewords = {
66
72
server_path = "/"
67
73
server_interface = domain + ".Mandos"
68
74
client_interface = domain + ".Mandos.Client"
69
 
version = "1.6.1"
 
75
version = "1.6.7"
70
76
 
71
77
def timedelta_to_milliseconds(td):
72
78
    """Convert a datetime.timedelta object to milliseconds"""
151
157
    token_duration = Token(re.compile(r"P"), None,
152
158
                           frozenset((token_year, token_month,
153
159
                                      token_day, token_time,
154
 
                                      token_week))),
 
160
                                      token_week)))
155
161
    # Define starting values
156
162
    value = datetime.timedelta() # Value so far
157
163
    found_token = None
158
 
    followers = frozenset(token_duration,) # Following valid tokens
 
164
    followers = frozenset((token_duration,)) # Following valid tokens
159
165
    s = duration                # String left to parse
160
166
    # Loop until end token is found
161
167
    while found_token is not token_end:
230
236
        if keyword in ("Timeout", "Interval", "ApprovalDelay",
231
237
                       "ApprovalDuration", "ExtendedTimeout"):
232
238
            return milliseconds_to_string(value)
233
 
        return unicode(value)
 
239
        return str(value)
234
240
    
235
241
    # Create format string to print table rows
236
242
    format_string = " ".join("{{{key}:{width}}}".format(
243
249
    # Print header line
244
250
    print(format_string.format(**tablewords))
245
251
    for client in clients:
246
 
        print(format_string.format(**dict((key,
 
252
        print(format_string.format(**{ key:
247
253
                                           valuetostring(client[key],
248
 
                                                         key))
249
 
                                          for key in keywords)))
 
254
                                                         key)
 
255
                                       for key in keywords }))
250
256
 
251
257
def has_actions(options):
252
258
    return any((options.enable,
310
316
    parser.add_argument("--approval-duration",
311
317
                        help="Set duration of one client approval")
312
318
    parser.add_argument("-H", "--host", help="Set host for client")
313
 
    parser.add_argument("-s", "--secret", type=file,
 
319
    parser.add_argument("-s", "--secret",
 
320
                        type=argparse.FileType(mode="rb"),
314
321
                        help="Set password blob (file) for client")
315
322
    parser.add_argument("-A", "--approve", action="store_true",
316
323
                        help="Approve any current client request")
331
338
 
332
339
    if options.check:
333
340
        fail_count, test_count = doctest.testmod()
334
 
        sys.exit(0 if fail_count == 0 else 1)
 
341
        sys.exit(os.EX_OK if fail_count == 0 else 1)
335
342
    
336
343
    try:
337
344
        bus = dbus.SystemBus()
365
372
    clients={}
366
373
    
367
374
    if options.all or not options.client:
368
 
        clients = dict((bus.get_object(busname, path), properties)
369
 
                       for path, properties in
370
 
                       mandos_clients.iteritems())
 
375
        clients = { bus.get_object(busname, path): properties
 
376
                    for path, properties in mandos_clients.items() }
371
377
    else:
372
378
        for name in options.client:
373
 
            for path, client in mandos_clients.iteritems():
 
379
            for path, client in mandos_clients.items():
374
380
                if client["Name"] == name:
375
381
                    client_objc = bus.get_object(busname, path)
376
382
                    clients[client_objc] = client