case FR_RADIUS_CODE_DISCONNECT_NAK:
case FR_RADIUS_CODE_COA_ACK:
case FR_RADIUS_CODE_COA_NAK:
+ case FR_RADIUS_CODE_PROTOCOL_ERROR:
if (!vector) goto need_original;
memcpy(packet + 4, vector, RADIUS_AUTH_VECTOR_LENGTH);
break;
case FR_RADIUS_CODE_ACCESS_ACCEPT:
case FR_RADIUS_CODE_ACCESS_CHALLENGE:
case FR_RADIUS_CODE_ACCESS_REJECT:
+ case FR_RADIUS_CODE_PROTOCOL_ERROR:
break;
/*
}
break;
+ case FR_RADIUS_CODE_ACCESS_ACCEPT:
case FR_RADIUS_CODE_ACCESS_REJECT:
case FR_RADIUS_CODE_ACCESS_CHALLENGE:
case FR_RADIUS_CODE_ACCOUNTING_RESPONSE:
- case FR_RADIUS_CODE_COA_ACK:
- case FR_RADIUS_CODE_COA_NAK:
case FR_RADIUS_CODE_DISCONNECT_ACK:
case FR_RADIUS_CODE_DISCONNECT_NAK:
+ case FR_RADIUS_CODE_COA_ACK:
+ case FR_RADIUS_CODE_COA_NAK:
case FR_RADIUS_CODE_PROTOCOL_ERROR:
- case FR_RADIUS_CODE_ACCESS_ACCEPT:
if (!packet_ctx->request_authenticator) {
fr_strerror_const("Cannot encode response without request");
return -1;
case FR_RADIUS_CODE_ACCESS_REJECT:
case FR_RADIUS_CODE_ACCESS_CHALLENGE:
case FR_RADIUS_CODE_STATUS_SERVER:
+ case FR_RADIUS_CODE_PROTOCOL_ERROR:
FR_DBUFF_IN_BYTES_RETURN(&work_dbuff, FR_MESSAGE_AUTHENTICATOR, 0x12,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00);
packet_ctx->seen_message_authenticator = true;
+ break;
+
+ default:
+ break;
}
/*
*
* Otherwise the reply code must be associated with the request code we sent.
*/
- if ((code != FR_RADIUS_CODE_PROTOCOL_ERROR) && (decode_ctx->request_code != FR_RADIUS_CODE_STATUS_SERVER) &&
- (allowed_replies[code] != decode_ctx->request_code)) {
+ if ((allowed_replies[code] != decode_ctx->request_code) &&
+ (code != FR_RADIUS_CODE_PROTOCOL_ERROR) &&
+ (decode_ctx->request_code != FR_RADIUS_CODE_STATUS_SERVER)) {
fr_strerror_printf("%s packet received invalid reply code %s",
fr_radius_packet_name[decode_ctx->request_code], fr_radius_packet_name[code]);
return -DECODE_FAIL_UNKNOWN_PACKET_CODE;