#!/bin/sh
# fake/schroot-proposed -- emulate proposed mount behaviour for schroot
#
# Copyright © 2017 Simon McVittie
# SPDX-License-Identifier: MIT
# (see debian/copyright)

set -e

# /etc/schroot/default/fstab
bind_dev=yes

while true; do
	case "$1" in
		(--sbuild)
			shift
			# /etc/schroot/sbuild/fstab
			bind_dev=no
			;;
		(*)
			break
	esac
done

CHROOT_PATH="$1"
shift
if test -z "$CHROOT_PATH" || test -z "$1"; then
	echo "Usage: $0 CHROOT COMMAND...">&2
	exit 2
fi

[ "$bind_dev" = no ] || mount --bind /dev "$CHROOT_PATH/dev"
mount -t devpts -o rw,newinstance,ptmxmode=666,mode=620,gid=5 /dev/pts "$CHROOT_PATH/dev/pts"

ls -l "$CHROOT_PATH/dev/ptmx" | sed -e 's/^/# fake-schroot: /' >&2
ls -l "$CHROOT_PATH/dev/pts/ptmx" | sed -e 's/^/# fake-schroot: /' >&2

mounted_ptmx=no

if [ -e "$CHROOT_PATH/dev/pts/ptmx" ] && \
        ! [ -L "$CHROOT_PATH/dev/ptmx" ]; then
    mount --bind "$CHROOT_PATH/dev/pts/ptmx" "$CHROOT_PATH/dev/ptmx"
    mounted_ptmx=yes
fi

mounted_console=no

if stdin_tty="$(tty)"; then
    if [ ! -e "$CHROOT_PATH/dev/console" ]; then
        mknod -m700 "$CHROOT_PATH/dev/console" c 5 1
    fi

    mount --bind "$stdin_tty" "$CHROOT_PATH/dev/console"
    mounted_console=yes
fi

ls -l "$CHROOT_PATH/dev/ptmx" | sed -e 's/^/# fake-schroot: /' >&2
ls -l "$CHROOT_PATH/dev/pts/ptmx" | sed -e 's/^/# fake-schroot: /' >&2

e=0
chroot "$CHROOT_PATH" "$@" || e=$?

[ "$mounted_console" = no ] || umount "$CHROOT_PATH/dev/console"
[ "$mounted_ptmx" = no ] || umount "$CHROOT_PATH/dev/ptmx"
umount "$CHROOT_PATH/dev/pts"
[ "$bind_dev" = no ] || umount "$CHROOT_PATH/dev"

exit "$e"
