philip_h

updown script

Jul 6th, 2015
89
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 15.09 KB | None | 0 0
  1. #!/bin/sh
  2.  
  3.  
  4. # define a minimum PATH environment in case it is not set
  5. PATH="/sbin:/bin:/usr/sbin:/usr/bin:/SAB/sbin"
  6. export PATH
  7.  
  8. # comment to disable logging VPN connections to syslog
  9. VPN_LOGGING=1
  10. #
  11. # tag put in front of each log entry:
  12. TAG=vpn
  13. #
  14. # syslog facility and priority used:
  15. FAC_PRIO=local0.notice
  16. #
  17. # to create a special vpn logging file, put the following line into
  18. # the syslog configuration file /etc/syslog.conf:
  19. #
  20. # local0.notice -/var/log/vpn
  21.  
  22. DEFAULT_ROUTE_FILE=/var/run/vpnc/defaultroute
  23.  
  24. fix_ip_get_output () {
  25. sed -e 's/ /\n/g' | \
  26. sed -ne '1p;/via/{N;p};/dev/{N;p};/src/{N;p};/mtu/{N;p}'
  27. }
  28.  
  29. get_default_gw() {
  30. # isn't -n supposed to give --numeric output?
  31. # apperently not...
  32. # Get rid of lines containing IPv6 addresses (':')
  33. netstat -r -n | awk '/:/ { next; } /^(default|0\.0\.0\.0)/ { print $2; }'
  34. }
  35.  
  36. reset_default_route() {
  37. if [ -s "$DEFAULT_ROUTE_FILE" ]; then
  38. ip route replace `cat "$DEFAULT_ROUTE_FILE"`
  39. ip route flush cache
  40. cp "$DEFAULT_ROUTE_FILE" "$DEF_BCK"
  41. rm -f -- "$DEFAULT_ROUTE_FILE"
  42. fi
  43. }
  44.  
  45.  
  46. # check parameter(s)
  47. case "$1:$*" in
  48. ':') # no parameters
  49. ;;
  50. iptables:iptables) # due to (left/right)firewall; for default script only
  51. ;;
  52. custom:*) # custom parameters (see above CAUTION comment)
  53. ;;
  54. *) echo "$0: unknown parameters \`$*'" >&2
  55. exit 2
  56. ;;
  57. esac
  58.  
  59. IPSEC_POLICY="-m policy --pol ipsec --proto $PLUTO_PROTO --reqid $PLUTO_REQID"
  60. IPSEC_POLICY_IN="$IPSEC_POLICY --dir in"
  61. IPSEC_POLICY_OUT="$IPSEC_POLICY --dir out"
  62.  
  63. # use protocol specific options to set ports
  64. case "$PLUTO_MY_PROTOCOL" in
  65. 1) # ICMP
  66. ICMP_TYPE_OPTION="--icmp-type"
  67. ;;
  68. 58) # ICMPv6
  69. ICMP_TYPE_OPTION="--icmpv6-type"
  70. ;;
  71. *)
  72. ;;
  73. esac
  74.  
  75. # are there port numbers?
  76. if [ "$PLUTO_MY_PORT" != 0 ]
  77. then
  78. if [ -n "$ICMP_TYPE_OPTION" ]
  79. then
  80. S_MY_PORT="$ICMP_TYPE_OPTION $PLUTO_MY_PORT"
  81. D_MY_PORT="$ICMP_TYPE_OPTION $PLUTO_MY_PORT"
  82. else
  83. S_MY_PORT="--sport $PLUTO_MY_PORT"
  84. D_MY_PORT="--dport $PLUTO_MY_PORT"
  85. fi
  86. fi
  87. if [ "$PLUTO_PEER_PORT" != 0 ]
  88. then
  89. if [ -n "$ICMP_TYPE_OPTION" ]
  90. then
  91. # the syntax is --icmp[v6]-type type[/code], so add it to the existing option
  92. S_MY_PORT="$S_MY_PORT/$PLUTO_PEER_PORT"
  93. D_MY_PORT="$D_MY_PORT/$PLUTO_PEER_PORT"
  94. else
  95. S_PEER_PORT="--sport $PLUTO_PEER_PORT"
  96. D_PEER_PORT="--dport $PLUTO_PEER_PORT"
  97. fi
  98. fi
  99.  
  100. # resolve octal escape sequences
  101. PLUTO_MY_ID=`printf "$PLUTO_MY_ID"`
  102. PLUTO_PEER_ID=`printf "$PLUTO_PEER_ID"`
  103.  
  104. case "$PLUTO_VERB:$1" in
  105. up-host:)
  106. # connection to me coming up
  107. # If you are doing a custom version, firewall commands go here.
  108. ;;
  109. down-host:)
  110. # connection to me going down
  111. # If you are doing a custom version, firewall commands go here.
  112. ;;
  113. up-client:)
  114. # connection to my client subnet coming up
  115. # If you are doing a custom version, firewall commands go here.
  116.  
  117. echo "-------------------------------- in the -n"
  118. IP_DEFAULT_ROUTE_DEV=$(/sbin/ip route | grep 'default' | awk '{ print $5 }')
  119. ip route | grep '^default' | fix_ip_get_output > "$DEFAULT_ROUTE_FILE"
  120.  
  121.  
  122.  
  123. /sbin/ip route del default
  124. /sbin/ip route replace default dev usb1 src "$PLUTO_MY_SOURCEIP"
  125. /sbin/ip route flush cache
  126.  
  127. ifconfig dummy0 up
  128. ;;
  129. down-client:)
  130. # connection to my client subnet going down
  131. # If you are doing a custom version, firewall commands go hereu.
  132. #/sbin/ip route del default
  133. #/sbin/ip route replace default dev usb1
  134. #/sbin/ip route flush cache
  135.  
  136. reset_default_route
  137. ifconfig dummy0 down
  138. ;;
  139. up-host:iptables)
  140. # connection to me, with (left/right)firewall=yes, coming up
  141. # This is used only by the default updown script, not by your custom
  142. # ones, so do not mess with it; see CAUTION comment up at top.
  143. iptables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  144. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  145. -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
  146. iptables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  147. -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
  148. -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
  149. #
  150. # allow IPIP traffic because of the implicit SA created by the kernel if
  151. # IPComp is used (for small inbound packets that are not compressed)
  152. if [ -n "$PLUTO_IPCOMP" ]
  153. then
  154. iptables -I INPUT 1 -i $PLUTO_INTERFACE -p 4 \
  155. -s $PLUTO_PEER -d $PLUTO_ME $IPSEC_POLICY_IN -j ACCEPT
  156. fi
  157. #
  158. # log IPsec host connection setup
  159. if [ $VPN_LOGGING ]
  160. then
  161. if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
  162. then
  163. logger -t $TAG -p $FAC_PRIO \
  164. "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
  165. else
  166. logger -t $TAG -p $FAC_PRIO \
  167. "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
  168. fi
  169. fi
  170. ;;
  171. down-host:iptables)
  172. # connection to me, with (left/right)firewall=yes, going down
  173. # This is used only by the default updown script, not by your custom
  174. # ones, so do not mess with it; see CAUTION comment up at top.
  175. iptables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  176. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  177. -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
  178. iptables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  179. -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
  180. -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
  181. #
  182. # IPIP exception teardown
  183. if [ -n "$PLUTO_IPCOMP" ]
  184. then
  185. iptables -D INPUT -i $PLUTO_INTERFACE -p 4 \
  186. -s $PLUTO_PEER -d $PLUTO_ME $IPSEC_POLICY_IN -j ACCEPT
  187. fi
  188. #
  189. # log IPsec host connection teardown
  190. if [ $VPN_LOGGING ]
  191. then
  192. if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
  193. then
  194. logger -t $TAG -p $FAC_PRIO -- \
  195. "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
  196. else
  197. logger -t $TAG -p $FAC_PRIO -- \
  198. "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
  199. fi
  200. fi
  201. ;;
  202. up-client:iptables)
  203. # connection to client subnet, with (left/right)firewall=yes, coming up
  204. # This is used only by the default updown script, not by your custom
  205. # ones, so do not mess with it; see CAUTION comment up at top.
  206. if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/32" ]
  207. then
  208. iptables -I FORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  209. -s $PLUTO_MY_CLIENT $S_MY_PORT \
  210. -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
  211. iptables -I FORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  212. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  213. -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
  214. fi
  215. #
  216. # a virtual IP requires an INPUT and OUTPUT rule on the host
  217. # or sometimes host access via the internal IP is needed
  218. if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
  219. then
  220. iptables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  221. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  222. -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
  223. iptables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  224. -s $PLUTO_MY_CLIENT $S_MY_PORT \
  225. -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
  226. fi
  227. #
  228. # allow IPIP traffic because of the implicit SA created by the kernel if
  229. # IPComp is used (for small inbound packets that are not compressed).
  230. # INPUT is correct here even for forwarded traffic.
  231. if [ -n "$PLUTO_IPCOMP" ]
  232. then
  233. iptables -I INPUT 1 -i $PLUTO_INTERFACE -p 4 \
  234. -s $PLUTO_PEER -d $PLUTO_ME $IPSEC_POLICY_IN -j ACCEPT
  235. fi
  236. #
  237. # log IPsec client connection setup
  238. if [ $VPN_LOGGING ]
  239. then
  240. if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
  241. then
  242. logger -t $TAG -p $FAC_PRIO \
  243. "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
  244. else
  245. logger -t $TAG -p $FAC_PRIO \
  246. "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
  247. fi
  248. fi
  249. ;;
  250. down-client:iptables)
  251. # connection to client subnet, with (left/right)firewall=yes, going down
  252. # This is used only by the default updown script, not by your custom
  253. # ones, so do not mess with it; see CAUTION comment up at top.
  254. if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/32" ]
  255. then
  256. iptables -D FORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  257. -s $PLUTO_MY_CLIENT $S_MY_PORT \
  258. -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
  259. $IPSEC_POLICY_OUT -j ACCEPT
  260. iptables -D FORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  261. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  262. -d $PLUTO_MY_CLIENT $D_MY_PORT \
  263. $IPSEC_POLICY_IN -j ACCEPT
  264. fi
  265. #
  266. # a virtual IP requires an INPUT and OUTPUT rule on the host
  267. # or sometimes host access via the internal IP is needed
  268. if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
  269. then
  270. iptables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  271. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  272. -d $PLUTO_MY_CLIENT $D_MY_PORT \
  273. $IPSEC_POLICY_IN -j ACCEPT
  274. iptables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  275. -s $PLUTO_MY_CLIENT $S_MY_PORT \
  276. -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
  277. $IPSEC_POLICY_OUT -j ACCEPT
  278. fi
  279. #
  280. # IPIP exception teardown
  281. if [ -n "$PLUTO_IPCOMP" ]
  282. then
  283. iptables -D INPUT -i $PLUTO_INTERFACE -p 4 \
  284. -s $PLUTO_PEER -d $PLUTO_ME $IPSEC_POLICY_IN -j ACCEPT
  285. fi
  286. #
  287. # log IPsec client connection teardown
  288. if [ $VPN_LOGGING ]
  289. then
  290. if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/32" ]
  291. then
  292. logger -t $TAG -p $FAC_PRIO -- \
  293. "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
  294. else
  295. logger -t $TAG -p $FAC_PRIO -- \
  296. "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
  297. fi
  298. fi
  299. ;;
  300. #
  301. # IPv6
  302. #
  303. up-host-v6:)
  304. # connection to me coming up
  305. # If you are doing a custom version, firewall commands go here.
  306. ;;
  307. down-host-v6:)
  308. # connection to me going down
  309. # If you are doing a custom version, firewall commands go here.
  310. ;;
  311. up-client-v6:)
  312. # connection to my client subnet coming up
  313. # If you are doing a custom version, firewall commands go here.
  314. ;;
  315. down-client-v6:)
  316. # connection to my client subnet going down
  317. # If you are doing a custom version, firewall commands go here.
  318. ;;
  319. up-host-v6:iptables)
  320. # connection to me, with (left/right)firewall=yes, coming up
  321. # This is used only by the default updown script, not by your custom
  322. # ones, so do not mess with it; see CAUTION comment up at top.
  323. ip6tables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  324. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  325. -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
  326. ip6tables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  327. -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
  328. -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
  329. #
  330. # log IPsec host connection setup
  331. if [ $VPN_LOGGING ]
  332. then
  333. if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
  334. then
  335. logger -t $TAG -p $FAC_PRIO \
  336. "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
  337. else
  338. logger -t $TAG -p $FAC_PRIO \
  339. "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
  340. fi
  341. fi
  342. ;;
  343. down-host-v6:iptables)
  344. # connection to me, with (left/right)firewall=yes, going down
  345. # This is used only by the default updown script, not by your custom
  346. # ones, so do not mess with it; see CAUTION comment up at top.
  347. ip6tables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  348. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  349. -d $PLUTO_ME $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
  350. ip6tables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  351. -s $PLUTO_ME $S_MY_PORT $IPSEC_POLICY_OUT \
  352. -d $PLUTO_PEER_CLIENT $D_PEER_PORT -j ACCEPT
  353. #
  354. # log IPsec host connection teardown
  355. if [ $VPN_LOGGING ]
  356. then
  357. if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
  358. then
  359. logger -t $TAG -p $FAC_PRIO -- \
  360. "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME"
  361. else
  362. logger -t $TAG -p $FAC_PRIO -- \
  363. "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME"
  364. fi
  365. fi
  366. ;;
  367. up-client-v6:iptables)
  368. # connection to client subnet, with (left/right)firewall=yes, coming up
  369. # This is used only by the default updown script, not by your custom
  370. # ones, so do not mess with it; see CAUTION comment up at top.
  371. if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/128" ]
  372. then
  373. ip6tables -I FORWARD 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  374. -s $PLUTO_MY_CLIENT $S_MY_PORT \
  375. -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
  376. ip6tables -I FORWARD 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  377. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  378. -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
  379. fi
  380. #
  381. # a virtual IP requires an INPUT and OUTPUT rule on the host
  382. # or sometimes host access via the internal IP is needed
  383. if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
  384. then
  385. ip6tables -I INPUT 1 -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  386. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  387. -d $PLUTO_MY_CLIENT $D_MY_PORT $IPSEC_POLICY_IN -j ACCEPT
  388. ip6tables -I OUTPUT 1 -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  389. -s $PLUTO_MY_CLIENT $S_MY_PORT \
  390. -d $PLUTO_PEER_CLIENT $D_PEER_PORT $IPSEC_POLICY_OUT -j ACCEPT
  391. fi
  392. #
  393. # log IPsec client connection setup
  394. if [ $VPN_LOGGING ]
  395. then
  396. if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
  397. then
  398. logger -t $TAG -p $FAC_PRIO \
  399. "+ $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
  400. else
  401. logger -t $TAG -p $FAC_PRIO \
  402. "+ $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
  403. fi
  404. fi
  405. ;;
  406. down-client-v6:iptables)
  407. # connection to client subnet, with (left/right)firewall=yes, going down
  408. # This is used only by the default updown script, not by your custom
  409. # ones, so do not mess with it; see CAUTION comment up at top.
  410. if [ "$PLUTO_PEER_CLIENT" != "$PLUTO_MY_SOURCEIP/128" ]
  411. then
  412. ip6tables -D FORWARD -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  413. -s $PLUTO_MY_CLIENT $S_MY_PORT \
  414. -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
  415. $IPSEC_POLICY_OUT -j ACCEPT
  416. ip6tables -D FORWARD -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  417. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  418. -d $PLUTO_MY_CLIENT $D_MY_PORT \
  419. $IPSEC_POLICY_IN -j ACCEPT
  420. fi
  421. #
  422. # a virtual IP requires an INPUT and OUTPUT rule on the host
  423. # or sometimes host access via the internal IP is needed
  424. if [ -n "$PLUTO_MY_SOURCEIP" -o -n "$PLUTO_HOST_ACCESS" ]
  425. then
  426. ip6tables -D INPUT -i $PLUTO_INTERFACE -p $PLUTO_MY_PROTOCOL \
  427. -s $PLUTO_PEER_CLIENT $S_PEER_PORT \
  428. -d $PLUTO_MY_CLIENT $D_MY_PORT \
  429. $IPSEC_POLICY_IN -j ACCEPT
  430. ip6tables -D OUTPUT -o $PLUTO_INTERFACE -p $PLUTO_PEER_PROTOCOL \
  431. -s $PLUTO_MY_CLIENT $S_MY_PORT \
  432. -d $PLUTO_PEER_CLIENT $D_PEER_PORT \
  433. $IPSEC_POLICY_OUT -j ACCEPT
  434. fi
  435. #
  436. # log IPsec client connection teardown
  437. if [ $VPN_LOGGING ]
  438. then
  439. if [ "$PLUTO_PEER_CLIENT" = "$PLUTO_PEER/128" ]
  440. then
  441. logger -t $TAG -p $FAC_PRIO -- \
  442. "- $PLUTO_PEER_ID $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
  443. else
  444. logger -t $TAG -p $FAC_PRIO -- \
  445. "- $PLUTO_PEER_ID $PLUTO_PEER_CLIENT == $PLUTO_PEER -- $PLUTO_ME == $PLUTO_MY_CLIENT"
  446. fi
  447. fi
  448. ;;
  449. *) echo "$0: unknown verb \`$PLUTO_VERB' or parameter \`$1'" >&2
  450. exit 1
  451. ;;
  452. esac
Advertisement
Add Comment
Please, Sign In to add comment