1264377Sdes#	$OpenBSD: agent-ptrace.sh,v 1.2 2014/02/27 21:21:25 djm Exp $
2113908Sdes#	Placed in the Public Domain.
3113908Sdes
4113908Sdestid="disallow agent ptrace attach"
5113908Sdes
6124208Sdesif have_prog uname ; then
7124208Sdes	case `uname` in
8146998Sdes	AIX|CYGWIN*|OSF1)
9124208Sdes		echo "skipped (not supported on this platform)"
10124208Sdes		exit 0
11124208Sdes		;;
12124208Sdes	esac
13124208Sdesfi
14124208Sdes
15124208Sdesif have_prog gdb ; then
16124208Sdes	: ok
17124208Sdeselse
18124208Sdes	echo "skipped (gdb not found)"
19124208Sdes	exit 0
20124208Sdesfi
21124208Sdes
22262566Sdesif $OBJ/setuid-allowed ${SSHAGENT} ; then
23262566Sdes	: ok
24262566Sdeselse
25262566Sdes	echo "skipped (${SSHAGENT} is mounted on a no-setuid filesystem)"
26262566Sdes	exit 0
27262566Sdesfi
28262566Sdes
29126274Sdesif test -z "$SUDO" ; then
30126274Sdes	echo "skipped (SUDO not set)"
31126274Sdes	exit 0
32126274Sdeselse
33126274Sdes	$SUDO chown 0 ${SSHAGENT}
34126274Sdes	$SUDO chgrp 0 ${SSHAGENT}
35126274Sdes	$SUDO chmod 2755 ${SSHAGENT}
36126274Sdesfi
37126274Sdes
38113908Sdestrace "start agent"
39113908Sdeseval `${SSHAGENT} -s` > /dev/null
40113908Sdesr=$?
41113908Sdesif [ $r -ne 0 ]; then
42113908Sdes	fail "could not start ssh-agent: exit code $r"
43113908Sdeselse
44113908Sdes	# ls -l ${SSH_AUTH_SOCK}
45113908Sdes	gdb ${SSHAGENT} ${SSH_AGENT_PID} > ${OBJ}/gdb.out 2>&1 << EOF
46113908Sdes		quit
47113908SdesEOF
48262566Sdes	r=$?
49262566Sdes	if [ $r -ne 0 ]; then
50262566Sdes		fail "gdb failed: exit code $r"
51113908Sdes	fi
52218767Sdes	egrep 'ptrace: Operation not permitted.|procfs:.*Permission denied.|ttrace.*Permission denied.|procfs:.*: Invalid argument.|Unable to access task ' >/dev/null ${OBJ}/gdb.out
53113908Sdes	r=$?
54113908Sdes	rm -f ${OBJ}/gdb.out
55113908Sdes	if [ $r -ne 0 ]; then
56113908Sdes		fail "ptrace succeeded?: exit code $r"
57113908Sdes	fi
58113908Sdes
59113908Sdes	trace "kill agent"
60113908Sdes	${SSHAGENT} -k > /dev/null
61113908Sdesfi
62