]> TLD Linux GIT Repositories - tld-ftp-admin.git/blob - modules/ftpio.py
- raw from PLD
[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 os.environ.has_key('HOME'):
12     privsock=os.environ['HOME']+'/pld-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('name %s\0' % name)
24
25 def login_passwd(login, passwd):
26     'Return cookie if ok'
27     sock.send('linp %s\n%s\0' % (login, passwd))
28     retval=sock.recv(256)
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('linc %s\0' % cookie)
37     retval=sock.recv(256)
38     if retval=='FAIL':
39         return ''
40     else:
41         return retval[3:]
42
43 def logout():
44     sock.send('lout\0')
45
46 def lock(path, hard=False):
47     def dolock():
48         if hard:
49             sock.send('lckh %s\0' % path)
50         else:
51             sock.send('lcks %s\0' % path)
52         return sock.recv(20)
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('ulck %s\0' % path)
65     ret = sock.recv(20)
66     if ret == "OK":
67         return True
68     return False
69
70 def log(msg):
71     sock.send('log1 %s\0' % msg)
72
73 def locks_dump():
74     sock.send('slck\0')
75     ret = sock.recv(4096)
76     if ret == "NLCK":
77         return "No locks held"
78
79 #    nbytes = int(ret.split("BLOB:")[1])
80 #    ret = sock.recv(nbytes)
81     return ret
82
83 def gettree():
84     sock.send('gett\0')
85     pkgs=[]
86     len=int(sock.recv(6))
87     if len:
88         for pkg in sock.recv(len).split('\0'):
89             tmp=pkg.split('\n')
90             pkgs.append((tmp[0], int(tmp[1]), int(tmp[2])))
91     return pkgs
92