summaryrefslogtreecommitdiff
path: root/programs/manual/manual.in
diff options
context:
space:
mode:
Diffstat (limited to 'programs/manual/manual.in')
-rwxr-xr-xprograms/manual/manual.in637
1 files changed, 0 insertions, 637 deletions
diff --git a/programs/manual/manual.in b/programs/manual/manual.in
deleted file mode 100755
index bda4bafa0..000000000
--- a/programs/manual/manual.in
+++ /dev/null
@@ -1,637 +0,0 @@
-#! /bin/sh
-# user interface to manual keying
-# Copyright (C) 1998, 1999 Henry Spencer.
-#
-# This program is free software; you can redistribute it and/or modify it
-# under the terms of the GNU General Public License as published by the
-# Free Software Foundation; either version 2 of the License, or (at your
-# option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
-#
-# This program is distributed in the hope that it will be useful, but
-# WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
-# or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
-# for more details.
-#
-# RCSID $Id: manual.in,v 1.1 2004/03/15 20:35:28 as Exp $
-
-me='ipsec manual'
-usage="Usage:
- $me [--showonly] --{up|down|route|unroute} name
- $me [--showonly] --{up|down|route|unroute} --union partname ...
-
- other options: [--config ipsecconfigfile] [--other] [--show]
- [--iam ipaddress@interface]"
-
-# make sure outputs of (e.g.) ifconfig are in English
-unset LANG LANGUAGE LC_ALL LC_MESSAGES
-
-showonly=
-config=
-info=/var/run/ipsec.info
-shopts=
-other=0
-union=0
-noinclude=
-interfs=
-op=
-
-for dummy
-do
- case "$1" in
- --help) echo "$usage" ; exit 0 ;;
- --version) echo "$me $IPSEC_VERSION" ; exit 0 ;;
- --show) shopts=-x ;;
- --showonly) showonly=yes ;;
- --other) other=1 ;;
- --union) union=1 ;;
- --config) config="--config $2" ; shift ;;
- --noinclude) noinclude=--noinclude ;;
- --iam) interfs="$2" ; shift ;;
- --up|--down|--route|--unroute)
- if test " $op" != " "
- then
- echo "$usage" >&2
- exit 2
- fi
- op="$1"
- ;;
- --) shift ; break ;;
- -*) echo "$me: unknown option \`$1'" >&2 ; exit 2 ;;
- *) break ;;
- esac
- shift
-done
-
-case "$op$#:$union" in
-[01]:*) echo "$usage" >&2 ; exit 2 ;;
-2:0) echo "$me: warning: obsolete command syntax used" >&2
- op="--$2"
- names="$1"
- ;;
-[0-9]*:1) ;;
---*) if test $# -eq 0
- then
- echo "$usage" >&2
- exit 2
- fi
- names="$*"
- ;;
-*) echo "$usage" >&2 ; exit 2 ;;
-esac
-if test " $op" = " "
-then
- # --union obsolete-syntax case, op is last argument
- echo "$me: warning: obsolete command syntax used" >&2
- names=
- prev=
- for arg
- do
- names="$names $prev"
- prev="$arg"
- done
- op="--$prev"
-fi
-case "$op" in
---up|--down|--route|--unroute) ;;
-*) echo "$usage" >&2 ; exit 2 ;;
-esac
-
-case "$interfs" in
-'') interfs="`ifconfig |
- awk ' /^ipsec/ { interf = $1 ; next }
- /^[^ \t]/ { interf = "" ; next }
- /^[ \t]*inet addr/ {
- sub(/:/, " ", $0)
- if (interf != "")
- print $3 "@" interf
- }' | tr '\n' ' '`"
- ;;
-esac
-
-if test -s $info
-then
- . $info
-fi
-
-ipsec _confread $config $noinclude $names |
-awk ' BEGIN {
- FS = "\t"
- myname = "'"$me"'"
- err = "cat >&2"
- op = "'"$op"'"
- other = '"$other"'
- names = "'"$names"'"
- interfs = "'"$interfs"'"
- ni = split(interfs, terfs, " ")
- if (ni == 0)
- fail("no IPsec-enabled interfaces found")
- for (i = 1; i <= ni; i++) {
- nc = split(terfs[i], cpts, "@")
- if (nc != 2)
- fail("internal error on " terfs[i])
- interface[cpts[1]] = cpts[2]
- }
- draddr = "'"$defaultrouteaddr"'"
- drnexthop = "'"$defaultroutenexthop"'"
- s[""] = ""
- nlspi = 0
- nrspi = 0
- failed = 0
- maskbits[0] = "0.0.0.0"
- maskbits[1] = "128.0.0.0"
- maskbits[2] = "192.0.0.0"
- maskbits[3] = "224.0.0.0"
- maskbits[4] = "240.0.0.0"
- maskbits[5] = "248.0.0.0"
- maskbits[6] = "252.0.0.0"
- maskbits[7] = "254.0.0.0"
- maskbits[8] = "255.0.0.0"
- maskbits[9] = "255.128.0.0"
- maskbits[10] = "255.192.0.0"
- maskbits[11] = "255.224.0.0"
- maskbits[12] = "255.240.0.0"
- maskbits[13] = "255.248.0.0"
- maskbits[14] = "255.252.0.0"
- maskbits[15] = "255.254.0.0"
- maskbits[16] = "255.255.0.0"
- maskbits[17] = "255.255.128.0"
- maskbits[18] = "255.255.192.0"
- maskbits[19] = "255.255.224.0"
- maskbits[20] = "255.255.240.0"
- maskbits[21] = "255.255.248.0"
- maskbits[22] = "255.255.252.0"
- maskbits[23] = "255.255.254.0"
- maskbits[24] = "255.255.255.0"
- maskbits[25] = "255.255.255.128"
- maskbits[26] = "255.255.255.192"
- maskbits[27] = "255.255.255.224"
- maskbits[28] = "255.255.255.240"
- maskbits[29] = "255.255.255.248"
- maskbits[30] = "255.255.255.252"
- maskbits[31] = "255.255.255.254"
- maskbits[32] = "255.255.255.255"
- }
- $1 == "=" {
- next
- }
- $1 == "!" {
- if ($2 != "")
- fail($2)
- next
- }
- $1 != ":" {
- fail("internal error, unknown type code \"" $1 "\"")
- }
- { s[$2] = $3 }
- function q(s) {
- return "\"" s "\""
- }
- function fail(m) {
- print myname ": fatal error in " q(names) ": " m |err
- failed = 1
- exit
- }
- function swap(k, t, l, r) {
- l = "left" k
- r = "right" k
- if ((l in s) && (r in s)) {
- t = s[l]
- s[l] = s[r]
- s[r] = t
- } else if (l in s) { # but not r
- s[r] = s[l]
- delete s[l]
- } else if (r in s) { # but not l
- s[l] = s[r]
- delete s[r]
- }
- }
- function yesno(k) {
- if ((k in s) && s[k] != "yes" && s[k] != "no")
- fail("parameter \"" k "\" must be \"yes\" or \"no\"")
- }
- function default(k, v) {
- if (!(k in s))
- s[k] = v
- }
- function need(k) {
- if (!(k in s))
- fail("connection has no \"" k "\" parameter specified")
- if (s[k] == "")
- fail("parameter \"" k "\" value must be non-empty")
- }
- function integer(k) {
- if (!(k in s))
- return
- if (s[k] !~ /^[0-9]+$/)
- fail("parameter \"" k "\" value must be integer")
- }
- function nexthopset(dir, val, k) {
- k = dir "nexthop"
- if (k in s)
- fail("non-default value of " k " is being overridden")
- if (val != "")
- s[k] = val
- else if (k in s)
- delete s[k]
- }
- function leftward( t) {
- nlspi++
- if ("spi" in s)
- return s["spi"]
- t = spibase spil
- spil += 2
- return t
- }
- function rightward( t) {
- nrspi++
- if ("spi" in s)
- return s["spi"]
- t = spibase spir
- spir += 2
- return t
- }
- function netfix(dir, n, t) {
- n = s[dir "subnet"]
- if (n == "%default")
- n = "0.0.0.0/0"
- if (n !~ /\//)
- fail(dir "subnet=" n " has no mask specified")
- t = split(n, netfixarray, "/")
- if (t != 2)
- fail("bad syntax in " dir "subnet=" n)
- s[dir "net"] = netfixarray[1]
- s[dir "mask"] = mask(netfixarray[2])
- }
- function mask(m) {
- if (m ~ /\./)
- return m
- if (!(m in maskbits))
- fail("unknown mask syntax \"" m "\"")
- return maskbits[m]
- }
- function bidir(name, l, r) {
- l = "left" name
- r = "right" name
- if (!(l in s) && (name in s))
- s[l] = s[name]
- if (!(r in s) && (name in s))
- s[r] = s[name]
- if ((l in s) != (r in s))
- fail("must give both or neither \"" l "\" and \"" \
- r "\"")
- }
- function espspi(src, dest, spi, dir) {
- if (!("esp" in s))
- return
- dir = (dest == me) ? "left" : "right"
- print "ipsec spi --label", q(names), "--af inet",
- "--said", ("esp" spi "@" dest), "\\"
- print "\t--esp", s["esp"], "--src", src, "\\"
- if ((dir "espauthkey") in s)
- print "\t--authkey", s[dir "espauthkey"], "\\"
- if ("espreplay_window" in s)
- print "\t--replay_window", s["espreplay_window"], "\\"
- if ((dir "espenckey") in s)
- print "\t--enckey", s[dir "espenckey"], "&&"
- else
- print "\t&&"
- }
- function ahspi(src, dest, spi, dir) {
- if (!("ah" in s))
- return
- dir = (dest == me) ? "left" : "right"
- if (!((dir "ahkey") in s))
- fail("AH specified but no ahkey= given")
- print "ipsec spi --label", q(names), "--af inet",
- "--said", ("ah" spi "@" dest), "\\"
- print "\t--ah", s["ah"], "--src", src, "\\"
- if ("ahreplay_window" in s)
- print "\t--replay_window", s["ahreplay_window"], "\\"
- print "\t--authkey", s[dir "ahkey"], "&&"
- }
- # issue a suitable invocation of updown command
- function updown(verb, suffix, cmd) {
- if ("leftupdown" in s) {
- cmd = s["leftupdown"]
- if (s["leftfirewall"] == "yes")
- fail("cannot specify both updown and firewall")
- } else {
- cmd = "ipsec _updown"
- if (s["leftfirewall"] == "yes")
- cmd = cmd " ipfwadm"
- }
- print "PLUTO_VERB=" verb verbsuf " " cmd " " suffix
- }
- END {
- #########
- if (failed)
- exit 1
- default("type", "tunnel")
- type = s["type"]
- shunt = 0
- if (type == "transport") {
- if ("leftsubnet" in s)
- fail("type=transport incompatible with leftsubnet")
- if ("rightsubnet" in s)
- fail("type=transport incompatible with rightsubnet")
- } else if (type == "passthrough") {
- shunt = 1;
- p = "%pass"
- } else if (type == "drop" || type == "reject") {
- shunt = 1;
- p = "%" type
- } else if (type != "tunnel")
- fail("only know how to do types tunnel/transport/passthrough")
- if (shunt) {
- if (("ah" in s) || ("esp" in s))
- fail(type " connection may not specify AH or ESP")
- } else {
- if (!("ah" in s) && !("esp" in s))
- fail("neither AH nor ESP specified for connection")
- }
-
- need("left")
- need("right")
- if (s["left"] == "%defaultroute") {
- if (s["right"] == "%defaultroute")
- fail("left and right cannot both be %defaultroute")
- if (draddr == "")
- fail("%defaultroute requested but not known")
- s["left"] = draddr
- nexthopset("left", drnexthop)
- } else if (s["right"] == "%defaultroute") {
- if (draddr == "")
- fail("%defaultroute requested but not known")
- s["right"] = draddr
- nexthopset("right", drnexthop)
- }
-
- leftsub = ("leftsubnet" in s) ? 1 : 0
- default("leftsubnet", s["left"] "/32")
- rightsub = ("rightsubnet" in s) ? 1 : 0
- default("rightsubnet", s["right"] "/32")
- default("leftfirewall", "no")
- default("rightfirewall", "no")
- yesno("leftfirewall")
- yesno("rightfirewall")
- integer("espreplay_window")
- if (("espreplay_window" in s) && s["espreplay_window"] == 0)
- delete s["espreplay_window"]
- integer("ahreplay_window")
- if (("ahreplay_window" in s) && s["ahreplay_window"] == 0)
- delete s["ahreplay_window"]
- netfix("left")
- netfix("right")
-
- default("leftnexthop", s["right"])
- default("rightnexthop", s["left"])
- if (s["leftnexthop"] == s["left"])
- fail("left and leftnexthop must not be the same")
- if (s["rightnexthop"] == s["right"])
- fail("right and rightnexthop must not be the same")
-
- bidir("espenckey")
- bidir("espauthkey")
- bidir("ahkey")
- if ("spi" in s && "spibase" in s)
- fail("cannot specify both spi and spibase")
- if (!shunt) {
- if ("spibase" in s) {
- b = s["spibase"]
- if (b !~ /^0x[0-9a-fA-F]+0$/)
- fail("bad syntax in spibase -- must be 0x...0")
- spibase = substr(b, 1, length(b)-1)
- } else {
- need("spi")
- if (s["spi"] !~ /^0x[0-9a-fA-F]+$/)
- fail("bad syntax in spi -- must be 0x...")
- }
- }
- spir = 0
- spil = 1
-
- # who am I?
- me = ""
- for (addr in interface) {
- if (addr == s["left"] || addr == s["right"]) {
- if (me != "")
- fail("ambiguous: could be on \"" iface \
- "\" or \"" interface[addr] "\"")
- me = addr
- iface = interface[addr]
- }
- }
- if (me == "")
- fail("cannot find interface for " s["left"] " or " s["right"])
- if (other) {
- if (s["left"] == me)
- me = s["right"]
- else if (s["right"] == me)
- me = s["left"]
- }
- havesubnet = leftsubnet
- if (s["right"] == me) {
- swap("") # swaps "left" and "right"
- swap("subnet")
- swap("nexthop")
- swap("net")
- swap("mask")
- swap("firewall")
- swap("espspi")
- swap("ahspi")
- swap("espenckey")
- swap("espauthkey")
- swap("ahkey")
- swap("updown")
- t = spil
- spil = spir
- spir = t
- havesubnet = rightsubnet
- }
- him = s["right"]
-
- if (s["leftnexthop"] == "%defaultroute") {
- if (drnexthop == "")
- fail("%defaultroute requested but not known")
- s["leftnexthop"] = drnexthop
- }
-
- tspi = rightward()
- if (type == "tunnel") {
- espi = rightward()
- intspi = leftward()
- } else
- espi = tspi
- if (s["rightespspi"] != "")
- espi = s["rightespspi"]
- respi = leftward()
- if (s["leftespspi"] != "")
- respi = s["leftespspi"]
- if ("ah" in s) {
- if ("esp" in s) {
- aspi = rightward()
- raspi = leftward()
- } else {
- aspi = espi
- raspi = respi
- }
- if (s["rightahspi"] != "")
- aspi = s["rightahspi"]
- if (s["leftahspi"] != "")
- raspi = s["leftahspi"]
- }
- routeid = "-net " s["rightnet"] " netmask " s["rightmask"]
- if (s["rightmask"] == "255.255.255.255")
- routeid = "-host " s["rightnet"]
-
- print "PATH=\"'"$PATH"'\""
- print "export PATH"
- print "PLUTO_VERSION=1.1"
- verbsuf = (havesubnet) ? "-client" : "-host"
- print "PLUTO_CONNECTION=" q(names)
- print "PLUTO_NEXT_HOP=" s["leftnexthop"]
- print "PLUTO_INTERFACE=" iface
- print "PLUTO_ME=" me
- print "PLUTO_MY_CLIENT=" s["leftsubnet"]
- print "PLUTO_MY_CLIENT_NET=" s["leftnet"]
- print "PLUTO_MY_CLIENT_MASK=" s["leftmask"]
- print "PLUTO_PEER=" him
- print "PLUTO_PEER_CLIENT=" s["rightsubnet"]
- print "PLUTO_PEER_CLIENT_NET=" s["rightnet"]
- print "PLUTO_PEER_CLIENT_MASK=" s["rightmask"]
- print "export PLUTO_VERSION PLUTO_CONNECTION PLUTO_NEXT_HOP"
- print "export PLUTO_INTERFACE PLUTO_ME PLUTO_MY_CLIENT"
- print "export PLUTO_MY_CLIENT_NET PLUTO_MY_CLIENT_MASK PLUTO_PEER"
- print "export PLUTO_PEER_CLIENT PLUTO_PEER_CLIENT_NET"
- print "export PLUTO_PEER_CLIENT_MASK"
-
- if (op == "--up") {
- print "{"
- # first, the outbound SAs
- if (type == "tunnel") {
- print "ipsec spi --label", q(names), "--af inet",
- "--said", ("tun" tspi "@" him), "\\"
- print "\t--ip4", "--src", me, "--dst", him, "&&"
- }
- espspi(me, him, espi)
- ahspi(me, him, aspi)
- if (nrspi > 1) {
- # group them
- printf "ipsec spigrp --label %s --said ", q(names)
- if (type == "tunnel")
- printf "tun%s@%s ", tspi, him
- if (("esp" in s))
- printf "esp%s@%s ", espi, him
- if ("ah" in s)
- printf "ah%s@%s ", aspi, him
- printf " &&\n"
- }
- # inbound SAs
- if (type == "tunnel") {
- print "ipsec spi --label", q(names), "--af inet",
- "--said", ("tun" intspi "@" me), "\\"
- print "\t--ip4", "--src", him, "--dst", me, "&&"
- }
- espspi(him, me, respi)
- ahspi(him, me, raspi)
- if (nlspi > 1) {
- # group them
- printf "ipsec spigrp --label %s --said ", q(names)
- if (type == "tunnel")
- printf "tun%s@%s ", intspi, me
- if (("esp" in s))
- printf "esp%s@%s ", respi, me
- if ("ah" in s)
- printf "ah%s@%s ", raspi, me
- printf " &&\n"
- }
- # with the SAs in place, eroute to them
- print "ipsec eroute --label", q(names),
- "--eraf inet --replace", "\\"
- if (!shunt) {
- if (type == "tunnel")
- p = "tun"
- else if (("esp" in s))
- p = "esp"
- else
- p = "ah"
- p = p tspi "@" him
- }
- print "\t--src", s["leftsubnet"], "--dst", s["rightsubnet"],
- "--said", p, "&&"
- # with the eroute in place, NOW we can route to it
- #print "{ route del", routeid, "2>/dev/null ; true ; } &&"
- updown("prepare", "&&")
- #print "route add", routeid, "dev", iface, "gw",
- # s["leftnexthop"], "&&"
- updown("route", "&&")
- # and with all processing in place, we can penetrate firewall
- #if (s["leftfirewall"] == "yes") {
- # print "ipfwadm -F -i accept -b -S", s["leftsubnet"],
- # "-D", s["rightsubnet"], "&&"
- #}
- updown("up", "&&")
- print "true"
- print "} || {"
- } else if (op == "--route") {
- #print "{ route del", routeid, "2>/dev/null ; true ; } &&"
- updown("prepare", "&&")
- #print "route add", routeid, "dev", iface, "gw",
- # s["leftnexthop"]
- updown("route")
- exit 0
- } else if (op == "--unroute") {
- #print "route del", routeid, "dev", iface, "gw",
- # s["leftnexthop"]
- updown("unroute")
- exit 0
- } else # down
- print "{"
-
- # now do "down", unconditionally, since the desired output for "up"
- # is { up && up && up && true } || { down ; down ; down }
- # tear things down in fairly strict reverse order
- #if (s["leftfirewall"] == "yes")
- # print "ipfwadm -F -d accept -b -S", s["leftsubnet"],
- # "-D", s["rightsubnet"]
- updown("down")
- #print "route del", routeid, "dev", iface, "gw", s["leftnexthop"]
- print "# do not delete route"
- print "ipsec eroute --label", q(names), "--eraf inet --del", "\\"
- print "\t--src", s["leftsubnet"], "--dst", s["rightsubnet"]
- #if ("ah" in s) {
- # print "ipsec spi --label", q(names), "--af inet", "--del",
- # "--said", ("ah" raspi "@" me)
- #}
- #if ("esp" in s) {
- # print "ipsec spi --label", q(names), "--af inet", "--del",
- # "--said", ("esp" respi "@" me)
- #}
- if (!shunt) {
- if (type == "tunnel")
- p = "tun"
- else if (("esp" in s))
- p = "esp"
- else
- p = "ah"
- print "ipsec spi --label", q(names), "--af inet", "--del",
- "--said", (p tspi "@" him),
- " # outbound"
- print "ipsec spi --label", q(names), "--af inet", "--del",
- "--said", (p intspi "@" me),
- " # inbound"
- }
-
- if (op == "--up")
- print "} 2>/dev/null"
- else
- print "}"
- #########
- }' |
-if test $showonly
-then
- cat
-else
- sh $shopts
-fi