From 10715f8c0ce6de0a4cf85100770b457d03fd2d0b Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Mon, 11 May 2009 22:31:27 -0400 Subject: [PATCH 1/1] Add showPermissions functionality. Signed-off-by: Edward Z. Yang --- afs/acl.py | 45 +++++++++++++++++++++++++++------------------ afs/tests/test_acl.py | 3 +++ 2 files changed, 30 insertions(+), 18 deletions(-) diff --git a/afs/acl.py b/afs/acl.py index b5da255..d9a6df4 100644 --- a/afs/acl.py +++ b/afs/acl.py @@ -10,25 +10,27 @@ _canonical = { "mail": "lik", "none": "", } -_char2bit = { - 'r': READ, - 'w': WRITE, - 'i': INSERT, - 'l': LOOKUP, - 'd': DELETE, - 'k': LOCK, - 'a': ADMINISTER, - 'A': USR0, - 'B': USR1, - 'C': USR2, - 'D': USR3, - 'E': USR4, - 'F': USR5, - 'G': USR6, - 'H': USR7, -} -_bit2char = dict([(v,k) for k,v in _char2bit.items()]) +_charBitAssoc = [ + ('r', READ), + ('w', WRITE), + ('i', INSERT), + ('l', LOOKUP), + ('d', DELETE), + ('k', LOCK), + ('a', ADMINISTER), + ('A', USR0), + ('B', USR1), + ('C', USR2), + ('D', USR3), + ('E', USR4), + ('F', USR5), + ('G', USR6), + ('H', USR7), +] + +_char2bit = dict(_charBitAssoc) + def crights(s): """Canonicalizes string rights to bitmask""" @@ -51,6 +53,13 @@ class ACL(object): pos, neg = _parseAcl(_acl.getAcl(dir)) return ACL(pos, neg) +def showRights(r): + """Takes a bitmask and returns a rwlidka string""" + s = "" + for char,mask in _charBitAssoc: + if r & mask == mask: s += char + return s + def _parseRights(s): """Parses a rwlid... rights tring to bitmask""" r = 0 diff --git a/afs/tests/test_acl.py b/afs/tests/test_acl.py index 385e2ad..c6a7338 100644 --- a/afs/tests/test_acl.py +++ b/afs/tests/test_acl.py @@ -1,6 +1,9 @@ import nose import afs.acl as acl +def test_showRights(): + assert acl.showRights(acl.READ | acl.WRITE) == "rw" + def test_crights(): assert acl.crights('read') & acl.READ assert acl.crights('read') & acl.LOOKUP -- 1.7.9.5