#! /bin/sh
# $Header: /global/src/usr.bin/src/RCS/xsudo.sh,v 1.4 2007/10/04 20:31:38 pb22 Exp $
#
# Run sudo under X -- need to fiddle with X auth

XAUTH=/usr/bin/X11/xauth
[ -e $XAUTH ] || XAUTH=/usr/bin/xauth
SUDO=${XSUDO_SUDO-/usr/bin/sudo}
SLEEP=${XSUDO_SLEEP-2}
SED=/bin/sed
MKTEMP=/bin/mktemp
RM=/bin/rm

if [ -z "$1" ] ; then
   echo "usage: xsudo program [arguments ...]" >&2
   exit 1
fi

COOKIE=$($XAUTH list $(echo $DISPLAY | $SED 's/.*:/:/'))
case "$COOKIE" in
'') echo "$0: no X cookie found for $DISPLAY" >&2; exit 1
esac
TMPFILE=$($MKTEMP /tmp/.Xauthority.XXXXXXXX) || exit 1
XAUTHORITY=$TMPFILE 
export XAUTHORITY
$XAUTH add $COOKIE
$SUDO "$@"
RC=$?
# "xsudo xon foo" returns before $XAUTHORITY has been used, so sleep
case "$SLEEP" in
0|'')	$RM $TMPFILE;;
*)	(sleep $SLEEP; $RM -f $TMPFILE) & ;;
esac
(exit $RC)
