* [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/
@ 2012-12-24 10:59 Anthony G. Basile
0 siblings, 0 replies; 10+ messages in thread
From: Anthony G. Basile @ 2012-12-24 10:59 UTC (permalink / raw
To: gentoo-commits
commit: fb6bcb1d775bf6c67ebf31abaf127bb5258300ff
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 22 01:04:30 2012 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Dec 24 10:57:56 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=fb6bcb1d
scripts/Makefile.am: install pypaxctl
---
scripts/Makefile.am | 4 ++--
1 files changed, 2 insertions(+), 2 deletions(-)
diff --git a/scripts/Makefile.am b/scripts/Makefile.am
index 9f36bdd..6728a83 100644
--- a/scripts/Makefile.am
+++ b/scripts/Makefile.am
@@ -1,4 +1,4 @@
ACLOCAL_AMFLAGS = -I m4
-dist_sbin_SCRIPTS = migrate-pax revdep-pax
-EXTRA_DIST = paxmodule.c setup.py pypaxctl
+dist_sbin_SCRIPTS = pypaxctl migrate-pax revdep-pax
+EXTRA_DIST = paxmodule.c setup.py
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/
@ 2012-12-24 10:59 Anthony G. Basile
0 siblings, 0 replies; 10+ messages in thread
From: Anthony G. Basile @ 2012-12-24 10:59 UTC (permalink / raw
To: gentoo-commits
commit: 162448531916e2c8ed68f0c67b74d3a9ad097fcb
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 22 18:31:37 2012 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Dec 24 10:57:57 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=16244853
scripts/{paxmodule.c,pypaxctl}: add delete XATTR_PAX field
---
scripts/paxmodule.c | 50 +++++++++++++++++++++++++++++++-------
scripts/pypaxctl | 66 +++++++++++++++++++++++++++++++-------------------
2 files changed, 82 insertions(+), 34 deletions(-)
diff --git a/scripts/paxmodule.c b/scripts/paxmodule.c
index 1001279..9d7e4e0 100644
--- a/scripts/paxmodule.c
+++ b/scripts/paxmodule.c
@@ -55,25 +55,31 @@
static PyObject * pax_getflags(PyObject *, PyObject *);
static PyObject * pax_setbinflags(PyObject *, PyObject *);
static PyObject * pax_setstrflags(PyObject *, PyObject *);
+#ifdef XTPAX
+static PyObject * pax_deleteflags(PyObject *, PyObject *);
+#endif
static PyMethodDef PaxMethods[] = {
- {"getflags", pax_getflags, METH_VARARGS, "Get the pax flags as a string."},
+ {"getflags", pax_getflags, METH_VARARGS, "Get the pax flags as a string."},
{"setbinflags", pax_setbinflags, METH_VARARGS, "Set the pax flags using binary."},
{"setstrflags", pax_setstrflags, METH_VARARGS, "Set the pax flags using string."},
+#ifdef XTPAX
+ {"deleteflags", pax_deleteflags, METH_VARARGS, "Delete the XATTR_PAX field."},
+#endif
{NULL, NULL, 0, NULL}
};
#if PY_MAJOR_VERSION >= 3
static struct PyModuleDef moduledef = {
PyModuleDef_HEAD_INIT,
- "pax", /* m_name */
- "Module for get/setting PT_PAX and XATTR_PAX flags", /* m_doc */
- -1, /* m_size */
- PaxMethods, /* m_methods */
- NULL, /* m_reload */
- NULL, /* m_traverse */
- NULL, /* m_clear */
- NULL, /* m_free */
+ "pax", /* m_name */
+ "Module for get/set/deleting PT_PAX and XATTR_PAX flags", /* m_doc */
+ -1, /* m_size */
+ PaxMethods, /* m_methods */
+ NULL, /* m_reload */
+ NULL, /* m_traverse */
+ NULL, /* m_clear */
+ NULL, /* m_free */
};
#endif
@@ -637,3 +643,29 @@ pax_setstrflags(PyObject *self, PyObject *args)
return Py_BuildValue("");
}
+
+
+#ifdef XTPAX
+static PyObject *
+pax_deleteflags(PyObject *self, PyObject *args)
+{
+ const char *f_name;
+
+ if(!PyArg_ParseTuple(args, "s", &f_names))
+ {
+ PyErr_SetString(PaxError, "pax_deleteflags: PyArg_ParseTuple failed");
+ return NULL;
+ }
+
+ if((fd = open(f_name, O_RDONLY)) < 0)
+ {
+ PyErr_SetString(PaxError, "pax_deleteflags: open() failed");
+ return NULL;
+ }
+
+ if( !fremovexattr(fd, PAX_NAMESPACE) )
+ return Py_BuildValue("");
+ else
+ return NULL;
+}
+#endif
diff --git a/scripts/pypaxctl b/scripts/pypaxctl
index 8edf61e..6734e36 100755
--- a/scripts/pypaxctl
+++ b/scripts/pypaxctl
@@ -22,44 +22,60 @@ import sys
import getopt
import pax
+def run_usage():
+ print('Package Name : elfix')
+ print('Bug Reports : http://bugs.gentoo.org/')
+ print('Program Name : pypaxctl')
+ print('Description : Get/set/delete PT_PAX or XATTR_PAX flags on an ELF object')
+ print('')
+ print('Usage : pypaxctl -g ELF get XATTR_PAX flags first, else get PT_PAX flags')
+ print(' : pypaxctl -s [-PpEeMmRrSs] ELF set PT_PAX and XATTR_PAX flags whenever possible')
+ print(' : pypaxctl -d ELF delete the XATTR_PAX field')
+ print('')
+ print('Note : If the pax.so module is compiled without PT_PAX or XATTR_PAX, then no operation will')
+ print(' : be done on that field. Note -d is not available unless XATTR_PAX support is present')
+ print('')
+
+
def main():
try:
- opts, args = getopt.getopt(sys.argv[1:], 's:g')
+ opts, args = getopt.getopt(sys.argv[1:], 'gs:d')
except getopt.GetoptError as err:
print(err)
sys.exit(1)
- if len(opts) == 0:
- print('Provide either -s <flags> <elf> xor -g <elf>')
+ if( len(opts) != 1 or len(args) < 1 ):
+ run_usage()
sys.exit(1)
- binary = None
-
- do_set = 0
- do_get = 0
+ elf = None
+ do_get = False
+ do_set = False
+ do_del = False
for o, a in opts:
- if o == '-s':
+ if o == '-g':
+ do_get = True
+ elif o == '-s':
flags = a
- do_set = 1
- elif o == '-g':
- do_get = 1
-
- if( (do_set + do_get) != 1 ):
- print('Provide either -s <flags> <elf> xor -g <elf>')
- sys.exit(1)
+ do_set = True
+ else:
+ do_del = True
- if( len(args) < 1 ):
- print('Provide either -s <flags> <elf> xor -g <elf>')
- sys.exit(1)
-
- if( do_set == 1 ):
- for binary in args:
- pax.setstrflags(binary, flags)
- else:
- for binary in args:
- ( str_flags, bin_flags ) = pax.getflags(binary)
+ if( do_get ):
+ for elf in args:
+ ( str_flags, bin_flags ) = pax.getflags(elf)
print('%s' % str_flags)
+ elif( do_set ):
+ for elf in args:
+ pax.setstrflags(elf, flags)
+ else:
+ for elf in args:
+ try:
+ pax.deleteflags(elf)
+ except pax.error:
+ print('pax_deleteflags: XATTR_PAX not supported')
+ sys.exit(1)
if __name__ == '__main__':
main()
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/
@ 2012-12-24 10:59 Anthony G. Basile
0 siblings, 0 replies; 10+ messages in thread
From: Anthony G. Basile @ 2012-12-24 10:59 UTC (permalink / raw
To: gentoo-commits
commit: 1980444b6f28a408ae0cd11711633df5f47210a3
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 22 16:36:30 2012 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Dec 24 10:57:57 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=1980444b
scripts/migrate-pax: rename functions in line with misc/alt-revdep-pax
---
scripts/migrate-pax | 17 +++++++++--------
1 files changed, 9 insertions(+), 8 deletions(-)
diff --git a/scripts/migrate-pax b/scripts/migrate-pax
index 994d4f7..5e46292 100755
--- a/scripts/migrate-pax
+++ b/scripts/migrate-pax
@@ -15,10 +15,11 @@ import getopt
import sys
import pax
-def get_forward_linkings():
+def get_object_needed():
+
var_db_pkg = '/var/db/pkg'
- forward_linkings = {}
+ object_needed = {}
for cat in os.listdir(var_db_pkg):
catdir = '%s/%s' % (var_db_pkg, cat)
for pkg in os.listdir(catdir):
@@ -32,11 +33,11 @@ def get_forward_linkings():
link = re.split(';', line)
elf = link[1]
sonames = re.split(',', link[4])
- forward_linkings[elf] = sonames
+ object_needed[elf] = sonames
except IOError:
continue #File probably doesn't exist, which is okay
- return forward_linkings
+ return object_needed
def run_usage():
@@ -91,14 +92,13 @@ def main():
print('RUN AS ROOT: cannot migrate flags')
sys.exit(0)
- forward_linkings = get_forward_linkings()
+ object_needed = get_object_needed()
fail = []
none = []
- for elf in forward_linkings:
+ for elf in object_needed:
try:
- flags = pax.getflags(elf)[0]
if flags:
if verbose:
print("%s %s" % (flags, elf))
@@ -107,6 +107,7 @@ def main():
if verbose:
print("NONE: %s" % elf)
if do_migration:
+ flags = pax.getflags(elf)[0]
flags = re.sub('-','',flags)
pax.setstrflags(elf, flags)
@@ -120,7 +121,7 @@ def main():
if uid == 0:
fail.append(elf)
if verbose:
- print("BUSY: %s" % elf)
+ print("FAIL: %s" % elf)
if verbose:
if fail:
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/
@ 2012-12-24 10:59 Anthony G. Basile
0 siblings, 0 replies; 10+ messages in thread
From: Anthony G. Basile @ 2012-12-24 10:59 UTC (permalink / raw
To: gentoo-commits
commit: 35bde12e46a81ab43458fe088544d58cb3e8c65a
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 22 20:17:47 2012 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Dec 24 10:57:57 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=35bde12e
scripts/migrate-pax: add delete XATTR_PAX on all system ELF objects
---
scripts/migrate-pax | 31 ++++++++++++++++++++++++++-----
1 files changed, 26 insertions(+), 5 deletions(-)
diff --git a/scripts/migrate-pax b/scripts/migrate-pax
index e30c306..d5bc03a 100755
--- a/scripts/migrate-pax
+++ b/scripts/migrate-pax
@@ -48,6 +48,7 @@ def run_usage():
print('')
print('Usage : migrate -v print out all system ELF objects')
print(' : migrate -m [-v] migrate flags on all system ELF objects')
+ print(' : migrate -d [-v] delete XATTR_PAX on all system ELF objects')
print(' : migrate [-h] print out this help')
print(' : -v be verbose when migrating')
print('')
@@ -55,15 +56,15 @@ def run_usage():
def main():
try:
- opts, args = getopt.getopt(sys.argv[1:], 'mv')
+ opts, args = getopt.getopt(sys.argv[1:], 'vmdh')
except getopt.GetoptError as err:
print(str(err)) # will print something like 'option -a not recognized'
run_usage()
sys.exit(1)
-
verbose = False
do_migration = False
+ do_deleteall = False
do_usage = False
opt_count = 0
@@ -75,6 +76,9 @@ def main():
elif o == '-m':
do_migration = True
opt_count += 1
+ elif o == '-d':
+ do_deleteall = True
+ opt_cout += 1
elif o == '-h':
do_usage = True
opt_count += 1
@@ -83,14 +87,27 @@ def main():
print('Please file a bug')
sys.exit(1)
- if opt_count == 0 or do_usage:
+ if do_usage:
run_usage()
sys.exit(0)
+ if opt_count == 0 or opt_count > 2 or ( do_migration and do_deleteall):
+ run_usage()
+ sys.exit(1)
+
+ # Are we root?
uid = os.getuid()
if uid != 0 and do_migration:
print('RUN AS ROOT: cannot migrate flags')
- sys.exit(0)
+ sys.exit(1)
+
+ # Do we have XATTR_PAX support?
+ if do_migration or do_deleteall:
+ try:
+ from pax import deletextpax
+ except ImportError:
+ print('ERROR: Python module pax.so was compiled without XATTR_PAX support, cannot migrate or delete XATTR_PAX')
+ sys.exit(1)
object_needed = get_object_needed()
@@ -99,6 +116,7 @@ def main():
for elf in object_needed:
try:
+ flags = pax.getflags(elf)[0]
if flags:
if verbose:
print("%s %s" % (flags, elf))
@@ -106,11 +124,14 @@ def main():
none.append(elf)
if verbose:
print("NONE: %s" % elf)
+
if do_migration:
- flags = pax.getflags(elf)[0]
flags = re.sub('-','',flags)
pax.setstrflags(elf, flags)
+ if do_deleteall:
+ pax.deletextpax(elf)
+
# We should never get here, because you can
# always getflags() via pax.so since you can
# read PT_PAX even from a busy text file, and
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/
@ 2012-12-24 10:59 Anthony G. Basile
0 siblings, 0 replies; 10+ messages in thread
From: Anthony G. Basile @ 2012-12-24 10:59 UTC (permalink / raw
To: gentoo-commits
commit: ece0cb826336726c840728941b70f11b11478019
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 22 19:29:39 2012 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Dec 24 10:57:57 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=ece0cb82
scripts/{paxmodule.c,pypaxctl}: rename deleteflags -> deletextpax
---
scripts/paxmodule.c | 12 ++++++------
scripts/pypaxctl | 6 +++---
2 files changed, 9 insertions(+), 9 deletions(-)
diff --git a/scripts/paxmodule.c b/scripts/paxmodule.c
index 3e335b4..14a7dcc 100644
--- a/scripts/paxmodule.c
+++ b/scripts/paxmodule.c
@@ -56,7 +56,7 @@ static PyObject * pax_getflags(PyObject *, PyObject *);
static PyObject * pax_setbinflags(PyObject *, PyObject *);
static PyObject * pax_setstrflags(PyObject *, PyObject *);
#ifdef XTPAX
-static PyObject * pax_deleteflags(PyObject *, PyObject *);
+static PyObject * pax_deletextpax(PyObject *, PyObject *);
#endif
static PyMethodDef PaxMethods[] = {
@@ -64,7 +64,7 @@ static PyMethodDef PaxMethods[] = {
{"setbinflags", pax_setbinflags, METH_VARARGS, "Set the pax flags using binary."},
{"setstrflags", pax_setstrflags, METH_VARARGS, "Set the pax flags using string."},
#ifdef XTPAX
- {"deleteflags", pax_deleteflags, METH_VARARGS, "Delete the XATTR_PAX field."},
+ {"deletextpax", pax_deletextpax, METH_VARARGS, "Delete the XATTR_PAX field."},
#endif
{NULL, NULL, 0, NULL}
};
@@ -647,20 +647,20 @@ pax_setstrflags(PyObject *self, PyObject *args)
#ifdef XTPAX
static PyObject *
-pax_deleteflags(PyObject *self, PyObject *args)
+pax_deletextpax(PyObject *self, PyObject *args)
{
const char *f_name;
int fd;
if(!PyArg_ParseTuple(args, "s", &f_name))
{
- PyErr_SetString(PaxError, "pax_deleteflags: PyArg_ParseTuple failed");
+ PyErr_SetString(PaxError, "pax_deletextpax: PyArg_ParseTuple failed");
return NULL;
}
if((fd = open(f_name, O_RDONLY)) < 0)
{
- PyErr_SetString(PaxError, "pax_deleteflags: open() failed");
+ PyErr_SetString(PaxError, "pax_deletextpax: open() failed");
return NULL;
}
@@ -668,7 +668,7 @@ pax_deleteflags(PyObject *self, PyObject *args)
return Py_BuildValue("");
else
{
- PyErr_SetString(PaxError, "pax_deleteflags: fremovexattr() failed");
+ PyErr_SetString(PaxError, "pax_deletextpax: fremovexattr() failed");
return NULL;
}
}
diff --git a/scripts/pypaxctl b/scripts/pypaxctl
index 809d074..8cba7a7 100755
--- a/scripts/pypaxctl
+++ b/scripts/pypaxctl
@@ -24,7 +24,7 @@ import pax
xattr_available = True
try:
- from pax import deleteflags
+ from pax import deletextpax
except ImportError:
xattr_available = False
@@ -76,9 +76,9 @@ def main():
else:
for elf in args:
try:
- pax.deleteflags(elf)
+ pax.deletextpax(elf)
except pax.error:
- print('pax_deleteflags: XATTR_PAX not supported')
+ print('pax_deletextpax: XATTR_PAX not supported')
sys.exit(1)
if __name__ == '__main__':
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/
@ 2012-12-24 10:59 Anthony G. Basile
0 siblings, 0 replies; 10+ messages in thread
From: Anthony G. Basile @ 2012-12-24 10:59 UTC (permalink / raw
To: gentoo-commits
commit: 6754ad01706641315d2319dc4349de7fb49eb109
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Sun Dec 23 01:04:04 2012 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Dec 24 10:57:57 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=6754ad01
scripts/paxmodule.c: throw a PaxError when pax_getflags or set_xt_flags
---
scripts/paxmodule.c | 17 +++++++++++++++--
1 files changed, 15 insertions(+), 2 deletions(-)
diff --git a/scripts/paxmodule.c b/scripts/paxmodule.c
index 469e0cb..f77dabb 100644
--- a/scripts/paxmodule.c
+++ b/scripts/paxmodule.c
@@ -328,7 +328,13 @@ pax_getflags(PyObject *self, PyObject *args)
close(fd);
- return Py_BuildValue("si", buf, flags);
+ if( flags == UINT16_MAX )
+ {
+ PyErr_SetString(PaxError, "pax_getflags: no PAX flags found");
+ return NULL;
+ }
+ else
+ return Py_BuildValue("si", buf, flags);
}
@@ -488,7 +494,14 @@ set_xt_flags(int fd, uint16_t xt_flags)
memset(buf, 0, FLAGS_SIZE);
bin2string(xt_flags, buf);
- fsetxattr(fd, PAX_NAMESPACE, buf, strlen(buf), 0);
+
+ if( fsetxattr(fd, PAX_NAMESPACE, buf, strlen(buf), 0))
+ {
+ PyErr_SetString(PaxError, "pax_deletextpax: fremovexattr() failed");
+ return;
+ }
+ else
+ return;
}
#endif
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/
@ 2012-12-24 10:59 Anthony G. Basile
0 siblings, 0 replies; 10+ messages in thread
From: Anthony G. Basile @ 2012-12-24 10:59 UTC (permalink / raw
To: gentoo-commits
commit: 78e5ceac20454d19d92ca65cfdaf5883d437e410
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 22 19:02:46 2012 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Dec 24 10:57:57 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=78e5ceac
scripts/pypaxctl: make aware if XATTR_PAX support is available in pax.so
---
scripts/paxmodule.c | 6 +++-
scripts/pypaxctl | 70 +++++++++++++++++++++++++++------------------------
2 files changed, 42 insertions(+), 34 deletions(-)
diff --git a/scripts/paxmodule.c b/scripts/paxmodule.c
index 9d7e4e0..3e335b4 100644
--- a/scripts/paxmodule.c
+++ b/scripts/paxmodule.c
@@ -650,8 +650,9 @@ static PyObject *
pax_deleteflags(PyObject *self, PyObject *args)
{
const char *f_name;
+ int fd;
- if(!PyArg_ParseTuple(args, "s", &f_names))
+ if(!PyArg_ParseTuple(args, "s", &f_name))
{
PyErr_SetString(PaxError, "pax_deleteflags: PyArg_ParseTuple failed");
return NULL;
@@ -666,6 +667,9 @@ pax_deleteflags(PyObject *self, PyObject *args)
if( !fremovexattr(fd, PAX_NAMESPACE) )
return Py_BuildValue("");
else
+ {
+ PyErr_SetString(PaxError, "pax_deleteflags: fremovexattr() failed");
return NULL;
+ }
}
#endif
diff --git a/scripts/pypaxctl b/scripts/pypaxctl
index 6734e36..809d074 100755
--- a/scripts/pypaxctl
+++ b/scripts/pypaxctl
@@ -22,24 +22,38 @@ import sys
import getopt
import pax
+xattr_available = True
+try:
+ from pax import deleteflags
+except ImportError:
+ xattr_available = False
+
def run_usage():
print('Package Name : elfix')
print('Bug Reports : http://bugs.gentoo.org/')
print('Program Name : pypaxctl')
- print('Description : Get/set/delete PT_PAX or XATTR_PAX flags on an ELF object')
- print('')
- print('Usage : pypaxctl -g ELF get XATTR_PAX flags first, else get PT_PAX flags')
- print(' : pypaxctl -s [-PpEeMmRrSs] ELF set PT_PAX and XATTR_PAX flags whenever possible')
- print(' : pypaxctl -d ELF delete the XATTR_PAX field')
- print('')
- print('Note : If the pax.so module is compiled without PT_PAX or XATTR_PAX, then no operation will')
- print(' : be done on that field. Note -d is not available unless XATTR_PAX support is present')
+ if xattr_available:
+ print('Description : Get/set/delete PT_PAX or XATTR_PAX flags on an ELF object')
+ print('')
+ print('Usage : pypaxctl -g ELF get XATTR_PAX flags first, else get PT_PAX flags')
+ print(' : pypaxctl -s [-PpEeMmRrSs] ELF set PT_PAX and XATTR_PAX flags whenever possible')
+ print(' : pypaxctl -d ELF delete the XATTR_PAX field')
+ else:
+ print('Description : Get/set PT_PAX flags on an ELF object')
+ print('')
+ print('Usage : pypaxctl -g ELF get PT_PAX flags')
+ print(' : pypaxctl -s [-PpEeMmRrSs] ELF set PT_PAX flags whenever possible')
+ print('')
+ print('Note : Python module pax.so was compiled without XATTR_PAX support')
print('')
def main():
try:
- opts, args = getopt.getopt(sys.argv[1:], 'gs:d')
+ if xattr_available:
+ opts, args = getopt.getopt(sys.argv[1:], 'gs:d')
+ else:
+ opts, args = getopt.getopt(sys.argv[1:], 'gs:')
except getopt.GetoptError as err:
print(err)
sys.exit(1)
@@ -48,34 +62,24 @@ def main():
run_usage()
sys.exit(1)
- elf = None
- do_get = False
- do_set = False
- do_del = False
-
for o, a in opts:
if o == '-g':
- do_get = True
+ for elf in args:
+ ( str_flags, bin_flags ) = pax.getflags(elf)
+ print('%s' % str_flags)
elif o == '-s':
- flags = a
- do_set = True
- else:
- do_del = True
+ for elf in args:
+ pax.setstrflags(elf, a)
- if( do_get ):
- for elf in args:
- ( str_flags, bin_flags ) = pax.getflags(elf)
- print('%s' % str_flags)
- elif( do_set ):
- for elf in args:
- pax.setstrflags(elf, flags)
- else:
- for elf in args:
- try:
- pax.deleteflags(elf)
- except pax.error:
- print('pax_deleteflags: XATTR_PAX not supported')
- sys.exit(1)
+ # Don't worry if xattr_available = False
+ # because we can't get here if it is.
+ else:
+ for elf in args:
+ try:
+ pax.deleteflags(elf)
+ except pax.error:
+ print('pax_deleteflags: XATTR_PAX not supported')
+ sys.exit(1)
if __name__ == '__main__':
main()
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/
@ 2012-12-24 10:59 Anthony G. Basile
0 siblings, 0 replies; 10+ messages in thread
From: Anthony G. Basile @ 2012-12-24 10:59 UTC (permalink / raw
To: gentoo-commits
commit: bc5e7d580a131fee1dd1c5ddd602b6ce6f53246a
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 22 19:42:51 2012 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Dec 24 10:57:57 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=bc5e7d58
scripts/paxmodule.c: rename pax.error -> pax.PaxError
---
scripts/migrate-pax | 2 +-
scripts/paxmodule.c | 4 ++--
scripts/pypaxctl | 2 +-
scripts/revdep-pax | 16 ++++++++--------
4 files changed, 12 insertions(+), 12 deletions(-)
diff --git a/scripts/migrate-pax b/scripts/migrate-pax
index 5e46292..e30c306 100755
--- a/scripts/migrate-pax
+++ b/scripts/migrate-pax
@@ -117,7 +117,7 @@ def main():
# you can always set the pax flags with pax.so
# even on a busy text file because it will skip
# setting PT_PAX and only set the XATTR_PAX
- except pax.error:
+ except pax.PaxError:
if uid == 0:
fail.append(elf)
if verbose:
diff --git a/scripts/paxmodule.c b/scripts/paxmodule.c
index 14a7dcc..26d00ce 100644
--- a/scripts/paxmodule.c
+++ b/scripts/paxmodule.c
@@ -103,9 +103,9 @@ initpax(void)
if (m == NULL)
return;
- PaxError = PyErr_NewException("pax.error", NULL, NULL);
+ PaxError = PyErr_NewException("pax.PaxError", NULL, NULL);
Py_INCREF(PaxError);
- PyModule_AddObject(m, "error", PaxError);
+ PyModule_AddObject(m, "PaxError", PaxError);
#if PY_MAJOR_VERSION >= 3
return m;
diff --git a/scripts/pypaxctl b/scripts/pypaxctl
index 8cba7a7..0e8f3fe 100755
--- a/scripts/pypaxctl
+++ b/scripts/pypaxctl
@@ -77,7 +77,7 @@ def main():
for elf in args:
try:
pax.deletextpax(elf)
- except pax.error:
+ except pax.PaxError:
print('pax_deletextpax: XATTR_PAX not supported')
sys.exit(1)
diff --git a/scripts/revdep-pax b/scripts/revdep-pax
index 3ac5d2d..4bb3f36 100755
--- a/scripts/revdep-pax
+++ b/scripts/revdep-pax
@@ -103,7 +103,7 @@ def print_forward_linkings( forward_linkings, so2library_mappings, verbose ):
( binary_str_flags, binary_bin_flags ) = pax.getflags(binary)
sv = '%s ( %s )\n' % ( binary, binary_str_flags )
s = sv
- except pax.error:
+ except pax.PaxError:
missing_binaries.append(binary)
continue
@@ -116,7 +116,7 @@ def print_forward_linkings( forward_linkings, so2library_mappings, verbose ):
if binary_str_flags != library_str_flags:
s = '%s\n\t%s\t%s ( %s )' % ( s, soname, library, library_str_flags )
count = count + 1
- except pax.error:
+ except pax.PaxError:
missing_links.append(soname)
if verbose:
@@ -151,7 +151,7 @@ def print_reverse_linkings( reverse_linkings, so2library_mappings, verbose, exec
( library_str_flags, library_bin_flags ) = pax.getflags(library)
sv = '%s\t%s ( %s )\n' % ( soname, library, library_str_flags )
s = sv
- except pax.error:
+ except pax.PaxError:
missing_sonames.append(soname)
continue
@@ -170,7 +170,7 @@ def print_reverse_linkings( reverse_linkings, so2library_mappings, verbose, exec
if library_str_flags != binary_str_flags:
s = '%s\n\t%s ( %s )' % ( s, binary, binary_str_flags )
count = count + 1
- except pax.error:
+ except pax.PaxError:
missing_links.append(binary)
if verbose:
@@ -275,7 +275,7 @@ def run_binary(binary, verbose, mark, allyes):
mismatched_libraries.append(library)
if not verbose:
print('\t%s\t%s ( %s )' % ( soname, library, library_str_flags ))
- except pax.error:
+ except pax.PaxError:
print('file for soname %s not found' % soname)
if len(mismatched_libraries) == 0:
@@ -304,7 +304,7 @@ def run_binary(binary, verbose, mark, allyes):
if do_marking:
try:
migrate_flags(library, binary_str_flags, binary_bin_flags)
- except pax.error:
+ except pax.PaxError:
print("\n\tCould not set pax flags on %s, file is probably busy" % library)
print("\tShut down all processes that use it and try again")
( library_str_flags, library_bin_flags ) = pax.getflags(library)
@@ -365,7 +365,7 @@ def run_soname(name, verbose, use_soname, mark, allyes, executable_only):
mismatched_binaries.append(binary)
if not verbose:
print('\t%s ( %s )' % ( binary, binary_str_flags ))
- except pax.error:
+ except pax.PaxError:
print('cannot obtain pax flags for %s' % binary)
if len(mismatched_binaries) == 0:
@@ -396,7 +396,7 @@ def run_soname(name, verbose, use_soname, mark, allyes, executable_only):
if do_marking:
try:
migrate_flags(binary, library_str_flags, library_bin_flags)
- except pax.error:
+ except pax.PaxError:
print('\n\tCould not set pax flags on %s, file is probably busy' % binary)
print('\tShut down all processes that use it and try again')
( binary_str_flags, binary_bin_flags ) = pax.getflags(binary)
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/
@ 2012-12-24 10:59 Anthony G. Basile
0 siblings, 0 replies; 10+ messages in thread
From: Anthony G. Basile @ 2012-12-24 10:59 UTC (permalink / raw
To: gentoo-commits
commit: a9fe3d796f6e8d7a37115a81d2f7b3d74a71ceb6
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Sat Dec 22 22:20:36 2012 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Mon Dec 24 10:57:57 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=a9fe3d79
scripts/paxmodule.c: add important close(fd) in deletextpax()
---
scripts/migrate-pax | 2 +-
scripts/paxmodule.c | 4 ++++
2 files changed, 5 insertions(+), 1 deletions(-)
diff --git a/scripts/migrate-pax b/scripts/migrate-pax
index d5bc03a..1d5c2f7 100755
--- a/scripts/migrate-pax
+++ b/scripts/migrate-pax
@@ -78,7 +78,7 @@ def main():
opt_count += 1
elif o == '-d':
do_deleteall = True
- opt_cout += 1
+ opt_count += 1
elif o == '-h':
do_usage = True
opt_count += 1
diff --git a/scripts/paxmodule.c b/scripts/paxmodule.c
index 26d00ce..469e0cb 100644
--- a/scripts/paxmodule.c
+++ b/scripts/paxmodule.c
@@ -665,9 +665,13 @@ pax_deletextpax(PyObject *self, PyObject *args)
}
if( !fremovexattr(fd, PAX_NAMESPACE) )
+ {
+ close(fd);
return Py_BuildValue("");
+ }
else
{
+ close(fd);
PyErr_SetString(PaxError, "pax_deletextpax: fremovexattr() failed");
return NULL;
}
^ permalink raw reply related [flat|nested] 10+ messages in thread
* [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/
@ 2012-12-29 1:16 Anthony G. Basile
0 siblings, 0 replies; 10+ messages in thread
From: Anthony G. Basile @ 2012-12-29 1:16 UTC (permalink / raw
To: gentoo-commits
commit: dc5a32daff93f11d06008d7cb4b0ac433d9bdf35
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
AuthorDate: Fri Dec 28 19:34:12 2012 +0000
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org>
CommitDate: Sat Dec 29 01:12:28 2012 +0000
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=dc5a32da
scripts/migrate-pax: use portage to read NEEDED.ELF.2
---
scripts/migrate-pax | 281 ++++++++++++++++++++++++++-------------------------
1 files changed, 143 insertions(+), 138 deletions(-)
diff --git a/scripts/migrate-pax b/scripts/migrate-pax
index 09a41e2..1460c71 100755
--- a/scripts/migrate-pax
+++ b/scripts/migrate-pax
@@ -1,160 +1,165 @@
#!/usr/bin/env python
-
#
-# Note: This alternative way of doing revdep-pax only
-# works on Gentoo systems where NEEDED.ELF.2 all the
-# information we need generated by scanelf during emerge.
+# migrate-pax: this file is part of the elfix package
+# Copyright (C) 2012 Anthony G. Basile
#
-# See /usr/lib/portage/bin/misc-functions.sh ~line 520
-# echo "${arch:3};${obj};${soname};${rpath};${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.ELF.2
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see <http://www.gnu.org/licenses/>.
+
+
+# We use portage's NEEDED.ELF.2 file. The format is in
+# /usr/lib/portage/bin/misc-functions.sh ~line 520
+# echo "${arch:3};${obj};${soname};${rpath};${needed}" >> "${PORTAGE_BUILDDIR}"/build-info/NEEDED.ELF.2
import os
import re
import getopt
import sys
import pax
+import portage
+
+def get_objects():
-def get_object_needed():
+ vardb = portage.db[portage.root]["vartree"].dbapi
- var_db_pkg = '/var/db/pkg'
+ objects = []
- object_needed = {}
- for cat in os.listdir(var_db_pkg):
- catdir = '%s/%s' % (var_db_pkg, cat)
- for pkg in os.listdir(catdir):
- pkgdir = '%s/%s' % (catdir, pkg)
- need = '%s/%s' % (pkgdir, 'NEEDED.ELF.2')
- try:
- g = open(need, 'r')
- needs = g.readlines()
- for line in needs:
- line = line.strip()
- link = re.split(';', line)
- elf = link[1]
- sonames = re.split(',', link[4])
- object_needed[elf] = sonames
- except IOError:
- continue #File probably doesn't exist, which is okay
+ for pkg in vardb.cpv_all():
+ needed = vardb.aux_get(pkg, ['NEEDED.ELF.2'])[0].strip()
+ if not needed: # Some packages have no NEEDED.ELF.2
+ continue
+ for line in re.split('\n', needed):
+ link = re.split(';', line)
+ objects.append(link[1]) # link[1] is the ELF object
- return object_needed
+ return objects
def run_usage():
- print('Package Name : elfix')
- print('Bug Reports : http://bugs.gentoo.org/')
- print('Program Name : migrate')
- print('Description : Migrate PT_PAX to XATTR_PAX Flags on all system ELF objects')
- print('')
- print('Usage : migrate -v print out all system ELF objects')
- print(' : migrate -m [-v] migrate flags on all system ELF objects')
- print(' : migrate -d [-v] delete XATTR_PAX on all system ELF objects')
- print(' : migrate [-h] print out this help')
- print(' : -v be verbose when migrating')
- print('')
+ print('Package Name : elfix')
+ print('Bug Reports : http://bugs.gentoo.org/')
+ print('Program Name : migrate')
+ print('Description : Migrate PT_PAX to XATTR_PAX Flags on all system ELF objects')
+ print('')
+ print('Usage : migrate -v print out all system ELF objects')
+ print(' : migrate -m [-v] migrate flags on all system ELF objects')
+ print(' : migrate -d [-v] delete XATTR_PAX on all system ELF objects')
+ print(' : migrate [-h] print out this help')
+ print(' : -v be verbose when migrating')
+ print('')
def main():
- # Are we root?
- uid = os.getuid()
- if uid != 0:
- print('This program must be run as root')
- sys.exit(1)
-
- try:
- opts, args = getopt.getopt(sys.argv[1:], 'vmdh')
- except getopt.GetoptError as err:
- print(str(err)) # will print something like 'option -a not recognized'
- run_usage()
- sys.exit(1)
-
- verbose = False
- do_migration = False
- do_deleteall = False
- do_usage = False
-
- opt_count = 0
-
- for o, a in opts:
- if o == '-v':
- verbose = True
- opt_count += 1
- elif o == '-m':
- do_migration = True
- opt_count += 1
- elif o == '-d':
- do_deleteall = True
- opt_count += 1
- elif o == '-h':
- do_usage = True
- opt_count += 1
- else:
- print('Option included in getopt but not handled here!')
- print('Please file a bug')
- sys.exit(1)
-
- if do_usage:
- run_usage()
- sys.exit(0)
-
- if opt_count == 0 or opt_count > 2 or ( do_migration and do_deleteall):
- run_usage()
- sys.exit(1)
-
- # Do we have XATTR_PAX support?
- if do_migration or do_deleteall:
- try:
- from pax import deletextpax
- except ImportError:
- print('ERROR: Python module pax.so was compiled without XATTR_PAX support, cannot migrate or delete XATTR_PAX')
- sys.exit(1)
-
- object_needed = get_object_needed()
-
- fail = []
- none = []
-
- for elf in object_needed:
- try:
- flags = pax.getflags(elf)[0]
- if flags:
- if verbose:
- print("%s %s" % (flags, elf))
- else:
- none.append(elf)
- if verbose:
- print("NONE: %s" % elf)
-
- if do_migration:
- flags = re.sub('-','',flags)
- pax.setstrflags(elf, flags)
-
- if do_deleteall:
- pax.deletextpax(elf)
-
- # We should never get here, because you can
- # always getflags() via pax.so since you can
- # read PT_PAX even from a busy text file, and
- # you can always set the pax flags with pax.so
- # even on a busy text file because it will skip
- # setting PT_PAX and only set the XATTR_PAX
- except pax.PaxError:
- if uid == 0:
- fail.append(elf)
- if verbose:
- print("FAIL: %s" % elf)
-
- if verbose:
- if fail:
- print('\n')
- print("ELF executables for which the migration failed:")
- for elf in fail:
- print("\t%s" % elf)
- if none:
- print('\n')
- print("ELF executables lacking PT_PAX:")
- for elf in none:
- print("\t%s" % elf)
+ # Are we root?
+ uid = os.getuid()
+ if uid != 0:
+ print('This program must be run as root')
+ sys.exit(1)
+
+ try:
+ opts, args = getopt.getopt(sys.argv[1:], 'vmdh')
+ except getopt.GetoptError as err:
+ print(str(err)) # will print something like 'option -a not recognized'
+ run_usage()
+ sys.exit(1)
+
+ verbose = False
+ do_migration = False
+ do_deleteall = False
+ do_usage = False
+
+ opt_count = 0
+
+ for o, a in opts:
+ if o == '-v':
+ verbose = True
+ opt_count += 1
+ elif o == '-m':
+ do_migration = True
+ opt_count += 1
+ elif o == '-d':
+ do_deleteall = True
+ opt_count += 1
+ elif o == '-h':
+ do_usage = True
+ opt_count += 1
+ else:
+ print('Option included in getopt but not handled here!')
+ print('Please file a bug')
+ sys.exit(1)
+
+ if do_usage:
+ run_usage()
+ sys.exit(0)
+
+ if opt_count == 0 or opt_count > 2 or ( do_migration and do_deleteall):
+ run_usage()
+ sys.exit(1)
+
+ # Do we have XATTR_PAX support?
+ if do_migration or do_deleteall:
+ try:
+ from pax import deletextpax
+ except ImportError:
+ print('ERROR: Python module pax.so was compiled without XATTR_PAX support, cannot migrate or delete XATTR_PAX')
+ sys.exit(1)
+
+ objects = get_objects()
+
+ fail = []
+ none = []
+
+ for elf in objects:
+ try:
+ flags = pax.getflags(elf)[0]
+ if flags:
+ if verbose:
+ print("%s %s" % (flags, elf))
+ else:
+ none.append(elf)
+ if verbose:
+ print("NONE: %s" % elf)
+
+ if do_migration:
+ flags = re.sub('-','',flags)
+ pax.setstrflags(elf, flags)
+
+ if do_deleteall:
+ pax.deletextpax(elf)
+
+ # We should never get here, because you can
+ # always getflags() via pax.so since you can
+ # read PT_PAX even from a busy text file, and
+ # you can always set the pax flags with pax.so
+ # even on a busy text file because it will skip
+ # setting PT_PAX and only set the XATTR_PAX
+ except pax.PaxError:
+ if uid == 0:
+ fail.append(elf)
+ if verbose:
+ print("FAIL: %s" % elf)
+
+ if verbose:
+ if fail:
+ print('\n')
+ print("ELF executables for which the migration failed:")
+ for elf in fail:
+ print("\t%s" % elf)
+ if none:
+ print('\n')
+ print("ELF executables lacking PT_PAX:")
+ for elf in none:
+ print("\t%s" % elf)
if __name__ == '__main__':
- main()
+ main()
^ permalink raw reply related [flat|nested] 10+ messages in thread
end of thread, other threads:[~2012-12-29 1:16 UTC | newest]
Thread overview: 10+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-12-24 10:59 [gentoo-commits] proj/elfix:elfix-0.7.x commit in: scripts/ Anthony G. Basile
-- strict thread matches above, loose matches on Subject: below --
2012-12-29 1:16 Anthony G. Basile
2012-12-24 10:59 Anthony G. Basile
2012-12-24 10:59 Anthony G. Basile
2012-12-24 10:59 Anthony G. Basile
2012-12-24 10:59 Anthony G. Basile
2012-12-24 10:59 Anthony G. Basile
2012-12-24 10:59 Anthony G. Basile
2012-12-24 10:59 Anthony G. Basile
2012-12-24 10:59 Anthony G. Basile
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox