示例#1
0
 def resources_acquire(self):
     if self.resource_lock:
         raise TypeError('Server resource lock already set')
     self.resource_lock = _resource_locks[self.server.id]
     self.resource_lock.acquire()
     self.interface = utils.interface_acquire(
         'tap' if self.server.network_mode == BRIDGE else 'tun')
     if self.server.network_mode == BRIDGE:
         self.bridge_interface = utils.interface_acquire('br')
示例#2
0
    def resources_acquire(self):
        if self.interface:
            raise TypeError('Server resource already acquired')

        _instances_lock.acquire()
        try:
            instance = _instances.get(self.server.id)
            if instance:
                logger.warning(
                    'Stopping duplicate instance',
                    'server',
                    server_id=self.server.id,
                    instance_id=instance.id,
                )

                try:
                    instance.stop_process()
                except:
                    logger.exception(
                        'Failed to stop duplicate instance',
                        'server',
                        server_id=self.server.id,
                        instance_id=instance.id,
                    )

                time.sleep(5)

            _instances[self.server.id] = self
        finally:
            _instances_lock.release()

        self.interface = utils.interface_acquire(self.server.adapter_type)
示例#3
0
    def resources_acquire(self):
        if self.interface:
            raise TypeError('Server resource already acquired')

        _instances_lock.acquire()
        try:
            instance = _instances.get(self.server.id)
            if instance:
                logger.warning(
                    'Stopping duplicate instance', 'server',
                    server_id=self.server.id,
                    instance_id=instance.id,
                )

                try:
                    instance.stop_process()
                except:
                    logger.exception(
                        'Failed to stop duplicate instance', 'server',
                        server_id=self.server.id,
                        instance_id=instance.id,
                    )

                time.sleep(5)

            _instances[self.server.id] = self
        finally:
            _instances_lock.release()

        self.interface = utils.interface_acquire(self.server.adapter_type)
示例#4
0
    def generate_client_conf(self):
        if not os.path.exists(self._temp_path):
            os.makedirs(self._temp_path)
        ovpn_conf_path = os.path.join(self._temp_path, OVPN_CONF_NAME)
        self.interface = utils.interface_acquire(
            self.linked_server.adapter_type)

        remotes = self.linked_server.get_key_remotes(True)

        client_conf = OVPN_INLINE_LINK_CONF % (
            uuid.uuid4().hex,
            utils.random_name(),
            self.interface,
            self.linked_server.adapter_type,
            self.linked_server.protocol,
            remotes,
            CIPHERS[self.linked_server.cipher],
            HASHES[self.linked_server.hash],
            4 if self.server.debug else 1,
            8 if self.server.debug else 3,
            self.linked_server.ping_interval,
            self.linked_server.ping_timeout,
        )

        if self.linked_server.lzo_compression != ADAPTIVE:
            client_conf += 'comp-lzo no\n'

        if self.server.debug:
            self.server.output_link.push_message(
                'Server conf:',
                label=self.output_label,
                link_server_id=self.linked_server.id,
            )
            for conf_line in client_conf.split('\n'):
                if conf_line:
                    self.server.output_link.push_message(
                        '  ' + conf_line,
                        label=self.output_label,
                        link_server_id=self.linked_server.id,
                    )

        client_conf += JUMBO_FRAMES[self.linked_server.jumbo_frames]
        client_conf += '<ca>\n%s\n</ca>\n' % self.linked_server.ca_certificate

        if self.linked_server.tls_auth:
            client_conf += 'key-direction 1\n<tls-auth>\n%s\n</tls-auth>\n' % (
                self.linked_server.tls_auth_key)

        client_conf += ('<cert>\n%s\n' +
            '</cert>\n') % utils.get_cert_block(self.user.certificate)
        client_conf += '<key>\n%s\n</key>\n' % (
            self.user.private_key.strip())

        with open(ovpn_conf_path, 'w') as ovpn_conf:
            os.chmod(ovpn_conf_path, 0600)
            ovpn_conf.write(client_conf)

        return ovpn_conf_path
示例#5
0
    def generate_client_conf(self):
        if not os.path.exists(self._temp_path):
            os.makedirs(self._temp_path)
        ovpn_conf_path = os.path.join(self._temp_path, OVPN_CONF_NAME)
        self.interface = utils.interface_acquire(
            self.linked_server.adapter_type)

        remotes = self.linked_server.get_key_remotes(True)

        client_conf = OVPN_INLINE_LINK_CONF % (
            uuid.uuid4().hex,
            utils.random_name(),
            self.interface,
            self.linked_server.adapter_type,
            remotes,
            CIPHERS[self.linked_server.cipher],
            HASHES[self.linked_server.hash],
            4 if self.server.debug else 1,
            8 if self.server.debug else 3,
            settings.app.host_ping,
            settings.app.host_ping_ttl,
            settings.vpn.server_poll_timeout,
        )

        if self.linked_server.lzo_compression != ADAPTIVE:
            client_conf += 'comp-lzo no\n'

        if self.server.debug:
            self.server.output_link.push_message(
                'Server conf:',
                label=self.output_label,
                link_server_id=self.linked_server.id,
            )
            for conf_line in client_conf.split('\n'):
                if conf_line:
                    self.server.output_link.push_message(
                        '  ' + conf_line,
                        label=self.output_label,
                        link_server_id=self.linked_server.id,
                    )

        client_conf += JUMBO_FRAMES[self.linked_server.jumbo_frames]
        client_conf += '<ca>\n%s\n</ca>\n' % self.linked_server.ca_certificate

        if self.linked_server.tls_auth:
            client_conf += 'key-direction 1\n<tls-auth>\n%s\n</tls-auth>\n' % (
                self.linked_server.tls_auth_key)

        client_conf += ('<cert>\n%s\n' + '</cert>\n') % utils.get_cert_block(
            self.user.certificate)
        client_conf += '<key>\n%s\n</key>\n' % (self.user.private_key.strip())

        with open(ovpn_conf_path, 'w') as ovpn_conf:
            os.chmod(ovpn_conf_path, 0o600)
            ovpn_conf.write(client_conf)

        return ovpn_conf_path
示例#6
0
文件: instance.py 项目: az0ne/pritunl
    def resources_acquire(self):
        if self.resource_lock:
            raise TypeError('Server resource lock already set')

        def deadlock():
            logger.error(
                'Server resource deadlocked, check for mismatching datetime',
                'server',
                server_id=self.server.id,
                instance_id=self.id,
            )

        timer = threading.Timer(15, deadlock)
        timer.start()

        self.resource_lock = _resource_locks[self.server.id]
        self.resource_lock.acquire()
        self.interface = utils.interface_acquire(self.server.adapter_type)

        timer.cancel()
示例#7
0
    def resources_acquire(self):
        if self.resource_lock:
            raise TypeError('Server resource lock already set')

        def deadlock():
            logger.error(
                'Server resource deadlocked, check for mismatching datetime',
                'server',
                server_id=self.server.id,
                instance_id=self.id,
            )

        timer = threading.Timer(15, deadlock)
        timer.start()

        self.resource_lock = _resource_locks[self.server.id]
        self.resource_lock.acquire()
        self.interface = utils.interface_acquire(self.server.adapter_type)

        timer.cancel()
示例#8
0
 def resources_acquire(self):
     if self.resource_lock:
         raise TypeError('Server resource lock already set')
     self.resource_lock = _resource_locks[self.server.id]
     self.resource_lock.acquire()
     self.interface = utils.interface_acquire(self.server.adapter_type)