view testharness/install-test-harness.sh @ 171:e27c5c667a5a

Create full new types for return code and flags, separate end to end. This plumbs the ReturnCode and RawFlags types through the places where we call into or are called from PAM. Also adds Sun documentation to the project.
author Paul Fisher <paul@pfish.zone>
date Fri, 25 Jul 2025 20:52:14 -0400
parents 77470e45e397
children
line wrap: on
line source

#!/bin/sh

set -ex

LINUX_BSD_CONF="/etc/pam.d/nonstick-testharness"

patch_pam_conf() {
  SRC="$1"
  DST="$2"
  LIB="$3"
  SUN_PATCH=""
  if [ "$(uname -s)" = "SunOS" ]; then
    SUN_PATCH="s/^#Sun#//"
  fi
  sed -e "s#pam_testharness\.so#$LIB#" -e "$SUN_PATCH" <"$SRC" >"$DST"
}

setup_pam_conf() {
  SRC="$1"
  case "$(uname -s)" in
  "Linux" | *BSD)
    # For Linux-PAM and OpenPAM, PAM is configured with the per-service files
    # in /etc/pam.d/...
    sudo cp "$SRC" "$LINUX_BSD_CONF"
    ;;
  "SunOS")
    # On SunOS, PAM has just the one configuration file,
    # with the service prepended to each line.
    sudo cp /etc/pam.conf /etc/pam.conf.bak
    sed 's/^\([^#]\)/nonstick-testharness \1/' <"$SRC" \
      | sudo tee -a /etc/pam.conf >/dev/null
    ;;
  *)
    echo "UNKNOWN OS!!!"
    return 1
    ;;
  esac
}

cleanup_pam_conf() {
  case "$(uname -s)" in
  "Linux" | *BSD)
    sudo rm "$LINUX_BSD_CONF"
    ;;
  "SunOS")
    sudo mv /etc/pam.conf.bak /etc/pam.conf
    ;;
  esac
}

HERE="$(dirname -- "$0")"
cd "$HERE"
cargo build --release

cleanup() {
  rm -r "$MY_TEMP"
  sudo rm -r "$ROOT_TEMP"
  cleanup_pam_conf
}

MY_TEMP="$(mktemp -d -t nonstick-user-XXXXXX)"
ROOT_TEMP="$(sudo mktemp -d -t nonstick-root-XXXXXX)"
sudo chmod a+rx "$ROOT_TEMP"
PAM_LIBRARY="$ROOT_TEMP/pam_nonstick.so"
sudo cp ../target/release/libnonstick_testharness.so "$PAM_LIBRARY"
patch_pam_conf ./nonstick_testharness.conf "$MY_TEMP/nonstick-testharness" "$PAM_LIBRARY"
setup_pam_conf "$MY_TEMP/nonstick-testharness"
trap cleanup EXIT
"$@" && echo "SUCCESS!!!" || echo "FAILURE: $?"