On 18/03/2011 9:34 PM, Tim Golden wrote:
On 18/03/2011 9:28 PM, Randy Syring wrote:
The issue I am running into is that I am not sure how to copy files from
windows to the Linux and preserve ACLs.

I assume that you only want to preserve them as metadata, not
to map them somehow to whatever security model obtains on the
Linux disk?

The only kind of thing I can come up with (hand-wavingly) is to
convert the SD of each file to its equivalent SDDL and then to
track that along with the file. I was going to suggest stuffing
it in an ADS but presumably that wouldn't survive the journey
to Linux either. No doubt you could contrive some kind of
parallel metadata/database which could hold the info...

... or even (slightly wild-eyed thought) including the SDDL as
a segment in the backed-up filename, suitably escaped. Semi-tested
proof of concept:

<code>
import os, sys
import win32security
import win32file

if not os.path.exists ("c:/temp/sddl"):
  os.mkdir ("c:/temp/sddl")

for dirpath, dirnames, filenames in os.walk ("c:/temp"):
  for filename in filenames:
    print filename
    sd = win32security.GetFileSecurity (
      os.path.join (dirpath, filename),
      win32security.DACL_SECURITY_INFORMATION
    )
    sddl = win32security.ConvertSecurityDescriptorToStringSecurityDescriptor (
      sd,
      win32security.SDDL_REVISION_1,
      win32security.DACL_SECURITY_INFORMATION
    )
    print sddl
    base, ext = os.path.splitext (filename)
    win32file.CopyFile (
      os.path.join (dirpath, filename),
      os.path.join ("c:/temp/sddl", base + "." + sddl.replace (":", "#") + ext),
      1
    )

  break

</code>

TJG
_______________________________________________
python-win32 mailing list
python-win32@python.org
http://mail.python.org/mailman/listinfo/python-win32

Reply via email to