###############################################################################
#
# Copyright (C) 2005 Red Hat, Inc. All Rights Reserved.
# Written by David Howells (dhowells@redhat.com)
#
# 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.
#
###############################################################################

echo === $OUTPUTFILE ===

endian=`file -L /proc/$$/exe`
if expr "$endian" : '.* MSB \+\(pie executable\|executable\|shared object\).*' >&/dev/null
then
    endian=BE
elif expr "$endian" : '.* LSB \+\(pie executable\|executable\|shared object\).*' >&/dev/null
then
    endian=LE
else
    echo -e "+++ \e[31;1mCan't Determine Endianness\e[0m"
    echo "+++ Can't Determine Endianness" >>$OUTPUTFILE
    exit 2
fi

maxtypelen=31
maxtype=`for ((i=0; i<$((maxtypelen)); i++)); do echo -n a; done`

PAGE_SIZE=`getconf PAGESIZE`
pagelen=$((PAGE_SIZE - 1))
fullpage=`for ((i=0; i<$((pagelen)); i++)); do echo -n a; done`
string4095=`for ((i=0; i<4095; i++)); do echo -n a; done`

if kernel_at_or_later_than 3.18
then
    maxdesc=$string4095
elif rhel6_kernel_at_or_later_than 2.6.32-589.el6
then
    maxdesc=$string4095
else
    maxdesc=$fullpage
fi

maxcall=$fullpage

maxsquota=`grep '^ *0': /proc/key-users | sed s@.*/@@`

key_gc_delay_file="/proc/sys/kernel/keys/gc_delay"
if [ -f $key_gc_delay_file ]; then
    orig_gc_delay=`cat $key_gc_delay_file`
else
    orig_gc_delay=300
fi


function marker ()
{
    echo -e "+++ \e[33m$*\e[0m"
    echo +++ $* >>$OUTPUTFILE
}

function failed()
{
    echo -e "\e[31;1mFAILED\e[0m"
    echo === FAILED === >>$OUTPUTFILE
    keyctl show >>$OUTPUTFILE
    echo ============== >>$OUTPUTFILE
    result=FAIL
}

function expect_args_error ()
{
    "$@" >>$OUTPUTFILE 2>&1
    if [ $? != 2 ]
    then
	failed
    fi

}

function toolbox_report_result()
{
    if [ $RUNNING_UNDER_RHTS = 1 ]
    then
	report_result $1 $2
    fi
    if [ $2 = FAIL ]
    then
	exit 1
    fi
}

function toolbox_skip_test()
{
    echo "++++ SKIPPING TEST" >>$OUTPUTFILE
    marker "$2"
    toolbox_report_result $1 PASS
}

###############################################################################
#
# Return true if the command is found in $PATH. If not, log that the test is
# being skipped, report the result as PASS, and exit.
#
###############################################################################
function require_command ()
{
    which "$1" >&/dev/null
    if [ $? != 0 ]
    then
	toolbox_skip_test "SKIP DUE TO MISSING COMMAND: $1"
        exit 0
    fi
}

function require_selinux ()
{
    if ! grep -q selinuxfs /proc/mounts;
    then
	toolbox_skip_test $TEST "SKIP DUE TO DISABLED SELINUX"
	exit 0
    fi
}

