Annotation of embedaddon/ipsec-tools/src/setkey/scriptdump.pl, revision 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>