/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 server.py

  • Committer: Teddy Hogeborn
  • Date: 2008-07-29 03:35:39 UTC
  • Revision ID: teddy@fukt.bsnet.se-20080729033539-08zecoj3jwlkpjhw
* server.conf: New file.

* mandos-clients.conf: Renamed to clients.conf.

* Makefile (FORTIFY): New.
  (CFLAGS): Include $(FORTIFY).

* plugins.d/mandosclient.c (main): New "if_index" variable.  Bug fix:
                                   check if interface exists.  New
                                   "--connect" option.

* server.py (serviceInterface): Removed; replaced by
                                "AvahiService.interface".  All users
                                changed.
  (AvahiError, AvahiServiceError, AvahiGroupError): New exception
                                                    classes.
  (AvahiService): New class.
  (serviceName): Removed; replaced by "AvahiService.name".  All users
                 changed.
  (serviceType): Removed; replaced by "AvahiService.type".  All users
                 changed.
  (servicePort): Removed; replaced by "AvahiService.port".  All users
                 changed.
  (serviceTXT): Removed; replaced by "AvahiService.TXT".  All users
                changed.
  (domain): Removed; replaced by "AvahiService.domain".  All users
            changed.
  (host): Removed; replaced by "AvahiService.host".  All users
          changed.
  (rename_count): Removed; replaced by "AvahiService.rename_count" and
                 "AvahiService.max_renames".  All users changed.
  (Client.__init__): If no secret or secfile, raise TypeError instead
                     of RuntimeError.
  (Client.last_seen): Renamed to "Client.last_checked_ok".  All users
                      changed.
  (Client.stop, Client.stop_checker): Use "getattr" with default value
                                      instead of "hasattr".
  (Client.still_valid): Removed "now" argument.
  (Client.handle): Separate the "no client found" and "client invalid"
                   cases for clearer code.
  (IPv6_TCPServer.__init__): "options" argument replaced by
                             "settings".  All callers changed.
  (IPv6_TCPServer.options): Replaced by "IPv6_TCPServer.settings".
                            All users changed.
  (IPv6_TCPServer.server_bind): Use getattr instead of hasattr.
  (add_service): Removed; replaced by "AvahiService.add".  All callers
                 changed.
  (remove_service): Removed; replaced by "AvahiService.remove".  All
                    callers changed.
  (entry_group_state_changed): On entry group collision, call the new
                               AvahiService.rename method.  Raise
                               AvahiGroupError on group error.
  (if_nametoindex): Use ctypes.utils.find_library to locate the C
                    library.  Cache the result.  Loop on EINTR.
  (daemon): Use os.path.devnull to locate "/dev/null".
  (killme): Removed.  All callers changed to do "sys.exit()" instead,
            except where stated otherwise.
  (main): Removed "exitstatus".  Removed all default values from all
          non-bool options.  New option "--configdir".  New variables
          "server_defaults" and "server_settings", read from
          "%(configdir)s/server.conf".  Let any supplied command line
          options override server settings.   Variable "defaults"
          renamed to "client_defaults", which is read from
          "clients.conf" instead of "mandos-clients.conf".  New global
          AvahiService object "service" replaces old global variables.
          Catch AvahiError and exit with error if caught.

Show diffs side-by-side

added added

removed removed

Lines of Context:
509
509
        """This overrides the normal server_bind() function
510
510
        to bind to an interface if one was specified, and also NOT to
511
511
        bind to an address or port if they were not specified."""
512
 
        if self.settings["interface"]:
 
512
        if self.settings["interface"] != avahi.IF_UNSPEC:
513
513
            # 25 is from /usr/include/asm-i486/socket.h
514
514
            SO_BINDTODEVICE = getattr(socket, "SO_BINDTODEVICE", 25)
515
515
            try:
603
603
            try:
604
604
                libc = ctypes.cdll.LoadLibrary\
605
605
                       (ctypes.util.find_library("c"))
606
 
                _func[0] = libc.if_nametoindex
 
606
                func[0] = libc.if_nametoindex
607
607
                return _func[0](interface)
608
608
            except IOError, e:
609
609
                if e != errno.EINTR:
699
699
    server_settings["debug"] = server_config.getboolean\
700
700
                               (server_section, "debug")
701
701
    del server_config
 
702
    if not server_settings["interface"]:
 
703
        server_settings["interface"] = avahi.IF_UNSPEC
702
704
    
703
705
    # Override the settings from the config file with command line
704
706
    # options, if set.
722
724
    global service
723
725
    service = AvahiService(name = server_settings["servicename"],
724
726
                           type = "_mandos._tcp", );
725
 
    if server_settings["interface"]:
726
 
        service.interface = if_nametoindex(server_settings["interface"])
727
727
    
728
728
    global main_loop
729
729
    global bus
794
794
                                clients=clients)
795
795
    # Find out what port we got
796
796
    service.port = tcp_server.socket.getsockname()[1]
797
 
    logger.debug(u"Now listening on address %r, port %d, flowinfo %d,"
798
 
                 u" scope_id %d" % tcp_server.socket.getsockname())
 
797
    logger.debug(u"Now listening on port %d", service.port)
799
798
    
800
 
    #service.interface = tcp_server.socket.getsockname()[3]
 
799
    if not server_settings["interface"]:
 
800
        service.interface = if_nametoindex\
 
801
                            (server_settings["interface"])
801
802
    
802
803
    try:
803
804
        # From the Avahi example code