--- /dev/null
+""" Please make sure you read the README file COMPLETELY BEFORE reading anything below.
+ It is very critical that you read coding guidelines in Section E in README file.
+"""
+
+from xnu import *
+from utils import *
+
+# Macro: walkkauthcache
+@lldb_command('walkkauthcache')
+def WalkKauthCache(cmd_args=None):
+ """ Walks the bins of the kauth credential hash cache and prints out the
+ number of bins and bin usage information.
+ """
+ PrintKauthCache()
+# EndMacro: walkkauthcache
+
+def PrintKauthCache(cmd_args=None):
+ """ Routine to determine the size of the kauth cache, walk the bins
+ and print out usage information.
+ """
+ anchor = unsigned(kern.globals.kauth_cred_table_anchor)
+ alloc_info_struct = anchor - sizeof('struct _mhead')
+ alloc_info = kern.GetValueFromAddress(alloc_info_struct, 'struct _mhead*')
+ alloc_size = unsigned(alloc_info.mlen) - (sizeof('struct _mhead'))
+ table_entries = alloc_size / sizeof('struct kauth_cred_entry_head')
+ anchor = kern.globals.kauth_cred_table_anchor
+ print "Cred cache has: " + str(table_entries) + " buckets\n"
+ print "Number of items in each bucket ... \n"
+ for i in range(0, table_entries):
+ numinbucket = 0
+ for kauth_cred in IterateTAILQ_HEAD(anchor[i], "cr_link"):
+ numinbucket += 1
+ #print str(kauth_cred.cr_posix)
+ #print str(kauth_cred.cr_ref)
+ print str(numinbucket) + "\n"