-
-
Notifications
You must be signed in to change notification settings - Fork 265
/
md5_ftpd.py
executable file
·45 lines (34 loc) · 1.26 KB
/
md5_ftpd.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#!/usr/bin/env python3
# Copyright (C) 2007 Giampaolo Rodola' <g.rodola@gmail.com>.
# Use of this source code is governed by MIT license that can be
# found in the LICENSE file.
"""
A basic ftpd storing passwords as hash digests (platform independent).
"""
import hashlib
import os
from pyftpdlib.authorizers import AuthenticationFailed
from pyftpdlib.authorizers import DummyAuthorizer
from pyftpdlib.handlers import FTPHandler
from pyftpdlib.servers import FTPServer
class DummyMD5Authorizer(DummyAuthorizer):
def validate_authentication(self, username, password, handler):
hash_ = hashlib.md5(password.encode('latin1')).hexdigest()
try:
if self.user_table[username]['pwd'] != hash_:
raise KeyError
except KeyError:
raise AuthenticationFailed
def main():
# get a hash digest from a clear-text password
password = '12345'
hash_ = hashlib.md5(password.encode('latin1')).hexdigest()
authorizer = DummyMD5Authorizer()
authorizer.add_user('user', hash_, os.getcwd(), perm='elradfmwMT')
authorizer.add_anonymous(os.getcwd())
handler = FTPHandler
handler.authorizer = authorizer
server = FTPServer(('', 2121), handler)
server.serve_forever()
if __name__ == "__main__":
main()