/*
* Print out all the pairs we have so far
*/
- log_request_pair_list(L_DBG_LVL_2, request, cert_vps, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, cert_vps, NULL);
fr_cursor_merge(&list, &cursor);
fr_pair_list_init(&cert_vps);
}
ptr[3] = CHBIND_NSID_RADIUS;
RDEBUG2("Sending chbind response: code %i", (int )(ptr[0]));
- log_request_pair_list(L_DBG_LVL_1, request, request->reply_pairs, NULL);
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
/* Encode the chbind attributes into the response */
ptr += 4;
RDEBUG2("Encoding attributes");
- log_request_pair_list(L_DBG_LVL_2, request, head, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, head, NULL);
eap_session->this_round->request->type.num = eap_aka_sim_session->type;
eap_session->this_round->request->id = eap_aka_sim_session->id++ & 0xff;
aka_vps = fr_cursor_next(&cursor);
if (aka_vps && RDEBUG_ENABLED2) {
RDEBUG2("Decoded attributes");
- log_request_pair_list(L_DBG_LVL_2, request, aka_vps, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, aka_vps, NULL);
}
*subtype_vp = fr_pair_find_by_da(&aka_vps, attr_eap_aka_sim_subtype);
rlm_rcode_t final;
RDEBUG("Virtual server %s received request", cf_section_name2(request->server_cs));
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, NULL);
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
username = fr_pair_find_by_num(&request->request_pairs, 0, FR_STRIPPED_USER_NAME);
if (!username) username = fr_pair_find_by_num(&request->request_pairs, 0, FR_USER_NAME);
packet->data_len);
if (received) {
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, NULL);
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
} else {
- log_request_proto_pair_list(L_DBG_LVL_1, request, request->request_pairs, NULL);
+ log_request_proto_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
}
}
#include <pthread.h>
static _Thread_local TALLOC_CTX *fr_vlog_request_pool;
+static _Thread_local fr_sbuff_t *fr_log_request_oid_buff;
/** Syslog facility table
*
}
}
+/** Cleanup the memory pool used by the OID sbuff
+ *
+ */
+static void _fr_log_request_oid_buff_free(void *arg)
+{
+ talloc_free(arg);
+}
+
+/** Allocate an extensible sbuff for printing OID strings
+ *
+ */
+static inline CC_HINT(always_inline) fr_sbuff_t *log_request_oid_buff(void)
+{
+ fr_sbuff_t *sbuff;
+ fr_sbuff_uctx_talloc_t *tctx;
+
+ sbuff = fr_log_request_oid_buff;
+ if (unlikely(!sbuff)) {
+ sbuff = talloc(NULL, fr_sbuff_t);
+ if (!sbuff) {
+ fr_perror("Failed allocating memory for fr_log_request_oid_buff");
+ return NULL;
+ }
+ tctx = talloc(sbuff, fr_sbuff_uctx_talloc_t);
+ if (!tctx) {
+ fr_perror("Failed allocating memory for fr_sbuff_uctx_talloc_t");
+ talloc_free(sbuff);
+ return NULL;
+ }
+
+ fr_sbuff_init_talloc(sbuff, sbuff, tctx, 1024, 8192);
+
+ fr_thread_local_set_destructor(fr_log_request_oid_buff, _fr_log_request_oid_buff_free, sbuff);
+ } else {
+ fr_sbuff_set(sbuff, fr_sbuff_start(sbuff)); /* Reset position */
+ }
+
+ return sbuff;
+}
+
/** Print a list of fr_pair_ts.
*
* @param[in] lvl Debug lvl (1-4).
* @param[in] request to read logging params from.
+ * @param[in] parent of vp to print, may be NULL.
* @param[in] vp to print.
* @param[in] prefix (optional).
*/
-void log_request_pair_list(fr_log_lvl_t lvl, request_t *request, fr_pair_t *vp, char const *prefix)
+void log_request_pair_list(fr_log_lvl_t lvl, request_t *request,
+ fr_pair_t const *parent, fr_pair_t const *vp, char const *prefix)
{
- fr_cursor_t cursor;
+ fr_cursor_t cursor;
+ fr_pair_t *m_vp;
+ fr_dict_attr_t const *parent_da = NULL;
- if (!vp || !request || !request->log.dst) return;
+ if (!request->log.dst) return;
if (!log_rdebug_enabled(lvl, request)) return;
+ memcpy(&m_vp, &vp, sizeof(m_vp));
+
RINDENT();
- for (vp = fr_cursor_init(&cursor, &vp);
+ for (vp = fr_cursor_init(&cursor, &m_vp);
vp;
vp = fr_cursor_next(&cursor)) {
VP_VERIFY(vp);
/*
* Recursively print grouped attributes.
*/
- if (vp->da->type == FR_TYPE_GROUP) {
- RDEBUGX(lvl, "%s%s {", prefix ? prefix : "", vp->da->name);
- log_request_pair_list(lvl, request, (fr_pair_t *) vp->vp_group, prefix);
+ switch (vp->da->type) {
+ case FR_TYPE_STRUCTURAL:
+ {
+ fr_sbuff_t *oid_buff = log_request_oid_buff();
+
+ if (parent && (parent->da->type != FR_TYPE_GROUP)) parent_da = parent->da;
+ if (fr_dict_attr_oid_print(oid_buff, parent_da, vp->da) <= 0) return;
+
+ RDEBUGX(lvl, "%s%pV {", prefix ? prefix : "",
+ fr_box_strvalue_len(fr_sbuff_start(oid_buff), fr_sbuff_used(oid_buff)));
+ log_request_pair_list(lvl, request, vp, (fr_pair_t *) vp->vp_group, prefix);
RDEBUGX(lvl, "%s }", prefix ? prefix : "");
continue;
}
-
- RDEBUGX(lvl, "%s%pP", prefix ? prefix : "", vp);
+ default:
+ RDEBUGX(lvl, "%s%pP", prefix ? prefix : "", vp);
+ break;
+ }
}
REXDENT();
}
*
* @param[in] lvl Debug lvl (1-4).
* @param[in] request to read logging params from.
+ * @param[in] parent of vp to print, may be NULL.
* @param[in] vp to print.
* @param[in] prefix (optional).
*/
-void log_request_proto_pair_list(fr_log_lvl_t lvl, request_t *request, fr_pair_t *vp, char const *prefix)
+void log_request_proto_pair_list(fr_log_lvl_t lvl, request_t *request,
+ fr_pair_t const *parent, fr_pair_t const *vp, char const *prefix)
{
- fr_cursor_t cursor;
+ fr_cursor_t cursor;
+ fr_pair_t *m_vp;
+ fr_dict_attr_t const *parent_da = NULL;
- if (!vp || !request || !request->log.dst) return;
+ if (!request->log.dst) return;
if (!log_rdebug_enabled(lvl, request)) return;
+ memcpy(&m_vp, &vp, sizeof(m_vp));
+
RINDENT();
- for (vp = fr_cursor_init(&cursor, &vp);
+ for (vp = fr_cursor_init(&cursor, &m_vp);
vp;
vp = fr_cursor_next(&cursor)) {
VP_VERIFY(vp);
/*
* Recursively print grouped attributes.
*/
- if (vp->da->type == FR_TYPE_GROUP) {
- RDEBUGX(lvl, "%s%s {", prefix ? prefix : "", vp->da->name);
- log_request_proto_pair_list(lvl, request, (fr_pair_t *) vp->vp_group, prefix);
+ switch (vp->da->type) {
+ case FR_TYPE_STRUCTURAL:
+ {
+ fr_sbuff_t *oid_buff = log_request_oid_buff();
+
+ if (parent && (parent->da->type != FR_TYPE_GROUP)) parent_da = parent->da;
+ if (fr_dict_attr_oid_print(oid_buff, parent_da, vp->da) <= 0) return;
+
+ RDEBUGX(lvl, "%s%pV {", prefix ? prefix : "",
+ fr_box_strvalue_len(fr_sbuff_start(oid_buff), fr_sbuff_used(oid_buff)));
+ log_request_proto_pair_list(lvl, request, vp, (fr_pair_t *) vp->vp_group, prefix);
RDEBUGX(lvl, "%s}", prefix ? prefix : "");
continue;
}
- RDEBUGX(lvl, "%s%pP", prefix ? prefix : "", vp);
+ default:
+ RDEBUGX(lvl, "%s%pP", prefix ? prefix : "", vp);
+ break;
+ }
}
REXDENT();
}
char const *file, int line, char const *fmt, ...)
CC_HINT(format (printf, 6, 7)) CC_HINT(nonnull (3));
-void log_request_pair_list(fr_log_lvl_t lvl, request_t *request, fr_pair_t *vp, char const *prefix);
+void log_request_pair_list(fr_log_lvl_t lvl, request_t *request,
+ fr_pair_t const *parent, fr_pair_t const *vp, char const *prefix)
+ CC_HINT(nonnull(2,4));
-void log_request_proto_pair_list(fr_log_lvl_t lvl, request_t *request, fr_pair_t *vp, char const *prefix);
+void log_request_proto_pair_list(fr_log_lvl_t lvl, request_t *request,
+ fr_pair_t const *parent, fr_pair_t const *vp, char const *prefix)
+ CC_HINT(nonnull(2,4));
void log_request_marker(fr_log_type_t type, fr_log_lvl_t lvl, request_t *request,
char const *file, int line,
packet->data_len);
if (received || request->parent) {
- log_request_pair_list(L_DBG_LVL_1, request, packet->vps, NULL);
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, packet->vps, NULL);
} else {
- log_request_proto_pair_list(L_DBG_LVL_1, request, packet->vps, NULL);
+ log_request_proto_pair_list(L_DBG_LVL_1, request, NULL, packet->vps, NULL);
}
}
if (request->state) {
RDEBUG2("Restored &session-state");
- log_request_pair_list(L_DBG_LVL_2, request, request->state, "&session-state.");
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, request->state, "&session-state.");
}
/*
if (request->state) {
RDEBUG2("Saving &session-state");
- log_request_pair_list(L_DBG_LVL_2, request, request->state, "&session-state.");
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, request->state, "&session-state.");
}
vp = fr_pair_find_by_da(&request->request_pairs, state->da);
/*
* Print out all the pairs we have so far
*/
- log_request_pair_list(L_DBG_LVL_2, request, cert_vps, "&session-state.");
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, cert_vps, "&session-state.");
/*
* cert_vps have a different talloc parent, so we
state->session.unique_int);
RDEBUG2("Creating subrequest (%s)", child->name);
- log_request_pair_list(L_DBG_LVL_1, request, child->request_pairs, NULL);
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, child->request_pairs, NULL);
frame->process = unlang_subrequest_process;
return unlang_subrequest_process(p_result, request);
fr_arp_packet_codes[request->packet->code],
request->async->listen->name);
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
}
return 0;
request->reply->code,
request->async->listen->name);
- log_request_pair_list(L_DBG_LVL_1, request, request->reply_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
}
return slen;
case REQUEST_INIT:
if (request->parent && RDEBUG_ENABLED) {
RDEBUG("Received ARP %s", fr_arp_packet_codes[request->packet->code]);
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
}
request->component = "arp";
if (request->parent && RDEBUG_ENABLED) {
RDEBUG("Sending %s", fr_arp_packet_codes[request->reply->code]);
- log_request_pair_list(L_DBG_LVL_1, request, request->reply_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
}
break;
RDEBUG("Received %s ID %i",
fr_dict_enum_name_by_value(inst->attr_packet_type, fr_box_uint32(request->packet->code)),
request->packet->id);
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
request->component = "radius";
request->reply->id);
}
- log_request_proto_pair_list(L_DBG_LVL_1, request, request->reply_pairs, "");
+ log_request_proto_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
break;
default:
REXDENT();
if (received || request->parent) {
- log_request_pair_list(L_DBG_LVL_1, request, packet->vps, NULL);
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, packet->vps, NULL);
} else {
- log_request_proto_pair_list(L_DBG_LVL_1, request, packet->vps, NULL);
+ log_request_proto_pair_list(L_DBG_LVL_1, request, NULL, packet->vps, NULL);
}
}
);
if (received || request->parent) {
- log_request_pair_list(L_DBG_LVL_1, request, packet->vps, NULL);
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, packet->vps, NULL);
} else {
- log_request_proto_pair_list(L_DBG_LVL_1, request, packet->vps, NULL);
+ log_request_proto_pair_list(L_DBG_LVL_1, request, NULL, packet->vps, NULL);
}
}
switch (request->request_state) {
case REQUEST_INIT:
if (RDEBUG_ENABLED) proto_ldap_packet_debug(request, request->packet, true);
- log_request_proto_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_proto_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
request->server_cs = request->listener->server_cs;
request->component = "ldap";
proto_radius_t *inst = talloc_get_type_abort(parent, proto_radius_t);
return fr_app_process_type_parse(ctx, out, ci, attr_packet_type, "proto_radius",
- type_lib_table, NUM_ELEMENTS(type_lib_table),
+ type_lib_table, NUM_ELEMENTS(type_lib_table),
inst->type_submodule_by_code, NUM_ELEMENTS(inst->type_submodule_by_code));
}
request->packet->data_len,
request->async->listen->name);
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
}
if (!inst->io.app_io->decode) return 0;
data_len,
request->async->listen->name);
- log_request_pair_list(L_DBG_LVL_1, request, request->reply_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
}
return data_len;
case REQUEST_INIT:
if (request->parent && RDEBUG_ENABLED) {
RDEBUG("Received %s ID %i", fr_packet_codes[request->packet->code], request->packet->id);
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
}
request->component = "radius";
if (request->parent && RDEBUG_ENABLED) {
RDEBUG("Sending %s ID %i", fr_packet_codes[request->reply->code], request->reply->id);
- log_request_pair_list(L_DBG_LVL_1, request, request->reply_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
}
break;
case REQUEST_INIT:
if (request->parent && RDEBUG_ENABLED) {
RDEBUG("Received %s ID %i", fr_packet_codes[request->packet->code], request->packet->id);
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
}
request->component = "radius";
}
if (request->parent && RDEBUG_ENABLED) {
RDEBUG("Sending %s ID %i", fr_packet_codes[request->reply->code], request->reply->id);
- log_request_pair_list(L_DBG_LVL_1, request, request->reply_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
}
break;
case REQUEST_INIT:
if (request->parent && RDEBUG_ENABLED) {
RDEBUG("Received %s ID %i", fr_packet_codes[request->packet->code], request->packet->id);
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
}
request->component = "radius";
if (request->parent && RDEBUG_ENABLED) {
RDEBUG("Sending %s ID %i", fr_packet_codes[request->reply->code], request->reply->id);
- log_request_pair_list(L_DBG_LVL_1, request, request->reply_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
}
break;
case REQUEST_INIT:
if (request->parent && RDEBUG_ENABLED) {
RDEBUG("Received %s ID %i", fr_packet_codes[request->packet->code], request->packet->id);
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
}
request->component = "radius";
if (request->parent && RDEBUG_ENABLED) {
RDEBUG("Sending %s ID %i", fr_packet_codes[request->reply->code], request->reply->id);
- log_request_pair_list(L_DBG_LVL_1, request, request->reply_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
}
break;
request->packet->data_len,
request->async->listen->name);
- log_request_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
/*
* Maybe the shared secret is wrong?
data_len,
request->async->listen->name);
- log_request_pair_list(L_DBG_LVL_1, request, request->reply_pairs, "");
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
}
RHEXDUMP3(buffer, data_len, "proto_tacacs encode packet");
switch (request->request_state) {
case REQUEST_INIT:
RDEBUG("Received %s ID %i", fr_vmps_codes[request->packet->code], request->packet->id);
- log_request_proto_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_proto_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
request->component = "vmps";
} else {
RDEBUG("Denying client");
}
- if (RDEBUG_ENABLED) log_request_pair_list(L_DBG_LVL_1, request, request->reply_pairs, NULL);
+ if (RDEBUG_ENABLED) log_request_pair_list(L_DBG_LVL_1, request, NULL, request->reply_pairs, NULL);
break;
default:
switch (request->request_state) {
case REQUEST_INIT:
RDEBUG("Received %s ID %08x", fr_vmps_codes[request->packet->code], request->packet->id);
- log_request_proto_pair_list(L_DBG_LVL_1, request, request->request_pairs, "");
+ log_request_proto_pair_list(L_DBG_LVL_1, request, NULL, request->request_pairs, NULL);
request->component = "vmps";
fr_pair_value_memdup(fake->request_pairs, tlv_eap_payload->vp_octets, tlv_eap_payload->vp_length, false);
RDEBUG2("Got tunneled request");
- log_request_pair_list(L_DBG_LVL_1, fake, fake->request_pairs, NULL);
+ log_request_pair_list(L_DBG_LVL_1, fake, NULL, fake->request_pairs, NULL);
/*
* Tell the request that it's a fake one.
data, data_len, NULL) < 0) return FR_CODE_ACCESS_REJECT;
RDEBUG2("Got Tunneled FAST TLVs");
- log_request_pair_list(L_DBG_LVL_1, request, fast_vps, NULL);
+ log_request_pair_list(L_DBG_LVL_1, request, NULL, fast_vps, NULL);
code = eap_fast_process_tlvs(request, eap_session, tls_session, fast_vps);
fr_pair_list_free(&fast_vps);
}
RDEBUG2("Built change password packet");
- log_request_pair_list(L_DBG_LVL_2, request, request->request_pairs, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, request->request_pairs, NULL);
/*
* jump to "authentication"
if (data->mppe_keys) {
RDEBUG2("Adding stored attributes to parent");
- log_request_pair_list(L_DBG_LVL_2, request, data->mppe_keys, "&parent.reply.");
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, data->mppe_keys, "&parent.reply.");
MEM(fr_pair_list_copy(parent->reply, &parent->reply->vps, &data->mppe_keys) >= 0);
} else {
RDEBUG2("No stored attributes to copy to parent");
} else {
RDEBUG2("Got tunneled reply code %i", reply->code);
}
- log_request_pair_list(L_DBG_LVL_2, request, reply->vps, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, reply->vps, NULL);
}
switch (reply->code) {
}
RDEBUG2("Got tunneled request");
- log_request_pair_list(L_DBG_LVL_2, request, fake->request_pairs, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, fake->request_pairs, NULL);
/*
* Update other items in the request_t data structure.
*/
if (tunnel_vps) {
RDEBUG2("Sending tunneled reply attributes");
- log_request_pair_list(L_DBG_LVL_2, request, tunnel_vps, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, tunnel_vps, NULL);
vp2diameter(request, tls_session, tunnel_vps);
fr_pair_list_free(&tunnel_vps);
request->packet->code = u->code;
DEBUG3("%s - Status check packet type will be %s", h->module_name, fr_packet_codes[u->code]);
- log_request_pair_list(L_DBG_LVL_3, request, request->request_pairs, NULL);
+ log_request_pair_list(L_DBG_LVL_3, request, NULL, request->request_pairs, NULL);
MEM(h->status_r = talloc_zero(request, udp_result_t));
h->status_u = u;
RDEBUG("Received %s ID %d length %ld reply packet on connection %s",
fr_packet_codes[code], code, packet_len, h->name);
- log_request_pair_list(L_DBG_LVL_2, request, *reply, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, *reply, NULL);
*response_code = code;
fr_packet_codes[u->code], u->id, u->packet_len, h->name);
}
- log_request_pair_list(L_DBG_LVL_2, request, request->request_pairs, NULL);
- if (u->extra) log_request_pair_list(L_DBG_LVL_2, request, u->extra, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, request->request_pairs, NULL);
+ if (u->extra) log_request_pair_list(L_DBG_LVL_2, request, NULL, u->extra, NULL);
/*
* Record pointers to the buffer we'll be writing
RDEBUG2("Group \"%s\": Merging reply items", entry->name);
if (rcode == RLM_MODULE_NOOP) rcode = RLM_MODULE_UPDATED;
- log_request_pair_list(L_DBG_LVL_2, request, reply_tmp, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, reply_tmp, NULL);
radius_pairmove(request, &request->reply_pairs, reply_tmp, true);
fr_pair_list_init(&reply_tmp);
RDEBUG2("User found in radreply table, merging reply items");
user_found = true;
- log_request_pair_list(L_DBG_LVL_2, request, reply_tmp, NULL);
+ log_request_pair_list(L_DBG_LVL_2, request, NULL, reply_tmp, NULL);
radius_pairmove(request, &request->reply_pairs, reply_tmp, true);