diff --git a/Demo/pdist/client.py b/Demo/pdist/client.py index 4b5cfc5945e..b644180406e 100755 --- a/Demo/pdist/client.py +++ b/Demo/pdist/client.py @@ -120,6 +120,23 @@ class Client: self._wf.flush() +from security import Security + + +class SecureClient(Client, Security): + + def __init__(self, *args): + import string + apply(Client.__init__, (self,) + args) + Security.__init__(self) + line = self._rf.readline() + challenge = string.atoi(string.strip(firstline)) + response = self._encode_challenge(challenge) + line = `long(response)` + if line[-1] in 'Ll': line = line[:-1] + self._wf.write(line + '\n') + self._wf.flush() + class _stub: """Helper class for Client -- each instance serves as a method of the client.""" diff --git a/Demo/pdist/server.py b/Demo/pdist/server.py index c8acf19103d..4efb180bc8a 100755 --- a/Demo/pdist/server.py +++ b/Demo/pdist/server.py @@ -109,3 +109,36 @@ class Server: basenames = filter(lambda x, names=names: x not in names, basenames) names[len(names):] = basenames return names + + +from security import Security + + +class SecureServer(Server, Security): + + def __init__(self, *args): + apply(Server.__init__, (self,) + args) + Security.__init__(self) + + def _verify(self, conn, address): + challenge = self._generate_challenge() + conn.send("%d\n" % challenge) + response = "" + while "\n" not in response and len(response) < 100: + data = conn.recv(100) + if not data: + break + response = response + data + try: + response = string.atol(string.strip(response)) + except string.atol_error: + if self._verbose > 0: + print "Invalid response syntax", `response` + return 0 + if not self._compare_challenge_response(challenge, response): + if self._verbose > 0: + print "Invalid response value", `response` + return 0 + if self._verbose > 1: + print "Response matches challenge. Go ahead!" + return 1