Jakob Hirsch wrote:
I may be missing something here, but aren't unset attributes just expanded to an empty string?
Yes.
If so, what is difference between the outcome of %{%{Unset-Attribute}:-""} and a simple %{Unset-Attribute}
Nothing. 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: %{module:-foo:-bar} Is "-foo" a parameter to "module"? This is not ambiguous: %{%{module:-foo}:-bar} 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.