###############################################################################
#
# extract an error message from the log file and check it
#
###############################################################################
function expect_error ()
{
    my_varname=$1

    my_errmsg="`tail -1 $OUTPUTFILE`"
    eval $my_varname="\"$my_errmsg\""

    if [ $# != 1 ]
    then
	echo "Format: expect_error <symbol>" >>$OUTPUTFILE
	failed
    fi

    case $1 in
	EPERM)		my_err="Operation not permitted";;
	EAGAIN)		my_err="Resource temporarily unavailable";;
	ENOENT)		my_err="No such file or directory";;
	EEXIST)		my_err="File exists";;
	ENOTDIR)	my_err="Not a directory";;
	EACCES)		my_err="Permission denied";;
	EINVAL)		my_err="Invalid argument";;
	ENODEV)		my_err="No such device";;
	ELOOP)		my_err="Too many levels of symbolic links";;
	EOPNOTSUPP)	my_err="Operation not supported";;
	EDEADLK)	my_err="Resource deadlock avoided";;
	EDQUOT)		my_err="Disk quota exceeded";;
	ENOKEY)
	    my_err="Required key not available"
	    old_err="Requested key not available"
	    alt_err="Unknown error 126"
	    ;;
	EKEYEXPIRED)
	    my_err="Key has expired"
	    alt_err="Unknown error 127"
	    ;;
	EKEYREVOKED)
	    my_err="Key has been revoked"
	    alt_err="Unknown error 128"
	    ;;
	EKEYREJECTED)
	    my_err="Key has been rejected"
	    alt_err="Unknown error 129"
	    ;;
	*)
	    echo "Unknown error message $1" >>$OUTPUTFILE
	    failed
	    ;;
    esac

    if expr "$my_errmsg" : ".*: $my_err" >&/dev/null
    then
	:
    elif [ "x$alt_err" != "x" ] && expr "$my_errmsg" : ".*: $alt_err" >&/dev/null
    then
	:
    elif [ "x$old_err" != "x" ] && expr "$my_errmsg" : ".*: $old_err" >&/dev/null
    then
	:
    else
	failed
    fi
}

###############################################################################
#
# wait for a key to be destroyed (get removed from /proc/keys)
#
###############################################################################
function pause_till_key_destroyed ()
{
    echo "+++ WAITING FOR KEY TO BE DESTROYED" >>$OUTPUTFILE
    hexkeyid=`printf %08x $1`

    while grep $hexkeyid /proc/keys
    do
	sleep 1
    done
}

###############################################################################
#
# wait for a key to be unlinked
#
###############################################################################
function pause_till_key_unlinked ()
{
    echo "+++ WAITING FOR KEY TO BE UNLINKED" >>$OUTPUTFILE

    while true
    do
	echo keyctl unlink $1 $2 >>$OUTPUTFILE
	keyctl unlink $1 $2 >>$OUTPUTFILE 2>&1
	if [ $? != 1 ]
	then
	    failed
	fi

	my_errmsg="`tail -1 $OUTPUTFILE`"
	if ! expr "$my_errmsg" : ".*: No such file or directory" >&/dev/null
	then
	    break
	fi
	sleep 1
    done
}

###############################################################################
#
# Get the ID of a key or keyring.
#
###############################################################################
function id_key ()
{
    my_exitval=0
    case "x$1" in
	x--to=*)
	    my_exitval=0
	    my_varname=${1#--to=}
	    my_keyid=v
	    ;;
	x--fail)
	    my_exitval=1
	    my_keyid=x
	    ;;
	x--fail2)
	    my_exitval=2
	    my_keyid=x
	    ;;
	*)
	    echo "BAD id_key ARGUMENT" >&2
	    failed
	    return
	    ;;
    esac
    shift

    echo keyctl id "$@" >>$OUTPUTFILE
    keyctl id "$@" >>$OUTPUTFILE 2>&1
    e=$?
    if [ $e == $my_exitval ]
    then
	if [ $e = 0 ]
	then
	    got_keyid="`tail -1 $OUTPUTFILE`"
	    if expr "$got_keyid" : '[1-9][0-9]*' >&/dev/null
	    then
		if [ $my_keyid == v ]
		then
		    eval $my_varname=$got_keyid
		fi
	    else
		echo "CAN'T EXTRACT KEY ID FROM create_key OUTPUT" >&2
		eval $my_varname=no
		result=FAIL
	    fi
	fi
    else
	failed
    fi
}

