summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@netfilter.org>2012-11-08 16:53:02 +0100
committerPablo Neira Ayuso <pablo@netfilter.org>2012-11-08 16:53:02 +0100
commit8b4e32243eb19b19ad96dc6821901b5a44784b16 (patch)
tree57109be26fb7c2dc28d5e749c5ac4a5b76231ba2 /src
parentc82e6f3766b376ac71416e72a3b3a5c1821c4210 (diff)
table: use internal flags for attribute
Fix missing use of internal flags for table objects in attributes. Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
Diffstat (limited to 'src')
-rw-r--r--src/table.c19
1 files changed, 13 insertions, 6 deletions
diff --git a/src/table.c b/src/table.c
index 040bf9a..6e8cd33 100644
--- a/src/table.c
+++ b/src/table.c
@@ -28,7 +28,7 @@ struct nft_table {
char *name;
uint8_t family;
- uint32_t flags; /* FIXME missing */
+ uint32_t flags;
};
struct nft_table *nft_table_alloc(void)
@@ -39,7 +39,7 @@ EXPORT_SYMBOL(nft_table_alloc);
void nft_table_free(struct nft_table *t)
{
- if (t->name != NULL)
+ if (t->flags & (1 << NFT_TABLE_ATTR_NAME))
free(t->name);
free(t);
@@ -54,6 +54,7 @@ void nft_table_attr_set(struct nft_table *t, uint16_t attr, void *data)
free(t->name);
t->name = strdup(data);
+ t->flags |= (1 << NFT_TABLE_ATTR_NAME);
break;
}
}
@@ -61,11 +62,15 @@ EXPORT_SYMBOL(nft_table_attr_set);
const void *nft_table_attr_get(struct nft_table *t, uint16_t attr)
{
+ const void *ret = NULL;
+
switch(attr) {
case NFT_TABLE_ATTR_NAME:
- return t->name;
+ if (t->flags & (1 << NFT_TABLE_ATTR_NAME))
+ ret = t->name;
+ break;
}
- return NULL;
+ return ret;
}
EXPORT_SYMBOL(nft_table_attr_get);
@@ -92,7 +97,7 @@ EXPORT_SYMBOL(nft_table_nlmsg_build_hdr);
void nft_table_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nft_table *t)
{
- if (t->name != NULL)
+ if (t->flags & (1 << NFT_TABLE_ATTR_NAME))
mnl_attr_put_strz(nlh, NFTA_TABLE_NAME, t->name);
}
EXPORT_SYMBOL(nft_table_nlmsg_build_payload);
@@ -120,8 +125,10 @@ int nft_table_nlmsg_parse(const struct nlmsghdr *nlh, struct nft_table *t)
struct nfgenmsg *nfg = mnl_nlmsg_get_payload(nlh);
mnl_attr_parse(nlh, sizeof(*nfg), nft_table_parse_attr_cb, tb);
- if (tb[NFTA_TABLE_NAME])
+ if (tb[NFTA_TABLE_NAME]) {
t->name = strdup(mnl_attr_get_str(tb[NFTA_TABLE_NAME]));
+ t->flags |= (1 << NFT_TABLE_ATTR_NAME);
+ }
t->family = nfg->nfgen_family;