]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
use new RADIUS API
authorAlan T. DeKok <aland@freeradius.org>
Thu, 26 Oct 2017 17:24:00 +0000 (13:24 -0400)
committerAlan T. DeKok <aland@freeradius.org>
Thu, 26 Oct 2017 22:48:31 +0000 (18:48 -0400)
src/modules/proto_radius/proto_radius.c

index bc9657a3e0dc0d22b948ef551530b961867f0ff5..88da59be3b6a4794f5cd302bf4ecac42e7170b5d 100644 (file)
@@ -205,7 +205,7 @@ static int mod_decode(void const *instance, REQUEST *request, uint8_t *const dat
 
 static ssize_t mod_encode(void const *instance, REQUEST *request, uint8_t *buffer, size_t buffer_len)
 {
-       size_t len;
+       ssize_t data_len;
 
        proto_radius_t const *inst = talloc_get_type_abort_const(instance, proto_radius_t);
        RADCLIENT *client;
@@ -233,27 +233,26 @@ static ssize_t mod_encode(void const *instance, REQUEST *request, uint8_t *buffe
        }
 #endif
 
-       if (fr_radius_packet_encode(request->reply, request->packet, client->secret) < 0) {
+       data_len = fr_radius_encode(buffer, buffer_len, request->packet->data,
+                                   client->secret, talloc_array_length(client->secret) - 1,
+                                   request->reply->code, request->reply->id, request->reply->vps);
+       if (data_len < 0) {
                RDEBUG("Failed encoding RADIUS reply: %s", fr_strerror());
                return -1;
        }
 
-       if (fr_radius_packet_sign(request->reply, request->packet, client->secret) < 0) {
+       if (fr_radius_sign(buffer, request->packet->data,
+                          (uint8_t const *) client->secret, talloc_array_length(client->secret) - 1) < 0) {
                RDEBUG("Failed signing RADIUS reply: %s", fr_strerror());
                return -1;
        }
 
-       len = request->reply->data_len;
-       if (buffer_len < len) len = buffer_len;
-
-       memcpy(buffer, request->reply->data, len);
-
        if (DEBUG_ENABLED3) {
                RDEBUG("proto_radius encode packet");
-               fr_radius_print_hex(fr_log_fp, buffer, len);
+               fr_radius_print_hex(fr_log_fp, buffer, data_len);
        }
 
-       return len;
+       return data_len;
 }
 
 static void mod_process_set(void const *instance, REQUEST *request)