###############################################################################
#
# request a key and attach it to the new keyring
#
###############################################################################
function request_key ()
{
    my_exitval=0
    case "x$1" in
	x--new=*)
	    my_exitval=0
	    my_varname=${1#--new=}
	    my_keyid=v
	    ;;
	x--old=*)
	    my_exitval=0
	    my_keyid=${1#--old=}
	    ;;
	x--fail)
	    my_exitval=1
	    my_keyid=x
	    ;;
	*)
	    echo "BAD request_key ARGUMENT" >&2
	    failed
	    return
	    ;;
    esac
    shift

    my_keyring=$3

    echo keyctl request "$@" >>$OUTPUTFILE
    keyctl request "$@" >>$OUTPUTFILE 2>&1
    e=$?
    if [ $e == $my_exitval ]
    then
	if [ $e = 0 ]
	then
	    got_keyid="`tail -1 $OUTPUTFILE`"
	    if expr "$got_keyid" : '[1-9][0-9]*' >&/dev/null
	    then
		if [ $my_keyid == v ]
		then
		    eval $my_varname=$got_keyid
		fi
	    else
		echo "CAN'T EXTRACT KEY ID FROM create_key OUTPUT" >&2
		eval $my_varname=no
		result=FAIL
	    fi
	fi
    else
	failed
    fi
}

###############################################################################
#
# request a key and attach it to the new keyring, calling out if necessary
#
###############################################################################
function request_key_callout ()
{
    my_exitval=0
    case "x$1" in
	x--new=*)
	    my_exitval=0
	    my_varname=${1#--new=}
	    my_keyid=v
	    ;;
	x--old=*)
	    my_exitval=0
	    my_keyid=${1#--old=}
	    ;;
	x--fail)
	    my_exitval=1
	    my_keyid=x
	    ;;
	*)
	    echo "BAD request_key_callout ARGUMENT" >&2
	    failed
	    return
	    ;;
    esac
    shift

    my_keyring=$4

    echo keyctl request2 "$@" >>$OUTPUTFILE
    keyctl request2 "$@" >>$OUTPUTFILE 2>&1
    e=$?
    if [ $e == $my_exitval ]
    then
	if [ $e = 0 ]
	then
	    got_keyid="`tail -1 $OUTPUTFILE`"
	    if expr "$got_keyid" : '[1-9][0-9]*' >&/dev/null
	    then
		if [ $my_keyid == v ]
		then
		    eval $my_varname=$got_keyid
		fi
	    else
		echo "CAN'T EXTRACT KEY ID FROM create_key OUTPUT" >&2
		eval $my_varname=no
		result=FAIL
	    fi
	fi
    else
	failed
    fi
}

###############################################################################
#
# request a key and attach it to the new keyring, calling out if necessary and
# passing the callout data in on stdin
#
###############################################################################
function prequest_key_callout ()
{
    my_exitval=0
    case "x$1" in
	x--new=*)
	    my_exitval=0
	    my_varname=${1#--new=}
	    my_keyid=v
	    ;;
	x--old=*)
	    my_exitval=0
	    my_keyid=${1#--old=}
	    ;;
	x--fail)
	    my_exitval=1
	    my_keyid=x
	    ;;
	*)
	    echo "BAD request_key_callout ARGUMENT" >&2
	    failed
	    return
	    ;;
    esac
    shift

    data="$1"
    shift

    my_keyring=$3

    echo echo -n $data \| keyctl prequest2 "$@" >>$OUTPUTFILE
    echo -n $data | keyctl prequest2 "$@" >>$OUTPUTFILE 2>&1
    e=$?
    if [ $e == $my_exitval ]
    then
	if [ $e = 0 ]
	then
	    got_keyid="`tail -1 $OUTPUTFILE`"
	    if expr "$got_keyid" : '[1-9][0-9]*' >&/dev/null
	    then
		if [ $my_keyid == v ]
		then
		    eval $my_varname=$got_keyid
		fi
	    else
		echo "CAN'T EXTRACT KEY ID FROM create_key OUTPUT" >&2
		eval $my_varname=no
		result=FAIL
	    fi
	fi
    else
	failed
    fi
}

