# vi: encoding=utf-8 ts=8 sts=4 sw=4 et import os import sys import socket import time import config pubsock=config.value['pubsock'] if 'HOME' in os.environ: privsock=os.environ['HOME']+'/tld-ftp-admin/var/privsock' socketname=privsock else: socketname=pubsock def connect(name=None): global sock sock=socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) sock.connect(socketname) if not name: name = "pid_%d_name_%s" % (os.getpid(), sys.argv[0]) sock.send(bytearray('name %s\0' % name, encoding='utf-8')) def login_passwd(login, passwd): 'Return cookie if ok' sock.send(bytearray('linp %s\n%s\0' % (login, passwd), encoding='utf-8')) retval=sock.recv(256).decode("utf-8") if retval=='FAIL': return '' else: return retval[3:] def login_cookie(cookie): 'Return login if ok' sock.send(bytearray('linc %s\0' % cookie, encoding='utf-8')) retval=sock.recv(256).decode('utf-8') if retval=='FAIL': return '' else: return retval[3:] def logout(): sock.send(bytearray('lout\0', encoding='utf-8')) def lock(path, hard=False): def dolock(): if hard: sock.send(bytearray('lckh %s\0' % path, encoding='utf-8')) else: sock.send(bytearray('lcks %s\0' % path, encoding='utf-8')) return sock.recv(20).decode("utf-8") for i in range(3): retcode=dolock() if retcode=="OK": return True elif retcode=="HARD": return False if i!=2: time.sleep(1) return False def unlock(path): sock.send(bytearray('ulck %s\0' % path, encoding='utf-8')) ret = sock.recv(20).decode("utf-8") if ret == "OK": return True return False def log(msg): sock.send(bytearray('log1 %s\0' % msg, encoding='utf-8')) def locks_dump(): sock.send(bytearray('slck\0', encoding='utf-8')) ret = sock.recv(4096).decode("utf-8") if ret == "NLCK": return "No locks held" # nbytes = int(ret.split("BLOB:")[1]) # ret = sock.recv(nbytes).decode("utf-8") return ret def gettree(): sock.send(bytearray('gett\0', encoding='utf-8')) pkgs=[] len=int(sock.recv(6).decode("utf-8")) if len: for pkg in sock.recv(len).decode("utf-8").split('\0'): tmp=pkg.split('\n') pkgs.append((tmp[0], int(tmp[1]), int(tmp[2]))) return pkgs