/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-monitor

  • Committer: Björn Påhlsson
  • Date: 2010-09-07 16:48:58 UTC
  • mto: (237.4.3 mandos-release)
  • mto: This revision was merged to the branch mainline in revision 421.
  • Revision ID: belorn@fukt.bsnet.se-20100907164858-tcg8hkxdj41zizac
mandos server: Added debuglevel that adjust at what level information
               should be reported.
plugin-runner, askpass-fifo, password-prompt, splasy, usplash:
               Using error instead of perror

Show diffs side-by-side

added added

removed removed

Lines of Context:
23
23
 
24
24
locale.setlocale(locale.LC_ALL, u'')
25
25
 
 
26
import logging
 
27
logging.getLogger('dbus.proxies').setLevel(logging.CRITICAL)
 
28
 
26
29
# Some useful constants
27
30
domain = 'se.bsnet.fukt'
28
31
server_interface = domain + '.Mandos'
29
32
client_interface = domain + '.Mandos.Client'
30
 
version = "1.0.14"
 
33
version = "1.0.15"
31
34
 
32
35
# Always run in monochrome mode
33
36
urwid.curses_display.curses.has_colors = lambda : False
50
53
                                     self.property_changed,
51
54
                                     client_interface,
52
55
                                     byte_arrays=True)
53
 
 
 
56
        
54
57
        self.properties.update(
55
58
            self.proxy.GetAll(client_interface,
56
59
                              dbus_interface = dbus.PROPERTIES_IFACE))
57
 
        super(MandosClientPropertyCache, self).__init__(
58
 
            proxy_object=proxy_object, *args, **kwargs)
 
60
 
 
61
        #XXX This break good super behaviour!
 
62
#        super(MandosClientPropertyCache, self).__init__(
 
63
#            *args, **kwargs)
59
64
    
60
65
    def property_changed(self, property=None, value=None):
61
66
        """This is called whenever we get a PropertyChanged signal
101
106
                                     self.got_secret,
102
107
                                     client_interface,
103
108
                                     byte_arrays=True)
 
109
        self.proxy.connect_to_signal(u"NeedApproval",
 
110
                                     self.need_approval,
 
111
                                     client_interface,
 
112
                                     byte_arrays=True)
104
113
        self.proxy.connect_to_signal(u"Rejected",
105
114
                                     self.rejected,
106
115
                                     client_interface,
108
117
    
109
118
    def checker_completed(self, exitstatus, condition, command):
110
119
        if exitstatus == 0:
111
 
            self.logger(u'Checker for client %s (command "%s")'
112
 
                        u' was successful'
113
 
                        % (self.properties[u"name"], command))
 
120
            #self.logger(u'Checker for client %s (command "%s")'
 
121
            #            u' was successful'
 
122
            #            % (self.properties[u"name"], command))
114
123
            return
115
124
        if os.WIFEXITED(condition):
116
125
            self.logger(u'Checker for client %s (command "%s")'
131
140
        self.logger(u'Checker for client %s completed mysteriously')
132
141
    
133
142
    def checker_started(self, command):
134
 
        self.logger(u'Client %s started checker "%s"'
135
 
                    % (self.properties[u"name"], unicode(command)))
 
143
        #self.logger(u'Client %s started checker "%s"'
 
144
        #            % (self.properties[u"name"], unicode(command)))
 
145
        pass
136
146
    
137
147
    def got_secret(self):
138
148
        self.logger(u'Client %s received its secret'
139
149
                    % self.properties[u"name"])
140
150
    
141
 
    def rejected(self):
142
 
        self.logger(u'Client %s was rejected'
143
 
                    % self.properties[u"name"])
 
151
    def need_approval(self, timeout, default):
 
152
        if not default:
 
153
            message = u'Client %s needs approval within %s seconds'
 
154
        else:
 
155
            message = u'Client %s will get its secret in %s seconds'
 
156
        self.logger(message
 
157
                    % (self.properties[u"name"], timeout/1000))
 
158
    
 
159
    def rejected(self, reason):
 
160
        self.logger(u'Client %s was rejected; reason: %s'
 
161
                    % (self.properties[u"name"], reason))
144
162
    
145
163
    def selectable(self):
146
164
        """Make this a "selectable" widget.
