Implemented Fedora Core compatibility.
[nethome.git] / bin / ssh-agent-spawn
1 #! /sbin/nologin
2 # $Id$
3
4 agenteval=/tmp/.$USER.ssh-agent.eval
5 if lockfile -1 -r 3 -l 10 -s 1 $agenteval.lock;then
6         test -f $agenteval -a -O $agenteval -a -G $agenteval &&
7                         # ">/dev/null" to prevent: echo Agent pid 31074;
8                         source $agenteval >/dev/null
9         if [ "ssh-agent" != "`(xargs -0 </proc/"$SSH_AGENT_PID"/cmdline sh -c 'echo "$0"') 2>/dev/null `" ];then
10                 rm -f $agenteval
11                 (test ! -e $agenteval && ssh-agent -s >$agenteval) || echo >&2 'Failing ssh-agent!'
12                 # ">/dev/null" to prevent: echo Agent pid 31074;
13                 source $agenteval >/dev/null
14         fi
15         rm -f $agenteval.lock
16 fi
17 for key in $HOME/.ssh/id_dsa;do
18         # Prevent gdm(8) lockups on non-interactive consoles.
19         tty -s || continue
20         (ssh-add -l|grep -qw "$key") && continue
21         if lockfile -! -1 -r 0 $agenteval.input.lock 2>/dev/null;then
22                 echo >&2 -n "Locking: $agenteval.input.lock ... "
23                 lockfile -1 -r -1 $agenteval.input.lock
24                 echo >&2 "locked"
25         fi
26         # Recheck identity existence after the lock acquire
27         if ssh-add -l|grep -qw "$key";then
28                 echo >&2 "Identity $key already appended in the meantime."
29         else
30                 # "2>/dev/null" to prevent: Identity added: .ssh/id_dsa (.ssh/id_dsa)
31                 ssh-add "$key" 2>/dev/null
32         fi
33         rm -f $agenteval.input.lock
34         echo >&2 "$agenteval.input.lock unlocked."
35 done
36 unset agenteval