###############################################################################
#
# create a key and attach it to the new keyring
#
###############################################################################
function create_key ()
{
    my_exitval=0
    case "x$1" in
	x--new=*)
	    my_exitval=0
	    my_varname=${1#--new=}
	    my_keyid=v
	    ;;
	x--update=*)
	    my_exitval=0
	    my_keyid=${1#--update=}
	    ;;
	x--fail)
	    my_exitval=1
	    my_keyid=x
	    ;;
	*)
	    echo "BAD create_key ARGUMENT" >&2
	    failed
	    return
	    ;;
    esac
    shift

    if [ "$1" = "-x" ]
    then
	my_keyring=$5
    else
	my_keyring=$4
    fi

    echo keyctl add "$@" >>$OUTPUTFILE
    keyctl add "$@" >>$OUTPUTFILE 2>&1
    e=$?
    if [ $e == $my_exitval ]
    then
	if [ $e = 0 ]
	then
	    got_keyid="`tail -1 $OUTPUTFILE`"
	    if expr "$got_keyid" : '[1-9][0-9]*' >&/dev/null
	    then
		if [ $my_keyid == v ]
		then
		    eval $my_varname=$got_keyid
		fi

	    else
		echo "CAN'T EXTRACT KEY ID FROM create_key OUTPUT" >&2
		eval $my_varname=no
		result=FAIL
	    fi
	fi
    else
	failed
    fi
}

###############################################################################
#
# create a key and attach it to the new keyring, piping in the data
#
###############################################################################
function pcreate_key ()
{
    my_exitval=0
    case "x$1" in
	x--new=*)
	    my_exitval=0
	    my_varname=${1#--new=}
	    my_keyid=v
	    ;;
	x--update=*)
	    my_exitval=0
	    my_keyid=${1#--update=}
	    ;;
	x--fail)
	    my_exitval=1
	    my_keyid=x
	    ;;
	*)
	    echo "BAD pcreate_key ARGUMENT" >&2
	    failed
	    return
	    ;;
    esac
    shift
    data="$1"
    shift

    if [ "$1" = "-x" ]
    then
	my_keyring=$4
    else
	my_keyring=$3
    fi

    echo echo -n $data \| keyctl padd "$@" >>$OUTPUTFILE
    echo -n $data | keyctl padd "$@" >>$OUTPUTFILE 2>&1
    e=$?
    if [ $e == $my_exitval ]
    then
	if [ $e = 0 ]
	then
	    got_keyid="`tail -1 $OUTPUTFILE`"
	    if expr "$got_keyid" : '[1-9][0-9]*' >&/dev/null
	    then
		if [ $my_keyid == v ]
		then
		    eval $my_varname=$got_keyid
		fi

	    else
		echo "CAN'T EXTRACT KEY ID FROM pcreate_key OUTPUT" >&2
		eval $my_varname=no
		result=FAIL
	    fi
	fi
    else
	failed
    fi
}

###############################################################################
#
# create a key and attach it to the new keyring, piping in the data
#
###############################################################################
function pcreate_key_by_size ()
{
    my_exitval=0
    case "x$1" in
	x--new=*)
	    my_exitval=0
	    my_varname=${1#--new=}
	    my_keyid=v
	    ;;
	x--update=*)
	    my_exitval=0
	    my_keyid=${1#--update=}
	    ;;
	x--fail)
	    my_exitval=1
	    my_keyid=x
	    ;;
	*)
	    echo "BAD create_key ARGUMENT" >&2
	    failed
	    return
	    ;;
    esac
    shift
    data="$1"
    shift
    my_keyring=$3

    echo dd if=/dev/zero count=1 bs=$data \| keyctl padd "$@" >>$OUTPUTFILE
    dd if=/dev/zero count=1 bs=$data 2>/dev/null | keyctl padd "$@" >>$OUTPUTFILE 2>&1
    e=$?
    if [ $e == $my_exitval ]
    then
	if [ $e = 0 ]
	then
	    got_keyid="`tail -1 $OUTPUTFILE`"
	    if expr "$got_keyid" : '[1-9][0-9]*' >&/dev/null
	    then
		if [ $my_keyid == v ]
		then
		    eval $my_varname=$got_keyid
		fi

	    else
		echo "CAN'T EXTRACT KEY ID FROM pcreate_key_by_size OUTPUT" >&2
		eval $my_varname=no
		result=FAIL
	    fi
	fi
    else
	failed
    fi
}

