Alan DeKok aland at
Wed May 15 15:27:55 CEST 2013

Jakob Hirsch wrote:
> I may be missing something here, but aren't unset attributes just
> expanded to an empty string?


> If so, what is difference between the
> outcome of
>   %{%{Unset-Attribute}:-""}
> and a simple
>   %{Unset-Attribute}


  But %{%{Foo-Bar}:-} is redundant.  It says "If there's no Foo-Bar,
then use an empty string.  But if there's no Foo-Bar, the result of a
%{} expansion *is* an empty string.

> Oh, and btw: As the :- syntax is copied from Unix shells, shouldn't it
> just be "%{Attribute-Name:-attribute not set}", i.e. without additional
> "%{}"? In shells it's "${VARNAME:-VARNAME is empty}", not "${${VAR}:-VAR
> is empty}" (except if you have stored a variable name VAR, of course).
> Using :- with a static string doesn't make much sense, so the extra %{}
> is kind of redundant. But I guess it's too late for such a change now
> (maybe not for 3.0).

  The change was made deliberately, and to avoid bugs.  In shell,
variable names can't have colons.  In FreeRADIUS modules, they can.

  e.g. this is ambiguous:


  Is "-foo" a parameter to "module"?

  This is not ambiguous:


  As a result, this behavior will remain in v3.  Anyone wanting to see
more cases of what works and what doesn't can read src/tests/xlat.txt

  Alan DeKok.

More information about the Freeradius-Devel mailing list