]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
CHAP-Challenge is not fixed to 16 octets
authorNick Porter <nick@portercomputing.co.uk>
Mon, 16 Jun 2025 09:53:04 +0000 (10:53 +0100)
committerNick Porter <nick@portercomputing.co.uk>
Mon, 16 Jun 2025 11:25:23 +0000 (12:25 +0100)
RFC2865 says min length is 7

src/bin/radclient-ng.c
src/bin/radclient.c

index 8251f4eef6cf40157c6851ad96e5c18c9d52c0b6..60fc4d04dcc6593d59cab9c989ddab2315216bb5 100644 (file)
@@ -1011,14 +1011,15 @@ static int send_one_packet(fr_bio_packet_t *client, rc_request_t *request)
                         *      Request Authenticator otherwise.
                         */
                        challenge = fr_pair_find_by_da(&request->request_pairs, NULL, attr_chap_challenge);
-                       if (challenge && (challenge->vp_length == RADIUS_AUTH_VECTOR_LENGTH)) {
+                       if (challenge && (challenge->vp_length >= 7)) {
                                vector = challenge->vp_octets;
                        } else {
                                vector = request->packet->vector;
                        }
 
                        fr_chap_encode(buffer,
-                                      fr_rand() & 0xff, vector, RADIUS_AUTH_VECTOR_LENGTH,
+                                      fr_rand() & 0xff, vector,
+                                      challenge ? challenge->vp_length : RADIUS_AUTH_VECTOR_LENGTH,
                                       request->password->vp_strvalue,
                                       request->password->vp_length);
                        fr_pair_value_memdup(vp, buffer, sizeof(buffer), false);
index d0f2110dd48cf936800ed729b2d4014b0244e847..727d9fef7b7f10cb58ae5e82cb362fd22c5de844 100644 (file)
@@ -1017,14 +1017,15 @@ static int send_one_packet(rc_request_t *request)
                                 *      Request Authenticator otherwise.
                                 */
                                challenge = fr_pair_find_by_da(&request->request_pairs, NULL, attr_chap_challenge);
-                               if (challenge && (challenge->vp_length == RADIUS_AUTH_VECTOR_LENGTH)) {
+                               if (challenge && (challenge->vp_length >= 7)) {
                                        vector = challenge->vp_octets;
                                } else {
                                        vector = request->packet->vector;
                                }
 
                                fr_chap_encode(buffer,
-                                              fr_rand() & 0xff, vector, RADIUS_AUTH_VECTOR_LENGTH,
+                                              fr_rand() & 0xff, vector,
+                                              challenge ? challenge->vp_length : RADIUS_AUTH_VECTOR_LENGTH,
                                               request->password->vp_strvalue,
                                               request->password->vp_length);
                                fr_pair_value_memdup(vp, buffer, sizeof(buffer), false);