Szia,
a pop3 proxyban ez elég egyszerű, mert amúgy is parsolja a
usernevet:
class UserPolicyPop3Proxy(Pop3Proxy):
def config(self):
Pop3Proxy.config(self)
self.banned_users = ("alma", "korte")
self.request["PASS"] = (POP3_REQ_POLICY, self.checkUser)
def checkUser(self, command):
if self.username in self.banned_users:
proxyLog(self, "pop3.policy", 3, "User
administratively prohibited; username='%s'", self.username)
self.response_param = "User administratively
prohibited."
return POP3_REQ_REJECT
return POP3_REQ_ACCEPT
Az SMTP sokkal bonyolultabb, de ha PLAIN auth történik, akkor
kezelhető az alábbi proxyval
import base64
class UserPolicySmtpProxy(SmtpProxy):
def config(self):
SmtpProxy.config(self)
self.banned_users = ("alma", "korte", "test")
self.request["AUTH"] = (SMTP_REQ_POLICY, self.checkUser)
def checkUser(self, cmd, param):
if param[:5] != "PLAIN":
self.error_code = "550"
self.error_info = "Only PLAIN authentication is
supported."
return SMTP_REQ_REJECT
base64str = param[6:]
try:
plain = base64.b64decode(base64str)
except TypeError, e:
proxyLog(self, SMTP_ERROR, 3, "Unable to decode PLAIN
auth request; req='%s', error='%s'", (base64str, e) )
return SMTP_REQ_REJECT
try:
(empty, username, password) = plain.split('\0')
except ValueError,e:
proxyLog(self, SMTP_ERROR, 3, "Unable to parse PLAIN
auth request; req='%s', error='%s'", (plain, e) )
return SMTP_REQ_REJECT
if username in self.banned_users:
proxyLog(self, SMTP_POLICY, 3, "User administratively
prohibited; username='%s'", username)
self.error_info = "User administratively prohibited."
return SMTP_REQ_REJECT
return SMTP_REQ_ACCEPT
Erre gondoltál?
Üdv,
Balint
On 12/11/2013 09:51 AM, Tamas Barina wrote: