Cleanup when remote side exits.
git-svn-id: svn://svn.h5l.se/heimdal/trunk/heimdal@739 ec53bebd-3082-4978-b11e-865c3cabbd6b
This commit is contained in:
@@ -22,6 +22,15 @@ fatal (int fd, char *s)
|
|||||||
return err;
|
return err;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void
|
||||||
|
cleanup()
|
||||||
|
{
|
||||||
|
if(xauthfile[0])
|
||||||
|
unlink(xauthfile);
|
||||||
|
if(x_socket[0])
|
||||||
|
unlink(x_socket);
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
recv_conn (int sock, des_cblock *key, des_key_schedule schedule,
|
recv_conn (int sock, des_cblock *key, des_key_schedule schedule,
|
||||||
struct sockaddr_in *retaddr)
|
struct sockaddr_in *retaddr)
|
||||||
@@ -217,12 +226,27 @@ doit(int sock)
|
|||||||
if (krb_net_read (sock, &thataddr.sin_port, sizeof(thataddr.sin_port))
|
if (krb_net_read (sock, &thataddr.sin_port, sizeof(thataddr.sin_port))
|
||||||
!= sizeof(thataddr.sin_port))
|
!= sizeof(thataddr.sin_port))
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
for (;;) {
|
for (;;) {
|
||||||
pid_t child;
|
pid_t child;
|
||||||
int fd;
|
int fd;
|
||||||
int zero = 0;
|
int zero = 0;
|
||||||
|
fd_set fds;
|
||||||
|
|
||||||
fd = accept (localx, NULL, &zero);
|
FD_ZERO(&fds);
|
||||||
|
FD_SET(localx, &fds);
|
||||||
|
FD_SET(sock, &fds);
|
||||||
|
if(select(FD_SETSIZE, &fds, NULL, NULL, NULL) <=0)
|
||||||
|
continue;
|
||||||
|
if(FD_ISSET(sock, &fds)){
|
||||||
|
/* there are no processes left on the remote side
|
||||||
|
*/
|
||||||
|
cleanup();
|
||||||
|
exit(0);
|
||||||
|
}else if(FD_ISSET(localx, &fds))
|
||||||
|
fd = accept (localx, NULL, &zero);
|
||||||
|
else
|
||||||
|
continue;
|
||||||
if (fd < 0)
|
if (fd < 0)
|
||||||
if (errno == EINTR)
|
if (errno == EINTR)
|
||||||
continue;
|
continue;
|
||||||
|
Reference in New Issue
Block a user