11 return os.path.realpath(os.path.abspath(os.path.expanduser(path)))
13 def lock(file_dir, unlock_dirs):
16 try: ruid = pwd.getpwnam(
"root").pw_uid
18 try: rgid = grp.getgrnam(
"root").gr_gid
22 with open(file_dir)
as f:
23 try: os.fchmod(f.fileno(), 0444)
25 if e.errno != errno.EPERM:
raise 26 try: os.fchown(f.fileno(), ruid, -1)
28 if e.errno != errno.EPERM:
raise 29 try: os.fchown(f.fileno(), -1, rgid)
31 if e.errno != errno.EPERM:
raise 33 if e.errno != errno.EISDIR:
raise 35 try: os.chmod(file_dir, 0777
if unlock_dirs
else 0555)
37 if e.errno != errno.EPERM:
raise 38 try: os.chown(file_dir, ruid, -1)
40 if e.errno != errno.EPERM:
raise 41 try: os.chown(file_dir, -1, rgid)
43 if e.errno != errno.EPERM:
raise 46 file_dirs = [
fullPath(f)
for sublist
in file_dirs
for f
in glob.glob(sublist) ]
48 for file_dir
in file_dirs:
49 for root, dirs, files
in os.walk(file_dir):
51 lock(os.path.join(root,f), unlock_dirs)
52 lock(root, unlock_dirs)
54 if __name__ ==
"__main__":
55 parser = argparse.ArgumentParser(description=
"Sets directories to R+W and files to R permissions. Also tries to make the owner root.",
56 formatter_class = argparse.ArgumentDefaultsHelpFormatter)
57 parser.add_argument(
"file_or_dir", default = [
"."], nargs =
"*",
58 help=
"List of files and/or directories to lock.")
59 parser.add_argument(
"-u",
"--unlock_dirs", action=
"store_true", help=
"Leave directories unlocked for addition/removal of files")
60 args = parser.parse_args()
62 lockFiles(args.file_or_dir, args.unlock_dirs)
def lock(file_dir, unlock_dirs)
def lockFiles(file_dirs, unlock_dirs)