+#ifdef CHAPMS
+ case CHAP_MICROSOFT:
+ {
+ int response_offset, response_size;
+
+ if (remmd_len != MS_CHAP_RESPONSE_LEN)
+ break; /* not even the right length */
+ ChapMS(cstate, cstate->challenge, cstate->chal_len,
+ secret, secret_len);
+
+ /* Determine which part of response to verify against */
+ if ((u_char *) (remmd + offsetof(MS_ChapResponse, UseNT))) {
+ response_offset = offsetof(MS_ChapResponse, NTResp);
+ response_size = sizeof(((MS_ChapResponse *) remmd)->NTResp);
+ } else {
+ response_offset = offsetof(MS_ChapResponse, LANManResp);
+ response_size =
+ sizeof(((MS_ChapResponse *) remmd)->LANManResp);
+ }
+
+ /* compare MDs and send the appropriate status */
+ if (memcmp(cstate->response + response_offset,
+ remmd + response_offset, response_size) == 0)
+ code = CHAP_SUCCESS; /* they are the same! */
+ break;
+ }
+#endif /* CHAPMS */
+