/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

  • Committer: Teddy Hogeborn
  • Date: 2011-04-03 00:46:51 UTC
  • Revision ID: teddy@fukt.bsnet.se-20110403004651-yyrzgwwkoq4ts2vi
* mandos: Never call .Reset() on a defunct Avahi entry group.
  (AvahiService.remove): Only do group.Reset(), as before.
  (AvahiService.add): Only create new group if necessary.
  (AvahiService.cleanup): Also do group.Free() if a group exists.
  (AvahiService.server_state_changed): Call .cleanup() on errors.
                                       Also log error parameter, if
                                       passed.

Show diffs side-by-side

added added

removed removed

Lines of Context:
176
176
        self.rename_count += 1
177
177
    def remove(self):
178
178
        """Derived from the Avahi example code"""
179
 
        if self.group is not None:
180
 
            try:
181
 
                self.group.Free()
182
 
            except (dbus.exceptions.UnknownMethodException,
183
 
                    dbus.exceptions.DBusException) as e:
184
 
                pass
185
 
            self.group = None
186
179
        if self.entry_group_state_changed_match is not None:
187
180
            self.entry_group_state_changed_match.remove()
188
181
            self.entry_group_state_changed_match = None
 
182
        if self.group is not None:
 
183
            self.group.Reset()
189
184
    def add(self):
190
185
        """Derived from the Avahi example code"""
191
186
        self.remove()
192
 
        self.group = dbus.Interface(
193
 
            self.bus.get_object(avahi.DBUS_NAME,
194
 
                                self.server.EntryGroupNew(),
195
 
                                follow_name_owner_changes=True),
196
 
            avahi.DBUS_INTERFACE_ENTRY_GROUP)
 
187
        if self.group is None:
 
188
            self.group = dbus.Interface(
 
189
                self.bus.get_object(avahi.DBUS_NAME,
 
190
                                    self.server.EntryGroupNew()),
 
191
                avahi.DBUS_INTERFACE_ENTRY_GROUP)
197
192
        self.entry_group_state_changed_match = (
198
193
            self.group.connect_to_signal(
199
194
                'StateChanged', self .entry_group_state_changed))
224
219
                                  % unicode(error))
225
220
    def cleanup(self):
226
221
        """Derived from the Avahi example code"""
 
222
        if self.group is not None:
 
223
            try:
 
224
                self.group.Free()
 
225
            except (dbus.exceptions.UnknownMethodException,
 
226
                    dbus.exceptions.DBusException) as e:
 
227
                pass
 
228
            self.group = None
227
229
        self.remove()
228
230
    def server_state_changed(self, state, error=None):
229
231
        """Derived from the Avahi example code"""
236
238
                       avahi.SERVER_FAILURE:
237
239
                           "Zeroconf server failure" }
238
240
        if state in bad_states:
239
 
            if bad_states[state]:
240
 
                logger.error(bad_states[state])
241
 
            self.remove()
 
241
            if bad_states[state] is not None:
 
242
                if error is None:
 
243
                    logger.error(bad_states[state])
 
244
                else:
 
245
                    logger.error(bad_states[state] + ": %r", error)
 
246
            self.cleanup()
242
247
        elif state == avahi.SERVER_RUNNING:
243
248
            self.add()
244
249
        else:
245
 
            logger.debug("Unknown state: %r", state)
 
250
            if error is None:
 
251
                logger.debug("Unknown state: %r", state)
 
252
            else:
 
253
                logger.debug("Unknown state: %r: %r", state, error)
246
254
    def activate(self):
247
255
        """Derived from the Avahi example code"""
248
256
        if self.server is None: