/opensource.apple.com/source/network_cmds/network_cmds-245.12/racoon.tproj/main.c

# · C · 437 lines · 350 code · 40 blank · 47 comment · 13 complexity · f2f1275478d128edf5a7fe23f94c1058 MD5 · raw file

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  2. "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  3. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
  4. <head>
  5. <title>main.c</title>
  6. <style type="text/css">
  7. .enscript-comment { font-style: italic; color: rgb(178,34,34); }
  8. .enscript-function-name { font-weight: bold; color: rgb(0,0,255); }
  9. .enscript-variable-name { font-weight: bold; color: rgb(184,134,11); }
  10. .enscript-keyword { font-weight: bold; color: rgb(160,32,240); }
  11. .enscript-reference { font-weight: bold; color: rgb(95,158,160); }
  12. .enscript-string { font-weight: bold; color: rgb(188,143,143); }
  13. .enscript-builtin { font-weight: bold; color: rgb(218,112,214); }
  14. .enscript-type { font-weight: bold; color: rgb(34,139,34); }
  15. .enscript-highlight { text-decoration: underline; color: 0; }
  16. </style>
  17. </head>
  18. <body id="top">
  19. <h1 style="margin:8px;" id="f1">main.c&nbsp;&nbsp;&nbsp;<span style="font-weight: normal; font-size: 0.5em;">[<a href="?txt">plain text</a>]</span></h1>
  20. <hr/>
  21. <div></div>
  22. <pre>
  23. <span class="enscript-comment">/* $KAME: main.c,v 1.48 2002/11/20 02:06:07 itojun Exp $ */</span>
  24. <span class="enscript-comment">/*
  25. * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
  26. * All rights reserved.
  27. *
  28. * Redistribution and use in source and binary forms, with or without
  29. * modification, are permitted provided that the following conditions
  30. * are met:
  31. * 1. Redistributions of source code must retain the above copyright
  32. * notice, this list of conditions and the following disclaimer.
  33. * 2. Redistributions in binary form must reproduce the above copyright
  34. * notice, this list of conditions and the following disclaimer in the
  35. * documentation and/or other materials provided with the distribution.
  36. * 3. Neither the name of the project nor the names of its contributors
  37. * may be used to endorse or promote products derived from this software
  38. * without specific prior written permission.
  39. *
  40. * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
  41. * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
  42. * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
  43. * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
  44. * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
  45. * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
  46. * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
  47. * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
  48. * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
  49. * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  50. * SUCH DAMAGE.
  51. */</span>
  52. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;sys/types.h&gt;</span>
  53. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;sys/param.h&gt;</span>
  54. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;sys/socket.h&gt;</span>
  55. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;sys/stat.h&gt;</span>
  56. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;sys/random.h&gt;</span>
  57. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;sys/sysctl.h&gt;</span>
  58. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;netinet/in.h&gt;</span>
  59. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;stdlib.h&gt;</span>
  60. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;stdio.h&gt;</span>
  61. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;string.h&gt;</span>
  62. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;errno.h&gt;</span>
  63. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;limits.h&gt;</span>
  64. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">HAVE_UNISTD_H</span>
  65. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;unistd.h&gt;</span>
  66. #<span class="enscript-reference">endif</span>
  67. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;paths.h&gt;</span>
  68. #<span class="enscript-reference">include</span> <span class="enscript-string">&lt;err.h&gt;</span>
  69. <span class="enscript-comment">/*
  70. * If we're using a debugging malloc library, this may define our
  71. * wrapper stubs.
  72. */</span>
  73. #<span class="enscript-reference">define</span> <span class="enscript-variable-name">RACOON_MAIN_PROGRAM</span>
  74. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;gcmalloc.h&quot;</span>
  75. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;var.h&quot;</span>
  76. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;misc.h&quot;</span>
  77. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;vmbuf.h&quot;</span>
  78. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;plog.h&quot;</span>
  79. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;debug.h&quot;</span>
  80. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;cfparse.h&quot;</span>
  81. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;isakmp_var.h&quot;</span>
  82. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;remoteconf.h&quot;</span>
  83. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;localconf.h&quot;</span>
  84. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;session.h&quot;</span>
  85. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;oakley.h&quot;</span>
  86. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;pfkey.h&quot;</span>
  87. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;crypto_openssl.h&quot;</span>
  88. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;backupsa.h&quot;</span>
  89. #<span class="enscript-reference">ifndef</span> <span class="enscript-variable-name">HAVE_ARC4RANDOM</span>
  90. #<span class="enscript-reference">include</span> <span class="enscript-string">&quot;arc4random.h&quot;</span>
  91. #<span class="enscript-reference">endif</span>
  92. <span class="enscript-type">int</span> f_foreground = 0; <span class="enscript-comment">/* force running in foreground. */</span>
  93. <span class="enscript-type">int</span> f_local = 0; <span class="enscript-comment">/* local test mode. behave like a wall. */</span>
  94. <span class="enscript-type">int</span> vflag = 1; <span class="enscript-comment">/* for print-isakmp.c */</span>
  95. <span class="enscript-type">static</span> <span class="enscript-type">int</span> loading_sa = 0; <span class="enscript-comment">/* install sa when racoon boots up. */</span>
  96. #<span class="enscript-reference">define</span> <span class="enscript-variable-name">RACOON_VERSION</span> <span class="enscript-string">&quot;20001216 <a href="mailto:sakane@kame.net">sakane@kame.net</a>&quot;</span>
  97. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">RACOON_PKG_VERSION</span>
  98. <span class="enscript-type">static</span> <span class="enscript-type">char</span> version0[] = <span class="enscript-string">&quot;@(#)package version &quot;</span> RACOON_PKG_VERSION ;
  99. <span class="enscript-type">static</span> <span class="enscript-type">char</span> version[] = <span class="enscript-string">&quot;@(#)internal version &quot;</span> RACOON_VERSION ;
  100. #<span class="enscript-reference">else</span>
  101. <span class="enscript-type">static</span> <span class="enscript-type">char</span> version[] = <span class="enscript-string">&quot;@(#)racoon 20001216 &quot;</span> RACOON_VERSION ;
  102. #<span class="enscript-reference">endif</span>
  103. <span class="enscript-type">static</span> pid_t racoon_pid = 0;
  104. <span class="enscript-type">int</span> main <span class="enscript-function-name">__P</span>((<span class="enscript-type">int</span>, <span class="enscript-type">char</span> **));
  105. <span class="enscript-type">static</span> <span class="enscript-type">void</span> usage <span class="enscript-function-name">__P</span>((<span class="enscript-type">void</span>));
  106. <span class="enscript-type">static</span> <span class="enscript-type">void</span> parse <span class="enscript-function-name">__P</span>((<span class="enscript-type">int</span>, <span class="enscript-type">char</span> **));
  107. <span class="enscript-type">static</span> <span class="enscript-type">void</span> restore_params <span class="enscript-function-name">__P</span>((<span class="enscript-type">void</span>));
  108. <span class="enscript-type">static</span> <span class="enscript-type">void</span> save_params <span class="enscript-function-name">__P</span>((<span class="enscript-type">void</span>));
  109. <span class="enscript-type">static</span> <span class="enscript-type">void</span> saverestore_params <span class="enscript-function-name">__P</span>((<span class="enscript-type">int</span>));
  110. <span class="enscript-type">static</span> <span class="enscript-type">void</span> cleanup_pidfile <span class="enscript-function-name">__P</span>((<span class="enscript-type">void</span>));
  111. <span class="enscript-type">void</span>
  112. <span class="enscript-function-name">usage</span>()
  113. {
  114. printf(<span class="enscript-string">&quot;usage: racoon [-BdFv%s] %s[-f (file)] [-l (file)] [-p (port)]\n&quot;</span>,
  115. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
  116. <span class="enscript-string">&quot;46&quot;</span>,
  117. #<span class="enscript-reference">else</span>
  118. <span class="enscript-string">&quot;&quot;</span>,
  119. #<span class="enscript-reference">endif</span>
  120. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
  121. <span class="enscript-string">&quot;[-a (port)] &quot;</span>
  122. #<span class="enscript-reference">else</span>
  123. <span class="enscript-string">&quot;&quot;</span>
  124. #<span class="enscript-reference">endif</span>
  125. );
  126. printf(<span class="enscript-string">&quot; -B: install SA to the kernel from the file &quot;</span>
  127. <span class="enscript-string">&quot;specified by the configuration file.\n&quot;</span>);
  128. printf(<span class="enscript-string">&quot; -d: debug level, more -d will generate more debug message.\n&quot;</span>);
  129. printf(<span class="enscript-string">&quot; -F: run in foreground, do not become daemon.\n&quot;</span>);
  130. printf(<span class="enscript-string">&quot; -v: be more verbose\n&quot;</span>);
  131. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
  132. printf(<span class="enscript-string">&quot; -4: IPv4 mode.\n&quot;</span>);
  133. printf(<span class="enscript-string">&quot; -6: IPv6 mode.\n&quot;</span>);
  134. #<span class="enscript-reference">endif</span>
  135. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
  136. printf(<span class="enscript-string">&quot; -a: port number for admin port.\n&quot;</span>);
  137. #<span class="enscript-reference">endif</span>
  138. printf(<span class="enscript-string">&quot; -f: pathname for configuration file.\n&quot;</span>);
  139. printf(<span class="enscript-string">&quot; -l: pathname for log file.\n&quot;</span>);
  140. printf(<span class="enscript-string">&quot; -p: port number for isakmp (default: %d).\n&quot;</span>, PORT_ISAKMP);
  141. exit(1);
  142. }
  143. <span class="enscript-type">extern</span> <span class="enscript-type">int</span> <span class="enscript-function-name">cfparse</span>(<span class="enscript-type">void</span>);
  144. <span class="enscript-type">int</span>
  145. <span class="enscript-function-name">main</span>(ac, av)
  146. <span class="enscript-type">int</span> ac;
  147. <span class="enscript-type">char</span> **av;
  148. {
  149. <span class="enscript-type">int</span> error;
  150. <span class="enscript-keyword">if</span> (geteuid() != 0) {
  151. errx(1, <span class="enscript-string">&quot;must be root to invoke this program.&quot;</span>);
  152. <span class="enscript-comment">/* NOTREACHED*/</span>
  153. }
  154. <span class="enscript-comment">/*
  155. * Don't let anyone read files I write. Although some files (such as
  156. * the PID file) can be other readable, we dare to use the global mask,
  157. * because racoon uses fopen(3), which can't specify the permission
  158. * at the creation time.
  159. */</span>
  160. umask(077);
  161. <span class="enscript-keyword">if</span> (umask(077) != 077) {
  162. errx(1, <span class="enscript-string">&quot;could not set umask&quot;</span>);
  163. <span class="enscript-comment">/* NOTREACHED*/</span>
  164. }
  165. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">DEBUG_RECORD_MALLOCATION</span>
  166. DRM_init();
  167. #<span class="enscript-reference">endif</span>
  168. initlcconf();
  169. initrmconf();
  170. oakley_dhinit();
  171. eay_init_error();
  172. parse(ac, av);
  173. ploginit();
  174. (<span class="enscript-type">void</span>)arc4random(); <span class="enscript-comment">/* XXX test if random number is available */</span>
  175. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">RACOON_PKG_VERSION</span>
  176. plog(LLV_INFO, LOCATION, NULL, <span class="enscript-string">&quot;%s\n&quot;</span>, version0);
  177. #<span class="enscript-reference">endif</span>
  178. plog(LLV_INFO, LOCATION, NULL, <span class="enscript-string">&quot;%s\n&quot;</span>, version);
  179. plog(LLV_INFO, LOCATION, NULL, <span class="enscript-string">&quot;@(#)&quot;</span>
  180. <span class="enscript-string">&quot;This product linked %s (<a href="http://www.openssl.org/">http://www.openssl.org/</a>)&quot;</span>
  181. <span class="enscript-string">&quot;\n&quot;</span>, eay_version());
  182. <span class="enscript-keyword">if</span> (pfkey_init() &lt; 0) {
  183. errx(1, <span class="enscript-string">&quot;something error happened &quot;</span>
  184. <span class="enscript-string">&quot;while pfkey initializing.&quot;</span>);
  185. <span class="enscript-comment">/* NOTREACHED*/</span>
  186. }
  187. <span class="enscript-comment">/*
  188. * in order to prefer the parameters by command line,
  189. * saving some parameters before parsing configuration file.
  190. */</span>
  191. save_params();
  192. error = cfparse();
  193. <span class="enscript-keyword">if</span> (error != 0)
  194. errx(1, <span class="enscript-string">&quot;failed to parse configuration file.&quot;</span>);
  195. restore_params();
  196. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">IKE_NAT_T</span>
  197. <span class="enscript-comment">/* Tell the kernel which port to use for UDP encapsulation */</span>
  198. {
  199. <span class="enscript-type">int</span> udp_port = PORT_ISAKMP_NATT;
  200. <span class="enscript-keyword">if</span> (sysctlbyname(<span class="enscript-string">&quot;net.inet.ipsec.esp_port&quot;</span>, NULL, NULL, &amp;udp_port, <span class="enscript-keyword">sizeof</span>(udp_port)) != 0)
  201. errx(1, <span class="enscript-string">&quot;couldn't set net.inet.ipsec.esp_port to %d. (%s)&quot;</span>,
  202. udp_port, strerror(errno));
  203. }
  204. #<span class="enscript-reference">endif</span>
  205. <span class="enscript-comment">/*
  206. * install SAs from the specified file. If the file is not specified
  207. * by the configuration file, racoon will exit.
  208. */</span>
  209. <span class="enscript-keyword">if</span> (loading_sa &amp;&amp; !f_local) {
  210. <span class="enscript-keyword">if</span> (backupsa_from_file() != 0)
  211. errx(1, <span class="enscript-string">&quot;something error happened &quot;</span>
  212. <span class="enscript-string">&quot;SA recovering.&quot;</span>);
  213. }
  214. <span class="enscript-keyword">if</span> (f_foreground)
  215. close(0);
  216. <span class="enscript-keyword">else</span> {
  217. <span class="enscript-type">const</span> <span class="enscript-type">char</span> *pid_file = _PATH_VARRUN <span class="enscript-string">&quot;racoon.pid&quot;</span>;
  218. FILE *fp;
  219. <span class="enscript-keyword">if</span> (daemon(0, 0) &lt; 0) {
  220. errx(1, <span class="enscript-string">&quot;failed to be daemon. (%s)&quot;</span>,
  221. strerror(errno));
  222. }
  223. <span class="enscript-comment">/*
  224. * In case somebody has started inetd manually, we need to
  225. * clear the logname, so that old servers run as root do not
  226. * get the user's logname..
  227. */</span>
  228. <span class="enscript-keyword">if</span> (setlogin(<span class="enscript-string">&quot;&quot;</span>) &lt; 0) {
  229. plog(LLV_ERROR, LOCATION, NULL,
  230. <span class="enscript-string">&quot;cannot clear logname: %s\n&quot;</span>, strerror(errno));
  231. <span class="enscript-comment">/* no big deal if it fails.. */</span>
  232. }
  233. racoon_pid = getpid();
  234. fp = fopen(pid_file, <span class="enscript-string">&quot;w&quot;</span>);
  235. <span class="enscript-keyword">if</span> (fp) {
  236. <span class="enscript-keyword">if</span> (fchmod(fileno(fp),
  237. S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) == -1) {
  238. syslog(LOG_ERR, <span class="enscript-string">&quot;%s&quot;</span>, strerror(errno));
  239. fclose(fp);
  240. exit(1);
  241. }
  242. fprintf(fp, <span class="enscript-string">&quot;%ld\n&quot;</span>, (<span class="enscript-type">long</span>)racoon_pid);
  243. fclose(fp);
  244. } <span class="enscript-keyword">else</span> {
  245. plog(LLV_ERROR, LOCATION, NULL,
  246. <span class="enscript-string">&quot;cannot open %s&quot;</span>, pid_file);
  247. }
  248. <span class="enscript-keyword">if</span> (!f_local) {
  249. <span class="enscript-keyword">if</span> (atexit(cleanup_pidfile) &lt; 0) {
  250. plog(LLV_ERROR, LOCATION, NULL,
  251. <span class="enscript-string">&quot;cannot register pidfile cleanup&quot;</span>);
  252. }
  253. }
  254. }
  255. session();
  256. exit(0);
  257. }
  258. <span class="enscript-type">static</span> <span class="enscript-type">void</span>
  259. <span class="enscript-function-name">cleanup_pidfile</span>()
  260. {
  261. pid_t p = getpid();
  262. <span class="enscript-comment">/* if it's not child process, clean everything */</span>
  263. <span class="enscript-keyword">if</span> (racoon_pid == p) {
  264. <span class="enscript-type">const</span> <span class="enscript-type">char</span> *pid_file = _PATH_VARRUN <span class="enscript-string">&quot;racoon.pid&quot;</span>;
  265. (<span class="enscript-type">void</span>) unlink(pid_file);
  266. }
  267. }
  268. <span class="enscript-type">static</span> <span class="enscript-type">void</span>
  269. <span class="enscript-function-name">parse</span>(ac, av)
  270. <span class="enscript-type">int</span> ac;
  271. <span class="enscript-type">char</span> **av;
  272. {
  273. <span class="enscript-type">extern</span> <span class="enscript-type">char</span> *optarg;
  274. <span class="enscript-type">extern</span> <span class="enscript-type">int</span> optind;
  275. <span class="enscript-type">int</span> c;
  276. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">YYDEBUG</span>
  277. <span class="enscript-type">extern</span> <span class="enscript-type">int</span> yydebug;
  278. #<span class="enscript-reference">endif</span>
  279. pname = strrchr(*av, <span class="enscript-string">'/'</span>);
  280. <span class="enscript-keyword">if</span> (pname)
  281. pname++;
  282. <span class="enscript-keyword">else</span>
  283. pname = *av;
  284. <span class="enscript-keyword">while</span> ((c = getopt(ac, av, <span class="enscript-string">&quot;dFp:a:f:l:vZB&quot;</span>
  285. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">YYDEBUG</span>
  286. <span class="enscript-string">&quot;y&quot;</span>
  287. #<span class="enscript-reference">endif</span>
  288. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
  289. <span class="enscript-string">&quot;46&quot;</span>
  290. #<span class="enscript-reference">endif</span>
  291. )) != -1) {
  292. <span class="enscript-keyword">switch</span> (c) {
  293. <span class="enscript-keyword">case</span> <span class="enscript-string">'d'</span>:
  294. loglevel++;
  295. <span class="enscript-keyword">break</span>;
  296. <span class="enscript-keyword">case</span> <span class="enscript-string">'F'</span>:
  297. printf(<span class="enscript-string">&quot;Foreground mode.\n&quot;</span>);
  298. f_foreground = 1;
  299. <span class="enscript-keyword">break</span>;
  300. <span class="enscript-keyword">case</span> <span class="enscript-string">'p'</span>:
  301. lcconf-&gt;port_isakmp = atoi(optarg);
  302. <span class="enscript-keyword">break</span>;
  303. <span class="enscript-keyword">case</span> <span class="enscript-string">'a'</span>:
  304. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
  305. lcconf-&gt;port_admin = atoi(optarg);
  306. <span class="enscript-keyword">break</span>;
  307. #<span class="enscript-reference">else</span>
  308. fprintf(stderr, <span class="enscript-string">&quot;%s: the option is disabled &quot;</span>
  309. <span class="enscript-string">&quot;in the configuration\n&quot;</span>, pname);
  310. exit(1);
  311. #<span class="enscript-reference">endif</span>
  312. <span class="enscript-keyword">case</span> <span class="enscript-string">'f'</span>:
  313. lcconf-&gt;racoon_conf = optarg;
  314. <span class="enscript-keyword">break</span>;
  315. <span class="enscript-keyword">case</span> <span class="enscript-string">'l'</span>:
  316. plogset(optarg);
  317. <span class="enscript-keyword">break</span>;
  318. <span class="enscript-keyword">case</span> <span class="enscript-string">'v'</span>:
  319. vflag++;
  320. <span class="enscript-keyword">break</span>;
  321. <span class="enscript-keyword">case</span> <span class="enscript-string">'Z'</span>:
  322. <span class="enscript-comment">/*
  323. * only local test.
  324. * To specify -Z option and to choice a appropriate
  325. * port number for ISAKMP, you can launch some racoons
  326. * on the local host for debug.
  327. * pk_sendadd() on initiator side is always failed
  328. * even if this flag is used. Because there is same
  329. * spi in the SAD which is inserted by pk_sendgetspi()
  330. * on responder side.
  331. */</span>
  332. printf(<span class="enscript-string">&quot;Local test mode.\n&quot;</span>);
  333. f_local = 1;
  334. <span class="enscript-keyword">break</span>;
  335. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">YYDEBUG</span>
  336. <span class="enscript-keyword">case</span> <span class="enscript-string">'y'</span>:
  337. yydebug = 1;
  338. <span class="enscript-keyword">break</span>;
  339. #<span class="enscript-reference">endif</span>
  340. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
  341. <span class="enscript-keyword">case</span> <span class="enscript-string">'4'</span>:
  342. lcconf-&gt;default_af = AF_INET;
  343. <span class="enscript-keyword">break</span>;
  344. <span class="enscript-keyword">case</span> <span class="enscript-string">'6'</span>:
  345. lcconf-&gt;default_af = AF_INET6;
  346. <span class="enscript-keyword">break</span>;
  347. #<span class="enscript-reference">endif</span>
  348. <span class="enscript-keyword">case</span> <span class="enscript-string">'B'</span>:
  349. loading_sa++;
  350. <span class="enscript-keyword">break</span>;
  351. <span class="enscript-reference">default</span>:
  352. usage();
  353. <span class="enscript-comment">/* NOTREACHED */</span>
  354. }
  355. }
  356. ac -= optind;
  357. av += optind;
  358. <span class="enscript-keyword">if</span> (ac != 0) {
  359. usage();
  360. <span class="enscript-comment">/* NOTREACHED */</span>
  361. }
  362. <span class="enscript-keyword">return</span>;
  363. }
  364. <span class="enscript-type">static</span> <span class="enscript-type">void</span>
  365. <span class="enscript-function-name">restore_params</span>()
  366. {
  367. saverestore_params(1);
  368. }
  369. <span class="enscript-type">static</span> <span class="enscript-type">void</span>
  370. <span class="enscript-function-name">save_params</span>()
  371. {
  372. saverestore_params(0);
  373. }
  374. <span class="enscript-type">static</span> <span class="enscript-type">void</span>
  375. <span class="enscript-function-name">saverestore_params</span>(f)
  376. <span class="enscript-type">int</span> f;
  377. {
  378. <span class="enscript-type">static</span> u_int16_t s_port_isakmp;
  379. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
  380. <span class="enscript-type">static</span> u_int16_t s_port_admin;
  381. #<span class="enscript-reference">endif</span>
  382. <span class="enscript-comment">/* 0: save, 1: restore */</span>
  383. <span class="enscript-keyword">if</span> (f) {
  384. lcconf-&gt;port_isakmp = s_port_isakmp;
  385. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
  386. lcconf-&gt;port_admin = s_port_admin;
  387. #<span class="enscript-reference">endif</span>
  388. } <span class="enscript-keyword">else</span> {
  389. s_port_isakmp = lcconf-&gt;port_isakmp;
  390. #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
  391. s_port_admin = lcconf-&gt;port_admin;
  392. #<span class="enscript-reference">endif</span>
  393. }
  394. }
  395. </pre>
  396. <hr />
  397. </body></html>