netdev
[Top] [All Lists]

[PATCH] Destructor patch for iptables

To: torvalds@xxxxxxxxxxxxx
Subject: [PATCH] Destructor patch for iptables
From: Rusty Russell <rusty@xxxxxxxxxxxxxxxx>
Date: Thu, 27 Apr 2000 19:30:35 +0930
Cc: netdev@xxxxxxxxxxx, netfilter@xxxxxxxxxxxxxxx
Sender: owner-netdev@xxxxxxxxxxx
Linus, please apply v2.3.99-pre6

Some people are writing funky iptables extensions which require
destructors on rules.  I didn't need them before, so didn't implement
them before.

Rusty.
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/include/linux/netfilter_ipv4/ip_tables.h 
working/include/linux/netfilter_ipv4/ip_tables.h
--- linux-2.3.99-pre-6-2-rusty/include/linux/netfilter_ipv4/ip_tables.h Mon Apr 
17 21:59:34 2000
+++ working/include/linux/netfilter_ipv4/ip_tables.h    Wed Apr 19 15:28:49 2000
@@ -346,6 +346,9 @@
                          unsigned int matchinfosize,
                          unsigned int hook_mask);
 
+       /* Called when entry of this type deleted. */
+       void (*destroy)(void *matchinfo, unsigned int matchinfosize);
+
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
 };
@@ -374,6 +377,9 @@
                          void *targinfo,
                          unsigned int targinfosize,
                          unsigned int hook_mask);
+
+       /* Called when entry of this type deleted. */
+       void (*destroy)(void *targinfo, unsigned int targinfosize);
 
        /* Set this to THIS_MODULE if you are a module, otherwise NULL */
        struct module *me;
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ip_tables.c 
working/net/ipv4/netfilter/ip_tables.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ip_tables.c   Fri Apr 14 
17:41:01 2000
+++ working/net/ipv4/netfilter/ip_tables.c      Wed Apr 19 15:35:04 2000
@@ -589,6 +589,9 @@
        if (i && (*i)-- == 0)
                return 1;
 
+       if (m->u.match->destroy)
+               m->u.match->destroy(m->data, m->match_size - sizeof(*m));
+
        if (m->u.match->me)
                __MOD_DEC_USE_COUNT(m->u.match->me);
 
@@ -769,6 +772,8 @@
        /* Cleanup all matches */
        IPT_MATCH_ITERATE(e, cleanup_match, NULL);
        t = ipt_get_target(e);
+       if (t->u.target->destroy)
+               t->u.target->destroy(t->data, t->target_size - sizeof(*t));
        if (t->u.target->me)
                __MOD_DEC_USE_COUNT(t->u.target->me);
 
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_LOG.c 
working/net/ipv4/netfilter/ipt_LOG.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_LOG.c     Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_LOG.c        Wed Apr 19 19:35:25 2000
@@ -345,7 +345,8 @@
 }
 
 static struct ipt_target ipt_log_reg
-= { { NULL, NULL }, "LOG", ipt_log_target, ipt_log_checkentry, THIS_MODULE };
+= { { NULL, NULL }, "LOG", ipt_log_target, ipt_log_checkentry, NULL, 
+    THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_MARK.c 
working/net/ipv4/netfilter/ipt_MARK.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_MARK.c    Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_MARK.c       Wed Apr 19 19:35:28 2000
@@ -47,7 +47,7 @@
 }
 
 static struct ipt_target ipt_mark_reg
-= { { NULL, NULL }, "MARK", target, checkentry, THIS_MODULE };
+= { { NULL, NULL }, "MARK", target, checkentry, NULL, THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_MASQUERADE.c 
working/net/ipv4/netfilter/ipt_MASQUERADE.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_MASQUERADE.c      Wed Apr 
12 17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_MASQUERADE.c Sun Apr 23 23:38:40 2000
@@ -142,7 +142,7 @@
 };
 
 static struct ipt_target masquerade
-= { { NULL, NULL }, "MASQUERADE", masquerade_target, masquerade_check,
+= { { NULL, NULL }, "MASQUERADE", masquerade_target, masquerade_check, NULL,
     THIS_MODULE };
 
 static int __init init(void)
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_MIRROR.c 
working/net/ipv4/netfilter/ipt_MIRROR.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_MIRROR.c  Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_MIRROR.c     Wed Apr 19 19:36:27 2000
@@ -113,7 +113,7 @@
 }
 
 static struct ipt_target ipt_mirror_reg
-= { { NULL, NULL }, "MIRROR", ipt_mirror_target, ipt_mirror_checkentry,
+= { { NULL, NULL }, "MIRROR", ipt_mirror_target, ipt_mirror_checkentry, NULL,
     THIS_MODULE };
 
 static int __init init(void)
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_REDIRECT.c 
working/net/ipv4/netfilter/ipt_REDIRECT.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_REDIRECT.c        Wed Apr 
12 17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_REDIRECT.c   Wed Apr 19 19:35:44 2000
@@ -86,7 +86,8 @@
 }
 
 static struct ipt_target redirect_reg
-= { { NULL, NULL }, "REDIRECT", redirect_target, redirect_check, THIS_MODULE };
+= { { NULL, NULL }, "REDIRECT", redirect_target, redirect_check, NULL,
+    THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_REJECT.c 
working/net/ipv4/netfilter/ipt_REJECT.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_REJECT.c  Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_REJECT.c     Wed Apr 19 19:35:49 2000
@@ -120,7 +120,7 @@
 }
 
 static struct ipt_target ipt_reject_reg
