FR 3.0.12 exec_perl: ERROR: Failed to create pair &request:EAP-Message

Alan DeKok aland at
Sun Jun 4 15:43:10 CEST 2017

On Jun 3, 2017, at 8:34 PM, Thor Spruyt <thor.spruyt at> wrote:
> Unfortunately, also with v3.0.14 the problem seems to be there, although the error message is slightly different ...

  I don't think you're running 3.0.14.

> (7961) Received Access-Request Id 208 ... length 779
> (7961)   EAP-Message = 0x0205024819800000023e1603030206100002020200180326c978bbd15ef07089d5ab8bc9d6f0ef586dded8142e2b765df12ed496d949de19467445830a97bedaa533a0b04b8e3acfb548c5c21ed685dd318d1ecde553b071b540f84de2b2d3d4abd383c50a24d97990bdd74bde45250a2c314cf599ee42
> (7961)   authorize {
> (7961)     [preprocess] = ok
> (7961) exec_perl: ERROR: Failed to create pair - Length of Hex String is not even, got 1021 bytes
> (7961) exec_perl: ERROR:     &request:EAP-Message = $RAD_REQUEST{'EAP-Message'} -> 

  That message is when it's trying to convert the Perl variable to a FreeRADIUS attribute.

  What's missing is the initial message which shows it converting the FreeRADIUS attribute to a Perl variable:

			len = vp_prints_value(buffer, sizeof(buffer), vp, 0);
			RDEBUG("$%s{'%s'} = &%s:%s -> '%s'", hash_name, vp->da->name,

  i.e. there should be a debug message saying:

	$RAD_REQUEST{'EAP-Message'} = &request:EAP-Message -> 0x....

> What I find strange is that the request packet dump says there's only one EAP-Message attribute in the request (I assume only the first one is printed) while rlm_perl tries to put 510 bytes into $RAD_REQUEST{'EAP-Message'}/
> Note the debug output where it says "got 1021 bytes" => I guess this is 1021 characters instead of bytes ?

  It's bytes.  The printed string isn't being terminated for some reason.

> If I remove the "concat" from the EAP-Message attribute in the dictionary, then it works!

  Yes, because the input EAP-Message becomes shorter.

  I really think you're not running 3.0.14.

  Alan DeKok.

More information about the Freeradius-Users mailing list