Client-IP-Address в radius.log
У FreeRADIUS есть такой врожденный атавизм. В radius.log пишутся все успешные и неуспешные попытки авторизации. И в каждой строке пишется нечто типа расшифровки
(from client short-name-client port 0)
Так вот этот short-name-client
не несёт никакой полезной информации. radacct раскладывает детальную информацию из пакетов в каталоги по IP-адресам, с которых был прислан пакет. В radius.log название, в radacct – IP-адрес источника пакета. Как же тяжело потом копаться в логах, нужно помнить всех клиентов.
Можно, конечно, давать short-name в виде IP-адреса. Но что делать, если клиенты в clients.conf вообще описаны в виде сети? Ведь формат radius.log не настраивается никак…
Сделаем вот такой патчик:
--- src/main/auth.c 2012-09-10 14:51:34.000000000 +0300
+++ src/main/auth.c 2014-08-14 17:44:39.000000000 +0300
@@ -41,6 +41,7 @@
VALUE_PAIR *pair;
int port = 0;
const char *tls = "";
+ char client_ip_address[128];
if ((cli = pairfind(request->packet->vps, PW_CALLING_STATION_ID)) == NULL)
do_cli = 0;
@@ -55,8 +56,12 @@
}
}
+ inet_ntop(request->packet->src_ipaddr.af,
+ &request->packet->src_ipaddr.ipaddr,
+ client_ip_address, sizeof(client_ip_address));
+
snprintf(buf, buflen, "from client %.128s port %u%s%.128s%s",
- request->client->shortname, port,
+ client_ip_address, port,
(do_cli ? " cli " : ""), (do_cli ? (char *)cli->vp_strvalue : ""),
tls);
Патчик подходит для версий FreeRADIUS 2.2.0-2.2.5. Пропатченая версия фрирадиуса пишет в radius.log вместо названия клиента IP-адрес источника пакета. Выглядит примерно вот так:
(from client 95.138.219.26 port 0)