import libnftnl-1.1.1-4.el8
This commit is contained in:
commit
4e3b75a411
1
.gitignore
vendored
Normal file
1
.gitignore
vendored
Normal file
@ -0,0 +1 @@
|
|||||||
|
SOURCES/libnftnl-1.1.1.tar.bz2
|
1
.libnftnl.metadata
Normal file
1
.libnftnl.metadata
Normal file
@ -0,0 +1 @@
|
|||||||
|
d2be642a54e0f105cb5564471ae4aaaed8b97ca6 SOURCES/libnftnl-1.1.1.tar.bz2
|
1348
SOURCES/0001-src-remove-nftnl_rule_cmp-and-nftnl_expr_cmp.patch
Normal file
1348
SOURCES/0001-src-remove-nftnl_rule_cmp-and-nftnl_expr_cmp.patch
Normal file
File diff suppressed because it is too large
Load Diff
313
SOURCES/0002-chain-Support-per-chain-rules-list.patch
Normal file
313
SOURCES/0002-chain-Support-per-chain-rules-list.patch
Normal file
@ -0,0 +1,313 @@
|
|||||||
|
From 8fcb95ed6dcd47c94a924b4018177d8a833d6983 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Mon, 17 Dec 2018 17:30:06 +0100
|
||||||
|
Subject: [PATCH] chain: Support per chain rules list
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1658533
|
||||||
|
Upstream Status: libnftnl commit e33798478176f
|
||||||
|
|
||||||
|
commit e33798478176f97edf2649cd61444e0375fdc12b
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Thu Dec 6 17:17:51 2018 +0100
|
||||||
|
|
||||||
|
chain: Support per chain rules list
|
||||||
|
|
||||||
|
The implementation basically copies expr_list in struct nftnl_rule.
|
||||||
|
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
include/internal.h | 1 +
|
||||||
|
include/libnftnl/chain.h | 15 +++++++
|
||||||
|
include/rule.h | 26 ++++++++++++
|
||||||
|
src/chain.c | 104 ++++++++++++++++++++++++++++++++++++++++++++++-
|
||||||
|
src/libnftnl.map | 10 +++++
|
||||||
|
src/rule.c | 22 ----------
|
||||||
|
6 files changed, 155 insertions(+), 23 deletions(-)
|
||||||
|
create mode 100644 include/rule.h
|
||||||
|
|
||||||
|
diff --git a/include/internal.h b/include/internal.h
|
||||||
|
index 7e97c4a..323f825 100644
|
||||||
|
--- a/include/internal.h
|
||||||
|
+++ b/include/internal.h
|
||||||
|
@@ -13,5 +13,6 @@
|
||||||
|
#include "expr.h"
|
||||||
|
#include "expr_ops.h"
|
||||||
|
#include "buffer.h"
|
||||||
|
+#include "rule.h"
|
||||||
|
|
||||||
|
#endif /* _LIBNFTNL_INTERNAL_H_ */
|
||||||
|
diff --git a/include/libnftnl/chain.h b/include/libnftnl/chain.h
|
||||||
|
index 237683e..f04f610 100644
|
||||||
|
--- a/include/libnftnl/chain.h
|
||||||
|
+++ b/include/libnftnl/chain.h
|
||||||
|
@@ -13,6 +13,7 @@ extern "C" {
|
||||||
|
#endif
|
||||||
|
|
||||||
|
struct nftnl_chain;
|
||||||
|
+struct nftnl_rule;
|
||||||
|
|
||||||
|
struct nftnl_chain *nftnl_chain_alloc(void);
|
||||||
|
void nftnl_chain_free(const struct nftnl_chain *);
|
||||||
|
@@ -54,6 +55,10 @@ uint32_t nftnl_chain_get_u32(const struct nftnl_chain *c, uint16_t attr);
|
||||||
|
int32_t nftnl_chain_get_s32(const struct nftnl_chain *c, uint16_t attr);
|
||||||
|
uint64_t nftnl_chain_get_u64(const struct nftnl_chain *c, uint16_t attr);
|
||||||
|
|
||||||
|
+void nftnl_chain_rule_add(struct nftnl_rule *rule, struct nftnl_chain *c);
|
||||||
|
+void nftnl_chain_rule_add_tail(struct nftnl_rule *rule, struct nftnl_chain *c);
|
||||||
|
+void nftnl_chain_rule_insert_at(struct nftnl_rule *rule, struct nftnl_rule *pos);
|
||||||
|
+
|
||||||
|
struct nlmsghdr;
|
||||||
|
|
||||||
|
void nftnl_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_chain *t);
|
||||||
|
@@ -68,6 +73,16 @@ int nftnl_chain_fprintf(FILE *fp, const struct nftnl_chain *c, uint32_t type, ui
|
||||||
|
#define nftnl_chain_nlmsg_build_hdr nftnl_nlmsg_build_hdr
|
||||||
|
int nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *t);
|
||||||
|
|
||||||
|
+int nftnl_rule_foreach(struct nftnl_chain *c,
|
||||||
|
+ int (*cb)(struct nftnl_rule *r, void *data),
|
||||||
|
+ void *data);
|
||||||
|
+
|
||||||
|
+struct nftnl_rule_iter;
|
||||||
|
+
|
||||||
|
+struct nftnl_rule_iter *nftnl_rule_iter_create(const struct nftnl_chain *c);
|
||||||
|
+struct nftnl_rule *nftnl_rule_iter_next(struct nftnl_rule_iter *iter);
|
||||||
|
+void nftnl_rule_iter_destroy(struct nftnl_rule_iter *iter);
|
||||||
|
+
|
||||||
|
struct nftnl_chain_list;
|
||||||
|
|
||||||
|
struct nftnl_chain_list *nftnl_chain_list_alloc(void);
|
||||||
|
diff --git a/include/rule.h b/include/rule.h
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000..5edcb6c
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/include/rule.h
|
||||||
|
@@ -0,0 +1,26 @@
|
||||||
|
+#ifndef _LIBNFTNL_RULE_INTERNAL_H_
|
||||||
|
+#define _LIBNFTNL_RULE_INTERNAL_H_
|
||||||
|
+
|
||||||
|
+struct nftnl_rule {
|
||||||
|
+ struct list_head head;
|
||||||
|
+
|
||||||
|
+ uint32_t flags;
|
||||||
|
+ uint32_t family;
|
||||||
|
+ const char *table;
|
||||||
|
+ const char *chain;
|
||||||
|
+ uint64_t handle;
|
||||||
|
+ uint64_t position;
|
||||||
|
+ uint32_t id;
|
||||||
|
+ struct {
|
||||||
|
+ void *data;
|
||||||
|
+ uint32_t len;
|
||||||
|
+ } user;
|
||||||
|
+ struct {
|
||||||
|
+ uint32_t flags;
|
||||||
|
+ uint32_t proto;
|
||||||
|
+ } compat;
|
||||||
|
+
|
||||||
|
+ struct list_head expr_list;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+#endif
|
||||||
|
diff --git a/src/chain.c b/src/chain.c
|
||||||
|
index eff5186..c374923 100644
|
||||||
|
--- a/src/chain.c
|
||||||
|
+++ b/src/chain.c
|
||||||
|
@@ -27,6 +27,7 @@
|
||||||
|
#include <linux/netfilter_arp.h>
|
||||||
|
|
||||||
|
#include <libnftnl/chain.h>
|
||||||
|
+#include <libnftnl/rule.h>
|
||||||
|
#include <buffer.h>
|
||||||
|
|
||||||
|
struct nftnl_chain {
|
||||||
|
@@ -45,6 +46,8 @@ struct nftnl_chain {
|
||||||
|
uint64_t bytes;
|
||||||
|
uint64_t handle;
|
||||||
|
uint32_t flags;
|
||||||
|
+
|
||||||
|
+ struct list_head rule_list;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const char *nftnl_hooknum2str(int family, int hooknum)
|
||||||
|
@@ -90,12 +93,25 @@ static const char *nftnl_hooknum2str(int family, int hooknum)
|
||||||
|
EXPORT_SYMBOL(nftnl_chain_alloc);
|
||||||
|
struct nftnl_chain *nftnl_chain_alloc(void)
|
||||||
|
{
|
||||||
|
- return calloc(1, sizeof(struct nftnl_chain));
|
||||||
|
+ struct nftnl_chain *c;
|
||||||
|
+
|
||||||
|
+ c = calloc(1, sizeof(struct nftnl_chain));
|
||||||
|
+ if (c == NULL)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ INIT_LIST_HEAD(&c->rule_list);
|
||||||
|
+
|
||||||
|
+ return c;
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(nftnl_chain_free);
|
||||||
|
void nftnl_chain_free(const struct nftnl_chain *c)
|
||||||
|
{
|
||||||
|
+ struct nftnl_rule *r, *tmp;
|
||||||
|
+
|
||||||
|
+ list_for_each_entry_safe(r, tmp, &c->rule_list, head)
|
||||||
|
+ nftnl_rule_free(r);
|
||||||
|
+
|
||||||
|
if (c->flags & (1 << NFTNL_CHAIN_NAME))
|
||||||
|
xfree(c->name);
|
||||||
|
if (c->flags & (1 << NFTNL_CHAIN_TABLE))
|
||||||
|
@@ -406,6 +422,24 @@ void nftnl_chain_nlmsg_build_payload(struct nlmsghdr *nlh, const struct nftnl_ch
|
||||||
|
mnl_attr_put_strz(nlh, NFTA_CHAIN_TYPE, c->type);
|
||||||
|
}
|
||||||
|
|
||||||
|
+EXPORT_SYMBOL(nftnl_chain_rule_add);
|
||||||
|
+void nftnl_chain_rule_add(struct nftnl_rule *rule, struct nftnl_chain *c)
|
||||||
|
+{
|
||||||
|
+ list_add(&rule->head, &c->rule_list);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+EXPORT_SYMBOL(nftnl_chain_rule_add_tail);
|
||||||
|
+void nftnl_chain_rule_add_tail(struct nftnl_rule *rule, struct nftnl_chain *c)
|
||||||
|
+{
|
||||||
|
+ list_add_tail(&rule->head, &c->rule_list);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+EXPORT_SYMBOL(nftnl_chain_rule_insert_at);
|
||||||
|
+void nftnl_chain_rule_insert_at(struct nftnl_rule *rule, struct nftnl_rule *pos)
|
||||||
|
+{
|
||||||
|
+ list_add(&rule->head, &pos->head);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int nftnl_chain_parse_attr_cb(const struct nlattr *attr, void *data)
|
||||||
|
{
|
||||||
|
const struct nlattr **tb = data;
|
||||||
|
@@ -875,6 +909,74 @@ int nftnl_chain_fprintf(FILE *fp, const struct nftnl_chain *c, uint32_t type,
|
||||||
|
nftnl_chain_do_snprintf);
|
||||||
|
}
|
||||||
|
|
||||||
|
+EXPORT_SYMBOL(nftnl_rule_foreach);
|
||||||
|
+int nftnl_rule_foreach(struct nftnl_chain *c,
|
||||||
|
+ int (*cb)(struct nftnl_rule *r, void *data),
|
||||||
|
+ void *data)
|
||||||
|
+{
|
||||||
|
+ struct nftnl_rule *cur, *tmp;
|
||||||
|
+ int ret;
|
||||||
|
+
|
||||||
|
+ list_for_each_entry_safe(cur, tmp, &c->rule_list, head) {
|
||||||
|
+ ret = cb(cur, data);
|
||||||
|
+ if (ret < 0)
|
||||||
|
+ return ret;
|
||||||
|
+ }
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+struct nftnl_rule_iter {
|
||||||
|
+ const struct nftnl_chain *c;
|
||||||
|
+ struct nftnl_rule *cur;
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static void nftnl_rule_iter_init(const struct nftnl_chain *c,
|
||||||
|
+ struct nftnl_rule_iter *iter)
|
||||||
|
+{
|
||||||
|
+ iter->c = c;
|
||||||
|
+ if (list_empty(&c->rule_list))
|
||||||
|
+ iter->cur = NULL;
|
||||||
|
+ else
|
||||||
|
+ iter->cur = list_entry(c->rule_list.next, struct nftnl_rule,
|
||||||
|
+ head);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+EXPORT_SYMBOL(nftnl_rule_iter_create);
|
||||||
|
+struct nftnl_rule_iter *nftnl_rule_iter_create(const struct nftnl_chain *c)
|
||||||
|
+{
|
||||||
|
+ struct nftnl_rule_iter *iter;
|
||||||
|
+
|
||||||
|
+ iter = calloc(1, sizeof(struct nftnl_rule_iter));
|
||||||
|
+ if (iter == NULL)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ nftnl_rule_iter_init(c, iter);
|
||||||
|
+
|
||||||
|
+ return iter;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+EXPORT_SYMBOL(nftnl_rule_iter_next);
|
||||||
|
+struct nftnl_rule *nftnl_rule_iter_next(struct nftnl_rule_iter *iter)
|
||||||
|
+{
|
||||||
|
+ struct nftnl_rule *rule = iter->cur;
|
||||||
|
+
|
||||||
|
+ if (rule == NULL)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ /* get next rule, if any */
|
||||||
|
+ iter->cur = list_entry(iter->cur->head.next, struct nftnl_rule, head);
|
||||||
|
+ if (&iter->cur->head == iter->c->rule_list.next)
|
||||||
|
+ return NULL;
|
||||||
|
+
|
||||||
|
+ return rule;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+EXPORT_SYMBOL(nftnl_rule_iter_destroy);
|
||||||
|
+void nftnl_rule_iter_destroy(struct nftnl_rule_iter *iter)
|
||||||
|
+{
|
||||||
|
+ xfree(iter);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
struct nftnl_chain_list {
|
||||||
|
struct list_head list;
|
||||||
|
};
|
||||||
|
diff --git a/src/libnftnl.map b/src/libnftnl.map
|
||||||
|
index 89414f2..96d5b5f 100644
|
||||||
|
--- a/src/libnftnl.map
|
||||||
|
+++ b/src/libnftnl.map
|
||||||
|
@@ -336,3 +336,13 @@ global:
|
||||||
|
|
||||||
|
local: *;
|
||||||
|
};
|
||||||
|
+
|
||||||
|
+LIBNFTNL_12 {
|
||||||
|
+ nftnl_chain_rule_add;
|
||||||
|
+ nftnl_chain_rule_add_tail;
|
||||||
|
+ nftnl_chain_rule_insert_at;
|
||||||
|
+ nftnl_rule_foreach;
|
||||||
|
+ nftnl_rule_iter_create;
|
||||||
|
+ nftnl_rule_iter_next;
|
||||||
|
+ nftnl_rule_iter_destroy;
|
||||||
|
+} LIBNFTNL_11;
|
||||||
|
diff --git a/src/rule.c b/src/rule.c
|
||||||
|
index 2c70420..6a43d3e 100644
|
||||||
|
--- a/src/rule.c
|
||||||
|
+++ b/src/rule.c
|
||||||
|
@@ -30,28 +30,6 @@
|
||||||
|
#include <libnftnl/set.h>
|
||||||
|
#include <libnftnl/expr.h>
|
||||||
|
|
||||||
|
-struct nftnl_rule {
|
||||||
|
- struct list_head head;
|
||||||
|
-
|
||||||
|
- uint32_t flags;
|
||||||
|
- uint32_t family;
|
||||||
|
- const char *table;
|
||||||
|
- const char *chain;
|
||||||
|
- uint64_t handle;
|
||||||
|
- uint64_t position;
|
||||||
|
- uint32_t id;
|
||||||
|
- struct {
|
||||||
|
- void *data;
|
||||||
|
- uint32_t len;
|
||||||
|
- } user;
|
||||||
|
- struct {
|
||||||
|
- uint32_t flags;
|
||||||
|
- uint32_t proto;
|
||||||
|
- } compat;
|
||||||
|
-
|
||||||
|
- struct list_head expr_list;
|
||||||
|
-};
|
||||||
|
-
|
||||||
|
EXPORT_SYMBOL(nftnl_rule_alloc);
|
||||||
|
struct nftnl_rule *nftnl_rule_alloc(void)
|
||||||
|
{
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,107 @@
|
|||||||
|
From 75b3a238485745de01cf6264703ba6c192d7f721 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Mon, 17 Dec 2018 17:30:06 +0100
|
||||||
|
Subject: [PATCH] chain: Add lookup functions for chain list and rules in chain
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1658533
|
||||||
|
Upstream Status: libnftnl commit 1a829ec0c3285
|
||||||
|
|
||||||
|
commit 1a829ec0c3285baac712352c3a046a4f76013e70
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Thu Dec 6 17:17:52 2018 +0100
|
||||||
|
|
||||||
|
chain: Add lookup functions for chain list and rules in chain
|
||||||
|
|
||||||
|
For now, these lookup functions simply iterate over the linked list
|
||||||
|
until they find the right entry. In future, they may make use of more
|
||||||
|
optimized data structures behind the curtains.
|
||||||
|
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
include/libnftnl/chain.h | 2 ++
|
||||||
|
src/chain.c | 28 ++++++++++++++++++++++++++++
|
||||||
|
src/libnftnl.map | 3 +++
|
||||||
|
3 files changed, 33 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/include/libnftnl/chain.h b/include/libnftnl/chain.h
|
||||||
|
index f04f610..64e10e9 100644
|
||||||
|
--- a/include/libnftnl/chain.h
|
||||||
|
+++ b/include/libnftnl/chain.h
|
||||||
|
@@ -76,6 +76,7 @@ int nftnl_chain_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_chain *t);
|
||||||
|
int nftnl_rule_foreach(struct nftnl_chain *c,
|
||||||
|
int (*cb)(struct nftnl_rule *r, void *data),
|
||||||
|
void *data);
|
||||||
|
+struct nftnl_rule *nftnl_rule_lookup_byindex(struct nftnl_chain *c, uint32_t index);
|
||||||
|
|
||||||
|
struct nftnl_rule_iter;
|
||||||
|
|
||||||
|
@@ -89,6 +90,7 @@ struct nftnl_chain_list *nftnl_chain_list_alloc(void);
|
||||||
|
void nftnl_chain_list_free(struct nftnl_chain_list *list);
|
||||||
|
int nftnl_chain_list_is_empty(const struct nftnl_chain_list *list);
|
||||||
|
int nftnl_chain_list_foreach(struct nftnl_chain_list *chain_list, int (*cb)(struct nftnl_chain *t, void *data), void *data);
|
||||||
|
+struct nftnl_chain *nftnl_chain_list_lookup_byname(struct nftnl_chain_list *chain_list, const char *chain);
|
||||||
|
|
||||||
|
void nftnl_chain_list_add(struct nftnl_chain *r, struct nftnl_chain_list *list);
|
||||||
|
void nftnl_chain_list_add_tail(struct nftnl_chain *r, struct nftnl_chain_list *list);
|
||||||
|
diff --git a/src/chain.c b/src/chain.c
|
||||||
|
index c374923..22bb45c 100644
|
||||||
|
--- a/src/chain.c
|
||||||
|
+++ b/src/chain.c
|
||||||
|
@@ -925,6 +925,20 @@ int nftnl_rule_foreach(struct nftnl_chain *c,
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+EXPORT_SYMBOL(nftnl_rule_lookup_byindex);
|
||||||
|
+struct nftnl_rule *
|
||||||
|
+nftnl_rule_lookup_byindex(struct nftnl_chain *c, uint32_t index)
|
||||||
|
+{
|
||||||
|
+ struct nftnl_rule *r;
|
||||||
|
+
|
||||||
|
+ list_for_each_entry(r, &c->rule_list, head) {
|
||||||
|
+ if (!index)
|
||||||
|
+ return r;
|
||||||
|
+ index--;
|
||||||
|
+ }
|
||||||
|
+ return NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
struct nftnl_rule_iter {
|
||||||
|
const struct nftnl_chain *c;
|
||||||
|
struct nftnl_rule *cur;
|
||||||
|
@@ -1047,6 +1061,20 @@ int nftnl_chain_list_foreach(struct nftnl_chain_list *chain_list,
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+EXPORT_SYMBOL(nftnl_chain_list_lookup_byname);
|
||||||
|
+struct nftnl_chain *
|
||||||
|
+nftnl_chain_list_lookup_byname(struct nftnl_chain_list *chain_list,
|
||||||
|
+ const char *chain)
|
||||||
|
+{
|
||||||
|
+ struct nftnl_chain *c;
|
||||||
|
+
|
||||||
|
+ list_for_each_entry(c, &chain_list->list, head) {
|
||||||
|
+ if (!strcmp(chain, c->name))
|
||||||
|
+ return c;
|
||||||
|
+ }
|
||||||
|
+ return NULL;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
struct nftnl_chain_list_iter {
|
||||||
|
const struct nftnl_chain_list *list;
|
||||||
|
struct nftnl_chain *cur;
|
||||||
|
diff --git a/src/libnftnl.map b/src/libnftnl.map
|
||||||
|
index 96d5b5f..0d3be32 100644
|
||||||
|
--- a/src/libnftnl.map
|
||||||
|
+++ b/src/libnftnl.map
|
||||||
|
@@ -345,4 +345,7 @@ LIBNFTNL_12 {
|
||||||
|
nftnl_rule_iter_create;
|
||||||
|
nftnl_rule_iter_next;
|
||||||
|
nftnl_rule_iter_destroy;
|
||||||
|
+
|
||||||
|
+ nftnl_chain_list_lookup_byname;
|
||||||
|
+ nftnl_rule_lookup_byindex;
|
||||||
|
} LIBNFTNL_11;
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
143
SOURCES/0004-chain-Hash-chain-list-by-name.patch
Normal file
143
SOURCES/0004-chain-Hash-chain-list-by-name.patch
Normal file
@ -0,0 +1,143 @@
|
|||||||
|
From a3af0aff50cd3e899cb5205d4d5330a96aeffaa5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Mon, 17 Dec 2018 17:30:06 +0100
|
||||||
|
Subject: [PATCH] chain: Hash chain list by name
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1658533
|
||||||
|
Upstream Status: libnftnl commit 7170f0929ef50
|
||||||
|
|
||||||
|
commit 7170f0929ef50a1a45d9fd5d058ea6178c8e56ef
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Tue Dec 11 18:44:00 2018 +0100
|
||||||
|
|
||||||
|
chain: Hash chain list by name
|
||||||
|
|
||||||
|
Introduce a hash table to speedup nftnl_chain_list_lookup_byname(). In
|
||||||
|
theory this could replace the linked list completely but has been left
|
||||||
|
in place so that nftnl_chain_list_add_tail() still does what it's
|
||||||
|
supposed to and iterators return chains in original order.
|
||||||
|
|
||||||
|
Speed was tested using a simple script which creates a dump file
|
||||||
|
containing a number of custom chains and for each of them two rules in
|
||||||
|
INPUT chain jumping to it. The following table compares run-time of
|
||||||
|
iptables-legacy-restore with iptables-nft-restore before and after this
|
||||||
|
patch:
|
||||||
|
|
||||||
|
count legacy nft-old nft-new
|
||||||
|
----------------------------------------------
|
||||||
|
10000 26s 38s 31s
|
||||||
|
50000 137s 339s 149s
|
||||||
|
|
||||||
|
So while it is still not as quick, it now scales nicely (at least in
|
||||||
|
this very primitive test).
|
||||||
|
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
src/chain.c | 30 +++++++++++++++++++++++++++++-
|
||||||
|
1 file changed, 29 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/chain.c b/src/chain.c
|
||||||
|
index 22bb45c..ae074fd 100644
|
||||||
|
--- a/src/chain.c
|
||||||
|
+++ b/src/chain.c
|
||||||
|
@@ -32,6 +32,7 @@
|
||||||
|
|
||||||
|
struct nftnl_chain {
|
||||||
|
struct list_head head;
|
||||||
|
+ struct hlist_node hnode;
|
||||||
|
|
||||||
|
const char *name;
|
||||||
|
const char *type;
|
||||||
|
@@ -991,20 +992,27 @@ void nftnl_rule_iter_destroy(struct nftnl_rule_iter *iter)
|
||||||
|
xfree(iter);
|
||||||
|
}
|
||||||
|
|
||||||
|
+#define CHAIN_NAME_HSIZE 512
|
||||||
|
+
|
||||||
|
struct nftnl_chain_list {
|
||||||
|
+
|
||||||
|
struct list_head list;
|
||||||
|
+ struct hlist_head name_hash[CHAIN_NAME_HSIZE];
|
||||||
|
};
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(nftnl_chain_list_alloc);
|
||||||
|
struct nftnl_chain_list *nftnl_chain_list_alloc(void)
|
||||||
|
{
|
||||||
|
struct nftnl_chain_list *list;
|
||||||
|
+ int i;
|
||||||
|
|
||||||
|
list = calloc(1, sizeof(struct nftnl_chain_list));
|
||||||
|
if (list == NULL)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
INIT_LIST_HEAD(&list->list);
|
||||||
|
+ for (i = 0; i < CHAIN_NAME_HSIZE; i++)
|
||||||
|
+ INIT_HLIST_HEAD(&list->name_hash[i]);
|
||||||
|
|
||||||
|
return list;
|
||||||
|
}
|
||||||
|
@@ -1016,6 +1024,7 @@ void nftnl_chain_list_free(struct nftnl_chain_list *list)
|
||||||
|
|
||||||
|
list_for_each_entry_safe(r, tmp, &list->list, head) {
|
||||||
|
list_del(&r->head);
|
||||||
|
+ hlist_del(&r->hnode);
|
||||||
|
nftnl_chain_free(r);
|
||||||
|
}
|
||||||
|
xfree(list);
|
||||||
|
@@ -1027,15 +1036,31 @@ int nftnl_chain_list_is_empty(const struct nftnl_chain_list *list)
|
||||||
|
return list_empty(&list->list);
|
||||||
|
}
|
||||||
|
|
||||||
|
+static uint32_t djb_hash(const char *key)
|
||||||
|
+{
|
||||||
|
+ uint32_t i, hash = 5381;
|
||||||
|
+
|
||||||
|
+ for (i = 0; i < strlen(key); i++)
|
||||||
|
+ hash = ((hash << 5) + hash) + key[i];
|
||||||
|
+
|
||||||
|
+ return hash;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
EXPORT_SYMBOL(nftnl_chain_list_add);
|
||||||
|
void nftnl_chain_list_add(struct nftnl_chain *r, struct nftnl_chain_list *list)
|
||||||
|
{
|
||||||
|
+ int key = djb_hash(r->name) % CHAIN_NAME_HSIZE;
|
||||||
|
+
|
||||||
|
+ hlist_add_head(&r->hnode, &list->name_hash[key]);
|
||||||
|
list_add(&r->head, &list->list);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(nftnl_chain_list_add_tail);
|
||||||
|
void nftnl_chain_list_add_tail(struct nftnl_chain *r, struct nftnl_chain_list *list)
|
||||||
|
{
|
||||||
|
+ int key = djb_hash(r->name) % CHAIN_NAME_HSIZE;
|
||||||
|
+
|
||||||
|
+ hlist_add_head(&r->hnode, &list->name_hash[key]);
|
||||||
|
list_add_tail(&r->head, &list->list);
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -1043,6 +1068,7 @@ EXPORT_SYMBOL(nftnl_chain_list_del);
|
||||||
|
void nftnl_chain_list_del(struct nftnl_chain *r)
|
||||||
|
{
|
||||||
|
list_del(&r->head);
|
||||||
|
+ hlist_del(&r->hnode);
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(nftnl_chain_list_foreach);
|
||||||
|
@@ -1066,9 +1092,11 @@ struct nftnl_chain *
|
||||||
|
nftnl_chain_list_lookup_byname(struct nftnl_chain_list *chain_list,
|
||||||
|
const char *chain)
|
||||||
|
{
|
||||||
|
+ int key = djb_hash(chain) % CHAIN_NAME_HSIZE;
|
||||||
|
struct nftnl_chain *c;
|
||||||
|
+ struct hlist_node *n;
|
||||||
|
|
||||||
|
- list_for_each_entry(c, &chain_list->list, head) {
|
||||||
|
+ hlist_for_each_entry(c, n, &chain_list->name_hash[key], hnode) {
|
||||||
|
if (!strcmp(chain, c->name))
|
||||||
|
return c;
|
||||||
|
}
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
40
SOURCES/0005-object-Avoid-obj_ops-array-overrun.patch
Normal file
40
SOURCES/0005-object-Avoid-obj_ops-array-overrun.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
From 34e115c1a9657f07ed8a39b81c6b21fba1faa319 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Tue, 29 Jan 2019 18:12:15 +0100
|
||||||
|
Subject: [PATCH] object: Avoid obj_ops array overrun
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1661327
|
||||||
|
Upstream Status: libnftnl commit 16c44d9f42170
|
||||||
|
|
||||||
|
commit 16c44d9f42170264c4d484478c76e940951f1b70
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Thu Dec 20 21:03:27 2018 +0100
|
||||||
|
|
||||||
|
object: Avoid obj_ops array overrun
|
||||||
|
|
||||||
|
In version 1.1.1, obj_ops array was smaller than __NFT_OBJECT_MAX since
|
||||||
|
there are no ops for NFT_OBJECT_CONNLIMIT. Avoid this potential issue in
|
||||||
|
the future by defining the array size.
|
||||||
|
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
src/object.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/object.c b/src/object.c
|
||||||
|
index d8278f3..7fb9bab 100644
|
||||||
|
--- a/src/object.c
|
||||||
|
+++ b/src/object.c
|
||||||
|
@@ -25,7 +25,7 @@
|
||||||
|
#include <buffer.h>
|
||||||
|
#include "obj.h"
|
||||||
|
|
||||||
|
-static struct obj_ops *obj_ops[] = {
|
||||||
|
+static struct obj_ops *obj_ops[__NFT_OBJECT_MAX] = {
|
||||||
|
[NFT_OBJECT_COUNTER] = &obj_ops_counter,
|
||||||
|
[NFT_OBJECT_QUOTA] = &obj_ops_quota,
|
||||||
|
[NFT_OBJECT_CT_HELPER] = &obj_ops_ct_helper,
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
40
SOURCES/0006-flowtable-Add-missing-break.patch
Normal file
40
SOURCES/0006-flowtable-Add-missing-break.patch
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
From d3d9966d79cc7d6d11124302dd06b7d7522e7305 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Tue, 29 Jan 2019 18:12:15 +0100
|
||||||
|
Subject: [PATCH] flowtable: Add missing break
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1661327
|
||||||
|
Upstream Status: libnftnl commit 404ef7222d055
|
||||||
|
|
||||||
|
commit 404ef7222d055aacdbd4d73dc0d8731fa8f6cbe4
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Thu Dec 20 21:03:28 2018 +0100
|
||||||
|
|
||||||
|
flowtable: Add missing break
|
||||||
|
|
||||||
|
In nftnl_flowtable_set_data(), when setting flowtable size, the switch()
|
||||||
|
case fell through and the same value was copied into ft_flags field.
|
||||||
|
This can't be right.
|
||||||
|
|
||||||
|
Fixes: 41fe3d38ba34b ("flowtable: support for flags")
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
src/flowtable.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/src/flowtable.c b/src/flowtable.c
|
||||||
|
index c1ddae4..aa6ce59 100644
|
||||||
|
--- a/src/flowtable.c
|
||||||
|
+++ b/src/flowtable.c
|
||||||
|
@@ -163,6 +163,7 @@ int nftnl_flowtable_set_data(struct nftnl_flowtable *c, uint16_t attr,
|
||||||
|
break;
|
||||||
|
case NFTNL_FLOWTABLE_SIZE:
|
||||||
|
memcpy(&c->size, data, sizeof(c->size));
|
||||||
|
+ break;
|
||||||
|
case NFTNL_FLOWTABLE_FLAGS:
|
||||||
|
memcpy(&c->ft_flags, data, sizeof(c->ft_flags));
|
||||||
|
break;
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
57
SOURCES/0007-flowtable-Fix-use-after-free-in-two-spots.patch
Normal file
57
SOURCES/0007-flowtable-Fix-use-after-free-in-two-spots.patch
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
From 0d3f59cbe70f55f220fafd1ffff043a35a0d4503 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Tue, 29 Jan 2019 18:12:15 +0100
|
||||||
|
Subject: [PATCH] flowtable: Fix use after free in two spots
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1661327
|
||||||
|
Upstream Status: libnftnl commit 822dc96815e96
|
||||||
|
|
||||||
|
commit 822dc96815e96465822ce4b1187c4b29c06cb7c1
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Thu Dec 20 21:03:29 2018 +0100
|
||||||
|
|
||||||
|
flowtable: Fix use after free in two spots
|
||||||
|
|
||||||
|
When freeing flowtable devices array, the loop freeing each device
|
||||||
|
string incorrectly included the call to free the device array itself.
|
||||||
|
|
||||||
|
Fixes: eb58f53372e74 ("src: add flowtable support")
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
src/flowtable.c | 10 ++++------
|
||||||
|
1 file changed, 4 insertions(+), 6 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/flowtable.c b/src/flowtable.c
|
||||||
|
index aa6ce59..61ff29b 100644
|
||||||
|
--- a/src/flowtable.c
|
||||||
|
+++ b/src/flowtable.c
|
||||||
|
@@ -85,10 +85,9 @@ void nftnl_flowtable_unset(struct nftnl_flowtable *c, uint16_t attr)
|
||||||
|
case NFTNL_FLOWTABLE_FLAGS:
|
||||||
|
break;
|
||||||
|
case NFTNL_FLOWTABLE_DEVICES:
|
||||||
|
- for (i = 0; i < c->dev_array_len; i++) {
|
||||||
|
+ for (i = 0; i < c->dev_array_len; i++)
|
||||||
|
xfree(c->dev_array[i]);
|
||||||
|
- xfree(c->dev_array);
|
||||||
|
- }
|
||||||
|
+ xfree(c->dev_array);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
@@ -146,10 +145,9 @@ int nftnl_flowtable_set_data(struct nftnl_flowtable *c, uint16_t attr,
|
||||||
|
len++;
|
||||||
|
|
||||||
|
if (c->flags & (1 << NFTNL_FLOWTABLE_DEVICES)) {
|
||||||
|
- for (i = 0; i < c->dev_array_len; i++) {
|
||||||
|
+ for (i = 0; i < c->dev_array_len; i++)
|
||||||
|
xfree(c->dev_array[i]);
|
||||||
|
- xfree(c->dev_array);
|
||||||
|
- }
|
||||||
|
+ xfree(c->dev_array);
|
||||||
|
}
|
||||||
|
|
||||||
|
c->dev_array = calloc(len + 1, sizeof(char *));
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,62 @@
|
|||||||
|
From c3c2777d4b62db4b49fd3dcf8293562defa95112 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Tue, 29 Jan 2019 18:12:15 +0100
|
||||||
|
Subject: [PATCH] flowtable: Fix memleak in nftnl_flowtable_parse_devs()
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1661327
|
||||||
|
Upstream Status: libnftnl commit 8ef66870832d5
|
||||||
|
|
||||||
|
commit 8ef66870832d56881703a7798ecdff9e19917b15
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Thu Dec 20 21:03:30 2018 +0100
|
||||||
|
|
||||||
|
flowtable: Fix memleak in nftnl_flowtable_parse_devs()
|
||||||
|
|
||||||
|
Allocated strings in dev_array were not freed. Fix this by freeing them
|
||||||
|
on error path and assigning them to c->dev_array directly in regular
|
||||||
|
path.
|
||||||
|
|
||||||
|
Fixes: eb58f53372e74 ("src: add flowtable support")
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
src/flowtable.c | 10 +++++++---
|
||||||
|
1 file changed, 7 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/flowtable.c b/src/flowtable.c
|
||||||
|
index 61ff29b..1762bd1 100644
|
||||||
|
--- a/src/flowtable.c
|
||||||
|
+++ b/src/flowtable.c
|
||||||
|
@@ -364,7 +364,7 @@ static int nftnl_flowtable_parse_devs(struct nlattr *nest,
|
||||||
|
|
||||||
|
mnl_attr_for_each_nested(attr, nest) {
|
||||||
|
if (mnl_attr_get_type(attr) != NFTA_DEVICE_NAME)
|
||||||
|
- return -1;
|
||||||
|
+ goto err;
|
||||||
|
dev_array[len++] = strdup(mnl_attr_get_str(attr));
|
||||||
|
if (len >= 8)
|
||||||
|
break;
|
||||||
|
@@ -375,14 +375,18 @@ static int nftnl_flowtable_parse_devs(struct nlattr *nest,
|
||||||
|
|
||||||
|
c->dev_array = calloc(len + 1, sizeof(char *));
|
||||||
|
if (!c->dev_array)
|
||||||
|
- return -1;
|
||||||
|
+ goto err;
|
||||||
|
|
||||||
|
c->dev_array_len = len;
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++)
|
||||||
|
- c->dev_array[i] = strdup(dev_array[i]);
|
||||||
|
+ c->dev_array[i] = dev_array[i];
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
+err:
|
||||||
|
+ while (len--)
|
||||||
|
+ xfree(dev_array[len]);
|
||||||
|
+ return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int nftnl_flowtable_parse_hook(struct nlattr *attr, struct nftnl_flowtable *c)
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
49
SOURCES/0009-flowtable-Fix-for-reading-garbage.patch
Normal file
49
SOURCES/0009-flowtable-Fix-for-reading-garbage.patch
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
From 4ec80cc7d08a48a19d112da760e36fa9e47e9106 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Tue, 29 Jan 2019 18:12:15 +0100
|
||||||
|
Subject: [PATCH] flowtable: Fix for reading garbage
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1661327
|
||||||
|
Upstream Status: libnftnl commit f8eed54150fd4
|
||||||
|
|
||||||
|
commit f8eed54150fd49ed814e63a5db39eda67d4b3938
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Thu Dec 20 21:03:31 2018 +0100
|
||||||
|
|
||||||
|
flowtable: Fix for reading garbage
|
||||||
|
|
||||||
|
nftnl_flowtable_get_data() doesn't assign to passt data_len pointer
|
||||||
|
destination in all cases, so initialize it to 0.
|
||||||
|
|
||||||
|
Fixes: eb58f53372e74 ("src: add flowtable support")
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
src/flowtable.c | 4 ++--
|
||||||
|
1 file changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/flowtable.c b/src/flowtable.c
|
||||||
|
index 1762bd1..3c3ba66 100644
|
||||||
|
--- a/src/flowtable.c
|
||||||
|
+++ b/src/flowtable.c
|
||||||
|
@@ -245,7 +245,7 @@ EXPORT_SYMBOL(nftnl_flowtable_get_str);
|
||||||
|
|
||||||
|
uint32_t nftnl_flowtable_get_u32(const struct nftnl_flowtable *c, uint16_t attr)
|
||||||
|
{
|
||||||
|
- uint32_t data_len;
|
||||||
|
+ uint32_t data_len = 0;
|
||||||
|
const uint32_t *val = nftnl_flowtable_get_data(c, attr, &data_len);
|
||||||
|
|
||||||
|
nftnl_assert(val, attr, data_len == sizeof(uint32_t));
|
||||||
|
@@ -256,7 +256,7 @@ EXPORT_SYMBOL(nftnl_flowtable_get_u32);
|
||||||
|
|
||||||
|
int32_t nftnl_flowtable_get_s32(const struct nftnl_flowtable *c, uint16_t attr)
|
||||||
|
{
|
||||||
|
- uint32_t data_len;
|
||||||
|
+ uint32_t data_len = 0;
|
||||||
|
const int32_t *val = nftnl_flowtable_get_data(c, attr, &data_len);
|
||||||
|
|
||||||
|
nftnl_assert(val, attr, data_len == sizeof(int32_t));
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,72 @@
|
|||||||
|
From 36faead4c4a8ab0a87ee766bab6a062e8610067a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Tue, 29 Jan 2019 18:14:56 +0100
|
||||||
|
Subject: [PATCH] src: chain: Add missing nftnl_chain_rule_del()
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1666495
|
||||||
|
Upstream Status: libnftnl commit de5a23d26828a
|
||||||
|
|
||||||
|
commit de5a23d26828a1e1f2d3351b0414925857546496
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Sun Dec 30 17:02:13 2018 +0100
|
||||||
|
|
||||||
|
src: chain: Add missing nftnl_chain_rule_del()
|
||||||
|
|
||||||
|
Although identical to nftnl_rule_list_del(), this function adheres to
|
||||||
|
the common naming style of per chain rule list routines introduced
|
||||||
|
earlier, therefore helps with deprecating the global rule list API at a
|
||||||
|
later point.
|
||||||
|
|
||||||
|
Fixes: e33798478176f ("chain: Support per chain rules list")
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
include/libnftnl/chain.h | 1 +
|
||||||
|
src/chain.c | 6 ++++++
|
||||||
|
src/libnftnl.map | 1 +
|
||||||
|
3 files changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/include/libnftnl/chain.h b/include/libnftnl/chain.h
|
||||||
|
index 64e10e9..163a824 100644
|
||||||
|
--- a/include/libnftnl/chain.h
|
||||||
|
+++ b/include/libnftnl/chain.h
|
||||||
|
@@ -56,6 +56,7 @@ int32_t nftnl_chain_get_s32(const struct nftnl_chain *c, uint16_t attr);
|
||||||
|
uint64_t nftnl_chain_get_u64(const struct nftnl_chain *c, uint16_t attr);
|
||||||
|
|
||||||
|
void nftnl_chain_rule_add(struct nftnl_rule *rule, struct nftnl_chain *c);
|
||||||
|
+void nftnl_chain_rule_del(struct nftnl_rule *rule);
|
||||||
|
void nftnl_chain_rule_add_tail(struct nftnl_rule *rule, struct nftnl_chain *c);
|
||||||
|
void nftnl_chain_rule_insert_at(struct nftnl_rule *rule, struct nftnl_rule *pos);
|
||||||
|
|
||||||
|
diff --git a/src/chain.c b/src/chain.c
|
||||||
|
index ae074fd..6dc8f36 100644
|
||||||
|
--- a/src/chain.c
|
||||||
|
+++ b/src/chain.c
|
||||||
|
@@ -429,6 +429,12 @@ void nftnl_chain_rule_add(struct nftnl_rule *rule, struct nftnl_chain *c)
|
||||||
|
list_add(&rule->head, &c->rule_list);
|
||||||
|
}
|
||||||
|
|
||||||
|
+EXPORT_SYMBOL(nftnl_chain_rule_del);
|
||||||
|
+void nftnl_chain_rule_del(struct nftnl_rule *r)
|
||||||
|
+{
|
||||||
|
+ list_del(&r->head);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
EXPORT_SYMBOL(nftnl_chain_rule_add_tail);
|
||||||
|
void nftnl_chain_rule_add_tail(struct nftnl_rule *rule, struct nftnl_chain *c)
|
||||||
|
{
|
||||||
|
diff --git a/src/libnftnl.map b/src/libnftnl.map
|
||||||
|
index 0d3be32..0dad6a2 100644
|
||||||
|
--- a/src/libnftnl.map
|
||||||
|
+++ b/src/libnftnl.map
|
||||||
|
@@ -340,6 +340,7 @@ local: *;
|
||||||
|
LIBNFTNL_12 {
|
||||||
|
nftnl_chain_rule_add;
|
||||||
|
nftnl_chain_rule_add_tail;
|
||||||
|
+ nftnl_chain_rule_del;
|
||||||
|
nftnl_chain_rule_insert_at;
|
||||||
|
nftnl_rule_foreach;
|
||||||
|
nftnl_rule_iter_create;
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
71
SOURCES/0011-src-chain-Fix-nftnl_chain_rule_insert_at.patch
Normal file
71
SOURCES/0011-src-chain-Fix-nftnl_chain_rule_insert_at.patch
Normal file
@ -0,0 +1,71 @@
|
|||||||
|
From fca027631250013cae7323e058575deb72b8510a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Tue, 29 Jan 2019 18:14:56 +0100
|
||||||
|
Subject: [PATCH] src: chain: Fix nftnl_chain_rule_insert_at()
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1666495
|
||||||
|
Upstream Status: libnftnl commit 278a3b779a731
|
||||||
|
|
||||||
|
commit 278a3b779a731b3565595259b07b9065f6a6f425
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Mon Jan 14 17:42:50 2019 +0100
|
||||||
|
|
||||||
|
src: chain: Fix nftnl_chain_rule_insert_at()
|
||||||
|
|
||||||
|
Extrapolating from iptables nomenclature, one would expect that "insert"
|
||||||
|
means to prepend the new item to the referenced one, not append. Change
|
||||||
|
nftnl_chain_rule_insert_at() to do just that and introduce
|
||||||
|
nftnl_chain_rule_append_at() to insert a rule after the referenced one.
|
||||||
|
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
include/libnftnl/chain.h | 1 +
|
||||||
|
src/chain.c | 6 ++++++
|
||||||
|
src/libnftnl.map | 1 +
|
||||||
|
3 files changed, 8 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/include/libnftnl/chain.h b/include/libnftnl/chain.h
|
||||||
|
index 163a824..31b48cf 100644
|
||||||
|
--- a/include/libnftnl/chain.h
|
||||||
|
+++ b/include/libnftnl/chain.h
|
||||||
|
@@ -59,6 +59,7 @@ void nftnl_chain_rule_add(struct nftnl_rule *rule, struct nftnl_chain *c);
|
||||||
|
void nftnl_chain_rule_del(struct nftnl_rule *rule);
|
||||||
|
void nftnl_chain_rule_add_tail(struct nftnl_rule *rule, struct nftnl_chain *c);
|
||||||
|
void nftnl_chain_rule_insert_at(struct nftnl_rule *rule, struct nftnl_rule *pos);
|
||||||
|
+void nftnl_chain_rule_append_at(struct nftnl_rule *rule, struct nftnl_rule *pos);
|
||||||
|
|
||||||
|
struct nlmsghdr;
|
||||||
|
|
||||||
|
diff --git a/src/chain.c b/src/chain.c
|
||||||
|
index 6dc8f36..7326c2a 100644
|
||||||
|
--- a/src/chain.c
|
||||||
|
+++ b/src/chain.c
|
||||||
|
@@ -444,6 +444,12 @@ void nftnl_chain_rule_add_tail(struct nftnl_rule *rule, struct nftnl_chain *c)
|
||||||
|
EXPORT_SYMBOL(nftnl_chain_rule_insert_at);
|
||||||
|
void nftnl_chain_rule_insert_at(struct nftnl_rule *rule, struct nftnl_rule *pos)
|
||||||
|
{
|
||||||
|
+ list_add_tail(&rule->head, &pos->head);
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+EXPORT_SYMBOL(nftnl_chain_rule_append_at);
|
||||||
|
+void nftnl_chain_rule_append_at(struct nftnl_rule *rule, struct nftnl_rule *pos)
|
||||||
|
+{
|
||||||
|
list_add(&rule->head, &pos->head);
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/libnftnl.map b/src/libnftnl.map
|
||||||
|
index 0dad6a2..192eef8 100644
|
||||||
|
--- a/src/libnftnl.map
|
||||||
|
+++ b/src/libnftnl.map
|
||||||
|
@@ -342,6 +342,7 @@ LIBNFTNL_12 {
|
||||||
|
nftnl_chain_rule_add_tail;
|
||||||
|
nftnl_chain_rule_del;
|
||||||
|
nftnl_chain_rule_insert_at;
|
||||||
|
+ nftnl_chain_rule_append_at;
|
||||||
|
nftnl_rule_foreach;
|
||||||
|
nftnl_rule_iter_create;
|
||||||
|
nftnl_rule_iter_next;
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
@ -0,0 +1,150 @@
|
|||||||
|
From 3eb9b26b8b79b0bd5b153cfdad8eb10c86ae2b64 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Phil Sutter <psutter@redhat.com>
|
||||||
|
Date: Thu, 31 Jan 2019 19:03:53 +0100
|
||||||
|
Subject: [PATCH] src: rule: Support NFTA_RULE_POSITION_ID attribute
|
||||||
|
|
||||||
|
Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=1670565
|
||||||
|
Upstream Status: libnftnl commit 7a7137adf6c14
|
||||||
|
|
||||||
|
commit 7a7137adf6c143f7cccc6440a5340a43033b61e7
|
||||||
|
Author: Phil Sutter <phil@nwl.cc>
|
||||||
|
Date: Tue Jan 15 20:59:04 2019 +0100
|
||||||
|
|
||||||
|
src: rule: Support NFTA_RULE_POSITION_ID attribute
|
||||||
|
|
||||||
|
Signed-off-by: Phil Sutter <phil@nwl.cc>
|
||||||
|
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
|
||||||
|
---
|
||||||
|
include/libnftnl/rule.h | 1 +
|
||||||
|
include/linux/netfilter/nf_tables.h | 2 ++
|
||||||
|
include/rule.h | 1 +
|
||||||
|
src/rule.c | 20 ++++++++++++++++++++
|
||||||
|
4 files changed, 24 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/include/libnftnl/rule.h b/include/libnftnl/rule.h
|
||||||
|
index 8501c86..78bfead 100644
|
||||||
|
--- a/include/libnftnl/rule.h
|
||||||
|
+++ b/include/libnftnl/rule.h
|
||||||
|
@@ -28,6 +28,7 @@ enum nftnl_rule_attr {
|
||||||
|
NFTNL_RULE_POSITION,
|
||||||
|
NFTNL_RULE_USERDATA,
|
||||||
|
NFTNL_RULE_ID,
|
||||||
|
+ NFTNL_RULE_POSITION_ID,
|
||||||
|
__NFTNL_RULE_MAX
|
||||||
|
};
|
||||||
|
#define NFTNL_RULE_MAX (__NFTNL_RULE_MAX - 1)
|
||||||
|
diff --git a/include/linux/netfilter/nf_tables.h b/include/linux/netfilter/nf_tables.h
|
||||||
|
index 91449ef..adfae98 100644
|
||||||
|
--- a/include/linux/netfilter/nf_tables.h
|
||||||
|
+++ b/include/linux/netfilter/nf_tables.h
|
||||||
|
@@ -218,6 +218,7 @@ enum nft_chain_attributes {
|
||||||
|
* @NFTA_RULE_POSITION: numeric handle of the previous rule (NLA_U64)
|
||||||
|
* @NFTA_RULE_USERDATA: user data (NLA_BINARY, NFT_USERDATA_MAXLEN)
|
||||||
|
* @NFTA_RULE_ID: uniquely identifies a rule in a transaction (NLA_U32)
|
||||||
|
+ * @NFTA_RULE_POSITION_ID: transaction unique identifier of the previous rule (NLA_U32)
|
||||||
|
*/
|
||||||
|
enum nft_rule_attributes {
|
||||||
|
NFTA_RULE_UNSPEC,
|
||||||
|
@@ -230,6 +231,7 @@ enum nft_rule_attributes {
|
||||||
|
NFTA_RULE_USERDATA,
|
||||||
|
NFTA_RULE_PAD,
|
||||||
|
NFTA_RULE_ID,
|
||||||
|
+ NFTA_RULE_POSITION_ID,
|
||||||
|
__NFTA_RULE_MAX
|
||||||
|
};
|
||||||
|
#define NFTA_RULE_MAX (__NFTA_RULE_MAX - 1)
|
||||||
|
diff --git a/include/rule.h b/include/rule.h
|
||||||
|
index 5edcb6c..036c722 100644
|
||||||
|
--- a/include/rule.h
|
||||||
|
+++ b/include/rule.h
|
||||||
|
@@ -11,6 +11,7 @@ struct nftnl_rule {
|
||||||
|
uint64_t handle;
|
||||||
|
uint64_t position;
|
||||||
|
uint32_t id;
|
||||||
|
+ uint32_t position_id;
|
||||||
|
struct {
|
||||||
|
void *data;
|
||||||
|
uint32_t len;
|
||||||
|
diff --git a/src/rule.c b/src/rule.c
|
||||||
|
index 6a43d3e..d9b97b6 100644
|
||||||
|
--- a/src/rule.c
|
||||||
|
+++ b/src/rule.c
|
||||||
|
@@ -87,6 +87,7 @@ void nftnl_rule_unset(struct nftnl_rule *r, uint16_t attr)
|
||||||
|
case NFTNL_RULE_POSITION:
|
||||||
|
case NFTNL_RULE_FAMILY:
|
||||||
|
case NFTNL_RULE_ID:
|
||||||
|
+ case NFTNL_RULE_POSITION_ID:
|
||||||
|
break;
|
||||||
|
case NFTNL_RULE_USERDATA:
|
||||||
|
xfree(r->user.data);
|
||||||
|
@@ -103,6 +104,7 @@ static uint32_t nftnl_rule_validate[NFTNL_RULE_MAX + 1] = {
|
||||||
|
[NFTNL_RULE_FAMILY] = sizeof(uint32_t),
|
||||||
|
[NFTNL_RULE_POSITION] = sizeof(uint64_t),
|
||||||
|
[NFTNL_RULE_ID] = sizeof(uint32_t),
|
||||||
|
+ [NFTNL_RULE_POSITION_ID] = sizeof(uint32_t),
|
||||||
|
};
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(nftnl_rule_set_data);
|
||||||
|
@@ -158,6 +160,9 @@ int nftnl_rule_set_data(struct nftnl_rule *r, uint16_t attr,
|
||||||
|
case NFTNL_RULE_ID:
|
||||||
|
r->id = *((uint32_t *)data);
|
||||||
|
break;
|
||||||
|
+ case NFTNL_RULE_POSITION_ID:
|
||||||
|
+ memcpy(&r->position_id, data, sizeof(r->position_id));
|
||||||
|
+ break;
|
||||||
|
}
|
||||||
|
r->flags |= (1 << attr);
|
||||||
|
return 0;
|
||||||
|
@@ -222,6 +227,9 @@ const void *nftnl_rule_get_data(const struct nftnl_rule *r, uint16_t attr,
|
||||||
|
case NFTNL_RULE_ID:
|
||||||
|
*data_len = sizeof(uint32_t);
|
||||||
|
return &r->id;
|
||||||
|
+ case NFTNL_RULE_POSITION_ID:
|
||||||
|
+ *data_len = sizeof(uint32_t);
|
||||||
|
+ return &r->position_id;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
@@ -313,6 +321,8 @@ void nftnl_rule_nlmsg_build_payload(struct nlmsghdr *nlh, struct nftnl_rule *r)
|
||||||
|
}
|
||||||
|
if (r->flags & (1 << NFTNL_RULE_ID))
|
||||||
|
mnl_attr_put_u32(nlh, NFTA_RULE_ID, htonl(r->id));
|
||||||
|
+ if (r->flags & (1 << NFTNL_RULE_POSITION_ID))
|
||||||
|
+ mnl_attr_put_u32(nlh, NFTA_RULE_POSITION_ID, htonl(r->position_id));
|
||||||
|
}
|
||||||
|
|
||||||
|
EXPORT_SYMBOL(nftnl_rule_add_expr);
|
||||||
|
@@ -352,6 +362,7 @@ static int nftnl_rule_parse_attr_cb(const struct nlattr *attr, void *data)
|
||||||
|
abi_breakage();
|
||||||
|
break;
|
||||||
|
case NFTA_RULE_ID:
|
||||||
|
+ case NFTA_RULE_POSITION_ID:
|
||||||
|
if (mnl_attr_validate(attr, MNL_TYPE_U32) < 0)
|
||||||
|
abi_breakage();
|
||||||
|
break;
|
||||||
|
@@ -483,6 +494,10 @@ int nftnl_rule_nlmsg_parse(const struct nlmsghdr *nlh, struct nftnl_rule *r)
|
||||||
|
r->id = ntohl(mnl_attr_get_u32(tb[NFTA_RULE_ID]));
|
||||||
|
r->flags |= (1 << NFTNL_RULE_ID);
|
||||||
|
}
|
||||||
|
+ if (tb[NFTA_RULE_POSITION_ID]) {
|
||||||
|
+ r->position_id = ntohl(mnl_attr_get_u32(tb[NFTA_RULE_POSITION_ID]));
|
||||||
|
+ r->flags |= (1 << NFTNL_RULE_POSITION_ID);
|
||||||
|
+ }
|
||||||
|
|
||||||
|
r->family = nfg->nfgen_family;
|
||||||
|
r->flags |= (1 << NFTNL_RULE_FAMILY);
|
||||||
|
@@ -729,6 +744,11 @@ static int nftnl_rule_snprintf_default(char *buf, size_t size,
|
||||||
|
SNPRINTF_BUFFER_SIZE(ret, remain, offset);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (r->flags & (1 << NFTNL_RULE_POSITION_ID)) {
|
||||||
|
+ ret = snprintf(buf + offset, remain, "%u ", r->position_id);
|
||||||
|
+ SNPRINTF_BUFFER_SIZE(ret, remain, offset);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
ret = snprintf(buf + offset, remain, "\n");
|
||||||
|
SNPRINTF_BUFFER_SIZE(ret, remain, offset);
|
||||||
|
|
||||||
|
--
|
||||||
|
1.8.3.1
|
||||||
|
|
189
SPECS/libnftnl.spec
Normal file
189
SPECS/libnftnl.spec
Normal file
@ -0,0 +1,189 @@
|
|||||||
|
%define rpmversion 1.1.1
|
||||||
|
%define specrelease 4%{?dist}
|
||||||
|
|
||||||
|
Name: libnftnl
|
||||||
|
Version: %{rpmversion}
|
||||||
|
Release: %{specrelease}%{?buildid}
|
||||||
|
Summary: Library for low-level interaction with nftables Netlink's API over libmnl
|
||||||
|
License: GPLv2+
|
||||||
|
URL: http://netfilter.org/projects/libnftnl/
|
||||||
|
Source0: http://ftp.netfilter.org/pub/libnftnl/libnftnl-%{version}.tar.bz2
|
||||||
|
BuildRequires: autoconf
|
||||||
|
BuildRequires: automake
|
||||||
|
BuildRequires: libtool
|
||||||
|
BuildRequires: libmnl-devel
|
||||||
|
Patch0: 0001-src-remove-nftnl_rule_cmp-and-nftnl_expr_cmp.patch
|
||||||
|
Patch1: 0002-chain-Support-per-chain-rules-list.patch
|
||||||
|
Patch2: 0003-chain-Add-lookup-functions-for-chain-list-and-rules-.patch
|
||||||
|
Patch3: 0004-chain-Hash-chain-list-by-name.patch
|
||||||
|
Patch4: 0005-object-Avoid-obj_ops-array-overrun.patch
|
||||||
|
Patch5: 0006-flowtable-Add-missing-break.patch
|
||||||
|
Patch6: 0007-flowtable-Fix-use-after-free-in-two-spots.patch
|
||||||
|
Patch7: 0008-flowtable-Fix-memleak-in-nftnl_flowtable_parse_devs.patch
|
||||||
|
Patch8: 0009-flowtable-Fix-for-reading-garbage.patch
|
||||||
|
Patch9: 0010-src-chain-Add-missing-nftnl_chain_rule_del.patch
|
||||||
|
Patch10: 0011-src-chain-Fix-nftnl_chain_rule_insert_at.patch
|
||||||
|
Patch11: 0012-src-rule-Support-NFTA_RULE_POSITION_ID-attribute.patch
|
||||||
|
|
||||||
|
%description
|
||||||
|
A library for low-level interaction with nftables Netlink's API over libmnl.
|
||||||
|
|
||||||
|
%package devel
|
||||||
|
Summary: Development files for %{name}
|
||||||
|
Requires: %{name}%{_isa} = %{version}-%{release}
|
||||||
|
|
||||||
|
%description devel
|
||||||
|
The %{name}-devel package contains libraries and header files for
|
||||||
|
developing applications that use %{name}.
|
||||||
|
|
||||||
|
%prep
|
||||||
|
%autosetup -p1
|
||||||
|
|
||||||
|
%build
|
||||||
|
# This is what autogen.sh (only in git repo) does - without it, patches changing
|
||||||
|
# Makefile.am cause the build system to regenerate Makefile.in and trying to use
|
||||||
|
# automake-1.14 for that which is not available in RHEL.
|
||||||
|
autoreconf -fi
|
||||||
|
rm -rf autom4te*.cache
|
||||||
|
|
||||||
|
%configure --disable-static --disable-silent-rules
|
||||||
|
make %{?_smp_mflags}
|
||||||
|
|
||||||
|
%check
|
||||||
|
make %{?_smp_mflags} check
|
||||||
|
cd tests
|
||||||
|
# JSON parsing would fail since it's not compiled in, so disable here
|
||||||
|
sed -i -e '/^\.\/nft-parsing-test /d' test-script.sh
|
||||||
|
sh ./test-script.sh
|
||||||
|
|
||||||
|
%install
|
||||||
|
%make_install
|
||||||
|
find $RPM_BUILD_ROOT -name '*.la' -exec rm -f {} ';'
|
||||||
|
|
||||||
|
%post -p /sbin/ldconfig
|
||||||
|
|
||||||
|
%postun -p /sbin/ldconfig
|
||||||
|
|
||||||
|
%files
|
||||||
|
%doc COPYING
|
||||||
|
%{_libdir}/*.so.*
|
||||||
|
|
||||||
|
%files devel
|
||||||
|
%{_libdir}/libnft*.so
|
||||||
|
%{_libdir}/pkgconfig/libnftnl.pc
|
||||||
|
%{_includedir}/libnftnl
|
||||||
|
|
||||||
|
%changelog
|
||||||
|
* Thu Jan 31 2019 Phil Sutter <psutter@redhat.com> [1.1.1-4.el8]
|
||||||
|
- src: rule: Support NFTA_RULE_POSITION_ID attribute (Phil Sutter) [1670565]
|
||||||
|
|
||||||
|
* Tue Jan 29 2019 Phil Sutter <psutter@redhat.com> [1.1.1-3.el8]
|
||||||
|
- src: chain: Fix nftnl_chain_rule_insert_at() (Phil Sutter) [1666495]
|
||||||
|
- src: chain: Add missing nftnl_chain_rule_del() (Phil Sutter) [1666495]
|
||||||
|
- flowtable: Fix for reading garbage (Phil Sutter) [1661327]
|
||||||
|
- flowtable: Fix memleak in nftnl_flowtable_parse_devs() (Phil Sutter) [1661327]
|
||||||
|
- flowtable: Fix use after free in two spots (Phil Sutter) [1661327]
|
||||||
|
- flowtable: Add missing break (Phil Sutter) [1661327]
|
||||||
|
- object: Avoid obj_ops array overrun (Phil Sutter) [1661327]
|
||||||
|
|
||||||
|
* Mon Dec 17 2018 Phil Sutter <psutter@redhat.com> [1.1.1-2.el8]
|
||||||
|
- chain: Hash chain list by name (Phil Sutter) [1658533]
|
||||||
|
- chain: Add lookup functions for chain list and rules in chain (Phil Sutter) [1658533]
|
||||||
|
- chain: Support per chain rules list (Phil Sutter) [1658533]
|
||||||
|
- src: remove nftnl_rule_cmp() and nftnl_expr_cmp() (Phil Sutter) [1658533]
|
||||||
|
|
||||||
|
* Thu Jul 12 2018 Phil Sutter <psutter@redhat.com> [1.1.1-1.el8]
|
||||||
|
- Rebase onto upstream version 1.1.1
|
||||||
|
- Sync spec file with RHEL7
|
||||||
|
- Disable JSON parsing, deprecated by upstream
|
||||||
|
- Make use of builtin testsuite
|
||||||
|
|
||||||
|
* Sat Jun 23 2018 Phil Sutter - 1.0.9-3
|
||||||
|
- Drop leftover mxml dependency [1594917]
|
||||||
|
|
||||||
|
* Wed Feb 07 2018 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.9-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_28_Mass_Rebuild
|
||||||
|
|
||||||
|
* Mon Jan 08 2018 Kevin Fenzi <kevin@scrye.com> - 1.0.9-1
|
||||||
|
- Update to 1.0.9. Fixes bug #1531004
|
||||||
|
|
||||||
|
* Sat Oct 21 2017 Kevin Fenzi <kevin@scrye.com> - 1.0.8-4
|
||||||
|
- Update to 1.0.8. Fixes bug #1504350
|
||||||
|
|
||||||
|
* Thu Aug 03 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.7-4
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Binutils_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Jul 26 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.7-3
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_27_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Feb 10 2017 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.7-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_26_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Dec 22 2016 Kevin Fenzi <kevin@scrye.com> - 1.0.7-1
|
||||||
|
- Update to 1.0.7. Fixes bug #1406201
|
||||||
|
|
||||||
|
* Wed Jun 01 2016 Kevin Fenzi <kevin@scrye.com> - 1.0.6-1
|
||||||
|
- Update to 1.0.6. Fixes bug #1341384
|
||||||
|
|
||||||
|
* Thu Feb 04 2016 Fedora Release Engineering <releng@fedoraproject.org> - 1.0.5-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_24_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Sep 17 2015 Kevin Fenzi <kevin@scrye.com> 1.0.5-1
|
||||||
|
- Update to 1.0.5. Fixes bug #1263684
|
||||||
|
|
||||||
|
* Wed Jun 17 2015 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.3-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_23_Mass_Rebuild
|
||||||
|
|
||||||
|
* Fri Dec 26 2014 Kevin Fenzi <kevin@scrye.com> 1.0.3-1
|
||||||
|
- Update to final 1.0.3
|
||||||
|
|
||||||
|
* Wed Sep 03 2014 Kevin Fenzi <kevin@scrye.com> 1.0.3-0.1.20140903git
|
||||||
|
- Update to 20140903 git snapshot
|
||||||
|
|
||||||
|
* Sun Aug 17 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.2-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_22_Mass_Rebuild
|
||||||
|
|
||||||
|
* Wed Jun 25 2014 Kevin Fenzi <kevin@scrye.com> 1.0.2-1
|
||||||
|
- Update to 1.0.2
|
||||||
|
|
||||||
|
* Sat Jun 07 2014 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.0.1-2
|
||||||
|
- Rebuilt for https://fedoraproject.org/wiki/Fedora_21_Mass_Rebuild
|
||||||
|
|
||||||
|
* Thu Apr 24 2014 Kevin Fenzi <kevin@scrye.com> 1.0.1-1.
|
||||||
|
- Update to 1.0.1
|
||||||
|
|
||||||
|
* Sun Mar 30 2014 Kevin Fenzi <kevin@scrye.com> 1.0.0-1.20140330git
|
||||||
|
- Update to 20140330 snapshot
|
||||||
|
- Sync version to be a post 1.0.0 snapshot
|
||||||
|
|
||||||
|
* Wed Mar 26 2014 Kevin Fenzi <kevin@scrye.com> 0-0.10.20140326git
|
||||||
|
- Update to 20140326 snapshot
|
||||||
|
|
||||||
|
* Fri Mar 07 2014 Kevin Fenzi <kevin@scrye.com> 0-0.9.20140307git
|
||||||
|
- Update to 20140307 snapshot
|
||||||
|
|
||||||
|
* Sat Jan 25 2014 Kevin Fenzi <kevin@scrye.com> 0-0.8.20140125git
|
||||||
|
- Update to 20140125
|
||||||
|
|
||||||
|
* Thu Jan 23 2014 Kevin Fenzi <kevin@scrye.com> 0-0.7.20140122git
|
||||||
|
- Add obsoletes/provides to devel subpackage as well.
|
||||||
|
|
||||||
|
* Wed Jan 22 2014 Kevin Fenzi <kevin@scrye.com> 0-0.6.20140122git
|
||||||
|
- Renamed libnftnl
|
||||||
|
- Update to 20140122 snapshot.
|
||||||
|
|
||||||
|
* Sat Jan 18 2014 Kevin Fenzi <kevin@scrye.com> 0-0.5.20140118git
|
||||||
|
- Update to 20140118 snapshot.
|
||||||
|
|
||||||
|
* Sat Jan 11 2014 Kevin Fenzi <kevin@scrye.com> 0-0.4.20140111git
|
||||||
|
- Update to 20140111 snapshot.
|
||||||
|
- Enable xml (some tests stll fail, but it otherwise builds ok)
|
||||||
|
|
||||||
|
* Mon Dec 02 2013 Kevin Fenzi <kevin@scrye.com> 0-0.3.20131202git
|
||||||
|
- Update to 20131202 snapshot, switch to upstream snapshot repo instead of git checkouts.
|
||||||
|
|
||||||
|
* Mon Dec 02 2013 Kevin Fenzi <kevin@scrye.com> 0-0.2
|
||||||
|
- Fixes from review.
|
||||||
|
|
||||||
|
* Sat Nov 30 2013 Kevin Fenzi <kevin@scrye.com> 0-0.1
|
||||||
|
- initial version for Fedora review
|
Loading…
Reference in New Issue
Block a user