Fixed Shorewall to work with latest Docker iptables chains
Andy Hall <[email protected]> Tue, 28 Apr 2026 10:35:48 +0100
| Newsgroups | gmane.comp.security.shorewall |
|---|---|
| Message-ID | <CAOp5WB4yG6sO8yFoYjv8pr3TDya-iJAEam72EMt239tB=dHqrw@mail.gmail.com> |
--===============1452998420795711903==
Content-Type: multipart/alternative; boundary="0000000000007ca088065081f5b0"
--0000000000007ca088065081f5b0
Content-Type: text/plain; charset="UTF-8"
When switching from Docker v26 to v29 Shorewall no longer handled the new
iptables chains so we fixed Misc.pm / Compiler.pm / Chains.pm to handle
these...
# diff /usr/share/perl5/vendor_perl/Shorewall/Misc.pm
/usr/share/perl5/vendor_perl/Shorewall/Misc.pm.orig
689,692d688
< add_commands( $chainref, '[ -n "$g_dockerbridge" ] && echo "-A
DOCKER-FORWARD -j DOCKER-BRIDGE" >&3' );
< add_commands( $chainref, '[ -n "$g_dockerct" ] && echo "-A
DOCKER-FORWARD -j DOCKER-CT" >&3' );
< add_commands( $chainref, '[ -n "$g_dockerforward" ] && echo "-A
FORWARD -j DOCKER-FORWARD" >&3' );
< add_commands( $chainref, '[ -n "$g_dockerinternal" ] && echo "-A
DOCKER-FORWARD -j DOCKER-INTERNAL" >&3' );
# diff /usr/share/perl5/vendor_perl/Shorewall/Compiler.pm
/usr/share/perl5/vendor_perl/Shorewall/Compiler.pm.orig
273,276d272
< emit( 'chain_exists DOCKER-BRIDGE && g_dockerbridge=Yes' );
< emit( 'chain_exists DOCKER-CT && g_dockerct=Yes' );
< emit( 'chain_exists DOCKER-FORWARD && g_dockerforward=Yes' );
< emit( 'chain_exists DOCKER-INTERNAL && g_dockerinternal=Yes' );
# diff /usr/share/perl5/vendor_perl/Shorewall/Chains.pm
/usr/share/perl5/vendor_perl/Shorewall/Chains.pm.orig
3402,3413d3401
< $chainref = new_standard_chain( 'DOCKER-BRIDGE' );
< set_optflags( $chainref, DONT_OPTIMIZE | DONT_DELETE | DONT_MOVE );
< add_commands( $chainref, '[ -f ${VARDIR}/.filter_DOCKER-BRIDGE ] &&
cat ${VARDIR}/.filter_DOCKER-BRIDGE >&3' );
< $chainref = new_standard_chain( 'DOCKER-CT' );
< set_optflags( $chainref, DONT_OPTIMIZE | DONT_DELETE | DONT_MOVE );
< add_commands( $chainref, '[ -f ${VARDIR}/.filter_DOCKER-CT ] && cat
${VARDIR}/.filter_DOCKER-CT >&3' );
< $chainref = new_standard_chain( 'DOCKER-FORWARD' );
< set_optflags( $chainref, DONT_OPTIMIZE | DONT_DELETE | DONT_MOVE );
< add_commands( $chainref, '[ -f ${VARDIR}/.filter_DOCKER-FORWARD ]
&& cat ${VARDIR}/.filter_DOCKER-FORWARD >&3' );
< $chainref = new_standard_chain( 'DOCKER-INTERNAL' );
< set_optflags( $chainref, DONT_OPTIMIZE | DONT_DELETE | DONT_MOVE );
< add_commands( $chainref, '[ -f ${VARDIR}/.filter_DOCKER-INTERNAL ]
&& cat ${VARDIR}/.filter_DOCKER-INTERNAL >&3' );
8784,8787d8771
< qq( [ -n "\$g_dockerbridge" ] && $tool -t filter -S
DOCKER-BRIDGE | tail -n +2 > \${VARDIR}/.filter_DOCKER-BRIDGE),
< qq( [ -n "\$g_dockerct" ] && $tool -t filter -S
DOCKER-CT | tail -n +2 > \${VARDIR}/.filter_DOCKER-CT),
< qq( [ -n "\$g_dockerforward" ] && $tool -t filter -S
DOCKER-FORWARD | tail -n +2 > \${VARDIR}/.filter_DOCKER-FORWARD),
< qq( [ -n "\$g_dockerinternal" ] && $tool -t filter -S
DOCKER-INTERNAL | tail -n +2 > \${VARDIR}/.filter_DOCKER-INTERNAL),
8811,8814d8794
< q( rm -f ${VARDIR}/.filter_DOCKER-BRIDGE),
< q( rm -f ${VARDIR}/.filter_DOCKER-CT),
< q( rm -f ${VARDIR}/.filter_DOCKER-FORWARD),
< q( rm -f ${VARDIR}/.filter_DOCKER-INTERNAL),
9331,9342d9310
< } elsif ( $name eq 'DOCKER-BRIDGE' ) {
< ensure_cmd_mode;
< emit( '[ -n "$g_dockerbridge" ] && echo
":DOCKER-BRIDGE - [0:0]" >&3' );
< } elsif ( $name eq 'DOCKER-CT' ) {
< ensure_cmd_mode;
< emit( '[ -n "$g_dockerct" ] && echo ":DOCKER-CT -
[0:0]" >&3' );
< } elsif ( $name eq 'DOCKER-FORWARD' ) {
< ensure_cmd_mode;
< emit( '[ -n "$g_dockerforward" ] && echo
":DOCKER-FORWARD - [0:0]" >&3' );
< } elsif ( $name eq 'DOCKER-INTERNAL' ) {
< ensure_cmd_mode;
< emit( '[ -n "$g_dockerinternal" ] && echo
":DOCKER-INTERNAL - [0:0]" >&3' );
9462,9477d9429
< } elsif ( $name eq 'DOCKER-BRIDGE' ) {
< ensure_cmd_mode1;
< print( '[ -n "$g_dockerbridge" ] && echo
":DOCKER-BRIDGE - [0:0]" >&3' );
< print "\n";
< } elsif ( $name eq 'DOCKER-CT' ) {
< ensure_cmd_mode1;
< print( '[ -n "$g_dockerct" ] && echo ":DOCKER-CT -
[0:0]" >&3' );
< print "\n";
< } elsif ( $name eq 'DOCKER-FORWARD' ) {
< ensure_cmd_mode1;
< print( '[ -n "$g_dockerforward" ] && echo
":DOCKER-FORWARD - [0:0]" >&3' );
< print "\n";
< } elsif ( $name eq 'DOCKER-INTERNAL' ) {
< ensure_cmd_mode1;
< print( '[ -n "$g_dockerinternal" ] && echo
":DOCKER-INTERNAL - [0:0]" >&3' );
< print "\n";
9575,9586d9526
< } elsif ( $name eq 'DOCKER-BRIDGE' ) {
< ensure_cmd_mode;
< emit( '[ -n "$g_dockerbridge" ] && echo
":DOCKER-BRIDGE - [0:0]" >&3' );
< } elsif ( $name eq 'DOCKER-CT' ) {
< ensure_cmd_mode;
< emit( '[ -n "$g_dockerct" ] && echo ":DOCKER-CT -
[0:0]" >&3' );
< } elsif ( $name eq 'DOCKER-FORWARD' ) {
< ensure_cmd_mode;
< emit( '[ -n "$g_dockerforward" ] && echo
":DOCKER-FORWARD - [0:0]" >&3' );
< } elsif ( $name eq 'DOCKER-INTERNAL' ) {
< ensure_cmd_mode;
< emit( '[ -n "$g_dockerinternal" ] && echo
":DOCKER-INTERNAL - [0:0]" >&3' );
Hope this helps others...thanks.
--0000000000007ca088065081f5b0
Content-Type: text/html; charset="UTF-8"
Content-Transfer-Encoding: quoted-printable
<div dir=3D"ltr">When switching from Docker v26 to v29 Shorewall no longer =
handled the new iptables chains so we fixed Misc.pm / Compiler.pm / Chains.=
pm to handle these...<br><br># diff /usr/share/perl5/vendor_perl/Shorewall/=
Misc.pm /usr/share/perl5/vendor_perl/Shorewall/Misc.pm.orig<br>689,692d688<=
br>< =C2=A0 =C2=A0 add_commands( $chainref, '[ -n "$g_dockerbri=
dge" ] =C2=A0 && echo "-A DOCKER-FORWARD -j DOCKER-BRIDGE=
" >&3' );<br>< =C2=A0 =C2=A0 add_commands( $chainref, &#=
39;[ -n "$g_dockerct" ] =C2=A0 =C2=A0 =C2=A0 && echo &quo=
t;-A DOCKER-FORWARD -j DOCKER-CT" >&3' );<br>< =C2=A0 =
=C2=A0 add_commands( $chainref, '[ -n "$g_dockerforward" ] =
=C2=A0&& echo "-A FORWARD -j DOCKER-FORWARD" >&3&#=
39; );<br>< =C2=A0 =C2=A0 add_commands( $chainref, '[ -n "$g_do=
ckerinternal" ] && echo "-A DOCKER-FORWARD -j DOCKER-INTE=
RNAL" >&3' );<br><br># diff /usr/share/perl5/vendor_perl/Sh=
orewall/Compiler.pm /usr/share/perl5/vendor_perl/Shorewall/Compiler.pm.orig=
<br>273,276d272<br>< =C2=A0 =C2=A0 =C2=A0 emit( 'chain_exists DOCKER=
-BRIDGE && g_dockerbridge=3DYes' );<br>< =C2=A0 =C2=A0 =C2=
=A0 emit( 'chain_exists DOCKER-CT && g_dockerct=3DYes' );<b=
r>< =C2=A0 =C2=A0 =C2=A0 emit( 'chain_exists DOCKER-FORWARD &&am=
p; g_dockerforward=3DYes' );<br>< =C2=A0 =C2=A0 =C2=A0 emit( 'ch=
ain_exists DOCKER-INTERNAL && g_dockerinternal=3DYes' );<br><br=
># diff /usr/share/perl5/vendor_perl/Shorewall/Chains.pm /usr/share/perl5/v=
endor_perl/Shorewall/Chains.pm.orig<br>3402,3413d3401<br>< =C2=A0 =C2=A0=
=C2=A0 $chainref =3D new_standard_chain( 'DOCKER-BRIDGE' =C2=A0 =
=C2=A0 =C2=A0);<br>< =C2=A0 =C2=A0 =C2=A0 set_optflags( $chainref, DONT_=
OPTIMIZE | DONT_DELETE | DONT_MOVE );<br>< =C2=A0 =C2=A0 =C2=A0 add_comm=
ands( $chainref, '[ -f ${VARDIR}/.filter_DOCKER-BRIDGE ] && cat=
${VARDIR}/.filter_DOCKER-BRIDGE >&3' );<br>< =C2=A0 =C2=A0 =
=C2=A0 $chainref =3D new_standard_chain( 'DOCKER-CT' =C2=A0 =C2=A0 =
=C2=A0);<br>< =C2=A0 =C2=A0 =C2=A0 set_optflags( $chainref, DONT_OPTIMIZ=
E | DONT_DELETE | DONT_MOVE );<br>< =C2=A0 =C2=A0 =C2=A0 add_commands( $=
chainref, '[ -f ${VARDIR}/.filter_DOCKER-CT ] && cat ${VARDIR}/=
.filter_DOCKER-CT >&3' );<br>< =C2=A0 =C2=A0 =C2=A0 $chainref=
=3D new_standard_chain( 'DOCKER-FORWARD' =C2=A0 =C2=A0 =C2=A0);<br=
>< =C2=A0 =C2=A0 =C2=A0 set_optflags( $chainref, DONT_OPTIMIZE | DONT_DE=
LETE | DONT_MOVE );<br>< =C2=A0 =C2=A0 =C2=A0 add_commands( $chainref, &=
#39;[ -f ${VARDIR}/.filter_DOCKER-FORWARD ] && cat ${VARDIR}/.filte=
r_DOCKER-FORWARD >&3' );<br>< =C2=A0 =C2=A0 =C2=A0 $chainref =
=3D new_standard_chain( 'DOCKER-INTERNAL' =C2=A0 =C2=A0 =C2=A0);<br=
>< =C2=A0 =C2=A0 =C2=A0 set_optflags( $chainref, DONT_OPTIMIZE | DONT_DE=
LETE | DONT_MOVE );<br>< =C2=A0 =C2=A0 =C2=A0 add_commands( $chainref, &=
#39;[ -f ${VARDIR}/.filter_DOCKER-INTERNAL ] && cat ${VARDIR}/.filt=
er_DOCKER-INTERNAL >&3' );<br>8784,8787d8771<br>< =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 qq( =C2=A0 =C2=A0[ -n "\$g_dockerbridge" =C2=A0=
] && $tool -t filter -S DOCKER-BRIDGE =C2=A0 =C2=A0| tail -n +2 &g=
t; \${VARDIR}/.filter_DOCKER-BRIDGE),<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 q=
q( =C2=A0 =C2=A0[ -n "\$g_dockerct" =C2=A0 =C2=A0 =C2=A0 ] &&=
amp; $tool -t filter -S DOCKER-CT =C2=A0 =C2=A0 =C2=A0 =C2=A0| tail -n +2 &=
gt; \${VARDIR}/.filter_DOCKER-CT),<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 qq( =
=C2=A0 =C2=A0[ -n "\$g_dockerforward" =C2=A0] && $tool -t=
filter -S DOCKER-FORWARD =C2=A0 | tail -n +2 > \${VARDIR}/.filter_DOCKE=
R-FORWARD),<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 qq( =C2=A0 =C2=A0[ -n "=
;\$g_dockerinternal" ] && $tool -t filter -S DOCKER-INTERNAL =
=C2=A0| tail -n +2 > \${VARDIR}/.filter_DOCKER-INTERNAL),<br>8811,8814d8=
794<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 q( =C2=A0 =C2=A0rm -f ${VARDIR}/.fi=
lter_DOCKER-BRIDGE),<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 q( =C2=A0 =C2=A0rm=
-f ${VARDIR}/.filter_DOCKER-CT),<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 q( =
=C2=A0 =C2=A0rm -f ${VARDIR}/.filter_DOCKER-FORWARD),<br>< =C2=A0 =C2=A0=
=C2=A0 =C2=A0 q( =C2=A0 =C2=A0rm -f ${VARDIR}/.filter_DOCKER-INTERNAL),<br=
>9331,9342d9310<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 } elsif ( $name eq 'DOCKER-BRIDGE' ) {<br>< =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ensu=
re_cmd_mode;<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 emit( '[ -n "$g_dockerbridge" ] &=
;& echo ":DOCKER-BRIDGE - [0:0]" >&3' );<br>< =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 } elsif ( $n=
ame eq 'DOCKER-CT' ) {<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ensure_cmd_mode;<br>< =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 emit(=
'[ -n "$g_dockerct" ] && echo ":DOCKER-CT - [0:=
0]" >&3' );<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 } elsif ( $name eq 'DOCKER-FORWARD' ) {<br=
>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 ensure_cmd_mode;<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 emit( '[ -n "$g_dockerforward&q=
uot; ] && echo ":DOCKER-FORWARD - [0:0]" >&3' =
);<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 }=
elsif ( $name eq 'DOCKER-INTERNAL' ) {<br>< =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ensure_cmd_mode=
;<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 emit( '[ -n "$g_dockerinternal" ] && ec=
ho ":DOCKER-INTERNAL - [0:0]" >&3' );<br>9462,9477d942=
9<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 } =
elsif ( $name eq 'DOCKER-BRIDGE' ) {<br>< =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ensure_cmd_mode1;<b=
r>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 print( '[ -n "$g_dockerbridge" ] && echo &=
quot;:DOCKER-BRIDGE - [0:0]" >&3' );<br>< =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 print "=
\n";<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 } elsif ( $name eq 'DOCKER-CT' ) {<br>< =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ensure_cmd_mode=
1;<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 print( '[ -n "$g_dockerct" ] && echo &q=
uot;:DOCKER-CT - [0:0]" >&3' );<br>< =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 print "\n&=
quot;;<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 } elsif ( $name eq 'DOCKER-FORWARD' ) {<br>< =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ensure_cmd_m=
ode1;<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 print( '[ -n "$g_dockerforward" ] &&=
; echo ":DOCKER-FORWARD - [0:0]" >&3' );<br>< =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 p=
rint "\n";<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 } elsif ( $name eq 'DOCKER-INTERNAL' ) {<br>< =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 ensure_cmd_mode1;<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 print( '[ -n "$g_dockerinternal&qu=
ot; ] && echo ":DOCKER-INTERNAL - [0:0]" >&3' =
);<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =
=C2=A0 =C2=A0 print "\n";<br>9575,9586d9526<br>< =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 } elsif ( $name eq 'D=
OCKER-BRIDGE' ) {<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ensure_cmd_mode;<br>< =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 emit( '[ -n=
"$g_dockerbridge" ] && echo ":DOCKER-BRIDGE - [0:0]=
" >&3' );<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0=
=C2=A0 =C2=A0 =C2=A0 } elsif ( $name eq 'DOCKER-CT' ) {<br>< =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 ensure_cmd_mode;<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 emit( '[ -n "$g_dockerct" ] &=
amp;& echo ":DOCKER-CT - [0:0]" >&3' );<br>< =
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 } elsif ( $n=
ame eq 'DOCKER-FORWARD' ) {<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 ensure_cmd_mode;<br>< =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 e=
mit( '[ -n "$g_dockerforward" ] && echo ":DOCKER=
-FORWARD - [0:0]" >&3' );<br>< =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 } elsif ( $name eq 'DOCKER-INTER=
NAL' ) {<br>< =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 ensure_cmd_mode;<br>< =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 emit( '[ -n "=
$g_dockerinternal" ] && echo ":DOCKER-INTERNAL - [0:0]&qu=
ot; >&3' );<br><br>Hope this helps others...thanks.</div>
--0000000000007ca088065081f5b0--
--===============1452998420795711903==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
--===============1452998420795711903==
Content-Type: text/plain; charset="us-ascii"
MIME-Version: 1.0
Content-Transfer-Encoding: 7bit
Content-Disposition: inline