# HG changeset patch # User Jean-Francois Pieronne <jf.pieronne@laposte.net> # Date 1587571402 -7200 # Wed Apr 22 18:03:22 2020 +0200 # Node ID 01907c5ac547761b3d24031641259e990824e318 # Parent 1786d706f8ee9fd58289d322058dc8d1239a46fe secrules/get_security.py initial version diff --git a/secrules/get_security.py b/secrules/get_security.py new file mode 100644 --- /dev/null +++ b/secrules/get_security.py @@ -0,0 +1,36 @@ +from vms import starlet +from vms import itemList, ossdef, ssdef +from vms.rtl import lib + +def get_security(fn, clsnam='FILE'): + itm = [itemList.itemList (code=ossdef.OSS__ACL_READ), + itemList.itemList (code=ossdef.OSS__PROTECTION, dtype=itemList.il_unsignedWord), + itemList.itemList (code=ossdef.OSS__OWNER, dtype=itemList.il_unsignedLong)] + accnam = lib.get_accnam(clsnam)[1] + + s,res = starlet.get_security (clsnam, fn, itmlst=itm) + try: + own = starlet.idtoasc(res[ossdef.OSS__OWNER])[1] + except: + own = res[ossdef.OSS__OWNER] + high_word = int(own / 65536) + low_word = int(own - (high_word *65536)) + own = "[%o,%o]" % (high_word, low_word) + prot = lib.format_sogw_prot(res[ossdef.OSS__PROTECTION], access_names=accnam)[1] + acl = [] + v = res[ossdef.OSS__ACL_READ] + while v != '': + acl.append(starlet.format_acl(v[:ord(v[0]) - 1], accnam=accnam)[1]) + v = v[ord(v[0]):] + return own, prot, acl + +if __name__ == '__main__': + import sys + filename = sys.argv[1] + clsnam = sys.argv[2] + owner, protection, acl = get_security(filename, clsnam) + print ' Owner:', owner + print ' Protection:', protection + print ' Access control list:' + for e in acl: + print 9*' ', e