-= { { NULL, NULL }, "REJECT", reject, check, THIS_MODULE };
+= { { NULL, NULL }, "REJECT", reject, check, NULL, THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_TOS.c 
working/net/ipv4/netfilter/ipt_TOS.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_TOS.c     Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_TOS.c        Wed Apr 19 19:35:52 2000
@@ -66,7 +66,7 @@
 }
 
 static struct ipt_target ipt_tos_reg
-= { { NULL, NULL }, "TOS", target, checkentry, THIS_MODULE };
+= { { NULL, NULL }, "TOS", target, checkentry, NULL, THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_limit.c 
working/net/ipv4/netfilter/ipt_limit.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_limit.c   Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_limit.c      Wed Apr 19 18:13:04 2000
@@ -124,7 +124,7 @@
 }
 
 static struct ipt_match ipt_limit_reg
-= { { NULL, NULL }, "limit", ipt_limit_match, ipt_limit_checkentry,
+= { { NULL, NULL }, "limit", ipt_limit_match, ipt_limit_checkentry, NULL,
     THIS_MODULE };
 
 static int __init init(void)
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_mac.c 
working/net/ipv4/netfilter/ipt_mac.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_mac.c     Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_mac.c        Wed Apr 19 19:35:56 2000
@@ -46,7 +46,7 @@
 }
 
 static struct ipt_match mac_match
-= { { NULL, NULL }, "mac", &match, &ipt_mac_checkentry, THIS_MODULE };
+= { { NULL, NULL }, "mac", &match, &ipt_mac_checkentry, NULL, THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_mark.c 
working/net/ipv4/netfilter/ipt_mark.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_mark.c    Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_mark.c       Wed Apr 19 19:35:59 2000
@@ -34,7 +34,7 @@
 }
 
 static struct ipt_match mark_match
-= { { NULL, NULL }, "mark", &match, &checkentry, THIS_MODULE };
+= { { NULL, NULL }, "mark", &match, &checkentry, NULL, THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_multiport.c 
working/net/ipv4/netfilter/ipt_multiport.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_multiport.c       Wed Apr 
12 17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_multiport.c  Wed Apr 19 19:36:02 2000
@@ -84,7 +84,7 @@
 }
 
 static struct ipt_match multiport_match
-= { { NULL, NULL }, "multiport", &match, &checkentry, THIS_MODULE };
+= { { NULL, NULL }, "multiport", &match, &checkentry, NULL, THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_owner.c 
working/net/ipv4/netfilter/ipt_owner.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_owner.c   Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_owner.c      Wed Apr 19 19:36:05 2000
@@ -118,7 +118,7 @@
 }
 
 static struct ipt_match owner_match
-= { { NULL, NULL }, "owner", &match, &checkentry, THIS_MODULE };
+= { { NULL, NULL }, "owner", &match, &checkentry, NULL, THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_state.c 
working/net/ipv4/netfilter/ipt_state.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_state.c   Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_state.c      Wed Apr 19 19:36:08 2000
@@ -42,7 +42,7 @@
 }
 
 static struct ipt_match state_match
-= { { NULL, NULL }, "state", &match, &check, THIS_MODULE };
+= { { NULL, NULL }, "state", &match, &check, NULL, THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_tos.c 
working/net/ipv4/netfilter/ipt_tos.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_tos.c     Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_tos.c        Wed Apr 19 19:36:10 2000
@@ -35,7 +35,7 @@
 }
 
 static struct ipt_match tos_match
-= { { NULL, NULL }, "tos", &match, &checkentry, THIS_MODULE };
+= { { NULL, NULL }, "tos", &match, &checkentry, NULL, THIS_MODULE };
 
 static int __init init(void)
 {
diff -urN --minimal --exclude *.lds --exclude *.ps --exclude *.pdf --exclude 
*.sgml --exclude *.tex --exclude *.aux --exclude *.log --exclude classlist.h 
--exclude devlist.h --exclude autoconf.h --exclude compile.h --exclude 
version.h --exclude .* --exclude *.[oa] --exclude *.orig --exclude config 
--exclude asm --exclude modules --exclude *.[Ss] --exclude System.map --exclude 
consolemap_deftbl.c --exclude *~ --exclude TAGS --exclude tags --exclude 
modversions.h --exclude install-kernel 
linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_unclean.c 
working/net/ipv4/netfilter/ipt_unclean.c
--- linux-2.3.99-pre-6-2-rusty/net/ipv4/netfilter/ipt_unclean.c Wed Apr 12 
17:13:07 2000
+++ working/net/ipv4/netfilter/ipt_unclean.c    Wed Apr 19 19:36:14 2000
@@ -558,7 +558,7 @@
 }
 
 static struct ipt_match unclean_match
-= { { NULL, NULL }, "unclean", &match, &checkentry, THIS_MODULE };
+= { { NULL, NULL }, "unclean", &match, &checkentry, NULL, THIS_MODULE };
 
 static int __init init(void)
 {
--
Hacking time.

<Prev in Thread] Current Thread [Next in Thread>
  • [PATCH] Destructor patch for iptables, Rusty Russell <=