-# $Id$
-
-SOCKET=~/.ssh/agent
-
-if [ ! -z "$SSH_CLIENT" ]; then
- # Set display if we aren't already forwarding X11
- if [ "$DISPLAY" = "" ]; then
- export DISPLAY="$(echo $SSH_CLIENT | cut -s -d ' ' -f 1):0"
- fi
-fi
-
-# Try to hook up with already running ssh-agent.
if [ $UID -gt 0 ]; then
- # Not all OSes support ``ps -wu''.
- RUNNING_AGENT="$(ps waux | grep -- ^$USER\ .\*ssh-agent\ -a\ .\*\ -s | grep -v grep | awk '{ print $2 }' | head -n 1)"
- if [ -z "$SSH_AGENT_PID" -o ! "$SSH_AGENT_PID" = "$RUNNING_AGENT" ]; then
- export SSH_AGENT_PID="$RUNNING_AGENT"
- if [ "$SSH_AGENT_PID" = "" ]; then
- unset SSH_AGENT_PID
- unset SSH_AUTH_SOCK
- # Start ssh-agent up then.
- eval $(/usr/bin/ssh-agent -a "$SOCKET" -s)
- trap "kill $SSH_AGENT_PID" 0
- ssh-add
- else
- export SSH_AUTH_SOCK="$SOCKET"
+ # Hack to prevent confusion between two agents when launched from xdm.
+ if [ ! $SHLVL = 1 -o -z "$DESKTOP_SESSION" ]; then
+ # Read a list of hosts which can run an agent from ~/.ssh/agenthosts.
+ if [ -f ~/.ssh/agenthosts ]; then
+ while read allowed; do
+ if [ "${HOSTNAME%%.*}" = "$allowed" ]; then
+ eval $(keychain -q --timeout 7200 --agents ssh --eval)
+ if tty -s; then
+ ssh-add -l >/dev/null || ssh-add
+ fi
+ fi
+ done < ~/.ssh/agenthosts
+ unset allowed
fi
fi
- unset RUNNING_AGENT
fi
-
-unset SOCKET