]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
remove Client-IP-Address, and replace with Packet-Src-IP-Address
authorAlan T. DeKok <aland@freeradius.org>
Fri, 25 Aug 2023 14:51:09 +0000 (10:51 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Fri, 25 Aug 2023 14:51:09 +0000 (10:51 -0400)
this is made more problematic by the fact that DHCPv4 defines its
own Client-IP-Address, which is something different.

And there are also FreeRADIUS-Client-IP-Address for dynamic clients,
and FreeRADIUS-Stats-Client-IP-Address for statistics.  Both of
those should be replaced with better names, and nested TLVs

doc/antora/modules/raddb/pages/mods-available/redis_ippool.adoc
doc/antora/modules/tutorials/pages/variables.adoc
raddb/mods-available/redis_ippool
share/dictionary/freeradius/dictionary.freeradius.internal
src/lib/server/paircmp.c
src/lib/server/tmpl_eval.c
src/modules/rlm_redis_ippool/rlm_redis_ippool.c
src/tests/keywords/xlat-virtual-attr
src/tests/unit/xlat/base.txt

index 2f3237d3e32e35714f9e0231dfe6df7b78722b31..888c3b262428a16a9c820ccd8960b4cce699ce0e 100644 (file)
@@ -147,7 +147,7 @@ redis_ippool {
        owner = &Client-Hardware-Address
 #      owner = "%{%{Client-Identifier}:-%{Client-Hardware-Address}}"
 #      owner = "%{Vendor-Specific.ADSL-Forum.Agent-Circuit-ID} %{Calling-Station-Id}"
-       requested_address = "%{%{Requested-IP-Address}:-%{Client-IP-Address}}"
+       requested_address = "%{%{Requested-IP-Address}:-%{Packet-Src-IP-Address}}"
 #      ipv4_integer = yes
        allocated_address_attr = &reply.Your-IP-Address
        range_attr = &reply.IP-Pool.Range
@@ -158,7 +158,7 @@ redis_ippool {
                pool {
                        start = 0
                        min = 0
-#                      max =
+#                      max = 1
                        spare = 1
                        uses = 0
                        lifetime = 0
index fe2f64daa494f95034e209439b95945693195683..25e97bd7e981135c93b53114bbdf9d98606c5cad 100644 (file)
@@ -39,7 +39,7 @@ has a configuration entry named "filename", which by default has the
 following value:
 
 ----------------------------------------------------------------
-filename = ${radacctdir}/%{Client-IP-Address}/detail-%Y%m%d
+filename = ${radacctdir}/%{Packet-Src-IP-Address}/detail-%Y%m%d
 ----------------------------------------------------------------
 
 The configuration entry is composed of two kinds of variable expansion.
index 5f55236e75b30d9acddf58b1f0a331f6cf0b266b..c69ba8b90161a7a24cf651d69621bbf5b158b20f 100644 (file)
@@ -102,7 +102,7 @@ redis_ippool {
        #
        #  requested_address:: The IP address being renewed or released.
        #
-       requested_address = "%{%{Requested-IP-Address}:-%{Client-IP-Address}}"
+       requested_address = "%{%{Requested-IP-Address}:-%{Packet-Src-IP-Address}}"
 
        #
        #  ipv4_integer:: Whether IPv4 addresses should be cast to integers, for renew operations.
index 038d079a3fe97ce28968ebca2903d2c383f6c207..e7997b3359458b9ff3b3db6b9044ad971f3d1162 100644 (file)
@@ -155,7 +155,7 @@ ATTRIBUTE   Realm                                   1017    string
 
 ATTRIBUTE      Acct-Session-Start-Time                 1019    date
 ATTRIBUTE      Acct-Unique-Session-Id                  1020    string
-ATTRIBUTE      Client-IP-Address                       1021    ipaddr virtual
+# 1021 was Client-IP-Address.  Just use Packet-Src-IP-Address
 ATTRIBUTE      LDAP-UserDN                             1022    string
 ATTRIBUTE      SQL-User-Name                           1023    string
 
index 15818870fe3daef8df62077af833f34f1e66b3e1..74c90496e3d84280faa6a1a1d448dfc4ce4ae79d 100644 (file)
@@ -61,7 +61,6 @@ fr_dict_autoload_t paircmp_dict[] = {
 };
 
 static fr_dict_attr_t const *attr_auth_type;
-static fr_dict_attr_t const *attr_client_ip_address;
 static fr_dict_attr_t const *attr_crypt_password;
 static fr_dict_attr_t const *attr_packet_dst_ip_address;
 static fr_dict_attr_t const *attr_packet_dst_ipv6_address;
@@ -79,7 +78,6 @@ static fr_dict_attr_t const *attr_virtual_server;
 
 extern fr_dict_attr_autoload_t paircmp_dict_attr[];
 fr_dict_attr_autoload_t paircmp_dict_attr[] = {
-       { .out = &attr_client_ip_address, .name = "Client-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_freeradius },
        { .out = &attr_crypt_password, .name = "Password.Crypt", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
        { .out = &attr_packet_dst_ip_address, .name = "Packet-Dst-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_freeradius },
        { .out = &attr_packet_dst_ipv6_address, .name = "Packet-Dst-IPv6-Address", .type = FR_TYPE_IPV6_ADDR, .dict = &dict_freeradius },
@@ -815,7 +813,6 @@ int paircmp_init(void)
 
        paircmp_register(attr_packet_type, NULL, true, packet_cmp, NULL);
 
-       paircmp_register(attr_client_ip_address, NULL, true, generic_cmp, NULL);
        paircmp_register(attr_packet_src_ip_address, NULL, true, generic_cmp, NULL);
        paircmp_register(attr_packet_dst_ip_address, NULL, true, generic_cmp, NULL);
        paircmp_register(attr_packet_src_port, NULL, true, generic_cmp, NULL);
@@ -832,7 +829,6 @@ void paircmp_free(void)
 {
        paircmp_unregister(attr_packet_type, packet_cmp);
 
-       paircmp_unregister(attr_client_ip_address, generic_cmp);
        paircmp_unregister(attr_packet_src_ip_address, generic_cmp);
        paircmp_unregister(attr_packet_dst_ip_address, generic_cmp);
        paircmp_unregister(attr_packet_src_port, generic_cmp);
index 59e0c4c794dd867118e17218934e7d63239d89fa..6aa6044093f23c8c3b810591364e37ca810cb57d 100644 (file)
@@ -51,7 +51,6 @@ fr_dict_autoload_t tmpl_dict[] = {
        { NULL }
 };
 
-static fr_dict_attr_t const *attr_client_ip_address;
 static fr_dict_attr_t const *attr_client_shortname;
 static fr_dict_attr_t const *attr_packet_dst_ip_address;
 static fr_dict_attr_t const *attr_packet_dst_ipv6_address;
@@ -71,7 +70,6 @@ extern fr_dict_attr_t const *tmpl_attr_unspec;
 fr_dict_attr_t const *tmpl_attr_unspec;
 
 static fr_dict_attr_autoload_t tmpl_dict_attr[] = {
-       { .out = &attr_client_ip_address, .name = "Client-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_freeradius },
        { .out = &attr_client_shortname, .name = "Client-Shortname", .type = FR_TYPE_STRING, .dict = &dict_freeradius },
        { .out = &attr_module_return_code, .name = "Module-Return-Code", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
        { .out = &attr_packet_dst_ip_address, .name = "Packet-Dst-IP-Address", .type = FR_TYPE_IPV4_ADDR, .dict = &dict_freeradius },
@@ -1167,17 +1165,7 @@ static int tmpl_eval_pair_virtual(TALLOC_CTX *ctx, fr_value_box_list_t *out,
                MEM(value = fr_value_box_alloc_null(ctx));
                fr_value_box_memdup(ctx, value, tmpl_attr_tail_da(vpt), packet->vector, sizeof(packet->vector), true);
 
-       } else if (tmpl_attr_tail_da(vpt) == attr_client_ip_address) {
-               fr_client_t *client = client_from_request(request);
-               if (client) {
-                       MEM(value = fr_value_box_alloc_null(ctx));
-                       fr_value_box_ipaddr(value, NULL, &client->ipaddr, false);       /* Enum might not match type */
-                       goto done;
-               }
-               goto src_ip_address;
-
        } else if (tmpl_attr_tail_da(vpt) == attr_packet_src_ip_address) {
-       src_ip_address:
                if (!fr_socket_is_inet(packet->socket.proto) ||
                    (packet->socket.inet.src_ipaddr.af != AF_INET)) return 0;
 
index 69772a37df8e52387519c86e38143da700a281d6..c54875d4f97eae912ad0a12ff1c7e323b97cb7e8 100644 (file)
@@ -191,7 +191,7 @@ static const call_env_t redis_ippool_alloc_call_env[] = {
        { FR_CALL_ENV_OFFSET("lease_time", FR_TYPE_UINT32, redis_ippool_alloc_call_env_t, lease_time,
                             NULL, T_INVALID, true, false, false) },
        { FR_CALL_ENV_OFFSET("requested_address", FR_TYPE_STRING, redis_ippool_alloc_call_env_t, requested_address,
-                            "%{%{Requested-IP-Address}:-%{Client-IP-Address}}", T_DOUBLE_QUOTED_STRING,
+                            "%{%{Requested-IP-Address}:-%{Packet-Src-IP-Address}}", T_DOUBLE_QUOTED_STRING,
                             true, true, false) },
        { FR_CALL_ENV_TMPL_ONLY_OFFSET("allocated_address_attr", FR_TYPE_ATTRIBUTE, redis_ippool_alloc_call_env_t,
                                       allocated_address_attr, NULL, T_INVALID, true ) },
@@ -212,7 +212,7 @@ static const call_env_t redis_ippool_update_call_env[] = {
        { FR_CALL_ENV_OFFSET("lease_time", FR_TYPE_UINT32, redis_ippool_update_call_env_t, lease_time,
                             NULL, T_INVALID, true, false, false) },
        { FR_CALL_ENV_OFFSET("requested_address", FR_TYPE_STRING, redis_ippool_update_call_env_t, requested_address,
-                            "%{%{Requested-IP-Address}:-%{Client-IP-Address}}", T_DOUBLE_QUOTED_STRING,
+                            "%{%{Requested-IP-Address}:-%{Packet-Src-IP-Address}}", T_DOUBLE_QUOTED_STRING,
                             true, true, false) },
        { FR_CALL_ENV_TMPL_ONLY_OFFSET("allocated_address_attr", FR_TYPE_ATTRIBUTE, redis_ippool_update_call_env_t,
                                       allocated_address_attr, NULL, T_INVALID, true ) },
@@ -231,7 +231,7 @@ static const call_env_t redis_ippool_release_call_env[] = {
        { FR_CALL_ENV_OFFSET("gateway", FR_TYPE_STRING, redis_ippool_release_call_env_t, gateway_id,
                             "", T_SINGLE_QUOTED_STRING, false, true, true ) },
        { FR_CALL_ENV_OFFSET("requested_address", FR_TYPE_STRING, redis_ippool_release_call_env_t, requested_address,
-                            "%{%{Requested-IP-Address}:-%{Client-IP-Address}}", T_DOUBLE_QUOTED_STRING,
+                            "%{%{Requested-IP-Address}:-%{Packet-Src-IP-Address}}", T_DOUBLE_QUOTED_STRING,
                             true, true, false) },
        CALL_ENV_TERMINATOR
 };
index f75693c700af80f20c9889a11954d89fe2955e04..71837142d6ec4ca9052a929d87413d0208c6b526 100644 (file)
@@ -26,10 +26,6 @@ if (!("%{Packet-Authentication-Vector}" == 0x00000000000000000000000000000000))
        test_fail
 }
 
-if (!("%{Client-IP-Address}" == 127.0.0.1)) {
-       test_fail
-}
-
 if (!("%{Packet-Src-IP-Address}" == 127.0.0.1)) {
        test_fail
 }
index 0a4c100c4856cb7081ea7ffa18a3440a1fd8dff5..7dabd4d7cac27bde4ee8b3bd646bcd9794dbdec9 100644 (file)
@@ -145,8 +145,8 @@ xlat \"%t\tfoo\"
 match \"%t\tfoo\"
 
 allow-unresolved yes
-xlat \"%t\t%{Client-IP-Address}\"
-match \"%t\t%{Client-IP-Address}\"
+xlat \"%t\t%{Packet-Src-IP-Address}\"
+match \"%t\t%{Packet-Src-IP-Address}\"
 allow-unresolved no
 
 xlat \"foo %{test:foo}\"