fix output of listen and setopts commands

The listen and setopts commands have broken encodings because the
tmp stream they use to handle diverging from the other commands
has does not set its write position to to the end of the copied data.
Instead the write head is set to the beginning so that when the
new data for the command is written it overwrites the begging of
the command instead of appending to it.

Signed-off-by: John Johansen <john.johan...@canonical.com>

---

=== modified file 'parser/af_unix.cc'
--- parser/af_unix.cc   2014-08-30 05:32:14 +0000
+++ parser/af_unix.cc   2014-08-31 02:09:00 +0000
@@ -316,7 +312,7 @@
  */
 int unix_rule::gen_policy_re(Profile &prof)
 {
-       std::ostringstream buffer, tmp;
+       std::ostringstream buffer;
        std::string buf;
 
        int mask = mode;
@@ -371,7 +367,8 @@
                }
 
                if (mask & AA_NET_LISTEN) {
-                       tmp.str(buffer.str());
+                       std::ostringstream tmp(buffer.str());
+                       tmp.seekp(0, ios_base::end);
                        tmp << "\\x" << std::setfill('0') << std::setw(2) << 
std::hex << CMD_LISTEN;
                        /* TODO: backlog conditional: for now match anything*/
                        tmp << "..";
@@ -383,7 +380,8 @@
                                goto fail;
                }
                if (mask & AA_NET_OPT) {
-                       tmp.str(buffer.str());
+                       std::ostringstream tmp(buffer.str());
+                       tmp.seekp(0, ios_base::end);
                        tmp << "\\x" << std::setfill('0') << std::setw(2) << 
std::hex << CMD_OPT;
                        /* TODO: sockopt conditional: for now match anything */
                        tmp << "..";



-- 
AppArmor mailing list
AppArmor@lists.ubuntu.com
Modify settings or unsubscribe at: 
https://lists.ubuntu.com/mailman/listinfo/apparmor

Reply via email to