From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: <gentoo-commits+bounces-537574-garchives=archives.gentoo.org@lists.gentoo.org> Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) by finch.gentoo.org (Postfix) with ESMTP id 237BB1381F3 for <garchives@archives.gentoo.org>; Sat, 22 Dec 2012 18:31:58 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id E9E5521C090; Sat, 22 Dec 2012 18:31:49 +0000 (UTC) Received: from smtp.gentoo.org (smtp.gentoo.org [140.211.166.183]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 57A4421C090 for <gentoo-commits@lists.gentoo.org>; Sat, 22 Dec 2012 18:31:49 +0000 (UTC) Received: from hornbill.gentoo.org (hornbill.gentoo.org [94.100.119.163]) (using TLSv1 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 459ED33D7EE for <gentoo-commits@lists.gentoo.org>; Sat, 22 Dec 2012 18:31:48 +0000 (UTC) Received: from localhost.localdomain (localhost [127.0.0.1]) by hornbill.gentoo.org (Postfix) with ESMTP id D6D03E543C for <gentoo-commits@lists.gentoo.org>; Sat, 22 Dec 2012 18:31:46 +0000 (UTC) From: "Anthony G. Basile" <blueness@gentoo.org> To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Anthony G. Basile" <blueness@gentoo.org> Message-ID: <1356201097.53efaf7be4922c9dd494fafd91accb56a84a3fbc.blueness@gentoo> Subject: [gentoo-commits] proj/elfix:master commit in: scripts/ X-VCS-Repository: proj/elfix X-VCS-Files: scripts/paxmodule.c scripts/pypaxctl X-VCS-Directories: scripts/ X-VCS-Committer: blueness X-VCS-Committer-Name: Anthony G. Basile X-VCS-Revision: 53efaf7be4922c9dd494fafd91accb56a84a3fbc X-VCS-Branch: master Date: Sat, 22 Dec 2012 18:31:46 +0000 (UTC) Precedence: bulk List-Post: <mailto:gentoo-commits@lists.gentoo.org> List-Help: <mailto:gentoo-commits+help@lists.gentoo.org> List-Unsubscribe: <mailto:gentoo-commits+unsubscribe@lists.gentoo.org> List-Subscribe: <mailto:gentoo-commits+subscribe@lists.gentoo.org> List-Id: Gentoo Linux mail <gentoo-commits.gentoo.org> X-BeenThere: gentoo-commits@lists.gentoo.org X-Archives-Salt: 6003c78a-8c19-4799-9819-432203e9683a X-Archives-Hash: af0f4793504e80fecaf6904cbb292632 commit: 53efaf7be4922c9dd494fafd91accb56a84a3fbc 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: Sat Dec 22 18:31:37 2012 +0000 URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=53efaf7b 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()