| 179 | } |
| 180 | |
| 181 | static void |
| 182 | sshdReceiveFds() |
| 183 | { |
| 184 | // Add receive-fd data socket. |
| 185 | static struct sockaddr_un fdReceiveAddr; |
| 186 | static socklen_t fdReceiveAddrLen; |
| 187 | |
| 188 | memset(&fdReceiveAddr, 0, sizeof(fdReceiveAddr)); |
| 189 | jalib::JSocket sock(_real_socket(AF_UNIX, SOCK_DGRAM, 0)); |
| 190 | JASSERT(sock.isValid()); |
| 191 | sock.changeFd(SSHD_RECEIVE_FD); |
| 192 | fdReceiveAddr.sun_family = AF_UNIX; |
| 193 | JASSERT(_real_bind(SSHD_RECEIVE_FD, |
| 194 | (struct sockaddr *)&fdReceiveAddr, |
| 195 | sizeof(fdReceiveAddr.sun_family)) == 0) (JASSERT_ERRNO); |
| 196 | |
| 197 | fdReceiveAddrLen = sizeof(fdReceiveAddr); |
| 198 | JASSERT(getsockname(SSHD_RECEIVE_FD, |
| 199 | (struct sockaddr *)&fdReceiveAddr, |
| 200 | &fdReceiveAddrLen) == 0); |
| 201 | |
| 202 | // Send this information to dmtcp_ssh process |
| 203 | ssize_t ret = write(sshSockFd, &fdReceiveAddrLen, sizeof(fdReceiveAddrLen)); |
| 204 | JASSERT(ret == sizeof(fdReceiveAddrLen)) (sshSockFd) (ret) (JASSERT_ERRNO); |
| 205 | ret = write(sshSockFd, &fdReceiveAddr, fdReceiveAddrLen); |
| 206 | JASSERT(ret == (ssize_t)fdReceiveAddrLen); |
| 207 | |
| 208 | // Now receive fds |
| 209 | receiveFileDescr(STDIN_FILENO); |
| 210 | receiveFileDescr(STDOUT_FILENO); |
| 211 | receiveFileDescr(STDERR_FILENO); |
| 212 | receiveFileDescr(SSHD_PIPE_FD); |
| 213 | _real_close(SSHD_RECEIVE_FD); |
| 214 | } |
| 215 | |
| 216 | static void |
| 217 | createNewDmtcpSshdProcess() |
no test coverage detected