diff --git a/frn/clienttracker.py b/frn/clienttracker.py index 902c555..ee7414d 100644 --- a/frn/clienttracker.py +++ b/frn/clienttracker.py @@ -142,6 +142,8 @@ class ClientTracker(object): client.user.M = 0 if not self.canLogin(client.user): client.role = "BLOCK" + else: + self.aclUpdate(client.user) if client.user.EA in self._admin: client.role = "ADMIN" self._admin[client.user.EA].update(client.user.dict()) @@ -271,6 +273,16 @@ class ClientTracker(object): l[email].AI = 1 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): ac, tx, l = self._getAcl(network) if not ac: diff --git a/frn/protocol/server.py b/frn/protocol/server.py index 626d311..80834c7 100644 --- a/frn/protocol/server.py +++ b/frn/protocol/server.py @@ -3,7 +3,7 @@ # Copyright 2010 Maurizio Porrato # 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.protocols.policies import TimeoutMixin from twisted.internet.task import LoopingCall @@ -103,7 +103,11 @@ class FRNServer(BufferingLineReceiver, TimeoutMixin): else: return (userId, "") 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): self.transport.loseConnection()