Annotation of embedaddon/ipsec-tools/src/setkey/scriptdump.pl, revision 1.1.1.1
1.1 misho 1: #! @LOCALPREFIX@/bin/perl
2:
3: if ($< != 0) {
4: print STDERR "must be root to invoke this\n";
5: exit 1;
6: }
7:
8: $mode = 'add';
9: while ($i = shift @ARGV) {
10: if ($i eq '-d') {
11: $mode = 'delete';
12: } else {
13: print STDERR "usage: scriptdump [-d]\n";
14: exit 1;
15: }
16: }
17:
18: open(IN, "setkey -D |") || die;
19: foreach $_ (<IN>) {
20: if (/^[^\t]/) {
21: ($src, $dst) = split(/\s+/, $_);
22: } elsif (/^\t(esp|ah) mode=(\S+) spi=(\d+).*reqid=(\d+)/) {
23: ($proto, $ipsecmode, $spi, $reqid) = ($1, $2, $3, $4);
24: } elsif (/^\tE: (\S+) (.*)/) {
25: $ealgo = $1;
26: $ekey = $2;
27: $ekey =~ s/\s//g;
28: $ekey =~ s/^/0x/g;
29: } elsif (/^\tA: (\S+) (.*)/) {
30: $aalgo = $1;
31: $akey = $2;
32: $akey =~ s/\s//g;
33: $akey =~ s/^/0x/g;
34: } elsif (/^\tseq=(0x\d+) replay=(\d+) flags=(0x\d+) state=/) {
35: print "$mode $src $dst $proto $spi";
36: $replay = $2;
37: print " -u $reqid" if $reqid;
38: if ($mode eq 'add') {
39: print " -m $ipsecmode -r $replay" if $replay;
40: if ($proto eq 'esp') {
41: print " -E $ealgo $ekey" if $ealgo;
42: print " -A $aalgo $akey" if $aalgo;
43: } elsif ($proto eq 'ah') {
44: print " -A $aalgo $akey" if $aalgo;
45: }
46: }
47: print ";\n";
48:
49: $src = $dst = $upper = $proxy = '';
50: $ealgo = $ekey = $aalgo = $akey = '';
51: }
52: }
53: close(IN);
54:
55: exit 0;
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>