From d4cf078cb71a943af0dcaa51ed5f950df0fdeca3 Mon Sep 17 00:00:00 2001 From: Pablo Neira Ayuso Date: Sun, 23 Nov 2008 23:59:44 +0100 Subject: add ukey_* function for key assignation This patch cleans up the current key assignation by introducing a set of functions ukey_* to set the key value as Eric Leblond and we discussed during the latest Netfilter Workshop. This patch is based on an idea from Holger Eitzenberger. Signed-off-by: Eric Leblond --- filter/ulogd_filter_IFINDEX.c | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) (limited to 'filter/ulogd_filter_IFINDEX.c') diff --git a/filter/ulogd_filter_IFINDEX.c b/filter/ulogd_filter_IFINDEX.c index f7571bd..f56ee0b 100644 --- a/filter/ulogd_filter_IFINDEX.c +++ b/filter/ulogd_filter_IFINDEX.c @@ -3,6 +3,7 @@ * ulogd interpreter plugin for ifindex to ifname conversion * * (C) 2005 by Harald Welte + * (C) 2008 by Pablo Neira Ayuso * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 @@ -61,20 +62,25 @@ static int interp_ifindex(struct ulogd_pluginstance *pi) { struct ulogd_key *ret = pi->output.keys; struct ulogd_key *inp = pi->input.keys; + void *ptr; - ret[0].u.value.ptr = calloc(IFNAMSIZ, sizeof(char)); - nlif_index2name(nlif_inst, inp[0].u.source->u.value.ui32, - ret[0].u.value.ptr); - if (((char *)ret[0].u.value.ptr)[0] == '*') - ((char *)(ret[0].u.value.ptr))[0] = 0; - ret[0].flags |= ULOGD_RETF_VALID; - - ret[1].u.value.ptr = calloc(IFNAMSIZ, sizeof(char)); - nlif_index2name(nlif_inst, inp[1].u.source->u.value.ui32, - ret[1].u.value.ptr); - if (((char *)ret[1].u.value.ptr)[0] == '*') - ((char *)(ret[1].u.value.ptr))[0] = 0; - ret[1].flags |= ULOGD_RETF_VALID; + ptr = calloc(IFNAMSIZ, sizeof(char)); + if (!ptr) + return ULOGD_IRET_ERR; + + nlif_index2name(nlif_inst, ikey_get_u32(&inp[0]), ptr); + if (((char *)ptr)[0] == '*') + ((char *)(ptr))[0] = 0; + okey_set_ptr(&ret[0], ptr); + + ptr = calloc(IFNAMSIZ, sizeof(char)); + if (!ptr) + return ULOGD_IRET_ERR; + + nlif_index2name(nlif_inst, ikey_get_u32(&inp[1]), ptr); + if (((char *)ptr)[0] == '*') + ((char *)(ptr))[0] = 0; + okey_set_ptr(&ret[1], ptr); return ULOGD_IRET_OK; } -- cgit v1.2.3