Child Listener

1. Stash a copy of wolfsshd's listenFd in the connection record.
2. After the fork, the child now closes the listenFd.
3. After the fork, the parent now closes the fd.
pull/457/head
John Safranek 2022-09-08 10:05:58 -07:00
parent 1d466823f3
commit 95431c3de1
No known key found for this signature in database
GPG Key ID: 8CE817DE0D3CCB4A
1 changed files with 4 additions and 0 deletions

View File

@ -102,6 +102,7 @@ typedef struct WOLFSSHD_CONNECTION {
WOLFSSH_CTX* ctx;
WOLFSSHD_AUTH* auth;
int fd;
int listenFd;
char ip[INET_ADDRSTRLEN];
} WOLFSSHD_CONNECTION;
@ -812,12 +813,14 @@ static int NewConnection(WOLFSSHD_CONNECTION* conn)
if (ret == WS_SUCCESS) {
if (pd == 0) {
/* child process */
WCLOSESOCKET(conn->listenFd);
signal(SIGINT, SIG_DFL);
(void)HandleConnection((void*)conn);
exit(0);
}
else {
wolfSSH_Log(WS_LOG_INFO, "[SSHD] Spawned new process %d\n", pd);
WCLOSESOCKET(conn->fd);
}
}
@ -1049,6 +1052,7 @@ int main(int argc, char** argv)
socklen_t clientAddrSz = sizeof(clientAddr);
#endif
conn.auth = auth;
conn.listenFd = listenFd;
/* wait for a connection */
if (PendingConnection(listenFd)) {