import os
import time
+import config
+import common
+import md5
-BailOut="BailOut"
def parse(con):
if '\0' not in con.data:
raise BailOut
# TODO: log this
-locks={}
def lock(con, arg, hard):
if arg not in locks:
def cmd_lock_hard(con, arg):
lock(con, arg, True)
-logfile=open(os.environ['HOME']+'/pld-ftp-admin/var/log', 'a')
def cmd_log(con, msg):
logfile.write('%s [%s] -- %s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'),
def cmd_name(con, name):
con.name=name
+
+def load_creds():
+ global users, cookies
+ users={}
+ cookies={}
+ if not common.fileexists(common.ftpadmdir+'var/passwd'):
+ return
+ else:
+ f=open(common.ftpadmdir+'var/passwd', 'r')
+ for line in f.xreadlines():
+ x=line.strip().split(':')
+ if len(x)>=2:
+ users[x[0]]=x[1]
+ f.close()
+ if not common.fileexists(common.ftpadmdir+'var/cookies'):
+ return
+ else:
+ f=open(common.ftpadmdir+'var/cookies', 'r')
+ for line in f.xreadlines():
+ x=line.strip().split(':')
+ if len(x)>=2:
+ users[x[0]]=x[1]
+ f.close()
+
+def write_cookies():
+ f=open(common.ftpadmdir+'var/cookies', 'w')
+ for key in cookies.keys():
+ f.write('%s:%s\n' % (key, cookies[key]))
+ f.close()
+
def cmd_login_passwd(con, data):
tmp=data.split('\n')
if len(tmp)!=2:
raise BailOut
login=tmp[0]
passwd=tmp[1]
- if login=='mmazur' and passwd=='ziew':
- con.sock.send('OK ciasteczko')
+ if login in users and users[login]==md5.new(passwd).hexdigest():
+ cookie=md5.new(login+passwd+`time.time()`).hexdigest()
+ cookies[cookie]=login
+ write_cookies()
+ con.authorized=True
+ con.sock.send('OK '+cookie)
else:
# TODO: log this
con.sock.send('FAIL')
raise BailOut
def cmd_login_cookie(con, cookie):
- if cookie=='ciasteczko':
- con.sock.send('OK mmazur')
+ if cookie in cookies:
+ con.cookie=cookie
+ con.authorized=True
+ con.sock.send('OK '+cookies[cookie])
else:
# TODO: log this (or not)
con.sock.send('FAIL')
def cmd_logout(con):
- # TODO: remove cookie
+ if con.cookie in cookies:
+ del cookies[con.cookie]
+ write_cookies()
pass
cmdlist_args={'lcks':cmd_lock_soft, 'lckh':cmd_lock_hard, 'ulck':cmd_unlock,
cmdlist_noargs={'lout':cmd_logout}
+# Global stuff and initializations
+
+BailOut="BailOut"
+locks={}
+logfile=open(common.ftpadmdir+'var/log', 'a')
+load_creds()