On 11/11/2016 13:42, Alan DeKok wrote:
How do you know that a particular string is a host name,*before* it's parsed?
You don't. That is: I don't think the *parser* needs to decide whether a string is a hostname or not! A concrete example: Framed-IP-Address := foo.example.com # let's say this is DISALLOWED. Framed-IP-Address := "foo.example.com" # allowed. RHS has type 'string'. The question is then not one of parsing, but of assignment semantics. If the LHS has type "ipaddr", and the RHS has type "string", then the string is converted into an ipaddr via hostname resolution. This is unconditional: you don't have to inspect the string to decide whether it looks like a hostname or not. I personally don't mind the implicit cast from string to ipaddr (*), but you could instead require it to be explicit: Framed-IP-Address := <ipaddr>"foo.example.com" If the RHS is a constant string literal then this could still be resolved at parse/compile time. But the potential is also there to do late resolution: e.g. Framed-IP-Address := <ipaddr>"%{User-Name}.example.com" Regards, Brian. (*) It's not really any different to the current FR behaviour, which allows these implicitly: Framed-IP-Address := foo.example.com # treated as hostname, resolved to IP Reply-Message := foo.example.com # treated as string Framed-IP-Address += 1.2.3.4 # IP Reply-Message += 1.2.3.4 # string