diff options
author | Paul Mackerras <paulus@samba.org> | 2004-11-15 22:13:26 +0000 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2004-11-15 22:13:26 +0000 |
commit | 6bd2208f408588cab66a4da26ebee1159840db81 (patch) | |
tree | 147c4fe5e75cb75550670725da2ea05a1bd7fc5d /pppd/plugins/radius/radius.c | |
parent | 69dda243ba613a88ffd951de15b6906e14c49a65 (diff) | |
download | ppp-6bd2208f408588cab66a4da26ebee1159840db81.tar.gz |
Get rid of the MS_ChapResponse and MS_Chap2Response structures.
Using a struct to represent an on-the-wire format is basically
broken, since the compiler can add padding between members or
assume alignment for the struct. Instead we just use arrays
of unsigned char and define offsets in the arrays for the various
fields.
Diffstat (limited to 'pppd/plugins/radius/radius.c')
-rw-r--r-- | pppd/plugins/radius/radius.c | 21 |
1 files changed, 6 insertions, 15 deletions
diff --git a/pppd/plugins/radius/radius.c b/pppd/plugins/radius/radius.c index 932c89a..c4ef0a5 100644 --- a/pppd/plugins/radius/radius.c +++ b/pppd/plugins/radius/radius.c @@ -24,7 +24,7 @@ * ***********************************************************************/ static char const RCSID[] = -"$Id: radius.c,v 1.28 2004/11/14 10:27:57 paulus Exp $"; +"$Id: radius.c,v 1.29 2004/11/15 22:13:26 paulus Exp $"; #include "pppd.h" #include "chap-new.h" @@ -410,18 +410,14 @@ radius_chap_verify(char *user, char *ourname, int id, case CHAP_MICROSOFT: { /* MS-CHAP-Challenge and MS-CHAP-Response */ - MS_ChapResponse *rmd = (MS_ChapResponse *) response; u_char *p = cpassword; if (response_len != MS_CHAP_RESPONSE_LEN) return 0; *p++ = id; /* The idiots use a different field order in RADIUS than PPP */ - memcpy(p, rmd->UseNT, sizeof(rmd->UseNT)); - p += sizeof(rmd->UseNT); - memcpy(p, rmd->LANManResp, sizeof(rmd->LANManResp)); - p += sizeof(rmd->LANManResp); - memcpy(p, rmd->NTResp, sizeof(rmd->NTResp)); + *p++ = response[MS_CHAP_USENT]; + memcpy(p, response, MS_CHAP_LANMANRESP_LEN + MS_CHAP_NTRESP_LEN); rc_avpair_add(&send, PW_MS_CHAP_CHALLENGE, challenge, challenge_len, VENDOR_MICROSOFT); @@ -433,20 +429,15 @@ radius_chap_verify(char *user, char *ourname, int id, case CHAP_MICROSOFT_V2: { /* MS-CHAP-Challenge and MS-CHAP2-Response */ - MS_Chap2Response *rmd = (MS_Chap2Response *) response; u_char *p = cpassword; if (response_len != MS_CHAP2_RESPONSE_LEN) return 0; *p++ = id; /* The idiots use a different field order in RADIUS than PPP */ - memcpy(p, rmd->Flags, sizeof(rmd->Flags)); - p += sizeof(rmd->Flags); - memcpy(p, rmd->PeerChallenge, sizeof(rmd->PeerChallenge)); - p += sizeof(rmd->PeerChallenge); - memcpy(p, rmd->Reserved, sizeof(rmd->Reserved)); - p += sizeof(rmd->Reserved); - memcpy(p, rmd->NTResp, sizeof(rmd->NTResp)); + *p++ = response[MS_CHAP2_FLAGS]; + memcpy(p, response, (MS_CHAP2_PEER_CHAL_LEN + MS_CHAP2_RESERVED_LEN + + MS_CHAP2_NTRESP_LEN)); rc_avpair_add(&send, PW_MS_CHAP_CHALLENGE, challenge, challenge_len, VENDOR_MICROSOFT); |