diff -urNb mpd-3.18.orig/src/chap.c mpd-3.18/src/chap.c --- mpd-3.18.orig/src/chap.c Tue May 4 22:12:28 2004 +++ mpd-3.18/src/chap.c Tue Mar 15 17:43:51 2005 @@ -113,6 +113,7 @@ { u_char *pkt; + if (!chap->chal_len) { /* Put random challenge data in buffer (only once for Microsoft CHAP) */ switch (chap->recv_alg) { case CHAP_ALG_MSOFT: { @@ -138,6 +139,7 @@ assert(0); } assert(chap->chal_len <= sizeof(chap->chal_data)); + } /* Build a challenge packet */ pkt = Malloc(MB_AUTH, 1 + chap->chal_len + strlen(bund->conf.authname) + 1); @@ -147,7 +149,7 @@ bund->conf.authname, strlen(bund->conf.authname)); /* Send it off */ - ChapOutput(CHAP_CHALLENGE, chap->next_id++, + ChapOutput(CHAP_CHALLENGE, chap->next_id, pkt, 1 + chap->chal_len + strlen(bund->conf.authname)); Freee(pkt); } @@ -275,7 +277,7 @@ int len, chap_value_size, hash_value_size; /* Sanity check */ - if (lnk->lcp.phase != PHASE_AUTHENTICATE && lnk->lcp.phase != PHASE_NETWORK) { + if (lnk->lcp.phase != PHASE_AUTHENTICATE) { Log(LG_AUTH, ("[%s] CHAP: rec'd stray packet", lnk->name)); PFREE(bp); return;