Fix server crash on acl block. Update acl on login.

This commit is contained in:
Maurizio Porrato 2011-01-22 21:38:06 +00:00
parent 9929d03364
commit 02b1c0209c
2 changed files with 18 additions and 2 deletions

View File

@ -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:

View File

@ -3,7 +3,7 @@
# Copyright 2010 Maurizio Porrato <maurizio.porrato@gmail.com>
# 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()