From: Alan T. DeKok Date: Tue, 14 Feb 2023 22:45:49 +0000 (-0500) Subject: check for not found and not copied X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c3643ec54a4e603beff37853b4343abc62005679;p=thirdparty%2Ffreeradius-server.git check for not found and not copied --- diff --git a/src/process/tacacs/base.c b/src/process/tacacs/base.c index 950a612b027..f6cc104c42c 100644 --- a/src/process/tacacs/base.c +++ b/src/process/tacacs/base.c @@ -812,6 +812,7 @@ RESUME(auth_get) session = request_data_reference(request, inst, 0); if (!session) { fr_tacacs_packet_t const *packet = (fr_tacacs_packet_t const *) request->packet->data; + fr_pair_t *vp, *copy; if (!packet_is_authen_start_request(packet)) goto send_reply; @@ -827,14 +828,18 @@ RESUME(auth_get) * known), or are irrelevant. */ fr_pair_list_init(&session->list); - fr_pair_append(&session->list, - fr_pair_copy(session, fr_pair_find_by_da(&request->request_pairs, NULL, attr_user_name))); - fr_pair_append(&session->list, - fr_pair_copy(session, fr_pair_find_by_da(&request->request_pairs, NULL, attr_tacacs_client_port))); - fr_pair_append(&session->list, - fr_pair_copy(session, fr_pair_find_by_da(&request->request_pairs, NULL, attr_tacacs_remote_address))); - fr_pair_append(&session->list, - fr_pair_copy(session, fr_pair_find_by_da(&request->request_pairs, NULL, attr_tacacs_privilege_level))); +#undef COPY +#define COPY(_attr) do { \ + vp = fr_pair_find_by_da(&request->request_pairs, NULL, _attr); \ + if (!vp) break; \ + MEM(copy = fr_pair_copy(session, vp)); \ + fr_pair_append(&session->list, copy); \ +} while (0) + + COPY(attr_user_name); + COPY(attr_tacacs_client_port); + COPY(attr_tacacs_remote_address); + COPY(attr_tacacs_privilege_level); } else { session->rounds++;