Zmieniłem na ":=" - komunikat błędu jest ten sam.

a zmień na ':='
zauważ że po ..._query masz znak równości i otwierasz cytat przed SELECT
#v+
authorize_reply_query = \
       "SELECT n.id AS id, upper
...
#v-
gdzie przed tym nieszczęsnym OPem zamykasz cytat znakiem " i radius myśli, że jest to koniec query. zresztą w logu ładnie ci to się w tym miejscu kończyło:
"
[sql_dhcp_ip_assign] User found in radcheck table
[sql_dhcp_ip_assign]    expand: SELECT n.id AS id, upper(m.mac) AS UserName, 'Framed-IP-Address' Attribute, inet_ntoa(n.ipaddr) AS Value, ':=' AS op                 FROM nodes n                 JOIN macs m ON (m.nodeid = n.id)                 WHERE                 upper(m.mac) = '%{User-Name}'          UNION   SELECT  n.id id,  upper(m.mac) UserName, 'Mikrotik-Rate-Limit' Attribute, '1024k/1024k' Value,  -> SELECT n.id AS id, upper(m.mac) AS UserName, 'Framed-IP-Address' Attribute, inet_ntoa(n.ipaddr) AS Value, ':=' AS op                 FROM nodes n                JOIN macs m ON (m.nodeid = n.id)                 WHERE                upper(m.mac) = '00:02:72:7D:00:80'          UNION   SELECT  n.id id,  upper(m.mac) UserName, 'Mikrotik-Rate-Limit' Attribute, '1024k/1024k' Value,

rlm_sql_mysql: query:  SELECT ...."

widzisz, że po "Value," kończy się zapytanie?
--
Pozdrawiam
Marcin / nicraM