Пример #1
0
static int chap_print_pkt(const unsigned char *p, int plen,
	       void (*printer) (void *, const char *, ...), void *arg) {
	int code, id, len;
	int clen, nlen;
	unsigned char x;

	if (plen < CHAP_HDRLEN)
		return 0;
	GETCHAR(code, p);
	GETCHAR(id, p);
	GETSHORT(len, p);
	if (len < CHAP_HDRLEN || len > plen)
		return 0;

	if (code >= 1 && code <= (int)sizeof(chap_code_names) / (int)sizeof(char *))
		printer(arg, " %s", chap_code_names[code-1]);
	else
		printer(arg, " code=0x%x", code);
	printer(arg, " id=0x%x", id);
	len -= CHAP_HDRLEN;
	switch (code) {
	case CHAP_CHALLENGE:
	case CHAP_RESPONSE:
		if (len < 1)
			break;
		clen = p[0];
		if (len < clen + 1)
			break;
		++p;
		nlen = len - clen - 1;
		printer(arg, " <");
		for (; clen > 0; --clen) {
			GETCHAR(x, p);
			printer(arg, "%.2x", x);
		}
		printer(arg, ">, name = ");
		ppp_print_string(p, nlen, printer, arg);
		break;
	case CHAP_FAILURE:
	case CHAP_SUCCESS:
		printer(arg, " ");
		ppp_print_string(p, len, printer, arg);
		break;
	default:
		for (clen = len; clen > 0; --clen) {
			GETCHAR(x, p);
			printer(arg, " %.2x", x);
		}
		/* no break */
	}

	return len + CHAP_HDRLEN;
}
Пример #2
0
Файл: upap.c Проект: crvv/lwip
static int upap_printpkt(const u_char *p, int plen, void (*printer) (void *, const char *, ...), void *arg) {
    int code, id, len;
    int mlen, ulen, wlen;
    const u_char *user, *pwd, *msg;
    const u_char *pstart;

    if (plen < UPAP_HEADERLEN)
        return 0;
    pstart = p;
    GETCHAR(code, p);
    GETCHAR(id, p);
    GETSHORT(len, p);
    if (len < UPAP_HEADERLEN || len > plen)
        return 0;

    if (code >= 1 && code <= (int)LWIP_ARRAYSIZE(upap_codenames))
        printer(arg, " %s", upap_codenames[code-1]);
    else
        printer(arg, " code=0x%x", code);
    printer(arg, " id=0x%x", id);
    len -= UPAP_HEADERLEN;
    switch (code) {
    case UPAP_AUTHREQ:
        if (len < 1)
            break;
        ulen = p[0];
        if (len < ulen + 2)
            break;
        wlen = p[ulen + 1];
        if (len < ulen + wlen + 2)
            break;
        user = (const u_char *) (p + 1);
        pwd = (const u_char *) (p + ulen + 2);
        p += ulen + wlen + 2;
        len -= ulen + wlen + 2;
        printer(arg, " user="******" password="******"<hidden>");
#endif
        break;
    case UPAP_AUTHACK:
    case UPAP_AUTHNAK:
        if (len < 1)
            break;
        mlen = p[0];
        if (len < mlen + 1)
            break;
        msg = (const u_char *) (p + 1);
        p += mlen + 1;
        len -= mlen + 1;
        printer(arg, " ");
        ppp_print_string(msg, mlen, printer, arg);
        break;
    default:
        break;
    }

    /* print the rest of the bytes in the packet */
    for (; len > 0; --len) {
        GETCHAR(code, p);
        printer(arg, " %.2x", code);
    }

    return p - pstart;
}