module-failure-message in exec module

Phil Mayers p.mayers at
Fri Jun 7 15:37:42 CEST 2013

On 07/06/13 13:15, Franks Andy (RLZ) IT Systems Engineer wrote:
> Hi,
>    Ok so I've played about and can get a decent failure reply from a
> script based solution.
> Moving on to those NAS clients that actually do PEAP/MSCHAP .. I would
> like to get a response when a failure occurs from them, but it seems
> that Failure-Response-Message from the mschap isn't filled out. I've
> done a test like :
> Authenticate {
> ..
>          Auth-Type MS-CHAP {
>                  mschap
>   	if (ok) {
>      	#
>    	}
>    	else {
>       	if (Module-Failure-Message) {
> 	     	update reply {
> 			reply-message += "Failed NTLM auth"
> 		}
> 		reject
>      		}
>    	}
> But the section never gets parsed - it goes straight to Post_auth reject
> based on the mschap module itself returning code 1.

Yes. As I said, you'll need to override the default module return 
actions, which are "return immediately" in the "authenticate" section 
for everything other than fail/invalid/noop/updated. Something like:

authenticate {
   Auth-Type MS-CHAP {
     mschap {
       reject = 1
       ok = 1
     if (!ok) {

> But Module-Failure-Message is empty;

As has been suggested, be careful about which post-auth is running 
(inner or outer). FreeRADIUS < 2.2.0 doesn't run post-auth reject for 
PEAP inner tunnel.

> ++? if (Module-Failure-Message)
> ? Evaluating (Module-Failure-Message) -> FALSE
> ++? if (Module-Failure-Message) -> FALSE
> Am I doing something wrong?
> I also wondered if I could do something like use the mschap module with
> a custom script, returning NT_KEY or a failure string, but then I've no
> way to return the failure string because I assume the mschap module
> doesn't let you populate variables based on the output like exec does -
> there's no way of specifying output or input pairs for example.
> I could ditch the mschap module completely, but then am not sure how I
> would get all the mschap variables into a script and translate the
> NT_KEY back. It seems a bit OTT just to get a failure response written
> to the linelog/sql.

Now I'm confused.

If you're doing mschap, just run the mschap module. It *will* populate 
the Module-Failure-Message attribute if ntlm_auth fails - you don't need 
to handle that yourself.

If you're doing exec (i.e. checking PAP via ntlm_auth) then you don't 
need to return NT_KEY.

If you're trying to do mschap via exec, you're doing it wrong. Don't do 

Most likely your problem is that you're getting confused by the 
inner-tunnel post-auth reject not running for PEAP in 2.1.x.

More information about the Freeradius-Users mailing list