# 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 os.environ.has_key('HOME'): 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('name %s\0' % name) def login_passwd(login, passwd): 'Return cookie if ok' sock.send('linp %s\n%s\0' % (login, passwd)) retval=sock.recv(256) if retval=='FAIL': return '' else: return retval[3:] def login_cookie(cookie): 'Return login if ok' sock.send('linc %s\0' % cookie) retval=sock.recv(256) if retval=='FAIL': return '' else: return retval[3:] def logout(): sock.send('lout\0') def lock(path, hard=False): def dolock(): if hard: sock.send('lckh %s\0' % path) else: sock.send('lcks %s\0' % path) return sock.recv(20) 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('ulck %s\0' % path) ret = sock.recv(20) if ret == "OK": return True return False def log(msg): sock.send('log1 %s\0' % msg) def locks_dump(): sock.send('slck\0') ret = sock.recv(4096) if ret == "NLCK": return "No locks held" # nbytes = int(ret.split("BLOB:")[1]) # ret = sock.recv(nbytes) return ret def gettree(): sock.send('gett\0') pkgs=[] len=int(sock.recv(6)) if len: for pkg in sock.recv(len).split('\0'): tmp=pkg.split('\n') pkgs.append((tmp[0], int(tmp[1]), int(tmp[2]))) return pkgs