AUTHORS | 1 + func/minion/server.py | 2 +- func/overlord/client.py | 2 +- func/utils.py | 13 ++++++++++--- 4 files changed, 13 insertions(+), 5 deletions(-)
New commits: commit e5dcb8d9aa5ed9b8e24fc570c82c65fea43d7746 Author: John Eckersberg <[email protected]> Date: Tue Apr 13 15:40:56 2010 -0400 Backwards compatibility for xmlrpc Binary encoding This will allow older minions to continue working with a newer overlord but the inverse is not possible without some relatively intrusive changes (Thanks to Adam DeBuysscher) diff --git a/AUTHORS b/AUTHORS index 8cfa477..87fb8b8 100644 --- a/AUTHORS +++ b/AUTHORS @@ -17,6 +17,7 @@ Additional patches and contributions by ... Jasper Capel <[email protected]> Louis Coilliot <[email protected]> Eli Criffield <[email protected]> + Adam DeBuysscher <[email protected]> John Eckersberg <[email protected]> Luca Foppiano <[email protected]> Matt Hicks <[email protected]> diff --git a/func/overlord/client.py b/func/overlord/client.py index b9f8d76..4e924c6 100644 --- a/func/overlord/client.py +++ b/func/overlord/client.py @@ -786,7 +786,7 @@ class Overlord(object): if self.interactive: print retval - retval = func_utils.deep_base64(retval) + retval = func_utils.deep_base64(retval,1) except Exception, e: (t, v, tb) = sys.exc_info() diff --git a/func/utils.py b/func/utils.py index d4ca37b..f184013 100644 --- a/func/utils.py +++ b/func/utils.py @@ -171,22 +171,29 @@ def should_log(args): return True return False -def deep_base64(ds): +def deep_base64(ds, mode = 0): """ Run through an arbitrary datastructure of dicts / lists / tuples to find all strings and base 64 encode/decode them with xmlrpclib.Binary objects. + + mode 0 - flip, 1 - force decode, 2 - force encode + """ from xmlrpclib import Binary if isinstance(ds, Binary): + if mode == 2: + return ds return ds.data if isinstance(ds, basestring): + if mode == 1: + return ds return Binary(ds) if isinstance(ds, list) or isinstance(ds, tuple): - cleaned = map(lambda x: deep_base64(x), ds) + cleaned = map(lambda x: deep_base64(x,mode), ds) if isinstance(ds, tuple): cleaned = tuple(cleaned) return cleaned @@ -194,7 +201,7 @@ def deep_base64(ds): if isinstance(ds, dict): cleaned = {} for k,v in ds.iteritems(): - cleaned[deep_base64(k)] = deep_base64(v) + cleaned[deep_base64(k)] = deep_base64(v,mode) return cleaned return ds commit a171dd6d0dc2ee098a8bfab30b6e413fc70f8217 Author: John Eckersberg <[email protected]> Date: Tue Apr 13 15:38:36 2010 -0400 encode tracebacks diff --git a/func/minion/server.py b/func/minion/server.py index 3c9d357..101868d 100644 --- a/func/minion/server.py +++ b/func/minion/server.py @@ -331,7 +331,7 @@ class FuncSSLXMLRPCServer(AuthedXMLRPCServer.AuthedSSLXMLRPCServer, except: (t, v, tb) = sys.exc_info() rc = utils.nice_exception(t, v, tb) - return rc + return futils.deep_base64(rc) def auth_cb(self, request, client_address): peer_cert = request.get_peer_certificate() _______________________________________________ Func-list mailing list [email protected] https://www.redhat.com/mailman/listinfo/func-list