168
186
                          u"bold-underline-blink":
169
187
                              u"bold-underline-blink-standout",
170
188
                          }
171
 
        
 
189
 
172
190
        # Rebuild focus and non-focus widgets using current properties
173
 
        self._text = (u'%(name)s: %(enabled)s'
174
 
                      % { u"name": self.properties[u"name"],
175
 
                          u"enabled":
176
 
                              (u"enabled"
177
 
                               if self.properties[u"enabled"]
178
 
                               else u"DISABLED")})
 
191
 
 
192
        # Base part of a client. Name!
 
193
        self._text = (u'%(name)s: '
 
194
                      % {u"name": self.properties[u"name"]})
 
195
 
 
196
        if self.properties[u"approved_pending"]:
 
197
            if self.properties[u"approved_by_default"]:
 
198
                self._text += u"Connection established to client. (d)eny?"
 
199
            else:
 
200
                self._text += u"Seeks approval to send secret. (a)pprove?"
 
201
        else:
 
202
            self._text += (u'%(enabled)s'
 
203
                           % {u"enabled":
 
204
                               (u"enabled"
 
205
                                if self.properties[u"enabled"]
 
206
                                else u"DISABLED")})
179
207
        if not urwid.supports_unicode():
180
208
            self._text = self._text.encode("ascii", "replace")
181
209
        textlist = [(u"normal", self._text)]
205
233
    def keypress(self, (maxcol,), key):
206
234
        """Handle keys.
207
235
        This overrides the method from urwid.FlowWidget"""
208
 
        if key == u"e" or key == u"+":
209
 
            self.proxy.Enable()
210
 
        elif key == u"d" or key == u"-":
211
 
            self.proxy.Disable()
 
236
        if key == u"+":
 
237
            self.proxy.Enable(dbus_interface = client_interface)
 
238
        elif key == u"-":
 
239
            self.proxy.Disable(dbus_interface = client_interface)
 
240
        elif key == u"a":
 
241
            self.proxy.Approve(dbus.Boolean(True, variant_level=1),
 
242
                               dbus_interface = client_interface)
 
243
        elif key == u"d":
 
244
            self.proxy.Approve(dbus.Boolean(False, variant_level=1),
 
245
                                  dbus_interface = client_interface)
212
246
        elif key == u"r" or key == u"_" or key == u"ctrl k":
213
247
            self.server_proxy_object.RemoveClient(self.proxy
214
248
                                                  .object_path)
215
249
        elif key == u"s":
216
 
            self.proxy.StartChecker()
 
250
            self.proxy.StartChecker(dbus_interface = client_interface)
217
251
        elif key == u"S":
218
 
            self.proxy.StopChecker()
 
252
            self.proxy.StopChecker(dbus_interface = client_interface)
219
253
        elif key == u"C":
220
 
            self.proxy.CheckedOK()
 
254
            self.proxy.CheckedOK(dbus_interface = client_interface)
221
255
        # xxx
222
256
#         elif key == u"p" or key == "=":
223
257
#             self.proxy.pause()
225
259
#             self.proxy.unpause()
226
260
#         elif key == u"RET":
227
261
#             self.open()
 
262
#        elif key == u"+":
 
263
#            self.proxy.Approve(True)
 
264
#        elif key == u"-":
 
265
#            self.proxy.Approve(False)
228
266
        else:
229
267
            return key
230
268
    
522
560
                self.log_message_raw((u"bold",
523
561
                                      u"  "
524
562
                                      .join((u"Clients:",
525
 
                                             u"e: Enable",
526
 
                                             u"d: Disable",
 
563
                                             u"+: Enable",
 
564
                                             u"-: Disable",
527
565
                                             u"r: Remove",
528
566
                                             u"s: Start new checker",
529
567
                                             u"S: Stop checker",
530
 
                                             u"C: Checker OK"))))
 
568
                                             u"C: Checker OK",
 
569
                                             u"a: Approve",
 
570
                                             u"d: Deny"))))
531
571
                self.refresh()
532
572
            elif key == u"tab":
533
573
                if self.topwidget.get_focus() is self.logbox: