]> git.ipfire.org Git - thirdparty/freeradius-server.git/commitdiff
Autoload proto_radius_status attributes
authorArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 19 May 2018 14:04:46 +0000 (20:04 +0600)
committerArran Cudbard-Bell <a.cudbardb@freeradius.org>
Sat, 19 May 2018 14:04:46 +0000 (20:04 +0600)
src/modules/proto_radius/proto_radius_status.c

index 6423ab33a7a0c7c8416216e6f2f7800600cae234..6b3d8d2e223c565bfc853996c6d08989f0689ac2 100644 (file)
 #include <freeradius-devel/dict.h>
 #include <freeradius-devel/rad_assert.h>
 
+static fr_dict_t const *dict_freeradius;
+
+extern fr_dict_autoload_t proto_radius_status_dict[];
+fr_dict_autoload_t proto_radius_status_dict[] = {
+       { .out = &dict_freeradius, .proto = "freeradius" },
+       { NULL }
+};
+
+static fr_dict_attr_t const *attr_packet_type;
+
+extern fr_dict_attr_autoload_t proto_radius_status_dict_attr[];
+fr_dict_attr_autoload_t proto_radius_status_dict_attr[] = {
+       { .out = &attr_packet_type, .name = "Packet-Type", .type = FR_TYPE_UINT32, .dict = &dict_freeradius },
+       { NULL }
+};
+
 static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action)
 {
        rlm_rcode_t rcode;
        CONF_SECTION *unlang;
        fr_dict_enum_t const *dv;
-       fr_dict_attr_t const *da = NULL;
        VALUE_PAIR *vp;
 
        REQUEST_VERIFY(request);
@@ -97,13 +112,10 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action)
                /*
                 *      Allow for over-ride of reply code.
                 */
-               vp = fr_pair_find_by_num(request->reply->vps, 0, FR_PACKET_TYPE, TAG_ANY);
+               vp = fr_pair_find_by_da(request->reply->vps, attr_packet_type, TAG_ANY);
                if (vp) request->reply->code = vp->vp_uint32;
 
-               if (!da) da = fr_dict_attr_by_num(NULL, 0, FR_PACKET_TYPE);
-               rad_assert(da != NULL);
-
-               dv = fr_dict_enum_by_value(da, fr_box_uint32(request->reply->code));
+               dv = fr_dict_enum_by_value(attr_packet_type, fr_box_uint32(request->reply->code));
                unlang = NULL;
                if (dv) unlang = cf_section_find(request->server_cs, "send", dv->alias);
 
@@ -139,15 +151,12 @@ static fr_io_final_t mod_process(REQUEST *request, fr_io_action_t action)
                         *      the NAK section.
                         */
                        if (request->reply->code != FR_CODE_ACCESS_REJECT) {
-                               if (!da) da = fr_dict_attr_by_num(NULL, 0, FR_PACKET_TYPE);
-                               rad_assert(da != NULL);
-
-                               dv = fr_dict_enum_by_value(da, fr_box_uint32(request->reply->code));
-                               RWDEBUG("Failed running 'send %s', trying 'send Access-Reject'.", dv->alias);
+                               dv = fr_dict_enum_by_value(attr_packet_type, fr_box_uint32(request->reply->code));
+                               RWDEBUG("Failed running 'send %s', trying 'send Access-Reject'", dv->alias);
 
                                request->reply->code = FR_CODE_ACCESS_REJECT;
 
-                               dv = fr_dict_enum_by_value(da, fr_box_uint32(request->reply->code));
+                               dv = fr_dict_enum_by_value(attr_packet_type, fr_box_uint32(request->reply->code));
                                unlang = NULL;
                                if (!dv) goto send_reply;