1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
11 if '\0' not in con.data:
13 cmds=con.data.split('\0')[:-1]
16 con.data=con.data[len(cmd)+1:]
18 if not con.authorized and not (cmdname=='linp' or cmdname=='linc'):
20 # TODO: log unauthorized access
21 if cmdname in cmdlist_noargs:
23 cmdlist_noargs[cmdname](con)
26 # TODO: log malicious msg
27 elif cmdname in cmdlist_args:
29 cmdlist_args[cmdname](con, cmd[5:])
32 # TODO: log malicious msg
38 def lock(con, arg, hard):
43 con.sock.send("HARD") # Hard lock - you can go get a cup of tea
45 con.sock.send("SOFT") # Soft lock - try in a second or two
48 def cmd_unlock(con, arg):
52 def cmd_lock_soft(con, arg):
55 def cmd_lock_hard(con, arg):
59 def cmd_log(con, msg):
60 logfile.write('%s [%s] -- %s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'),
64 def cmd_name(con, name):
72 if not common.fileexists(common.ftpadmdir+'var/passwd'):
75 f=open(common.ftpadmdir+'var/passwd', 'r')
76 for line in f.xreadlines():
77 x=line.strip().split(':')
81 if not common.fileexists(common.ftpadmdir+'var/cookies'):
84 f=open(common.ftpadmdir+'var/cookies', 'r')
85 for line in f.xreadlines():
86 x=line.strip().split(':')
92 f=open(common.ftpadmdir+'var/cookies', 'w')
93 for key in cookies.keys():
94 f.write('%s:%s\n' % (key, cookies[key]))
97 def cmd_login_passwd(con, data):
103 if login in users and users[login]==md5.new(passwd).hexdigest():
104 cookie=md5.new(login+passwd+`time.time()`).hexdigest()
105 cookies[cookie]=login
108 con.sock.send('OK '+cookie)
111 con.sock.send('FAIL')
114 def cmd_login_cookie(con, cookie):
115 if cookie in cookies:
118 con.sock.send('OK '+cookies[cookie])
120 # TODO: log this (or not)
121 con.sock.send('FAIL')
124 if con.cookie in cookies:
125 del cookies[con.cookie]
129 cmdlist_args={'lcks':cmd_lock_soft, 'lckh':cmd_lock_hard, 'ulck':cmd_unlock,
130 'log1':cmd_log, 'name':cmd_name, 'linp':cmd_login_passwd,
131 'linc':cmd_login_cookie}
133 cmdlist_noargs={'lout':cmd_logout}
135 # Global stuff and initializations
139 logfile=open(common.ftpadmdir+'var/log', 'a')