1 |
commit: 8ac71d82369c2569e1a2a973bd9c7cc44456ee92 |
2 |
Author: Anthony G. Basile <blueness <AT> gentoo <DOT> org> |
3 |
AuthorDate: Thu Dec 29 00:46:48 2011 +0000 |
4 |
Commit: Anthony G. Basile <blueness <AT> gentoo <DOT> org> |
5 |
CommitDate: Thu Dec 29 00:46:48 2011 +0000 |
6 |
URL: http://git.overlays.gentoo.org/gitweb/?p=proj/elfix.git;a=commit;h=8ac71d82 |
7 |
|
8 |
scripts/revdep-pax: do complex markings |
9 |
|
10 |
--- |
11 |
misc/test-revdep-pax/testrevdeppax.sh | 8 +++++++- |
12 |
scripts/revdep-pax | 24 ++++++++++++++++++------ |
13 |
2 files changed, 25 insertions(+), 7 deletions(-) |
14 |
|
15 |
diff --git a/misc/test-revdep-pax/testrevdeppax.sh b/misc/test-revdep-pax/testrevdeppax.sh |
16 |
index d841fae..8bd3156 100755 |
17 |
--- a/misc/test-revdep-pax/testrevdeppax.sh |
18 |
+++ b/misc/test-revdep-pax/testrevdeppax.sh |
19 |
@@ -1,6 +1,7 @@ |
20 |
#!/bin/bash |
21 |
|
22 |
PAXCTLNG="/usr/sbin/paxctl-ng" |
23 |
+PAXCTL="/sbin/paxctl" |
24 |
BINARY="/usr/bin/testrevdeppax" |
25 |
LIBRARY="/usr/lib/libmyrevdeppax.so.0.0.0" |
26 |
REVDEPPAX="/usr/sbin/revdep-pax" |
27 |
@@ -19,15 +20,20 @@ for i in "R" "r" "Rr" |
28 |
do |
29 |
for j in "R" "r" "Rr" |
30 |
do |
31 |
+ echo "============================================================================" |
32 |
$PAXCTLNG -z $BINARY |
33 |
$PAXCTLNG -$i $BINARY |
34 |
$PAXCTLNG -z $LIBRARY |
35 |
- $PAXCTLNG -$j $LIBRARY |
36 |
+ $PAXCTLNG -m$j $LIBRARY |
37 |
p=$i; [[ "$p" == "Rr" ]] && p="-" |
38 |
echo "Binary -> $p" |
39 |
p=$j; [[ "$p" == "Rr" ]] && p="-" |
40 |
echo "Library -> $p" |
41 |
$REVDEPPAX -m -y -l $LIBRARY |
42 |
echo |
43 |
+ $PAXCTLNG -v $BINARY |
44 |
+ $PAXCTLNG -v $LIBRARY |
45 |
+ $PAXCTL -v $BINARY 2>/dev/null |
46 |
+ $PAXCTL -v $LIBRARY 2>/dev/null |
47 |
done |
48 |
done |
49 |
|
50 |
diff --git a/scripts/revdep-pax b/scripts/revdep-pax |
51 |
index b0d8bcc..76add9c 100755 |
52 |
--- a/scripts/revdep-pax |
53 |
+++ b/scripts/revdep-pax |
54 |
@@ -211,23 +211,35 @@ def migrate_flags(importer, exporter_str_flags, exporter_bin_flags): |
55 |
# Force Off Force On Force Off + Warn |
56 |
# Force Off Nothing Force Off |
57 |
|
58 |
+ #See /usr/include/elf.h for these values |
59 |
+ pf_flags = { |
60 |
+ 'P':1<<4, 'p':1<<5, |
61 |
+ 'S':1<<6, 's':1<<7, |
62 |
+ 'M':1<<8, 'm':1<<9, |
63 |
+ 'X':1<<10, 'x':1<<11, |
64 |
+ 'E':1<<12, 'e':1<<13, |
65 |
+ 'R':1<<14, 'r':1<<15 |
66 |
+ } |
67 |
+ |
68 |
( importer_str_flags, importer_bin_flags ) = pax.getflags(importer) |
69 |
|
70 |
result_bin_flags = exporter_bin_flags |
71 |
|
72 |
for i in range(len(importer_str_flags)): |
73 |
if importer_str_flags[i].isupper() and exporter_str_flags[i].islower(): |
74 |
- print '\t\tWarning: %s has %s, trying to set to %s' % ( |
75 |
+ result_bin_flags = result_bin_flags ^ pf_flags[exporter_str_flags[i]] |
76 |
+ result_bin_flags = result_bin_flags | pf_flags[importer_str_flags[i]] |
77 |
+ print '\t\tWarning: %s has %s, refusing to set to %s' % ( |
78 |
importer, importer_str_flags[i], exporter_str_flags[i] ), |
79 |
if importer_str_flags[i].isupper() and exporter_str_flags[i] == '-': |
80 |
- print '\t\tWarning: %s has %s, trying to set to %s' % ( |
81 |
- importer, importer_str_flags[i], exporter_str_flags[i] ), |
82 |
+ result_bin_flags = result_bin_flags | pf_flags[importer_str_flags[i]] |
83 |
if importer_str_flags[i].islower() and exporter_str_flags[i].isupper(): |
84 |
- print '\t\tWarning: %s has %s, trying to set to %s' % ( |
85 |
+ result_bin_flags = result_bin_flags ^ pf_flags[exporter_str_flags[i]] |
86 |
+ result_bin_flags = result_bin_flags | pf_flags[importer_str_flags[i]] |
87 |
+ print '\t\tWarning: %s has %s, refusing to set to %s' % ( |
88 |
importer, importer_str_flags[i], exporter_str_flags[i] ), |
89 |
if importer_str_flags[i].islower() and exporter_str_flags[i] == '-': |
90 |
- print '\t\tWarning: %s has %s, trying to set to %s' % ( |
91 |
- importer, importer_str_flags[i], exporter_str_flags[i] ), |
92 |
+ result_bin_flags = result_bin_flags | pf_flags[importer_str_flags[i]] |
93 |
|
94 |
pax.setflags(importer, result_bin_flags) |