summaryrefslogtreecommitdiff
path: root/ssh-agent.c
diff options
context:
space:
mode:
authorDamien Miller <djm@mindrot.org>2014-07-03 21:22:40 +1000
committerDamien Miller <djm@mindrot.org>2014-07-03 21:22:40 +1000
commitb1e967c8d7c7578dd0c172d85b3046cf54ea42ba (patch)
tree8f895c2e7399de136573dd2098540c8406cb9f7f /ssh-agent.c
parent61e28e55c3438d796b02ef878bcd28620d452670 (diff)
- djm@cvs.openbsd.org 2014/07/03 03:11:03
[ssh-agent.c] Only cleanup agent socket in the main agent process and not in any subprocesses it may have started (e.g. forked askpass). Fixes agent sockets being zapped when askpass processes fatal(); bz#2236 patch from Dmitry V. Levin
Diffstat (limited to 'ssh-agent.c')
-rw-r--r--ssh-agent.c10
1 files changed, 9 insertions, 1 deletions
diff --git a/ssh-agent.c b/ssh-agent.c
index 693d763e2..f7a021364 100644
--- a/ssh-agent.c
+++ b/ssh-agent.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: ssh-agent.c,v 1.186 2014/06/24 01:13:21 djm Exp $ */ 1/* $OpenBSD: ssh-agent.c,v 1.187 2014/07/03 03:11:03 djm Exp $ */
2/* 2/*
3 * Author: Tatu Ylonen <ylo@cs.hut.fi> 3 * Author: Tatu Ylonen <ylo@cs.hut.fi>
4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland 4 * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland
@@ -126,6 +126,9 @@ int max_fd = 0;
126pid_t parent_pid = -1; 126pid_t parent_pid = -1;
127time_t parent_alive_interval = 0; 127time_t parent_alive_interval = 0;
128 128
129/* pid of process for which cleanup_socket is applicable */
130pid_t cleanup_pid = 0;
131
129/* pathname and directory for AUTH_SOCKET */ 132/* pathname and directory for AUTH_SOCKET */
130char socket_name[MAXPATHLEN]; 133char socket_name[MAXPATHLEN];
131char socket_dir[MAXPATHLEN]; 134char socket_dir[MAXPATHLEN];
@@ -976,6 +979,9 @@ after_select(fd_set *readset, fd_set *writeset)
976static void 979static void
977cleanup_socket(void) 980cleanup_socket(void)
978{ 981{
982 if (cleanup_pid != 0 && getpid() != cleanup_pid)
983 return;
984 debug("%s: cleanup", __func__);
979 if (socket_name[0]) 985 if (socket_name[0])
980 unlink(socket_name); 986 unlink(socket_name);
981 if (socket_dir[0]) 987 if (socket_dir[0])
@@ -1244,6 +1250,8 @@ main(int ac, char **av)
1244 1250
1245skip: 1251skip:
1246 1252
1253 cleanup_pid = getpid();
1254
1247#ifdef ENABLE_PKCS11 1255#ifdef ENABLE_PKCS11
1248 pkcs11_init(0); 1256 pkcs11_init(0);
1249#endif 1257#endif