]> TLD Linux GIT Repositories - tld-ftp-admin.git/blob - modules/ftpio.py
- non-integer releases are ok in TLD
[tld-ftp-admin.git] / modules / ftpio.py
1 # vi: encoding=utf-8 ts=8 sts=4 sw=4 et
2
3 import os
4 import sys
5 import socket
6 import time
7 import config
8
9 pubsock=config.value['pubsock']
10
11 if 'HOME' in os.environ:
12     privsock=os.environ['HOME']+'/tld-ftp-admin/var/privsock'
13     socketname=privsock
14 else:
15     socketname=pubsock
16
17 def connect(name=None):
18     global sock
19     sock=socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
20     sock.connect(socketname)
21     if not name:
22         name = "pid_%d_name_%s" % (os.getpid(), sys.argv[0])
23     sock.send(bytearray('name %s\0' % name, encoding='utf-8'))
24
25 def login_passwd(login, passwd):
26     'Return cookie if ok'
27     sock.send(bytearray('linp %s\n%s\0' % (login, passwd), encoding='utf-8'))
28     retval=sock.recv(256).decode("utf-8")
29     if retval=='FAIL':
30         return ''
31     else:
32         return retval[3:]
33
34 def login_cookie(cookie):
35     'Return login if ok'
36     sock.send(bytearray('linc %s\0' % cookie, encoding='utf-8'))
37     retval=sock.recv(256).decode('utf-8')
38     if retval=='FAIL':
39         return ''
40     else:
41         return retval[3:]
42
43 def logout():
44     sock.send(bytearray('lout\0', encoding='utf-8'))
45
46 def lock(path, hard=False):
47     def dolock():
48         if hard:
49             sock.send(bytearray('lckh %s\0' % path, encoding='utf-8'))
50         else:
51             sock.send(bytearray('lcks %s\0' % path, encoding='utf-8'))
52         return sock.recv(20).decode("utf-8")
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):
64     sock.send(bytearray('ulck %s\0' % path, encoding='utf-8'))
65     ret = sock.recv(20).decode("utf-8")
66     if ret == "OK":
67         return True
68     return False
69
70 def log(msg):
71     sock.send(bytearray('log1 %s\0' % msg, encoding='utf-8'))
72
73 def locks_dump():
74     sock.send(bytearray('slck\0', encoding='utf-8'))
75     ret = sock.recv(4096).decode("utf-8")
76     if ret == "NLCK":
77         return "No locks held"
78
79 #    nbytes = int(ret.split("BLOB:")[1])
80 #    ret = sock.recv(nbytes).decode("utf-8")
81     return ret
82
83 def gettree():
84     sock.send(bytearray('gett\0', encoding='utf-8'))
85     pkgs=[]
86     len=int(sock.recv(6).decode("utf-8"))
87     if len:
88         for pkg in sock.recv(len).decode("utf-8").split('\0'):
89             tmp=pkg.split('\n')
90             pkgs.append((tmp[0], int(tmp[1]), int(tmp[2])))
91     return pkgs
92