[apparmor] [PATCH 1/6] Factor all the permissions dump code into a single perms method
John Johansen
john.johansen at canonical.com
Wed Mar 21 13:02:20 UTC 2012
Also make sure the perms method properly switches to hex and back to dec
as some of the previous perm dump code did not.
Signed-off-by: John Johansen <john.johansen at canonical.com>
---
parser/libapparmor_re/hfa.cc | 44 ++++++++++++++++++-----------------------
parser/libapparmor_re/hfa.h | 7 ++++++
2 files changed, 26 insertions(+), 25 deletions(-)
diff --git a/parser/libapparmor_re/hfa.cc b/parser/libapparmor_re/hfa.cc
index 2c09eff..d043e75 100644
--- a/parser/libapparmor_re/hfa.cc
+++ b/parser/libapparmor_re/hfa.cc
@@ -340,14 +340,8 @@ void DFA::remove_unreachable(dfaflags_t flags)
cerr << "unreachable: " << **i;
if (*i == start)
cerr << " <==";
- if (!(*i)->perms.is_null()) {
- cerr << " (0x" << hex
- << (*i)->perms.allow << " "
- << (*i)->perms.deny << " "
- << (*i)->perms.audit << " "
- << (*i)->perms.quiet << dec
- << ')';
- }
+ if (!(*i)->perms.is_null())
+ (*i)->perms.dump(cerr);
cerr << "\n";
}
State *current = *i;
@@ -632,12 +626,8 @@ void DFA::dump(ostream & os)
os << **i;
if (*i == start)
os << " <== (allow/deny/audit/quiet)";
- if (!(*i)->perms.is_null()) {
- os << " (0x " << hex << (*i)->perms.allow << "/"
- << (*i)->perms.deny << "/"
- << (*i)->perms.audit << "/"
- << (*i)->perms.quiet << ')';
- }
+ if (!(*i)->perms.is_null())
+ (*i)->perms.dump(os);
os << "\n";
}
}
@@ -651,16 +641,22 @@ void DFA::dump(ostream & os)
if (j->second == nonmatching) {
excluded.insert(j->first);
} else {
- os << **i << " -> " << *(j)->second << ": 0x"
+ os << **i;
+ if (!(*i)->perms.is_null())
+ os << " ", (*i)->perms.dump(os);
+ os << " -> " << *(j)->second << ": 0x"
<< hex << (int) j->first;
if (isprint(j->first))
os << " " << j->first;
- os << "\n";
+ os << dec << "\n";
}
}
if ((*i)->otherwise != nonmatching) {
- os << **i << " -> " << *(*i)->otherwise << ": [";
+ os << **i;
+ if (!(*i)->perms.is_null())
+ os << " ", (*i)->perms.dump(os);
+ os << " -> " << *(*i)->otherwise << ": [";
if (!excluded.empty()) {
os << "^";
for (Chars::iterator k = excluded.begin();
@@ -668,7 +664,7 @@ void DFA::dump(ostream & os)
if (isprint(*k))
os << *k;
else
- os << "\\0x" << hex << (int) *k;
+ os << "\\0x" << hex << (int) *k << dec;
}
}
os << "]\n";
@@ -693,11 +689,9 @@ void DFA::dump_dot_graph(ostream & os)
os << "\t\tstyle=bold" << "\n";
}
if (!(*i)->perms.is_null()) {
- os << "\t\tlabel=\"" << **i << "\\n(0x " << hex
- << (*i)->perms.allow << "/"
- << (*i)->perms.deny << "/"
- << (*i)->perms.audit << "/"
- << (*i)->perms.quiet << ")\"\n";
+ os << "\t\tlabel=\"" << **i << "\\n";
+ (*i)->perms.dump(os);
+ os << "\"\n";
}
os << "\t]" << "\n";
}
@@ -714,7 +708,7 @@ void DFA::dump_dot_graph(ostream & os)
if (isprint(j->first))
os << j->first;
else
- os << "\\0xhex" << (int) j->first;
+ os << "\\0x" << hex << (int) j->first << dec;
os << "\"\n\t]" << "\n";
}
@@ -729,7 +723,7 @@ void DFA::dump_dot_graph(ostream & os)
if (isprint(*i))
os << *i;
else
- os << "\\0x" << hex << (int) *i;
+ os << "\\0x" << hex << (int) *i << dec;
}
os << "]\"" << "\n";
}
diff --git a/parser/libapparmor_re/hfa.h b/parser/libapparmor_re/hfa.h
index 5364a6c..923c918 100644
--- a/parser/libapparmor_re/hfa.h
+++ b/parser/libapparmor_re/hfa.h
@@ -45,6 +45,13 @@ public:
bool is_null(void) { return !(allow | deny | audit | quiet); }
+ void dump(ostream &os)
+ {
+ os << " (0x " << hex
+ << allow << "/" << deny << "/" << audit << "/" << quiet
+ << ')' << dec;
+ }
+
void clear(void) { allow = deny = audit = quiet = 0; }
void add(perms_t &rhs)
{
--
1.7.9.1
More information about the AppArmor
mailing list