#!/bin/sh -e # # SPDX-License-Identifier: GPL-2.0-or-later # # seitan - Syscall Expressive Interpreter, Transformer and Notifier # # seitan-run - Convenience script: run target command with syscall model # # Copyright (c) 2022 Red Hat GmbH # Authors: Alice Frosi # Stefano Brivio usage() { echo "${0} JSON COMMAND" exit 1 } cleanup() { rm -rf "${DIR}/gluten" "${DIR}/bpf" "${DIR}/eater.pid" rmdir "${DIR}" 2>/dev/null || : } trap cleanup EXIT INT [ ${#} -lt 2 ] && usage [ -z "${DIR}" ] && DIR="$(mktemp -d)" [ -z "${COOKER}" ] && COOKER="$(command -v ./seitan-cooker seitan-cooker)" [ -z "${COOKER}" ] && echo "seitan-cooker not found" && exit 1 [ -z "${EATER}" ] && EATER="$(command -v ./seitan-eater seitan-eater)" [ -z "${EATER}" ] && echo "seitan-eater not found" && exit 1 [ -z "${SEITAN}" ] && SEITAN="$(command -v ./seitan seitan)" [ -z "${SEITAN}" ] && echo "seitan not found" && exit 1 "${COOKER}" "${1}" "${DIR}/gluten" "${DIR}/bpf" echo "Cooked files now at ${DIR}" shift ( "${EATER}" -i "${DIR}/bpf" -- ${@} & echo "${!}" > "${DIR}/eater.pid" 2>&1 ) & sleep 0.1 || sleep 1 "${SEITAN}" -p "$(cat "${DIR}/eater.pid")" -i "${DIR}/gluten"