summaryrefslogtreecommitdiff
path: root/pppd/plugins/radius/radius.c
diff options
context:
space:
mode:
authorPaul Mackerras <paulus@samba.org>2004-11-15 22:13:26 +0000
committerPaul Mackerras <paulus@samba.org>2004-11-15 22:13:26 +0000
commit6bd2208f408588cab66a4da26ebee1159840db81 (patch)
tree147c4fe5e75cb75550670725da2ea05a1bd7fc5d /pppd/plugins/radius/radius.c
parent69dda243ba613a88ffd951de15b6906e14c49a65 (diff)
downloadppp-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.c21
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);