]> git.pld-linux.org Git - projects/pld-ftp-admin.git/blame - modules/cmds.py
- www stuff auths through ftpiod (daemon just has stub functions, but adding
[projects/pld-ftp-admin.git] / modules / cmds.py
CommitLineData
e3aced8e
MM
1# vi: encoding=utf-8 ts=8 sts=4 sw=4 et
2
459e7d48
MM
3import os
4import time
5
5fcf3f9a 6BailOut="BailOut"
459e7d48 7
e3aced8e
MM
8def parse(con):
9 if '\0' not in con.data:
10 return
11 cmds=con.data.split('\0')[:-1]
12
13 for cmd in cmds:
14 con.data=con.data[len(cmd)+1:]
15 cmdname=cmd[:4]
5fcf3f9a
MM
16 if not con.authorized and not (cmdname=='linp' or cmdname=='linc'):
17 raise BailOut
18 # TODO: log unauthorized access
6992b18d
MM
19 if cmdname in cmdlist_noargs:
20 if len(cmd)==4:
21 cmdlist_noargs[cmdname](con)
22 else:
23 pass
24 # TODO: log malicious msg
25 elif cmdname in cmdlist_args:
26 if len(cmd)>5:
27 cmdlist_args[cmdname](con, cmd[5:])
28 else:
29 pass
30 # TODO: log malicious msg
e3aced8e 31 else:
5fcf3f9a 32 raise BailOut
e3aced8e
MM
33 # TODO: log this
34
35locks={}
36
37def lock(con, arg, hard):
38 if arg not in locks:
39 locks[arg]=hard
40 con.sock.send("OK")
41 elif locks[arg]:
42 con.sock.send("HARD") # Hard lock - you can go get a cup of tea
43 else:
44 con.sock.send("SOFT") # Soft lock - try in a second or two
45
46
b55905f2 47def cmd_unlock(con, arg):
e3aced8e
MM
48 if arg in locks:
49 del locks[arg]
50
b55905f2 51def cmd_lock_soft(con, arg):
e3aced8e
MM
52 lock(con, arg, False)
53
b55905f2 54def cmd_lock_hard(con, arg):
e3aced8e
MM
55 lock(con, arg, True)
56
459e7d48
MM
57logfile=open(os.environ['HOME']+'/pld-ftp-admin/var/log', 'a')
58
b55905f2
MM
59def cmd_log(con, msg):
60 logfile.write('%s [%s] -- %s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'),
61 con.name, msg))
459e7d48 62 logfile.flush()
e3aced8e 63
b55905f2
MM
64def cmd_name(con, name):
65 con.name=name
66
6992b18d
MM
67def cmd_login_passwd(con, data):
68 tmp=data.split('\n')
69 if len(tmp)!=2:
70 raise BailOut
71 login=tmp[0]
72 passwd=tmp[1]
73 if login=='mmazur' and passwd=='ziew':
74 con.sock.send('OK ciasteczko')
75 else:
76 # TODO: log this
77 con.sock.send('FAIL')
78 raise BailOut
79
80def cmd_login_cookie(con, cookie):
81 if cookie=='ciasteczko':
82 con.sock.send('OK mmazur')
83 else:
84 # TODO: log this (or not)
85 con.sock.send('FAIL')
86
87def cmd_logout(con):
88 # TODO: remove cookie
89 pass
90
91cmdlist_args={'lcks':cmd_lock_soft, 'lckh':cmd_lock_hard, 'ulck':cmd_unlock,
92 'log1':cmd_log, 'name':cmd_name, 'linp':cmd_login_passwd,
93 'linc':cmd_login_cookie}
94
95cmdlist_noargs={'lout':cmd_logout}
96
e3aced8e 97
This page took 0.033991 seconds and 4 git commands to generate.