1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
12 if '\0' not in con.data:
14 cmds=con.data.split('\0')[:-1]
17 con.data=con.data[len(cmd)+1:]
19 if not con.authorized and cmdname not in ('linp', 'linc', 'name'):
21 # TODO: log unauthorized access
22 if cmdname in cmdlist_noargs:
24 cmdlist_noargs[cmdname](con)
27 # TODO: log malicious msg
28 elif cmdname in cmdlist_args:
30 cmdlist_args[cmdname](con, cmd[5:])
33 # TODO: log malicious msg
39 def lock(con, arg, hard):
44 con.sock.send("HARD") # Hard lock - you can go get a cup of tea
46 con.sock.send("SOFT") # Soft lock - try in a second or two
49 def cmd_unlock(con, arg):
53 def cmd_lock_soft(con, arg):
56 def cmd_lock_hard(con, arg):
60 def cmd_log(con, msg):
61 logfile.write('%s [%s] -- %s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'),
65 def cmd_name(con, name):
73 if not common.fileexists(common.ftpadmdir+'var/passwd'):
76 f=open(common.ftpadmdir+'var/passwd', 'r')
77 for line in f.xreadlines():
78 x=line.strip().split(':')
82 if not common.fileexists(common.ftpadmdir+'var/cookies'):
85 f=open(common.ftpadmdir+'var/cookies', 'r')
86 for line in f.xreadlines():
87 x=line.strip().split(':')
93 f=open(common.ftpadmdir+'var/cookies', 'w')
94 for key in cookies.keys():
95 f.write('%s:%s\n' % (key, cookies[key]))
98 def cmd_login_passwd(con, data):
104 md5pass=md5.new(passwd).hexdigest()
105 if login in users and users[login]==md5pass:
106 cookie=`time.time()`.split('.')[0]+'_'+md5.new(md5pass+salt).hexdigest()
107 cookies[cookie]=login
111 con.sock.send('OK '+cookie)
114 con.sock.send('FAIL')
117 def cmd_login_cookie(con, cookie):
118 if cookie in cookies:
121 con.username=cookies[cookie]
122 con.sock.send('OK '+cookies[cookie])
124 # TODO: log this (or not)
125 con.sock.send('FAIL')
128 if con.cookie in cookies:
129 del cookies[con.cookie]
133 global srctree, pkglist
134 srctree=ftptree.FtpTree(config.value['default_to'], loadall=True)
135 pkglist=srctree.keys()
138 def cmd_gettree(con):
140 for pkgnvr in pkglist:
141 # TODO: show only user's own pkgs
144 if pkg.marked4moving:
148 if pkg.marked4removal:
154 con.sock.send('%.6d' % (len(buf)-1))
155 con.sock.send(buf[1:])
157 con.sock.send('000000')
160 cmdlist_args={'lcks':cmd_lock_soft, 'lckh':cmd_lock_hard, 'ulck':cmd_unlock,
161 'log1':cmd_log, 'name':cmd_name, 'linp':cmd_login_passwd,
162 'linc':cmd_login_cookie}
164 cmdlist_noargs={'lout':cmd_logout, 'gett':cmd_gettree}
166 # Global stuff and initializations
170 logfile=open(common.ftpadmdir+'var/log', 'a')
173 salt=md5.new(`time.time()`).hexdigest()