#! /bin/sh -e die () { echo "ERROR ERROR: $*" exit 1 } CTF_BASE=/tmp/ctf-test.$$ export CTF_BASE trap "rm -rf $CTF_BASE" 0 mkdir $CTF_BASE # Some skeletal structure mkdir -p $CTF_BASE/points.new mkdir -p $CTF_BASE/points.tmp # Set up some packages for cat in cat1 cat2 cat3; do mkdir -p $CTF_BASE/$cat cat >$CTF_BASE/$cat/answers.txt < $CTF_BASE/mcp/tokend.keys/tokencat mkfifo $CTF_BASE/nancy src/tokencli tokencat $CTF_BASE/mcp/tokend.keys/tokencat < $CTF_BASE/nancy 3>$CTF_BASE/t | src/in.tokend > $CTF_BASE/nancy if ! grep -q 'tokencat:x....-....x' $CTF_BASE/tokens.db; then die "in.tokend didn't write to database" fi if src/claim.cgi t=lalalala k=$(cat $CTF_BASE/tokens.db) | grep -q success; then die "claim.cgi gave points to a bogus team" fi if src/claim.cgi t=$hash k=tokencat:xanax-xanax | grep -q success; then die "claim.cgi gave points for a bogus token" fi if ! src/claim.cgi t=$hash k=$(cat $CTF_BASE/t) | grep -q success; then die "claim.cgi didn't give me any points" fi if src/claim.cgi t=$hash k=$(cat $CTF_BASE/t) | grep -q success; then die "claim.cgi gave me points twice for the same token" fi if ! [ -f $CTF_BASE/points.new/*.$hash.tokencat.1 ]; then die "claim.cgi didn't actually record any points" fi echo "All tests passed! You're the best programmer ever!"