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
|
||||
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:
|
||||
|
|
|
@ -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
|
||||
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()
|
||||
|
|
Loading…
Reference in New Issue