"authorize" etc. in v3.1

Alan DeKok aland at deployingradius.com
Tue Mar 10 16:19:25 CET 2015

On Mar 9, 2015, at 7:04 PM, Matthew Newton <mcn4 at leicester.ac.uk> wrote:
>> recv foo — run this section when receiving a packet “foo”.
>> process foo - run this section to process a packet “foo”
>> send foo - run this section before sending a packet “foo”
> The coder part of me says "yes".
> The sysadmin part says "when I was learning RADIUS, it was hard
> enough to work out what was happening, let alone know what each
> packet did on the network, so no”.

  Hmm… I was thinking it would help.

Q: What does the server do when it receives an Access-Request packet?

A: process it through a “receive Access-Request” section.

  That seems pretty simple.  Sure, it means people have to know what Access-Requests are, but… if you don’t know that, you won’t get very far with RADIUS.

> The idea is great, but I'm not sure that the naming will be any
> more helpful for those not well versed in RADIUS (and it's obvious
> from the list that there are many people in this situation; that's
> just a fact of life, many probable only run the RADIUS server as a
> part time thing).

  Sure.  It’s a balance, right.  Simple enough that the beginner can understand it, and complicated enough that the expert can get things done.

  Right now the complexity is a source of frustration and confusion.  The code to implement it is awkward.  It’s hard to reason about what each section does.  The sections aren’t really handled consistently.

> However, it _might_ be very powerful and work with some sort of
> templating or aliasing feature. This is completely off the top of
> my head, but maybe something like

  Yes, that would be the idea.  The templating would allow the *current* configuration to work unchanged.  But would also allow for *updated* configurations to work better.  And it would make the code much simpler.

> This would also mean that a more advanced admin could quite
> happily write
>  send Access-Challenge {
>    ...
>  }


> which doesn't appear at all in the default configuration, but
> could be useful in some circumstances.
> You could also have for example:
>  sent Access-Accept {
>  }
> which gets called only after the packet has actually been sent,
> for final logging. Again, probably not in the default config (or
> aliased as "log-successful-authentication" maybe).

  Hmm… maybe.  I’d prefer to avoid that for a host of reasons.

>> process Access-Request == authenticate (mostly)
> I'm not sure that the current config is helpful. It's quite
> confusing to work out which sections have sub-sections called
> automatically, or at least it was when still on the learning
> curve. So


> Two ideas come to mind. The first is adding a parameter to the
> section name, such as (in current config terminology):
>  authenticate PAP {
>    pap
>  }

  Sure, that could work.

> The other, slightly less clear way is pull the hidden switch out
> into the open:

  That I find a bit more confusing.

> No stones :). Just don't think exposing RADIUS packets directly to
> end users at first sight is the most helpful thing. Yes, they'll
> hopefully learn them in time, so giving the tools to do this is
> good, but terms such as "pre-authentication" or
> "authenticate-user" are easier to begin with.
> I think some of the above could also be a bit confusing to the
> advanced admin, such as:
>  send Access-Accept
>  recv Access-Accept
> are two _totally_ different things on opposide sides of the server
> (one as a server, the other as a client), yet look surprisingly
> similar. I'm not sure what else to suggest though.

  Me either.  They’re similar, but *named consistently*.  If you get confused as to what’s going on, just look at the name.

  Alan DeKok.

More information about the Freeradius-Devel mailing list