numbytes);
buf[numbytes] = '\0';
PARA_ERROR_LOG("received the following instead: %s\n", buf);
- goto write_out;
+ exit(EXIT_FAILURE);
}
PARA_INFO_LOG("<-- [challenge (%i bytes)]\n", numbytes);
/* decrypt challenge number */
if (send_buffer(sockfd, EOC_MSG "\n") < 0)
exit(EXIT_FAILURE);
PARA_NOTICE_LOG("%s", "command sent.\n");
-write_out:
received = 0;
- /* write server output to stdout */
- while ((numbytes = recv_bin_buffer(sockfd, buf, sizeof(buf))) > 0) {
- int ret;
-
+ while ((numbytes = recv_bin_buffer(sockfd, buf, sizeof(buf) - 1)) > 0) {
+ buf[numbytes] = '\0';
if (!received && strstr(buf, AWAITING_DATA_MSG)) {
- PARA_NOTICE_LOG("%s", "<-- awaiting data\n");
- PARA_NOTICE_LOG("%s", "--> sending stdin\n");
+ PARA_NOTICE_LOG("%s", "sending stdin\n");
while ((ret = read(STDIN_FILENO, buf,
- sizeof(buf))) > 0)
- send_bin_buffer(sockfd, buf, ret);
+ sizeof(buf))) > 0) {
+ if (send_bin_buffer(sockfd, buf, ret) < 0)
+ break;
+ }
PARA_NOTICE_LOG("%s", "closing connection\n");
numbytes = 1;
break;
close(sockfd);
if (interactive)
goto interactive_loop;
- return 0;
+ return ret >= 0? 0: 1;
}