# 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