###############################################################################
#
# create a key and attach it to the new keyring
#
###############################################################################
function create_keyring ()
{
    my_exitval=0
    case "x$1" in
	x--new=*)
	    my_exitval=0
	    my_varname=${1#--new=}
	    my_keyid=v
	    ;;
	x--fail)
	    my_exitval=1
	    my_keyid=x
	    ;;
	*)
	    echo "BAD create_key ARGUMENT" >&2
	    failed
	    return
	    ;;
    esac
    shift
    my_keyring=$2

    echo keyctl newring "$@" >>$OUTPUTFILE
    keyctl newring "$@" >>$OUTPUTFILE 2>&1
    e=$?
    if [ $e == $my_exitval ]
    then
	if [ $e = 0 ]
	then
	    got_keyid="`tail -1 $OUTPUTFILE`"
	    if expr "$got_keyid" : '[1-9][0-9]*' >&/dev/null
	    then
		eval $my_varname=$got_keyid
	    else
		echo "CAN'T EXTRACT KEY ID FROM create_keyring OUTPUT" >&2
		eval $my_varname=no
		result=FAIL
	    fi
	fi
    else
	failed
    fi
}

###############################################################################
#
# prettily list a keyring
#
###############################################################################
function pretty_list_keyring ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl list $1 >>$OUTPUTFILE
    keyctl list $1 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# list a keyring
#
###############################################################################
function list_keyring ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl rlist $1 >>$OUTPUTFILE
    keyctl rlist $1 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# extract a keyring listing from the log file and see if a key ID is contained
