Create MS-CHAP-User-Name, which is taken from the MS-CHAP packet.
authorAlan T. DeKok <aland@freeradius.org>
Mon, 26 Jul 2010 15:03:35 +0000 (17:03 +0200)
committerAlan T. DeKok <aland@freeradius.org>
Mon, 26 Jul 2010 15:05:30 +0000 (17:05 +0200)
Taken from bug #17

share/dictionary.freeradius.internal
src/modules/rlm_eap/types/rlm_eap_mschapv2/rlm_eap_mschapv2.c

index 7a6a635..c3f357d 100644 (file)
@@ -111,6 +111,7 @@ ATTRIBUTE   Response-Packet-Type                    1080    integer
 ATTRIBUTE      Digest-HA1                              1081    string
 ATTRIBUTE      MS-CHAP-Use-NTLM-Auth                   1082    integer
 ATTRIBUTE      NTLM-User-Name                          1083    string
+ATTRIBUTE      MS-CHAP-User-Name                       1083    string
 ATTRIBUTE      Packet-Src-IP-Address                   1084    ipaddr
 ATTRIBUTE      Packet-Dst-IP-Address                   1085    ipaddr
 ATTRIBUTE      Packet-Src-Port                         1086    integer
index 8004574..dc7c12b 100644 (file)
@@ -376,7 +376,7 @@ static int mschapv2_authenticate(void *arg, EAP_HANDLER *handler)
        int rcode;
        mschapv2_opaque_t *data;
        EAP_DS *eap_ds = handler->eap_ds;
-       VALUE_PAIR *challenge, *response;
+       VALUE_PAIR *challenge, *response, *name;
 
        rad_assert(handler->request != NULL);
        rad_assert(handler->stage == AUTHENTICATE);
@@ -523,12 +523,36 @@ static int mschapv2_authenticate(void *arg, EAP_HANDLER *handler)
        response->vp_strvalue[0] = eap_ds->response->type.data[1];
        response->vp_strvalue[1] = eap_ds->response->type.data[5 + MSCHAPV2_RESPONSE_LEN];
 
+       name = pairmake("NTLM-User-Name", "", T_OP_EQ);
+       if (!name) {
+               pairfree(&challenge);
+               pairfree(&response);
+               radlog(L_ERR, "rlm_eap_mschapv2: Failed creating NTLM-User-Name: %s", fr_strerror());
+               return 0;
+       }
+       
+       /*
+        *      MS-Length - MS-Value - 5.
+        */
+       name->length = (((eap_ds->response->type.data[2] << 8) |
+                         eap_ds->response->type.data[3]) -
+                       eap_ds->response->type.data[4] - 5);
+       if (name->length >= sizeof(name->vp_strvalue)) {
+               name->length = sizeof(name->vp_strvalue) - 1;
+       }
+
+       memcpy(name->vp_strvalue,
+              &eap_ds->response->type.data[4 + MSCHAPV2_RESPONSE_LEN],
+              name->length);
+       name->vp_strvalue[name->length] = '\0';
+
        /*
         *      Add the pairs to the request, and call the 'mschap'
         *      module.
         */
        pairadd(&handler->request->packet->vps, challenge);
        pairadd(&handler->request->packet->vps, response);
+       pairadd(&handler->request->packet->vps, name);
 
 #ifdef WITH_PROXY
        /*