#!/bin/env python
import os
import sys
import stat
def set_executable(top):
def set_exec(name):
mode = os.stat(name).st_mode
new_mode = mode
if new_mode & stat.S_IRUSR:
new_mode = new_mode | stat.S_IXUSR
if new_mode & stat.S_IRGRP:
new_mode = new_mode | stat.S_IXGRP
if new_mode & stat.S_IROTH:
new_mode = new_mode | stat.S_IXOTH
if (mode != new_mode):
print "Setting exec for '%s' (mode %o => %o)" % (name, mode, new_mode)
os.chmod(name, new_mode)
def unset_exec(name):
mode = os.stat(name).st_mode
new_mode = mode & ~(stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
if (mode != new_mode):
print "Unsetting exec for '%s' (mode %o => %o)" % (name, mode, new_mode)
os.chmod(name, new_mode)
for root, dirs, files in os.walk(top):
for name in files:
complete_name = os.path.join(root, name)
f = open(complete_name, 'r')
header = f.read(4)
f.close()
if header[0:2] == '!#' or header[1:4] == 'ELF':
set_exec(complete_name)
else:
unset_exec(complete_name)
for name in dirs:
complete_name = os.path.join(root, name)
set_exec(complete_name)
if len(sys.argv) >= 2:
for dir in sys.argv[1:]:
set_executable(sys.argv[1])
else:
print "Usage\n\t%s <dir1> [dir2|...]\n" % sys.argv[0]
Diff to Previous Revision
--- revision 1 2011-08-18 17:41:08
+++ revision 2 2011-08-19 12:05:55
@@ -1,14 +1,26 @@
+#!/bin/env python
import os
+import sys
import stat
def set_executable(top):
def set_exec(name):
- print "Setting exec for '%s'" % name
mode = os.stat(name).st_mode
- os.chmod(name, mode | stat.S_IEXEC)
+ new_mode = mode
+ if new_mode & stat.S_IRUSR:
+ new_mode = new_mode | stat.S_IXUSR
+ if new_mode & stat.S_IRGRP:
+ new_mode = new_mode | stat.S_IXGRP
+ if new_mode & stat.S_IROTH:
+ new_mode = new_mode | stat.S_IXOTH
+ if (mode != new_mode):
+ print "Setting exec for '%s' (mode %o => %o)" % (name, mode, new_mode)
+ os.chmod(name, new_mode)
def unset_exec(name):
- print "Unsetting exec for '%s'" % name
mode = os.stat(name).st_mode
- os.chmod(name, mode ^ stat.S_IEXEC)
+ new_mode = mode & ~(stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH)
+ if (mode != new_mode):
+ print "Unsetting exec for '%s' (mode %o => %o)" % (name, mode, new_mode)
+ os.chmod(name, new_mode)
for root, dirs, files in os.walk(top):
for name in files:
complete_name = os.path.join(root, name)
@@ -22,3 +34,12 @@
for name in dirs:
complete_name = os.path.join(root, name)
set_exec(complete_name)
+
+
+
+if len(sys.argv) >= 2:
+ for dir in sys.argv[1:]:
+ set_executable(sys.argv[1])
+else:
+ print "Usage\n\t%s <dir1> [dir2|...]\n" % sys.argv[0]
+