psss / tests / selinux

Forked from tests/selinux 6 years ago
Clone
Blob Blame History Raw
#!/bin/bash
# vim: dict+=/usr/share/beakerlib/dictionary.vim cpt=.,w,b,u,t,i,k
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#   runtest.sh of /CoreOS/libsemanage/Sanity/semanage-seuser-functions
#   Description: Test semanage_seuser_* functions
#   Author: Jan Zarsky <jzarsky@redhat.com>
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
#
#   Copyright (c) 2017 Red Hat, Inc.
#
#   This program is free software: you can redistribute it and/or
#   modify it under the terms of the GNU General Public License as
#   published by the Free Software Foundation, either version 2 of
#   the License, or (at your option) any later version.
#
#   This program is distributed in the hope that it will be
#   useful, but WITHOUT ANY WARRANTY; without even the implied
#   warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
#   PURPOSE.  See the GNU General Public License for more details.
#
#   You should have received a copy of the GNU General Public License
#   along with this program. If not, see http://www.gnu.org/licenses/.
#
# ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

# Include Beaker environment
. /usr/bin/rhts-environment.sh || exit 1
. /usr/share/beakerlib/beakerlib.sh || exit 1

PACKAGE="libsemanage"

rlJournalStart
    rlPhaseStartSetup
        rlAssertRpm ${PACKAGE}
        rlAssertRpm ${PACKAGE}-devel
        rlAssertRpm "glibc"
        rlAssertRpm "gcc"

        for f in test_*.c ; do 
            out=$(echo -n $f | cut -d'.' -f1)
            rlRun "gcc $f -o $out -lsemanage -Wall -Wextra -Werror -std=c99"
        done

        POLICY_TYPE="$(grep -E '^SELINUXTYPE=' /etc/selinux/config | cut -d'=' -f2 | tr '[:upper:]' '[:lower:]' | tr -d ' ')"

        if rlIsFedora; then
            SEUSERS_PATH="/var/lib/selinux/$POLICY_TYPE/active/seusers"
        elif rlIsRHEL '>=7'; then
            SEUSERS_PATH="/etc/selinux/$POLICY_TYPE/active/seusers"
        else
            SEUSERS_PATH="/etc/selinux/$POLICY_TYPE/seusers"
        fi

        rlRun "cat $SEUSERS_PATH"

        SEUSERS_COUNT="$(cat $SEUSERS_PATH | grep -vE '^#|^$' | wc -l)"
        rlRun "[[ \"$SEUSERS_COUNT\" -gt 0 ]]"

        SEUSERS="$(cat $SEUSERS_PATH | grep -vE '^#|^$' | cut -d':' -f1 | tr '\n' ' ')"
        rlRun "[[ -n \"$SEUSERS\" ]]"

        first_line="$(cat $SEUSERS_PATH | grep -vE '^#|^$' | head -n 1)"
        SEUSER="$(echo -n $first_line | cut -d':' -f1)"
        rlRun "[[ -n \"$SEUSER\" ]]"
        SEUSER_SENAME="$(echo -n $first_line | cut -d':' -f2)"
        rlRun "[[ -n \"$SEUSER_SENAME\" ]]"
        SEUSER_MLSRANGE="$(echo -n $first_line | cut -d':' -f3-4)"
        rlRun "[[ -n \"$SEUSER_MLSRANGE\" ]]"

        SEUSER_NONEXISTENT="nonuser"
        SEUSER_DEFAULT="__default__"

        ERR_FAIL=1
        ERR_ABORT=134
        ERR_SEGFAULT=139

        # note: each test_*.c program takes first argument which specifies setup
        #       before executing specified function
        #       init      semanage handle == NULL
        #       handle    semanage handle obtained via semanage_handle_create
        #       conn      connected via semanage_connect
        #       trans     inside transaction, via semanage_begin_transaction
        # program returns 1 on error in function, 2 on error in setup
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_key_create, semanage_seuser_key_free"
        # FIXME
        # rlRun "./test_key_create init   $SEUSER" $ERR_ABORT,$ERR_SEGFAULT
        # rlRun "./test_key_create handle $SEUSER" $ERR_FAIL
        rlRun "./test_key_create conn   $SEUSER"
        rlRun "./test_key_create trans  $SEUSER"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_key_extract"
        # FIXME
        #rlRun "./test_key_extract conn  new"
        rlRun "./test_key_extract conn  first"
        # FIXME
        #rlRun "./test_key_extract trans new"
        rlRun "./test_key_extract trans first"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_compare"
        rlRun "./test_compare conn  $SEUSER             same"
        rlRun "./test_compare conn  $SEUSER_NONEXISTENT different"
        rlRun "./test_compare trans $SEUSER             same"
        rlRun "./test_compare trans $SEUSER_NONEXISTENT different"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_compare2"
        rlRun "./test_compare2 conn  NULL 0"    $ERR_ABORT,$ERR_SEGFAULT
        rlRun "./test_compare2 conn  0    NULL" $ERR_ABORT,$ERR_SEGFAULT
        rlRun "./test_compare2 conn  NULL NULL" $ERR_ABORT,$ERR_SEGFAULT
        rlRun "./test_compare2 conn  0    0"
        rlRun "./test_compare2 conn  0    1"
        rlRun "./test_compare2 trans NULL 0"    $ERR_ABORT,$ERR_SEGFAULT
        rlRun "./test_compare2 trans 0    NULL" $ERR_ABORT,$ERR_SEGFAULT
        rlRun "./test_compare2 trans NULL NULL" $ERR_ABORT,$ERR_SEGFAULT
        rlRun "./test_compare2 trans 0    0"
        rlRun "./test_compare2 trans 0    1"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_count"
        rlRun "./test_count init"   $ERR_ABORT,$ERR_SEGFAULT
        rlRun "./test_count handle" $ERR_FAIL
        rlRun "./test_count conn  $SEUSERS_COUNT"
        rlRun "./test_count trans $SEUSERS_COUNT"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_list"
        rlRun "./test_list init"   $ERR_ABORT,$ERR_SEGFAULT
        rlRun "./test_list handle" $ERR_FAIL
        rlRun "./test_list conn  $SEUSERS_COUNT $SEUSERS"
        rlRun "./test_list trans $SEUSERS_COUNT $SEUSERS"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_iterate"
        rlRun "./test_iterate init"   $ERR_ABORT,$ERR_SEGFAULT
        rlRun "./test_iterate handle" $ERR_FAIL
        rlRun "./test_iterate conn  $SEUSERS"
        rlRun "./test_iterate trans $SEUSERS"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_exists"
        rlRun "./test_exists conn  $SEUSER_NONEXISTENT 0"
        rlRun "./test_exists conn  $SEUSER_DEFAULT     1"
        rlRun "./test_exists conn  $USER               1"
        rlRun "./test_exists trans $SEUSER_NONEXISTENT 0"
        rlRun "./test_exists trans $SEUSER_DEFAULT     1"
        rlRun "./test_exists trans $SEUSER             1"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_query"
        rlRun "./test_query conn  $SEUSER_NONEXISTENT" $ERR_FAIL
        rlRun "./test_query conn  $SEUSER_DEFAULT"
        rlRun "./test_query conn  $SEUSER"
        rlRun "./test_query trans $SEUSER_NONEXISTENT" $ERR_FAIL
        rlRun "./test_query trans $SEUSER_DEFAULT"
        rlRun "./test_query trans $SEUSER"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_get_name"
        rlRun "./test_get_name conn  new   NULL"
        rlRun "./test_get_name conn  first $SEUSER"
        rlRun "./test_get_name trans new   NULL"
        rlRun "./test_get_name trans first $SEUSER"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_set_name"
        name="someuser"
        rlRun "./test_set_name conn  $name"
        rlRun "./test_set_name trans $name"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_get_sename"
        rlRun "./test_get_sename conn  new   NULL"
        rlRun "./test_get_sename conn  first $SEUSER_SENAME"
        rlRun "./test_get_sename trans new   NULL"
        rlRun "./test_get_sename trans first $SEUSER_SENAME"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_set_sename"
        sename="someuser_u"
        rlRun "./test_set_sename conn  $sename"
        rlRun "./test_set_sename trans $sename"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_get_mlsrange"
        rlRun "./test_get_mlsrange conn  new   NULL"
        rlRun "./test_get_mlsrange conn  first $SEUSER_MLSRANGE"
        rlRun "./test_get_mlsrange trans new   NULL"
        rlRun "./test_get_mlsrange trans first $SEUSER_MLSRANGE"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_set_mlsrange"
        mlsrange="c0-s1:c0.c42"
        rlRun "./test_set_mlsrange conn  $mlsrange"
        rlRun "./test_set_mlsrange trans $mlsrange"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_clone"
        # FIXME
        #rlRun "./test_clone conn  new"
        rlRun "./test_clone conn  first"
        # FIXME
        #rlRun "./test_clone trans new"
        rlRun "./test_clone trans first"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_create"
        # FIXME
        #rlRun "./test_create init" $ERR_ABORT,$ERR_SEGFAULT
        #rlRun "./test_create handle" $ERR_ABORT,$ERR_SEGFAULT
        rlRun "./test_create conn"
        rlRun "./test_create trans"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_modify_local"
        # function requires transaction
        #rlRun "./test_modify_local conn  new"   $ERR_FAIL
        #rlRun "./test_modify_local conn  first" $ERR_FAIL
        #rlRun "./test_modify_local trans new"   $ERR_FAIL
        rlRun "./test_modify_local trans first"
    rlPhaseEnd
    
    rlPhaseStartTest "semanage_seuser_del_local"
        # adding local seuser requires transaction
        # FIXME
        #rlRun "./test_del_local trans first new"
        #rlRun "./test_del_local trans first second"
        rlRun "./test_del_local trans first first"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_exists_local"
        # adding local seuser requires transaction
        rlRun "./test_exists_local trans first first  1"
        rlRun "./test_exists_local trans first second 0"
    rlPhaseEnd

    rlPhaseStartTest "semanage_seuser_count_local"
        # adding local seuser requires transaction
        # FIXME
        #rlRun "./test_count_local trans 0"
        rlRun "./test_count_local trans 1"
        rlRun "./test_count_local trans 2"
    rlPhaseEnd

    rlPhaseStartCleanup
        testfiles="$(ls -1 test_* | grep -v '\.c' | tr '\n' ' ')"
        rlRun "rm -f $testfiles"
    rlPhaseEnd
rlJournalPrintText
rlJournalEnd