/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: 2009-04-16 21:33:49 UTC
  • Revision ID: teddy@fukt.bsnet.se-20090416213349-dwtllm8tvh2i0xbk
* mandos: Minor doc string fixes.
  (SO_BINDTODEVICE): Do not guess if not found.
  (IPv6_TCPServer.server_bind): Handle case where SO_BINDTODEVICE is
                                not available.

Show diffs side-by-side

added added

removed removed

Lines of Context:
74
74
    try:
75
75
        from IN import SO_BINDTODEVICE
76
76
    except ImportError:
77
 
        # From /usr/include/asm/socket.h
78
 
        SO_BINDTODEVICE = 25
 
77
        SO_BINDTODEVICE = None
79
78
 
80
79
 
81
80
version = "1.0.8"
127
126
                  a sensible number of times
128
127
    group: D-Bus Entry Group
129
128
    server: D-Bus Server
 
129
    bus: dbus.SystemBus()
130
130
    """
131
131
    def __init__(self, interface = avahi.IF_UNSPEC, name = None,
132
132
                 servicetype = None, port = None, TXT = None,
478
478
    """A Client class using D-Bus
479
479
    
480
480
    Attributes:
481
 
    dbus_object_path: dbus.ObjectPath ; only set if self.use_dbus
 
481
    dbus_object_path: dbus.ObjectPath
 
482
    bus: dbus.SystemBus()
482
483
    """
483
484
    # dbus.service.Object doesn't use super(), so we can't either.
484
485
    
945
946
        to bind to an interface if one was specified, and also NOT to
946
947
        bind to an address or port if they were not specified."""
947
948
        if self.interface is not None:
948
 
            try:
949
 
                self.socket.setsockopt(socket.SOL_SOCKET,
950
 
                                       SO_BINDTODEVICE,
951
 
                                       str(self.interface + u'\0'))
952
 
            except socket.error, error:
953
 
                if error[0] == errno.EPERM:
954
 
                    logger.error(u"No permission to"
955
 
                                 u" bind to interface %s",
956
 
                                 self.interface)
957
 
                else:
958
 
                    raise
 
949
            if SO_BINDTODEVICE is None:
 
950
                logger.error(u"SO_BINDTODEVICE does not exist;"
 
951
                             u" cannot bind to interface %s",
 
952
                             self.interface)
 
953
            else:
 
954
                try:
 
955
                    self.socket.setsockopt(socket.SOL_SOCKET,
 
956
                                           SO_BINDTODEVICE,
 
957
                                           str(self.interface
 
958
                                               + u'\0'))
 
959
                except socket.error, error:
 
960
                    if error[0] == errno.EPERM:
 
961
                        logger.error(u"No permission to"
 
962
                                     u" bind to interface %s",
 
963
                                     self.interface)
 
964
                    elif error[0] == errno.ENOPROTOOPT:
 
965
                        logger.error(u"SO_BINDTODEVICE not available;"
 
966
                                     u" cannot bind to interface %s",
 
967
                                     self.interface)
 
968
                    else:
 
969
                        raise
959
970
        # Only bind(2) the socket if we really need to.
960
971
        if self.server_address[0] or self.server_address[1]:
961
972
            if not self.server_address[0]: