/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: 2014-08-09 23:37:07 UTC
  • Revision ID: teddy@recompile.se-20140809233707-6c5qyievp78lnzf1
askpass-fifo: Lower privileges after opening FIFO.

* plugins.d/askpass-fifo.c (main): Lower privileges after opening FIFO.

Show diffs side-by-side

added added

removed removed

Lines of Context:
91
91
if sys.version_info.major == 2:
92
92
    str = unicode
93
93
 
94
 
version = "1.6.9"
 
94
version = "1.6.8"
95
95
stored_state_file = "clients.pickle"
96
96
 
97
97
logger = logging.getLogger()
275
275
        self.bus = bus
276
276
        self.entry_group_state_changed_match = None
277
277
    
278
 
    def rename(self, remove=True):
 
278
    def rename(self):
279
279
        """Derived from the Avahi example code"""
280
280
        if self.rename_count >= self.max_renames:
281
281
            logger.critical("No suitable Zeroconf service name found"
284
284
            raise AvahiServiceError("Too many renames")
285
285
        self.name = str(self.server
286
286
                        .GetAlternativeServiceName(self.name))
287
 
        self.rename_count += 1
288
287
        logger.info("Changing Zeroconf service name to %r ...",
289
288
                    self.name)
290
 
        if remove:
291
 
            self.remove()
 
289
        self.remove()
292
290
        try:
293
291
            self.add()
294
292
        except dbus.exceptions.DBusException as error:
295
 
            if (error.get_dbus_name()
296
 
                == "org.freedesktop.Avahi.CollisionError"):
297
 
                logger.info("Local Zeroconf service name collision.")
298
 
                return self.rename(remove=False)
299
 
            else:
300
 
                logger.critical("D-Bus Exception", exc_info=error)
301
 
                self.cleanup()
302
 
                os._exit(1)
 
293
            logger.critical("D-Bus Exception", exc_info=error)
 
294
            self.cleanup()
 
295
            os._exit(1)
 
296
        self.rename_count += 1
303
297
    
304
298
    def remove(self):
305
299
        """Derived from the Avahi example code"""
397
391
 
398
392
 
399
393
class AvahiServiceToSyslog(AvahiService):
400
 
    def rename(self, *args, **kwargs):
 
394
    def rename(self):
401
395
        """Add the new name to the syslog messages"""
402
 
        ret = AvahiService.rename(self, *args, **kwargs)
 
396
        ret = AvahiService.rename(self)
403
397
        syslogger.setFormatter(logging.Formatter
404
398
                               ('Mandos ({}) [%(process)d]:'
405
399
                                ' %(levelname)s: %(message)s'
819
813
    """Decorator to annotate D-Bus methods, signals or properties
820
814
    Usage:
821
815
    
822
 
    @dbus_annotations({"org.freedesktop.DBus.Deprecated": "true",
823
 
                       "org.freedesktop.DBus.Property."
824
 
                       "EmitsChangedSignal": "false"})
825
816
    @dbus_service_property("org.example.Interface", signature="b",
826
817
                           access="r")
 
818
    @dbus_annotations({{"org.freedesktop.DBus.Deprecated": "true",
 
819
                        "org.freedesktop.DBus.Property."
 
820
                        "EmitsChangedSignal": "false"})
827
821
    def Property_dbus_property(self):
828
822
        return dbus.Boolean(False)
829
823
    """
952
946
                                           value.variant_level+1)
953
947
        return dbus.Dictionary(properties, signature="sv")
954
948
    
955
 
    @dbus.service.signal(dbus.PROPERTIES_IFACE, signature="sa{sv}as")
956
 
    def PropertiesChanged(self, interface_name, changed_properties,
957
 
                          invalidated_properties):
958
 
        """Standard D-Bus PropertiesChanged() signal, see D-Bus
959
 
        standard.
960
 
        """
961
 
        pass
962
 
    
963
949
    @dbus.service.method(dbus.INTROSPECTABLE_IFACE,
964
950
                         out_signature="s",
965
951
                         path_keyword='object_path',
1232
1218
    runtime_expansions = (Client.runtime_expansions
1233
1219
                          + ("dbus_object_path",))
1234
1220
    
1235
 
    _interface = "se.recompile.Mandos.Client"
1236
 
    
1237
1221
    # dbus.service.Object doesn't use super(), so we can't either.
1238
1222
    
1239
1223
    def __init__(self, bus = None, *args, **kwargs):
1251
1235
    
1252
1236
    def notifychangeproperty(transform_func,
1253
1237
                             dbus_name, type_func=lambda x: x,
1254
 
                             variant_level=1, invalidate_only=False,
1255
 
                             _interface=_interface):
 
1238
                             variant_level=1):
1256
1239
        """ Modify a variable so that it's a property which announces
1257
1240
        its changes to DBus.
1258
1241
        
1269
1252
                if (not hasattr(self, attrname) or
1270
1253
                    type_func(getattr(self, attrname, None))
1271
1254
                    != type_func(value)):
1272
 
                    if invalidate_only:
1273
 
                        self.PropertiesChanged(_interface,
1274
 
                                               dbus.Dictionary(),
1275
 
                                               dbus.Array
1276
 
                                               ((dbus_name,)))
1277
 
                    else:
1278
 
                        dbus_value = transform_func(type_func(value),
1279
 
                                                    variant_level
1280
 
                                                    =variant_level)
1281
 
                        self.PropertyChanged(dbus.String(dbus_name),
1282
 
                                             dbus_value)
1283
 
                        self.PropertiesChanged(_interface,
1284
 
                                               dbus.Dictionary({
1285
 
                                    dbus.String(dbus_name):
1286
 
                                        dbus_value }), dbus.Array())
 
1255
                    dbus_value = transform_func(type_func(value),
 
1256
                                                variant_level
 
1257
                                                =variant_level)
 
1258
                    self.PropertyChanged(dbus.String(dbus_name),
 
1259
                                         dbus_value)
1287
1260
            setattr(self, attrname, value)
1288
1261
        
1289
1262
        return property(lambda self: getattr(self, attrname), setter)
1327
1300
                                    lambda td: td.total_seconds()
1328
1301
                                    * 1000)
1329
1302
    checker_command = notifychangeproperty(dbus.String, "Checker")
1330
 
    secret = notifychangeproperty(dbus.ByteArray, "Secret",
1331
 
                                  invalidate_only=True)
1332
1303
    
1333
1304
    del notifychangeproperty
1334
1305
    
1381
1352
        self.send_changedstate()
1382
1353
    
1383
1354
    ## D-Bus methods, signals & properties
 
1355
    _interface = "se.recompile.Mandos.Client"
1384
1356
    
1385
1357
    ## Interfaces
1386
1358
    
 
1359
    @dbus_interface_annotations(_interface)
 
1360
    def _foo(self):
 
1361
        return { "org.freedesktop.DBus.Property.EmitsChangedSignal":
 
1362
                     "false"}
 
1363
    
1387
1364
    ## Signals
1388
1365
    
1389
1366
    # CheckerCompleted - signal
1399
1376
        pass
1400
1377
    
1401
1378
    # PropertyChanged - signal
1402
 
    @dbus_annotations({"org.freedesktop.DBus.Deprecated": "true"})
1403
1379
    @dbus.service.signal(_interface, signature="sv")
1404
1380
    def PropertyChanged(self, property, value):
1405
1381
        "D-Bus signal"
2733
2709
            def GetAllClientsWithProperties(self):
2734
2710
                "D-Bus method"
2735
2711
                return dbus.Dictionary(
2736
 
                    { c.dbus_object_path: c.GetAll("")
2737
 
                      for c in tcp_server.clients.itervalues() },
 
2712
                    ((c.dbus_object_path, c.GetAll(""))
 
2713
                     for c in tcp_server.clients.itervalues()),
2738
2714
                    signature="oa{sv}")
2739
2715
            
2740
2716
            @dbus.service.method(_interface, in_signature="o")