static int
chap_IsSet_old(struct fdescriptor *d, const fd_set *fdset)
{
    struct chap *chap = descriptor2chap(d);

    return chap && chap->child.fd != -1 && FD_ISSET(chap->child.fd, fdset);
}
static void
chap_Read_old(struct fdescriptor *d, struct bundle *bundle, const fd_set *fdset)
{
    struct chap *chap = descriptor2chap(d);
    int got;

    got = read(chap->child.fd, chap->child.buf.ptr + chap->child.buf.len,
               sizeof chap->child.buf.ptr - chap->child.buf.len - 1);
    if (got == -1) {
        log_Printf(LogERROR, "Chap: Read: %s\n", strerror(errno));
        chap_Cleanup(chap, SIGTERM);
    } else if (got == 0) {
        log_Printf(LogWARN, "Chap: Read: Child terminated connection\n");
        chap_Cleanup(chap, SIGTERM);
    } else {
        char *name, *key, *end;

        chap->child.buf.len += got;
        chap->child.buf.ptr[chap->child.buf.len] = '\0';
        name = chap->child.buf.ptr;
        name += strspn(name, " \t");
        if ((key = strchr(name, '\n')) == NULL)
            end = NULL;
        else
            end = strchr(++key, '\n');

        if (end == NULL) {
            if (chap->child.buf.len == sizeof chap->child.buf.ptr - 1) {
                log_Printf(LogWARN, "Chap: Read: Input buffer overflow\n");
                chap_Cleanup(chap, SIGTERM);
            }
        } else {
#ifdef HAVE_DES
            int lanman = chap->auth.physical->link.lcp.his_authtype == 0x80 &&
                         ((chap->NTRespSent &&
                           IsAccepted(chap->auth.physical->link.lcp.cfg.chap80lm)) ||
                          !IsAccepted(chap->auth.physical->link.lcp.cfg.chap80nt));
#endif

            while (end >= name && strchr(" \t\r\n", *end))
                *end-- = '\0';
            end = key - 1;
            while (end >= name && strchr(" \t\r\n", *end))
                *end-- = '\0';
            key += strspn(key, " \t");

            chap_Respond(chap, name, key, chap->auth.physical->link.lcp.his_authtype
#ifdef HAVE_DES
                         , lanman
#endif
                        );
            chap_Cleanup(chap, 0);
        }
    }
}
static int
chap_UpdateSet_old(struct fdescriptor *d, fd_set *r, fd_set *w, fd_set *e, int *n)
{
    struct chap *chap = descriptor2chap(d);

    if (r && chap && chap->child.fd != -1) {
        FD_SET(chap->child.fd, r);
        if (*n < chap->child.fd + 1)
            *n = chap->child.fd + 1;
        log_Printf(LogTIMER, "Chap: fdset(r) %d\n", chap->child.fd);
        return 1;
    }

    return 0;
}
Пример #4
0
               ans, *ans + 1 + strlen(name), name);
#ifndef NODES
    chap->NTRespSent = !lm;
    MPPE_IsServer = 0;		/* XXX Global ! */
#endif
    free(ans);
  } else
    ChapOutput(chap->auth.physical, CHAP_FAILURE, chap->auth.id,
               "Out of memory!", 14, NULL);
}

static int
chap_UpdateSet(struct fdescriptor *d, fd_set *r, fd_set *w __unused,
	       fd_set *e __unused, int *n)
{
  struct chap *chap = descriptor2chap(d);

  if (r && chap && chap->child.fd != -1) {
    FD_SET(chap->child.fd, r);
    if (*n < chap->child.fd + 1)
      *n = chap->child.fd + 1;
    log_Printf(LogTIMER, "Chap: fdset(r) %d\n", chap->child.fd);
    return 1;
  }

  return 0;
}

static int
chap_IsSet(struct fdescriptor *d, const fd_set *fdset)
{