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)

Скачать patch-2.2.x-auth.c


Комментарии

Оставить комментарий

Ответ на Client-IP-Address в radius.log