diff --git a/secrules/rules14.py b/secrules/rules14.py
new file mode 100644
index 0000000000000000000000000000000000000000..d9b23f5382c249ff1767c3910d66a0389d709bdc_c2VjcnVsZXMvcnVsZXMxNC5weQ==
--- /dev/null
+++ b/secrules/rules14.py
@@ -0,0 +1,61 @@
+# -*- coding: iso-8859-1 -*-
+
+from common import level_rule
+import os
+from secrules import FindFile
+
+__version__ = '1.0'
+
+@level_rule(2)
+def rule1401(fo, fmt):
+    if not fmt:
+        print >>fo, 'RULE 1401'
+        print >>fo, '========='
+
+    with os.popen('install list/full') as p:
+        r = [x[:-1].rstrip() for x in p]
+    dspec = None
+    fspec = None
+    priv = None
+    auth = None
+    hasPriv = False
+    instr = False
+    state = 0
+    for l in r:
+        if (l == ''):
+            continue
+        if l[0] != ' ':
+            dspec = l.replace('.000000','')
+            fspec = None
+        elif ';' in l:
+            priv = auth = None
+            hasPriv = False
+            l = l.split()
+            fspec = l[0]
+            instr = len(l) > 1
+            if instr:
+                l = l[1:]
+            if 'Prv' in l:
+                hasPriv = True
+        elif not instr:
+            l = l.split()
+            if 'Prv' in l:
+                hasPriv = True
+        elif 'Privileges = ' in l:
+            priv = l
+        elif 'Authorized = ' in l:
+            auth = l
+            with FindFile.FindFile(fspec, dspec) as fi:
+                for f in fi:
+                    if hasPriv:
+                        if fmt:
+                            print >>fo, '1401�2�', f
+                        else:
+                            print >>fo, f
+                            if priv: print >>fo, priv
+                            if auth: print >>fo, auth
+
+if __name__ == '__main__':
+    import sys
+    fo = open(sys.argv[1], 'w') if len(sys.argv) > 1 else sys.stdout
+    rule1401(fo, len(sys.argv) > 2)