diff options
author | aiju <aiju@phicode.de> | 2011-05-09 18:53:34 +0000 |
---|---|---|
committer | aiju <aiju@phicode.de> | 2011-05-09 18:53:34 +0000 |
commit | d232167dc3af61944eeefbda4dcc5c4365853295 (patch) | |
tree | a41efb338b986e9c517c4b2c85259ef8febfd8bd /sys/lib/python/factotum.py | |
parent | ea0fe9a39bc3c217ef7c41b184d22f70ea7dabf6 (diff) |
added HTTP Basic to hgfactotum
Diffstat (limited to 'sys/lib/python/factotum.py')
-rw-r--r-- | sys/lib/python/factotum.py | 53 |
1 files changed, 49 insertions, 4 deletions
diff --git a/sys/lib/python/factotum.py b/sys/lib/python/factotum.py index 4971459c0..0a8ebcd3a 100644 --- a/sys/lib/python/factotum.py +++ b/sys/lib/python/factotum.py @@ -17,11 +17,14 @@ class Factotum: msg = 'start' for k, v in args.iteritems(): msg += ' ' + k + '=\'' + v + '\'' - self.f.write(msg) - ret = self.f.read(4096) + while True: + self.f.write(msg) + ret = self.f.read(4096) + if ret[:7] != "needkey": break + self.needkey(ret[8:]) if ret == "ok": return if ret[:5] == "error": raise FactotumError(ret[6:]) - raise FactotumError("unexpected " + ret) + raise FactotumError("start: unexpected " + ret) def needkey(self, string): subprocess.call(['/bin/auth/factotum', '-g', string]) def read(self): @@ -34,7 +37,7 @@ class Factotum: if ret[:3] == "ok ": return ret[3:] if ret[:5] == "error": raise FactotumError(ret[6:]) if ret[:5] == "phase": raise PhaseError(ret[6:]) - raise FactotumError("unexpected " + ret) + raise FactotumError("read: unexpected " + ret) def write(self, data): while True: self.f.write('write ' + data) @@ -45,6 +48,48 @@ class Factotum: if ret[:3] == "toosmall ": return int(ret[4:]) if ret[:5] == "error": raise FactotumError(ret[6:]) if ret[:5] == "phase": raise PhaseError(ret[6:]) + raise FactotumError("write: unexpected " + ret) + def attr(self): + self.f.write('attr') + ret = self.f.read(4096) + if ret[:5] == "error": raise FactotumError(ret[6:]) + if ret[:3] == "ok ": + dict = {} + ret = ret[3:] + mode = 0 + key = "" + value = "" + while ret != "": + if mode == 0: + if ret[0] == '=': + if ret[1] == '\'': + mode = 2 + ret = ret[1:] + else: + mode = 1 + else: + key += ret[0] + elif mode == 1: + if ret[0] == ' ': + dict[key] = value + key = "" + value = "" + mode = 0 + else: + value += ret[0] + elif mode == 2: + if ret[0] == '\'': + ret = ret[1:] + dict[key] = value + key = "" + value = "" + mode = 0 + else: + value += ret[0] + if ret != "": ret = ret[1:] + if key != "": + dict[key] = value + return dict raise FactotumError("unexpected " + ret) def close(self): self.f.close() |