# therein
#
###############################################################################
function expect_keyring_rlist ()
{
    my_varname=$1

    my_rlist="`tail -1 $OUTPUTFILE`"
    eval $my_varname="\"$my_rlist\""

    if [ $# = 2 -o $# = 3 ]
    then
	if [ "$2" = "empty" ]
	then
	    if [ "x$my_rlist" != "x" ]
	    then
		failed
	    fi
	else
	    my_keyid=$2
	    my_found=0
	    my_expected=1
	    if [ $# = 3 -a "x$3" = "x--absent" ]; then my_expected=0; fi

	    for k in $my_rlist
	    do
		if [ $k = $my_keyid ]
		then
		    my_found=1
		    break;
		fi
	    done

	    if [ $my_found != $my_expected ]
	    then
		failed
	    fi
	fi
    fi
}

###############################################################################
#
# prettily describe a key
#
###############################################################################
function pretty_describe_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl describe $1 >>$OUTPUTFILE
    keyctl describe $1 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# describe a key
#
###############################################################################
function describe_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl rdescribe $1 "@" >>$OUTPUTFILE
    keyctl rdescribe $1 "@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# extract a raw key description from the log file and check it
#
###############################################################################
function expect_key_rdesc ()
{
    my_varname=$1

    my_rdesc="`tail -1 $OUTPUTFILE`"
    eval $my_varname="\"$my_rdesc\""

    if ! expr "$my_rdesc" : "$2" >&/dev/null
    then
	failed
    fi
}

###############################################################################
#
# read a key's payload as a hex dump
#
###############################################################################
function read_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl read $1 >>$OUTPUTFILE
    keyctl read $1 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# read a key's payload as a printable string
#
###############################################################################
function print_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl print $1 >>$OUTPUTFILE
    keyctl print $1 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# pipe a key's raw payload to stdout
#
###############################################################################
function pipe_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl pipe $1 >>$OUTPUTFILE
    keyctl pipe $1 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# pipe a key's raw payload through md5sum
#
###############################################################################
function md5sum_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl pipe $1 \| md5sum \| cut -c1-32 >>$OUTPUTFILE
    keyctl pipe $1 | md5sum | cut -c1-32 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# extract a printed payload from the log file
#
###############################################################################
function expect_payload ()
{
    my_varname=$1

    my_payload="`tail -1 $OUTPUTFILE`"
    eval $my_varname="\"$my_payload\""

    if [ $# == 2 -a "x$my_payload" != "x$2" ]
    then
	failed
    fi
}

###############################################################################
#
# extract multiline output from the log file
#
###############################################################################
function expect_multiline ()
{
    my_varname=$1
    my_linecount="`echo \"$2\" | wc -l`"

    my_payload=$(tail -$my_linecount $OUTPUTFILE)
    eval $my_varname="\"$my_payload\""

    if [ $# != 2 -o "x$my_payload" != "x$2" ]
    then
	failed
    fi
}

###############################################################################
#
# revoke a key
#
###############################################################################
function revoke_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl revoke $1 >>$OUTPUTFILE
    keyctl revoke $1 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# unlink a key from a keyring
#
###############################################################################
function unlink_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    my_wait=0
    if [ "x$1" = "x--wait" ]
    then
	my_wait=1
	shift
    fi

    echo keyctl unlink $1 $2 >>$OUTPUTFILE
    keyctl unlink $1 $2 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi

    # keys are destroyed lazily
    if [ $my_wait = 1 ]
    then
	pause_till_key_unlinked $1 $2
    fi
}

###############################################################################
#
# extract a message about the number of keys unlinked
#
###############################################################################
function expect_unlink_count ()
{
    my_varname=$1

    my_nunlinks="`tail -1 $OUTPUTFILE`"

    if ! expr "$my_nunlinks" : '^[0-9][0-9]* links removed$'
    then
	failed
    fi

    my_nunlinks=`echo $my_nunlinks | awk '{printf $1}'`
    eval $my_varname="\"$my_nunlinks\""

    if [ $# == 2 -a $my_nunlinks != $2 ]
    then
	failed
    fi
}

###############################################################################
#
# update a key from a keyring
#
###############################################################################
function update_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl update "$@" >>$OUTPUTFILE
    keyctl update "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# update a key from a keyring, piping the data in over stdin
#
###############################################################################
function pupdate_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl pupdate "$@" >>$OUTPUTFILE
    keyctl pupdate "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# clear a keyring
#
###############################################################################
function clear_keyring ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl clear $1 >>$OUTPUTFILE
    keyctl clear $1 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# restrict a keyring
#
###############################################################################
function restrict_keyring ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl restrict_keyring $1 $2 $3 >>$OUTPUTFILE
    keyctl restrict_keyring $1 $2 $3 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# link a key to a keyring
#
###############################################################################
function link_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl link $1 $2 >>$OUTPUTFILE
    keyctl link $1 $2 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# search for a key in a keyring
#
###############################################################################
function search_for_key ()
{
    my_exitval=0
    case "x$1" in
	x--expect=*)
	    my_exitval=0
	    my_keyid=${1#--expect=}
	    ;;
	x--fail)
	    my_exitval=1
	    my_keyid=x
	    ;;
	*)
	    echo "BAD create_key ARGUMENT" >&2
	    failed
	    return
	    ;;
    esac
    shift

    echo keyctl search "$@" >>$OUTPUTFILE
    keyctl search "$@" >>$OUTPUTFILE 2>&1
    e=$?
    if [ $e == $my_exitval ]
    then
	if [ $e = 0 ]
	then
	    got_keyid="`tail -1 $OUTPUTFILE`"
	    if expr "$got_keyid" : '[1-9][0-9]*' >&/dev/null
	    then
		if [ $got_keyid = $my_keyid ]
		then
		    :
		else
		    echo "KEY MISMATCH $got_keyid != $my_keyid" >&2
		    failed
		fi
	    else
		echo "CAN'T EXTRACT KEY ID FROM search_for_key OUTPUT" >&2
		eval $my_varname=no
		result=FAIL
	    fi
	fi
    else
	failed
    fi
}

###############################################################################
#
# set the permissions mask on a key
#
###############################################################################
function set_key_perm ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl setperm "$@" >>$OUTPUTFILE
    keyctl setperm "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# set the ownership of a key
#
###############################################################################
function chown_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl chown "$@" >>$OUTPUTFILE
    keyctl chown "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# set the group ownership of a key
#
###############################################################################
function chgrp_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl chgrp "$@" >>$OUTPUTFILE
    keyctl chgrp "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# run as a new session
#
###############################################################################
function new_session ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl session "$@" >>$OUTPUTFILE
    keyctl session "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# Create a new session and attach to the parent process (ie. the script)
#
###############################################################################
function new_session_to_parent ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl new_session "$@" >>$OUTPUTFILE
    keyctl new_session "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# instantiate a key
#
###############################################################################
function instantiate_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl instantiate "$@" >>$OUTPUTFILE
    keyctl instantiate "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# instantiate a key, piping the data in over stdin
#
###############################################################################
function pinstantiate_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    data="$1"
    shift

    echo echo -n $data \| keyctl pinstantiate "$@" >>$OUTPUTFILE
    echo -n $data | keyctl pinstantiate "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# reject a key
#
###############################################################################
function reject_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl reject "$@" >>$OUTPUTFILE
    keyctl reject "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# negate a key
#
###############################################################################
function negate_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl negate "$@" >>$OUTPUTFILE
    keyctl negate "$@" >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# set a key's expiry time
#
###############################################################################
function timeout_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl timeout $1 $2 >>$OUTPUTFILE
    keyctl timeout $1 $2 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# Invalidate a key
#
###############################################################################
function invalidate_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl invalidate $1 >>$OUTPUTFILE
    keyctl invalidate $1 >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# Do a DH computation
#
###############################################################################
function dh_compute ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl dh_compute $@ >>$OUTPUTFILE
    keyctl dh_compute $@ >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# Do a DH computation post-processed by a KDF
#
###############################################################################
function dh_compute_kdf ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl dh_compute_kdf $@ >>$OUTPUTFILE
    keyctl dh_compute_kdf $@ >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# Do a DH computation post-processed by a KDF with other information
#
###############################################################################
function dh_compute_kdf_oi ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl dh_compute_kdf_oi $@ >>$OUTPUTFILE
    keyctl dh_compute_kdf_oi $@ >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# Move a key between keyrings
#
###############################################################################
function move_key ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    fi

    echo keyctl move $* >>$OUTPUTFILE
    keyctl move $* >>$OUTPUTFILE 2>&1
    if [ $? != $my_exitval ]
    then
	failed
    fi
}

###############################################################################
#
# Query supported features
#
###############################################################################
function supports ()
{
    my_exitval=0
    if [ "x$1" = "x--fail" ]
    then
	my_exitval=1
	shift
    elif [ "x$1" = "x--unrecognised" ]
    then
	my_exitval=3
	shift
    fi

    echo keyctl supports $* >>$OUTPUTFILE
    keyctl supports $* >>$OUTPUTFILE 2>&1
    err=$?
    if [ $err != $my_exitval ]
    then
	echo exitcode=$err >>$OUTPUTFILE
	failed
    fi
}

###############################################################################
#
# Make sure we sleep at least N seconds
#
###############################################################################
function sleep_at_least ()
{
    my_now=`date +%s`
    my_done_at=$(($my_now+$1+1))
    sleep $1
    while [ `date +%s` -lt $my_done_at ]
    do
	# Sleep in 1/50th of a second bursts till the time catches up
	sleep .02
    done
}

###############################################################################
#
# set gc delay time, return original value
#
###############################################################################
function set_gc_delay()
{
    delay=$1
    if [ -f $key_gc_delay_file ]; then
        echo $delay > $key_gc_delay_file
        echo "Set $key_gc_delay_file to $delay, orig: $orig_gc_delay"
    fi
}
