]>
Commit | Line | Data |
---|---|---|
e3aced8e MM |
1 | # vi: encoding=utf-8 ts=8 sts=4 sw=4 et |
2 | ||
3 | import os | |
6b4b841a | 4 | import sys |
e3aced8e MM |
5 | import socket |
6 | import time | |
7 | import config | |
8 | ||
e3aced8e MM |
9 | pubsock=config.value['pubsock'] |
10 | ||
16b37c0d | 11 | if 'HOME' in os.environ: |
6992b18d | 12 | privsock=os.environ['HOME']+'/pld-ftp-admin/var/privsock' |
e3aced8e MM |
13 | socketname=privsock |
14 | else: | |
15 | socketname=pubsock | |
16 | ||
b55905f2 | 17 | def connect(name=None): |
e3aced8e MM |
18 | global sock |
19 | sock=socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) | |
20 | sock.connect(socketname) | |
6b4b841a AM |
21 | if not name: |
22 | name = "pid_%d_name_%s" % (os.getpid(), sys.argv[0]) | |
8d9e1014 | 23 | sock.send(bytearray('name %s\0' % name, encoding='utf-8')) |
e3aced8e | 24 | |
6992b18d MM |
25 | def login_passwd(login, passwd): |
26 | 'Return cookie if ok' | |
8d9e1014 JR |
27 | sock.send(bytearray('linp %s\n%s\0' % (login, passwd), encoding='utf-8')) |
28 | retval=sock.recv(256).decode("utf-8") | |
6992b18d MM |
29 | if retval=='FAIL': |
30 | return '' | |
31 | else: | |
32 | return retval[3:] | |
33 | ||
34 | def login_cookie(cookie): | |
35 | 'Return login if ok' | |
8d9e1014 JR |
36 | sock.send(bytearray('linc %s\0' % cookie, encoding='utf-8')) |
37 | retval=sock.recv(256).decode('utf-8') | |
6992b18d MM |
38 | if retval=='FAIL': |
39 | return '' | |
40 | else: | |
41 | return retval[3:] | |
42 | ||
43 | def logout(): | |
8d9e1014 | 44 | sock.send(bytearray('lout\0', encoding='utf-8')) |
6992b18d | 45 | |
e3aced8e MM |
46 | def lock(path, hard=False): |
47 | def dolock(): | |
48 | if hard: | |
8d9e1014 | 49 | sock.send(bytearray('lckh %s\0' % path, encoding='utf-8')) |
e3aced8e | 50 | else: |
8d9e1014 JR |
51 | sock.send(bytearray('lcks %s\0' % path, encoding='utf-8')) |
52 | return sock.recv(20).decode("utf-8") | |
e3aced8e MM |
53 | for i in range(3): |
54 | retcode=dolock() | |
55 | if retcode=="OK": | |
56 | return True | |
57 | elif retcode=="HARD": | |
58 | return False | |
59 | if i!=2: | |
60 | time.sleep(1) | |
61 | return False | |
62 | ||
63 | def unlock(path): | |
8d9e1014 JR |
64 | sock.send(bytearray('ulck %s\0' % path, encoding='utf-8')) |
65 | ret = sock.recv(20).decode("utf-8") | |
6b4b841a AM |
66 | if ret == "OK": |
67 | return True | |
68 | return False | |
e3aced8e | 69 | |
459e7d48 | 70 | def log(msg): |
8d9e1014 | 71 | sock.send(bytearray('log1 %s\0' % msg, encoding='utf-8')) |
e3aced8e | 72 | |
6b4b841a | 73 | def locks_dump(): |
8d9e1014 JR |
74 | sock.send(bytearray('slck\0', encoding='utf-8')) |
75 | ret = sock.recv(4096).decode("utf-8") | |
461bc5ab ER |
76 | if ret == "NLCK": |
77 | return "No locks held" | |
78 | ||
79 | # nbytes = int(ret.split("BLOB:")[1]) | |
8d9e1014 | 80 | # ret = sock.recv(nbytes).decode("utf-8") |
461bc5ab | 81 | return ret |
6b4b841a | 82 | |
08b49edd | 83 | def gettree(): |
8d9e1014 | 84 | sock.send(bytearray('gett\0', encoding='utf-8')) |
08b49edd | 85 | pkgs=[] |
8d9e1014 | 86 | len=int(sock.recv(6).decode("utf-8")) |
08b49edd | 87 | if len: |
8d9e1014 | 88 | for pkg in sock.recv(len).decode("utf-8").split('\0'): |
5d490a9c MM |
89 | tmp=pkg.split('\n') |
90 | pkgs.append((tmp[0], int(tmp[1]), int(tmp[2]))) | |
08b49edd | 91 | return pkgs |
b55905f2 | 92 |