/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
- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
- <head>
- <title>main.c</title>
- <style type="text/css">
- .enscript-comment { font-style: italic; color: rgb(178,34,34); }
- .enscript-function-name { font-weight: bold; color: rgb(0,0,255); }
- .enscript-variable-name { font-weight: bold; color: rgb(184,134,11); }
- .enscript-keyword { font-weight: bold; color: rgb(160,32,240); }
- .enscript-reference { font-weight: bold; color: rgb(95,158,160); }
- .enscript-string { font-weight: bold; color: rgb(188,143,143); }
- .enscript-builtin { font-weight: bold; color: rgb(218,112,214); }
- .enscript-type { font-weight: bold; color: rgb(34,139,34); }
- .enscript-highlight { text-decoration: underline; color: 0; }
- </style>
- </head>
- <body id="top">
- <h1 style="margin:8px;" id="f1">main.c <span style="font-weight: normal; font-size: 0.5em;">[<a href="?txt">plain text</a>]</span></h1>
- <hr/>
- <div></div>
- <pre>
- <span class="enscript-comment">/* $KAME: main.c,v 1.48 2002/11/20 02:06:07 itojun Exp $ */</span>
- <span class="enscript-comment">/*
- * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project.
- * All rights reserved.
- *
- * Redistribution and use in source and binary forms, with or without
- * modification, are permitted provided that the following conditions
- * are met:
- * 1. Redistributions of source code must retain the above copyright
- * notice, this list of conditions and the following disclaimer.
- * 2. Redistributions in binary form must reproduce the above copyright
- * notice, this list of conditions and the following disclaimer in the
- * documentation and/or other materials provided with the distribution.
- * 3. Neither the name of the project nor the names of its contributors
- * may be used to endorse or promote products derived from this software
- * without specific prior written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
- * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
- * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
- * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
- * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
- * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
- * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
- * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
- * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
- * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
- * SUCH DAMAGE.
- */</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/types.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/param.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/socket.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/stat.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/random.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><sys/sysctl.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><netinet/in.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><stdlib.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><stdio.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><string.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><errno.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><limits.h></span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">HAVE_UNISTD_H</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><unistd.h></span>
- #<span class="enscript-reference">endif</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><paths.h></span>
- #<span class="enscript-reference">include</span> <span class="enscript-string"><err.h></span>
- <span class="enscript-comment">/*
- * If we're using a debugging malloc library, this may define our
- * wrapper stubs.
- */</span>
- #<span class="enscript-reference">define</span> <span class="enscript-variable-name">RACOON_MAIN_PROGRAM</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"gcmalloc.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"var.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"misc.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"vmbuf.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"plog.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"debug.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"cfparse.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"isakmp_var.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"remoteconf.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"localconf.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"session.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"oakley.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"pfkey.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"crypto_openssl.h"</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"backupsa.h"</span>
- #<span class="enscript-reference">ifndef</span> <span class="enscript-variable-name">HAVE_ARC4RANDOM</span>
- #<span class="enscript-reference">include</span> <span class="enscript-string">"arc4random.h"</span>
- #<span class="enscript-reference">endif</span>
- <span class="enscript-type">int</span> f_foreground = 0; <span class="enscript-comment">/* force running in foreground. */</span>
- <span class="enscript-type">int</span> f_local = 0; <span class="enscript-comment">/* local test mode. behave like a wall. */</span>
- <span class="enscript-type">int</span> vflag = 1; <span class="enscript-comment">/* for print-isakmp.c */</span>
- <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>
- #<span class="enscript-reference">define</span> <span class="enscript-variable-name">RACOON_VERSION</span> <span class="enscript-string">"20001216 <a href="mailto:sakane@kame.net">sakane@kame.net</a>"</span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">RACOON_PKG_VERSION</span>
- <span class="enscript-type">static</span> <span class="enscript-type">char</span> version0[] = <span class="enscript-string">"@(#)package version "</span> RACOON_PKG_VERSION ;
- <span class="enscript-type">static</span> <span class="enscript-type">char</span> version[] = <span class="enscript-string">"@(#)internal version "</span> RACOON_VERSION ;
- #<span class="enscript-reference">else</span>
- <span class="enscript-type">static</span> <span class="enscript-type">char</span> version[] = <span class="enscript-string">"@(#)racoon 20001216 "</span> RACOON_VERSION ;
- #<span class="enscript-reference">endif</span>
- <span class="enscript-type">static</span> pid_t racoon_pid = 0;
- <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> **));
- <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>));
- <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> **));
- <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>));
- <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>));
- <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>));
- <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>));
- <span class="enscript-type">void</span>
- <span class="enscript-function-name">usage</span>()
- {
- printf(<span class="enscript-string">"usage: racoon [-BdFv%s] %s[-f (file)] [-l (file)] [-p (port)]\n"</span>,
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
- <span class="enscript-string">"46"</span>,
- #<span class="enscript-reference">else</span>
- <span class="enscript-string">""</span>,
- #<span class="enscript-reference">endif</span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
- <span class="enscript-string">"[-a (port)] "</span>
- #<span class="enscript-reference">else</span>
- <span class="enscript-string">""</span>
- #<span class="enscript-reference">endif</span>
- );
- printf(<span class="enscript-string">" -B: install SA to the kernel from the file "</span>
- <span class="enscript-string">"specified by the configuration file.\n"</span>);
- printf(<span class="enscript-string">" -d: debug level, more -d will generate more debug message.\n"</span>);
- printf(<span class="enscript-string">" -F: run in foreground, do not become daemon.\n"</span>);
- printf(<span class="enscript-string">" -v: be more verbose\n"</span>);
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
- printf(<span class="enscript-string">" -4: IPv4 mode.\n"</span>);
- printf(<span class="enscript-string">" -6: IPv6 mode.\n"</span>);
- #<span class="enscript-reference">endif</span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
- printf(<span class="enscript-string">" -a: port number for admin port.\n"</span>);
- #<span class="enscript-reference">endif</span>
- printf(<span class="enscript-string">" -f: pathname for configuration file.\n"</span>);
- printf(<span class="enscript-string">" -l: pathname for log file.\n"</span>);
- printf(<span class="enscript-string">" -p: port number for isakmp (default: %d).\n"</span>, PORT_ISAKMP);
- exit(1);
- }
- <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>);
- <span class="enscript-type">int</span>
- <span class="enscript-function-name">main</span>(ac, av)
- <span class="enscript-type">int</span> ac;
- <span class="enscript-type">char</span> **av;
- {
- <span class="enscript-type">int</span> error;
-
- <span class="enscript-keyword">if</span> (geteuid() != 0) {
- errx(1, <span class="enscript-string">"must be root to invoke this program."</span>);
- <span class="enscript-comment">/* NOTREACHED*/</span>
- }
- <span class="enscript-comment">/*
- * Don't let anyone read files I write. Although some files (such as
- * the PID file) can be other readable, we dare to use the global mask,
- * because racoon uses fopen(3), which can't specify the permission
- * at the creation time.
- */</span>
- umask(077);
- <span class="enscript-keyword">if</span> (umask(077) != 077) {
- errx(1, <span class="enscript-string">"could not set umask"</span>);
- <span class="enscript-comment">/* NOTREACHED*/</span>
- }
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">DEBUG_RECORD_MALLOCATION</span>
- DRM_init();
- #<span class="enscript-reference">endif</span>
- initlcconf();
- initrmconf();
- oakley_dhinit();
- eay_init_error();
- parse(ac, av);
- ploginit();
- (<span class="enscript-type">void</span>)arc4random(); <span class="enscript-comment">/* XXX test if random number is available */</span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">RACOON_PKG_VERSION</span>
- plog(LLV_INFO, LOCATION, NULL, <span class="enscript-string">"%s\n"</span>, version0);
- #<span class="enscript-reference">endif</span>
- plog(LLV_INFO, LOCATION, NULL, <span class="enscript-string">"%s\n"</span>, version);
- plog(LLV_INFO, LOCATION, NULL, <span class="enscript-string">"@(#)"</span>
- <span class="enscript-string">"This product linked %s (<a href="http://www.openssl.org/">http://www.openssl.org/</a>)"</span>
- <span class="enscript-string">"\n"</span>, eay_version());
- <span class="enscript-keyword">if</span> (pfkey_init() < 0) {
- errx(1, <span class="enscript-string">"something error happened "</span>
- <span class="enscript-string">"while pfkey initializing."</span>);
- <span class="enscript-comment">/* NOTREACHED*/</span>
- }
- <span class="enscript-comment">/*
- * in order to prefer the parameters by command line,
- * saving some parameters before parsing configuration file.
- */</span>
- save_params();
- error = cfparse();
- <span class="enscript-keyword">if</span> (error != 0)
- errx(1, <span class="enscript-string">"failed to parse configuration file."</span>);
- restore_params();
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">IKE_NAT_T</span>
- <span class="enscript-comment">/* Tell the kernel which port to use for UDP encapsulation */</span>
- {
- <span class="enscript-type">int</span> udp_port = PORT_ISAKMP_NATT;
- <span class="enscript-keyword">if</span> (sysctlbyname(<span class="enscript-string">"net.inet.ipsec.esp_port"</span>, NULL, NULL, &udp_port, <span class="enscript-keyword">sizeof</span>(udp_port)) != 0)
- errx(1, <span class="enscript-string">"couldn't set net.inet.ipsec.esp_port to %d. (%s)"</span>,
- udp_port, strerror(errno));
- }
- #<span class="enscript-reference">endif</span>
- <span class="enscript-comment">/*
- * install SAs from the specified file. If the file is not specified
- * by the configuration file, racoon will exit.
- */</span>
- <span class="enscript-keyword">if</span> (loading_sa && !f_local) {
- <span class="enscript-keyword">if</span> (backupsa_from_file() != 0)
- errx(1, <span class="enscript-string">"something error happened "</span>
- <span class="enscript-string">"SA recovering."</span>);
- }
- <span class="enscript-keyword">if</span> (f_foreground)
- close(0);
- <span class="enscript-keyword">else</span> {
- <span class="enscript-type">const</span> <span class="enscript-type">char</span> *pid_file = _PATH_VARRUN <span class="enscript-string">"racoon.pid"</span>;
- FILE *fp;
- <span class="enscript-keyword">if</span> (daemon(0, 0) < 0) {
- errx(1, <span class="enscript-string">"failed to be daemon. (%s)"</span>,
- strerror(errno));
- }
- <span class="enscript-comment">/*
- * In case somebody has started inetd manually, we need to
- * clear the logname, so that old servers run as root do not
- * get the user's logname..
- */</span>
- <span class="enscript-keyword">if</span> (setlogin(<span class="enscript-string">""</span>) < 0) {
- plog(LLV_ERROR, LOCATION, NULL,
- <span class="enscript-string">"cannot clear logname: %s\n"</span>, strerror(errno));
- <span class="enscript-comment">/* no big deal if it fails.. */</span>
- }
- racoon_pid = getpid();
- fp = fopen(pid_file, <span class="enscript-string">"w"</span>);
- <span class="enscript-keyword">if</span> (fp) {
- <span class="enscript-keyword">if</span> (fchmod(fileno(fp),
- S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) == -1) {
- syslog(LOG_ERR, <span class="enscript-string">"%s"</span>, strerror(errno));
- fclose(fp);
- exit(1);
- }
- fprintf(fp, <span class="enscript-string">"%ld\n"</span>, (<span class="enscript-type">long</span>)racoon_pid);
- fclose(fp);
- } <span class="enscript-keyword">else</span> {
- plog(LLV_ERROR, LOCATION, NULL,
- <span class="enscript-string">"cannot open %s"</span>, pid_file);
- }
- <span class="enscript-keyword">if</span> (!f_local) {
- <span class="enscript-keyword">if</span> (atexit(cleanup_pidfile) < 0) {
- plog(LLV_ERROR, LOCATION, NULL,
- <span class="enscript-string">"cannot register pidfile cleanup"</span>);
- }
- }
- }
- session();
- exit(0);
- }
- <span class="enscript-type">static</span> <span class="enscript-type">void</span>
- <span class="enscript-function-name">cleanup_pidfile</span>()
- {
- pid_t p = getpid();
- <span class="enscript-comment">/* if it's not child process, clean everything */</span>
- <span class="enscript-keyword">if</span> (racoon_pid == p) {
- <span class="enscript-type">const</span> <span class="enscript-type">char</span> *pid_file = _PATH_VARRUN <span class="enscript-string">"racoon.pid"</span>;
- (<span class="enscript-type">void</span>) unlink(pid_file);
- }
- }
- <span class="enscript-type">static</span> <span class="enscript-type">void</span>
- <span class="enscript-function-name">parse</span>(ac, av)
- <span class="enscript-type">int</span> ac;
- <span class="enscript-type">char</span> **av;
- {
- <span class="enscript-type">extern</span> <span class="enscript-type">char</span> *optarg;
- <span class="enscript-type">extern</span> <span class="enscript-type">int</span> optind;
- <span class="enscript-type">int</span> c;
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">YYDEBUG</span>
- <span class="enscript-type">extern</span> <span class="enscript-type">int</span> yydebug;
- #<span class="enscript-reference">endif</span>
- pname = strrchr(*av, <span class="enscript-string">'/'</span>);
- <span class="enscript-keyword">if</span> (pname)
- pname++;
- <span class="enscript-keyword">else</span>
- pname = *av;
- <span class="enscript-keyword">while</span> ((c = getopt(ac, av, <span class="enscript-string">"dFp:a:f:l:vZB"</span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">YYDEBUG</span>
- <span class="enscript-string">"y"</span>
- #<span class="enscript-reference">endif</span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
- <span class="enscript-string">"46"</span>
- #<span class="enscript-reference">endif</span>
- )) != -1) {
- <span class="enscript-keyword">switch</span> (c) {
- <span class="enscript-keyword">case</span> <span class="enscript-string">'d'</span>:
- loglevel++;
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-string">'F'</span>:
- printf(<span class="enscript-string">"Foreground mode.\n"</span>);
- f_foreground = 1;
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-string">'p'</span>:
- lcconf->port_isakmp = atoi(optarg);
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-string">'a'</span>:
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
- lcconf->port_admin = atoi(optarg);
- <span class="enscript-keyword">break</span>;
- #<span class="enscript-reference">else</span>
- fprintf(stderr, <span class="enscript-string">"%s: the option is disabled "</span>
- <span class="enscript-string">"in the configuration\n"</span>, pname);
- exit(1);
- #<span class="enscript-reference">endif</span>
- <span class="enscript-keyword">case</span> <span class="enscript-string">'f'</span>:
- lcconf->racoon_conf = optarg;
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-string">'l'</span>:
- plogset(optarg);
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-string">'v'</span>:
- vflag++;
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-string">'Z'</span>:
- <span class="enscript-comment">/*
- * only local test.
- * To specify -Z option and to choice a appropriate
- * port number for ISAKMP, you can launch some racoons
- * on the local host for debug.
- * pk_sendadd() on initiator side is always failed
- * even if this flag is used. Because there is same
- * spi in the SAD which is inserted by pk_sendgetspi()
- * on responder side.
- */</span>
- printf(<span class="enscript-string">"Local test mode.\n"</span>);
- f_local = 1;
- <span class="enscript-keyword">break</span>;
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">YYDEBUG</span>
- <span class="enscript-keyword">case</span> <span class="enscript-string">'y'</span>:
- yydebug = 1;
- <span class="enscript-keyword">break</span>;
- #<span class="enscript-reference">endif</span>
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">INET6</span>
- <span class="enscript-keyword">case</span> <span class="enscript-string">'4'</span>:
- lcconf->default_af = AF_INET;
- <span class="enscript-keyword">break</span>;
- <span class="enscript-keyword">case</span> <span class="enscript-string">'6'</span>:
- lcconf->default_af = AF_INET6;
- <span class="enscript-keyword">break</span>;
- #<span class="enscript-reference">endif</span>
- <span class="enscript-keyword">case</span> <span class="enscript-string">'B'</span>:
- loading_sa++;
- <span class="enscript-keyword">break</span>;
- <span class="enscript-reference">default</span>:
- usage();
- <span class="enscript-comment">/* NOTREACHED */</span>
- }
- }
- ac -= optind;
- av += optind;
- <span class="enscript-keyword">if</span> (ac != 0) {
- usage();
- <span class="enscript-comment">/* NOTREACHED */</span>
- }
- <span class="enscript-keyword">return</span>;
- }
- <span class="enscript-type">static</span> <span class="enscript-type">void</span>
- <span class="enscript-function-name">restore_params</span>()
- {
- saverestore_params(1);
- }
- <span class="enscript-type">static</span> <span class="enscript-type">void</span>
- <span class="enscript-function-name">save_params</span>()
- {
- saverestore_params(0);
- }
- <span class="enscript-type">static</span> <span class="enscript-type">void</span>
- <span class="enscript-function-name">saverestore_params</span>(f)
- <span class="enscript-type">int</span> f;
- {
- <span class="enscript-type">static</span> u_int16_t s_port_isakmp;
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
- <span class="enscript-type">static</span> u_int16_t s_port_admin;
- #<span class="enscript-reference">endif</span>
- <span class="enscript-comment">/* 0: save, 1: restore */</span>
- <span class="enscript-keyword">if</span> (f) {
- lcconf->port_isakmp = s_port_isakmp;
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
- lcconf->port_admin = s_port_admin;
- #<span class="enscript-reference">endif</span>
- } <span class="enscript-keyword">else</span> {
- s_port_isakmp = lcconf->port_isakmp;
- #<span class="enscript-reference">ifdef</span> <span class="enscript-variable-name">ENABLE_ADMINPORT</span>
- s_port_admin = lcconf->port_admin;
- #<span class="enscript-reference">endif</span>
- }
- }
- </pre>
- <hr />
- </body></html>