~apparmor-dev/apparmor/apparmor-ubuntu-citrain-trusty

« back to all changes in this revision

Viewing changes to debian/patches/0064-lp1218099.patch

  • Committer: Seth Arnold
  • Date: 2014-03-12 02:05:16 UTC
  • mto: This revision was merged to the branch mainline in revision 1496.
  • Revision ID: seth.arnold@canonical.com-20140312020516-zjike3pmw6hi861h
[ Jamie Strandboge ]
 * debian/debhelper/dh_apparmor: exit with error if aa-easyprof does not
   exist
 * debian/control: drop Depends on apparmor-easyprof to Suggests for
   dh-apparmor
[ Seth Arnold, Jamie Strandboge, Steve Beattie, John Johansen, Tyler Hicks ]
* New upstream snapshot (LP: #1278702, #1061693, #1285653) dropping very
  large Ubuntu delta and fixing the following bugs:
  - Adjust fonts abstraction for libthai (LP: #1278702)
  - Support translated XDG user directories (LP: #1061693)
  - Adjust abstractions/web-data to include /var/www/html (LP: #1285653)
    Refresh 0002-add-debian-integration-to-lighttpd.patch to include
    /etc/lighttpd/conf-available/*.conf
  - Adjust debian/libapparmor1.symbols to reflect new upstream versioning
    for the aa_query_label() function
  - Raise exceptions in Python bindings when something fails
* ship new Python replacements for previous Perl-based tools
  - debian/apparmor-utils.install: remove usr/share/perl5/Immunix/*.pm and add
    usr/sbin/aa-autodep, usr/sbin/aa-cleanprof and usr/sbin/aa-mergeprof
  - debian/control:
    + remove various Perl dependencies
    + add python-apparmor and python3-apparmor
    + python3-apparmor Breaks: apparmor-easyprof to move the file since it
      ships dist-packages/apparmor/__init__.py now
  - debian/apparmor-utils.manpages: ship new manpages for aa-cleanprof and
    aa-mergeprof
  - debian/rules: build and install Python tools
* debian/apparmor.install:
  - install apparmorfs, dovecot, kernelvars, securityfs, sys,
    and xdg-user-dirs tunables and xdg-user-dirs.d directory
* debian/apparmor.dirs:
  - install /etc/apparmor.d/tunables/xdg-user-dirs.d
* debian/apparmor.postinst: create xdg-user-dirs.d
* debian/apparmor.postrm: remove xdg-user-dirs.d
* Remaining patches:
  - 0001-add-chromium-browser.patch
  - 0002-add-debian-integration-to-lighttpd.patch
  - 0003-ubuntu-manpage-updates.patch
  - 0004-libapparmor-layout-deb.patch (renamed from 0008)
  - 0005-libapparmor-mention-dbus-method-in-getcon-man.patch (renamed from
    0068)
  - 0006-etc-writable.patch (renamed from 0070)
  - 0007-aa-utils_are_bilingual.patch (renamed from 0077)
  - 0008-remove-ptrace.patch
  - 0009-convert-to-rules.patch
  - 0010-list-fns.patch
  - 0011-parse-mode.patch
  - 0012-add-decimal-interp.patch
  - 0013-policy_mediates.patch
  - 0014-fix-failpath.patch
  - 0015-feature_file.patch
  - 0016-fix-network.patch
  - 0017-aare-to-class.patch
  - 0018-add-mediation-unix.patch
  - 0019-parser_version.patch
  - 0020-caching.patch
  - 0021-label-class.patch
  - 0022-signal.patch
  - 0023-fix-lexer-debug.patch
  - 0024-ptrace.patch
  - 0025-use-diff-encode.patch
  - 0026-fix-serialize.patch
  - 0027-fix-af.patch
  - 0028-opt_arg.patch
  - 0029-tests-cond-dbus.patch
  - 0030-tests.diff
* Move manpages from libapparmor1 to libapparmor-dev
  - debian/libapparmor-dev.manpages: install aa_change_hat.2,
    aa_change_profile.2, aa_find_mountpoint.2, aa_getcon.2
  - debian/control: libapparmor-dev Replaces: and Breaks: libapparmor1
* Move /usr/lib/python3/dist-packages/apparmor/__init__.py from
  apparmor-easyprof to python3-apparmor
  - debian/control: python3-apparmor Breaks: apparmor-easyprof
  - debian/apparmor-easyprof.install: remove
    usr/lib/python*.*/site-packages/apparmor*
* New profiles and abstractions:
  - debian/apparmor.install: tunables/dovecot, tunables/kernelvars,
    tunables/xdg-user-dirs, tunables/xdg-user-dirs.d
* Test merge from upstream new pyutils branch (rev 2385)

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
------------------------------------------------------------
2
 
revno: 2161
3
 
fixes bug: https://launchpad.net/bugs/1218099
4
 
committer: Steve Beattie <sbeattie@ubuntu.com>
5
 
branch nick: master
6
 
timestamp: Thu 2013-08-29 12:34:13 -0700
7
 
message:
8
 
  parser - add support for variable expansion in dbus rules
9
 
  Bug: https://bugs.launchpad.net/bugs/1218099
10
 
  
11
 
  This patch adds support for expanding variables with dbus rules.
12
 
  Specifically, they can expanded within the bus, name, path, member,
13
 
  interface, and peer label fields.
14
 
  
15
 
  Parser test cases and regression test cases are added as well.
16
 
  
17
 
  Patch history:
18
 
    v1: initial version of patch
19
 
    v2: add equality.sh tests to verify that the results of using
20
 
        variable expansion is the same as what should be equivalent rules
21
 
  
22
 
  Signed-off-by: Steve Beattie <sbeattie@ubuntu.com>
23
 
  Acked-by: Tyler Hicks <tyhicks@canonical.com>
24
 
  Acked-by: Seth Arnold <seth.arnold@canonical.com>
25
 
diff:
26
 
=== modified file 'parser/dbus.c'
27
 
Index: apparmor-2.8.0/parser/dbus.c
28
 
===================================================================
29
 
--- apparmor-2.8.0.orig/parser/dbus.c   2013-08-29 16:28:18.000000000 -0500
30
 
+++ apparmor-2.8.0/parser/dbus.c        2013-08-29 16:28:18.000000000 -0500
31
 
@@ -141,6 +141,30 @@
32
 
        return ent;
33
 
 }
34
 
 
35
 
+#define DUP_STRING(orig, new, field) \
36
 
+       (new)->field = (orig)->field ? strdup((orig)->field) : NULL
37
 
+
38
 
+struct dbus_entry *dup_dbus_entry(struct dbus_entry *orig)
39
 
+{
40
 
+       struct dbus_entry *ent = NULL;
41
 
+       ent = (struct dbus_entry *) calloc(1, sizeof(struct dbus_entry));
42
 
+       if (!ent)
43
 
+               return NULL;
44
 
+
45
 
+       DUP_STRING(orig, ent, bus);
46
 
+       DUP_STRING(orig, ent, name);
47
 
+       DUP_STRING(orig, ent, peer_label);
48
 
+       DUP_STRING(orig, ent, path);
49
 
+       DUP_STRING(orig, ent, interface);
50
 
+       DUP_STRING(orig, ent, member);
51
 
+       ent->mode = orig->mode;
52
 
+       ent->audit = orig->audit;
53
 
+       ent->deny = orig->deny;
54
 
+
55
 
+       ent->next = orig->next;
56
 
+
57
 
+       return ent;
58
 
+}
59
 
 
60
 
 void print_dbus_entry(struct dbus_entry *ent)
61
 
 {
62
 
Index: apparmor-2.8.0/parser/dbus.h
63
 
===================================================================
64
 
--- apparmor-2.8.0.orig/parser/dbus.h   2013-08-29 16:28:18.000000000 -0500
65
 
+++ apparmor-2.8.0/parser/dbus.h        2013-08-29 16:28:18.000000000 -0500
66
 
@@ -43,6 +43,7 @@
67
 
 void free_dbus_entry(struct dbus_entry *ent);
68
 
 struct dbus_entry *new_dbus_entry(int mode, struct cond_entry *conds,
69
 
                                  struct cond_entry *peer_conds);
70
 
+struct dbus_entry *dup_dbus_entry(struct dbus_entry *ent);
71
 
 void print_dbus_entry(struct dbus_entry *ent);
72
 
 
73
 
 #endif /* __AA_DBUS_H */
74
 
Index: apparmor-2.8.0/parser/parser_variable.c
75
 
===================================================================
76
 
--- apparmor-2.8.0.orig/parser/parser_variable.c        2013-08-29 16:28:18.000000000 -0500
77
 
+++ apparmor-2.8.0/parser/parser_variable.c     2013-08-29 16:28:18.000000000 -0500
78
 
@@ -29,6 +29,7 @@
79
 
 
80
 
 #include "parser.h"
81
 
 #include "mount.h"
82
 
+#include "dbus.h"
83
 
 
84
 
 static inline char *get_var_end(char *var)
85
 
 {
86
 
@@ -213,6 +214,19 @@
87
 
        return 1;
88
 
 }
89
 
 
90
 
+int clone_and_chain_dbus(void *v)
91
 
+{
92
 
+       struct dbus_entry *entry = v;
93
 
+
94
 
+       struct dbus_entry *dup = dup_dbus_entry(entry);
95
 
+       if (!dup)
96
 
+               return 0;
97
 
+
98
 
+       entry->next = dup;
99
 
+
100
 
+       return 1;
101
 
+}
102
 
+
103
 
 static int process_variables_in_entries(struct cod_entry *entry_list)
104
 
 {
105
 
        int ret = TRUE, rc;
106
 
@@ -253,6 +267,42 @@
107
 
        return ret;
108
 
 }
109
 
 
110
 
+static int process_dbus_variables(struct dbus_entry *entry_list)
111
 
+{
112
 
+       int ret = TRUE, rc;
113
 
+       struct dbus_entry *entry;
114
 
+
115
 
+       list_for_each(entry_list, entry) {
116
 
+               rc = expand_entry_variables(&entry->bus, entry,
117
 
+                                           clone_and_chain_dbus);
118
 
+               if (!rc)
119
 
+                       return FALSE;
120
 
+               rc = expand_entry_variables(&entry->name, entry,
121
 
+                                           clone_and_chain_dbus);
122
 
+               if (!rc)
123
 
+                       return FALSE;
124
 
+               rc = expand_entry_variables(&entry->peer_label, entry,
125
 
+                                           clone_and_chain_dbus);
126
 
+               if (!rc)
127
 
+                       return FALSE;
128
 
+               rc = expand_entry_variables(&entry->path, entry,
129
 
+                                           clone_and_chain_dbus);
130
 
+               if (!rc)
131
 
+                       return FALSE;
132
 
+               rc = expand_entry_variables(&entry->interface, entry,
133
 
+                                           clone_and_chain_dbus);
134
 
+               if (!rc)
135
 
+                       return FALSE;
136
 
+               rc = expand_entry_variables(&entry->member, entry,
137
 
+                                           clone_and_chain_dbus);
138
 
+               if (!rc)
139
 
+                       return FALSE;
140
 
+
141
 
+       }
142
 
+
143
 
+       return ret;
144
 
+}
145
 
+
146
 
 int process_variables(struct codomain *cod)
147
 
 {
148
 
        int error = 0;
149
 
@@ -265,6 +315,10 @@
150
 
                error = -1;
151
 
        }
152
 
 
153
 
+       if (!process_dbus_variables(cod->dbus_ents)) {
154
 
+                       error = -1;
155
 
+       }
156
 
+
157
 
        if (process_hat_variables(cod) != 0) {
158
 
                        error = -1;
159
 
        }
160
 
Index: apparmor-2.8.0/parser/tst/equality.sh
161
 
===================================================================
162
 
--- apparmor-2.8.0.orig/parser/tst/equality.sh  2013-08-29 16:28:18.000000000 -0500
163
 
+++ apparmor-2.8.0/parser/tst/equality.sh       2013-08-29 16:28:18.000000000 -0500
164
 
@@ -148,6 +148,35 @@
165
 
        "/t { dbus (send,receive,,,,,,,,,,,,,,,,bind), }" \
166
 
        "/t { dbus (send,send,send,send send receive,bind), }" \
167
 
 
168
 
+verify_binary_equality "dbus variable expansion" \
169
 
+       "/t { dbus (send, receive) path=/com/foo member=spork interface=org.foo peer=(name=com.foo label=/com/foo), }" \
170
 
+       "@{FOO}=foo
171
 
+           /t { dbus (send, receive) path=/com/@{FOO} member=spork interface=org.@{FOO} peer=(name=com.@{FOO} label=/com/@{FOO}), }" \
172
 
+       "@{FOO}=foo
173
 
+        @{SPORK}=spork
174
 
+           /t { dbus (send, receive) path=/com/@{FOO} member=@{SPORK} interface=org.@{FOO} peer=(name=com.@{FOO} label=/com/@{FOO}), }" \
175
 
+       "@{FOO}=/com/foo
176
 
+            /t { dbus (send, receive) path=@{FOO} member=spork interface=org.foo peer=(name=com.foo label=@{FOO}), }" \
177
 
+       "@{FOO}=com
178
 
+            /t { dbus (send, receive) path=/@{FOO}/foo member=spork interface=org.foo peer=(name=@{FOO}.foo label=/@{FOO}/foo), }"
179
 
+
180
 
+verify_binary_equality "dbus variable expansion, multiple values/rules" \
181
 
+       "/t { dbus (send, receive) path=/com/foo, dbus (send, receive) path=/com/bar, }" \
182
 
+       "@{FOO}=foo
183
 
+           /t { dbus (send, receive) path=/com/@{FOO}, dbus (send, receive) path=/com/bar, }" \
184
 
+       "@{FOO}=foo bar
185
 
+           /t { dbus (send, receive) path=/com/@{FOO}, }" \
186
 
+       "@{FOO}=bar foo
187
 
+           /t { dbus (send, receive) path=/com/@{FOO}, }"
188
 
+
189
 
+verify_binary_equality "dbus variable expansion, ensure rule de-duping occurs" \
190
 
+       "/t { dbus (send, receive) path=/com/foo, dbus (send, receive) path=/com/bar, }" \
191
 
+       "/t { dbus (send, receive) path=/com/foo, dbus (send, receive) path=/com/bar, dbus (send, receive) path=/com/bar, }" \
192
 
+       "@{FOO}=bar foo bar foo
193
 
+           /t { dbus (send, receive) path=/com/@{FOO}, }" \
194
 
+       "@{FOO}=bar foo bar foo
195
 
+           /t { dbus (send, receive) path=/com/@{FOO}, dbus (send, receive) path=/com/@{FOO}, }"
196
 
+
197
 
 if [ $fails -ne 0 -o $errors -ne 0 ]
198
 
 then
199
 
        printf "ERRORS: %d\nFAILS: %d\n" $errors $fails 2>&1
200
 
Index: apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_1.sd
201
 
===================================================================
202
 
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
203
 
+++ apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_1.sd  2013-08-29 16:28:18.000000000 -0500
204
 
@@ -0,0 +1,11 @@
205
 
+#=DESCRIPTION reference variables in dbus rules
206
 
+#=EXRESULT PASS
207
 
+
208
 
+@{FOO}=bar baz
209
 
+@{BAR}=@{FOO} blort
210
 
+
211
 
+/does/not/exist {
212
 
+  dbus (send)
213
 
+       bus=session
214
 
+       path="/com/canonical/hud/applications/@{BAR}",
215
 
+}
216
 
Index: apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_2.sd
217
 
===================================================================
218
 
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
219
 
+++ apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_2.sd  2013-08-29 16:28:18.000000000 -0500
220
 
@@ -0,0 +1,11 @@
221
 
+#=DESCRIPTION reference variables in dbus rules, interfaces
222
 
+#=EXRESULT PASS
223
 
+
224
 
+@{ORGS}=freedesktop ubuntu gnome kde
225
 
+
226
 
+/does/not/exist {
227
 
+  dbus (receive)
228
 
+       bus=accessibility
229
 
+       interface=org.@{ORGS}.DBus.Properties
230
 
+       path="/com/canonical/hud/applications/bar",
231
 
+}
232
 
Index: apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_3.sd
233
 
===================================================================
234
 
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
235
 
+++ apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_3.sd  2013-08-29 16:28:18.000000000 -0500
236
 
@@ -0,0 +1,10 @@
237
 
+#=DESCRIPTION reference variables in dbus rules, bus fields
238
 
+#=EXRESULT PASS
239
 
+
240
 
+@{BUSES}=session system accessability choochoo
241
 
+
242
 
+/does/not/exist {
243
 
+  dbus (send)
244
 
+       bus=@{BUSES}
245
 
+       path="/com/canonical/hud/applications/baz",
246
 
+}
247
 
Index: apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_4.sd
248
 
===================================================================
249
 
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
250
 
+++ apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_4.sd  2013-08-29 16:28:18.000000000 -0500
251
 
@@ -0,0 +1,13 @@
252
 
+#=DESCRIPTION reference variables in dbus rules, members
253
 
+#=EXRESULT PASS
254
 
+
255
 
+@{MEMBERS}=blurt blirt @{BAR}
256
 
+@{BAR}=@{FOO} blort
257
 
+@{FOO}=bink bank bonk blurry*
258
 
+
259
 
+/does/not/exist {
260
 
+  dbus (send)
261
 
+       bus=session
262
 
+       member=@{MEMBERS}
263
 
+       path="/com/canonical/hud/applications/biff",
264
 
+}
265
 
Index: apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_5.sd
266
 
===================================================================
267
 
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
268
 
+++ apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_5.sd  2013-08-29 16:28:18.000000000 -0500
269
 
@@ -0,0 +1,12 @@
270
 
+#=DESCRIPTION reference variables in dbus rules, with peers
271
 
+#=EXRESULT PASS
272
 
+
273
 
+@{FOO}=bar baz
274
 
+@{BAR}=@{FOO} blort
275
 
+
276
 
+/does/not/exist {
277
 
+  dbus (send, receive)
278
 
+       bus=session
279
 
+       path="/foo/bar" member="bar"
280
 
+       peer=(name="com.@{FOO}" label="/usr/bin/app.@{FOO}"),
281
 
+}
282
 
Index: apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_6.sd
283
 
===================================================================
284
 
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
285
 
+++ apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_6.sd  2013-08-29 16:28:18.000000000 -0500
286
 
@@ -0,0 +1,11 @@
287
 
+#=DESCRIPTION reference variables in dbus rules, with name
288
 
+#=EXRESULT PASS
289
 
+
290
 
+@{FOO}=bar baz
291
 
+@{BAR}=@{FOO} blort
292
 
+
293
 
+/does/not/exist {
294
 
+  dbus (bind)
295
 
+       bus=session
296
 
+       name="com.@{BAR}.@{FOO}",
297
 
+}
298
 
Index: apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_7.sd
299
 
===================================================================
300
 
--- /dev/null   1970-01-01 00:00:00.000000000 +0000
301
 
+++ apparmor-2.8.0/parser/tst/simple_tests/vars/vars_dbus_7.sd  2013-08-29 16:28:18.000000000 -0500
302
 
@@ -0,0 +1,11 @@
303
 
+#=DESCRIPTION reference variables in dbus rules, with duplicates
304
 
+#=EXRESULT PASS
305
 
+
306
 
+@{FOO}=bar baz bar
307
 
+@{BAR}=@{FOO} blort
308
 
+
309
 
+/does/not/exist {
310
 
+  dbus (bind)
311
 
+       bus=session
312
 
+       name="com.@{BAR}.@{FOO}",
313
 
+}
314
 
Index: apparmor-2.8.0/tests/regression/apparmor/dbus.inc
315
 
===================================================================
316
 
--- apparmor-2.8.0.orig/tests/regression/apparmor/dbus.inc      2013-08-29 16:28:18.000000000 -0500
317
 
+++ apparmor-2.8.0/tests/regression/apparmor/dbus.inc   2013-08-29 16:28:18.000000000 -0500
318
 
@@ -10,11 +10,22 @@
319
 
 gendbusprofile()
320
 
 {
321
 
        genprofile --stdin <<EOF
322
 
+${__dbus_var_decl}
323
 
 $test {
324
 
   @{gen $test}
325
 
   $@
326
 
 }
327
 
 EOF
328
 
+       unset __dbus_var_decl
329
 
+}
330
 
+
331
 
+# the arguments passed are emitted in the profile's prologue, for
332
 
+# setting profile variables, e.g.
333
 
+#      set_dbus_var "@{MY_DBUS_VAR}=stuff"
334
 
+# the saved variable declaration gets unset after each test run
335
 
+set_dbus_var()
336
 
+{
337
 
+  __dbus_var_decl=$@
338
 
 }
339
 
 
340
 
 start_bus()
341
 
Index: apparmor-2.8.0/tests/regression/apparmor/dbus_message.sh
342
 
===================================================================
343
 
--- apparmor-2.8.0.orig/tests/regression/apparmor/dbus_message.sh       2013-08-29 16:28:18.000000000 -0500
344
 
+++ apparmor-2.8.0/tests/regression/apparmor/dbus_message.sh    2013-08-29 16:28:18.000000000 -0500
345
 
@@ -102,6 +102,34 @@
346
 
 runtestfg "message (send allowed w/ bus, dest, path, interface, method)" pass $confined_args
347
 
 checktestfg "compare_logs $unconfined_log eq $confined_log"
348
 
 
349
 
+# Make sure send is allowed when confined with appropriate permissions along
350
 
+# with conditionals and variables (same tests as above, with vars)
351
 
+
352
 
+set_dbus_var "@{BUSES}=session system"
353
 
+message_gendbusprofile "dbus send bus=@{BUSES},"
354
 
+runtestfg "message (send allowed w/ bus)" pass $confined_args
355
 
+checktestfg "compare_logs $unconfined_log eq $confined_log"
356
 
+
357
 
+set_dbus_var "@{PEERNAMES}=com.ubuntu.what net.apparmor.wiki org.freedesktop.DBus"
358
 
+message_gendbusprofile "dbus send bus=session peer=(name=@{PEERNAMES}),"
359
 
+runtestfg "message (send allowed w/ bus, dest)" pass $confined_args
360
 
+checktestfg "compare_logs $unconfined_log eq $confined_log"
361
 
+
362
 
+set_dbus_var "@{PATHNAMES}=DBus spork spoon spork"
363
 
+message_gendbusprofile "dbus send bus=session path=/org/freedesktop/@{PATHNAMES} peer=(name=org.freedesktop.DBus),"
364
 
+runchecktest "message (send allowed w/ bus, dest, path)" pass $confined_args
365
 
+checktestfg "compare_logs $unconfined_log eq $confined_log"
366
 
+
367
 
+set_dbus_var "@{INTERFACE_NAMES}=DBus spork spoon spork"
368
 
+message_gendbusprofile "dbus send bus=session path=/org/freedesktop/DBus interface=org.freedesktop.@{INTERFACE_NAMES} peer=(name=org.freedesktop.DBus),"
369
 
+runtestfg "message (send allowed w/ bus, dest, path, interface)" pass $confined_args
370
 
+checktestfg "compare_logs $unconfined_log eq $confined_log"
371
 
+
372
 
+set_dbus_var "@{MEMBERS}=Hello ListNames Spork Spoon"
373
 
+message_gendbusprofile "dbus send bus=session path=/org/freedesktop/DBus interface=org.freedesktop.DBus member=@{MEMBERS} peer=(name=org.freedesktop.DBus),"
374
 
+runtestfg "message (send allowed w/ bus, dest, path, interface, method)" pass $confined_args
375
 
+checktestfg "compare_logs $unconfined_log eq $confined_log"
376
 
+
377
 
 # Make sure send is denied when confined with appropriate permissions along
378
 
 # with incorrect conditionals
379