Fix server crash on acl block. Update acl on login.
This commit is contained in:
parent
9929d03364
commit
02b1c0209c
|
@ -142,6 +142,8 @@ class ClientTracker(object):
|
||||||
client.user.M = 0
|
client.user.M = 0
|
||||||
if not self.canLogin(client.user):
|
if not self.canLogin(client.user):
|
||||||
client.role = "BLOCK"
|
client.role = "BLOCK"
|
||||||
|
else:
|
||||||
|
self.aclUpdate(client.user)
|
||||||
if client.user.EA in self._admin:
|
if client.user.EA in self._admin:
|
||||||
client.role = "ADMIN"
|
client.role = "ADMIN"
|
||||||
self._admin[client.user.EA].update(client.user.dict())
|
self._admin[client.user.EA].update(client.user.dict())
|
||||||
|
@ -271,6 +273,16 @@ class ClientTracker(object):
|
||||||
l[email].AI = 1
|
l[email].AI = 1
|
||||||
self._setAcl(network, oac, otx, l)
|
self._setAcl(network, oac, otx, l)
|
||||||
|
|
||||||
|
def aclUpdate(self, user):
|
||||||
|
network = user.NT
|
||||||
|
email = user.EA
|
||||||
|
ac, tx, l = self._getAcl(network)
|
||||||
|
if email in l:
|
||||||
|
old = l[email]
|
||||||
|
new = user.copy(ID=email, AI=old.AI)
|
||||||
|
l[email] = new
|
||||||
|
self._setAcl(network, ac, tx, l)
|
||||||
|
|
||||||
def aclLoginOk(self, network, email):
|
def aclLoginOk(self, network, email):
|
||||||
ac, tx, l = self._getAcl(network)
|
ac, tx, l = self._getAcl(network)
|
||||||
if not ac:
|
if not ac:
|
||||||
|
|
|
@ -3,7 +3,7 @@
|
||||||
# Copyright 2010 Maurizio Porrato <maurizio.porrato@gmail.com>
|
# Copyright 2010 Maurizio Porrato <maurizio.porrato@gmail.com>
|
||||||
# See LICENSE.txt for copyright info
|
# See LICENSE.txt for copyright info
|
||||||
|
|
||||||
from twisted.internet.defer import Deferred
|
from twisted.internet.defer import Deferred, succeed
|
||||||
from twisted.internet.protocol import ServerFactory
|
from twisted.internet.protocol import ServerFactory
|
||||||
from twisted.protocols.policies import TimeoutMixin
|
from twisted.protocols.policies import TimeoutMixin
|
||||||
from twisted.internet.task import LoopingCall
|
from twisted.internet.task import LoopingCall
|
||||||
|
@ -103,7 +103,11 @@ class FRNServer(BufferingLineReceiver, TimeoutMixin):
|
||||||
else:
|
else:
|
||||||
return (userId, "")
|
return (userId, "")
|
||||||
user.IP = self.clientAddress.host
|
user.IP = self.clientAddress.host
|
||||||
return self.factory.manager.clientLogin(user).addCallback(loginReturned)
|
if self.factory.tracker.canLogin(user):
|
||||||
|
return self.factory.manager.clientLogin(user).addCallback(loginReturned)
|
||||||
|
else:
|
||||||
|
log.msg("BLOCK %s" % repr(user))
|
||||||
|
return succeed(("BLOCK", ""))
|
||||||
|
|
||||||
def disconnect(self):
|
def disconnect(self):
|
||||||
self.transport.loseConnection()
|
self.transport.loseConnection()
|
||||||
|
|
Loading…
Reference in New Issue