~ubuntu-branches/debian/squeeze/openerp-server/squeeze

« back to all changes in this revision

Viewing changes to bin/addons/document/ftpserver/__init__.py

  • Committer: Bazaar Package Importer
  • Author(s): Daniel Baumann
  • Date: 2009-08-24 20:16:55 UTC
  • mfrom: (8.1.3 sid)
  • Revision ID: james.westby@ubuntu.com-20090824201655-vxt26g90x7geu29t
* Merging upstream version 5.0.3-0.
* Removing xmlrpc.patch, went upstream.
* Using dedicated storage directory in /var/lib/openerp-server, that
  way the addons directory can stay read-only for the unprivileged
  user.
* Commenting out db_name in config (Closes: #542391).
* Commenting out port in config (Closes: #542406).
* Renaming logfile to openerp-server.log for consistency.
* Commenting out pidfile in config (Closes: #542427).
* Removing debconf handling in postrm, not possible to do that.
* Removing local storage directory on purge.

Show diffs side-by-side

added added

removed removed

Lines of Context:
35
35
    PASSIVE_PORTS = int(pps[0]), int(pps[1])
36
36
 
37
37
class ftp_server(threading.Thread):
38
 
    def log(self, level, message):        
 
38
    def log(self, level, message):
39
39
        logger = netsvc.Logger()
40
40
        logger.notifyChannel('FTP', level, message)
41
41
 
 
42
    def detect_ip_addr(self):
 
43
        def _detect_ip_addr():
 
44
            from array import array
 
45
            import socket
 
46
            from struct import pack, unpack
 
47
 
 
48
            try:
 
49
                import fcntl
 
50
            except ImportError:
 
51
                fcntl = None
 
52
 
 
53
            if not fcntl: # not UNIX:
 
54
                hostname = socket.gethostname()
 
55
                ip_addr = socket.gethostbyname(hostname)
 
56
            else: # UNIX:
 
57
                # get all interfaces:
 
58
                nbytes = 128 * 32
 
59
                s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
 
60
                names = array('B', '\0' * nbytes)
 
61
                outbytes = unpack('iL', fcntl.ioctl( s.fileno(), 0x8912, pack('iL', nbytes, names.buffer_info()[0])))[0]
 
62
                namestr = names.tostring()
 
63
                ifaces = [namestr[i:i+32].split('\0', 1)[0] for i in range(0, outbytes, 32)]
 
64
 
 
65
                for ifname in [iface for iface in ifaces if iface != 'lo']:
 
66
                    ip_addr = socket.inet_ntoa(fcntl.ioctl(s.fileno(), 0x8915, pack('256s', ifname[:15]))[20:24])
 
67
                    break
 
68
            return ip_addr
 
69
 
 
70
        try:
 
71
            ip_addr = _detect_ip_addr()
 
72
        except:
 
73
            ip_addr = ''
 
74
        return ip_addr
 
75
 
 
76
 
42
77
    def run(self):
43
 
        autho = authorizer.authorizer()        
 
78
        autho = authorizer.authorizer()
44
79
        ftpserver.FTPHandler.authorizer = autho
45
80
        ftpserver.max_cons = 300
46
81
        ftpserver.max_cons_per_ip = 50
47
82
        ftpserver.FTPHandler.abstracted_fs = abstracted_fs.abstracted_fs
48
83
        if PASSIVE_PORTS:
49
84
            ftpserver.FTPHandler.passive_ports = PASSIVE_PORTS
50
 
        
 
85
 
51
86
        ftpserver.log = lambda msg: self.log(netsvc.LOG_INFO, msg)
52
87
        ftpserver.logline = lambda msg: None
53
88
        ftpserver.logerror = lambda msg: self.log(netsvc.LOG_ERROR, msg)
54
89
 
 
90
        HOST = self.detect_ip_addr()
55
91
        address = (HOST, PORT)
56
92
        ftpd = ftpserver.FTPServer(address, ftpserver.FTPHandler)
57
93
        ftpd.serve_forever()