[apparmor] [PATCH 4/4] tests: Minimal update to make unix_socket.sh aware of abstract sockets
Seth Arnold
seth.arnold at canonical.com
Tue Aug 12 01:11:58 UTC 2014
On Mon, Aug 11, 2014 at 03:08:12PM -0500, Tyler Hicks wrote:
> This change only sets up unix_socket.sh to test abstract sockets.
> Unconfined processes are tested while using an abstract socket but
> the test function returns before testing with confinement.
>
> Signed-off-by: Tyler Hicks <tyhicks at canonical.com>
Acked-by: Seth Arnold <seth.arnold at canonical.com>
Thanks
> ---
> tests/regression/apparmor/unix_socket.sh | 115 ++++++++++++++++++++++---------
> 1 file changed, 82 insertions(+), 33 deletions(-)
>
> diff --git a/tests/regression/apparmor/unix_socket.sh b/tests/regression/apparmor/unix_socket.sh
> index 470ea29..0df0db3 100755
> --- a/tests/regression/apparmor/unix_socket.sh
> +++ b/tests/regression/apparmor/unix_socket.sh
> @@ -16,9 +16,9 @@
>
> #=NAME unix_socket
> #=DESCRIPTION
> -# This tests file access to path-based unix domain sockets. The server
> -# opens a socket, forks a client with it's own profile, sends a message
> -# to the client over the socket, and sees what happens.
> +# This tests file access to unix domain sockets. The server opens a socket,
> +# forks a client with it's own profile, sends a message to the client over the
> +# socket, and sees what happens.
> #=END
>
> pwd=`dirname $0`
> @@ -30,7 +30,8 @@ bin=$pwd
> requires_features policy/versions/v6
>
> client=$bin/unix_socket_client
> -socket=${tmpdir}/unix_socket.sock
> +sockpath_pathname=${tmpdir}/unix_socket.sock
> +sockpath_abstract="@apparmor_unix_socket"
> message=4a0c83d87aaa7afa2baab5df3ee4df630f0046d5bfb7a3080c550b721f401b3b\
> 8a738e1435a3b77aa6482a70fb51c44f20007221b85541b0184de66344d46a4c
> okserver=w
> @@ -40,67 +41,115 @@ okclient=rw
> badclient1=r
> badclient2=w
>
> +isabstract()
> +{
> + [ "${1:0:1}" == "@" ]
> +}
> +
> removesocket()
> {
> - rm -f ${socket}
> + if ! isabstract "$1"; then
> + rm -f "$1"
> + fi
> }
>
> testsocktype()
> {
> - local socktype=$1 # socket type - stream, dgram, or seqpacket
> - local args="$socket $socktype $message $client"
> + local testdesc=$1 # description (eg, "AF_UNIX abstract socket (dgram)")
> + local sockpath=$2 # fs path or "@NAME" for an abstract sock
> + local socktype=$3 # stream, dgram, or seqpacket
> + local args="$sockpath $socktype $message $client"
> +
> + removesocket $sockpath
>
> # PASS - unconfined
>
> - runchecktest "socket file ($socktype); unconfined" pass $args
> - removesocket
> + runchecktest "$testdesc; unconfined" pass $args
> + removesocket $sockpath
> +
> + # TODO: Make additional changes to test abstract sockets w/ confinement
> + #
> + # * Adjust genprofile to generate af_unix abstract socket rules
> + # * Create variables to hold genprofile arguments for socket accesses
> + # and initialize them according to socket address type
> + # * Remove the following conditional
> + if isabstract $sockpath; then
> + return
> + fi
>
> # PASS - server w/ access to the file
>
> - genprofile $socket:$okserver $client:Ux
> - runchecktest "socket file ($socktype); confined server w/ access ($okserver)" pass $args
> - removesocket
> + genprofile $sockpath:$okserver $client:Ux
> + runchecktest "$testdesc; confined server w/ access ($okserver)" pass $args
> + removesocket $sockpath
>
> # FAIL - server w/o access to the file
>
> genprofile $client:Ux
> - runchecktest "socket file ($socktype); confined server w/o access" fail $args
> - removesocket
> + runchecktest "$testdesc; confined server w/o access" fail $args
> + removesocket $sockpath
>
> # FAIL - server w/ bad access to the file
>
> - genprofile $socket:$badserver $client:Ux
> - runchecktest "socket file ($socktype); confined server w/ bad access ($badserver)" fail $args
> - removesocket
> + genprofile $sockpath:$badserver $client:Ux
> + runchecktest "$testdesc; confined server w/ bad access ($badserver)" fail $args
> + removesocket $sockpath
>
> # PASS - client w/ access to the file
>
> - genprofile $socket:$okserver $client:px -- image=$client $socket:$okclient
> - runchecktest "socket file ($socktype); confined client w/ access ($okclient)" pass $args
> - removesocket
> + genprofile $sockpath:$okserver $client:px -- image=$client $sockpath:$okclient
> + runchecktest "$testdesc; confined client w/ access ($okclient)" pass $args
> + removesocket $sockpath
>
> # FAIL - client w/o access to the file
>
> - genprofile $socket:$okserver $client:px -- image=$client
> - runchecktest "socket file ($socktype); confined client w/o access" fail $args
> - removesocket
> + genprofile $sockpath:$okserver $client:px -- image=$client
> + runchecktest "$testdesc; confined client w/o access" fail $args
> + removesocket $sockpath
>
> # FAIL - client w/ bad access to the file
>
> - genprofile $socket:$okserver $client:px -- image=$client $socket:$badclient1
> - runchecktest "socket file ($socktype); confined client w/ bad access ($badclient1)" fail $args
> - removesocket
> + genprofile $sockpath:$okserver $client:px -- image=$client $sockpath:$badclient1
> + runchecktest "$testdesc; confined client w/ bad access ($badclient1)" fail $args
> + removesocket $sockpath
>
> # FAIL - client w/ bad access to the file
>
> - genprofile $socket:$okserver $client:px -- image=$client $socket:$badclient2
> - runchecktest "socket file ($socktype); confined client w/ bad access ($badclient2)" fail $args
> - removesocket
> + genprofile $sockpath:$okserver $client:px -- image=$client $sockpath:$badclient2
> + runchecktest "$testdesc; confined client w/ bad access ($badclient2)" fail $args
> + removesocket $sockpath
>
> removeprofile
> }
>
> -removesocket
> -testsocktype stream
> -testsocktype dgram
> -testsocktype seqpacket
> +testsockpath()
> +{
> + local sockpath="$1" # $sockpath_pathname or $sockpath_abstract
> + local testdesc="AF_UNIX "
> + local socktype=
> +
> + if [ "$sockpath" == "$sockpath_pathname" ]; then
> + testdesc+="pathname socket"
> + elif [ "$sockpath" == "$sockpath_abstract" ]; then
> + testdesc+="abstract socket"
> + else
> + fatalerror "Unknown sockpath addr type: $sockpath"
> + fi
> +
> + for socktype in stream dgram seqpacket; do
> + testsocktype "$testdesc ($socktype)" "$sockpath" "$socktype"
> + done
> +}
> +
> +testsockpath "$sockpath_pathname"
> +testsockpath "$sockpath_abstract"
> +# TODO: testsockpath "$sockpath_unnamed"
> +#
> +# * Adjust unix_socket.c and unix_socket_client.c when the socket path is
> +# "UNNAMED"
> +# - Don't bind() the socket
> +# - Don't set SO_CLOEXEC so that the fd can be passed over exec()
> +# * Decide how to generate appropriate access rules (if any are needed)
> +# * Define sockpath_unnamed as "UNNAMED"
> +# * Update testsockpath() to handle sockpath_unnamed
> +# * Create isunnamed() and update removesocket() to call it
> --
> 2.1.0.rc1
>
>
> --
> AppArmor mailing list
> AppArmor at lists.ubuntu.com
> Modify settings or unsubscribe at: https://lists.ubuntu.com/mailman/listinfo/apparmor
>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 473 bytes
Desc: Digital signature
URL: <https://lists.ubuntu.com/archives/apparmor/attachments/20140811/ebd0686c/attachment.pgp>
More information about the AppArmor
mailing list