Xtables-addons is different from patch-o-matic in that you do not have
to patch or recompile either kernel or Xtables(iptables). But please
see the INSTALL file for the minimum requirements of this package.
+
+
+External extensions
+===================
+
+The program "xa-download-more" can be used to download more extensions
+from 3rd parties into the source tree. The URLs are listed in the
+"sources" file. If the "sources" file contains an entry like
+
+ http://foobar.org/xa/
+
+xa-download-more will inspect http://foobar.org/xa/xa-index.txt for files
+to download. That file may contain
+
+ foobar.tar.bz2
+
+and xa-download-more will then retrieve and unpack
+http://foobar.org/xa/foobar.tar.bz2.
+
+Files that should be contained in the tarball are an mconfig and Kbuild
+files to control building the extension, libxt_foobar.c for the userspace
+extension and xt_foobar.c for the kernel extension.
+
+ mconfig.foobar
+ extensions/Kbuild.foobar
+ extensions/libxt_foobar.c
+ extensions/libxt_foobar.man
+ extensions/xt_foobar.c
+ extensions/xt_foobar.h
--- /dev/null
+#!/usr/bin/perl -w
+
+use HTTP::Request;
+use LWP::UserAgent;
+use strict;
+
+&main(\@ARGV);
+
+sub main ($)
+{
+ local *FH;
+
+ if (!-d "downloads") {
+ if (!mkdir("downloads")) {
+ die "Could not create downloads/ directory";
+ }
+ }
+
+ open(FH, "<sources");
+ while (defined($_ = <FH>)) {
+ chomp $_;
+ $_ =~ s/#.*//gs;
+ $_ =~ s/^\s+|\s+$//gs;
+ if (length($_) == 0) {
+ next;
+ }
+ &process_index($_);
+ }
+
+ close FH;
+}
+
+sub process_index ($)
+{
+ my $top = shift @_;
+ my($agent, $res, $url);
+ local *FH;
+
+ $agent = LWP::UserAgent->new();
+ $agent->env_proxy();
+
+ $url = &slash_remove("$top/xa-index.txt");
+ print " GET $url\n";
+ $res = $agent->get($url);
+ if (!$res->is_success()) {
+ print STDERR " `-> ", $res->status_line(), "\n";
+ return;
+ }
+
+ foreach my $ext (split(/\s+/, $res->content())) {
+ my($ex_url, $ex_res);
+
+ $ex_url = &slash_remove("$top/$ext");
+ print " GET $ex_url\n";
+
+ $ex_res = $agent->mirror($ex_url, "downloads/$ext");
+ if ($ex_res->code() == 304) {
+ # "Not modified" = up to date
+ next;
+ }
+ if (!$ex_res->is_success()) {
+ print STDERR " `-> ", $ex_res->status_line(), "\n";
+ next;
+ }
+
+ print " UNPACK downloads/$ext\n";
+ system "tar", "-xjf", "downloads/$ext";
+ }
+}
+
+sub slash_remove ($)
+{
+ my $s = shift @_;
+ $s =~ s{(\w+://)(.*)}{$1.&slash_remove2($2)}eg;
+ return $s;
+}
+
+sub slash_remove2 ($)
+{
+ my $s = shift @_;
+ $s =~ s{/+}{/}g;
+ return $s;
+}