diff options
author | Damien Miller <djm@mindrot.org> | 2014-07-03 21:22:40 +1000 |
---|---|---|
committer | Damien Miller <djm@mindrot.org> | 2014-07-03 21:22:40 +1000 |
commit | b1e967c8d7c7578dd0c172d85b3046cf54ea42ba (patch) | |
tree | 8f895c2e7399de136573dd2098540c8406cb9f7f /ssh-agent.c | |
parent | 61e28e55c3438d796b02ef878bcd28620d452670 (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.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/ssh-agent.c b/ssh-agent.c index 693d763e..f7a02136 100644 --- a/ssh-agent.c +++ b/ssh-agent.c @@ -1,4 +1,4 @@ -/* $OpenBSD: ssh-agent.c,v 1.186 2014/06/24 01:13:21 djm Exp $ */ +/* $OpenBSD: ssh-agent.c,v 1.187 2014/07/03 03:11:03 djm Exp $ */ /* * Author: Tatu Ylonen <ylo@cs.hut.fi> * Copyright (c) 1995 Tatu Ylonen <ylo@cs.hut.fi>, Espoo, Finland @@ -126,6 +126,9 @@ int max_fd = 0; pid_t parent_pid = -1; time_t parent_alive_interval = 0; +/* pid of process for which cleanup_socket is applicable */ +pid_t cleanup_pid = 0; + /* pathname and directory for AUTH_SOCKET */ char socket_name[MAXPATHLEN]; char socket_dir[MAXPATHLEN]; @@ -976,6 +979,9 @@ after_select(fd_set *readset, fd_set *writeset) static void cleanup_socket(void) { + if (cleanup_pid != 0 && getpid() != cleanup_pid) + return; + debug("%s: cleanup", __func__); if (socket_name[0]) unlink(socket_name); if (socket_dir[0]) @@ -1244,6 +1250,8 @@ main(int ac, char **av) skip: + cleanup_pid = getpid(); + #ifdef ENABLE_PKCS11 pkcs11_init(0); #endif |