[python-win32] Getting file security access info on network
Peter McTaggart
peter.mctaggart at gmail.com
Tue May 24 06:50:05 CEST 2005
Hi,
I'm trying to write a little python prog to list the groups and their
members that have access to a directory or file on a network device.
I can get info for a local file (on C drive) but this doesn't seem to
work on a network drive:
I get teh following error
-------------------------------
Traceback (most recent call last):
File "C:\software\Python24\Lib\site-packages\pythonwin\pywin\framework\scriptutils.py",
line 310, in RunScript
exec codeObject in __main__.__dict__
File "C:\projects\access_groups\AccessList.py", line 36, in ?
accounts = getAccountList(domain, sidList)
File "C:\projects\access_groups\AccessList.py", line 20, in getAccountList
accounts = [ win32security.LookupAccountSid(domain,x) for x in sidList]
error: (1332, 'LookupAccountSid', 'No mapping between account names
and security IDs was done.')
------------------------------
I'm not sure what this means.
Can anyone enlighten me or point me in the right direction.
thanks
Peter
..............
Here is the code that I have managed to write so far:
import win32security, sys
from optparse import OptionParser
def getAceList(filename):
secDes = win32security.GetNamedSecurityInfo(filename, \
win32security.SE_FILE_OBJECT, \
win32security.DACL_SECURITY_INFORMATION \
|
win32security.GROUP_SECURITY_INFORMATION \
|
win32security.OWNER_SECURITY_INFORMATION)
dacl = secDes.GetSecurityDescriptorDacl()
aceList = []
for i in range(dacl.GetAceCount()):
aceList.append(dacl.GetAce(i))
return aceList
def getAccountList(domain, sidList):
accounts = [ win32security.LookupAccountSid(domain,x) for x in sidList]
return accounts
if __name__ == "__main__":
parser = OptionParser()
parser.add_option("-f", "--file", dest='filename',
help="list access names and groups for FILE",
metavar="FILE")
parser.add_option("-d", "--domain", dest='domain',
help="domain to use for the security info",
metavar="DOMAIN")
(options, args) = parser.parse_args()
filename = options.filename
domain = options.domain
aceList = getAceList(filename)
sidList = [x[2] for x in aceList]
accounts = getAccountList(domain, sidList)
for account in accounts:
print str(account)
More information about the Python-win32
mailing list