Merge "Remove racoon." into main am: 983a494a99

Original change: https://android-review.googlesource.com/c/platform/external/ipsec-tools/+/2825853

Change-Id: I4b5fa5017ff7ba01162ab9e13a46b0c177f020e1
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
diff --git a/Android.bp b/Android.bp
index 0ed452d..c4e2761 100644
--- a/Android.bp
+++ b/Android.bp
@@ -50,80 +50,6 @@
     ],
 }
 
-cc_binary {
-    name: "racoon",
-
-    srcs: [
-        "src/racoon/algorithm.c",
-        "src/racoon/crypto_openssl.c",
-        "src/racoon/genlist.c",
-        "src/racoon/handler.c",
-        "src/racoon/isakmp.c",
-        "src/racoon/isakmp_agg.c",
-        "src/racoon/isakmp_base.c",
-        "src/racoon/isakmp_cfg.c",
-        "src/racoon/isakmp_frag.c",
-        "src/racoon/isakmp_ident.c",
-        "src/racoon/isakmp_inf.c",
-        "src/racoon/isakmp_newg.c",
-        "src/racoon/isakmp_quick.c",
-        "src/racoon/isakmp_unity.c",
-        "src/racoon/isakmp_xauth.c",
-        "src/racoon/ipsec_doi.c",
-        "src/racoon/nattraversal.c",
-        "src/racoon/oakley.c",
-        "src/racoon/pfkey.c",
-        "src/racoon/policy.c",
-        "src/racoon/proposal.c",
-        "src/racoon/remoteconf.c",
-        "src/racoon/schedule.c",
-        "src/racoon/sockmisc.c",
-        "src/racoon/str2val.c",
-        "src/racoon/strnames.c",
-        "src/racoon/vendorid.c",
-        "src/racoon/vmbuf.c",
-        "main.c",
-        "setup.c",
-    ],
-
-    local_include_dirs: [
-        "src/include-glibc",
-        "src/racoon",
-        "src/racoon/missing",
-    ],
-
-    static_libs: ["libipsec"],
-
-    shared_libs: [
-        "libcutils",
-        "liblog",
-        "libcrypto",
-        "libkeystore-engine",
-        "libnetd_client",
-    ],
-
-    cflags: [
-        "-DANDROID_CHANGES",
-        "-DHAVE_CONFIG_H",
-        "-D_BSD_SOURCE=1",
-
-        "-Wno-sign-compare",
-        "-Wno-missing-field-initializers",
-        "-Wno-unused-parameter",
-        "-Wno-pointer-sign",
-        "-Werror",
-
-        // Turn off unused XXX warnings. Should be removed/fixed when syncing with upstream. b/18523687, b/18632512
-        "-Wno-unused-variable",
-        "-Wno-unused-but-set-variable",
-        "-Wno-unused-function",
-        "-Wno-unused-label",
-        "-Wno-unused-value",
-    ],
-
-    init_rc: ["racoon.rc"],
-}
-
 cc_library_static {
     name: "libipsec",
 
diff --git a/Makefile b/Makefile
deleted file mode 100644
index d8c417f..0000000
--- a/Makefile
+++ /dev/null
@@ -1,35 +0,0 @@
-all:
-	gcc -O3 -Wall -o racoon -I. -Isrc/include-glibc -Isrc/libipsec \
-	-Isrc/racoon -Isrc/racoon/missing -DHAVE_CONFIG_H -lcrypto \
-	src/libipsec/pfkey.c \
-	src/libipsec/ipsec_strerror.c \
-	src/racoon/algorithm.c \
-	src/racoon/crypto_openssl.c \
-	src/racoon/genlist.c \
-	src/racoon/handler.c \
-	src/racoon/isakmp.c \
-	src/racoon/isakmp_agg.c \
-	src/racoon/isakmp_base.c \
-	src/racoon/isakmp_cfg.c \
-	src/racoon/isakmp_frag.c \
-	src/racoon/isakmp_ident.c \
-	src/racoon/isakmp_inf.c \
-	src/racoon/isakmp_newg.c \
-	src/racoon/isakmp_quick.c \
-	src/racoon/isakmp_unity.c \
-	src/racoon/isakmp_xauth.c \
-	src/racoon/ipsec_doi.c \
-	src/racoon/nattraversal.c \
-	src/racoon/oakley.c \
-	src/racoon/pfkey.c \
-	src/racoon/policy.c \
-	src/racoon/proposal.c \
-	src/racoon/remoteconf.c \
-	src/racoon/schedule.c \
-	src/racoon/sockmisc.c \
-	src/racoon/str2val.c \
-	src/racoon/strnames.c \
-	src/racoon/vendorid.c \
-	src/racoon/vmbuf.c \
-	main.c \
-	setup.c
diff --git a/README b/README
index 2e4f90a..e366133 100644
--- a/README
+++ b/README
@@ -6,7 +6,6 @@
 
 	- libipsec, a PF_KEYv2 library
 	- setkey, a tool to directly manipulate policies and SAs
-	- racoon, an IKEv1 keying daemon
 
 IPsec-tools were ported to Linux from the KAME project 
 (http://www.kame.net) by Derek Atkins  <derek@ihtfp.com>.
diff --git a/main.c b/main.c
deleted file mode 100644
index 63862c5..0000000
--- a/main.c
+++ /dev/null
@@ -1,243 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <stdarg.h>
-#include <signal.h>
-#include <poll.h>
-#include <unistd.h>
-
-#include "config.h"
-#include "gcmalloc.h"
-#include "schedule.h"
-#include "plog.h"
-
-#ifdef ANDROID_CHANGES
-
-#include <string.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-#include <errno.h>
-#include <linux/if.h>
-#include <linux/if_tun.h>
-
-#include <android/log.h>
-#include <cutils/sockets.h>
-#include <private/android_filesystem_config.h>
-
-static void notify_death()
-{
-    creat("/data/misc/vpn/abort", 0);
-}
-
-static int android_get_control_and_arguments(int *argc, char ***argv)
-{
-    static char *args[32];
-    int control;
-    int i;
-
-    atexit(notify_death);
-
-    if ((i = android_get_control_socket("racoon")) == -1) {
-        return -1;
-    }
-    do_plog(LLV_DEBUG, "Waiting for control socket");
-    if (listen(i, 1) == -1 || (control = accept(i, NULL, 0)) == -1) {
-        do_plog(LLV_ERROR, "Cannot get control socket");
-        exit(1);
-    }
-    close(i);
-    fcntl(control, F_SETFD, FD_CLOEXEC);
-
-    args[0] = (*argv)[0];
-    for (i = 1; i < 32; ++i) {
-        unsigned char bytes[2];
-        if (recv(control, &bytes[0], 1, 0) != 1 ||
-                recv(control, &bytes[1], 1, 0) != 1) {
-            do_plog(LLV_ERROR, "Cannot get argument length");
-            exit(1);
-        } else {
-            int length = bytes[0] << 8 | bytes[1];
-            int offset = 0;
-
-            if (length == 0xFFFF) {
-                break;
-            }
-            args[i] = malloc(length + 1);
-            while (offset < length) {
-                int n = recv(control, &args[i][offset], length - offset, 0);
-                if (n > 0) {
-                    offset += n;
-                } else {
-                    do_plog(LLV_ERROR, "Cannot get argument value");
-                    exit(1);
-                }
-            }
-            args[i][length] = 0;
-        }
-    }
-    do_plog(LLV_DEBUG, "Received %d arguments", i - 1);
-
-    *argc = i;
-    *argv = args;
-    return control;
-}
-
-const char *android_hook(char **envp)
-{
-    struct ifreq ifr = {.ifr_flags = IFF_TUN};
-    int tun = open("/dev/tun", 0);
-
-    /* Android does not support INTERNAL_WINS4_LIST, so we just use it. */
-    while (*envp && strncmp(*envp, "INTERNAL_WINS4_LIST=", 20)) {
-        ++envp;
-    }
-    if (!*envp) {
-        do_plog(LLV_ERROR, "Cannot find environment variable\n");
-        exit(1);
-    }
-    if (ioctl(tun, TUNSETIFF, &ifr)) {
-        do_plog(LLV_ERROR, "Cannot allocate TUN: %s\n", strerror(errno));
-        exit(1);
-    }
-    sprintf(*envp, "INTERFACE=%s", ifr.ifr_name);
-    return "/system/bin/ip-up-vpn";
-}
-
-#endif
-
-extern void setup(int argc, char **argv);
-extern void shutdown_session();
-
-static int monitors;
-static void (*callbacks[10])(int fd);
-static struct pollfd pollfds[10];
-
-char *pname;
-
-static void terminate(int signal)
-{
-    exit(1);
-}
-
-static void terminated()
-{
-    do_plog(LLV_INFO, "Bye\n");
-}
-
-void monitor_fd(int fd, void (*callback)(int))
-{
-    if (fd < 0 || monitors == 10) {
-        do_plog(LLV_ERROR, "Cannot monitor fd");
-        exit(1);
-    }
-    callbacks[monitors] = callback;
-    pollfds[monitors].fd = fd;
-    pollfds[monitors].events = callback ? POLLIN : 0;
-    ++monitors;
-}
-
-int main(int argc, char **argv)
-{
-#ifdef ANDROID_CHANGES
-    int control = android_get_control_and_arguments(&argc, &argv);
-
-    if (control != -1) {
-        pname = "%p";
-        monitor_fd(control, NULL);
-    }
-#endif
-
-    do_plog(LLV_INFO, "ipsec-tools 0.7.3 (http://ipsec-tools.sf.net)\n");
-
-    signal(SIGHUP, terminate);
-    signal(SIGINT, terminate);
-    signal(SIGTERM, terminate);
-    signal(SIGPIPE, SIG_IGN);
-    atexit(terminated);
-
-    setup(argc, argv);
-
-#ifdef ANDROID_CHANGES
-    shutdown(control, SHUT_WR);
-#endif
-
-    while (1) {
-        struct timeval *tv = schedular();
-        int timeout = tv->tv_sec * 1000 + tv->tv_usec / 1000 + 1;
-
-        if (poll(pollfds, monitors, timeout) > 0) {
-            int i;
-            for (i = 0; i < monitors; ++i) {
-                if (pollfds[i].revents & POLLHUP) {
-                    do_plog(LLV_INFO, "Connection is closed\n", pollfds[i].fd);
-                    shutdown_session();
-
-                    /* Wait for few seconds to consume late messages. */
-                    sleep(5);
-                    exit(1);
-                }
-                if (pollfds[i].revents & POLLIN) {
-                    callbacks[i](pollfds[i].fd);
-                }
-            }
-        }
-    }
-
-    return 0;
-}
-
-/* plog.h */
-
-void do_plog(int level, char *format, ...)
-{
-    if (level >= 0 && level <= 5) {
-#ifdef ANDROID_CHANGES
-        static int levels[6] = {
-            ANDROID_LOG_ERROR, ANDROID_LOG_WARN, ANDROID_LOG_INFO,
-            ANDROID_LOG_INFO, ANDROID_LOG_DEBUG, ANDROID_LOG_VERBOSE
-        };
-        va_list ap;
-        va_start(ap, format);
-        __android_log_vprint(levels[level], "racoon", format, ap);
-        va_end(ap);
-#else
-        static char *levels = "EWNIDV";
-        fprintf(stderr, "%c: ", levels[level]);
-        va_list ap;
-        va_start(ap, format);
-        vfprintf(stderr, format, ap);
-        va_end(ap);
-#endif
-    }
-}
-
-char *binsanitize(char *data, size_t length)
-{
-    char *output = racoon_malloc(length + 1);
-    if (output) {
-        size_t i;
-        for (i = 0; i < length; ++i) {
-            output[i] = (data[i] < ' ' || data[i] > '~') ? '?' : data[i];
-        }
-        output[length] = '\0';
-    }
-    return output;
-}
diff --git a/racoon.rc b/racoon.rc
deleted file mode 100644
index fdb8823..0000000
--- a/racoon.rc
+++ /dev/null
@@ -1,9 +0,0 @@
-service racoon /system/bin/racoon
-    class main
-    socket racoon stream 600 system system
-    # IKE uses UDP port 500.
-    user vpn
-    group vpn inet
-    capabilities NET_ADMIN NET_BIND_SERVICE NET_RAW
-    disabled
-    oneshot
diff --git a/setup.c b/setup.c
deleted file mode 100644
index 9cbe2f9..0000000
--- a/setup.c
+++ /dev/null
@@ -1,708 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#include <unistd.h>
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <netinet/ip.h>
-#include <netdb.h>
-#include <fcntl.h>
-
-#include "config.h"
-#include "gcmalloc.h"
-#include "libpfkey.h"
-#include "var.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "isakmp_xauth.h"
-#include "vmbuf.h"
-#include "crypto_openssl.h"
-#include "oakley.h"
-#include "ipsec_doi.h"
-#include "algorithm.h"
-#include "vendorid.h"
-#include "schedule.h"
-#include "pfkey.h"
-#include "nattraversal.h"
-#include "proposal.h"
-#include "sainfo.h"
-#include "localconf.h"
-#include "remoteconf.h"
-#include "sockmisc.h"
-#include "grabmyaddr.h"
-#include "plog.h"
-#include "admin.h"
-#include "privsep.h"
-#include "throttle.h"
-#include "misc.h"
-#include "handler.h"
-
-static struct localconf localconf;
-static struct sainfo sainfo;
-static char *pre_shared_key;
-
-static struct sockaddr *targets[2];
-static struct sockaddr *source;
-static struct myaddrs myaddrs[2];
-
-struct localconf *lcconf = &localconf;
-int f_local = 0;
-
-/*****************************************************************************/
-
-static void add_sainfo_algorithm(int class, int algorithm, int length)
-{
-    struct sainfoalg *p = calloc(1, sizeof(struct sainfoalg));
-    p->alg = algorithm;
-    p->encklen = length;
-
-    if (!sainfo.algs[class]) {
-        sainfo.algs[class] = p;
-    } else {
-        struct sainfoalg *q = sainfo.algs[class];
-        while (q->next) {
-            q = q->next;
-        }
-        q->next = p;
-    }
-}
-
-static void add_sainfo() {
-    if (pk_checkalg(algclass_ipsec_auth, algtype_hmac_sha2_512, 0) == 0) {
-        add_sainfo_algorithm(algclass_ipsec_auth, IPSECDOI_ATTR_AUTH_HMAC_SHA2_512, 0);
-    } else {
-        do_plog(LLV_WARNING, "Kernel does not support SHA512, not enabling\n");
-    }
-    if (pk_checkalg(algclass_ipsec_auth, algtype_hmac_sha2_384, 0) == 0) {
-        add_sainfo_algorithm(algclass_ipsec_auth, IPSECDOI_ATTR_AUTH_HMAC_SHA2_384, 0);
-    } else {
-        do_plog(LLV_WARNING, "Kernel does not support SHA384, not enabling\n");
-    }
-    add_sainfo_algorithm(algclass_ipsec_auth, IPSECDOI_ATTR_AUTH_HMAC_SHA1, 0);
-    add_sainfo_algorithm(algclass_ipsec_auth, IPSECDOI_ATTR_AUTH_HMAC_SHA2_256, 0);
-    add_sainfo_algorithm(algclass_ipsec_auth, IPSECDOI_ATTR_AUTH_HMAC_MD5, 0);
-    add_sainfo_algorithm(algclass_ipsec_enc, IPSECDOI_ESP_AES, 256);
-    add_sainfo_algorithm(algclass_ipsec_enc, IPSECDOI_ESP_AES, 128);
-    add_sainfo_algorithm(algclass_ipsec_enc, IPSECDOI_ESP_3DES, 0);
-    add_sainfo_algorithm(algclass_ipsec_enc, IPSECDOI_ESP_DES, 0);
-}
-
-static void set_globals(char *server)
-{
-    struct addrinfo hints = {
-        .ai_flags = AI_NUMERICSERV,
-#ifndef INET6
-        .ai_family = AF_INET,
-#else
-        .ai_family = AF_UNSPEC,
-#endif
-        .ai_socktype = SOCK_DGRAM,
-    };
-    struct addrinfo *info;
-
-    if (getaddrinfo(server, "500", &hints, &info) != 0) {
-        do_plog(LLV_ERROR, "Cannot resolve address: %s\n", server);
-        exit(1);
-    }
-    if (info->ai_next) {
-        do_plog(LLV_WARNING, "Found multiple addresses. Use the first one.\n");
-    }
-    targets[0] = dupsaddr(info->ai_addr);
-    freeaddrinfo(info);
-
-    source = getlocaladdr(targets[0]);
-    if (!source) {
-        do_plog(LLV_ERROR, "Cannot get local address\n");
-        exit(1);
-    }
-    set_port(targets[0], 0);
-    set_port(source, 0);
-
-    myaddrs[0].addr = dupsaddr(source);
-    set_port(myaddrs[0].addr, PORT_ISAKMP);
-    myaddrs[0].sock = -1;
-#ifdef ENABLE_NATT
-    myaddrs[0].next = &myaddrs[1];
-    myaddrs[1].addr = dupsaddr(myaddrs[0].addr);
-    set_port(myaddrs[1].addr, PORT_ISAKMP_NATT);
-    myaddrs[1].sock = -1;
-    myaddrs[1].udp_encap = 1;
-#endif
-
-    localconf.myaddrs = &myaddrs[0];
-    localconf.port_isakmp = PORT_ISAKMP;
-    localconf.port_isakmp_natt = PORT_ISAKMP_NATT;
-    localconf.default_af = AF_INET;
-    localconf.pathinfo[LC_PATHTYPE_CERT] = "./";
-    localconf.pad_random = LC_DEFAULT_PAD_RANDOM;
-    localconf.pad_randomlen = LC_DEFAULT_PAD_RANDOM;
-    localconf.pad_strict = LC_DEFAULT_PAD_STRICT;
-    localconf.pad_excltail = LC_DEFAULT_PAD_EXCLTAIL;
-    localconf.retry_counter = 10;
-    localconf.retry_interval = 3;
-    localconf.count_persend = LC_DEFAULT_COUNT_PERSEND;
-    localconf.secret_size = LC_DEFAULT_SECRETSIZE;
-    localconf.retry_checkph1 = LC_DEFAULT_RETRY_CHECKPH1;
-    localconf.wait_ph2complete = LC_DEFAULT_WAIT_PH2COMPLETE;
-    localconf.natt_ka_interval = LC_DEFAULT_NATT_KA_INTERVAL;
-
-    sainfo.lifetime = IPSECDOI_ATTR_SA_LD_SEC_DEFAULT;
-    sainfo.lifebyte = IPSECDOI_ATTR_SA_LD_KB_MAX;
-
-    memset(script_names, 0, sizeof(script_names));
-}
-
-/*****************************************************************************/
-
-static int policy_match(struct sadb_address *address)
-{
-    if (address) {
-        struct sockaddr *addr = PFKEY_ADDR_SADDR(address);
-        return !cmpsaddrwop(addr, targets[0]) || !cmpsaddrwop(addr, targets[1]);
-    }
-    return 0;
-}
-
-/* flush; spdflush; */
-static void flush()
-{
-    struct sadb_msg *p;
-    int replies = 0;
-    int key = pfkey_open();
-
-    if (pfkey_send_dump(key, SADB_SATYPE_UNSPEC) <= 0 ||
-        pfkey_send_spddump(key) <= 0) {
-        do_plog(LLV_ERROR, "Cannot dump SAD and SPD\n");
-        exit(1);
-    }
-
-    for (p = NULL; replies < 2 && (p = pfkey_recv(key)) != NULL; free(p)) {
-        caddr_t q[SADB_EXT_MAX + 1];
-
-        if (p->sadb_msg_type != SADB_DUMP &&
-            p->sadb_msg_type != SADB_X_SPDDUMP) {
-            continue;
-        }
-        replies += !p->sadb_msg_seq;
-
-        if (p->sadb_msg_errno || pfkey_align(p, q) || pfkey_check(q)) {
-            continue;
-        }
-        if (policy_match((struct sadb_address *)q[SADB_EXT_ADDRESS_SRC]) ||
-            policy_match((struct sadb_address *)q[SADB_EXT_ADDRESS_DST])) {
-            p->sadb_msg_type = (p->sadb_msg_type == SADB_DUMP) ?
-                               SADB_DELETE : SADB_X_SPDDELETE;
-            p->sadb_msg_reserved = 0;
-            p->sadb_msg_seq = 0;
-            pfkey_send(key, p, PFKEY_UNUNIT64(p->sadb_msg_len));
-        }
-    }
-
-    pfkey_close(key);
-}
-
-/* spdadd src dst protocol -P out ipsec esp/transport//require;
- * spdadd dst src protocol -P in  ipsec esp/transport//require;
- * or
- * spdadd src any protocol -P out ipsec esp/tunnel/local-remote/require;
- * spdadd any src protocol -P in  ipsec esp/tunnel/remote-local/require; */
-static void spdadd(struct sockaddr *src, struct sockaddr *dst,
-        int protocol, struct sockaddr *local, struct sockaddr *remote)
-{
-    struct __attribute__((packed)) {
-        struct sadb_x_policy p;
-        struct sadb_x_ipsecrequest q;
-        char addresses[sizeof(struct sockaddr_storage) * 2];
-    } policy;
-
-    struct sockaddr_storage any = {
-#ifndef __linux__
-        .ss_len = src->sa_len,
-#endif
-        .ss_family = src->sa_family,
-    };
-
-    int src_prefix = (src->sa_family == AF_INET) ? 32 : 128;
-    int dst_prefix = src_prefix;
-    int length = 0;
-    int key;
-
-    /* Fill values for outbound policy. */
-    memset(&policy, 0, sizeof(policy));
-    policy.p.sadb_x_policy_exttype = SADB_X_EXT_POLICY;
-    policy.p.sadb_x_policy_type = IPSEC_POLICY_IPSEC;
-    policy.p.sadb_x_policy_dir = IPSEC_DIR_OUTBOUND;
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-    policy.p.sadb_x_policy_priority = PRIORITY_DEFAULT;
-#endif
-    policy.q.sadb_x_ipsecrequest_proto = IPPROTO_ESP;
-    policy.q.sadb_x_ipsecrequest_mode = IPSEC_MODE_TRANSPORT;
-    policy.q.sadb_x_ipsecrequest_level = IPSEC_LEVEL_REQUIRE;
-
-    /* Deal with tunnel mode. */
-    if (!dst) {
-        int size = sysdep_sa_len(local);
-        memcpy(policy.addresses, local, size);
-        memcpy(&policy.addresses[size], remote, size);
-        length += size + size;
-
-        policy.q.sadb_x_ipsecrequest_mode = IPSEC_MODE_TUNNEL;
-        dst = (struct sockaddr *)&any;
-        dst_prefix = 0;
-
-        /* Also use the source address to filter policies. */
-        targets[1] = dupsaddr(src);
-    }
-
-    /* Fix lengths. */
-    length += sizeof(policy.q);
-    policy.q.sadb_x_ipsecrequest_len = length;
-    length += sizeof(policy.p);
-    policy.p.sadb_x_policy_len = PFKEY_UNIT64(length);
-
-    /* Always do a flush before adding new policies. */
-    flush();
-
-    /* Set outbound policy. */
-    key = pfkey_open();
-    if (pfkey_send_spdadd(key, src, src_prefix, dst, dst_prefix, protocol,
-            (caddr_t)&policy, length, 0) <= 0) {
-        do_plog(LLV_ERROR, "Cannot set outbound policy\n");
-        exit(1);
-    }
-
-    /* Flip values for inbound policy. */
-    policy.p.sadb_x_policy_dir = IPSEC_DIR_INBOUND;
-    if (!dst_prefix) {
-        int size = sysdep_sa_len(local);
-        memcpy(policy.addresses, remote, size);
-        memcpy(&policy.addresses[size], local, size);
-    }
-
-    /* Set inbound policy. */
-    if (pfkey_send_spdadd(key, dst, dst_prefix, src, src_prefix, protocol,
-            (caddr_t)&policy, length, 0) <= 0) {
-        do_plog(LLV_ERROR, "Cannot set inbound policy\n");
-        exit(1);
-    }
-
-    pfkey_close(key);
-    atexit(flush);
-}
-
-/*****************************************************************************/
-
-static void add_proposal(struct remoteconf *remoteconf,
-        int auth, int hash, int encryption, int length)
-{
-    struct isakmpsa *p = racoon_calloc(1, sizeof(struct isakmpsa));
-    p->prop_no = 1;
-    p->lifetime = OAKLEY_ATTR_SA_LD_SEC_DEFAULT;
-    p->enctype = encryption;
-    p->encklen = length;
-    p->authmethod = auth;
-    p->hashtype = hash;
-    p->dh_group = OAKLEY_ATTR_GRP_DESC_MODP1024;
-    p->vendorid = VENDORID_UNKNOWN;
-    p->rmconf = remoteconf;
-
-    if (!remoteconf->proposal) {
-      p->trns_no = 1;
-      remoteconf->proposal = p;
-    } else {
-        struct isakmpsa *q = remoteconf->proposal;
-        while (q->next) {
-            q = q->next;
-        }
-        p->trns_no = q->trns_no + 1;
-        q->next = p;
-    }
-}
-
-static vchar_t *strtovchar(char *string)
-{
-    vchar_t *vchar = string ? vmalloc(strlen(string) + 1) : NULL;
-    if (vchar) {
-        memcpy(vchar->v, string, vchar->l);
-        vchar->l -= 1;
-    }
-    return vchar;
-}
-
-static void set_pre_shared_key(struct remoteconf *remoteconf,
-        char *identifier, char *key)
-{
-    pre_shared_key = key;
-    if (identifier[0]) {
-        remoteconf->idv = strtovchar(identifier);
-        remoteconf->etypes->type = ISAKMP_ETYPE_AGG;
-
-        remoteconf->idvtype = IDTYPE_KEYID;
-        if (strchr(identifier, '.')) {
-            remoteconf->idvtype = IDTYPE_FQDN;
-            if (strchr(identifier, '@')) {
-                remoteconf->idvtype = IDTYPE_USERFQDN;
-            }
-        }
-    }
-}
-
-static void set_certificates(struct remoteconf *remoteconf,
-        char *user_private_key, char *user_certificate,
-        char *ca_certificate, char *server_certificate)
-{
-    remoteconf->myprivfile = user_private_key;
-    remoteconf->mycertfile = user_certificate;
-    if (user_certificate) {
-        remoteconf->idvtype = IDTYPE_ASN1DN;
-    }
-    if (!ca_certificate[0]) {
-        remoteconf->verify_cert = FALSE;
-    } else {
-        remoteconf->cacertfile = ca_certificate;
-    }
-    if (server_certificate[0]) {
-        remoteconf->peerscertfile = server_certificate;
-        remoteconf->getcert_method = ISAKMP_GETCERT_LOCALFILE;
-    }
-}
-
-#ifdef ENABLE_HYBRID
-
-static void set_xauth_and_more(struct remoteconf *remoteconf,
-        char *username, char *password, char *phase1_up, char *script_arg)
-{
-    struct xauth_rmconf *xauth = racoon_calloc(1, sizeof(struct xauth_rmconf));
-    xauth->login = strtovchar(username);
-    xauth->login->l += 1;
-    xauth->pass = strtovchar(password);
-    // Unlike the code that reads login, the code that reads pass does not
-    // strip trailing nulls, so don't add one here.
-    remoteconf->xauth = xauth;
-    remoteconf->mode_cfg = TRUE;
-    remoteconf->script[SCRIPT_PHASE1_UP] = strtovchar(phase1_up);
-    script_names[SCRIPT_PHASE1_UP] = script_arg;
-}
-
-#endif
-
-extern void monitor_fd(int fd, void (*callback)(int));
-
-void add_isakmp_handler(int fd, const char *interface)
-{
-    if (setsockopt(fd, SOL_SOCKET, SO_BINDTODEVICE,
-            interface, strlen(interface))) {
-        do_plog(LLV_WARNING, "Cannot bind socket to %s\n", interface);
-    }
-    monitor_fd(fd, (void *)isakmp_handler);
-}
-
-void setup(int argc, char **argv)
-{
-    struct remoteconf *remoteconf = NULL;
-    int auth;
-
-    if (argc > 2) {
-        set_globals(argv[2]);
-
-        /* Initialize everything else. */
-        eay_init();
-        initrmconf();
-        oakley_dhinit();
-        compute_vendorids();
-        sched_init();
-        if (pfkey_init() < 0 || isakmp_init() < 0) {
-            exit(1);
-        }
-        add_sainfo();
-        monitor_fd(localconf.sock_pfkey, (void *)pfkey_handler);
-        add_isakmp_handler(myaddrs[0].sock, argv[1]);
-
-#ifdef ENABLE_NATT
-        add_isakmp_handler(myaddrs[1].sock, argv[1]);
-        natt_keepalive_init();
-#endif
-
-        /* Create remote configuration. */
-        remoteconf = newrmconf();
-        remoteconf->etypes = racoon_calloc(1, sizeof(struct etypes));
-        remoteconf->etypes->type = ISAKMP_ETYPE_IDENT;
-        remoteconf->idvtype = IDTYPE_ADDRESS;
-        remoteconf->ike_frag = TRUE;
-        remoteconf->pcheck_level = PROP_CHECK_CLAIM;
-        remoteconf->certtype = ISAKMP_CERT_X509SIGN;
-        remoteconf->gen_policy = TRUE;
-        remoteconf->nat_traversal = TRUE;
-        remoteconf->dh_group = OAKLEY_ATTR_GRP_DESC_MODP1024;
-        remoteconf->script[SCRIPT_PHASE1_UP] = strtovchar("");
-        remoteconf->script[SCRIPT_PHASE1_DOWN] = strtovchar("");
-        oakley_setdhgroup(remoteconf->dh_group, &remoteconf->dhgrp);
-        remoteconf->remote = dupsaddr(targets[0]);
-    }
-
-    /* Set authentication method and credentials. */
-    if (argc == 7 && !strcmp(argv[3], "udppsk")) {
-        set_pre_shared_key(remoteconf, argv[4], argv[5]);
-        auth = OAKLEY_ATTR_AUTH_METHOD_PSKEY;
-
-        set_port(targets[0], atoi(argv[6]));
-        spdadd(source, targets[0], IPPROTO_UDP, NULL, NULL);
-    } else if (argc == 9 && !strcmp(argv[3], "udprsa")) {
-        set_certificates(remoteconf, argv[4], argv[5], argv[6], argv[7]);
-        auth = OAKLEY_ATTR_AUTH_METHOD_RSASIG;
-
-        set_port(targets[0], atoi(argv[8]));
-        spdadd(source, targets[0], IPPROTO_UDP, NULL, NULL);
-#ifdef ENABLE_HYBRID
-    } else if (argc == 10 && !strcmp(argv[3], "xauthpsk")) {
-        set_pre_shared_key(remoteconf, argv[4], argv[5]);
-        set_xauth_and_more(remoteconf, argv[6], argv[7], argv[8], argv[9]);
-        auth = OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I;
-    } else if (argc == 12 && !strcmp(argv[3], "xauthrsa")) {
-        set_certificates(remoteconf, argv[4], argv[5], argv[6], argv[7]);
-        set_xauth_and_more(remoteconf, argv[8], argv[9], argv[10], argv[11]);
-        auth = OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I;
-    } else if (argc == 10 && !strcmp(argv[3], "hybridrsa")) {
-        set_certificates(remoteconf, NULL, NULL, argv[4], argv[5]);
-        set_xauth_and_more(remoteconf, argv[6], argv[7], argv[8], argv[9]);
-        auth = OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I;
-#endif
-    } else {
-        printf("Usage: %s <interface> <server> [...], where [...] can be:\n"
-                " udppsk    <identifier> <pre-shared-key> <port>; \n"
-                " udprsa    <user-private-key> <user-certificate> \\\n"
-                "           <ca-certificate> <server-certificate> <port>;\n"
-#ifdef ENABLE_HYBRID
-                " xauthpsk  <identifier> <pre-shared-key> \\\n"
-                "           <username> <password> <phase1-up> <script-arg>;\n"
-                " xauthrsa  <user-private-key> <user-certificate> \\\n"
-                "           <ca-certificate> <server-certificate> \\\n"
-                "           <username> <password> <phase1-up> <script-arg>;\n"
-                " hybridrsa <ca-certificate> <server-certificate> \\\n"
-                "           <username> <password> <phase1-up> <script-arg>;\n"
-#endif
-                "", argv[0]);
-        exit(0);
-    }
-
-    /* Add proposals. */
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA2_384, OAKLEY_ATTR_ENC_ALG_AES, 256);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA2_256, OAKLEY_ATTR_ENC_ALG_AES, 256);
-    // VPNs to openswan breaks when SHA2_512 is used as the first proposal.
-    // openswan supports SHA2_256 or lower hash alg. With this add_proposal
-    // order, openswan picks SHA2_256 and others pick SHA2_384
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA2_512, OAKLEY_ATTR_ENC_ALG_AES, 256);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA, OAKLEY_ATTR_ENC_ALG_AES, 256);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_MD5, OAKLEY_ATTR_ENC_ALG_AES, 256);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA2_512, OAKLEY_ATTR_ENC_ALG_AES, 128);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA2_384, OAKLEY_ATTR_ENC_ALG_AES, 128);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA2_256, OAKLEY_ATTR_ENC_ALG_AES, 128);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA, OAKLEY_ATTR_ENC_ALG_AES, 128);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_MD5, OAKLEY_ATTR_ENC_ALG_AES, 128);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA2_256, OAKLEY_ATTR_ENC_ALG_3DES, 0);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA, OAKLEY_ATTR_ENC_ALG_3DES, 0);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_MD5, OAKLEY_ATTR_ENC_ALG_3DES, 0);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA2_256, OAKLEY_ATTR_ENC_ALG_DES, 0);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_SHA, OAKLEY_ATTR_ENC_ALG_DES, 0);
-    add_proposal(remoteconf, auth,
-            OAKLEY_ATTR_HASH_ALG_MD5, OAKLEY_ATTR_ENC_ALG_DES, 0);
-
-    /* Install remote configuration. */
-    insrmconf(remoteconf);
-
-    /* Start phase 1 negotiation for xauth. */
-    if (remoteconf->xauth) {
-        isakmp_ph1begin_i(remoteconf, remoteconf->remote, source);
-    }
-}
-
-/*****************************************************************************/
-
-/* localconf.h */
-
-vchar_t *getpskbyaddr(struct sockaddr *addr)
-{
-    return strtovchar(pre_shared_key);
-}
-
-vchar_t *getpskbyname(vchar_t *name)
-{
-    return NULL;
-}
-
-void getpathname(char *path, int length, int type, const char *name)
-{
-    if (pname) {
-        snprintf(path, length, pname, name);
-    } else {
-        strncpy(path, name, length);
-    }
-    path[length - 1] = '\0';
-}
-
-/* grabmyaddr.h */
-
-int myaddr_getsport(struct sockaddr *addr)
-{
-    return 0;
-}
-
-int getsockmyaddr(struct sockaddr *addr)
-{
-#ifdef ENABLE_NATT
-    if (!cmpsaddrstrict(addr, myaddrs[1].addr)) {
-        return myaddrs[1].sock;
-    }
-#endif
-    if (!cmpsaddrwop(addr, myaddrs[0].addr)) {
-        return myaddrs[0].sock;
-    }
-    return -1;
-}
-
-/* privsep.h */
-
-int privsep_pfkey_open()
-{
-    return pfkey_open();
-}
-
-void privsep_pfkey_close(int key)
-{
-    pfkey_close(key);
-}
-
-vchar_t *privsep_eay_get_pkcs1privkey(char *file)
-{
-    return eay_get_pkcs1privkey(file);
-}
-
-static char *get_env(char * const *envp, char *key)
-{
-    int length = strlen(key);
-    while (*envp && (strncmp(*envp, key, length) || (*envp)[length] != '=')) {
-        ++envp;
-    }
-    return *envp ? &(*envp)[length + 1] : "";
-}
-
-static int skip_script = 0;
-extern const char *android_hook(char **envp);
-
-int privsep_script_exec(char *script, int name, char * const *envp)
-{
-    if (skip_script) {
-        return 0;
-    }
-    skip_script = 1;
-
-    if (name == SCRIPT_PHASE1_DOWN) {
-        exit(1);
-    }
-    if (script_names[SCRIPT_PHASE1_UP]) {
-        /* Racoon ignores INTERNAL_IP6_ADDRESS, so we only do IPv4. */
-        struct sockaddr *addr4 = str2saddr(get_env(envp, "INTERNAL_ADDR4"),
-                NULL);
-        struct sockaddr *local = str2saddr(get_env(envp, "LOCAL_ADDR"),
-                get_env(envp, "LOCAL_PORT"));
-        struct sockaddr *remote = str2saddr(get_env(envp, "REMOTE_ADDR"),
-                get_env(envp, "REMOTE_PORT"));
-
-        if (addr4 && local && remote) {
-#ifdef ANDROID_CHANGES
-            if (pname) {
-                script = (char *)android_hook((char **)envp);
-            }
-#endif
-            spdadd(addr4, NULL, IPPROTO_IP, local, remote);
-        } else {
-            do_plog(LLV_ERROR, "Cannot get parameters for SPD policy.\n");
-            exit(1);
-        }
-
-        racoon_free(addr4);
-        racoon_free(local);
-        racoon_free(remote);
-        return script_exec(script, name, envp);
-    }
-    return 0;
-}
-
-int privsep_accounting_system(int port, struct sockaddr *addr,
-        char *user, int status)
-{
-    return 0;
-}
-
-int privsep_xauth_login_system(char *user, char *password)
-{
-    return -1;
-}
-
-/* misc.h */
-
-int racoon_hexdump(const void *data, size_t length)
-{
-    return 0;
-}
-
-/* sainfo.h */
-
-struct sainfo *getsainfo(const vchar_t *src, const vchar_t *dst,
-        const vchar_t *peer, int remoteid)
-{
-    return &sainfo;
-}
-
-const char *sainfo2str(const struct sainfo *si)
-{
-    return "*";
-}
-
-/* throttle.h */
-
-int throttle_host(struct sockaddr *addr, int fail)
-{
-    return 0;
-}
-
-void shutdown_session()
-{
-    flushph2();
-    flushph1();
-    isakmp_close();
-    pfkey_close(localconf.sock_pfkey);
-}
diff --git a/src/racoon/MODULE_LICENSE_BSD b/src/racoon/MODULE_LICENSE_BSD
deleted file mode 100644
index e69de29..0000000
--- a/src/racoon/MODULE_LICENSE_BSD
+++ /dev/null
diff --git a/src/racoon/Makefile.am b/src/racoon/Makefile.am
deleted file mode 100644
index 202a18e..0000000
--- a/src/racoon/Makefile.am
+++ /dev/null
@@ -1,127 +0,0 @@
-# Id: Makefile.am,v 1.23 2005/07/01 08:57:50 manubsd Exp
-
-sbin_PROGRAMS = racoon racoonctl plainrsa-gen
-noinst_PROGRAMS = eaytest
-include_racoon_HEADERS = racoonctl.h var.h vmbuf.h misc.h gcmalloc.h admin.h \
-	schedule.h sockmisc.h vmbuf.h isakmp_var.h isakmp.h isakmp_xauth.h \
-	isakmp_cfg.h isakmp_unity.h ipsec_doi.h evt.h
-lib_LTLIBRARIES = libracoon.la
-
-adminsockdir=${localstatedir}/racoon
-
-BUILT_SOURCES = cfparse.h prsa_par.h
-INCLUDES = -I${srcdir}/../libipsec 
-AM_CFLAGS = -D_GNU_SOURCE @GLIBC_BUGS@ -DSYSCONFDIR=\"${sysconfdir}\" \
-	-DADMINPORTDIR=\"${adminsockdir}\"
-AM_LDFLAGS = @EXTRA_CRYPTO@ -lcrypto
-AM_YFLAGS = -d ${$*_YFLAGS}
-AM_LFLAGS = ${$*_LFLAGS}
-
-prsa_par_YFLAGS = -p prsa
-prsa_tok_LFLAGS = -Pprsa -olex.yy.c
-
-MISSING_ALGOS = \
-	missing/crypto/sha2/sha2.c \
-	missing/crypto/rijndael/rijndael-api-fst.c \
-	missing/crypto/rijndael/rijndael-alg-fst.c
-
-racoon_SOURCES = \
-	main.c session.c isakmp.c handler.c \
-	isakmp_ident.c isakmp_agg.c isakmp_base.c \
-	isakmp_quick.c isakmp_inf.c isakmp_newg.c \
-	gssapi.c dnssec.c getcertsbyname.c privsep.c \
-	pfkey.c admin.c evt.c ipsec_doi.c oakley.c grabmyaddr.c vendorid.c \
-	policy.c localconf.c remoteconf.c crypto_openssl.c algorithm.c \
-	proposal.c sainfo.c strnames.c \
-	plog.c logger.c schedule.c str2val.c \
-	safefile.c backupsa.c genlist.c rsalist.c \
-	cftoken.l cfparse.y prsa_tok.l prsa_par.y 
-EXTRA_racoon_SOURCES = isakmp_xauth.c isakmp_cfg.c isakmp_unity.c throttle.c \
-	isakmp_frag.c nattraversal.c security.c $(MISSING_ALGOS)
-racoon_LDADD = $(CRYPTOBJS) $(HYBRID_OBJS) $(NATT_OBJS) $(FRAG_OBJS) $(LEXLIB) \
-	 $(SECCTX_OBJS) vmbuf.o sockmisc.o misc.o ../libipsec/libipsec.la
-racoon_DEPENDENCIES = \
-	$(CRYPTOBJS) $(HYBRID_OBJS) $(NATT_OBJS) $(FRAG_OBJS) $(SECCTX_OBJS) \
-	vmbuf.o sockmisc.o misc.o
-
-racoonctl_SOURCES = racoonctl.c str2val.c 
-racoonctl_LDADD = libracoon.la ../libipsec/libipsec.la 
-
-libracoon_la_SOURCES = kmpstat.c vmbuf.c sockmisc.c misc.c
-
-plainrsa_gen_SOURCES = plainrsa-gen.c plog.c \
-	crypto_openssl.c logger.c 
-EXTRA_plainrsa_gen_SOURCES = $(MISSING_ALGOS)
-plainrsa_gen_LDADD = $(CRYPTOBJS) vmbuf.o misc.o
-plainrsa_gen_DEPENDENCIES = $(CRYPTOBJS) vmbuf.o misc.o
-
-eaytest_SOURCES = eaytest.c plog.c logger.c
-EXTRA_eaytest_SOURCES = missing/crypto/sha2/sha2.c
-eaytest_LDADD =	crypto_openssl_test.o vmbuf.o str2val.o misc_noplog.o \
-	$(CRYPTOBJS)
-eaytest_DEPENDENCIES = crypto_openssl_test.o vmbuf.o str2val.o \
-	misc_noplog.o $(CRYPTOBJS)
-
-noinst_HEADERS = \
-	admin.h           dnssec.h      isakmp_base.h   oakley.h      session.h \
-	admin_var.h       dump.h        isakmp_ident.h  pfkey.h       sockmisc.h \
-	algorithm.h       gcmalloc.h    isakmp_inf.h    plog.h        str2val.h \
-	backupsa.h        gnuc.h        isakmp_newg.h   policy.h      strnames.h \
-	grabmyaddr.h      isakmp_quick.h  proposal.h    var.h         evt.h \
-	gssapi.h          isakmp_var.h	vendorid.h      nattraversal.h\
-	crypto_openssl.h  handler.h     localconf.h     remoteconf.h  vmbuf.h \
-	debug.h           ipsec_doi.h   logger.h        safefile.h \
-	debugrm.h         isakmp.h      misc.h          sainfo.h \
-	dhgroup.h         isakmp_agg.h  netdb_dnssec.h  schedule.h \
-	isakmp_cfg.h      isakmp_xauth.h isakmp_unity.h isakmp_frag.h \
-	throttle.h	  privsep.h \
-	cfparse_proto.h	  cftoken_proto.h genlist.h     rsalist.h \
-	missing/crypto/sha2/sha2.h missing/crypto/rijndael/rijndael_local.h \
-	missing/crypto/rijndael/rijndael-api-fst.h \
-	missing/crypto/rijndael/rijndael-alg-fst.h \
-	missing/crypto/rijndael/rijndael.h
-
-man5_MANS = racoon.conf.5
-man8_MANS = racoon.8 racoonctl.8 plainrsa-gen.8
-
-EXTRA_DIST = \
-   ${man5_MANS} ${man8_MANS} \
-   missing/crypto/rijndael/boxes-fst.dat \
-   doc/FAQ doc/README.certificate doc/README.gssapi doc/README.plainrsa \
-   contrib/sp.pl stats.pl \
-   samples/psk.txt.sample  samples/racoon.conf.sample \
-   samples/psk.txt.in samples/racoon.conf.in \
-   samples/racoon.conf.sample-gssapi samples/racoon.conf.sample-natt \
-   samples/racoon.conf.sample-inherit samples/racoon.conf.sample-plainrsa \
-   samples/roadwarrior/README \
-   samples/roadwarrior/client/phase1-down.sh \
-   samples/roadwarrior/client/phase1-up.sh \
-   samples/roadwarrior/client/racoon.conf \
-   samples/roadwarrior/server/racoon.conf \
-   samples/roadwarrior/server/racoon.conf-radius
-
-TESTS = eaytest
-
-install-exec-local:
-	${mkinstalldirs} $(DESTDIR)${adminsockdir}
-
-# special object rules
-crypto_openssl_test.o: crypto_openssl.c
-	$(COMPILE) -DEAYDEBUG -o crypto_openssl_test.o -c $(srcdir)/crypto_openssl.c
-
-misc_noplog.o: misc.c
-	$(COMPILE) -DNOUSE_PLOG -o misc_noplog.o -c $(srcdir)/misc.c
-
-# missing/*.c
-strdup.o:	$(srcdir)/missing/strdup.c
-	$(COMPILE) -c $(srcdir)/missing/$*.c
-getaddrinfo.o:	$(srcdir)/missing/getaddrinfo.c
-	$(COMPILE) -c $(srcdir)/missing/$*.c
-getnameinfo.o:	$(srcdir)/missing/getnameinfo.c
-	$(COMPILE) -c $(srcdir)/missing/$*.c
-rijndael-api-fst.o: $(srcdir)/missing/crypto/rijndael/rijndael-api-fst.c
-	$(COMPILE) -c $(srcdir)/missing/crypto/rijndael/$*.c
-rijndael-alg-fst.o: $(srcdir)/missing/crypto/rijndael/rijndael-alg-fst.c
-	$(COMPILE) -c $(srcdir)/missing/crypto/rijndael/$*.c
-sha2.o: $(srcdir)/missing/crypto/sha2/sha2.c
-	$(COMPILE) -c $(srcdir)/missing/crypto/sha2/$*.c
diff --git a/src/racoon/Makefile.in b/src/racoon/Makefile.in
deleted file mode 100644
index 47e997b..0000000
--- a/src/racoon/Makefile.in
+++ /dev/null
@@ -1,1000 +0,0 @@
-# Makefile.in generated by automake 1.10.1 from Makefile.am.
-# @configure_input@
-
-# Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002,
-# 2003, 2004, 2005, 2006, 2007, 2008  Free Software Foundation, Inc.
-# This Makefile.in is free software; the Free Software Foundation
-# gives unlimited permission to copy and/or distribute it,
-# with or without modifications, as long as this notice is preserved.
-
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY, to the extent permitted by law; without
-# even the implied warranty of MERCHANTABILITY or FITNESS FOR A
-# PARTICULAR PURPOSE.
-
-@SET_MAKE@
-
-# Id: Makefile.am,v 1.23 2005/07/01 08:57:50 manubsd Exp
-
-
-
-VPATH = @srcdir@
-pkgdatadir = $(datadir)/@PACKAGE@
-pkglibdir = $(libdir)/@PACKAGE@
-pkgincludedir = $(includedir)/@PACKAGE@
-am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd
-install_sh_DATA = $(install_sh) -c -m 644
-install_sh_PROGRAM = $(install_sh) -c
-install_sh_SCRIPT = $(install_sh) -c
-INSTALL_HEADER = $(INSTALL_DATA)
-transform = $(program_transform_name)
-NORMAL_INSTALL = :
-PRE_INSTALL = :
-POST_INSTALL = :
-NORMAL_UNINSTALL = :
-PRE_UNINSTALL = :
-POST_UNINSTALL = :
-build_triplet = @build@
-host_triplet = @host@
-sbin_PROGRAMS = racoon$(EXEEXT) racoonctl$(EXEEXT) \
-	plainrsa-gen$(EXEEXT)
-noinst_PROGRAMS = eaytest$(EXEEXT)
-TESTS = eaytest$(EXEEXT)
-subdir = src/racoon
-DIST_COMMON = $(include_racoon_HEADERS) $(noinst_HEADERS) \
-	$(srcdir)/Makefile.am $(srcdir)/Makefile.in TODO cfparse.c \
-	cfparse.h cftoken.c prsa_par.c prsa_par.h prsa_tok.c
-ACLOCAL_M4 = $(top_srcdir)/aclocal.m4
-am__aclocal_m4_deps = $(top_srcdir)/acracoon.m4 \
-	$(top_srcdir)/configure.ac
-am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \
-	$(ACLOCAL_M4)
-mkinstalldirs = $(install_sh) -d
-CONFIG_HEADER = $(top_builddir)/config.h
-CONFIG_CLEAN_FILES =
-am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`;
-am__vpath_adj = case $$p in \
-    $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \
-    *) f=$$p;; \
-  esac;
-am__strip_dir = `echo $$p | sed -e 's|^.*/||'`;
-am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)" \
-	"$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" \
-	"$(DESTDIR)$(include_racoondir)"
-libLTLIBRARIES_INSTALL = $(INSTALL)
-LTLIBRARIES = $(lib_LTLIBRARIES)
-libracoon_la_LIBADD =
-am_libracoon_la_OBJECTS = kmpstat.lo vmbuf.lo sockmisc.lo misc.lo
-libracoon_la_OBJECTS = $(am_libracoon_la_OBJECTS)
-sbinPROGRAMS_INSTALL = $(INSTALL_PROGRAM)
-PROGRAMS = $(noinst_PROGRAMS) $(sbin_PROGRAMS)
-am_eaytest_OBJECTS = eaytest.$(OBJEXT) plog.$(OBJEXT) logger.$(OBJEXT)
-eaytest_OBJECTS = $(am_eaytest_OBJECTS)
-am__DEPENDENCIES_1 =
-am_plainrsa_gen_OBJECTS = plainrsa-gen.$(OBJEXT) plog.$(OBJEXT) \
-	crypto_openssl.$(OBJEXT) logger.$(OBJEXT)
-plainrsa_gen_OBJECTS = $(am_plainrsa_gen_OBJECTS)
-am_racoon_OBJECTS = main.$(OBJEXT) session.$(OBJEXT) isakmp.$(OBJEXT) \
-	handler.$(OBJEXT) isakmp_ident.$(OBJEXT) isakmp_agg.$(OBJEXT) \
-	isakmp_base.$(OBJEXT) isakmp_quick.$(OBJEXT) \
-	isakmp_inf.$(OBJEXT) isakmp_newg.$(OBJEXT) gssapi.$(OBJEXT) \
-	dnssec.$(OBJEXT) getcertsbyname.$(OBJEXT) privsep.$(OBJEXT) \
-	pfkey.$(OBJEXT) admin.$(OBJEXT) evt.$(OBJEXT) \
-	ipsec_doi.$(OBJEXT) oakley.$(OBJEXT) grabmyaddr.$(OBJEXT) \
-	vendorid.$(OBJEXT) policy.$(OBJEXT) localconf.$(OBJEXT) \
-	remoteconf.$(OBJEXT) crypto_openssl.$(OBJEXT) \
-	algorithm.$(OBJEXT) proposal.$(OBJEXT) sainfo.$(OBJEXT) \
-	strnames.$(OBJEXT) plog.$(OBJEXT) logger.$(OBJEXT) \
-	schedule.$(OBJEXT) str2val.$(OBJEXT) safefile.$(OBJEXT) \
-	backupsa.$(OBJEXT) genlist.$(OBJEXT) rsalist.$(OBJEXT) \
-	cftoken.$(OBJEXT) cfparse.$(OBJEXT) prsa_tok.$(OBJEXT) \
-	prsa_par.$(OBJEXT)
-racoon_OBJECTS = $(am_racoon_OBJECTS)
-am_racoonctl_OBJECTS = racoonctl.$(OBJEXT) str2val.$(OBJEXT)
-racoonctl_OBJECTS = $(am_racoonctl_OBJECTS)
-racoonctl_DEPENDENCIES = libracoon.la ../libipsec/libipsec.la
-DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)
-depcomp = $(SHELL) $(top_srcdir)/depcomp
-am__depfiles_maybe = depfiles
-COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \
-	$(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-LTCOMPILE = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) \
-	$(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS)
-CCLD = $(CC)
-LINK = $(LIBTOOL) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
-	$(LDFLAGS) -o $@
-LEXCOMPILE = $(LEX) $(LFLAGS) $(AM_LFLAGS)
-LTLEXCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(LEX) $(LFLAGS) $(AM_LFLAGS)
-YLWRAP = $(top_srcdir)/ylwrap
-YACCCOMPILE = $(YACC) $(YFLAGS) $(AM_YFLAGS)
-LTYACCCOMPILE = $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) \
-	--mode=compile $(YACC) $(YFLAGS) $(AM_YFLAGS)
-SOURCES = $(libracoon_la_SOURCES) $(eaytest_SOURCES) \
-	$(EXTRA_eaytest_SOURCES) $(plainrsa_gen_SOURCES) \
-	$(EXTRA_plainrsa_gen_SOURCES) $(racoon_SOURCES) \
-	$(EXTRA_racoon_SOURCES) $(racoonctl_SOURCES)
-DIST_SOURCES = $(libracoon_la_SOURCES) $(eaytest_SOURCES) \
-	$(EXTRA_eaytest_SOURCES) $(plainrsa_gen_SOURCES) \
-	$(EXTRA_plainrsa_gen_SOURCES) $(racoon_SOURCES) \
-	$(EXTRA_racoon_SOURCES) $(racoonctl_SOURCES)
-man5dir = $(mandir)/man5
-man8dir = $(mandir)/man8
-NROFF = nroff
-MANS = $(man5_MANS) $(man8_MANS)
-include_racoonHEADERS_INSTALL = $(INSTALL_HEADER)
-HEADERS = $(include_racoon_HEADERS) $(noinst_HEADERS)
-ETAGS = etags
-CTAGS = ctags
-DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST)
-ACLOCAL = @ACLOCAL@
-AMTAR = @AMTAR@
-AR = @AR@
-AUTOCONF = @AUTOCONF@
-AUTOHEADER = @AUTOHEADER@
-AUTOMAKE = @AUTOMAKE@
-AWK = @AWK@
-CC = @CC@
-CCDEPMODE = @CCDEPMODE@
-CFLAGS = @CFLAGS@
-CONFIGURE_AMFLAGS = @CONFIGURE_AMFLAGS@
-CPP = @CPP@
-CPPFLAGS = @CPPFLAGS@
-CRYPTOBJS = @CRYPTOBJS@
-CXX = @CXX@
-CXXCPP = @CXXCPP@
-CXXDEPMODE = @CXXDEPMODE@
-CXXFLAGS = @CXXFLAGS@
-CYGPATH_W = @CYGPATH_W@
-DEFS = @DEFS@
-DEPDIR = @DEPDIR@
-DSYMUTIL = @DSYMUTIL@
-ECHO = @ECHO@
-ECHO_C = @ECHO_C@
-ECHO_N = @ECHO_N@
-ECHO_T = @ECHO_T@
-EGREP = @EGREP@
-EXEEXT = @EXEEXT@
-EXTRA_CRYPTO = @EXTRA_CRYPTO@
-F77 = @F77@
-FFLAGS = @FFLAGS@
-FRAG_OBJS = @FRAG_OBJS@
-GLIBC_BUGS = @GLIBC_BUGS@
-GREP = @GREP@
-HYBRID_OBJS = @HYBRID_OBJS@
-INCLUDE_GLIBC = @INCLUDE_GLIBC@
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-INSTALL_OPTS = @INSTALL_OPTS@
-INSTALL_PROGRAM = @INSTALL_PROGRAM@
-INSTALL_SCRIPT = @INSTALL_SCRIPT@
-INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@
-KERNEL_INCLUDE = @KERNEL_INCLUDE@
-KRB5_CONFIG = @KRB5_CONFIG@
-LDFLAGS = @LDFLAGS@
-LEX = @LEX@
-LEXLIB = @LEXLIB@
-LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@
-LIBOBJS = @LIBOBJS@
-LIBS = @LIBS@
-LIBTOOL = @LIBTOOL@
-LN_S = @LN_S@
-LTLIBOBJS = @LTLIBOBJS@
-MAKEINFO = @MAKEINFO@
-MKDIR_P = @MKDIR_P@
-NATT_OBJS = @NATT_OBJS@
-NMEDIT = @NMEDIT@
-OBJEXT = @OBJEXT@
-PACKAGE = @PACKAGE@
-PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@
-PACKAGE_NAME = @PACKAGE_NAME@
-PACKAGE_STRING = @PACKAGE_STRING@
-PACKAGE_TARNAME = @PACKAGE_TARNAME@
-PACKAGE_VERSION = @PACKAGE_VERSION@
-PATH_SEPARATOR = @PATH_SEPARATOR@
-RANLIB = @RANLIB@
-RPM = @RPM@
-SECCTX_OBJS = @SECCTX_OBJS@
-SED = @SED@
-SET_MAKE = @SET_MAKE@
-SHELL = @SHELL@
-STRIP = @STRIP@
-VERSION = @VERSION@
-YACC = @YACC@
-YFLAGS = @YFLAGS@
-abs_builddir = @abs_builddir@
-abs_srcdir = @abs_srcdir@
-abs_top_builddir = @abs_top_builddir@
-abs_top_srcdir = @abs_top_srcdir@
-ac_ct_CC = @ac_ct_CC@
-ac_ct_CXX = @ac_ct_CXX@
-ac_ct_F77 = @ac_ct_F77@
-am__include = @am__include@
-am__leading_dot = @am__leading_dot@
-am__quote = @am__quote@
-am__tar = @am__tar@
-am__untar = @am__untar@
-bindir = @bindir@
-build = @build@
-build_alias = @build_alias@
-build_cpu = @build_cpu@
-build_os = @build_os@
-build_vendor = @build_vendor@
-builddir = @builddir@
-datadir = @datadir@
-datarootdir = @datarootdir@
-docdir = @docdir@
-dvidir = @dvidir@
-exec_prefix = @exec_prefix@
-host = @host@
-host_alias = @host_alias@
-host_cpu = @host_cpu@
-host_os = @host_os@
-host_vendor = @host_vendor@
-htmldir = @htmldir@
-include_racoondir = @include_racoondir@
-includedir = @includedir@
-infodir = @infodir@
-install_sh = @install_sh@
-libdir = @libdir@
-libexecdir = @libexecdir@
-localedir = @localedir@
-localstatedir = @localstatedir@
-mandir = @mandir@
-mkdir_p = @mkdir_p@
-oldincludedir = @oldincludedir@
-pdfdir = @pdfdir@
-prefix = @prefix@
-program_transform_name = @program_transform_name@
-psdir = @psdir@
-sbindir = @sbindir@
-sharedstatedir = @sharedstatedir@
-srcdir = @srcdir@
-sysconfdir = @sysconfdir@
-target_alias = @target_alias@
-top_builddir = @top_builddir@
-top_srcdir = @top_srcdir@
-include_racoon_HEADERS = racoonctl.h var.h vmbuf.h misc.h gcmalloc.h admin.h \
-	schedule.h sockmisc.h vmbuf.h isakmp_var.h isakmp.h isakmp_xauth.h \
-	isakmp_cfg.h isakmp_unity.h ipsec_doi.h evt.h
-
-lib_LTLIBRARIES = libracoon.la
-adminsockdir = ${localstatedir}/racoon
-BUILT_SOURCES = cfparse.h prsa_par.h
-INCLUDES = -I${srcdir}/../libipsec 
-AM_CFLAGS = -D_GNU_SOURCE @GLIBC_BUGS@ -DSYSCONFDIR=\"${sysconfdir}\" \
-	-DADMINPORTDIR=\"${adminsockdir}\"
-
-AM_LDFLAGS = @EXTRA_CRYPTO@ -lcrypto
-AM_YFLAGS = -d ${$*_YFLAGS}
-AM_LFLAGS = ${$*_LFLAGS}
-prsa_par_YFLAGS = -p prsa
-prsa_tok_LFLAGS = -Pprsa -olex.yy.c
-MISSING_ALGOS = \
-	missing/crypto/sha2/sha2.c \
-	missing/crypto/rijndael/rijndael-api-fst.c \
-	missing/crypto/rijndael/rijndael-alg-fst.c
-
-racoon_SOURCES = \
-	main.c session.c isakmp.c handler.c \
-	isakmp_ident.c isakmp_agg.c isakmp_base.c \
-	isakmp_quick.c isakmp_inf.c isakmp_newg.c \
-	gssapi.c dnssec.c getcertsbyname.c privsep.c \
-	pfkey.c admin.c evt.c ipsec_doi.c oakley.c grabmyaddr.c vendorid.c \
-	policy.c localconf.c remoteconf.c crypto_openssl.c algorithm.c \
-	proposal.c sainfo.c strnames.c \
-	plog.c logger.c schedule.c str2val.c \
-	safefile.c backupsa.c genlist.c rsalist.c \
-	cftoken.l cfparse.y prsa_tok.l prsa_par.y 
-
-EXTRA_racoon_SOURCES = isakmp_xauth.c isakmp_cfg.c isakmp_unity.c throttle.c \
-	isakmp_frag.c nattraversal.c security.c $(MISSING_ALGOS)
-
-racoon_LDADD = $(CRYPTOBJS) $(HYBRID_OBJS) $(NATT_OBJS) $(FRAG_OBJS) $(LEXLIB) \
-	 $(SECCTX_OBJS) vmbuf.o sockmisc.o misc.o ../libipsec/libipsec.la
-
-racoon_DEPENDENCIES = \
-	$(CRYPTOBJS) $(HYBRID_OBJS) $(NATT_OBJS) $(FRAG_OBJS) $(SECCTX_OBJS) \
-	vmbuf.o sockmisc.o misc.o
-
-racoonctl_SOURCES = racoonctl.c str2val.c 
-racoonctl_LDADD = libracoon.la ../libipsec/libipsec.la 
-libracoon_la_SOURCES = kmpstat.c vmbuf.c sockmisc.c misc.c
-plainrsa_gen_SOURCES = plainrsa-gen.c plog.c \
-	crypto_openssl.c logger.c 
-
-EXTRA_plainrsa_gen_SOURCES = $(MISSING_ALGOS)
-plainrsa_gen_LDADD = $(CRYPTOBJS) vmbuf.o misc.o
-plainrsa_gen_DEPENDENCIES = $(CRYPTOBJS) vmbuf.o misc.o
-eaytest_SOURCES = eaytest.c plog.c logger.c
-EXTRA_eaytest_SOURCES = missing/crypto/sha2/sha2.c
-eaytest_LDADD = crypto_openssl_test.o vmbuf.o str2val.o misc_noplog.o \
-	$(CRYPTOBJS)
-
-eaytest_DEPENDENCIES = crypto_openssl_test.o vmbuf.o str2val.o \
-	misc_noplog.o $(CRYPTOBJS)
-
-noinst_HEADERS = \
-	admin.h           dnssec.h      isakmp_base.h   oakley.h      session.h \
-	admin_var.h       dump.h        isakmp_ident.h  pfkey.h       sockmisc.h \
-	algorithm.h       gcmalloc.h    isakmp_inf.h    plog.h        str2val.h \
-	backupsa.h        gnuc.h        isakmp_newg.h   policy.h      strnames.h \
-	grabmyaddr.h      isakmp_quick.h  proposal.h    var.h         evt.h \
-	gssapi.h          isakmp_var.h	vendorid.h      nattraversal.h\
-	crypto_openssl.h  handler.h     localconf.h     remoteconf.h  vmbuf.h \
-	debug.h           ipsec_doi.h   logger.h        safefile.h \
-	debugrm.h         isakmp.h      misc.h          sainfo.h \
-	dhgroup.h         isakmp_agg.h  netdb_dnssec.h  schedule.h \
-	isakmp_cfg.h      isakmp_xauth.h isakmp_unity.h isakmp_frag.h \
-	throttle.h	  privsep.h \
-	cfparse_proto.h	  cftoken_proto.h genlist.h     rsalist.h \
-	missing/crypto/sha2/sha2.h missing/crypto/rijndael/rijndael_local.h \
-	missing/crypto/rijndael/rijndael-api-fst.h \
-	missing/crypto/rijndael/rijndael-alg-fst.h \
-	missing/crypto/rijndael/rijndael.h
-
-man5_MANS = racoon.conf.5
-man8_MANS = racoon.8 racoonctl.8 plainrsa-gen.8
-EXTRA_DIST = \
-   ${man5_MANS} ${man8_MANS} \
-   missing/crypto/rijndael/boxes-fst.dat \
-   doc/FAQ doc/README.certificate doc/README.gssapi doc/README.plainrsa \
-   contrib/sp.pl stats.pl \
-   samples/psk.txt.sample  samples/racoon.conf.sample \
-   samples/psk.txt.in samples/racoon.conf.in \
-   samples/racoon.conf.sample-gssapi samples/racoon.conf.sample-natt \
-   samples/racoon.conf.sample-inherit samples/racoon.conf.sample-plainrsa \
-   samples/roadwarrior/README \
-   samples/roadwarrior/client/phase1-down.sh \
-   samples/roadwarrior/client/phase1-up.sh \
-   samples/roadwarrior/client/racoon.conf \
-   samples/roadwarrior/server/racoon.conf \
-   samples/roadwarrior/server/racoon.conf-radius
-
-all: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) all-am
-
-.SUFFIXES:
-.SUFFIXES: .c .l .lo .o .obj .y
-$(srcdir)/Makefile.in:  $(srcdir)/Makefile.am  $(am__configure_deps)
-	@for dep in $?; do \
-	  case '$(am__configure_deps)' in \
-	    *$$dep*) \
-	      cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh \
-		&& exit 0; \
-	      exit 1;; \
-	  esac; \
-	done; \
-	echo ' cd $(top_srcdir) && $(AUTOMAKE) --foreign  src/racoon/Makefile'; \
-	cd $(top_srcdir) && \
-	  $(AUTOMAKE) --foreign  src/racoon/Makefile
-.PRECIOUS: Makefile
-Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status
-	@case '$?' in \
-	  *config.status*) \
-	    cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \
-	  *) \
-	    echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe)'; \
-	    cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__depfiles_maybe);; \
-	esac;
-
-$(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-
-$(top_srcdir)/configure:  $(am__configure_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-$(ACLOCAL_M4):  $(am__aclocal_m4_deps)
-	cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh
-install-libLTLIBRARIES: $(lib_LTLIBRARIES)
-	@$(NORMAL_INSTALL)
-	test -z "$(libdir)" || $(MKDIR_P) "$(DESTDIR)$(libdir)"
-	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-	  if test -f $$p; then \
-	    f=$(am__strip_dir) \
-	    echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) '$$p' '$(DESTDIR)$(libdir)/$$f'"; \
-	    $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(libLTLIBRARIES_INSTALL) $(INSTALL_STRIP_FLAG) "$$p" "$(DESTDIR)$(libdir)/$$f"; \
-	  else :; fi; \
-	done
-
-uninstall-libLTLIBRARIES:
-	@$(NORMAL_UNINSTALL)
-	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-	  p=$(am__strip_dir) \
-	  echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$p'"; \
-	  $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$p"; \
-	done
-
-clean-libLTLIBRARIES:
-	-test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES)
-	@list='$(lib_LTLIBRARIES)'; for p in $$list; do \
-	  dir="`echo $$p | sed -e 's|/[^/]*$$||'`"; \
-	  test "$$dir" != "$$p" || dir=.; \
-	  echo "rm -f \"$${dir}/so_locations\""; \
-	  rm -f "$${dir}/so_locations"; \
-	done
-libracoon.la: $(libracoon_la_OBJECTS) $(libracoon_la_DEPENDENCIES) 
-	$(LINK) -rpath $(libdir) $(libracoon_la_OBJECTS) $(libracoon_la_LIBADD) $(LIBS)
-
-clean-noinstPROGRAMS:
-	@list='$(noinst_PROGRAMS)'; for p in $$list; do \
-	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  echo " rm -f $$p $$f"; \
-	  rm -f $$p $$f ; \
-	done
-install-sbinPROGRAMS: $(sbin_PROGRAMS)
-	@$(NORMAL_INSTALL)
-	test -z "$(sbindir)" || $(MKDIR_P) "$(DESTDIR)$(sbindir)"
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  p1=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  if test -f $$p \
-	     || test -f $$p1 \
-	  ; then \
-	    f=`echo "$$p1" | sed 's,^.*/,,;$(transform);s/$$/$(EXEEXT)/'`; \
-	   echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(sbinPROGRAMS_INSTALL) '$$p' '$(DESTDIR)$(sbindir)/$$f'"; \
-	   $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(sbinPROGRAMS_INSTALL) "$$p" "$(DESTDIR)$(sbindir)/$$f" || exit 1; \
-	  else :; fi; \
-	done
-
-uninstall-sbinPROGRAMS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo "$$p" | sed 's,^.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/'`; \
-	  echo " rm -f '$(DESTDIR)$(sbindir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(sbindir)/$$f"; \
-	done
-
-clean-sbinPROGRAMS:
-	@list='$(sbin_PROGRAMS)'; for p in $$list; do \
-	  f=`echo $$p|sed 's/$(EXEEXT)$$//'`; \
-	  echo " rm -f $$p $$f"; \
-	  rm -f $$p $$f ; \
-	done
-eaytest$(EXEEXT): $(eaytest_OBJECTS) $(eaytest_DEPENDENCIES) 
-	@rm -f eaytest$(EXEEXT)
-	$(LINK) $(eaytest_OBJECTS) $(eaytest_LDADD) $(LIBS)
-plainrsa-gen$(EXEEXT): $(plainrsa_gen_OBJECTS) $(plainrsa_gen_DEPENDENCIES) 
-	@rm -f plainrsa-gen$(EXEEXT)
-	$(LINK) $(plainrsa_gen_OBJECTS) $(plainrsa_gen_LDADD) $(LIBS)
-cfparse.h: cfparse.c
-	@if test ! -f $@; then \
-	  rm -f cfparse.c; \
-	  $(MAKE) $(AM_MAKEFLAGS) cfparse.c; \
-	else :; fi
-prsa_par.h: prsa_par.c
-	@if test ! -f $@; then \
-	  rm -f prsa_par.c; \
-	  $(MAKE) $(AM_MAKEFLAGS) prsa_par.c; \
-	else :; fi
-racoon$(EXEEXT): $(racoon_OBJECTS) $(racoon_DEPENDENCIES) 
-	@rm -f racoon$(EXEEXT)
-	$(LINK) $(racoon_OBJECTS) $(racoon_LDADD) $(LIBS)
-racoonctl$(EXEEXT): $(racoonctl_OBJECTS) $(racoonctl_DEPENDENCIES) 
-	@rm -f racoonctl$(EXEEXT)
-	$(LINK) $(racoonctl_OBJECTS) $(racoonctl_LDADD) $(LIBS)
-
-mostlyclean-compile:
-	-rm -f *.$(OBJEXT)
-
-distclean-compile:
-	-rm -f *.tab.c
-
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/admin.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/algorithm.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/backupsa.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cfparse.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cftoken.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/crypto_openssl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/dnssec.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/eaytest.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/evt.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/genlist.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/getcertsbyname.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/grabmyaddr.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gssapi.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/handler.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ipsec_doi.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp_agg.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp_base.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp_cfg.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp_frag.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp_ident.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp_inf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp_newg.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp_quick.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp_unity.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/isakmp_xauth.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/kmpstat.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/localconf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/logger.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/main.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/nattraversal.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oakley.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/pfkey.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plainrsa-gen.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/plog.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/policy.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/privsep.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/proposal.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prsa_par.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/prsa_tok.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/racoonctl.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/remoteconf.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-alg-fst.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rijndael-api-fst.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rsalist.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/safefile.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sainfo.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/schedule.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/security.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/session.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sha2.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/sockmisc.Plo@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/str2val.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strnames.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/throttle.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vendorid.Po@am__quote@
-@AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/vmbuf.Plo@am__quote@
-
-.c.o:
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c $<
-
-.c.obj:
-@am__fastdepCC_TRUE@	$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(COMPILE) -c `$(CYGPATH_W) '$<'`
-
-.c.lo:
-@am__fastdepCC_TRUE@	$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $<
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(LTCOMPILE) -c -o $@ $<
-
-sha2.obj: missing/crypto/sha2/sha2.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT sha2.obj -MD -MP -MF $(DEPDIR)/sha2.Tpo -c -o sha2.obj `if test -f 'missing/crypto/sha2/sha2.c'; then $(CYGPATH_W) 'missing/crypto/sha2/sha2.c'; else $(CYGPATH_W) '$(srcdir)/missing/crypto/sha2/sha2.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/sha2.Tpo $(DEPDIR)/sha2.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='missing/crypto/sha2/sha2.c' object='sha2.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o sha2.obj `if test -f 'missing/crypto/sha2/sha2.c'; then $(CYGPATH_W) 'missing/crypto/sha2/sha2.c'; else $(CYGPATH_W) '$(srcdir)/missing/crypto/sha2/sha2.c'; fi`
-
-rijndael-api-fst.obj: missing/crypto/rijndael/rijndael-api-fst.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rijndael-api-fst.obj -MD -MP -MF $(DEPDIR)/rijndael-api-fst.Tpo -c -o rijndael-api-fst.obj `if test -f 'missing/crypto/rijndael/rijndael-api-fst.c'; then $(CYGPATH_W) 'missing/crypto/rijndael/rijndael-api-fst.c'; else $(CYGPATH_W) '$(srcdir)/missing/crypto/rijndael/rijndael-api-fst.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/rijndael-api-fst.Tpo $(DEPDIR)/rijndael-api-fst.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='missing/crypto/rijndael/rijndael-api-fst.c' object='rijndael-api-fst.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rijndael-api-fst.obj `if test -f 'missing/crypto/rijndael/rijndael-api-fst.c'; then $(CYGPATH_W) 'missing/crypto/rijndael/rijndael-api-fst.c'; else $(CYGPATH_W) '$(srcdir)/missing/crypto/rijndael/rijndael-api-fst.c'; fi`
-
-rijndael-alg-fst.obj: missing/crypto/rijndael/rijndael-alg-fst.c
-@am__fastdepCC_TRUE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -MT rijndael-alg-fst.obj -MD -MP -MF $(DEPDIR)/rijndael-alg-fst.Tpo -c -o rijndael-alg-fst.obj `if test -f 'missing/crypto/rijndael/rijndael-alg-fst.c'; then $(CYGPATH_W) 'missing/crypto/rijndael/rijndael-alg-fst.c'; else $(CYGPATH_W) '$(srcdir)/missing/crypto/rijndael/rijndael-alg-fst.c'; fi`
-@am__fastdepCC_TRUE@	mv -f $(DEPDIR)/rijndael-alg-fst.Tpo $(DEPDIR)/rijndael-alg-fst.Po
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	source='missing/crypto/rijndael/rijndael-alg-fst.c' object='rijndael-alg-fst.obj' libtool=no @AMDEPBACKSLASH@
-@AMDEP_TRUE@@am__fastdepCC_FALSE@	DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@
-@am__fastdepCC_FALSE@	$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) -c -o rijndael-alg-fst.obj `if test -f 'missing/crypto/rijndael/rijndael-alg-fst.c'; then $(CYGPATH_W) 'missing/crypto/rijndael/rijndael-alg-fst.c'; else $(CYGPATH_W) '$(srcdir)/missing/crypto/rijndael/rijndael-alg-fst.c'; fi`
-
-.l.c:
-	$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE)
-
-.y.c:
-	$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h $*.h y.output $*.output -- $(YACCCOMPILE)
-
-mostlyclean-libtool:
-	-rm -f *.lo
-
-clean-libtool:
-	-rm -rf .libs _libs
-install-man5: $(man5_MANS) $(man_MANS)
-	@$(NORMAL_INSTALL)
-	test -z "$(man5dir)" || $(MKDIR_P) "$(DESTDIR)$(man5dir)"
-	@list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.5*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-	  else file=$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    5*) ;; \
-	    *) ext='5' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man5dir)/$$inst'"; \
-	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man5dir)/$$inst"; \
-	done
-uninstall-man5:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man5_MANS) $(dist_man5_MANS) $(nodist_man5_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.5*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    5*) ;; \
-	    *) ext='5' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f '$(DESTDIR)$(man5dir)/$$inst'"; \
-	  rm -f "$(DESTDIR)$(man5dir)/$$inst"; \
-	done
-install-man8: $(man8_MANS) $(man_MANS)
-	@$(NORMAL_INSTALL)
-	test -z "$(man8dir)" || $(MKDIR_P) "$(DESTDIR)$(man8dir)"
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  if test -f $(srcdir)/$$i; then file=$(srcdir)/$$i; \
-	  else file=$$i; fi; \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man8dir)/$$inst'"; \
-	  $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man8dir)/$$inst"; \
-	done
-uninstall-man8:
-	@$(NORMAL_UNINSTALL)
-	@list='$(man8_MANS) $(dist_man8_MANS) $(nodist_man8_MANS)'; \
-	l2='$(man_MANS) $(dist_man_MANS) $(nodist_man_MANS)'; \
-	for i in $$l2; do \
-	  case "$$i" in \
-	    *.8*) list="$$list $$i" ;; \
-	  esac; \
-	done; \
-	for i in $$list; do \
-	  ext=`echo $$i | sed -e 's/^.*\\.//'`; \
-	  case "$$ext" in \
-	    8*) ;; \
-	    *) ext='8' ;; \
-	  esac; \
-	  inst=`echo $$i | sed -e 's/\\.[0-9a-z]*$$//'`; \
-	  inst=`echo $$inst | sed -e 's/^.*\///'`; \
-	  inst=`echo $$inst | sed '$(transform)'`.$$ext; \
-	  echo " rm -f '$(DESTDIR)$(man8dir)/$$inst'"; \
-	  rm -f "$(DESTDIR)$(man8dir)/$$inst"; \
-	done
-install-include_racoonHEADERS: $(include_racoon_HEADERS)
-	@$(NORMAL_INSTALL)
-	test -z "$(include_racoondir)" || $(MKDIR_P) "$(DESTDIR)$(include_racoondir)"
-	@list='$(include_racoon_HEADERS)'; for p in $$list; do \
-	  if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \
-	  f=$(am__strip_dir) \
-	  echo " $(include_racoonHEADERS_INSTALL) '$$d$$p' '$(DESTDIR)$(include_racoondir)/$$f'"; \
-	  $(include_racoonHEADERS_INSTALL) "$$d$$p" "$(DESTDIR)$(include_racoondir)/$$f"; \
-	done
-
-uninstall-include_racoonHEADERS:
-	@$(NORMAL_UNINSTALL)
-	@list='$(include_racoon_HEADERS)'; for p in $$list; do \
-	  f=$(am__strip_dir) \
-	  echo " rm -f '$(DESTDIR)$(include_racoondir)/$$f'"; \
-	  rm -f "$(DESTDIR)$(include_racoondir)/$$f"; \
-	done
-
-ID: $(HEADERS) $(SOURCES) $(LISP) $(TAGS_FILES)
-	list='$(SOURCES) $(HEADERS) $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonemtpy = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	mkid -fID $$unique
-tags: TAGS
-
-TAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	here=`pwd`; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	if test -z "$(ETAGS_ARGS)$$tags$$unique"; then :; else \
-	  test -n "$$unique" || unique=$$empty_fix; \
-	  $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \
-	    $$tags $$unique; \
-	fi
-ctags: CTAGS
-CTAGS:  $(HEADERS) $(SOURCES)  $(TAGS_DEPENDENCIES) \
-		$(TAGS_FILES) $(LISP)
-	tags=; \
-	list='$(SOURCES) $(HEADERS)  $(LISP) $(TAGS_FILES)'; \
-	unique=`for i in $$list; do \
-	    if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \
-	  done | \
-	  $(AWK) '{ files[$$0] = 1; nonempty = 1; } \
-	      END { if (nonempty) { for (i in files) print i; }; }'`; \
-	test -z "$(CTAGS_ARGS)$$tags$$unique" \
-	  || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \
-	     $$tags $$unique
-
-GTAGS:
-	here=`$(am__cd) $(top_builddir) && pwd` \
-	  && cd $(top_srcdir) \
-	  && gtags -i $(GTAGS_ARGS) $$here
-
-distclean-tags:
-	-rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags
-
-check-TESTS: $(TESTS)
-	@failed=0; all=0; xfail=0; xpass=0; skip=0; ws='[	 ]'; \
-	srcdir=$(srcdir); export srcdir; \
-	list=' $(TESTS) '; \
-	if test -n "$$list"; then \
-	  for tst in $$list; do \
-	    if test -f ./$$tst; then dir=./; \
-	    elif test -f $$tst; then dir=; \
-	    else dir="$(srcdir)/"; fi; \
-	    if $(TESTS_ENVIRONMENT) $${dir}$$tst; then \
-	      all=`expr $$all + 1`; \
-	      case " $(XFAIL_TESTS) " in \
-	      *$$ws$$tst$$ws*) \
-		xpass=`expr $$xpass + 1`; \
-		failed=`expr $$failed + 1`; \
-		echo "XPASS: $$tst"; \
-	      ;; \
-	      *) \
-		echo "PASS: $$tst"; \
-	      ;; \
-	      esac; \
-	    elif test $$? -ne 77; then \
-	      all=`expr $$all + 1`; \
-	      case " $(XFAIL_TESTS) " in \
-	      *$$ws$$tst$$ws*) \
-		xfail=`expr $$xfail + 1`; \
-		echo "XFAIL: $$tst"; \
-	      ;; \
-	      *) \
-		failed=`expr $$failed + 1`; \
-		echo "FAIL: $$tst"; \
-	      ;; \
-	      esac; \
-	    else \
-	      skip=`expr $$skip + 1`; \
-	      echo "SKIP: $$tst"; \
-	    fi; \
-	  done; \
-	  if test "$$failed" -eq 0; then \
-	    if test "$$xfail" -eq 0; then \
-	      banner="All $$all tests passed"; \
-	    else \
-	      banner="All $$all tests behaved as expected ($$xfail expected failures)"; \
-	    fi; \
-	  else \
-	    if test "$$xpass" -eq 0; then \
-	      banner="$$failed of $$all tests failed"; \
-	    else \
-	      banner="$$failed of $$all tests did not behave as expected ($$xpass unexpected passes)"; \
-	    fi; \
-	  fi; \
-	  dashes="$$banner"; \
-	  skipped=""; \
-	  if test "$$skip" -ne 0; then \
-	    skipped="($$skip tests were not run)"; \
-	    test `echo "$$skipped" | wc -c` -le `echo "$$banner" | wc -c` || \
-	      dashes="$$skipped"; \
-	  fi; \
-	  report=""; \
-	  if test "$$failed" -ne 0 && test -n "$(PACKAGE_BUGREPORT)"; then \
-	    report="Please report to $(PACKAGE_BUGREPORT)"; \
-	    test `echo "$$report" | wc -c` -le `echo "$$banner" | wc -c` || \
-	      dashes="$$report"; \
-	  fi; \
-	  dashes=`echo "$$dashes" | sed s/./=/g`; \
-	  echo "$$dashes"; \
-	  echo "$$banner"; \
-	  test -z "$$skipped" || echo "$$skipped"; \
-	  test -z "$$report" || echo "$$report"; \
-	  echo "$$dashes"; \
-	  test "$$failed" -eq 0; \
-	else :; fi
-
-distdir: $(DISTFILES)
-	@srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \
-	list='$(DISTFILES)'; \
-	  dist_files=`for file in $$list; do echo $$file; done | \
-	  sed -e "s|^$$srcdirstrip/||;t" \
-	      -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \
-	case $$dist_files in \
-	  */*) $(MKDIR_P) `echo "$$dist_files" | \
-			   sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \
-			   sort -u` ;; \
-	esac; \
-	for file in $$dist_files; do \
-	  if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \
-	  if test -d $$d/$$file; then \
-	    dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \
-	    if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \
-	      cp -pR $(srcdir)/$$file $(distdir)$$dir || exit 1; \
-	    fi; \
-	    cp -pR $$d/$$file $(distdir)$$dir || exit 1; \
-	  else \
-	    test -f $(distdir)/$$file \
-	    || cp -p $$d/$$file $(distdir)/$$file \
-	    || exit 1; \
-	  fi; \
-	done
-check-am: all-am
-	$(MAKE) $(AM_MAKEFLAGS) check-TESTS
-check: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) check-am
-all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) $(MANS) $(HEADERS)
-installdirs:
-	for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(sbindir)" "$(DESTDIR)$(man5dir)" "$(DESTDIR)$(man8dir)" "$(DESTDIR)$(include_racoondir)"; do \
-	  test -z "$$dir" || $(MKDIR_P) "$$dir"; \
-	done
-install: $(BUILT_SOURCES)
-	$(MAKE) $(AM_MAKEFLAGS) install-am
-install-exec: install-exec-am
-install-data: install-data-am
-uninstall: uninstall-am
-
-install-am: all-am
-	@$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am
-
-installcheck: installcheck-am
-install-strip:
-	$(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \
-	  install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \
-	  `test -z '$(STRIP)' || \
-	    echo "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'"` install
-mostlyclean-generic:
-
-clean-generic:
-
-distclean-generic:
-	-test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES)
-
-maintainer-clean-generic:
-	@echo "This command is intended for maintainers to use"
-	@echo "it deletes files that may require special tools to rebuild."
-	-rm -f cfparse.c
-	-rm -f cfparse.h
-	-rm -f cftoken.c
-	-rm -f prsa_par.c
-	-rm -f prsa_par.h
-	-rm -f prsa_tok.c
-	-test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES)
-clean: clean-am
-
-clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \
-	clean-noinstPROGRAMS clean-sbinPROGRAMS mostlyclean-am
-
-distclean: distclean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-distclean-am: clean-am distclean-compile distclean-generic \
-	distclean-tags
-
-dvi: dvi-am
-
-dvi-am:
-
-html: html-am
-
-info: info-am
-
-info-am:
-
-install-data-am: install-include_racoonHEADERS install-man
-
-install-dvi: install-dvi-am
-
-install-exec-am: install-exec-local install-libLTLIBRARIES \
-	install-sbinPROGRAMS
-
-install-html: install-html-am
-
-install-info: install-info-am
-
-install-man: install-man5 install-man8
-
-install-pdf: install-pdf-am
-
-install-ps: install-ps-am
-
-installcheck-am:
-
-maintainer-clean: maintainer-clean-am
-	-rm -rf ./$(DEPDIR)
-	-rm -f Makefile
-maintainer-clean-am: distclean-am maintainer-clean-generic
-
-mostlyclean: mostlyclean-am
-
-mostlyclean-am: mostlyclean-compile mostlyclean-generic \
-	mostlyclean-libtool
-
-pdf: pdf-am
-
-pdf-am:
-
-ps: ps-am
-
-ps-am:
-
-uninstall-am: uninstall-include_racoonHEADERS uninstall-libLTLIBRARIES \
-	uninstall-man uninstall-sbinPROGRAMS
-
-uninstall-man: uninstall-man5 uninstall-man8
-
-.MAKE: install-am install-strip
-
-.PHONY: CTAGS GTAGS all all-am check check-TESTS check-am clean \
-	clean-generic clean-libLTLIBRARIES clean-libtool \
-	clean-noinstPROGRAMS clean-sbinPROGRAMS ctags distclean \
-	distclean-compile distclean-generic distclean-libtool \
-	distclean-tags distdir dvi dvi-am html html-am info info-am \
-	install install-am install-data install-data-am install-dvi \
-	install-dvi-am install-exec install-exec-am install-exec-local \
-	install-html install-html-am install-include_racoonHEADERS \
-	install-info install-info-am install-libLTLIBRARIES \
-	install-man install-man5 install-man8 install-pdf \
-	install-pdf-am install-ps install-ps-am install-sbinPROGRAMS \
-	install-strip installcheck installcheck-am installdirs \
-	maintainer-clean maintainer-clean-generic mostlyclean \
-	mostlyclean-compile mostlyclean-generic mostlyclean-libtool \
-	pdf pdf-am ps ps-am tags uninstall uninstall-am \
-	uninstall-include_racoonHEADERS uninstall-libLTLIBRARIES \
-	uninstall-man uninstall-man5 uninstall-man8 \
-	uninstall-sbinPROGRAMS
-
-
-install-exec-local:
-	${mkinstalldirs} $(DESTDIR)${adminsockdir}
-
-# special object rules
-crypto_openssl_test.o: crypto_openssl.c
-	$(COMPILE) -DEAYDEBUG -o crypto_openssl_test.o -c $(srcdir)/crypto_openssl.c
-
-misc_noplog.o: misc.c
-	$(COMPILE) -DNOUSE_PLOG -o misc_noplog.o -c $(srcdir)/misc.c
-
-# missing/*.c
-strdup.o:	$(srcdir)/missing/strdup.c
-	$(COMPILE) -c $(srcdir)/missing/$*.c
-getaddrinfo.o:	$(srcdir)/missing/getaddrinfo.c
-	$(COMPILE) -c $(srcdir)/missing/$*.c
-getnameinfo.o:	$(srcdir)/missing/getnameinfo.c
-	$(COMPILE) -c $(srcdir)/missing/$*.c
-rijndael-api-fst.o: $(srcdir)/missing/crypto/rijndael/rijndael-api-fst.c
-	$(COMPILE) -c $(srcdir)/missing/crypto/rijndael/$*.c
-rijndael-alg-fst.o: $(srcdir)/missing/crypto/rijndael/rijndael-alg-fst.c
-	$(COMPILE) -c $(srcdir)/missing/crypto/rijndael/$*.c
-sha2.o: $(srcdir)/missing/crypto/sha2/sha2.c
-	$(COMPILE) -c $(srcdir)/missing/crypto/sha2/$*.c
-# Tell versions [3.59,3.63) of GNU make to not export all variables.
-# Otherwise a system limit (for SysV at least) may be exceeded.
-.NOEXPORT:
diff --git a/src/racoon/NOTICE b/src/racoon/NOTICE
deleted file mode 100644
index b07098f..0000000
--- a/src/racoon/NOTICE
+++ /dev/null
@@ -1,325 +0,0 @@
-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.
-
-
-
-Copyright (C) 2004 Emmanuel Dreyfus
-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.
-
-
-
-Copyright (C) 2004-2006 Emmanuel Dreyfus
-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.
-
-
-
-Copyright (C) 2000 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.
-
-
-Copyright (C) 2004-2005 Emmanuel Dreyfus
-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.
-
-
-
-Copyright (C) 2000, 2001 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.
-
-
-
-Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
-Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
-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.
-
-
-
-Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 and 2003 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.
-
-
-
-Copyright 2000 Wasabi Systems, Inc.
-All rights reserved.
-
-This software was written by Frank van der Linden of Wasabi Systems
-for Zembu Labs, Inc. http://www.zembu.com/
-
-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. The name of Wasabi Systems, Inc. may not be used to endorse
-   or promote products derived from this software without specific prior
-   written permission.
-
-THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``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 WASABI SYSTEMS, INC
-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.
-
-
-
-Copyright (C) 2005 International Business Machines Corporation
-Copyright (c) 2005 by Trusted Computer Solutions, Inc.
-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.
-
-
-
-sha2.h
-
-Version 1.0.0beta1
-
-Written by Aaron D. Gifford <me@aarongifford.com>
-
-Copyright 2000 Aaron D. Gifford.  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 copyright holder nor the names of contributors
-   may be used to endorse or promote products derived from this software
-   without specific prior written permission.
-
-THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``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 AUTHOR(S) OR CONTRIBUTOR(S) 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.
diff --git a/src/racoon/TODO b/src/racoon/TODO
deleted file mode 100644
index 1507167..0000000
--- a/src/racoon/TODO
+++ /dev/null
@@ -1,131 +0,0 @@
-$KAME: TODO,v 1.36 2001/09/19 09:41:39 sakane Exp $
-
-Please send any questions or bug reports to snap-users@kame.net.
-
-TODO list
-
-URGENT
-o The documents for users convenience.
-o split log file based on client.  printf-like config directive, i.e.
-  "logfile racoon.%s.log", should be useful here.
-  -> beware of possible security issue, don't use sprintf() directly!
-     make validation before giving a string to sprintf().
-o save decrypted IKE packet in tcpdump format
-o IPComp SA with wellknown CPI in CPI field.  how to handle it?
-o better rekey
-
-MUST
-o multiple certificate payload handling.
-o To consider the use with certificate infrastructure.  PXIX ???
-o kmstat should be improved.
-o Informational Exchange processing properly.
-o require less configuration.  phase 2 is easier (as kernel presents racoon
-  some hints), phase 1 is harder.  for example,
-  - grab phase 2 lifetime and algorith configuration from sadb_comb payloads in
-    ACQUIRE message.
-  - give reasonable default behavior when no configuration file is present.
-  - difficult items:
-	how to guess a reasonable phase 1 SA lifetime
-		(hardcoded default?  guess from phase 2 lifetime?)
-	guess what kind of ID payload to use
-	guess what kind of authentication to be used
-	guess phase 1 DH group (for aggressive mode, we cannot negotiate it)
-	guess if we need phase 2 PFS or not (we cannot negotiate it. so
-		we may need to pick from "no PFS" or "same as phase 1 DH group")
-	guess how we should negotiate lifetime
-		(is "strict" a reasonable default?)
-	guess which mode to use for phase 1 negotiation (is main mode useful?
-		is base mode popular enough?)
-o more acceptable check.
-
-SHOULD
-o psk.txt should be a database? (psk.db?)  psk_mkdb?
-o Dynamically retry to exchange and resend the packet per nodes.
-o To make the list of supported algorithm by sadb_supported payload
-  in the SADB_REGISTER message which happens asynchronously.
-o fix the structure of ph2handle.
-  We can handle the below case.
-
-  node A                            node B
-    +--------------SA1----------------+
-    +--------------SA2----------------+
-
-  at node A:
-  kernel
-    acquire(A-B) ------> ph2handle(A=B) -----> ph1handle
-                              |
-                            policy
-                             A=B
-                             A=B
-
-  But we can not handle the below case because there is no x?handle.
-
-  node A                            node B                           node C
-    +--------------SA1----------------+
-    +------------------------------------------------SA2---------------+
-
-  at node A:
-  kernel
-    acquire(A-C) ---+---> x?handle ---+---> ph2handle(A=B) -------> ph1handle
-                    |        |        |
-    acquire(A-B) ---+      policy     +---> ph2handle(A=C) -------> ph1handle
-                            A=B
-                            A=C
-
-o consistency of function name.
-o deep copy configuration entry to hander.  It's easy to reload configuration.
-o don't keep to hold keymat values, do it ?
-o local address's field in isakmpsa handler must be kicked out to rmconf.
-o responder policy and initiator policy should be separated.
-o for lifetime and key length, something like this should be useful.
-  - propose N
-  - accept between X and Y
-o wildcard "accept any proposal" policy should be allowed.
-o replay prevention
-  - limited total number of session
-  - limited session per peer
-  - number of proposal
-o full support for variable length SPI.  quickhack support for IPComp is done.
-
-MAY
-o Effective code.
-o interaction between IKE/IPsec and socket layer.
-  at this moment, IKE/IPsec failure is modeled as total packet loss to other
-  part of network subsystem, including socket layer.  this presents the
-  following behaviors:
-  - annoyingly long timeouts on tcp connection attempt, and IKE failure;
-    need to wait till tcp socket timeouts.
-  - blackhole if there's mismatching SAs.
-  we may be able to give socket layer some feedback from IKE/IPsec layer.
-  still not sure if those make sense or not.
-  for example:
-  - send PRU_HOSTDEAD to sockets if IKE negotiation failed
-    (sys/netkey/key.c:key_acquire2)
-    to do this, we need to remember which ACQUIRE was caused by which socket,
-    possibly into larval SAs.
-  - PRU_QUENCH on "no SA found on output"
-  - kick tcp retransmission timer on first SA establishment
-o IKE daemon should handle situations where peer does not run IKE daemon
-  (UDP port unreach for port 500) better.
-  should use connected UDP sockets for sending IKE datagrams.
-o rate-limit log messages from kernel IPsec errors, like "no SA found".
-
-TO BE TESTED.
-o IKE retransmit behavior
-	see, draft-*-ipsec-rekeying*.txt
-o Reboot recovery (peer reboot losing it's security associations)
-	see, draft-*-ipsec-rekeying*.txt
-o Scenarios
-	- End-to-End transport long lived security associations
-	  (over night, data transfer >1Gb) with frequent dynamic rekey
-	- End-to-GW tunnel long lived security associations
-	  (over night, data transfer >1Gb) with frequent dynamic rekey
-	- Policy change events while under SA load
-	- End-to-End SA through IPsec tunnels, initiation both ways
-	- Client End-to-End through client-to-GW tunnel SA, initiate from
-	  client for tunnel, then initiation both ways for end-to-end
-	- Client-to-GW transport SA for secure management
-o behavior to receive multiple auth method proposals and AND proposal
-
-and to be written many many.
-
diff --git a/src/racoon/admin.c b/src/racoon/admin.c
deleted file mode 100644
index b56dd2c..0000000
--- a/src/racoon/admin.c
+++ /dev/null
@@ -1,628 +0,0 @@
-/*	$NetBSD: admin.c,v 1.17.6.3 2009/04/20 13:32:57 tteras Exp $	*/
-
-/* Id: admin.c,v 1.25 2006/04/06 14:31:04 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/signal.h>
-#include <sys/stat.h>
-#include <sys/un.h>
-
-#include <net/pfkeyv2.h>
-
-#include <netinet/in.h>
-#include PATH_IPSEC_H
-
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <netdb.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "debug.h"
-
-#include "schedule.h"
-#include "localconf.h"
-#include "remoteconf.h"
-#include "grabmyaddr.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "oakley.h"
-#include "handler.h"
-#include "evt.h"
-#include "pfkey.h"
-#include "ipsec_doi.h"
-#include "admin.h"
-#include "admin_var.h"
-#include "isakmp_inf.h"
-#ifdef ENABLE_HYBRID
-#include "isakmp_cfg.h"
-#endif
-#include "session.h"
-#include "gcmalloc.h"
-
-#ifdef ENABLE_ADMINPORT
-char *adminsock_path = ADMINSOCK_PATH;
-uid_t adminsock_owner = 0;
-gid_t adminsock_group = 0;
-mode_t adminsock_mode = 0600;
-
-static struct sockaddr_un sunaddr;
-static int admin_process __P((int, char *));
-static int admin_reply __P((int, struct admin_com *, vchar_t *));
-
-int
-admin_handler()
-{
-	int so2;
-	struct sockaddr_storage from;
-	socklen_t fromlen = sizeof(from);
-	struct admin_com com;
-	char *combuf = NULL;
-	int len, error = -1;
-
-	so2 = accept(lcconf->sock_admin, (struct sockaddr *)&from, &fromlen);
-	if (so2 < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to accept admin command: %s\n",
-			strerror(errno));
-		return -1;
-	}
-
-	/* get buffer length */
-	while ((len = recv(so2, (char *)&com, sizeof(com), MSG_PEEK)) < 0) {
-		if (errno == EINTR)
-			continue;
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to recv admin command: %s\n",
-			strerror(errno));
-		goto end;
-	}
-
-	/* sanity check */
-	if (len < sizeof(com)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid header length of admin command\n");
-		goto end;
-	}
-
-	/* get buffer to receive */
-	if ((combuf = racoon_malloc(com.ac_len)) == 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to alloc buffer for admin command\n");
-		goto end;
-	}
-
-	/* get real data */
-	while ((len = recv(so2, combuf, com.ac_len, 0)) < 0) {
-		if (errno == EINTR)
-			continue;
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to recv admin command: %s\n",
-			strerror(errno));
-		goto end;
-	}
-
-	if (com.ac_cmd == ADMIN_RELOAD_CONF) {
-		/* reload does not work at all! */
-		signal_handler(SIGHUP);
-		goto end;
-	}
-
-	error = admin_process(so2, combuf);
-
-    end:
-	(void)close(so2);
-	if (combuf)
-		racoon_free(combuf);
-
-	return error;
-}
-
-/*
- * main child's process.
- */
-static int
-admin_process(so2, combuf)
-	int so2;
-	char *combuf;
-{
-	struct admin_com *com = (struct admin_com *)combuf;
-	vchar_t *buf = NULL;
-	vchar_t *id = NULL;
-	vchar_t *key = NULL;
-	int idtype = 0;
-	int error = -1;
-
-	com->ac_errno = 0;
-
-	switch (com->ac_cmd) {
-	case ADMIN_RELOAD_CONF:
-		/* don't entered because of proccessing it in other place. */
-		plog(LLV_ERROR, LOCATION, NULL, "should never reach here\n");
-		goto out;
-
-	case ADMIN_SHOW_SCHED:
-	{
-		caddr_t p = NULL;
-		int len;
-
-		com->ac_errno = -1;
-
-		if (sched_dump(&p, &len) == -1)
-			goto out2;
-
-		if ((buf = vmalloc(len)) == NULL)
-			goto out2;
-
-		memcpy(buf->v, p, len);
-
-		com->ac_errno = 0;
-out2:
-		racoon_free(p);
-		break;
-	}
-
-	case ADMIN_SHOW_EVT:
-		/* It's not really an error, don't force racoonctl to quit */
-		if ((buf = evt_dump()) == NULL)
-			com->ac_errno = 0; 
-		break;
-
-	case ADMIN_SHOW_SA:
-	case ADMIN_FLUSH_SA:
-	    {
-		switch (com->ac_proto) {
-		case ADMIN_PROTO_ISAKMP:
-			switch (com->ac_cmd) {
-			case ADMIN_SHOW_SA:
-				buf = dumpph1();
-				if (buf == NULL)
-					com->ac_errno = -1;
-				break;
-			case ADMIN_FLUSH_SA:
-				flushph1();
-				break;
-			}
-			break;
-		case ADMIN_PROTO_IPSEC:
-		case ADMIN_PROTO_AH:
-		case ADMIN_PROTO_ESP:
-			switch (com->ac_cmd) {
-			case ADMIN_SHOW_SA:
-			    {
-				u_int p;
-				p = admin2pfkey_proto(com->ac_proto);
-				if (p == -1)
-					goto out;
-				buf = pfkey_dump_sadb(p);
-				if (buf == NULL)
-					com->ac_errno = -1;
-			    }
-				break;
-			case ADMIN_FLUSH_SA:
-				pfkey_flush_sadb(com->ac_proto);
-				break;
-			}
-			break;
-
-		case ADMIN_PROTO_INTERNAL:
-			switch (com->ac_cmd) {
-			case ADMIN_SHOW_SA:
-				buf = NULL; /*XXX dumpph2(&error);*/
-				if (buf == NULL)
-					com->ac_errno = error;
-				break;
-			case ADMIN_FLUSH_SA:
-				/*XXX flushph2();*/
-				com->ac_errno = 0;
-				break;
-			}
-			break;
-
-		default:
-			/* ignore */
-			com->ac_errno = -1;
-		}
-	    }
-		break;
-
-	case ADMIN_DELETE_SA: {
-		struct ph1handle *iph1;
-		struct sockaddr *dst;
-		struct sockaddr *src;
-		char *loc, *rem;
-
-		src = (struct sockaddr *)
-			&((struct admin_com_indexes *)
-			    ((caddr_t)com + sizeof(*com)))->src;
-		dst = (struct sockaddr *)
-			&((struct admin_com_indexes *)
-			    ((caddr_t)com + sizeof(*com)))->dst;
-
-		loc = racoon_strdup(saddrwop2str(src));
-		rem = racoon_strdup(saddrwop2str(dst));
-		STRDUP_FATAL(loc);
-		STRDUP_FATAL(rem);
-
-		if ((iph1 = getph1byaddrwop(src, dst)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "phase 1 for %s -> %s not found\n", loc, rem);
-		} else {
-			if (iph1->status == PHASE1ST_ESTABLISHED)
-				isakmp_info_send_d1(iph1);
-			purge_remote(iph1);
-		}
-
-		racoon_free(loc);
-		racoon_free(rem);
-
-		break;
-	}
-
-#ifdef ENABLE_HYBRID
-	case ADMIN_LOGOUT_USER: {
-		struct ph1handle *iph1;
-		char user[LOGINLEN+1];
-		int found = 0, len = com->ac_len - sizeof(com);
-
-		if (len > LOGINLEN) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "malformed message (login too long)\n");
-			break;
-		}
-
-		memcpy(user, (char *)(com + 1), len);
-		user[len] = 0;
-
-		found = purgeph1bylogin(user);
-		plog(LLV_INFO, LOCATION, NULL, 
-		    "deleted %d SA for user \"%s\"\n", found, user);
-
-		break;
-	}
-#endif
-
-	case ADMIN_DELETE_ALL_SA_DST: {
-		struct ph1handle *iph1;
-		struct sockaddr *dst;
-		char *loc, *rem;
-
-		dst = (struct sockaddr *)
-			&((struct admin_com_indexes *)
-			    ((caddr_t)com + sizeof(*com)))->dst;
-
-		rem = racoon_strdup(saddrwop2str(dst));
-		STRDUP_FATAL(rem);
-
-		plog(LLV_INFO, LOCATION, NULL, 
-		    "Flushing all SAs for peer %s\n", rem);
-
-		while ((iph1 = getph1bydstaddrwop(dst)) != NULL) {
-			loc = racoon_strdup(saddrwop2str(iph1->local));
-			STRDUP_FATAL(loc);
-
-			if (iph1->status == PHASE1ST_ESTABLISHED)
-				isakmp_info_send_d1(iph1);
-			purge_remote(iph1);
-
-			racoon_free(loc);
-		}
-		
-		racoon_free(rem);
-
-		break;
-	}
-
-	case ADMIN_ESTABLISH_SA_PSK: {
-		struct admin_com_psk *acp;
-		char *data;
-
-		com->ac_cmd = ADMIN_ESTABLISH_SA;
-
-		acp = (struct admin_com_psk *)
-		    ((char *)com + sizeof(*com) + 
-		    sizeof(struct admin_com_indexes));
-
-		idtype = acp->id_type;
-
-		if ((id = vmalloc(acp->id_len)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "cannot allocate memory: %s\n", 
-			    strerror(errno));
-			break;
-		}
-		data = (char *)(acp + 1);
-		memcpy(id->v, data, id->l);
-
-		if ((key = vmalloc(acp->key_len)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "cannot allocate memory: %s\n", 
-			    strerror(errno));
-			vfree(id);
-			id = NULL;
-			break;
-		}
-		data = (char *)(data + acp->id_len);
-		memcpy(key->v, data, key->l);
-	}
-	/* FALLTHROUGH */
-	case ADMIN_ESTABLISH_SA:
-	    {
-		struct sockaddr *dst;
-		struct sockaddr *src;
-		src = (struct sockaddr *)
-			&((struct admin_com_indexes *)
-			    ((caddr_t)com + sizeof(*com)))->src;
-		dst = (struct sockaddr *)
-			&((struct admin_com_indexes *)
-			    ((caddr_t)com + sizeof(*com)))->dst;
-
-		switch (com->ac_proto) {
-		case ADMIN_PROTO_ISAKMP: {
-			struct remoteconf *rmconf;
-			struct sockaddr *remote = NULL;
-			struct sockaddr *local = NULL;
-			u_int16_t port;
-
-			com->ac_errno = -1;
-
-			/* search appropreate configuration */
-			rmconf = getrmconf(dst);
-			if (rmconf == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"no configuration found "
-					"for %s\n", saddrwop2str(dst));
-				goto out1;
-			}
-
-			/* get remote IP address and port number. */
-			if ((remote = dupsaddr(dst)) == NULL)
-				goto out1;
-
-			port = extract_port(rmconf->remote);
-			if (set_port(remote, port) == NULL)
-				goto out1;
-
-			/* get local address */
-			if ((local = dupsaddr(src)) == NULL)
-				goto out1;
-
-			port = getmyaddrsport(local);
-			if (set_port(local, port) == NULL)
-				goto out1;
-
-#ifdef ENABLE_HYBRID
-			/* Set the id and key */
-			if (id && key) {
-				if (xauth_rmconf_used(&rmconf->xauth) == -1)
-					goto out1;
-
-				if (rmconf->xauth->login != NULL) {
-					vfree(rmconf->xauth->login);
-					rmconf->xauth->login = NULL;
-				}
-				if (rmconf->xauth->pass != NULL) {
-					vfree(rmconf->xauth->pass);
-					rmconf->xauth->pass = NULL;
-				}
-
-				rmconf->xauth->login = id;
-				rmconf->xauth->pass = key;
-			}
-#endif
- 
-			plog(LLV_INFO, LOCATION, NULL,
-				"accept a request to establish IKE-SA: "
-				"%s\n", saddrwop2str(remote));
-
-			/* begin ident mode */
-			if (isakmp_ph1begin_i(rmconf, remote, local) < 0)
-				goto out1;
-
-			com->ac_errno = 0;
-out1:
-			if (local != NULL)
-				racoon_free(local);
-			if (remote != NULL)
-				racoon_free(remote);
-			break;
-		}
-		case ADMIN_PROTO_AH:
-		case ADMIN_PROTO_ESP:
-			break;
-		default:
-			/* ignore */
-			com->ac_errno = -1;
-		}
-	    }
-		break;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid command: %d\n", com->ac_cmd);
-		com->ac_errno = -1;
-	}
-
-	if ((error = admin_reply(so2, com, buf)) != 0)
-		goto out;
-
-	error = 0;
-out:
-	if (buf != NULL)
-		vfree(buf);
-
-	return error;
-}
-
-static int
-admin_reply(so, combuf, buf)
-	int so;
-	struct admin_com *combuf;
-	vchar_t *buf;
-{
-	int tlen;
-	char *retbuf = NULL;
-
-	if (buf != NULL)
-		tlen = sizeof(*combuf) + buf->l;
-	else
-		tlen = sizeof(*combuf);
-
-	retbuf = racoon_calloc(1, tlen);
-	if (retbuf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate admin buffer\n");
-		return -1;
-	}
-
-	memcpy(retbuf, combuf, sizeof(*combuf));
-	((struct admin_com *)retbuf)->ac_len = tlen;
-
-	if (buf != NULL)
-		memcpy(retbuf + sizeof(*combuf), buf->v, buf->l);
-
-	tlen = send(so, retbuf, tlen, 0);
-	racoon_free(retbuf);
-	if (tlen < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to send admin command: %s\n",
-			strerror(errno));
-		return -1;
-	}
-
-	return 0;
-}
-
-/* ADMIN_PROTO -> SADB_SATYPE */
-int
-admin2pfkey_proto(proto)
-	u_int proto;
-{
-	switch (proto) {
-	case ADMIN_PROTO_IPSEC:
-		return SADB_SATYPE_UNSPEC;
-	case ADMIN_PROTO_AH:
-		return SADB_SATYPE_AH;
-	case ADMIN_PROTO_ESP:
-		return SADB_SATYPE_ESP;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unsupported proto for admin: %d\n", proto);
-		return -1;
-	}
-	/*NOTREACHED*/
-}
-
-int
-admin_init()
-{
-	if (adminsock_path == NULL) {
-		lcconf->sock_admin = -1;
-		return 0;
-	}
-
-	memset(&sunaddr, 0, sizeof(sunaddr));
-	sunaddr.sun_family = AF_UNIX;
-	snprintf(sunaddr.sun_path, sizeof(sunaddr.sun_path),
-		"%s", adminsock_path);
-
-	lcconf->sock_admin = socket(AF_UNIX, SOCK_STREAM, 0);
-	if (lcconf->sock_admin == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"socket: %s\n", strerror(errno));
-		return -1;
-	}
-
-	unlink(sunaddr.sun_path);
-	if (bind(lcconf->sock_admin, (struct sockaddr *)&sunaddr,
-			sizeof(sunaddr)) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"bind(sockname:%s): %s\n",
-			sunaddr.sun_path, strerror(errno));
-		(void)close(lcconf->sock_admin);
-		return -1;
-	}
-
-	if (chown(sunaddr.sun_path, adminsock_owner, adminsock_group) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "chown(%s, %d, %d): %s\n", 
-		    sunaddr.sun_path, adminsock_owner, 
-		    adminsock_group, strerror(errno));
-		(void)close(lcconf->sock_admin);
-		return -1;
-	}
-
-	if (chmod(sunaddr.sun_path, adminsock_mode) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "chmod(%s, 0%03o): %s\n", 
-		    sunaddr.sun_path, adminsock_mode, strerror(errno));
-		(void)close(lcconf->sock_admin);
-		return -1;
-	}
-
-	if (listen(lcconf->sock_admin, 5) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"listen(sockname:%s): %s\n",
-			sunaddr.sun_path, strerror(errno));
-		(void)close(lcconf->sock_admin);
-		return -1;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"open %s as racoon management.\n", sunaddr.sun_path);
-
-	return 0;
-}
-
-int
-admin_close()
-{
-	close(lcconf->sock_admin);
-	return 0;
-}
-#endif
-
diff --git a/src/racoon/admin.h b/src/racoon/admin.h
deleted file mode 100644
index cbc19e8..0000000
--- a/src/racoon/admin.h
+++ /dev/null
@@ -1,114 +0,0 @@
-/*	$NetBSD: admin.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: admin.h,v 1.11 2005/06/19 22:37:47 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ADMIN_H
-#define _ADMIN_H
-
-#define ADMINSOCK_PATH ADMINPORTDIR "/racoon.sock"
-
-extern char *adminsock_path;
-extern uid_t adminsock_owner;
-extern gid_t adminsock_group;
-extern mode_t adminsock_mode;
-
-/* command for administration. */
-/* NOTE: host byte order. */
-struct admin_com {
-	u_int16_t ac_len;	/* total packet length including data */
-	u_int16_t ac_cmd;
-	int16_t ac_errno;
-	u_int16_t ac_proto;
-};
-
-/*
- * No data follows as the data.
- * These don't use proto field.
- */
-#define ADMIN_RELOAD_CONF	0x0001
-#define ADMIN_SHOW_SCHED	0x0002
-#define ADMIN_SHOW_EVT		0x0003
-
-/*
- * No data follows as the data.
- * These use proto field.
- */
-#define ADMIN_SHOW_SA		0x0101
-#define ADMIN_FLUSH_SA		0x0102
-
-/*
- * The admin_com_indexes follows, see below.
- */
-#define ADMIN_DELETE_SA		0x0201
-#define ADMIN_ESTABLISH_SA	0x0202
-#define ADMIN_DELETE_ALL_SA_DST	0x0204	/* All SA for a given peer */
-
-/*
- * The admin_com_indexes and admin_com_psk follow, see below.
- */
-#define ADMIN_ESTABLISH_SA_PSK	0x0203
-
-/*
- * user login follows
- */
-#define ADMIN_LOGOUT_USER	0x0205  /* Delete SA for a given Xauth user */
-
-/*
- * Range 0x08xx is reserved for privilege separation, see privsep.h 
- */
-
-/* the value of proto */
-#define ADMIN_PROTO_ISAKMP	0x01ff
-#define ADMIN_PROTO_IPSEC	0x02ff
-#define ADMIN_PROTO_AH		0x0201
-#define ADMIN_PROTO_ESP		0x0202
-#define ADMIN_PROTO_INTERNAL	0x0301
-
-struct admin_com_indexes {
-	u_int8_t prefs;
-	u_int8_t prefd;
-	u_int8_t ul_proto;
-	u_int8_t reserved;
-	struct sockaddr_storage src;
-	struct sockaddr_storage dst;
-};
-
-struct admin_com_psk { 
-	int id_type;
-	size_t id_len;
-	size_t key_len;
-	/* Followed by id and key */
-}; 
-
-extern int admin2pfkey_proto __P((u_int));
-
-#endif /* _ADMIN_H */
diff --git a/src/racoon/admin_var.h b/src/racoon/admin_var.h
deleted file mode 100644
index 6d7ba81..0000000
--- a/src/racoon/admin_var.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*	$NetBSD: admin_var.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: admin_var.h,v 1.7 2004/12/30 00:08:30 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ADMIN_VAR_H
-#define _ADMIN_VAR_H
-
-extern int admin_handler __P((void));
-extern int admin_init __P((void));
-extern int admin_close __P((void));
-
-#endif /* _ADMIN_VAR_H */
diff --git a/src/racoon/algorithm.c b/src/racoon/algorithm.c
deleted file mode 100644
index 3fd50f6..0000000
--- a/src/racoon/algorithm.c
+++ /dev/null
@@ -1,957 +0,0 @@
-/*	$NetBSD: algorithm.c,v 1.8 2006/10/06 12:02:27 manu Exp $	*/
-
-/* Id: algorithm.c,v 1.15 2006/05/23 20:23:09 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <stdlib.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "crypto_openssl.h"
-#include "dhgroup.h"
-#include "algorithm.h"
-#include "oakley.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "ipsec_doi.h"
-#include "gcmalloc.h"
-
-static struct hash_algorithm oakley_hashdef[] = {
-{ "md5",	algtype_md5,		OAKLEY_ATTR_HASH_ALG_MD5,
-		eay_md5_init,		eay_md5_update,
-		eay_md5_final,		eay_md5_hashlen,
-		eay_md5_one, },
-{ "sha1",	algtype_sha1,		OAKLEY_ATTR_HASH_ALG_SHA,
-		eay_sha1_init,		eay_sha1_update,
-		eay_sha1_final,		eay_sha1_hashlen,
-		eay_sha1_one, },
-#ifdef WITH_SHA2
-{ "sha2_256",	algtype_sha2_256,	OAKLEY_ATTR_HASH_ALG_SHA2_256,
-		eay_sha2_256_init,	eay_sha2_256_update,
-		eay_sha2_256_final,	eay_sha2_256_hashlen,
-		eay_sha2_256_one, },
-{ "sha2_384",	algtype_sha2_384,	OAKLEY_ATTR_HASH_ALG_SHA2_384,
-		eay_sha2_384_init,	eay_sha2_384_update,
-		eay_sha2_384_final,	eay_sha2_384_hashlen,
-		eay_sha2_384_one, },
-{ "sha2_512",	algtype_sha2_512,	OAKLEY_ATTR_HASH_ALG_SHA2_512,
-		eay_sha2_512_init,	eay_sha2_512_update,
-		eay_sha2_512_final,	eay_sha2_512_hashlen,
-		eay_sha2_512_one, },
-#endif
-};
-
-static struct hmac_algorithm oakley_hmacdef[] = {
-{ "hmac_md5",	algtype_md5,		OAKLEY_ATTR_HASH_ALG_MD5,
-		eay_hmacmd5_init,	eay_hmacmd5_update,
-		eay_hmacmd5_final,	NULL,
-		eay_hmacmd5_one, },
-{ "hmac_sha1",	algtype_sha1,		OAKLEY_ATTR_HASH_ALG_SHA,
-		eay_hmacsha1_init,	eay_hmacsha1_update,
-		eay_hmacsha1_final,	NULL,
-		eay_hmacsha1_one, },
-#ifdef WITH_SHA2
-{ "hmac_sha2_256",	algtype_sha2_256,	OAKLEY_ATTR_HASH_ALG_SHA2_256,
-		eay_hmacsha2_256_init,	eay_hmacsha2_256_update,
-		eay_hmacsha2_256_final,	NULL,
-		eay_hmacsha2_256_one, },
-{ "hmac_sha2_384",	algtype_sha2_384,	OAKLEY_ATTR_HASH_ALG_SHA2_384,
-		eay_hmacsha2_384_init,	eay_hmacsha2_384_update,
-		eay_hmacsha2_384_final,	NULL,
-		eay_hmacsha2_384_one, },
-{ "hmac_sha2_512",	algtype_sha2_512,	OAKLEY_ATTR_HASH_ALG_SHA2_512,
-		eay_hmacsha2_512_init,	eay_hmacsha2_512_update,
-		eay_hmacsha2_512_final,	NULL,
-		eay_hmacsha2_512_one, },
-#endif
-};
-
-static struct enc_algorithm oakley_encdef[] = {
-{ "des",	algtype_des,		OAKLEY_ATTR_ENC_ALG_DES,	8,
-		eay_des_encrypt,	eay_des_decrypt,
-		eay_des_weakkey,	eay_des_keylen, },
-#ifdef HAVE_OPENSSL_IDEA_H
-{ "idea",	algtype_idea,		OAKLEY_ATTR_ENC_ALG_IDEA,	8,
-		eay_idea_encrypt,	eay_idea_decrypt,
-		eay_idea_weakkey,	eay_idea_keylen, },
-#endif
-{ "blowfish",	algtype_blowfish,	OAKLEY_ATTR_ENC_ALG_BLOWFISH,	8,
-		eay_bf_encrypt,		eay_bf_decrypt,
-		eay_bf_weakkey,		eay_bf_keylen, },
-#ifdef HAVE_OPENSSL_RC5_H
-{ "rc5",	algtype_rc5,		OAKLEY_ATTR_ENC_ALG_RC5,	8,
-		eay_rc5_encrypt,	eay_rc5_decrypt,
-		eay_rc5_weakkey,	eay_rc5_keylen, },
-#endif
-{ "3des",	algtype_3des,		OAKLEY_ATTR_ENC_ALG_3DES,	8,
-		eay_3des_encrypt,	eay_3des_decrypt,
-		eay_3des_weakkey,	eay_3des_keylen, },
-{ "cast",	algtype_cast128,	OAKLEY_ATTR_ENC_ALG_CAST,	8,
-		eay_cast_encrypt,	eay_cast_decrypt,
-		eay_cast_weakkey,	eay_cast_keylen, },
-{ "aes",	algtype_aes,	OAKLEY_ATTR_ENC_ALG_AES,	16,
-		eay_aes_encrypt,	eay_aes_decrypt,
-		eay_aes_weakkey,	eay_aes_keylen, },
-#ifdef HAVE_OPENSSL_CAMELLIA_H
-{ "camellia",	algtype_camellia,	OAKLEY_ATTR_ENC_ALG_CAMELLIA,	16,
-		eay_camellia_encrypt,	eay_camellia_decrypt,
-		eay_camellia_weakkey,	eay_camellia_keylen, },
-#endif
-};
-
-static struct enc_algorithm ipsec_encdef[] = {
-{ "des-iv64",	algtype_des_iv64,	IPSECDOI_ESP_DES_IV64,		8,
-		NULL,			NULL,
-		NULL,			eay_des_keylen, },
-{ "des",	algtype_des,		IPSECDOI_ESP_DES,		8,
-		NULL,			NULL,
-		NULL,			eay_des_keylen, },
-{ "3des",	algtype_3des,		IPSECDOI_ESP_3DES,		8,
-		NULL,			NULL,
-		NULL,			eay_3des_keylen, },
-#ifdef HAVE_OPENSSL_RC5_H
-{ "rc5",	algtype_rc5,		IPSECDOI_ESP_RC5,		8,
-		NULL,			NULL,
-		NULL,			eay_rc5_keylen, },
-#endif
-{ "cast",	algtype_cast128,	IPSECDOI_ESP_CAST,		8,
-		NULL,			NULL,
-		NULL,			eay_cast_keylen, },
-{ "blowfish",	algtype_blowfish,	IPSECDOI_ESP_BLOWFISH,		8,
-		NULL,			NULL,
-		NULL,			eay_bf_keylen, },
-{ "des-iv32",	algtype_des_iv32,	IPSECDOI_ESP_DES_IV32,		8,
-		NULL,			NULL,
-		NULL,			eay_des_keylen, },
-{ "null",	algtype_null_enc,	IPSECDOI_ESP_NULL,		8,
-		NULL,			NULL,
-		NULL,			eay_null_keylen, },
-{ "aes",	algtype_aes,		IPSECDOI_ESP_AES,		16,
-		NULL,			NULL,
-		NULL,			eay_aes_keylen, },
-{ "twofish",	algtype_twofish,	IPSECDOI_ESP_TWOFISH,		16,
-		NULL,			NULL,
-		NULL,			eay_twofish_keylen, },
-#ifdef HAVE_OPENSSL_IDEA_H
-{ "3idea",	algtype_3idea,		IPSECDOI_ESP_3IDEA,		8,
-		NULL,			NULL,
-		NULL,			NULL, },
-{ "idea",	algtype_idea,		IPSECDOI_ESP_IDEA,		8,
-		NULL,			NULL,
-		NULL,			NULL, },
-#endif
-{ "rc4",	algtype_rc4,		IPSECDOI_ESP_RC4,		8,
-		NULL,			NULL,
-		NULL,			NULL, },
-#ifdef HAVE_OPENSSL_CAMELLIA_H
-{ "camellia",	algtype_camellia,	IPSECDOI_ESP_CAMELLIA,		16,
-		NULL,			NULL,
-		NULL,			eay_camellia_keylen, },
-#endif
-};
-
-static struct hmac_algorithm ipsec_hmacdef[] = {
-{ "md5",	algtype_hmac_md5,	IPSECDOI_ATTR_AUTH_HMAC_MD5,
-		NULL,			NULL,
-		NULL,			eay_md5_hashlen,
-		NULL, },
-{ "sha1",	algtype_hmac_sha1,	IPSECDOI_ATTR_AUTH_HMAC_SHA1,
-		NULL,			NULL,
-		NULL,			eay_sha1_hashlen,
-		NULL, },
-{ "kpdk",	algtype_kpdk,		IPSECDOI_ATTR_AUTH_KPDK,
-		NULL,			NULL,
-		NULL,			eay_kpdk_hashlen,
-		NULL, },
-{ "null",	algtype_non_auth,	IPSECDOI_ATTR_AUTH_NONE,
-		NULL,			NULL,
-		NULL,			eay_null_hashlen,
-		NULL, },
-#ifdef WITH_SHA2
-{ "hmac_sha2_256",	algtype_hmac_sha2_256,IPSECDOI_ATTR_AUTH_HMAC_SHA2_256,
-		NULL,			NULL,
-		NULL,			eay_sha2_256_hashlen,
-		NULL, },
-{ "hmac_sha2_384",	algtype_hmac_sha2_384,IPSECDOI_ATTR_AUTH_HMAC_SHA2_384,
-		NULL,			NULL,
-		NULL,			eay_sha2_384_hashlen,
-		NULL, },
-{ "hmac_sha2_512",	algtype_hmac_sha2_512,IPSECDOI_ATTR_AUTH_HMAC_SHA2_512,
-		NULL,			NULL,
-		NULL,			eay_sha2_512_hashlen,
-		NULL, },
-#endif
-};
-
-static struct misc_algorithm ipsec_compdef[] = {
-{ "oui",	algtype_oui,		IPSECDOI_IPCOMP_OUI, },
-{ "deflate",	algtype_deflate,	IPSECDOI_IPCOMP_DEFLATE, },
-{ "lzs",	algtype_lzs,		IPSECDOI_IPCOMP_LZS, },
-};
-
-/*
- * In case of asymetric modes (hybrid xauth), what's racoon mode of
- * operations ; it seems that the proposal should always use the
- * initiator half (unless a server initiates a connection, which is
- * not handled, and probably not useful).
- */
-static struct misc_algorithm oakley_authdef[] = {
-{ "pre_shared_key",	algtype_psk,	OAKLEY_ATTR_AUTH_METHOD_PSKEY, },
-{ "dsssig",		algtype_dsssig,	OAKLEY_ATTR_AUTH_METHOD_DSSSIG, },
-{ "rsasig",		algtype_rsasig,	OAKLEY_ATTR_AUTH_METHOD_RSASIG, },
-{ "rsaenc",		algtype_rsaenc,	OAKLEY_ATTR_AUTH_METHOD_RSAENC, },
-{ "rsarev",		algtype_rsarev,	OAKLEY_ATTR_AUTH_METHOD_RSAREV, },
-
-{ "gssapi_krb",		algtype_gssapikrb,
-    OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB, },
-
-#ifdef ENABLE_HYBRID
-{ "hybrid_rsa_server",	algtype_hybrid_rsa_s,	
-    OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R, },
-
-{ "hybrid_dss_server",	algtype_hybrid_dss_s,	
-    OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R, },
-
-{ "xauth_psk_server", 	algtype_xauth_psk_s,	
-    OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R, },
-
-{ "xauth_rsa_server", 	algtype_xauth_rsa_s,	
-    OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R, },
-
-{ "hybrid_rsa_client",	algtype_hybrid_rsa_c,	
-    OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I, },
-
-{ "hybrid_dss_client",	algtype_hybrid_dss_c,	
-    OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I, },
-
-{ "xauth_psk_client",	algtype_xauth_psk_c,	
-    OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I, },
-
-{ "xauth_rsa_client",	algtype_xauth_rsa_c,	
-    OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I, },
-#endif
-};
-
-static struct dh_algorithm oakley_dhdef[] = {
-{ "modp768",	algtype_modp768,	OAKLEY_ATTR_GRP_DESC_MODP768,
-		&dh_modp768, },
-{ "modp1024",	algtype_modp1024,	OAKLEY_ATTR_GRP_DESC_MODP1024,
-		&dh_modp1024, },
-{ "modp1536",	algtype_modp1536,	OAKLEY_ATTR_GRP_DESC_MODP1536,
-		&dh_modp1536, },
-{ "modp2048",	algtype_modp2048,	OAKLEY_ATTR_GRP_DESC_MODP2048,
-		&dh_modp2048, },
-{ "modp3072",	algtype_modp3072,	OAKLEY_ATTR_GRP_DESC_MODP3072,
-		&dh_modp3072, },
-{ "modp4096",	algtype_modp4096,	OAKLEY_ATTR_GRP_DESC_MODP4096,
-		&dh_modp4096, },
-{ "modp6144",	algtype_modp6144,	OAKLEY_ATTR_GRP_DESC_MODP6144,
-		&dh_modp6144, },
-{ "modp8192",	algtype_modp8192,	OAKLEY_ATTR_GRP_DESC_MODP8192,
-		&dh_modp8192, },
-};
-
-static struct hash_algorithm *alg_oakley_hashdef __P((int));
-static struct hmac_algorithm *alg_oakley_hmacdef __P((int));
-static struct enc_algorithm *alg_oakley_encdef __P((int));
-static struct enc_algorithm *alg_ipsec_encdef __P((int));
-static struct hmac_algorithm *alg_ipsec_hmacdef __P((int));
-static struct dh_algorithm *alg_oakley_dhdef __P((int));
-
-/* oakley hash algorithm */
-static struct hash_algorithm *
-alg_oakley_hashdef(doi)
-	int doi;
-{
-	int i;
-
-	for (i = 0; i < ARRAYLEN(oakley_hashdef); i++)
-		if (doi == oakley_hashdef[i].doi) {
-			plog(LLV_DEBUG, LOCATION, NULL, "hash(%s)\n",
-				oakley_hashdef[i].name);
-			return &oakley_hashdef[i];
-		}
-	return NULL;
-}
-
-int
-alg_oakley_hashdef_ok(doi)
-	int doi;
-{
-	struct hash_algorithm *f;
-
-	f = alg_oakley_hashdef(doi);
-	if (f == NULL)
-		return 0;
-
-	return 1;
-}
-
-int
-alg_oakley_hashdef_doi(type)
-	int type;
-{
-	int i, res = -1;
-
-	for (i = 0; i < ARRAYLEN(oakley_hashdef); i++)
-		if (type == oakley_hashdef[i].type) {
-			res = oakley_hashdef[i].doi;
-			break;
-		}
-	return res;
-}
-
-int
-alg_oakley_hashdef_hashlen(doi)
-	int doi;
-{
-	struct hash_algorithm *f;
-
-	f = alg_oakley_hashdef(doi);
-	if (f == NULL || f->hashlen == NULL)
-		return 0;
-
-	return (f->hashlen)();
-}
-
-const char *
-alg_oakley_hashdef_name (doi)
-	int doi;
-{
-	struct hash_algorithm *f;
-
-	f = alg_oakley_hashdef(doi);
-	if (f == NULL)
-		return "*UNKNOWN*";
-
-	return f->name;
-}
-
-vchar_t *
-alg_oakley_hashdef_one(doi, buf)
-	int doi;
-	vchar_t *buf;
-{
-	struct hash_algorithm *f;
-
-	f = alg_oakley_hashdef(doi);
-	if (f == NULL || f->hashlen == NULL)
-		return NULL;
-
-	return (f->one)(buf);
-}
-
-/* oakley hmac algorithm */
-static struct hmac_algorithm *
-alg_oakley_hmacdef(doi)
-	int doi;
-{
-	int i;
-
-	for (i = 0; i < ARRAYLEN(oakley_hmacdef); i++)
-		if (doi == oakley_hmacdef[i].doi) {
-			plog(LLV_DEBUG, LOCATION, NULL, "hmac(%s)\n",
-				oakley_hmacdef[i].name);
-			return &oakley_hmacdef[i];
-		}
-	return NULL;
-}
-
-int
-alg_oakley_hmacdef_doi(type)
-	int type;
-{
-	int i, res = -1;
-
-	for (i = 0; i < ARRAYLEN(oakley_hmacdef); i++)
-		if (type == oakley_hmacdef[i].type) {
-			res = oakley_hmacdef[i].doi;
-			break;
-		}
-	return res;
-}
-
-vchar_t *
-alg_oakley_hmacdef_one(doi, key, buf)
-	int doi;
-	vchar_t *key, *buf;
-{
-	struct hmac_algorithm *f;
-	vchar_t *res;
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-
-	f = alg_oakley_hmacdef(doi);
-	if (f == NULL || f->one == NULL)
-		return NULL;
-
-#ifdef ENABLE_STATS
-	gettimeofday(&start, NULL);
-#endif
-
-	res = (f->one)(key, buf);
-
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s size=%zu): %8.6f", __func__,
-		f->name, buf->l, timedelta(&start, &end));
-#endif
-
-	return res;
-}
-
-/* oakley encryption algorithm */
-static struct enc_algorithm *
-alg_oakley_encdef(doi)
-	int doi;
-{
-	int i;
-
-	for (i = 0; i < ARRAYLEN(oakley_encdef); i++)
-		if (doi == oakley_encdef[i].doi) {
-			plog(LLV_DEBUG, LOCATION, NULL, "encryption(%s)\n",
-				oakley_encdef[i].name);
-			return &oakley_encdef[i];
-		}
-	return NULL;
-}
-
-int
-alg_oakley_encdef_ok(doi)
-	int doi;
-{
-	struct enc_algorithm *f;
-
-	f = alg_oakley_encdef(doi);
-	if (f == NULL)
-		return 0;
-
-	return 1;
-}
-
-int
-alg_oakley_encdef_doi(type)
-	int type;
-{
-	int i, res = -1;
-
-	for (i = 0; i < ARRAYLEN(oakley_encdef); i++)
-		if (type == oakley_encdef[i].type) {
-			res = oakley_encdef[i].doi;
-			break;
-		}
-	return res;
-}
-
-int
-alg_oakley_encdef_keylen(doi, len)
-	int doi, len;
-{
-	struct enc_algorithm *f;
-
-	f = alg_oakley_encdef(doi);
-	if (f == NULL || f->keylen == NULL)
-		return -1;
-
-	return (f->keylen)(len);
-}
-
-int
-alg_oakley_encdef_blocklen(doi)
-	int doi;
-{
-	struct enc_algorithm *f;
-
-	f = alg_oakley_encdef(doi);
-	if (f == NULL)
-		return -1;
-
-	return f->blocklen;
-}
-
-const char *
-alg_oakley_encdef_name (doi)
-	int doi;
-{
-	struct enc_algorithm *f;
-
-	f = alg_oakley_encdef(doi);
-	if (f == NULL)
-		return "*UNKNOWN*";
-
-	return f->name;
-}
-
-vchar_t *
-alg_oakley_encdef_decrypt(doi, buf, key, iv)
-	int doi;
-	vchar_t *buf, *key, *iv;
-{
-	vchar_t *res;
-	struct enc_algorithm *f;
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-
-	f = alg_oakley_encdef(doi);
-	if (f == NULL || f->decrypt == NULL)
-		return NULL;
-
-#ifdef ENABLE_STATS
-	gettimeofday(&start, NULL);
-#endif
-
-	res = (f->decrypt)(buf, key, iv);
-
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s klen=%zu size=%zu): %8.6f", __func__,
-		f->name, key->l << 3, buf->l, timedelta(&start, &end));
-#endif
-	return res;
-}
-
-vchar_t *
-alg_oakley_encdef_encrypt(doi, buf, key, iv)
-	int doi;
-	vchar_t *buf, *key, *iv;
-{
-	vchar_t *res;
-	struct enc_algorithm *f;
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-
-	f = alg_oakley_encdef(doi);
-	if (f == NULL || f->encrypt == NULL)
-		return NULL;
-
-#ifdef ENABLE_STATS
-	gettimeofday(&start, NULL);
-#endif
-
-	res = (f->encrypt)(buf, key, iv);
-
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s klen=%zu size=%zu): %8.6f", __func__,
-		f->name, key->l << 3, buf->l, timedelta(&start, &end));
-#endif
-	return res;
-}
-
-/* ipsec encryption algorithm */
-static struct enc_algorithm *
-alg_ipsec_encdef(doi)
-	int doi;
-{
-	int i;
-
-	for (i = 0; i < ARRAYLEN(ipsec_encdef); i++)
-		if (doi == ipsec_encdef[i].doi) {
-			plog(LLV_DEBUG, LOCATION, NULL, "encryption(%s)\n",
-				ipsec_encdef[i].name);
-			return &ipsec_encdef[i];
-		}
-	return NULL;
-}
-
-int
-alg_ipsec_encdef_doi(type)
-	int type;
-{
-	int i, res = -1;
-
-	for (i = 0; i < ARRAYLEN(ipsec_encdef); i++)
-		if (type == ipsec_encdef[i].type) {
-			res = ipsec_encdef[i].doi;
-			break;
-		}
-	return res;
-}
-
-int
-alg_ipsec_encdef_keylen(doi, len)
-	int doi, len;
-{
-	struct enc_algorithm *f;
-
-	f = alg_ipsec_encdef(doi);
-	if (f == NULL || f->keylen == NULL)
-		return -1;
-
-	return (f->keylen)(len);
-}
-
-/* ipsec hmac algorithm */
-static struct hmac_algorithm *
-alg_ipsec_hmacdef(doi)
-	int doi;
-{
-	int i;
-
-	for (i = 0; i < ARRAYLEN(ipsec_hmacdef); i++)
-		if (doi == ipsec_hmacdef[i].doi) {
-			plog(LLV_DEBUG, LOCATION, NULL, "hmac(%s)\n",
-				ipsec_hmacdef[i].name);
-			return &ipsec_hmacdef[i];
-		}
-	return NULL;
-}
-
-int
-alg_ipsec_hmacdef_doi(type)
-	int type;
-{
-	int i, res = -1;
-
-	for (i = 0; i < ARRAYLEN(ipsec_hmacdef); i++)
-		if (type == ipsec_hmacdef[i].type) {
-			res = ipsec_hmacdef[i].doi;
-			break;
-		}
-	return res;
-}
-
-int
-alg_ipsec_hmacdef_hashlen(doi)
-	int doi;
-{
-	struct hmac_algorithm *f;
-
-	f = alg_ipsec_hmacdef(doi);
-	if (f == NULL || f->hashlen == NULL)
-		return -1;
-
-	return (f->hashlen)();
-}
-
-/* ip compression */
-int
-alg_ipsec_compdef_doi(type)
-	int type;
-{
-	int i, res = -1;
-
-	for (i = 0; i < ARRAYLEN(ipsec_compdef); i++)
-		if (type == ipsec_compdef[i].type) {
-			res = ipsec_compdef[i].doi;
-			break;
-		}
-	return res;
-}
-
-/* dh algorithm */
-static struct dh_algorithm *
-alg_oakley_dhdef(doi)
-	int doi;
-{
-	int i;
-
-	for (i = 0; i < ARRAYLEN(oakley_dhdef); i++)
-		if (doi == oakley_dhdef[i].doi) {
-			plog(LLV_DEBUG, LOCATION, NULL, "hmac(%s)\n",
-				oakley_dhdef[i].name);
-			return &oakley_dhdef[i];
-		}
-	return NULL;
-}
-
-int
-alg_oakley_dhdef_ok(doi)
-	int doi;
-{
-	struct dh_algorithm *f;
-
-	f = alg_oakley_dhdef(doi);
-	if (f == NULL)
-		return 0;
-
-	return 1;
-}
-
-int
-alg_oakley_dhdef_doi(type)
-	int type;
-{
-	int i, res = -1;
-
-	for (i = 0; i < ARRAYLEN(oakley_dhdef); i++)
-		if (type == oakley_dhdef[i].type) {
-			res = oakley_dhdef[i].doi;
-			break;
-		}
-	return res;
-}
-
-struct dhgroup *
-alg_oakley_dhdef_group(doi)
-	int doi;
-{
-	struct dh_algorithm *f;
-
-	f = alg_oakley_dhdef(doi);
-	if (f == NULL || f->dhgroup == NULL)
-		return NULL;
-
-	return f->dhgroup;
-}
-
-const char *
-alg_oakley_dhdef_name (doi)
-	int doi;
-{
-	struct dh_algorithm *f;
-	
-	f = alg_oakley_dhdef(doi);
-	if (f == NULL)
-		return "*UNKNOWN*";
-	return f->name;
-}
-
-/* authentication method */
-int
-alg_oakley_authdef_doi(type)
-	int type;
-{
-	int i, res = -1;
-
-	for (i = 0; i < ARRAYLEN(oakley_authdef); i++)
-		if (type == oakley_authdef[i].type) {
-			res = oakley_authdef[i].doi;
-			break;
-		}
-	return res;
-}
-
-const char *
-alg_oakley_authdef_name (doi)
-	int doi;
-{
-	int i;
-
-	for (i = 0; i < ARRAYLEN(oakley_authdef); i++)
-		if (doi == oakley_authdef[i].doi) {
-			return oakley_authdef[i].name;
-		}
-	return "*UNKNOWN*";
-}
-
-/*
- * give the default key length
- * OUT:	-1:		NG
- *	0:		fixed key cipher, key length not allowed
- *	positive:	default key length
- */
-int
-default_keylen(class, type)
-	int class, type;
-{
-
-	switch (class) {
-	case algclass_isakmp_enc:
-	case algclass_ipsec_enc:
-		break;
-	default:
-		return 0;
-	}
-
-	switch (type) {
-	case algtype_blowfish:
-	case algtype_rc5:
-	case algtype_cast128:
-	case algtype_aes:
-	case algtype_twofish:
-	case algtype_camellia:
-		return 128;
-	default:
-		return 0;
-	}
-}
-
-/*
- * check key length
- * OUT:	-1:	NG
- *	0:	OK
- */
-int
-check_keylen(class, type, len)
-	int class, type, len;
-{
-	int badrange;
-
-	switch (class) {
-	case algclass_isakmp_enc:
-	case algclass_ipsec_enc:
-		break;
-	default:
-		/* unknown class, punt */
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unknown algclass %d\n", class);
-		return -1;
-	}
-
-	/* key length must be multiple of 8 bytes - RFC2451 2.2 */
-	switch (type) {
-	case algtype_blowfish:
-	case algtype_rc5:
-	case algtype_cast128:
-	case algtype_aes:
-	case algtype_twofish:
-	case algtype_camellia:
-		if (len % 8 != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"key length %d is not multiple of 8\n", len);
-			return -1;
-		}
-		break;
-	}
-
-	/* key length range */
-	badrange = 0;
-	switch (type) {
-	case algtype_blowfish:
-		if (len < 40 || 448 < len)
-			badrange++;
-		break;
-	case algtype_rc5:
-		if (len < 40 || 2040 < len)
-			badrange++;
-		break;
-	case algtype_cast128:
-		if (len < 40 || 128 < len)
-			badrange++;
-		break;
-	case algtype_aes:
-		if (!(len == 128 || len == 192 || len == 256))
-			badrange++;
-		break;
-	case algtype_twofish:
-		if (len < 40 || 256 < len)
-			badrange++;
-		break;
-	case algtype_camellia:
-		if (!(len == 128 || len == 192 || len == 256))
-			badrange++;
-		break;
-	default:
-		if (len) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"key length is not allowed");
-			return -1;
-		}
-		break;
-	}
-	if (badrange) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"key length out of range\n");
-		return -1;
-	}
-
-	return 0;
-}
-
-/*
- * convert algorithm type to DOI value.
- * OUT	-1   : NG
- *	other: converted.
- */
-int
-algtype2doi(class, type)
-	int class, type;
-{
-	int res = -1;
-
-	switch (class) {
-	case algclass_ipsec_enc:
-		res = alg_ipsec_encdef_doi(type);
-		break;
-	case algclass_ipsec_auth:
-		res = alg_ipsec_hmacdef_doi(type);
-		break;
-	case algclass_ipsec_comp:
-		res = alg_ipsec_compdef_doi(type);
-		break;
-	case algclass_isakmp_enc:
-		res =  alg_oakley_encdef_doi(type);
-		break;
-	case algclass_isakmp_hash:
-		res = alg_oakley_hashdef_doi(type);
-		break;
-	case algclass_isakmp_dh:
-		res = alg_oakley_dhdef_doi(type);
-		break;
-	case algclass_isakmp_ameth:
-		res = alg_oakley_authdef_doi(type);
-		break;
-	}
-	return res;
-}
-
-/*
- * convert algorithm class to DOI value.
- * OUT	-1   : NG
- *	other: converted.
- */
-int
-algclass2doi(class)
-	int class;
-{
-	switch (class) {
-	case algclass_ipsec_enc:
-		return IPSECDOI_PROTO_IPSEC_ESP;
-	case algclass_ipsec_auth:
-		return IPSECDOI_ATTR_AUTH;
-	case algclass_ipsec_comp:
-		return IPSECDOI_PROTO_IPCOMP;
-	case algclass_isakmp_enc:
-		return OAKLEY_ATTR_ENC_ALG;
-	case algclass_isakmp_hash:
-		return OAKLEY_ATTR_HASH_ALG;
-	case algclass_isakmp_dh:
-		return OAKLEY_ATTR_GRP_DESC;
-	case algclass_isakmp_ameth:
-		return OAKLEY_ATTR_AUTH_METHOD;
-	default:
-		return -1;
-	}
-	/*NOTREACHED*/
-	return -1;
-}
diff --git a/src/racoon/algorithm.h b/src/racoon/algorithm.h
deleted file mode 100644
index 8b631b6..0000000
--- a/src/racoon/algorithm.h
+++ /dev/null
@@ -1,216 +0,0 @@
-/*	$NetBSD: algorithm.h,v 1.5 2006/10/06 12:02:27 manu Exp $	*/
-
-/* Id: algorithm.h,v 1.10 2005/04/09 16:25:23 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ALGORITHM_H
-#define _ALGORITHM_H
-
-#include <gnuc.h>
-
-/* algorithm class */
-enum {
-	algclass_ipsec_enc,
-	algclass_ipsec_auth,
-	algclass_ipsec_comp,
-	algclass_isakmp_enc,
-	algclass_isakmp_hash,
-	algclass_isakmp_dh,
-	algclass_isakmp_ameth,	/* authentication method. */
-#define MAXALGCLASS	7
-};
-
-#define ALG_DEFAULT_KEYLEN	64
-
-#define ALGTYPE_NOTHING		0
-
-/* algorithm type */
-enum algtype {
-	algtype_nothing = 0,
-
-	/* enc */
-	algtype_des_iv64,
-	algtype_des,
-	algtype_3des,
-	algtype_rc5,
-	algtype_idea,
-	algtype_cast128,
-	algtype_blowfish,
-	algtype_3idea,
-	algtype_des_iv32,
-	algtype_rc4,
-	algtype_null_enc,
-	algtype_aes,
-	algtype_twofish,
-	algtype_camellia,
-
-	/* ipsec auth */
-	algtype_hmac_md5,
-	algtype_hmac_sha1,
-	algtype_des_mac,
-	algtype_kpdk,
-	algtype_non_auth,
-	algtype_hmac_sha2_256,
-	algtype_hmac_sha2_384,
-	algtype_hmac_sha2_512,
-
-	/* ipcomp */
-	algtype_oui,
-	algtype_deflate,
-	algtype_lzs,
-
-	/* hash */
-	algtype_md5,
-	algtype_sha1,
-	algtype_tiger,
-	algtype_sha2_256,
-	algtype_sha2_384,
-	algtype_sha2_512,
-
-	/* dh_group */
-	algtype_modp768,
-	algtype_modp1024,
-	algtype_ec2n155,
-	algtype_ec2n185,
-	algtype_modp1536,
-	algtype_modp2048,
-	algtype_modp3072,
-	algtype_modp4096,
-	algtype_modp6144,
-	algtype_modp8192,
-
-	/* authentication method. */
-	algtype_psk,
-	algtype_dsssig,
-	algtype_rsasig,
-	algtype_rsaenc,
-	algtype_rsarev,
-	algtype_gssapikrb,
-#ifdef ENABLE_HYBRID
-	algtype_hybrid_rsa_s,
-	algtype_hybrid_dss_s,
-	algtype_hybrid_rsa_c,
-	algtype_hybrid_dss_c,
-	algtype_xauth_psk_s,
-	algtype_xauth_psk_c,
-	algtype_xauth_rsa_s,
-	algtype_xauth_rsa_c,
-#endif
-};
-
-struct hmac_algorithm {
-	char *name;
-	int type;
-	int doi;
-	caddr_t (*init) __P((vchar_t *));
-	void (*update) __P((caddr_t, vchar_t *));
-	vchar_t *(*final) __P((caddr_t));
-	int (*hashlen) __P((void));
-	vchar_t *(*one) __P((vchar_t *, vchar_t *));
-};
-
-struct hash_algorithm {
-	char *name;
-	int type;
-	int doi;
-	caddr_t (*init) __P((void));
-	void (*update) __P((caddr_t, vchar_t *));
-	vchar_t *(*final) __P((caddr_t));
-	int (*hashlen) __P((void));
-	vchar_t *(*one) __P((vchar_t *));
-};
-
-struct enc_algorithm {
-	char *name;
-	int type;
-	int doi;
-	int blocklen;
-	vchar_t *(*encrypt) __P((vchar_t *, vchar_t *, vchar_t *));
-	vchar_t *(*decrypt) __P((vchar_t *, vchar_t *, vchar_t *));
-	int (*weakkey) __P((vchar_t *));
-	int (*keylen) __P((int));
-};
-
-/* dh group */
-struct dh_algorithm {
-	char *name;
-	int type;
-	int doi;
-	struct dhgroup *dhgroup;
-};
-
-/* ipcomp, auth meth, dh group */
-struct misc_algorithm {
-	char *name;
-	int type;
-	int doi;
-};
-
-extern int alg_oakley_hashdef_ok __P((int));
-extern int alg_oakley_hashdef_doi __P((int));
-extern int alg_oakley_hashdef_hashlen __P((int));
-extern vchar_t *alg_oakley_hashdef_one __P((int, vchar_t *));
-
-extern int alg_oakley_hmacdef_doi __P((int));
-extern vchar_t *alg_oakley_hmacdef_one __P((int, vchar_t *, vchar_t *));
-
-extern int alg_oakley_encdef_ok __P((int));
-extern int alg_oakley_encdef_doi __P((int));
-extern int alg_oakley_encdef_keylen __P((int, int));
-extern int alg_oakley_encdef_blocklen __P((int));
-extern vchar_t *alg_oakley_encdef_decrypt __P((int, vchar_t *, vchar_t *, vchar_t *));
-extern vchar_t *alg_oakley_encdef_encrypt __P((int, vchar_t *, vchar_t *, vchar_t *));
-
-extern int alg_ipsec_encdef_doi __P((int));
-extern int alg_ipsec_encdef_keylen __P((int, int));
-
-extern int alg_ipsec_hmacdef_doi __P((int));
-extern int alg_ipsec_hmacdef_hashlen __P((int));
-
-extern int alg_ipsec_compdef_doi __P((int));
-
-extern int alg_oakley_dhdef_doi __P((int));
-extern int alg_oakley_dhdef_ok __P((int));
-extern struct dhgroup *alg_oakley_dhdef_group __P((int));
-
-extern int alg_oakley_authdef_doi __P((int));
-
-extern int default_keylen __P((int, int));
-extern int check_keylen __P((int, int, int));
-extern int algtype2doi __P((int, int));
-extern int algclass2doi __P((int));
-
-extern const char *alg_oakley_encdef_name __P((int));
-extern const char *alg_oakley_hashdef_name __P((int));
-extern const char *alg_oakley_dhdef_name __P((int));
-extern const char *alg_oakley_authdef_name __P((int));
-
-#endif /* _ALGORITHM_H */
diff --git a/src/racoon/backupsa.c b/src/racoon/backupsa.c
deleted file mode 100644
index 9496000..0000000
--- a/src/racoon/backupsa.c
+++ /dev/null
@@ -1,468 +0,0 @@
-/*	$NetBSD: backupsa.c,v 1.8.4.1 2007/08/01 11:52:19 vanhu Exp $	*/
-
-/*	$KAME: backupsa.c,v 1.16 2001/12/31 20:13:40 thorpej Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <ctype.h>
-
-#include <netinet/in.h>
-#include PATH_IPSEC_H
-
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "str2val.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "localconf.h"
-#include "sockmisc.h"
-#include "safefile.h"
-#include "backupsa.h"
-#include "libpfkey.h"
-
-/*
- * (time string)%(sa parameter)
- * (time string) := ex. Nov 24 18:22:48 1986
- * (sa parameter) :=
- *    src dst satype spi mode reqid wsize \
- *    e_type e_keylen a_type a_keylen flags \
- *    l_alloc l_bytes l_addtime l_usetime seq keymat
- */
-static char *format = "%b %d %T %Y";	/* time format */
-static char *strmon[12] = {
-        "Jan", "Feb", "Mar", "Apr", "May", "Jun",
-        "Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
-};
-
-static char *str2tmx __P((char *, struct tm *));
-static int str2num __P((char *, int));
-
-/*
- * output the sa parameter.
- */
-int
-backupsa_to_file(sa_args)
-	struct pfkey_send_sa_args *sa_args;
-{
-	char buf[1024];
-	struct tm *tm;
-	time_t t;
-	char *p, *k;
-	int len, l, i;
-	FILE *fp;
-
-	p = buf;
-	len = sizeof(buf);
-
-	t = time(NULL);
-	tm = localtime(&t);
-	l = strftime(p, len, format, tm);
-	p += l;
-	len -= l;
-	if (len < 0)
-		goto err;
-
-	l = snprintf(p, len, "%%");
-	if (l < 0 || l >= len)
-		goto err;
-	p += l;
-	len -= l;
-	if (len < 0)
-		goto err;
-
-        i = getnameinfo(sa_args->src, sysdep_sa_len(sa_args->src), p, len, NULL, 0, NIFLAGS);
-	if (i != 0)
-		goto err;
-	l = strlen(p);
-	p += l;
-	len -= l;
-	if (len < 0)
-		goto err;
-
-	l = snprintf(p, len, " ");
-	if (l < 0 || l >= len)
-		goto err;
-	p += l;
-	len -= l;
-	if (len < 0)
-		goto err;
-
-        i = getnameinfo(sa_args->dst, sysdep_sa_len(sa_args->dst), p, len, NULL, 0, NIFLAGS);
-	if (i != 0)
-		goto err;
-	l = strlen(p);
-	p += l;
-	len -= l;
-	if (len < 0)
-		goto err;
-
-	l = snprintf(p, len,
-		" %u %lu %u %u %u "
-		"%u %u %u %u %u "
-		"%u %llu %llu %llu %u",
-		sa_args->satype, (unsigned long)ntohl(sa_args->spi), 
-		sa_args->mode, sa_args->reqid, sa_args->wsize, sa_args->e_type, 
-		sa_args->e_keylen, sa_args->a_type, sa_args->a_keylen, 
-		sa_args->flags, sa_args->l_alloc, 
-		(unsigned long long)sa_args->l_bytes, 
-		(unsigned long long)sa_args->l_addtime, 
-		(unsigned long long)sa_args->l_usetime, sa_args->seq);
-
-	if (l < 0 || l >= len)
-		goto err;
-	p += l;
-	len -= l;
-	if (len < 0)
-		goto err;
-
-	k = val2str(sa_args->keymat, sa_args->e_keylen + sa_args->a_keylen);
-	l = snprintf(p, len, " %s", k);
-	racoon_free(k);
-	if (l < 0 || l >= len)
-		goto err;
-	p += l;
-	len -= l;
-	if (len < 0)
-		goto err;
-
-	/* open the file and write the SA parameter */
-	if (safefile(lcconf->pathinfo[LC_PATHTYPE_BACKUPSA], 1) != 0 ||
-	    (fp = fopen(lcconf->pathinfo[LC_PATHTYPE_BACKUPSA], "a")) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to open the backup file %s.\n",
-			lcconf->pathinfo[LC_PATHTYPE_BACKUPSA]);
-		return -1;
-	}
-	fprintf(fp, "%s\n", buf);
-	fclose(fp);
-
-	return 0;
-
-err:
-	plog(LLV_ERROR, LOCATION, NULL,
-		"SA cannot be saved to a file.\n");
-	return -1;
-}
-
-int
-backupsa_from_file()
-{
-	FILE *fp;
-	char buf[512];
-	struct tm tm;
-	time_t created, current;
-	char *p, *q;
-	size_t keymatlen;
-	int line;
-	struct pfkey_send_sa_args sa_args;
-
-	memset(&sa_args, 0, sizeof(sa_args));
-
-	if (safefile(lcconf->pathinfo[LC_PATHTYPE_BACKUPSA], 1) == 0)
-		fp = fopen(lcconf->pathinfo[LC_PATHTYPE_BACKUPSA], "r");
-	else
-		fp = NULL;
-	if (fp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to open the backup file %s.\n",
-			lcconf->pathinfo[LC_PATHTYPE_BACKUPSA]);
-		return -1;
-	}
-
-	current = time(NULL);
-
-	for(line = 1; fgets(buf, sizeof(buf), fp) != NULL; line++) {
-		/* comment line */
-		if (buf[0] == '#')
-			continue;
-
-		memset(&tm, 0, sizeof(tm));
-		p = str2tmx(buf, &tm);
-		if (*p != '%') {
-	err:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"illegal format line#%d in %s: %s\n",
-				line, lcconf->pathinfo[LC_PATHTYPE_BACKUPSA], 
-				buf);
-			goto next;
-		}
-		created = mktime(&tm);
-		p++;
-
-		for (q = p; *q != '\0' && !isspace((int)*q); q++)
-			;
-		*q = '\0';
-		if ((sa_args.src = str2saddr(p, NULL)) == NULL)
-			goto next;
-		p = q + 1;
-
-		for (q = p; *q != '\0' && !isspace((int)*q); q++)
-			;
-		*q = '\0';
-		if ((sa_args.dst = str2saddr(p, NULL)) == NULL)
-			goto next;
-		p = q + 1;
-
-#define GETNEXTNUM(value, function) 				\
-do { 								\
-	char *y; 						\
-	for (q = p; *q != '\0' && !isspace((int)*q); q++) 	\
-		; 						\
-	*q = '\0'; 						\
-	(value) = function(p, &y, 10); 				\
-	if ((value) == 0 && *y != '\0') 			\
-		goto next; 					\
-	p = q + 1; 						\
-} while (/*CONSTCOND*/0);
-
-		GETNEXTNUM(sa_args.satype, strtoul);
-		GETNEXTNUM(sa_args.spi, strtoul);
-		sa_args.spi = ntohl(sa_args.spi);
-		GETNEXTNUM(sa_args.mode, strtoul);
-		GETNEXTNUM(sa_args.reqid, strtoul);
-		GETNEXTNUM(sa_args.wsize, strtoul);
-		GETNEXTNUM(sa_args.e_type, strtoul);
-		GETNEXTNUM(sa_args.e_keylen, strtoul);
-		GETNEXTNUM(sa_args.a_type, strtoul);
-		GETNEXTNUM(sa_args.a_keylen, strtoul);
-		GETNEXTNUM(sa_args.flags, strtoul);
-		GETNEXTNUM(sa_args.l_alloc, strtoul);
-		GETNEXTNUM(sa_args.l_bytes, strtouq);
-		GETNEXTNUM(sa_args.l_addtime, strtouq);
-		GETNEXTNUM(sa_args.l_usetime, strtouq);
-		GETNEXTNUM(sa_args.seq, strtoul);
-
-#undef GETNEXTNUM
-
-		sa_args.keymat = str2val(p, 16, &keymatlen);
-		if (sa_args.keymat == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"illegal format(keymat) line#%d in %s: %s\n",
-				line, lcconf->pathinfo[LC_PATHTYPE_BACKUPSA], 
-				buf);
-			goto next;
-		}
-
-		if (created + sa_args.l_addtime < current) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"ignore this line#%d in %s due to expiration\n",
-				line, lcconf->pathinfo[LC_PATHTYPE_BACKUPSA]);
-			goto next;
-		}
-		sa_args.l_addtime -= current - created;
-
-		if (pfkey_send_add2(&sa_args) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"restore SA failed line#%d in %s: %s\n",
-				line, lcconf->pathinfo[LC_PATHTYPE_BACKUPSA], 
-				ipsec_strerror());
-		}
-
-next:
-	 	if (sa_args.src != NULL) {
-			racoon_free(sa_args.src);
-			sa_args.src = NULL;
-		}
-		if (sa_args.dst != NULL) {
-			racoon_free(sa_args.dst);
-			sa_args.dst = NULL;
-		}
-		if (sa_args.keymat != NULL) {
-			racoon_free(sa_args.keymat);
-			sa_args.keymat = NULL;
-		}
-	}
-
-	fclose(fp);
-
-	/*
-	 * There is a possibility that an abnormal system down will happen
-	 * again before new negotiation will be started.  so racoon clears
-	 * the backup file here.  it's ok that old SAs are remained in the
-	 * file.  any old SA will not be installed because racoon checks the
-	 * lifetime and compare with current time.
-	 */
-
-	return 0;
-}
-
-int
-backupsa_clean()
-{
-	FILE *fp;
-
-	/* simply return if the file is not defined. */
-	if (!lcconf->pathinfo[LC_PATHTYPE_BACKUPSA])
-		return 0;
-
-	fp = fopen(lcconf->pathinfo[LC_PATHTYPE_BACKUPSA], "w+");
-	if (fp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to clean the backup file %s.\n",
-			lcconf->pathinfo[LC_PATHTYPE_BACKUPSA]);
-		return -1;
-	}
-	fclose(fp);
-	return 0;
-}
-
-/*
- * convert fixed string into the tm structure.
- * The fixed string is like 'Nov 24 18:22:48 1986'.
- * static char *format = "%b %d %T %Y";
- */
-static char *
-str2tmx(char *p, struct tm *tm)
-{
-	int i, len;
-
-	/* Month */
-        for (i = 0; i < sizeof(strmon)/sizeof(strmon[0]); i++) {
-		if (strncasecmp(p, strmon[i], strlen(strmon[i])) == 0) {
-			tm->tm_mon = i;
-			break;
-		}
-	}
-	if (i == sizeof(strmon)/sizeof(strmon[0]))
-		return 0;
-	p += strlen(strmon[i]);
-	if (*p++ != ' ')
-		return 0;
-
-	/* Day */
-	len = 2;
-	tm->tm_mday = str2num(p, len);
-	if (tm->tm_mday == -1 || tm->tm_mday > 31)
-		return 0;
-	p += len;
-	if (*p++ != ' ')
-		return 0;
-
-	/* Hour */
-	len = 2;
-	tm->tm_hour = str2num(p, len);
-	if (tm->tm_hour == -1 || tm->tm_hour > 24)
-		return 0;
-	p += len;
-	if (*p++ != ':')
-		return 0;
-
-	/* Min */
-	len = 2;
-	tm->tm_min = str2num(p, len);
-	if (tm->tm_min == -1 || tm->tm_min > 60)
-		return 0;
-	p += len;
-	if (*p++ != ':')
-		return 0;
-
-	/* Sec */
-	len = 2;
-	tm->tm_sec = str2num(p, len);
-	if (tm->tm_sec == -1 || tm->tm_sec > 60)
-		return 0;
-	p += len;
-	if (*p++ != ' ')
-		return 0;
-
-	/* Year */
-	len = 4;
-	tm->tm_year = str2num(p, len);
-	if (tm->tm_year == -1 || tm->tm_year < 1900)
-		return 0;
-	tm->tm_year -= 1900;
-	p += len;
-
-	return p;
-}
-
-static int
-str2num(p, len)
-	char *p;
-	int len;
-{
-	int res, i;
-
-	res = 0;
-        for (i = len; i > 0; i--) {
-		if (!isdigit((int)*p))
-			return -1;
-		res *= 10;
-		res += *p - '0';
-		p++;
-	}
-
-	return res;
-}
-
-#ifdef TEST
-#include <stdio.h>
-int
-main()
-{
-	struct tm tm;
-	time_t t;
-	char *buf = "Nov 24 18:22:48 1986 ";
-	char *p;
-
-	memset(&tm, 0, sizeof(tm));
-	p = str2tmx(buf, &tm);
-	printf("[%x]\n", *p);
-	t = mktime(&tm);
-	if (t == -1)
-		printf("mktime failed.");
-	p = ctime(&t);
-	printf("[%s]\n", p);
-
-	exit(0);
-}
-#endif
diff --git a/src/racoon/backupsa.h b/src/racoon/backupsa.h
deleted file mode 100644
index e563791..0000000
--- a/src/racoon/backupsa.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*	$NetBSD: backupsa.h,v 1.5 2006/12/09 05:52:57 manu Exp $	*/
-
-/* Id: backupsa.h,v 1.3 2004/06/11 16:00:15 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _BACKUPSA_H
-#define _BACKUPSA_H
-
-extern int backupsa_to_file __P((struct pfkey_send_sa_args *));
-extern int backupsa_from_file __P((void));
-extern int backupsa_clean __P((void));
-
-#endif /* _BACKUPSA_H */
diff --git a/src/racoon/cfparse.h b/src/racoon/cfparse.h
deleted file mode 100644
index 2946b3e..0000000
--- a/src/racoon/cfparse.h
+++ /dev/null
@@ -1,392 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
-
-/* Skeleton interface for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   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, or (at your option)
-   any later version.
-
-   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.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     PRIVSEP = 258,
-     USER = 259,
-     GROUP = 260,
-     CHROOT = 261,
-     PATH = 262,
-     PATHTYPE = 263,
-     INCLUDE = 264,
-     IDENTIFIER = 265,
-     VENDORID = 266,
-     LOGGING = 267,
-     LOGLEV = 268,
-     PADDING = 269,
-     PAD_RANDOMIZE = 270,
-     PAD_RANDOMIZELEN = 271,
-     PAD_MAXLEN = 272,
-     PAD_STRICT = 273,
-     PAD_EXCLTAIL = 274,
-     LISTEN = 275,
-     X_ISAKMP = 276,
-     X_ISAKMP_NATT = 277,
-     X_ADMIN = 278,
-     STRICT_ADDRESS = 279,
-     ADMINSOCK = 280,
-     DISABLED = 281,
-     LDAPCFG = 282,
-     LDAP_HOST = 283,
-     LDAP_PORT = 284,
-     LDAP_PVER = 285,
-     LDAP_BASE = 286,
-     LDAP_BIND_DN = 287,
-     LDAP_BIND_PW = 288,
-     LDAP_SUBTREE = 289,
-     LDAP_ATTR_USER = 290,
-     LDAP_ATTR_ADDR = 291,
-     LDAP_ATTR_MASK = 292,
-     LDAP_ATTR_GROUP = 293,
-     LDAP_ATTR_MEMBER = 294,
-     MODECFG = 295,
-     CFG_NET4 = 296,
-     CFG_MASK4 = 297,
-     CFG_DNS4 = 298,
-     CFG_NBNS4 = 299,
-     CFG_DEFAULT_DOMAIN = 300,
-     CFG_AUTH_SOURCE = 301,
-     CFG_AUTH_GROUPS = 302,
-     CFG_SYSTEM = 303,
-     CFG_RADIUS = 304,
-     CFG_PAM = 305,
-     CFG_LDAP = 306,
-     CFG_LOCAL = 307,
-     CFG_NONE = 308,
-     CFG_GROUP_SOURCE = 309,
-     CFG_ACCOUNTING = 310,
-     CFG_CONF_SOURCE = 311,
-     CFG_MOTD = 312,
-     CFG_POOL_SIZE = 313,
-     CFG_AUTH_THROTTLE = 314,
-     CFG_SPLIT_NETWORK = 315,
-     CFG_SPLIT_LOCAL = 316,
-     CFG_SPLIT_INCLUDE = 317,
-     CFG_SPLIT_DNS = 318,
-     CFG_PFS_GROUP = 319,
-     CFG_SAVE_PASSWD = 320,
-     RETRY = 321,
-     RETRY_COUNTER = 322,
-     RETRY_INTERVAL = 323,
-     RETRY_PERSEND = 324,
-     RETRY_PHASE1 = 325,
-     RETRY_PHASE2 = 326,
-     NATT_KA = 327,
-     ALGORITHM_CLASS = 328,
-     ALGORITHMTYPE = 329,
-     STRENGTHTYPE = 330,
-     SAINFO = 331,
-     FROM = 332,
-     REMOTE = 333,
-     ANONYMOUS = 334,
-     INHERIT = 335,
-     EXCHANGE_MODE = 336,
-     EXCHANGETYPE = 337,
-     DOI = 338,
-     DOITYPE = 339,
-     SITUATION = 340,
-     SITUATIONTYPE = 341,
-     CERTIFICATE_TYPE = 342,
-     CERTTYPE = 343,
-     PEERS_CERTFILE = 344,
-     CA_TYPE = 345,
-     VERIFY_CERT = 346,
-     SEND_CERT = 347,
-     SEND_CR = 348,
-     IDENTIFIERTYPE = 349,
-     IDENTIFIERQUAL = 350,
-     MY_IDENTIFIER = 351,
-     PEERS_IDENTIFIER = 352,
-     VERIFY_IDENTIFIER = 353,
-     DNSSEC = 354,
-     CERT_X509 = 355,
-     CERT_PLAINRSA = 356,
-     NONCE_SIZE = 357,
-     DH_GROUP = 358,
-     KEEPALIVE = 359,
-     PASSIVE = 360,
-     INITIAL_CONTACT = 361,
-     NAT_TRAVERSAL = 362,
-     REMOTE_FORCE_LEVEL = 363,
-     PROPOSAL_CHECK = 364,
-     PROPOSAL_CHECK_LEVEL = 365,
-     GENERATE_POLICY = 366,
-     GENERATE_LEVEL = 367,
-     SUPPORT_PROXY = 368,
-     PROPOSAL = 369,
-     EXEC_PATH = 370,
-     EXEC_COMMAND = 371,
-     EXEC_SUCCESS = 372,
-     EXEC_FAILURE = 373,
-     GSS_ID = 374,
-     GSS_ID_ENC = 375,
-     GSS_ID_ENCTYPE = 376,
-     COMPLEX_BUNDLE = 377,
-     DPD = 378,
-     DPD_DELAY = 379,
-     DPD_RETRY = 380,
-     DPD_MAXFAIL = 381,
-     PH1ID = 382,
-     XAUTH_LOGIN = 383,
-     WEAK_PHASE1_CHECK = 384,
-     PREFIX = 385,
-     PORT = 386,
-     PORTANY = 387,
-     UL_PROTO = 388,
-     ANY = 389,
-     IKE_FRAG = 390,
-     ESP_FRAG = 391,
-     MODE_CFG = 392,
-     PFS_GROUP = 393,
-     LIFETIME = 394,
-     LIFETYPE_TIME = 395,
-     LIFETYPE_BYTE = 396,
-     STRENGTH = 397,
-     REMOTEID = 398,
-     SCRIPT = 399,
-     PHASE1_UP = 400,
-     PHASE1_DOWN = 401,
-     NUMBER = 402,
-     SWITCH = 403,
-     BOOLEAN = 404,
-     HEXSTRING = 405,
-     QUOTEDSTRING = 406,
-     ADDRSTRING = 407,
-     ADDRRANGE = 408,
-     UNITTYPE_BYTE = 409,
-     UNITTYPE_KBYTES = 410,
-     UNITTYPE_MBYTES = 411,
-     UNITTYPE_TBYTES = 412,
-     UNITTYPE_SEC = 413,
-     UNITTYPE_MIN = 414,
-     UNITTYPE_HOUR = 415,
-     EOS = 416,
-     BOC = 417,
-     EOC = 418,
-     COMMA = 419
-   };
-#endif
-/* Tokens.  */
-#define PRIVSEP 258
-#define USER 259
-#define GROUP 260
-#define CHROOT 261
-#define PATH 262
-#define PATHTYPE 263
-#define INCLUDE 264
-#define IDENTIFIER 265
-#define VENDORID 266
-#define LOGGING 267
-#define LOGLEV 268
-#define PADDING 269
-#define PAD_RANDOMIZE 270
-#define PAD_RANDOMIZELEN 271
-#define PAD_MAXLEN 272
-#define PAD_STRICT 273
-#define PAD_EXCLTAIL 274
-#define LISTEN 275
-#define X_ISAKMP 276
-#define X_ISAKMP_NATT 277
-#define X_ADMIN 278
-#define STRICT_ADDRESS 279
-#define ADMINSOCK 280
-#define DISABLED 281
-#define LDAPCFG 282
-#define LDAP_HOST 283
-#define LDAP_PORT 284
-#define LDAP_PVER 285
-#define LDAP_BASE 286
-#define LDAP_BIND_DN 287
-#define LDAP_BIND_PW 288
-#define LDAP_SUBTREE 289
-#define LDAP_ATTR_USER 290
-#define LDAP_ATTR_ADDR 291
-#define LDAP_ATTR_MASK 292
-#define LDAP_ATTR_GROUP 293
-#define LDAP_ATTR_MEMBER 294
-#define MODECFG 295
-#define CFG_NET4 296
-#define CFG_MASK4 297
-#define CFG_DNS4 298
-#define CFG_NBNS4 299
-#define CFG_DEFAULT_DOMAIN 300
-#define CFG_AUTH_SOURCE 301
-#define CFG_AUTH_GROUPS 302
-#define CFG_SYSTEM 303
-#define CFG_RADIUS 304
-#define CFG_PAM 305
-#define CFG_LDAP 306
-#define CFG_LOCAL 307
-#define CFG_NONE 308
-#define CFG_GROUP_SOURCE 309
-#define CFG_ACCOUNTING 310
-#define CFG_CONF_SOURCE 311
-#define CFG_MOTD 312
-#define CFG_POOL_SIZE 313
-#define CFG_AUTH_THROTTLE 314
-#define CFG_SPLIT_NETWORK 315
-#define CFG_SPLIT_LOCAL 316
-#define CFG_SPLIT_INCLUDE 317
-#define CFG_SPLIT_DNS 318
-#define CFG_PFS_GROUP 319
-#define CFG_SAVE_PASSWD 320
-#define RETRY 321
-#define RETRY_COUNTER 322
-#define RETRY_INTERVAL 323
-#define RETRY_PERSEND 324
-#define RETRY_PHASE1 325
-#define RETRY_PHASE2 326
-#define NATT_KA 327
-#define ALGORITHM_CLASS 328
-#define ALGORITHMTYPE 329
-#define STRENGTHTYPE 330
-#define SAINFO 331
-#define FROM 332
-#define REMOTE 333
-#define ANONYMOUS 334
-#define INHERIT 335
-#define EXCHANGE_MODE 336
-#define EXCHANGETYPE 337
-#define DOI 338
-#define DOITYPE 339
-#define SITUATION 340
-#define SITUATIONTYPE 341
-#define CERTIFICATE_TYPE 342
-#define CERTTYPE 343
-#define PEERS_CERTFILE 344
-#define CA_TYPE 345
-#define VERIFY_CERT 346
-#define SEND_CERT 347
-#define SEND_CR 348
-#define IDENTIFIERTYPE 349
-#define IDENTIFIERQUAL 350
-#define MY_IDENTIFIER 351
-#define PEERS_IDENTIFIER 352
-#define VERIFY_IDENTIFIER 353
-#define DNSSEC 354
-#define CERT_X509 355
-#define CERT_PLAINRSA 356
-#define NONCE_SIZE 357
-#define DH_GROUP 358
-#define KEEPALIVE 359
-#define PASSIVE 360
-#define INITIAL_CONTACT 361
-#define NAT_TRAVERSAL 362
-#define REMOTE_FORCE_LEVEL 363
-#define PROPOSAL_CHECK 364
-#define PROPOSAL_CHECK_LEVEL 365
-#define GENERATE_POLICY 366
-#define GENERATE_LEVEL 367
-#define SUPPORT_PROXY 368
-#define PROPOSAL 369
-#define EXEC_PATH 370
-#define EXEC_COMMAND 371
-#define EXEC_SUCCESS 372
-#define EXEC_FAILURE 373
-#define GSS_ID 374
-#define GSS_ID_ENC 375
-#define GSS_ID_ENCTYPE 376
-#define COMPLEX_BUNDLE 377
-#define DPD 378
-#define DPD_DELAY 379
-#define DPD_RETRY 380
-#define DPD_MAXFAIL 381
-#define PH1ID 382
-#define XAUTH_LOGIN 383
-#define WEAK_PHASE1_CHECK 384
-#define PREFIX 385
-#define PORT 386
-#define PORTANY 387
-#define UL_PROTO 388
-#define ANY 389
-#define IKE_FRAG 390
-#define ESP_FRAG 391
-#define MODE_CFG 392
-#define PFS_GROUP 393
-#define LIFETIME 394
-#define LIFETYPE_TIME 395
-#define LIFETYPE_BYTE 396
-#define STRENGTH 397
-#define REMOTEID 398
-#define SCRIPT 399
-#define PHASE1_UP 400
-#define PHASE1_DOWN 401
-#define NUMBER 402
-#define SWITCH 403
-#define BOOLEAN 404
-#define HEXSTRING 405
-#define QUOTEDSTRING 406
-#define ADDRSTRING 407
-#define ADDRRANGE 408
-#define UNITTYPE_BYTE 409
-#define UNITTYPE_KBYTES 410
-#define UNITTYPE_MBYTES 411
-#define UNITTYPE_TBYTES 412
-#define UNITTYPE_SEC 413
-#define UNITTYPE_MIN 414
-#define UNITTYPE_HOUR 415
-#define EOS 416
-#define BOC 417
-#define EOC 418
-#define COMMA 419
-
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 174 "cfparse.y"
-{
-	unsigned long num;
-	vchar_t *val;
-	struct remoteconf *rmconf;
-	struct sockaddr *saddr;
-	struct sainfoalg *alg;
-}
-/* Line 1489 of yacc.c.  */
-#line 385 "cfparse.h"
-	YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-extern YYSTYPE yylval;
-
diff --git a/src/racoon/cfparse.y b/src/racoon/cfparse.y
deleted file mode 100644
index 540c400..0000000
--- a/src/racoon/cfparse.y
+++ /dev/null
@@ -1,2599 +0,0 @@
-/*	$NetBSD: cfparse.y,v 1.18.4.7 2008/07/21 20:45:32 tteras Exp $	*/
-
-/* Id: cfparse.y,v 1.66 2006/08/22 18:17:17 manubsd Exp */
-
-%{
-/*
- * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 and 2003 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/queue.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include PATH_IPSEC_H
-
-#ifdef ENABLE_HYBRID
-#include <arpa/inet.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <netdb.h>
-#include <pwd.h>
-#include <grp.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "str2val.h"
-#include "genlist.h"
-#include "debug.h"
-
-#include "admin.h"
-#include "privsep.h"
-#include "cfparse_proto.h"
-#include "cftoken_proto.h"
-#include "algorithm.h"
-#include "localconf.h"
-#include "policy.h"
-#include "sainfo.h"
-#include "oakley.h"
-#include "pfkey.h"
-#include "remoteconf.h"
-#include "grabmyaddr.h"
-#include "isakmp_var.h"
-#include "handler.h"
-#include "isakmp.h"
-#include "nattraversal.h"
-#include "isakmp_frag.h"
-#ifdef ENABLE_HYBRID
-#include "resolv.h"
-#include "isakmp_unity.h"
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h"
-#endif
-#include "ipsec_doi.h"
-#include "strnames.h"
-#include "gcmalloc.h"
-#ifdef HAVE_GSSAPI
-#include "gssapi.h"
-#endif
-#include "vendorid.h"
-#include "rsalist.h"
-
-struct proposalspec {
-	time_t lifetime;		/* for isakmp/ipsec */
-	int lifebyte;			/* for isakmp/ipsec */
-	struct secprotospec *spspec;	/* the head is always current spec. */
-	struct proposalspec *next;	/* the tail is the most prefered. */
-	struct proposalspec *prev;
-};
-
-struct secprotospec {
-	int prop_no;
-	int trns_no;
-	int strength;		/* for isakmp/ipsec */
-	int encklen;		/* for isakmp/ipsec */
-	time_t lifetime;	/* for isakmp */
-	int lifebyte;		/* for isakmp */
-	int proto_id;		/* for ipsec (isakmp?) */
-	int ipsec_level;	/* for ipsec */
-	int encmode;		/* for ipsec */
-	int vendorid;		/* for isakmp */
-	char *gssid;
-	struct sockaddr *remote;
-	int algclass[MAXALGCLASS];
-
-	struct secprotospec *next;	/* the tail is the most prefiered. */
-	struct secprotospec *prev;
-	struct proposalspec *back;
-};
-
-static int num2dhgroup[] = {
-	0,
-	OAKLEY_ATTR_GRP_DESC_MODP768,
-	OAKLEY_ATTR_GRP_DESC_MODP1024,
-	OAKLEY_ATTR_GRP_DESC_EC2N155,
-	OAKLEY_ATTR_GRP_DESC_EC2N185,
-	OAKLEY_ATTR_GRP_DESC_MODP1536,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	0,
-	OAKLEY_ATTR_GRP_DESC_MODP2048,
-	OAKLEY_ATTR_GRP_DESC_MODP3072,
-	OAKLEY_ATTR_GRP_DESC_MODP4096,
-	OAKLEY_ATTR_GRP_DESC_MODP6144,
-	OAKLEY_ATTR_GRP_DESC_MODP8192
-};
-
-static struct remoteconf *cur_rmconf;
-static int tmpalgtype[MAXALGCLASS];
-static struct sainfo *cur_sainfo;
-static int cur_algclass;
-static int oldloglevel = LLV_BASE;
-
-static struct proposalspec *newprspec __P((void));
-static void insprspec __P((struct proposalspec *, struct proposalspec **));
-static struct secprotospec *newspspec __P((void));
-static void insspspec __P((struct secprotospec *, struct proposalspec **));
-static void adminsock_conf __P((vchar_t *, vchar_t *, vchar_t *, int));
-
-static int set_isakmp_proposal
-	__P((struct remoteconf *, struct proposalspec *));
-static void clean_tmpalgtype __P((void));
-static int expand_isakmpspec __P((int, int, int *,
-	int, int, time_t, int, int, int, char *, struct remoteconf *));
-static int listen_addr __P((struct sockaddr *addr, int udp_encap));
-
-void freeetypes (struct etypes **etypes);
-
-#if 0
-static int fix_lifebyte __P((u_long));
-#endif
-%}
-
-%union {
-	unsigned long num;
-	vchar_t *val;
-	struct remoteconf *rmconf;
-	struct sockaddr *saddr;
-	struct sainfoalg *alg;
-}
-
-	/* privsep */
-%token PRIVSEP USER GROUP CHROOT
-	/* path */
-%token PATH PATHTYPE
-	/* include */
-%token INCLUDE
-	/* self information */
-%token IDENTIFIER VENDORID
-	/* logging */
-%token LOGGING LOGLEV
-	/* padding */
-%token PADDING PAD_RANDOMIZE PAD_RANDOMIZELEN PAD_MAXLEN PAD_STRICT PAD_EXCLTAIL
-	/* listen */
-%token LISTEN X_ISAKMP X_ISAKMP_NATT X_ADMIN STRICT_ADDRESS ADMINSOCK DISABLED
-	/* ldap config */
-%token LDAPCFG LDAP_HOST LDAP_PORT LDAP_PVER LDAP_BASE LDAP_BIND_DN LDAP_BIND_PW LDAP_SUBTREE
-%token LDAP_ATTR_USER LDAP_ATTR_ADDR LDAP_ATTR_MASK LDAP_ATTR_GROUP LDAP_ATTR_MEMBER
-	/* modecfg */
-%token MODECFG CFG_NET4 CFG_MASK4 CFG_DNS4 CFG_NBNS4 CFG_DEFAULT_DOMAIN
-%token CFG_AUTH_SOURCE CFG_AUTH_GROUPS CFG_SYSTEM CFG_RADIUS CFG_PAM CFG_LDAP CFG_LOCAL CFG_NONE
-%token CFG_GROUP_SOURCE CFG_ACCOUNTING CFG_CONF_SOURCE CFG_MOTD CFG_POOL_SIZE CFG_AUTH_THROTTLE
-%token CFG_SPLIT_NETWORK CFG_SPLIT_LOCAL CFG_SPLIT_INCLUDE CFG_SPLIT_DNS
-%token CFG_PFS_GROUP CFG_SAVE_PASSWD
-
-	/* timer */
-%token RETRY RETRY_COUNTER RETRY_INTERVAL RETRY_PERSEND
-%token RETRY_PHASE1 RETRY_PHASE2 NATT_KA
-	/* algorithm */
-%token ALGORITHM_CLASS ALGORITHMTYPE STRENGTHTYPE
-	/* sainfo */
-%token SAINFO FROM
-	/* remote */
-%token REMOTE ANONYMOUS INHERIT
-%token EXCHANGE_MODE EXCHANGETYPE DOI DOITYPE SITUATION SITUATIONTYPE
-%token CERTIFICATE_TYPE CERTTYPE PEERS_CERTFILE CA_TYPE
-%token VERIFY_CERT SEND_CERT SEND_CR
-%token IDENTIFIERTYPE IDENTIFIERQUAL MY_IDENTIFIER 
-%token PEERS_IDENTIFIER VERIFY_IDENTIFIER
-%token DNSSEC CERT_X509 CERT_PLAINRSA
-%token NONCE_SIZE DH_GROUP KEEPALIVE PASSIVE INITIAL_CONTACT
-%token NAT_TRAVERSAL REMOTE_FORCE_LEVEL
-%token PROPOSAL_CHECK PROPOSAL_CHECK_LEVEL
-%token GENERATE_POLICY GENERATE_LEVEL SUPPORT_PROXY
-%token PROPOSAL
-%token EXEC_PATH EXEC_COMMAND EXEC_SUCCESS EXEC_FAILURE
-%token GSS_ID GSS_ID_ENC GSS_ID_ENCTYPE
-%token COMPLEX_BUNDLE
-%token DPD DPD_DELAY DPD_RETRY DPD_MAXFAIL
-%token PH1ID
-%token XAUTH_LOGIN WEAK_PHASE1_CHECK
-
-%token PREFIX PORT PORTANY UL_PROTO ANY IKE_FRAG ESP_FRAG MODE_CFG
-%token PFS_GROUP LIFETIME LIFETYPE_TIME LIFETYPE_BYTE STRENGTH REMOTEID
-
-%token SCRIPT PHASE1_UP PHASE1_DOWN
-
-%token NUMBER SWITCH BOOLEAN
-%token HEXSTRING QUOTEDSTRING ADDRSTRING ADDRRANGE
-%token UNITTYPE_BYTE UNITTYPE_KBYTES UNITTYPE_MBYTES UNITTYPE_TBYTES
-%token UNITTYPE_SEC UNITTYPE_MIN UNITTYPE_HOUR
-%token EOS BOC EOC COMMA
-
-%type <num> NUMBER BOOLEAN SWITCH keylength
-%type <num> PATHTYPE IDENTIFIERTYPE IDENTIFIERQUAL LOGLEV GSS_ID_ENCTYPE 
-%type <num> ALGORITHM_CLASS dh_group_num
-%type <num> ALGORITHMTYPE STRENGTHTYPE
-%type <num> PREFIX prefix PORT port ike_port
-%type <num> ul_proto UL_PROTO
-%type <num> EXCHANGETYPE DOITYPE SITUATIONTYPE
-%type <num> CERTTYPE CERT_X509 CERT_PLAINRSA PROPOSAL_CHECK_LEVEL REMOTE_FORCE_LEVEL GENERATE_LEVEL
-%type <num> unittype_time unittype_byte
-%type <val> QUOTEDSTRING HEXSTRING ADDRSTRING ADDRRANGE sainfo_id
-%type <val> identifierstring
-%type <saddr> remote_index ike_addrinfo_port
-%type <alg> algorithm
-
-%%
-
-statements
-	:	/* nothing */
-	|	statements statement
-	;
-statement
-	:	privsep_statement
-	|	path_statement
-	|	include_statement
-	|	gssenc_statement
-	|	identifier_statement
-	|	logging_statement
-	|	padding_statement
-	|	listen_statement
-	|	ldapcfg_statement
-	|	modecfg_statement
-	|	timer_statement
-	|	sainfo_statement
-	|	remote_statement
-	|	special_statement
-	;
-
-	/* privsep */
-privsep_statement
-	:	PRIVSEP BOC privsep_stmts EOC
-	;
-privsep_stmts
-	:	/* nothing */
-	|	privsep_stmts privsep_stmt
-	;
-privsep_stmt
-	:	USER QUOTEDSTRING
-		{
-			struct passwd *pw;
-
-			if ((pw = getpwnam($2->v)) == NULL) {
-				yyerror("unknown user \"%s\"", $2->v);
-				return -1;
-			}
-			lcconf->uid = pw->pw_uid;
-		} 
-		EOS
-	|	USER NUMBER { lcconf->uid = $2; } EOS
-	|	GROUP QUOTEDSTRING
-		{
-			struct group *gr;
-
-			if ((gr = getgrnam($2->v)) == NULL) {
-				yyerror("unknown group \"%s\"", $2->v);
-				return -1;
-			}
-			lcconf->gid = gr->gr_gid;
-		}
-		EOS
-	|	GROUP NUMBER { lcconf->gid = $2; } EOS
-	|	CHROOT QUOTEDSTRING { lcconf->chroot = $2->v; } EOS
-	;
-
-	/* path */
-path_statement
-	:	PATH PATHTYPE QUOTEDSTRING
-		{
-			if ($2 >= LC_PATHTYPE_MAX) {
-				yyerror("invalid path type %d", $2);
-				return -1;
-			}
-
-			/* free old pathinfo */
-			if (lcconf->pathinfo[$2])
-				racoon_free(lcconf->pathinfo[$2]);
-
-			/* set new pathinfo */
-			lcconf->pathinfo[$2] = racoon_strdup($3->v);
-			STRDUP_FATAL(lcconf->pathinfo[$2]);
-			vfree($3);
-		}
-		EOS
-	;
-
-	/* special */
-special_statement
-	:	COMPLEX_BUNDLE SWITCH { lcconf->complex_bundle = $2; } EOS
-	;
-
-	/* include */
-include_statement
-	:	INCLUDE QUOTEDSTRING EOS
-		{
-			char path[MAXPATHLEN];
-
-			getpathname(path, sizeof(path),
-				LC_PATHTYPE_INCLUDE, $2->v);
-			vfree($2);
-			if (yycf_switch_buffer(path) != 0)
-				return -1;
-		}
-	;
-
-	/* gss_id_enc */
-gssenc_statement
-	:	GSS_ID_ENC GSS_ID_ENCTYPE EOS
-		{
-			if ($2 >= LC_GSSENC_MAX) {
-				yyerror("invalid GSS ID encoding %d", $2);
-				return -1;
-			}
-			lcconf->gss_id_enc = $2;
-		}
-	;
-
-	/* self information */
-identifier_statement
-	:	IDENTIFIER identifier_stmt
-	;
-identifier_stmt
-	:	VENDORID
-		{
-			/*XXX to be deleted */
-		}
-		QUOTEDSTRING EOS
-	|	IDENTIFIERTYPE QUOTEDSTRING
-		{
-			/*XXX to be deleted */
-			$2->l--;	/* nuke '\0' */
-			lcconf->ident[$1] = $2;
-			if (lcconf->ident[$1] == NULL) {
-				yyerror("failed to set my ident: %s",
-					strerror(errno));
-				return -1;
-			}
-		}
-		EOS
-	;
-
-	/* logging */
-logging_statement
-	:	LOGGING log_level EOS
-	;
-log_level
-	:	HEXSTRING
-		{
-			/*
-			 * XXX ignore it because this specification
-			 * will be obsoleted.
-			 */
-			yywarn("see racoon.conf(5), such a log specification will be obsoleted.");
-			vfree($1);
-		}
-	|	LOGLEV
-		{
-			/*
-			 * set the loglevel to the value specified
-			 * in the configuration file plus the number
-			 * of -d options specified on the command line
-			 */
-			loglevel += $1 - oldloglevel;
-			oldloglevel = $1;
-		}
-	;
-
-	/* padding */
-padding_statement
-	:	PADDING BOC padding_stmts EOC
-	;
-padding_stmts
-	:	/* nothing */
-	|	padding_stmts padding_stmt
-	;
-padding_stmt
-	:	PAD_RANDOMIZE SWITCH { lcconf->pad_random = $2; } EOS
-	|	PAD_RANDOMIZELEN SWITCH { lcconf->pad_randomlen = $2; } EOS
-	|	PAD_MAXLEN NUMBER { lcconf->pad_maxsize = $2; } EOS
-	|	PAD_STRICT SWITCH { lcconf->pad_strict = $2; } EOS
-	|	PAD_EXCLTAIL SWITCH { lcconf->pad_excltail = $2; } EOS
-	;
-
-	/* listen */
-listen_statement
-	:	LISTEN BOC listen_stmts EOC
-	;
-listen_stmts
-	:	/* nothing */
-	|	listen_stmts listen_stmt
-	;
-listen_stmt
-	:	X_ISAKMP ike_addrinfo_port
-		{
-			listen_addr ($2, 0);
-		}
-		EOS
-	|	X_ISAKMP_NATT ike_addrinfo_port
-		{
-#ifdef ENABLE_NATT
-			listen_addr ($2, 1);
-#else
-			yyerror("NAT-T support not compiled in.");
-#endif
-		}
-		EOS
-	|	X_ADMIN
-		{
-			yyerror("admin directive is obsoleted.");
-		}
-		PORT EOS
-	|	ADMINSOCK QUOTEDSTRING QUOTEDSTRING QUOTEDSTRING NUMBER 
-		{
-#ifdef ENABLE_ADMINPORT
-			adminsock_conf($2, $3, $4, $5);
-#else
-			yywarn("admin port support not compiled in");
-#endif
-		}
-		EOS
-	|	ADMINSOCK QUOTEDSTRING
-		{
-#ifdef ENABLE_ADMINPORT
-			adminsock_conf($2, NULL, NULL, -1);
-#else
-			yywarn("admin port support not compiled in");
-#endif
-		}
-		EOS
-	|	ADMINSOCK DISABLED
-		{
-#ifdef ENABLE_ADMINPORT
-			adminsock_path = NULL;
-#else
-			yywarn("admin port support not compiled in");
-#endif
-		}
-		EOS
-	|	STRICT_ADDRESS { lcconf->strict_address = TRUE; } EOS
-	;
-ike_addrinfo_port
-	:	ADDRSTRING ike_port
-		{
-			char portbuf[10];
-
-			snprintf(portbuf, sizeof(portbuf), "%ld", $2);
-			$$ = str2saddr($1->v, portbuf);
-			vfree($1);
-			if (!$$)
-				return -1;
-		}
-	;
-ike_port
-	:	/* nothing */	{ $$ = PORT_ISAKMP; }
-	|	PORT		{ $$ = $1; }
-	;
-
-	/* ldap configuration */
-ldapcfg_statement
-	:	LDAPCFG {
-#ifndef ENABLE_HYBRID
-			yyerror("racoon not configured with --enable-hybrid");
-			return -1;
-#endif
-#ifndef HAVE_LIBLDAP
-			yyerror("racoon not configured with --with-libldap");
-			return -1;
-#endif
-		} BOC ldapcfg_stmts EOC
-	;
-ldapcfg_stmts
-	:	/* nothing */
-	|	ldapcfg_stmts ldapcfg_stmt
-	;
-ldapcfg_stmt
-	:	LDAP_PVER NUMBER
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			if (($2<2)||($2>3))
-				yyerror("invalid ldap protocol version (2|3)");
-			xauth_ldap_config.pver = $2;
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_HOST QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			if (xauth_ldap_config.host != NULL)
-				vfree(xauth_ldap_config.host);
-			xauth_ldap_config.host = vdup($2);
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_PORT NUMBER
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			xauth_ldap_config.port = $2;
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_BASE QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			if (xauth_ldap_config.base != NULL)
-				vfree(xauth_ldap_config.base);
-			xauth_ldap_config.base = vdup($2);
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_SUBTREE SWITCH
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			xauth_ldap_config.subtree = $2;
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_BIND_DN QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			if (xauth_ldap_config.bind_dn != NULL)
-				vfree(xauth_ldap_config.bind_dn);
-			xauth_ldap_config.bind_dn = vdup($2);
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_BIND_PW QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			if (xauth_ldap_config.bind_pw != NULL)
-				vfree(xauth_ldap_config.bind_pw);
-			xauth_ldap_config.bind_pw = vdup($2);
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_ATTR_USER QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			if (xauth_ldap_config.attr_user != NULL)
-				vfree(xauth_ldap_config.attr_user);
-			xauth_ldap_config.attr_user = vdup($2);
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_ATTR_ADDR QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			if (xauth_ldap_config.attr_addr != NULL)
-				vfree(xauth_ldap_config.attr_addr);
-			xauth_ldap_config.attr_addr = vdup($2);
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_ATTR_MASK QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			if (xauth_ldap_config.attr_mask != NULL)
-				vfree(xauth_ldap_config.attr_mask);
-			xauth_ldap_config.attr_mask = vdup($2);
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_ATTR_GROUP QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			if (xauth_ldap_config.attr_group != NULL)
-				vfree(xauth_ldap_config.attr_group);
-			xauth_ldap_config.attr_group = vdup($2);
-#endif
-#endif
-		}
-		EOS
-	|	LDAP_ATTR_MEMBER QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			if (xauth_ldap_config.attr_member != NULL)
-				vfree(xauth_ldap_config.attr_member);
-			xauth_ldap_config.attr_member = vdup($2);
-#endif
-#endif
-		}
-		EOS
-	;
-
-	/* modecfg */
-modecfg_statement
-	:	MODECFG BOC modecfg_stmts EOC
-	;
-modecfg_stmts
-	:	/* nothing */
-	|	modecfg_stmts modecfg_stmt
-	;
-modecfg_stmt
-	:	CFG_NET4 ADDRSTRING
-		{
-#ifdef ENABLE_HYBRID
-			if (inet_pton(AF_INET, $2->v,
-			     &isakmp_cfg_config.network4) != 1)
-				yyerror("bad IPv4 network address.");
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_MASK4 ADDRSTRING
-		{
-#ifdef ENABLE_HYBRID
-			if (inet_pton(AF_INET, $2->v,
-			    &isakmp_cfg_config.netmask4) != 1)
-				yyerror("bad IPv4 netmask address.");
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_DNS4 addrdnslist
-		EOS
-	|	CFG_NBNS4 addrwinslist
-		EOS
-	|	CFG_SPLIT_NETWORK CFG_SPLIT_LOCAL splitnetlist
-		{
-#ifdef ENABLE_HYBRID
-			isakmp_cfg_config.splitnet_type = UNITY_LOCAL_LAN;
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_SPLIT_NETWORK CFG_SPLIT_INCLUDE splitnetlist
-		{
-#ifdef ENABLE_HYBRID
-			isakmp_cfg_config.splitnet_type = UNITY_SPLIT_INCLUDE;
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_SPLIT_DNS splitdnslist
-		{
-#ifndef ENABLE_HYBRID
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_DEFAULT_DOMAIN QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-			strncpy(&isakmp_cfg_config.default_domain[0], 
-			    $2->v, MAXPATHLEN);
-			isakmp_cfg_config.default_domain[MAXPATHLEN] = '\0';
-			vfree($2);
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_AUTH_SOURCE CFG_SYSTEM
-		{
-#ifdef ENABLE_HYBRID
-			isakmp_cfg_config.authsource = ISAKMP_CFG_AUTH_SYSTEM;
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_AUTH_SOURCE CFG_RADIUS
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBRADIUS
-			isakmp_cfg_config.authsource = ISAKMP_CFG_AUTH_RADIUS;
-#else /* HAVE_LIBRADIUS */
-			yyerror("racoon not configured with --with-libradius");
-#endif /* HAVE_LIBRADIUS */
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_AUTH_SOURCE CFG_PAM
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBPAM
-			isakmp_cfg_config.authsource = ISAKMP_CFG_AUTH_PAM;
-#else /* HAVE_LIBPAM */
-			yyerror("racoon not configured with --with-libpam");
-#endif /* HAVE_LIBPAM */
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_AUTH_SOURCE CFG_LDAP
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			isakmp_cfg_config.authsource = ISAKMP_CFG_AUTH_LDAP;
-#else /* HAVE_LIBLDAP */
-			yyerror("racoon not configured with --with-libldap");
-#endif /* HAVE_LIBLDAP */
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_AUTH_GROUPS authgrouplist
-		{
-#ifndef ENABLE_HYBRID
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_GROUP_SOURCE CFG_SYSTEM
-		{
-#ifdef ENABLE_HYBRID
-			isakmp_cfg_config.groupsource = ISAKMP_CFG_GROUP_SYSTEM;
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_GROUP_SOURCE CFG_LDAP
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			isakmp_cfg_config.groupsource = ISAKMP_CFG_GROUP_LDAP;
-#else /* HAVE_LIBLDAP */
-			yyerror("racoon not configured with --with-libldap");
-#endif /* HAVE_LIBLDAP */
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_ACCOUNTING CFG_NONE
-		{
-#ifdef ENABLE_HYBRID
-			isakmp_cfg_config.accounting = ISAKMP_CFG_ACCT_NONE;
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_ACCOUNTING CFG_SYSTEM
-		{
-#ifdef ENABLE_HYBRID
-			isakmp_cfg_config.accounting = ISAKMP_CFG_ACCT_SYSTEM;
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	CFG_ACCOUNTING CFG_RADIUS
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBRADIUS
-			isakmp_cfg_config.accounting = ISAKMP_CFG_ACCT_RADIUS;
-#else /* HAVE_LIBRADIUS */
-			yyerror("racoon not configured with --with-libradius");
-#endif /* HAVE_LIBRADIUS */
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_ACCOUNTING CFG_PAM
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBPAM
-			isakmp_cfg_config.accounting = ISAKMP_CFG_ACCT_PAM;
-#else /* HAVE_LIBPAM */
-			yyerror("racoon not configured with --with-libpam");
-#endif /* HAVE_LIBPAM */
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_POOL_SIZE NUMBER
-		{
-#ifdef ENABLE_HYBRID
-			if (isakmp_cfg_resize_pool($2) != 0)
-				yyerror("cannot allocate memory for pool");
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_PFS_GROUP NUMBER
-		{
-#ifdef ENABLE_HYBRID
-			isakmp_cfg_config.pfs_group = $2;
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_SAVE_PASSWD SWITCH
-		{
-#ifdef ENABLE_HYBRID
-			isakmp_cfg_config.save_passwd = $2;
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_AUTH_THROTTLE NUMBER
-		{
-#ifdef ENABLE_HYBRID
-			isakmp_cfg_config.auth_throttle = $2;
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_CONF_SOURCE CFG_LOCAL
-		{
-#ifdef ENABLE_HYBRID
-			isakmp_cfg_config.confsource = ISAKMP_CFG_CONF_LOCAL;
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_CONF_SOURCE CFG_RADIUS
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBRADIUS
-			isakmp_cfg_config.confsource = ISAKMP_CFG_CONF_RADIUS;
-#else /* HAVE_LIBRADIUS */
-			yyerror("racoon not configured with --with-libradius");
-#endif /* HAVE_LIBRADIUS */
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_CONF_SOURCE CFG_LDAP
-		{
-#ifdef ENABLE_HYBRID
-#ifdef HAVE_LIBLDAP
-			isakmp_cfg_config.confsource = ISAKMP_CFG_CONF_LDAP;
-#else /* HAVE_LIBLDAP */
-			yyerror("racoon not configured with --with-libldap");
-#endif /* HAVE_LIBLDAP */
-#else /* ENABLE_HYBRID */
-			yyerror("racoon not configured with --enable-hybrid");
-#endif /* ENABLE_HYBRID */
-		}
-		EOS
-	|	CFG_MOTD QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-			strncpy(&isakmp_cfg_config.motd[0], $2->v, MAXPATHLEN);
-			isakmp_cfg_config.motd[MAXPATHLEN] = '\0';
-			vfree($2);
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	;
-
-addrdnslist
-	:	addrdns
-	|	addrdns COMMA addrdnslist
-	;
-addrdns
-	:	ADDRSTRING
-		{
-#ifdef ENABLE_HYBRID
-			struct isakmp_cfg_config *icc = &isakmp_cfg_config;
-
-			if (icc->dns4_index > MAXNS)
-				yyerror("No more than %d DNS", MAXNS);
-			if (inet_pton(AF_INET, $1->v,
-			    &icc->dns4[icc->dns4_index++]) != 1)
-				yyerror("bad IPv4 DNS address.");
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-	;
-
-addrwinslist
-	:	addrwins
-	|	addrwins COMMA addrwinslist
-	;
-addrwins
-	:	ADDRSTRING
-		{
-#ifdef ENABLE_HYBRID
-			struct isakmp_cfg_config *icc = &isakmp_cfg_config;
-
-			if (icc->nbns4_index > MAXWINS)
-				yyerror("No more than %d WINS", MAXWINS);
-			if (inet_pton(AF_INET, $1->v,
-			    &icc->nbns4[icc->nbns4_index++]) != 1)
-				yyerror("bad IPv4 WINS address.");
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-	;
-
-splitnetlist
-	:	splitnet
-	|	splitnetlist COMMA splitnet
-	;
-splitnet
-	:	ADDRSTRING PREFIX
-		{
-#ifdef ENABLE_HYBRID
-			struct isakmp_cfg_config *icc = &isakmp_cfg_config;
-			struct unity_network network;
-			memset(&network,0,sizeof(network));
-
-			if (inet_pton(AF_INET, $1->v, &network.addr4) != 1)
-				yyerror("bad IPv4 SPLIT address.");
-
-			/* Turn $2 (the prefix) into a subnet mask */
-			network.mask4.s_addr = ($2) ? htonl(~((1 << (32 - $2)) - 1)) : 0;
-
-			/* add the network to our list */ 
-			if (splitnet_list_add(&icc->splitnet_list, &network,&icc->splitnet_count))
-				yyerror("Unable to allocate split network");
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-	;
-
-authgrouplist
-	:	authgroup
-	|	authgroup COMMA authgrouplist
-	;
-authgroup
-	:	QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-			char * groupname = NULL;
-			char ** grouplist = NULL;
-			struct isakmp_cfg_config *icc = &isakmp_cfg_config;
-
-			grouplist = racoon_realloc(icc->grouplist,
-					sizeof(char**)*(icc->groupcount+1));
-			if (grouplist == NULL)
-				yyerror("unable to allocate auth group list");
-
-			groupname = racoon_malloc($1->l+1);
-			if (groupname == NULL)
-				yyerror("unable to allocate auth group name");
-
-			memcpy(groupname,$1->v,$1->l);
-			groupname[$1->l]=0;
-			grouplist[icc->groupcount]=groupname;
-			icc->grouplist = grouplist;
-			icc->groupcount++;
-
-			vfree($1);
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-	;
-
-splitdnslist
-	:	splitdns
-	|	splitdns COMMA splitdnslist
-	;
-splitdns
-	:	QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-			struct isakmp_cfg_config *icc = &isakmp_cfg_config;
-
-			if (!icc->splitdns_len)
-			{
-				icc->splitdns_list = racoon_malloc($1->l);
-				if(icc->splitdns_list == NULL)
-					yyerror("error allocating splitdns list buffer");
-				memcpy(icc->splitdns_list,$1->v,$1->l);
-				icc->splitdns_len = $1->l;
-			}
-			else
-			{
-				int len = icc->splitdns_len + $1->l + 1;
-				icc->splitdns_list = racoon_realloc(icc->splitdns_list,len);
-				if(icc->splitdns_list == NULL)
-					yyerror("error allocating splitdns list buffer");
-				icc->splitdns_list[icc->splitdns_len] = ',';
-				memcpy(icc->splitdns_list + icc->splitdns_len + 1, $1->v, $1->l);
-				icc->splitdns_len = len;
-			}
-			vfree($1);
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-	;
-
-
-	/* timer */
-timer_statement
-	:	RETRY BOC timer_stmts EOC
-	;
-timer_stmts
-	:	/* nothing */
-	|	timer_stmts timer_stmt
-	;
-timer_stmt
-	:	RETRY_COUNTER NUMBER
-		{
-			lcconf->retry_counter = $2;
-		}
-		EOS
-	|	RETRY_INTERVAL NUMBER unittype_time
-		{
-			lcconf->retry_interval = $2 * $3;
-		}
-		EOS
-	|	RETRY_PERSEND NUMBER
-		{
-			lcconf->count_persend = $2;
-		}
-		EOS
-	|	RETRY_PHASE1 NUMBER unittype_time
-		{
-			lcconf->retry_checkph1 = $2 * $3;
-		}
-		EOS
-	|	RETRY_PHASE2 NUMBER unittype_time
-		{
-			lcconf->wait_ph2complete = $2 * $3;
-		}
-		EOS
-	|	NATT_KA NUMBER unittype_time
-		{
-#ifdef ENABLE_NATT
-        		if (libipsec_opt & LIBIPSEC_OPT_NATT)
-				lcconf->natt_ka_interval = $2 * $3;
-			else
-                		yyerror("libipsec lacks NAT-T support");
-#else
-			yyerror("NAT-T support not compiled in.");
-#endif
-		}
-		EOS
-	;
-
-	/* sainfo */
-sainfo_statement
-	:	SAINFO
-		{
-			cur_sainfo = newsainfo();
-			if (cur_sainfo == NULL) {
-				yyerror("failed to allocate sainfo");
-				return -1;
-			}
-		}
-		sainfo_name sainfo_param BOC sainfo_specs
-		{
-			struct sainfo *check;
-
-			/* default */
-			if (cur_sainfo->algs[algclass_ipsec_enc] == 0) {
-				yyerror("no encryption algorithm at %s",
-					sainfo2str(cur_sainfo));
-				return -1;
-			}
-			if (cur_sainfo->algs[algclass_ipsec_auth] == 0) {
-				yyerror("no authentication algorithm at %s",
-					sainfo2str(cur_sainfo));
-				return -1;
-			}
-			if (cur_sainfo->algs[algclass_ipsec_comp] == 0) {
-				yyerror("no compression algorithm at %s",
-					sainfo2str(cur_sainfo));
-				return -1;
-			}
-
-			/* duplicate check */
-			check = getsainfo(cur_sainfo->idsrc,
-					  cur_sainfo->iddst,
-					  cur_sainfo->id_i,
-					  cur_sainfo->remoteid);
-			if (check && (!check->idsrc && !cur_sainfo->idsrc)) {
-				yyerror("duplicated sainfo: %s",
-					sainfo2str(cur_sainfo));
-				return -1;
-			}
-			inssainfo(cur_sainfo);
-		}
-		EOC
-	;
-sainfo_name
-	:	ANONYMOUS
-		{
-			cur_sainfo->idsrc = NULL;
-			cur_sainfo->iddst = NULL;
-		}
-	|	ANONYMOUS sainfo_id
-		{
-			cur_sainfo->idsrc = NULL;
-			cur_sainfo->iddst = $2;
-		}
-	|	sainfo_id ANONYMOUS
-		{
-			cur_sainfo->idsrc = $1;
-			cur_sainfo->iddst = NULL;
-		}
-	|	sainfo_id sainfo_id
-		{
-			cur_sainfo->idsrc = $1;
-			cur_sainfo->iddst = $2;
-		}
-	;
-sainfo_id
-	:	IDENTIFIERTYPE ADDRSTRING prefix port ul_proto
-		{
-			char portbuf[10];
-			struct sockaddr *saddr;
-
-			if (($5 == IPPROTO_ICMP || $5 == IPPROTO_ICMPV6)
-			 && ($4 != IPSEC_PORT_ANY || $4 != IPSEC_PORT_ANY)) {
-				yyerror("port number must be \"any\".");
-				return -1;
-			}
-
-			snprintf(portbuf, sizeof(portbuf), "%lu", $4);
-			saddr = str2saddr($2->v, portbuf);
-			vfree($2);
-			if (saddr == NULL)
-				return -1;
-
-			switch (saddr->sa_family) {
-			case AF_INET:
-				if ($5 == IPPROTO_ICMPV6) {
-					yyerror("upper layer protocol mismatched.\n");
-					racoon_free(saddr);
-					return -1;
-				}
-				$$ = ipsecdoi_sockaddr2id(saddr,
-										  $3 == ~0 ? (sizeof(struct in_addr) << 3): $3,
-										  $5);
-				break;
-#ifdef INET6
-			case AF_INET6:
-				if ($5 == IPPROTO_ICMP) {
-					yyerror("upper layer protocol mismatched.\n");
-					racoon_free(saddr);
-					return -1;
-				}
-				$$ = ipsecdoi_sockaddr2id(saddr, 
-										  $3 == ~0 ? (sizeof(struct in6_addr) << 3): $3,
-										  $5);
-				break;
-#endif
-			default:
-				yyerror("invalid family: %d", saddr->sa_family);
-				$$ = NULL;
-				break;
-			}
-			racoon_free(saddr);
-			if ($$ == NULL)
-				return -1;
-		}
-	|	IDENTIFIERTYPE ADDRSTRING ADDRRANGE prefix port ul_proto
-		{
-			char portbuf[10];
-			struct sockaddr *laddr = NULL, *haddr = NULL;
-			char *cur = NULL;
-
-			if (($6 == IPPROTO_ICMP || $6 == IPPROTO_ICMPV6)
-			 && ($5 != IPSEC_PORT_ANY || $5 != IPSEC_PORT_ANY)) {
-				yyerror("port number must be \"any\".");
-				return -1;
-			}
-
-			snprintf(portbuf, sizeof(portbuf), "%lu", $5);
-			
-			laddr = str2saddr($2->v, portbuf);
-			if (laddr == NULL) {
-			    return -1;
-			}
-			vfree($2);
-			haddr = str2saddr($3->v, portbuf);
-			if (haddr == NULL) {
-			    racoon_free(laddr);
-			    return -1;
-			}
-			vfree($3);
-
-			switch (laddr->sa_family) {
-			case AF_INET:
-				if ($6 == IPPROTO_ICMPV6) {
-				    yyerror("upper layer protocol mismatched.\n");
-				    if (laddr)
-					racoon_free(laddr);
-				    if (haddr)
-					racoon_free(haddr);
-				    return -1;
-				}
-                                $$ = ipsecdoi_sockrange2id(laddr, haddr, 
-							   $6);
-				break;
-#ifdef INET6
-			case AF_INET6:
-				if ($6 == IPPROTO_ICMP) {
-					yyerror("upper layer protocol mismatched.\n");
-					if (laddr)
-					    racoon_free(laddr);
-					if (haddr)
-					    racoon_free(haddr);
-					return -1;
-				}
-				$$ = ipsecdoi_sockrange2id(laddr, haddr, 
-							       $6);
-				break;
-#endif
-			default:
-				yyerror("invalid family: %d", laddr->sa_family);
-				$$ = NULL;
-				break;
-			}
-			if (laddr)
-			    racoon_free(laddr);
-			if (haddr)
-			    racoon_free(haddr);
-			if ($$ == NULL)
-				return -1;
-		}
-	|	IDENTIFIERTYPE QUOTEDSTRING
-		{
-			struct ipsecdoi_id_b *id_b;
-
-			if ($1 == IDTYPE_ASN1DN) {
-				yyerror("id type forbidden: %d", $1);
-				$$ = NULL;
-				return -1;
-			}
-
-			$2->l--;
-
-			$$ = vmalloc(sizeof(*id_b) + $2->l);
-			if ($$ == NULL) {
-				yyerror("failed to allocate identifier");
-				return -1;
-			}
-
-			id_b = (struct ipsecdoi_id_b *)$$->v;
-			id_b->type = idtype2doi($1);
-
-			id_b->proto_id = 0;
-			id_b->port = 0;
-
-			memcpy($$->v + sizeof(*id_b), $2->v, $2->l);
-		}
-	;
-sainfo_param
-	:	/* nothing */
-		{
-			cur_sainfo->id_i = NULL;
-		}
-	|	FROM IDENTIFIERTYPE identifierstring
-		{
-			struct ipsecdoi_id_b *id_b;
-			vchar_t *idv;
-
-			if (set_identifier(&idv, $2, $3) != 0) {
-				yyerror("failed to set identifer.\n");
-				return -1;
-			}
-			cur_sainfo->id_i = vmalloc(sizeof(*id_b) + idv->l);
-			if (cur_sainfo->id_i == NULL) {
-				yyerror("failed to allocate identifier");
-				return -1;
-			}
-
-			id_b = (struct ipsecdoi_id_b *)cur_sainfo->id_i->v;
-			id_b->type = idtype2doi($2);
-
-			id_b->proto_id = 0;
-			id_b->port = 0;
-
-			memcpy(cur_sainfo->id_i->v + sizeof(*id_b),
-			       idv->v, idv->l);
-			vfree(idv);
-		}
-	|	GROUP QUOTEDSTRING
-		{
-#ifdef ENABLE_HYBRID
-			if ((cur_sainfo->group = vdup($2)) == NULL) {
-				yyerror("failed to set sainfo xauth group.\n");
-				return -1;
-			}
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-			return -1;
-#endif
- 		}
-	;
-sainfo_specs
-	:	/* nothing */
-	|	sainfo_specs sainfo_spec
-	;
-sainfo_spec
-	:	PFS_GROUP dh_group_num
-		{
-			cur_sainfo->pfs_group = $2;
-		}
-		EOS
-	|	REMOTEID NUMBER
-		{
-			cur_sainfo->remoteid = $2;
-		}
-		EOS
-	|	LIFETIME LIFETYPE_TIME NUMBER unittype_time
-		{
-			cur_sainfo->lifetime = $3 * $4;
-		}
-		EOS
-	|	LIFETIME LIFETYPE_BYTE NUMBER unittype_byte
-		{
-#if 1
-			yyerror("byte lifetime support is deprecated");
-			return -1;
-#else
-			cur_sainfo->lifebyte = fix_lifebyte($3 * $4);
-			if (cur_sainfo->lifebyte == 0)
-				return -1;
-#endif
-		}
-		EOS
-	|	ALGORITHM_CLASS {
-			cur_algclass = $1;
-		}
-		algorithms EOS
-	|	IDENTIFIER IDENTIFIERTYPE
-		{
-			yyerror("it's deprecated to specify a identifier in phase 2");
-		}
-		EOS
-	|	MY_IDENTIFIER IDENTIFIERTYPE QUOTEDSTRING
-		{
-			yyerror("it's deprecated to specify a identifier in phase 2");
-		}
-		EOS
-	;
-
-algorithms
-	:	algorithm
-		{
-			inssainfoalg(&cur_sainfo->algs[cur_algclass], $1);
-		}
-	|	algorithm
-		{
-			inssainfoalg(&cur_sainfo->algs[cur_algclass], $1);
-		}
-		COMMA algorithms
-	;
-algorithm
-	:	ALGORITHMTYPE keylength
-		{
-			int defklen;
-
-			$$ = newsainfoalg();
-			if ($$ == NULL) {
-				yyerror("failed to get algorithm allocation");
-				return -1;
-			}
-
-			$$->alg = algtype2doi(cur_algclass, $1);
-			if ($$->alg == -1) {
-				yyerror("algorithm mismatched");
-				racoon_free($$);
-				$$ = NULL;
-				return -1;
-			}
-
-			defklen = default_keylen(cur_algclass, $1);
-			if (defklen == 0) {
-				if ($2) {
-					yyerror("keylen not allowed");
-					racoon_free($$);
-					$$ = NULL;
-					return -1;
-				}
-			} else {
-				if ($2 && check_keylen(cur_algclass, $1, $2) < 0) {
-					yyerror("invalid keylen %d", $2);
-					racoon_free($$);
-					$$ = NULL;
-					return -1;
-				}
-			}
-
-			if ($2)
-				$$->encklen = $2;
-			else
-				$$->encklen = defklen;
-
-			/* check if it's supported algorithm by kernel */
-			if (!(cur_algclass == algclass_ipsec_auth && $1 == algtype_non_auth)
-			 && pk_checkalg(cur_algclass, $1, $$->encklen)) {
-				int a = algclass2doi(cur_algclass);
-				int b = algtype2doi(cur_algclass, $1);
-				if (a == IPSECDOI_ATTR_AUTH)
-					a = IPSECDOI_PROTO_IPSEC_AH;
-				yyerror("algorithm %s not supported by the kernel (missing module?)",
-					s_ipsecdoi_trns(a, b));
-				racoon_free($$);
-				$$ = NULL;
-				return -1;
-			}
-		}
-	;
-prefix
-	:	/* nothing */ { $$ = ~0; }
-	|	PREFIX { $$ = $1; }
-	;
-port
-	:	/* nothing */ { $$ = IPSEC_PORT_ANY; }
-	|	PORT { $$ = $1; }
-	|	PORTANY { $$ = IPSEC_PORT_ANY; }
-	;
-ul_proto
-	:	NUMBER { $$ = $1; }
-	|	UL_PROTO { $$ = $1; }
-	|	ANY { $$ = IPSEC_ULPROTO_ANY; }
-	;
-keylength
-	:	/* nothing */ { $$ = 0; }
-	|	NUMBER { $$ = $1; }
-	;
-
-	/* remote */
-remote_statement
-	:	REMOTE remote_index INHERIT remote_index
-		{
-			struct remoteconf *new;
-			struct proposalspec *prspec;
-
-			new = copyrmconf($4);
-			if (new == NULL) {
-				yyerror("failed to get remoteconf for %s.", saddr2str ($4));
-				return -1;
-			}
-
-			new->remote = $2;
-			new->inherited_from = getrmconf_strict($4, 1);
-			new->proposal = NULL;
-			new->prhead = NULL;
-			cur_rmconf = new;
-
-			prspec = newprspec();
-			if (prspec == NULL || !cur_rmconf->inherited_from 
-				|| !cur_rmconf->inherited_from->proposal)
-				return -1;
-			prspec->lifetime = cur_rmconf->inherited_from->proposal->lifetime;
-			prspec->lifebyte = cur_rmconf->inherited_from->proposal->lifebyte;
-			insprspec(prspec, &cur_rmconf->prhead);
-		}
-		remote_specs_block
-	|	REMOTE remote_index
-		{
-			struct remoteconf *new;
-			struct proposalspec *prspec;
-
-			new = newrmconf();
-			if (new == NULL) {
-				yyerror("failed to get new remoteconf.");
-				return -1;
-			}
-
-			new->remote = $2;
-			cur_rmconf = new;
-
-			prspec = newprspec();
-			if (prspec == NULL)
-				return -1;
-			prspec->lifetime = oakley_get_defaultlifetime();
-			insprspec(prspec, &cur_rmconf->prhead);
-		}
-		remote_specs_block
-	;
-
-remote_specs_block
-	:	BOC remote_specs EOC
-		{
-			/* check a exchange mode */
-			if (cur_rmconf->etypes == NULL) {
-				yyerror("no exchange mode specified.\n");
-				return -1;
-			}
-
-			if (cur_rmconf->idvtype == IDTYPE_UNDEFINED)
-				cur_rmconf->idvtype = IDTYPE_ADDRESS;
-
-
-			if (cur_rmconf->idvtype == IDTYPE_ASN1DN) {
-				if (cur_rmconf->mycertfile) {
-					if (cur_rmconf->idv)
-						yywarn("Both CERT and ASN1 ID "
-						       "are set. Hope this is OK.\n");
-					/* TODO: Preparse the DN here */
-				} else if (cur_rmconf->idv) {
-					/* OK, using asn1dn without X.509. */
-				} else {
-					yyerror("ASN1 ID not specified "
-						"and no CERT defined!\n");
-					return -1;
-				}
-			}
-			
-			if (cur_rmconf->prhead->spspec == NULL
-				&& cur_rmconf->inherited_from
-				&& cur_rmconf->inherited_from->prhead) {
-				cur_rmconf->prhead->spspec = cur_rmconf->inherited_from->prhead->spspec;
-			}
-			if (set_isakmp_proposal(cur_rmconf, cur_rmconf->prhead) != 0)
-				return -1;
-
-			/* DH group settting if aggressive mode is there. */
-			if (check_etypeok(cur_rmconf, ISAKMP_ETYPE_AGG) != NULL) {
-				struct isakmpsa *p;
-				int b = 0;
-
-				/* DH group */
-				for (p = cur_rmconf->proposal; p; p = p->next) {
-					if (b == 0 || (b && b == p->dh_group)) {
-						b = p->dh_group;
-						continue;
-					}
-					yyerror("DH group must be equal "
-						"in all proposals "
-						"when aggressive mode is "
-						"used.\n");
-					return -1;
-				}
-				cur_rmconf->dh_group = b;
-
-				if (cur_rmconf->dh_group == 0) {
-					yyerror("DH group must be set in the proposal.\n");
-					return -1;
-				}
-
-				/* DH group settting if PFS is required. */
-				if (oakley_setdhgroup(cur_rmconf->dh_group,
-						&cur_rmconf->dhgrp) < 0) {
-					yyerror("failed to set DH value.\n");
-					return -1;
-				}
-			}
-
-			insrmconf(cur_rmconf);
-		}
-	;
-remote_index
-	:	ANONYMOUS ike_port
-		{
-			$$ = newsaddr(sizeof(struct sockaddr));
-			$$->sa_family = AF_UNSPEC;
-			((struct sockaddr_in *)$$)->sin_port = htons($2);
-		}
-	|	ike_addrinfo_port
-		{
-			$$ = $1;
-			if ($$ == NULL) {
-				yyerror("failed to allocate sockaddr");
-				return -1;
-			}
-		}
-	;
-remote_specs
-	:	/* nothing */
-	|	remote_specs remote_spec
-	;
-remote_spec
-	:	EXCHANGE_MODE
-		{
-			cur_rmconf->etypes = NULL;
-		}
-		exchange_types EOS
-	|	DOI DOITYPE { cur_rmconf->doitype = $2; } EOS
-	|	SITUATION SITUATIONTYPE { cur_rmconf->sittype = $2; } EOS
-	|	CERTIFICATE_TYPE cert_spec
-	|	PEERS_CERTFILE QUOTEDSTRING
-		{
-			yywarn("This directive without certtype will be removed!\n");
-			yywarn("Please use 'peers_certfile x509 \"%s\";' instead\n", $2->v);
-			cur_rmconf->getcert_method = ISAKMP_GETCERT_LOCALFILE;
-
-			if (cur_rmconf->peerscertfile != NULL)
-				racoon_free(cur_rmconf->peerscertfile);
-			cur_rmconf->peerscertfile = racoon_strdup($2->v);
-			STRDUP_FATAL(cur_rmconf->peerscertfile);
-			vfree($2);
-		}
-		EOS
-	|	CA_TYPE CERT_X509 QUOTEDSTRING
-		{
-			cur_rmconf->cacerttype = $2;
-			cur_rmconf->getcacert_method = ISAKMP_GETCERT_LOCALFILE;
-			if (cur_rmconf->cacertfile != NULL)
-				racoon_free(cur_rmconf->cacertfile);
-			cur_rmconf->cacertfile = racoon_strdup($3->v);
-			STRDUP_FATAL(cur_rmconf->cacertfile);
-			vfree($3);
-		}
-		EOS
-	|	PEERS_CERTFILE CERT_X509 QUOTEDSTRING
-		{
-			cur_rmconf->getcert_method = ISAKMP_GETCERT_LOCALFILE;
-			if (cur_rmconf->peerscertfile != NULL)
-				racoon_free(cur_rmconf->peerscertfile);
-			cur_rmconf->peerscertfile = racoon_strdup($3->v);
-			STRDUP_FATAL(cur_rmconf->peerscertfile);
-			vfree($3);
-		}
-		EOS
-	|	PEERS_CERTFILE CERT_PLAINRSA QUOTEDSTRING
-		{
-			char path[MAXPATHLEN];
-			int ret = 0;
-
-			getpathname(path, sizeof(path),
-				LC_PATHTYPE_CERT, $3->v);
-			vfree($3);
-
-			if (cur_rmconf->getcert_method == ISAKMP_GETCERT_DNS) {
-				yyerror("Different peers_certfile method "
-					"already defined: %d!\n",
-					cur_rmconf->getcert_method);
-				return -1;
-			}
-			cur_rmconf->getcert_method = ISAKMP_GETCERT_LOCALFILE;
-			if (rsa_parse_file(cur_rmconf->rsa_public, path, RSA_TYPE_PUBLIC)) {
-				yyerror("Couldn't parse keyfile.\n", path);
-				return -1;
-			}
-			plog(LLV_DEBUG, LOCATION, NULL, "Public PlainRSA keyfile parsed: %s\n", path);
-		}
-		EOS
-	|	PEERS_CERTFILE DNSSEC
-		{
-			if (cur_rmconf->getcert_method) {
-				yyerror("Different peers_certfile method already defined!\n");
-				return -1;
-			}
-			cur_rmconf->getcert_method = ISAKMP_GETCERT_DNS;
-			cur_rmconf->peerscertfile = NULL;
-		}
-		EOS
-	|	VERIFY_CERT SWITCH { cur_rmconf->verify_cert = $2; } EOS
-	|	SEND_CERT SWITCH { cur_rmconf->send_cert = $2; } EOS
-	|	SEND_CR SWITCH { cur_rmconf->send_cr = $2; } EOS
-	|	MY_IDENTIFIER IDENTIFIERTYPE identifierstring
-		{
-			if (set_identifier(&cur_rmconf->idv, $2, $3) != 0) {
-				yyerror("failed to set identifer.\n");
-				return -1;
-			}
-			cur_rmconf->idvtype = $2;
-		}
-		EOS
-	|	MY_IDENTIFIER IDENTIFIERTYPE IDENTIFIERQUAL identifierstring
-		{
-			if (set_identifier_qual(&cur_rmconf->idv, $2, $4, $3) != 0) {
-				yyerror("failed to set identifer.\n");
-				return -1;
-			}
-			cur_rmconf->idvtype = $2;
-		}
-		EOS
-	|	XAUTH_LOGIN identifierstring
-		{
-#ifdef ENABLE_HYBRID
-			/* formerly identifier type login */
-			if (xauth_rmconf_used(&cur_rmconf->xauth) == -1) {
-				yyerror("failed to allocate xauth state\n");
-				return -1;
-			}
-			if ((cur_rmconf->xauth->login = vdup($2)) == NULL) {
-				yyerror("failed to set identifer.\n");
-				return -1;
-			}
-#else
-			yyerror("racoon not configured with --enable-hybrid");
-#endif
-		}
-		EOS
-	|	PEERS_IDENTIFIER IDENTIFIERTYPE identifierstring
-		{
-			struct idspec  *id;
-			id = newidspec();
-			if (id == NULL) {
-				yyerror("failed to allocate idspec");
-				return -1;
-			}
-			if (set_identifier(&id->id, $2, $3) != 0) {
-				yyerror("failed to set identifer.\n");
-				racoon_free(id);
-				return -1;
-			}
-			id->idtype = $2;
-			genlist_append (cur_rmconf->idvl_p, id);
-		}
-		EOS
-	|	PEERS_IDENTIFIER IDENTIFIERTYPE IDENTIFIERQUAL identifierstring
-		{
-			struct idspec  *id;
-			id = newidspec();
-			if (id == NULL) {
-				yyerror("failed to allocate idspec");
-				return -1;
-			}
-			if (set_identifier_qual(&id->id, $2, $4, $3) != 0) {
-				yyerror("failed to set identifer.\n");
-				racoon_free(id);
-				return -1;
-			}
-			id->idtype = $2;
-			genlist_append (cur_rmconf->idvl_p, id);
-		}
-		EOS
-	|	VERIFY_IDENTIFIER SWITCH { cur_rmconf->verify_identifier = $2; } EOS
-	|	NONCE_SIZE NUMBER { cur_rmconf->nonce_size = $2; } EOS
-	|	DH_GROUP
-		{
-			yyerror("dh_group cannot be defined here.");
-			return -1;
-		}
-		dh_group_num EOS
-	|	PASSIVE SWITCH { cur_rmconf->passive = $2; } EOS
-	|	IKE_FRAG SWITCH { cur_rmconf->ike_frag = $2; } EOS
-	|	IKE_FRAG REMOTE_FORCE_LEVEL { cur_rmconf->ike_frag = ISAKMP_FRAG_FORCE; } EOS
-	|	ESP_FRAG NUMBER { 
-#ifdef SADB_X_EXT_NAT_T_FRAG
-        		if (libipsec_opt & LIBIPSEC_OPT_FRAG)
-				cur_rmconf->esp_frag = $2; 
-			else
-                		yywarn("libipsec lacks IKE frag support");
-#else
-			yywarn("Your kernel does not support esp_frag");
-#endif
-		} EOS
-	|	SCRIPT QUOTEDSTRING PHASE1_UP { 
-			if (cur_rmconf->script[SCRIPT_PHASE1_UP] != NULL)
-				vfree(cur_rmconf->script[SCRIPT_PHASE1_UP]);
-
-			cur_rmconf->script[SCRIPT_PHASE1_UP] = 
-			    script_path_add(vdup($2));
-		} EOS
-	|	SCRIPT QUOTEDSTRING PHASE1_DOWN { 
-			if (cur_rmconf->script[SCRIPT_PHASE1_DOWN] != NULL)
-				vfree(cur_rmconf->script[SCRIPT_PHASE1_DOWN]);
-
-			cur_rmconf->script[SCRIPT_PHASE1_DOWN] = 
-			    script_path_add(vdup($2));
-		} EOS
-	|	MODE_CFG SWITCH { cur_rmconf->mode_cfg = $2; } EOS
-	|	WEAK_PHASE1_CHECK SWITCH {
-			cur_rmconf->weak_phase1_check = $2;
-		} EOS
-	|	GENERATE_POLICY SWITCH { cur_rmconf->gen_policy = $2; } EOS
-	|	GENERATE_POLICY GENERATE_LEVEL { cur_rmconf->gen_policy = $2; } EOS
-	|	SUPPORT_PROXY SWITCH { cur_rmconf->support_proxy = $2; } EOS
-	|	INITIAL_CONTACT SWITCH { cur_rmconf->ini_contact = $2; } EOS
-	|	NAT_TRAVERSAL SWITCH
-		{
-#ifdef ENABLE_NATT
-        		if (libipsec_opt & LIBIPSEC_OPT_NATT)
-				cur_rmconf->nat_traversal = $2;
-			else
-                		yyerror("libipsec lacks NAT-T support");
-#else
-			yyerror("NAT-T support not compiled in.");
-#endif
-		} EOS
-	|	NAT_TRAVERSAL REMOTE_FORCE_LEVEL
-		{
-#ifdef ENABLE_NATT
-			if (libipsec_opt & LIBIPSEC_OPT_NATT)
-				cur_rmconf->nat_traversal = NATT_FORCE;
-			else
-                		yyerror("libipsec lacks NAT-T support");
-#else
-			yyerror("NAT-T support not compiled in.");
-#endif
-		} EOS
-	|	DPD SWITCH
-		{
-#ifdef ENABLE_DPD
-			cur_rmconf->dpd = $2;
-#else
-			yyerror("DPD support not compiled in.");
-#endif
-		} EOS
-	|	DPD_DELAY NUMBER
-		{
-#ifdef ENABLE_DPD
-			cur_rmconf->dpd_interval = $2;
-#else
-			yyerror("DPD support not compiled in.");
-#endif
-		}
-		EOS
-	|	DPD_RETRY NUMBER
-		{
-#ifdef ENABLE_DPD
-			cur_rmconf->dpd_retry = $2;
-#else
-			yyerror("DPD support not compiled in.");
-#endif
-		}
-		EOS
-	|	DPD_MAXFAIL NUMBER
-		{
-#ifdef ENABLE_DPD
-			cur_rmconf->dpd_maxfails = $2;
-#else
-			yyerror("DPD support not compiled in.");
-#endif
-		}
-		EOS
-	|	PH1ID NUMBER
-		{
-			cur_rmconf->ph1id = $2;
-		}
-		EOS
-	|	LIFETIME LIFETYPE_TIME NUMBER unittype_time
-		{
-			cur_rmconf->prhead->lifetime = $3 * $4;
-		}
-		EOS
-	|	PROPOSAL_CHECK PROPOSAL_CHECK_LEVEL { cur_rmconf->pcheck_level = $2; } EOS
-	|	LIFETIME LIFETYPE_BYTE NUMBER unittype_byte
-		{
-#if 1
-			yyerror("byte lifetime support is deprecated in Phase1");
-			return -1;
-#else
-			yywarn("the lifetime of bytes in phase 1 "
-				"will be ignored at the moment.");
-			cur_rmconf->prhead->lifebyte = fix_lifebyte($3 * $4);
-			if (cur_rmconf->prhead->lifebyte == 0)
-				return -1;
-#endif
-		}
-		EOS
-	|	PROPOSAL
-		{
-			struct secprotospec *spspec;
-
-			spspec = newspspec();
-			if (spspec == NULL)
-				return -1;
-			insspspec(spspec, &cur_rmconf->prhead);
-		}
-		BOC isakmpproposal_specs EOC
-	;
-exchange_types
-	:	/* nothing */
-	|	exchange_types EXCHANGETYPE
-		{
-			struct etypes *new;
-			new = racoon_malloc(sizeof(struct etypes));
-			if (new == NULL) {
-				yyerror("failed to allocate etypes");
-				return -1;
-			}
-			new->type = $2;
-			new->next = NULL;
-			if (cur_rmconf->etypes == NULL)
-				cur_rmconf->etypes = new;
-			else {
-				struct etypes *p;
-				for (p = cur_rmconf->etypes;
-				     p->next != NULL;
-				     p = p->next)
-					;
-				p->next = new;
-			}
-		}
-	;
-cert_spec
-	:	CERT_X509 QUOTEDSTRING QUOTEDSTRING
-		{
-			cur_rmconf->certtype = $1;
-			if (cur_rmconf->mycertfile != NULL)
-				racoon_free(cur_rmconf->mycertfile);
-			cur_rmconf->mycertfile = racoon_strdup($2->v);
-			STRDUP_FATAL(cur_rmconf->mycertfile);
-			vfree($2);
-			if (cur_rmconf->myprivfile != NULL)
-				racoon_free(cur_rmconf->myprivfile);
-			cur_rmconf->myprivfile = racoon_strdup($3->v);
-			STRDUP_FATAL(cur_rmconf->myprivfile);
-			vfree($3);
-		}
-		EOS
-	|	CERT_PLAINRSA QUOTEDSTRING
-		{
-			char path[MAXPATHLEN];
-			int ret = 0;
-
-			getpathname(path, sizeof(path),
-				LC_PATHTYPE_CERT, $2->v);
-			vfree($2);
-
-			cur_rmconf->certtype = $1;
-			cur_rmconf->send_cr = FALSE;
-			cur_rmconf->send_cert = FALSE;
-			cur_rmconf->verify_cert = FALSE;
-			if (rsa_parse_file(cur_rmconf->rsa_private, path, RSA_TYPE_PRIVATE)) {
-				yyerror("Couldn't parse keyfile.\n", path);
-				return -1;
-			}
-			plog(LLV_DEBUG, LOCATION, NULL, "Private PlainRSA keyfile parsed: %s\n", path);
-		}
-		EOS
-	;
-dh_group_num
-	:	ALGORITHMTYPE
-		{
-			$$ = algtype2doi(algclass_isakmp_dh, $1);
-			if ($$ == -1) {
-				yyerror("must be DH group");
-				return -1;
-			}
-		}
-	|	NUMBER
-		{
-			if (ARRAYLEN(num2dhgroup) > $1 && num2dhgroup[$1] != 0) {
-				$$ = num2dhgroup[$1];
-			} else {
-				yyerror("must be DH group");
-				$$ = 0;
-				return -1;
-			}
-		}
-	;
-identifierstring
-	:	/* nothing */ { $$ = NULL; }
-	|	ADDRSTRING { $$ = $1; }
-	|	QUOTEDSTRING { $$ = $1; }
-	;
-isakmpproposal_specs
-	:	/* nothing */
-	|	isakmpproposal_specs isakmpproposal_spec
-	;
-isakmpproposal_spec
-	:	STRENGTH
-		{
-			yyerror("strength directive is obsoleted.");
-		} STRENGTHTYPE EOS
-	|	LIFETIME LIFETYPE_TIME NUMBER unittype_time
-		{
-			cur_rmconf->prhead->spspec->lifetime = $3 * $4;
-		}
-		EOS
-	|	LIFETIME LIFETYPE_BYTE NUMBER unittype_byte
-		{
-#if 1
-			yyerror("byte lifetime support is deprecated");
-			return -1;
-#else
-			cur_rmconf->prhead->spspec->lifebyte = fix_lifebyte($3 * $4);
-			if (cur_rmconf->prhead->spspec->lifebyte == 0)
-				return -1;
-#endif
-		}
-		EOS
-	|	DH_GROUP dh_group_num
-		{
-			cur_rmconf->prhead->spspec->algclass[algclass_isakmp_dh] = $2;
-		}
-		EOS
-	|	GSS_ID QUOTEDSTRING
-		{
-			if (cur_rmconf->prhead->spspec->vendorid != VENDORID_GSSAPI) {
-				yyerror("wrong Vendor ID for gssapi_id");
-				return -1;
-			}
-			if (cur_rmconf->prhead->spspec->gssid != NULL)
-				racoon_free(cur_rmconf->prhead->spspec->gssid);
-			cur_rmconf->prhead->spspec->gssid = 
-			    racoon_strdup($2->v);
-			STRDUP_FATAL(cur_rmconf->prhead->spspec->gssid);
-		}
-		EOS
-	|	ALGORITHM_CLASS ALGORITHMTYPE keylength
-		{
-			int doi;
-			int defklen;
-
-			doi = algtype2doi($1, $2);
-			if (doi == -1) {
-				yyerror("algorithm mismatched 1");
-				return -1;
-			}
-
-			switch ($1) {
-			case algclass_isakmp_enc:
-			/* reject suppressed algorithms */
-#ifndef HAVE_OPENSSL_RC5_H
-				if ($2 == algtype_rc5) {
-					yyerror("algorithm %s not supported",
-					    s_attr_isakmp_enc(doi));
-					return -1;
-				}
-#endif
-#ifndef HAVE_OPENSSL_IDEA_H
-				if ($2 == algtype_idea) {
-					yyerror("algorithm %s not supported",
-					    s_attr_isakmp_enc(doi));
-					return -1;
-				}
-#endif
-
-				cur_rmconf->prhead->spspec->algclass[algclass_isakmp_enc] = doi;
-				defklen = default_keylen($1, $2);
-				if (defklen == 0) {
-					if ($3) {
-						yyerror("keylen not allowed");
-						return -1;
-					}
-				} else {
-					if ($3 && check_keylen($1, $2, $3) < 0) {
-						yyerror("invalid keylen %d", $3);
-						return -1;
-					}
-				}
-				if ($3)
-					cur_rmconf->prhead->spspec->encklen = $3;
-				else
-					cur_rmconf->prhead->spspec->encklen = defklen;
-				break;
-			case algclass_isakmp_hash:
-				cur_rmconf->prhead->spspec->algclass[algclass_isakmp_hash] = doi;
-				break;
-			case algclass_isakmp_ameth:
-				cur_rmconf->prhead->spspec->algclass[algclass_isakmp_ameth] = doi;
-				/*
-				 * We may have to set the Vendor ID for the
-				 * authentication method we're using.
-				 */
-				switch ($2) {
-				case algtype_gssapikrb:
-					if (cur_rmconf->prhead->spspec->vendorid !=
-					    VENDORID_UNKNOWN) {
-						yyerror("Vendor ID mismatch "
-						    "for auth method");
-						return -1;
-					}
-					/*
-					 * For interoperability with Win2k,
-					 * we set the Vendor ID to "GSSAPI".
-					 */
-					cur_rmconf->prhead->spspec->vendorid =
-					    VENDORID_GSSAPI;
-					break;
-				case algtype_rsasig:
-					if (cur_rmconf->certtype == ISAKMP_CERT_PLAINRSA) {
-						if (rsa_list_count(cur_rmconf->rsa_private) == 0) {
-							yyerror ("Private PlainRSA key not set. "
-								"Use directive 'certificate_type plainrsa ...'\n");
-							return -1;
-						}
-						if (rsa_list_count(cur_rmconf->rsa_public) == 0) {
-							yyerror ("Public PlainRSA keys not set. "
-								"Use directive 'peers_certfile plainrsa ...'\n");
-							return -1;
-						}
-					}
-					break;
-				default:
-					break;
-				}
-				break;
-			default:
-				yyerror("algorithm mismatched 2");
-				return -1;
-			}
-		}
-		EOS
-	;
-
-unittype_time
-	:	UNITTYPE_SEC	{ $$ = 1; }
-	|	UNITTYPE_MIN	{ $$ = 60; }
-	|	UNITTYPE_HOUR	{ $$ = (60 * 60); }
-	;
-unittype_byte
-	:	UNITTYPE_BYTE	{ $$ = 1; }
-	|	UNITTYPE_KBYTES	{ $$ = 1024; }
-	|	UNITTYPE_MBYTES	{ $$ = (1024 * 1024); }
-	|	UNITTYPE_TBYTES	{ $$ = (1024 * 1024 * 1024); }
-	;
-%%
-
-static struct proposalspec *
-newprspec()
-{
-	struct proposalspec *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		yyerror("failed to allocate proposal");
-
-	return new;
-}
-
-/*
- * insert into head of list.
- */
-static void
-insprspec(prspec, head)
-	struct proposalspec *prspec;
-	struct proposalspec **head;
-{
-	if (*head != NULL)
-		(*head)->prev = prspec;
-	prspec->next = *head;
-	*head = prspec;
-}
-
-static struct secprotospec *
-newspspec()
-{
-	struct secprotospec *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL) {
-		yyerror("failed to allocate spproto");
-		return NULL;
-	}
-
-	new->encklen = 0;	/*XXX*/
-
-	/*
-	 * Default to "uknown" vendor -- we will override this
-	 * as necessary.  When we send a Vendor ID payload, an
-	 * "unknown" will be translated to a KAME/racoon ID.
-	 */
-	new->vendorid = VENDORID_UNKNOWN;
-
-	return new;
-}
-
-/*
- * insert into head of list.
- */
-static void
-insspspec(spspec, head)
-	struct secprotospec *spspec;
-	struct proposalspec **head;
-{
-	spspec->back = *head;
-
-	if ((*head)->spspec != NULL)
-		(*head)->spspec->prev = spspec;
-	spspec->next = (*head)->spspec;
-	(*head)->spspec = spspec;
-}
-
-/* set final acceptable proposal */
-static int
-set_isakmp_proposal(rmconf, prspec)
-	struct remoteconf *rmconf;
-	struct proposalspec *prspec;
-{
-	struct proposalspec *p;
-	struct secprotospec *s;
-	int prop_no = 1; 
-	int trns_no = 1;
-	int32_t types[MAXALGCLASS];
-
-	p = prspec;
-	if (p->next != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"multiple proposal definition.\n");
-		return -1;
-	}
-
-	/* mandatory check */
-	if (p->spspec == NULL) {
-		yyerror("no remote specification found: %s.\n",
-			saddr2str(rmconf->remote));
-		return -1;
-	}
-	for (s = p->spspec; s != NULL; s = s->next) {
-		/* XXX need more to check */
-		if (s->algclass[algclass_isakmp_enc] == 0) {
-			yyerror("encryption algorithm required.");
-			return -1;
-		}
-		if (s->algclass[algclass_isakmp_hash] == 0) {
-			yyerror("hash algorithm required.");
-			return -1;
-		}
-		if (s->algclass[algclass_isakmp_dh] == 0) {
-			yyerror("DH group required.");
-			return -1;
-		}
-		if (s->algclass[algclass_isakmp_ameth] == 0) {
-			yyerror("authentication method required.");
-			return -1;
-		}
-	}
-
-	/* skip to last part */
-	for (s = p->spspec; s->next != NULL; s = s->next)
-		;
-
-	while (s != NULL) {
-		plog(LLV_DEBUG2, LOCATION, NULL,
-			"lifetime = %ld\n", (long)
-			(s->lifetime ? s->lifetime : p->lifetime));
-		plog(LLV_DEBUG2, LOCATION, NULL,
-			"lifebyte = %d\n",
-			s->lifebyte ? s->lifebyte : p->lifebyte);
-		plog(LLV_DEBUG2, LOCATION, NULL,
-			"encklen=%d\n", s->encklen);
-
-		memset(types, 0, ARRAYLEN(types));
-		types[algclass_isakmp_enc] = s->algclass[algclass_isakmp_enc];
-		types[algclass_isakmp_hash] = s->algclass[algclass_isakmp_hash];
-		types[algclass_isakmp_dh] = s->algclass[algclass_isakmp_dh];
-		types[algclass_isakmp_ameth] =
-		    s->algclass[algclass_isakmp_ameth];
-
-		/* expanding spspec */
-		clean_tmpalgtype();
-		trns_no = expand_isakmpspec(prop_no, trns_no, types,
-				algclass_isakmp_enc, algclass_isakmp_ameth + 1,
-				s->lifetime ? s->lifetime : p->lifetime,
-				s->lifebyte ? s->lifebyte : p->lifebyte,
-				s->encklen, s->vendorid, s->gssid,
-				rmconf);
-		if (trns_no == -1) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to expand isakmp proposal.\n");
-			return -1;
-		}
-
-		s = s->prev;
-	}
-
-	if (rmconf->proposal == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no proposal found.\n");
-		return -1;
-	}
-
-	return 0;
-}
-
-static void
-clean_tmpalgtype()
-{
-	int i;
-	for (i = 0; i < MAXALGCLASS; i++)
-		tmpalgtype[i] = 0;	/* means algorithm undefined. */
-}
-
-static int
-expand_isakmpspec(prop_no, trns_no, types,
-		class, last, lifetime, lifebyte, encklen, vendorid, gssid,
-		rmconf)
-	int prop_no, trns_no;
-	int *types, class, last;
-	time_t lifetime;
-	int lifebyte;
-	int encklen;
-	int vendorid;
-	char *gssid;
-	struct remoteconf *rmconf;
-{
-	struct isakmpsa *new;
-
-	/* debugging */
-    {
-	int j;
-	char tb[10];
-	plog(LLV_DEBUG2, LOCATION, NULL,
-		"p:%d t:%d\n", prop_no, trns_no);
-	for (j = class; j < MAXALGCLASS; j++) {
-		snprintf(tb, sizeof(tb), "%d", types[j]);
-		plog(LLV_DEBUG2, LOCATION, NULL,
-			"%s%s%s%s\n",
-			s_algtype(j, types[j]),
-			types[j] ? "(" : "",
-			tb[0] == '0' ? "" : tb,
-			types[j] ? ")" : "");
-	}
-	plog(LLV_DEBUG2, LOCATION, NULL, "\n");
-    }
-
-#define TMPALGTYPE2STR(n) \
-	s_algtype(algclass_isakmp_##n, types[algclass_isakmp_##n])
-		/* check mandatory values */
-		if (types[algclass_isakmp_enc] == 0
-		 || types[algclass_isakmp_ameth] == 0
-		 || types[algclass_isakmp_hash] == 0
-		 || types[algclass_isakmp_dh] == 0) {
-			yyerror("few definition of algorithm "
-				"enc=%s ameth=%s hash=%s dhgroup=%s.\n",
-				TMPALGTYPE2STR(enc),
-				TMPALGTYPE2STR(ameth),
-				TMPALGTYPE2STR(hash),
-				TMPALGTYPE2STR(dh));
-			return -1;
-		}
-#undef TMPALGTYPE2STR
-
-	/* set new sa */
-	new = newisakmpsa();
-	if (new == NULL) {
-		yyerror("failed to allocate isakmp sa");
-		return -1;
-	}
-	new->prop_no = prop_no;
-	new->trns_no = trns_no++;
-	new->lifetime = lifetime;
-	new->lifebyte = lifebyte;
-	new->enctype = types[algclass_isakmp_enc];
-	new->encklen = encklen;
-	new->authmethod = types[algclass_isakmp_ameth];
-	new->hashtype = types[algclass_isakmp_hash];
-	new->dh_group = types[algclass_isakmp_dh];
-	new->vendorid = vendorid;
-#ifdef HAVE_GSSAPI
-	if (new->authmethod == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB) {
-		if (gssid != NULL) {
-			if ((new->gssid = vmalloc(strlen(gssid))) == NULL) {
-				racoon_free(new);
-				yyerror("failed to allocate gssid");
-				return -1;
-			}
-			memcpy(new->gssid->v, gssid, new->gssid->l);
-			racoon_free(gssid);
-#ifdef ENABLE_HYBRID
-		} else if (rmconf->xauth == NULL) {
-#else
-		} else {
-#endif
-			/*
-			 * Allocate the default ID so that it gets put
-			 * into a GSS ID attribute during the Phase 1
-			 * exchange.
-			 */
-			new->gssid = gssapi_get_default_gss_id();
-		}
-	}
-#endif
-	insisakmpsa(new, rmconf);
-
-	return trns_no;
-}
-
-static int
-listen_addr (struct sockaddr *addr, int udp_encap)
-{
-	struct myaddrs *p;
-
-	p = newmyaddr();
-	if (p == NULL) {
-		yyerror("failed to allocate myaddrs");
-		return -1;
-	}
-	p->addr = addr;
-	if (p->addr == NULL) {
-		yyerror("failed to copy sockaddr ");
-		delmyaddr(p);
-		return -1;
-	}
-	p->udp_encap = udp_encap;
-
-	insmyaddr(p, &lcconf->myaddrs);
-
-	lcconf->autograbaddr = 0;
-	return 0;
-}
-
-#if 0
-/*
- * fix lifebyte.
- * Must be more than 1024B because its unit is kilobytes.
- * That is defined RFC2407.
- */
-static int
-fix_lifebyte(t)
-	unsigned long t;
-{
-	if (t < 1024) {
-		yyerror("byte size should be more than 1024B.");
-		return 0;
-	}
-
-	return(t / 1024);
-}
-#endif
-
-int
-cfparse()
-{
-	int error;
-
-	yycf_init_buffer();
-
-	if (yycf_switch_buffer(lcconf->racoon_conf) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "could not read configuration file \"%s\"\n", 
-		    lcconf->racoon_conf);
-		return -1;
-	}
-
-	error = yyparse();
-	if (error != 0) {
-		if (yyerrorcount) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"fatal parse failure (%d errors)\n",
-				yyerrorcount);
-		} else {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"fatal parse failure.\n");
-		}
-		return -1;
-	}
-
-	if (error == 0 && yyerrorcount) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"parse error is nothing, but yyerrorcount is %d.\n",
-				yyerrorcount);
-		exit(1);
-	}
-
-	yycf_clean_buffer();
-
-	plog(LLV_DEBUG2, LOCATION, NULL, "parse successed.\n");
-
-	return 0;
-}
-
-int
-cfreparse()
-{
-	flushph2();
-	flushph1();
-	flushrmconf();
-	flushsainfo();
-	clean_tmpalgtype();
-	return(cfparse());
-}
-
-#ifdef ENABLE_ADMINPORT
-static void
-adminsock_conf(path, owner, group, mode_dec)
-	vchar_t *path;
-	vchar_t *owner;
-	vchar_t *group;
-	int mode_dec;
-{
-	struct passwd *pw = NULL;
-	struct group *gr = NULL;
-	mode_t mode = 0;
-	uid_t uid;
-	gid_t gid;
-	int isnum;
-
-	adminsock_path = path->v;
-
-	if (owner == NULL)
-		return;
-
-	errno = 0;
-	uid = atoi(owner->v);
-	isnum = !errno;
-	if (((pw = getpwnam(owner->v)) == NULL) && !isnum)
-		yyerror("User \"%s\" does not exist", owner->v);
-
-	if (pw)
-		adminsock_owner = pw->pw_uid;
-	else
-		adminsock_owner = uid;
-
-	if (group == NULL)
-		return;
-
-	errno = 0;
-	gid = atoi(group->v);
-	isnum = !errno;
-	if (((gr = getgrnam(group->v)) == NULL) && !isnum)
-		yyerror("Group \"%s\" does not exist", group->v);
-
-	if (gr)
-		adminsock_group = gr->gr_gid;
-	else
-		adminsock_group = gid;
-
-	if (mode_dec == -1)
-		return;
-
-	if (mode_dec > 777)
-		yyerror("Mode 0%03o is invalid", mode_dec);
-	if (mode_dec >= 400) { mode += 0400; mode_dec -= 400; }
-	if (mode_dec >= 200) { mode += 0200; mode_dec -= 200; }
-	if (mode_dec >= 100) { mode += 0200; mode_dec -= 100; }
-
-	if (mode_dec > 77)
-		yyerror("Mode 0%03o is invalid", mode_dec);
-	if (mode_dec >= 40) { mode += 040; mode_dec -= 40; }
-	if (mode_dec >= 20) { mode += 020; mode_dec -= 20; }
-	if (mode_dec >= 10) { mode += 020; mode_dec -= 10; }
-
-	if (mode_dec > 7)
-		yyerror("Mode 0%03o is invalid", mode_dec);
-	if (mode_dec >= 4) { mode += 04; mode_dec -= 4; }
-	if (mode_dec >= 2) { mode += 02; mode_dec -= 2; }
-	if (mode_dec >= 1) { mode += 02; mode_dec -= 1; }
-	
-	adminsock_mode = mode;
-
-	return;
-}
-#endif
diff --git a/src/racoon/cfparse_proto.h b/src/racoon/cfparse_proto.h
deleted file mode 100644
index 139520c..0000000
--- a/src/racoon/cfparse_proto.h
+++ /dev/null
@@ -1,42 +0,0 @@
-/*	$NetBSD: cfparse_proto.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: cfparse_proto.h,v 1.3 2004/06/11 16:00:15 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _CFPARSE_PROTO_H
-#define _CFPARSE_PROTO_H
-
-/* cfparse.y */
-extern int yyparse __P((void));
-extern int cfparse __P((void));
-extern int cfreparse __P((void));
-
-#endif /* _CFPARSE_PROTO_H */
diff --git a/src/racoon/cftoken.l b/src/racoon/cftoken.l
deleted file mode 100644
index 9950d49..0000000
--- a/src/racoon/cftoken.l
+++ /dev/null
@@ -1,795 +0,0 @@
-/*	$NetBSD: cftoken.l,v 1.11.4.2 2007/09/03 18:07:29 mgrooms Exp $	*/
-
-/* Id: cftoken.l,v 1.53 2006/08/22 18:17:17 manubsd Exp */
-
-%{
-/*
- * Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 and 2003 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include PATH_IPSEC_H
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <limits.h>
-#include <ctype.h>
-#include <glob.h>
-#ifdef HAVE_STDARG_H
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "algorithm.h"
-#include "cfparse_proto.h"
-#include "cftoken_proto.h"
-#include "localconf.h"
-#include "oakley.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "ipsec_doi.h"
-#include "policy.h"
-#include "proposal.h"
-#include "remoteconf.h"
-#ifdef GC
-#include "gcmalloc.h"
-#endif
-
-#include "cfparse.h"
-
-int yyerrorcount = 0;
-
-#if defined(YIPS_DEBUG)
-#  define YYDB plog(LLV_DEBUG2, LOCATION, NULL,                                \
-		"begin <%d>%s\n", yy_start, yytext);
-#  define YYD {                                                                \
-	plog(LLV_DEBUG2, LOCATION, NULL, "<%d>%s",                             \
-	    yy_start, loglevel >= LLV_DEBUG2 ? "\n" : "");                     \
-}
-#else
-#  define YYDB
-#  define YYD
-#endif /* defined(YIPS_DEBUG) */
-
-#define MAX_INCLUDE_DEPTH 10
-
-static struct include_stack {
-	char *path;
-	FILE *fp;
-	YY_BUFFER_STATE prevstate;
-	int lineno;
-	glob_t matches;
-	int matchon;
-} incstack[MAX_INCLUDE_DEPTH];
-static int incstackp = 0;
-
-static int yy_first_time = 1;
-%}
-
-/* common seciton */
-nl		\n
-ws		[ \t]+
-digit		[0-9]
-letter		[A-Za-z]
-hexdigit	[0-9A-Fa-f]
-/*octet		(([01]?{digit}?{digit})|((2([0-4]{digit}))|(25[0-5]))) */
-special		[()+\|\?\*]
-comma		\,
-dot		\.
-slash		\/
-bcl		\{
-ecl		\}
-blcl		\[
-elcl		\]
-hyphen          \-
-percent		\%
-semi		\;
-comment		\#.*
-ccomment	"/*"
-bracketstring	\<[^>]*\>
-quotedstring	\"[^"]*\"
-addrstring	[a-fA-F0-9:]([a-fA-F0-9:\.]*|[a-fA-F0-9:\.]*%[a-zA-Z0-9]*)
-decstring	{digit}+
-hexstring	0x{hexdigit}+
-
-%s S_INI S_PRIV S_PTH S_INF S_LOG S_PAD S_LST S_RTRY S_CFG S_LDAP
-%s S_ALGST S_ALGCL
-%s S_SAINF S_SAINFS
-%s S_RMT S_RMTS S_RMTP
-%s S_SA
-%s S_GSSENC
-
-%%
-%{
-	if (yy_first_time) {
-		BEGIN S_INI;
-		yy_first_time = 0;
-	}
-%}
-
-	/* privsep */
-<S_INI>privsep		{ BEGIN S_PRIV; YYDB; return(PRIVSEP); }
-<S_PRIV>{bcl}		{ return(BOC); }
-<S_PRIV>user		{ YYD; return(USER); }
-<S_PRIV>group		{ YYD; return(GROUP); }
-<S_PRIV>chroot		{ YYD; return(CHROOT); }
-<S_PRIV>{ecl}		{ BEGIN S_INI; return(EOC); }
-
-	/* path */
-<S_INI>path		{ BEGIN S_PTH; YYDB; return(PATH); }
-<S_PTH>include		{ YYD; yylval.num = LC_PATHTYPE_INCLUDE;
-				return(PATHTYPE); }
-<S_PTH>pre_shared_key	{ YYD; yylval.num = LC_PATHTYPE_PSK;
-				return(PATHTYPE); }
-<S_PTH>certificate	{ YYD; yylval.num = LC_PATHTYPE_CERT;
-				return(PATHTYPE); }
-<S_PTH>script		{ YYD; yylval.num = LC_PATHTYPE_SCRIPT;
-				return(PATHTYPE); }
-<S_PTH>backupsa		{ YYD; yylval.num = LC_PATHTYPE_BACKUPSA;
-				return(PATHTYPE); }
-<S_PTH>pidfile		{ YYD; yylval.num = LC_PATHTYPE_PIDFILE;
-				return(PATHTYPE); }
-<S_PTH>{semi}		{ BEGIN S_INI; YYDB; return(EOS); }
-
-	/* include */
-<S_INI>include		{ YYDB; return(INCLUDE); }
-
-	/* self information */
-<S_INI>identifier	{ BEGIN S_INF; YYDB; yywarn("it is obsoleted.  use \"my_identifier\" in each remote directives."); return(IDENTIFIER); }
-<S_INF>{semi}		{ BEGIN S_INI; return(EOS); }
-
-	/* special */
-<S_INI>complex_bundle	{ YYDB; return(COMPLEX_BUNDLE); }
-
-	/* logging */
-<S_INI>log		{ BEGIN S_LOG; YYDB; return(LOGGING); }
-<S_LOG>error		{ YYD; yylval.num = LLV_ERROR; return(LOGLEV); }
-<S_LOG>warning		{ YYD; yylval.num = LLV_WARNING; return(LOGLEV); }
-<S_LOG>notify		{ YYD; yylval.num = LLV_NOTIFY; return(LOGLEV); }
-<S_LOG>info		{ YYD; yylval.num = LLV_INFO; return(LOGLEV); }
-<S_LOG>debug		{ YYD; yylval.num = LLV_DEBUG; return(LOGLEV); }
-<S_LOG>debug2		{ YYD; yylval.num = LLV_DEBUG2; return(LOGLEV); }
-<S_LOG>debug3		{ YYD; yywarn("it is obsoleted.  use \"debug2\""); yylval.num = LLV_DEBUG2; return(LOGLEV); }
-<S_LOG>debug4		{ YYD; yywarn("it is obsoleted.  use \"debug2\""); yylval.num = LLV_DEBUG2; return(LOGLEV); }
-<S_LOG>{semi}		{ BEGIN S_INI; return(EOS); }
-
-	/* padding */
-<S_INI>padding		{ BEGIN S_PAD; YYDB; return(PADDING); }
-<S_PAD>{bcl}		{ return(BOC); }
-<S_PAD>randomize	{ YYD; return(PAD_RANDOMIZE); }
-<S_PAD>randomize_length	{ YYD; return(PAD_RANDOMIZELEN); }
-<S_PAD>maximum_length	{ YYD; return(PAD_MAXLEN); }
-<S_PAD>strict_check	{ YYD; return(PAD_STRICT); }
-<S_PAD>exclusive_tail	{ YYD; return(PAD_EXCLTAIL); }
-<S_PAD>{ecl}		{ BEGIN S_INI; return(EOC); }
-
-	/* listen */
-<S_INI>listen		{ BEGIN S_LST; YYDB; return(LISTEN); }
-<S_LST>{bcl}		{ return(BOC); }
-<S_LST>isakmp		{ YYD; return(X_ISAKMP); }
-<S_LST>isakmp_natt	{ YYD; return(X_ISAKMP_NATT); }
-<S_LST>admin		{ YYD; return(X_ADMIN); }
-<S_LST>adminsock	{ YYD; return(ADMINSOCK); }
-<S_LST>disabled		{ YYD; return(DISABLED); }
-<S_LST>strict_address	{ YYD; return(STRICT_ADDRESS); }
-<S_LST>{ecl}		{ BEGIN S_INI; return(EOC); }
-
-	/* ldap config */
-<S_INI>ldapcfg		{ BEGIN S_LDAP; YYDB; return(LDAPCFG); }
-<S_LDAP>{bcl}		{ return(BOC); }
-<S_LDAP>version		{ YYD; return(LDAP_PVER); }
-<S_LDAP>host		{ YYD; return(LDAP_HOST); }
-<S_LDAP>port		{ YYD; return(LDAP_PORT); }
-<S_LDAP>base		{ YYD; return(LDAP_BASE); }
-<S_LDAP>subtree		{ YYD; return(LDAP_SUBTREE); }
-<S_LDAP>bind_dn		{ YYD; return(LDAP_BIND_DN); }
-<S_LDAP>bind_pw		{ YYD; return(LDAP_BIND_PW); }
-<S_LDAP>attr_user	{ YYD; return(LDAP_ATTR_USER); }
-<S_LDAP>attr_addr	{ YYD; return(LDAP_ATTR_ADDR); }
-<S_LDAP>attr_mask	{ YYD; return(LDAP_ATTR_MASK); }
-<S_LDAP>attr_group	{ YYD; return(LDAP_ATTR_GROUP); }
-<S_LDAP>attr_member	{ YYD; return(LDAP_ATTR_MEMBER); }
-<S_LDAP>{ecl}		{ BEGIN S_INI; return(EOC); }
-
-	/* mode_cfg */
-<S_INI>mode_cfg		{ BEGIN S_CFG; YYDB; return(MODECFG); }
-<S_CFG>{bcl}		{ return(BOC); }
-<S_CFG>network4		{ YYD; return(CFG_NET4); }
-<S_CFG>netmask4		{ YYD; return(CFG_MASK4); }
-<S_CFG>dns4		{ YYD; return(CFG_DNS4); }
-<S_CFG>nbns4		{ YYD; return(CFG_NBNS4); }
-<S_CFG>wins4		{ YYD; return(CFG_NBNS4); }
-<S_CFG>default_domain	{ YYD; return(CFG_DEFAULT_DOMAIN); }
-<S_CFG>auth_source	{ YYD; return(CFG_AUTH_SOURCE); }
-<S_CFG>auth_groups	{ YYD; return(CFG_AUTH_GROUPS); }
-<S_CFG>group_source	{ YYD; return(CFG_GROUP_SOURCE); }
-<S_CFG>conf_source	{ YYD; return(CFG_CONF_SOURCE); }
-<S_CFG>accounting	{ YYD; return(CFG_ACCOUNTING); }
-<S_CFG>system		{ YYD; return(CFG_SYSTEM); }
-<S_CFG>local		{ YYD; return(CFG_LOCAL); }
-<S_CFG>none		{ YYD; return(CFG_NONE); }
-<S_CFG>radius		{ YYD; return(CFG_RADIUS); }
-<S_CFG>pam		{ YYD; return(CFG_PAM); }
-<S_CFG>ldap		{ YYD; return(CFG_LDAP); }
-<S_CFG>pool_size	{ YYD; return(CFG_POOL_SIZE); }
-<S_CFG>banner		{ YYD; return(CFG_MOTD); }
-<S_CFG>auth_throttle	{ YYD; return(CFG_AUTH_THROTTLE); }
-<S_CFG>split_network	{ YYD; return(CFG_SPLIT_NETWORK); }
-<S_CFG>local_lan	{ YYD; return(CFG_SPLIT_LOCAL); }
-<S_CFG>include		{ YYD; return(CFG_SPLIT_INCLUDE); }
-<S_CFG>split_dns	{ YYD; return(CFG_SPLIT_DNS); }
-<S_CFG>pfs_group	{ YYD; return(CFG_PFS_GROUP); }
-<S_CFG>save_passwd	{ YYD; return(CFG_SAVE_PASSWD); }
-<S_CFG>{comma}		{ YYD; return(COMMA); }
-<S_CFG>{ecl}		{ BEGIN S_INI; return(EOC); }
-
-	/* timer */
-<S_INI>timer		{ BEGIN S_RTRY; YYDB; return(RETRY); }
-<S_RTRY>{bcl}		{ return(BOC); }
-<S_RTRY>counter		{ YYD; return(RETRY_COUNTER); }
-<S_RTRY>interval	{ YYD; return(RETRY_INTERVAL); }
-<S_RTRY>persend		{ YYD; return(RETRY_PERSEND); }
-<S_RTRY>phase1		{ YYD; return(RETRY_PHASE1); }
-<S_RTRY>phase2		{ YYD; return(RETRY_PHASE2); }
-<S_RTRY>natt_keepalive	{ YYD; return(NATT_KA); }
-<S_RTRY>{ecl}		{ BEGIN S_INI; return(EOC); }
-
-	/* sainfo */
-<S_INI>sainfo		{ BEGIN S_SAINF; YYDB; return(SAINFO); }
-<S_SAINF>anonymous	{ YYD; return(ANONYMOUS); }
-<S_SAINF>{blcl}any{elcl}	{ YYD; return(PORTANY); }
-<S_SAINF>any		{ YYD; return(ANY); }
-<S_SAINF>from		{ YYD; return(FROM); }
-<S_SAINF>group		{ YYD; return(GROUP); }
-	/* sainfo spec */
-<S_SAINF>{bcl}		{ BEGIN S_SAINFS; return(BOC); }
-<S_SAINF>{semi}		{ BEGIN S_INI; return(EOS); }
-<S_SAINFS>{ecl}		{ BEGIN S_INI; return(EOC); }
-<S_SAINFS>pfs_group	{ YYD; return(PFS_GROUP); }
-<S_SAINFS>remoteid	{ YYD; return(REMOTEID); }
-<S_SAINFS>identifier	{ YYD; yywarn("it is obsoleted.  use \"my_identifier\"."); return(IDENTIFIER); }
-<S_SAINFS>my_identifier	{ YYD; return(MY_IDENTIFIER); }
-<S_SAINFS>lifetime	{ YYD; return(LIFETIME); }
-<S_SAINFS>time		{ YYD; return(LIFETYPE_TIME); }
-<S_SAINFS>byte		{ YYD; return(LIFETYPE_BYTE); }
-<S_SAINFS>encryption_algorithm { YYD; yylval.num = algclass_ipsec_enc; return(ALGORITHM_CLASS); }
-<S_SAINFS>authentication_algorithm { YYD; yylval.num = algclass_ipsec_auth; return(ALGORITHM_CLASS); }
-<S_SAINFS>compression_algorithm	{ YYD; yylval.num = algclass_ipsec_comp; return(ALGORITHM_CLASS); }
-<S_SAINFS>{comma}	{ YYD; return(COMMA); }
-
-	/* remote */
-<S_INI>remote		{ BEGIN S_RMT; YYDB; return(REMOTE); }
-<S_RMT>anonymous	{ YYD; return(ANONYMOUS); }
-<S_RMT>inherit		{ YYD; return(INHERIT); }
-	/* remote spec */
-<S_RMT>{bcl}		{ BEGIN S_RMTS; return(BOC); }
-<S_RMTS>{ecl}		{ BEGIN S_INI; return(EOC); }
-<S_RMTS>exchange_mode	{ YYD; return(EXCHANGE_MODE); }
-<S_RMTS>{comma}		{ YYD; /* XXX ignored, but to be handled. */ ; }
-<S_RMTS>base		{ YYD; yylval.num = ISAKMP_ETYPE_BASE; return(EXCHANGETYPE); }
-<S_RMTS>main		{ YYD; yylval.num = ISAKMP_ETYPE_IDENT; return(EXCHANGETYPE); }
-<S_RMTS>aggressive	{ YYD; yylval.num = ISAKMP_ETYPE_AGG; return(EXCHANGETYPE); }
-<S_RMTS>doi		{ YYD; return(DOI); }
-<S_RMTS>ipsec_doi	{ YYD; yylval.num = IPSEC_DOI; return(DOITYPE); }
-<S_RMTS>situation	{ YYD; return(SITUATION); }
-<S_RMTS>identity_only	{ YYD; yylval.num = IPSECDOI_SIT_IDENTITY_ONLY; return(SITUATIONTYPE); }
-<S_RMTS>secrecy		{ YYD; yylval.num = IPSECDOI_SIT_SECRECY; return(SITUATIONTYPE); }
-<S_RMTS>integrity	{ YYD; yylval.num = IPSECDOI_SIT_INTEGRITY; return(SITUATIONTYPE); }
-<S_RMTS>identifier	{ YYD; yywarn("it is obsoleted.  use \"my_identifier\"."); return(IDENTIFIER); }
-<S_RMTS>my_identifier	{ YYD; return(MY_IDENTIFIER); }
-<S_RMTS>xauth_login	{ YYD; return(XAUTH_LOGIN); /* formerly identifier type login */ }
-<S_RMTS>peers_identifier	{ YYD; return(PEERS_IDENTIFIER); }
-<S_RMTS>verify_identifier	{ YYD; return(VERIFY_IDENTIFIER); }
-<S_RMTS>certificate_type	{ YYD; return(CERTIFICATE_TYPE); }
-<S_RMTS>ca_type		{ YYD; return(CA_TYPE); }
-<S_RMTS>x509		{ YYD; yylval.num = ISAKMP_CERT_X509SIGN; return(CERT_X509); }
-<S_RMTS>plain_rsa	{ YYD; yylval.num = ISAKMP_CERT_PLAINRSA; return(CERT_PLAINRSA); }
-<S_RMTS>peers_certfile	{ YYD; return(PEERS_CERTFILE); }
-<S_RMTS>dnssec		{ YYD; return(DNSSEC); }
-<S_RMTS>verify_cert	{ YYD; return(VERIFY_CERT); }
-<S_RMTS>send_cert	{ YYD; return(SEND_CERT); }
-<S_RMTS>send_cr		{ YYD; return(SEND_CR); }
-<S_RMTS>dh_group	{ YYD; return(DH_GROUP); }
-<S_RMTS>nonce_size	{ YYD; return(NONCE_SIZE); }
-<S_RMTS>generate_policy	{ YYD; return(GENERATE_POLICY); }
-<S_RMTS>unique		{ YYD; yylval.num = GENERATE_POLICY_UNIQUE; return(GENERATE_LEVEL); }
-<S_RMTS>require		{ YYD; yylval.num = GENERATE_POLICY_REQUIRE; return(GENERATE_LEVEL); }
-<S_RMTS>support_mip6	{ YYD; yywarn("it is obsoleted.  use \"support_proxy\"."); return(SUPPORT_PROXY); }
-<S_RMTS>support_proxy	{ YYD; return(SUPPORT_PROXY); }
-<S_RMTS>initial_contact	{ YYD; return(INITIAL_CONTACT); }
-<S_RMTS>nat_traversal	{ YYD; return(NAT_TRAVERSAL); }
-<S_RMTS>force		{ YYD; return(REMOTE_FORCE_LEVEL); }
-<S_RMTS>proposal_check	{ YYD; return(PROPOSAL_CHECK); }
-<S_RMTS>obey		{ YYD; yylval.num = PROP_CHECK_OBEY; return(PROPOSAL_CHECK_LEVEL); }
-<S_RMTS>strict		{ YYD; yylval.num = PROP_CHECK_STRICT; return(PROPOSAL_CHECK_LEVEL); }
-<S_RMTS>exact		{ YYD; yylval.num = PROP_CHECK_EXACT; return(PROPOSAL_CHECK_LEVEL); }
-<S_RMTS>claim		{ YYD; yylval.num = PROP_CHECK_CLAIM; return(PROPOSAL_CHECK_LEVEL); }
-<S_RMTS>keepalive	{ YYD; return(KEEPALIVE); }
-<S_RMTS>passive		{ YYD; return(PASSIVE); }
-<S_RMTS>lifetime	{ YYD; return(LIFETIME); }
-<S_RMTS>time		{ YYD; return(LIFETYPE_TIME); }
-<S_RMTS>byte		{ YYD; return(LIFETYPE_BYTE); }
-<S_RMTS>dpd			{ YYD; return(DPD); }
-<S_RMTS>dpd_delay	{ YYD; return(DPD_DELAY); }
-<S_RMTS>dpd_retry	{ YYD; return(DPD_RETRY); }
-<S_RMTS>dpd_maxfail	{ YYD; return(DPD_MAXFAIL); }
-<S_RMTS>ph1id		{ YYD; return(PH1ID); }
-<S_RMTS>ike_frag	{ YYD; return(IKE_FRAG); }
-<S_RMTS>esp_frag	{ YYD; return(ESP_FRAG); }
-<S_RMTS>script		{ YYD; return(SCRIPT); }
-<S_RMTS>phase1_up	{ YYD; return(PHASE1_UP); }
-<S_RMTS>phase1_down	{ YYD; return(PHASE1_DOWN); }
-<S_RMTS>mode_cfg	{ YYD; return(MODE_CFG); }
-<S_RMTS>weak_phase1_check { YYD; return(WEAK_PHASE1_CHECK); }
-	/* remote proposal */
-<S_RMTS>proposal	{ BEGIN S_RMTP; YYDB; return(PROPOSAL); }
-<S_RMTP>{bcl}		{ return(BOC); }
-<S_RMTP>{ecl}		{ BEGIN S_RMTS; return(EOC); }
-<S_RMTP>lifetime	{ YYD; return(LIFETIME); }
-<S_RMTP>time		{ YYD; return(LIFETYPE_TIME); }
-<S_RMTP>byte		{ YYD; return(LIFETYPE_BYTE); }
-<S_RMTP>encryption_algorithm { YYD; yylval.num = algclass_isakmp_enc; return(ALGORITHM_CLASS); }
-<S_RMTP>authentication_method { YYD; yylval.num = algclass_isakmp_ameth; return(ALGORITHM_CLASS); }
-<S_RMTP>hash_algorithm	{ YYD; yylval.num = algclass_isakmp_hash; return(ALGORITHM_CLASS); }
-<S_RMTP>dh_group	{ YYD; return(DH_GROUP); }
-<S_RMTP>gss_id		{ YYD; return(GSS_ID); }
-<S_RMTP>gssapi_id	{ YYD; return(GSS_ID); } /* for back compatibility */
-
-	/* GSS ID encoding type (global) */
-<S_INI>gss_id_enc	{ BEGIN S_GSSENC; YYDB; return(GSS_ID_ENC); }
-<S_GSSENC>latin1	{ YYD; yylval.num = LC_GSSENC_LATIN1;
-				return(GSS_ID_ENCTYPE); }
-<S_GSSENC>utf-16le	{ YYD; yylval.num = LC_GSSENC_UTF16LE;
-				return(GSS_ID_ENCTYPE); }
-<S_GSSENC>{semi}	{ BEGIN S_INI; YYDB; return(EOS); }
-
-	/* parameter */
-on		{ YYD; yylval.num = TRUE; return(SWITCH); }
-off		{ YYD; yylval.num = FALSE; return(SWITCH); }
-
-	/* prefix */
-{slash}{digit}{1,3} {
-			YYD;
-			yytext++;
-			yylval.num = atoi(yytext);
-			return(PREFIX);
-		}
-
-	/* port number */
-{blcl}{decstring}{elcl}	{
-			char *p = yytext;
-			YYD;
-			while (*++p != ']') ;
-			*p = 0;
-			yytext++;
-			yylval.num = atoi(yytext);
-			return(PORT);
-		}
-
-	/* address range */
-{hyphen}{addrstring} {
-                        YYD;
-                        yytext++;
-			yylval.val = vmalloc(yyleng + 1);
-			if (yylval.val == NULL) {
-				yyerror("vmalloc failed");
-				return -1;
-			}
-			memcpy(yylval.val->v, yytext, yylval.val->l);
-                        return(ADDRRANGE);
-                } 
-
-	/* upper protocol */
-esp		{ YYD; yylval.num = IPPROTO_ESP; return(UL_PROTO); }
-ah		{ YYD; yylval.num = IPPROTO_AH; return(UL_PROTO); }
-ipcomp		{ YYD; yylval.num = IPPROTO_IPCOMP; return(UL_PROTO); }
-icmp		{ YYD; yylval.num = IPPROTO_ICMP; return(UL_PROTO); }
-icmp6		{ YYD; yylval.num = IPPROTO_ICMPV6; return(UL_PROTO); }
-tcp		{ YYD; yylval.num = IPPROTO_TCP; return(UL_PROTO); }
-udp		{ YYD; yylval.num = IPPROTO_UDP; return(UL_PROTO); }
-
-	/* algorithm type */
-des_iv64	{ YYD; yylval.num = algtype_des_iv64;	return(ALGORITHMTYPE); }
-des		{ YYD; yylval.num = algtype_des;	return(ALGORITHMTYPE); }
-3des		{ YYD; yylval.num = algtype_3des;	return(ALGORITHMTYPE); }
-rc5		{ YYD; yylval.num = algtype_rc5;	return(ALGORITHMTYPE); }
-idea 		{ YYD; yylval.num = algtype_idea;	return(ALGORITHMTYPE); }
-cast128		{ YYD; yylval.num = algtype_cast128;	return(ALGORITHMTYPE); }
-blowfish	{ YYD; yylval.num = algtype_blowfish;	return(ALGORITHMTYPE); }
-3idea		{ YYD; yylval.num = algtype_3idea;	return(ALGORITHMTYPE); }
-des_iv32	{ YYD; yylval.num = algtype_des_iv32;	return(ALGORITHMTYPE); }
-rc4 		{ YYD; yylval.num = algtype_rc4;	return(ALGORITHMTYPE); }
-null_enc	{ YYD; yylval.num = algtype_null_enc;	return(ALGORITHMTYPE); }
-null		{ YYD; yylval.num = algtype_null_enc;	return(ALGORITHMTYPE); }
-aes		{ YYD; yylval.num = algtype_aes;	return(ALGORITHMTYPE); }
-rijndael	{ YYD; yylval.num = algtype_aes;	return(ALGORITHMTYPE); }
-twofish		{ YYD; yylval.num = algtype_twofish;	return(ALGORITHMTYPE); }
-camellia	{ YYD; yylval.num = algtype_camellia;	return(ALGORITHMTYPE); }
-non_auth	{ YYD; yylval.num = algtype_non_auth;	return(ALGORITHMTYPE); }
-hmac_md5	{ YYD; yylval.num = algtype_hmac_md5;	return(ALGORITHMTYPE); }
-hmac_sha1	{ YYD; yylval.num = algtype_hmac_sha1;	return(ALGORITHMTYPE); }
-hmac_sha2_256	{ YYD; yylval.num = algtype_hmac_sha2_256;	return(ALGORITHMTYPE); }
-hmac_sha256	{ YYD; yylval.num = algtype_hmac_sha2_256;	return(ALGORITHMTYPE); }
-hmac_sha2_384	{ YYD; yylval.num = algtype_hmac_sha2_384;	return(ALGORITHMTYPE); }
-hmac_sha384	{ YYD; yylval.num = algtype_hmac_sha2_384;	return(ALGORITHMTYPE); }
-hmac_sha2_512	{ YYD; yylval.num = algtype_hmac_sha2_512;	return(ALGORITHMTYPE); }
-hmac_sha512	{ YYD; yylval.num = algtype_hmac_sha2_512;	return(ALGORITHMTYPE); }
-des_mac		{ YYD; yylval.num = algtype_des_mac;	return(ALGORITHMTYPE); }
-kpdk		{ YYD; yylval.num = algtype_kpdk;	return(ALGORITHMTYPE); }
-md5		{ YYD; yylval.num = algtype_md5;	return(ALGORITHMTYPE); }
-sha1		{ YYD; yylval.num = algtype_sha1;	return(ALGORITHMTYPE); }
-tiger		{ YYD; yylval.num = algtype_tiger;	return(ALGORITHMTYPE); }
-sha2_256	{ YYD; yylval.num = algtype_sha2_256;	return(ALGORITHMTYPE); }
-sha256		{ YYD; yylval.num = algtype_sha2_256;	return(ALGORITHMTYPE); }
-sha2_384	{ YYD; yylval.num = algtype_sha2_384;	return(ALGORITHMTYPE); }
-sha384		{ YYD; yylval.num = algtype_sha2_384;	return(ALGORITHMTYPE); }
-sha2_512	{ YYD; yylval.num = algtype_sha2_512;	return(ALGORITHMTYPE); }
-sha512		{ YYD; yylval.num = algtype_sha2_512;	return(ALGORITHMTYPE); }
-oui		{ YYD; yylval.num = algtype_oui;	return(ALGORITHMTYPE); }
-deflate		{ YYD; yylval.num = algtype_deflate;	return(ALGORITHMTYPE); }
-lzs		{ YYD; yylval.num = algtype_lzs;	return(ALGORITHMTYPE); }
-modp768		{ YYD; yylval.num = algtype_modp768;	return(ALGORITHMTYPE); }
-modp1024	{ YYD; yylval.num = algtype_modp1024;	return(ALGORITHMTYPE); }
-modp1536	{ YYD; yylval.num = algtype_modp1536;	return(ALGORITHMTYPE); }
-ec2n155		{ YYD; yylval.num = algtype_ec2n155;	return(ALGORITHMTYPE); }
-ec2n185		{ YYD; yylval.num = algtype_ec2n185;	return(ALGORITHMTYPE); }
-modp2048	{ YYD; yylval.num = algtype_modp2048;	return(ALGORITHMTYPE); }
-modp3072	{ YYD; yylval.num = algtype_modp3072;	return(ALGORITHMTYPE); }
-modp4096	{ YYD; yylval.num = algtype_modp4096;	return(ALGORITHMTYPE); }
-modp6144	{ YYD; yylval.num = algtype_modp6144;	return(ALGORITHMTYPE); }
-modp8192	{ YYD; yylval.num = algtype_modp8192;	return(ALGORITHMTYPE); }
-pre_shared_key	{ YYD; yylval.num = algtype_psk;	return(ALGORITHMTYPE); }
-rsasig		{ YYD; yylval.num = algtype_rsasig;	return(ALGORITHMTYPE); }
-dsssig		{ YYD; yylval.num = algtype_dsssig;	return(ALGORITHMTYPE); }
-rsaenc		{ YYD; yylval.num = algtype_rsaenc;	return(ALGORITHMTYPE); }
-rsarev		{ YYD; yylval.num = algtype_rsarev;	return(ALGORITHMTYPE); }
-gssapi_krb	{ YYD; yylval.num = algtype_gssapikrb;	return(ALGORITHMTYPE); }
-hybrid_rsa_server {
-#ifdef ENABLE_HYBRID
-	YYD; yylval.num = algtype_hybrid_rsa_s; return(ALGORITHMTYPE);
-#else
-	yyerror("racoon not configured with --enable-hybrid");
-#endif
-}
-hybrid_dss_server {
-#ifdef ENABLE_HYBRID
-	YYD; yylval.num = algtype_hybrid_dss_s; return(ALGORITHMTYPE);
-#else
-	yyerror("racoon not configured with --enable-hybrid");
-#endif
-}
-hybrid_rsa_client {
-#ifdef ENABLE_HYBRID
-	YYD; yylval.num = algtype_hybrid_rsa_c; return(ALGORITHMTYPE);
-#else
-	yyerror("racoon not configured with --enable-hybrid");
-#endif
-}
-hybrid_dss_client {
-#ifdef ENABLE_HYBRID
-	YYD; yylval.num = algtype_hybrid_dss_c; return(ALGORITHMTYPE);
-#else
-	yyerror("racoon not configured with --enable-hybrid");
-#endif
-}
-xauth_psk_server {
-#ifdef ENABLE_HYBRID
-	YYD; yylval.num = algtype_xauth_psk_s; return(ALGORITHMTYPE);
-#else
-	yyerror("racoon not configured with --enable-hybrid");
-#endif
-}
-xauth_psk_client {
-#ifdef ENABLE_HYBRID
-	YYD; yylval.num = algtype_xauth_psk_c; return(ALGORITHMTYPE);
-#else
-	yyerror("racoon not configured with --enable-hybrid");
-#endif
-}
-xauth_rsa_server {
-#ifdef ENABLE_HYBRID
-	YYD; yylval.num = algtype_xauth_rsa_s; return(ALGORITHMTYPE);
-#else
-	yyerror("racoon not configured with --enable-hybrid");
-#endif
-}
-xauth_rsa_client {
-#ifdef ENABLE_HYBRID
-	YYD; yylval.num = algtype_xauth_rsa_c; return(ALGORITHMTYPE);
-#else
-	yyerror("racoon not configured with --enable-hybrid");
-#endif
-}
-
-
-	/* identifier type */
-vendor_id	{ YYD; yywarn("it is obsoleted."); return(VENDORID); }
-user_fqdn	{ YYD; yylval.num = IDTYPE_USERFQDN; return(IDENTIFIERTYPE); }
-fqdn		{ YYD; yylval.num = IDTYPE_FQDN; return(IDENTIFIERTYPE); }
-keyid		{ YYD; yylval.num = IDTYPE_KEYID; return(IDENTIFIERTYPE); }
-address		{ YYD; yylval.num = IDTYPE_ADDRESS; return(IDENTIFIERTYPE); }
-subnet		{ YYD; yylval.num = IDTYPE_SUBNET; return(IDENTIFIERTYPE); }
-asn1dn		{ YYD; yylval.num = IDTYPE_ASN1DN; return(IDENTIFIERTYPE); }
-certname	{ YYD; yywarn("certname will be obsoleted in near future."); yylval.num = IDTYPE_ASN1DN; return(IDENTIFIERTYPE); }
-
-	/* identifier qualifier */
-tag		{ YYD; yylval.num = IDQUAL_TAG;  return(IDENTIFIERQUAL); }
-file		{ YYD; yylval.num = IDQUAL_FILE; return(IDENTIFIERQUAL); }
-
-	/* units */
-B|byte|bytes		{ YYD; return(UNITTYPE_BYTE); }
-KB			{ YYD; return(UNITTYPE_KBYTES); }
-MB			{ YYD; return(UNITTYPE_MBYTES); }
-TB			{ YYD; return(UNITTYPE_TBYTES); }
-sec|secs|second|seconds	{ YYD; return(UNITTYPE_SEC); }
-min|mins|minute|minutes	{ YYD; return(UNITTYPE_MIN); }
-hour|hours		{ YYD; return(UNITTYPE_HOUR); }
-
-	/* boolean */
-yes		{ YYD; yylval.num = TRUE; return(BOOLEAN); }
-no		{ YYD; yylval.num = FALSE; return(BOOLEAN); }
-
-{decstring}	{
-			char *bp;
-
-			YYD;
-			yylval.num = strtol(yytext, &bp, 10);
-			return(NUMBER);
-		}
-
-{hexstring}	{
-			char *p;
-
-			YYD; 
-			yylval.val = vmalloc(yyleng + (yyleng & 1) + 1);
-			if (yylval.val == NULL) {
-				yyerror("vmalloc failed");
-				return -1;
-			}
-
-			p = yylval.val->v;
-			*p++ = '0';
-			*p++ = 'x';
-
-			/* fixed string if length is odd. */
-			if (yyleng & 1)
-				*p++ = '0';
-			memcpy(p, &yytext[2], yyleng - 1);
-
-			return(HEXSTRING);
-		}
-
-{quotedstring}	{
-			char *p = yytext;
-
-			YYD;
-			while (*++p != '"') ;
-			*p = '\0';
-
-			yylval.val = vmalloc(yyleng - 1);
-			if (yylval.val == NULL) {
-				yyerror("vmalloc failed");
-				return -1;
-			}
-			memcpy(yylval.val->v, &yytext[1], yylval.val->l);
-
-			return(QUOTEDSTRING);
-		}
-
-{addrstring}	{
-			YYD;
-
-			yylval.val = vmalloc(yyleng + 1);
-			if (yylval.val == NULL) {
-				yyerror("vmalloc failed");
-				return -1;
-			}
-			memcpy(yylval.val->v, yytext, yylval.val->l);
-
-			return(ADDRSTRING);
-		}
-
-<<EOF>>		{
-			yy_delete_buffer(YY_CURRENT_BUFFER);
-			incstackp--;
-    nextfile:
-			if (incstack[incstackp].matchon <
-			    incstack[incstackp].matches.gl_pathc) {
-				char* filepath = incstack[incstackp].matches.gl_pathv[incstack[incstackp].matchon];
-				incstack[incstackp].matchon++;
-				incstackp++;
-				if (yycf_set_buffer(filepath) != 0) {
-					incstackp--;
-					goto nextfile;
-				}
-				yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
-				BEGIN(S_INI);
-			} else {
-				globfree(&incstack[incstackp].matches);
-				if (incstackp == 0)
-					yyterminate();
-				else
-					yy_switch_to_buffer(incstack[incstackp].prevstate);
-			}
-		}
-
-	/* ... */
-{ws}		{ ; }
-{nl}		{ incstack[incstackp].lineno++; }
-{comment}	{ YYD; }
-{semi}		{ return(EOS); }
-.		{ yymore(); }
-
-%%
-
-void
-yyerror(char *s, ...)
-{
-	char fmt[512];
-
-	va_list ap;
-#ifdef HAVE_STDARG_H
-	va_start(ap, s);
-#else
-	va_start(ap);
-#endif
-	snprintf(fmt, sizeof(fmt), "%s:%d: \"%s\" %s\n",
-		incstack[incstackp].path, incstack[incstackp].lineno,
-		yytext, s);
-	plogv(LLV_ERROR, LOCATION, NULL, fmt, ap);
-	va_end(ap);
-
-	yyerrorcount++;
-}
-
-void
-yywarn(char *s, ...)
-{
-	char fmt[512];
-
-	va_list ap;
-#ifdef HAVE_STDARG_H
-	va_start(ap, s);
-#else
-	va_start(ap);
-#endif
-	snprintf(fmt, sizeof(fmt), "%s:%d: \"%s\" %s\n",
-		incstack[incstackp].path, incstack[incstackp].lineno,
-		yytext, s);
-	plogv(LLV_WARNING, LOCATION, NULL, fmt, ap);
-	va_end(ap);
-}
-
-int
-yycf_switch_buffer(path)
-	char *path;
-{
-	char *filepath = NULL;
-
-	/* got the include file name */
-	if (incstackp >= MAX_INCLUDE_DEPTH) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Includes nested too deeply");
-		return -1;
-	}
-
-	if (glob(path, GLOB_TILDE, NULL, &incstack[incstackp].matches) != 0 ||
-	    incstack[incstackp].matches.gl_pathc == 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"glob found no matches for path \"%s\"\n", path);
-		return -1;
-	}
-	incstack[incstackp].matchon = 0;
-	incstack[incstackp].prevstate = YY_CURRENT_BUFFER;
-
-    nextmatch:
-	if (incstack[incstackp].matchon >= incstack[incstackp].matches.gl_pathc)
-		return -1;
-	filepath =
-	    incstack[incstackp].matches.gl_pathv[incstack[incstackp].matchon];
-	incstack[incstackp].matchon++;
-	incstackp++;
-
-	if (yycf_set_buffer(filepath) != 0) {
-	      incstackp--;
-	      goto nextmatch;
-	}
-
-	yy_switch_to_buffer(yy_create_buffer(yyin, YY_BUF_SIZE));
-
-	BEGIN(S_INI);
-
-	return 0;
-}
-
-int
-yycf_set_buffer(path)
-	char *path;
-{
-	yyin = fopen(path, "r");
-	if (yyin == NULL) {
-		fprintf(stderr, "failed to open file %s (%s)\n",
-			path, strerror(errno));
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to open file %s (%s)\n",
-			path, strerror(errno));
-		return -1;
-	}
-
-	/* initialize */
-	incstack[incstackp].fp = yyin;
-	if (incstack[incstackp].path != NULL)
-		racoon_free(incstack[incstackp].path);
-	incstack[incstackp].path = racoon_strdup(path);
-	STRDUP_FATAL(incstack[incstackp].path);
-	incstack[incstackp].lineno = 1;
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"reading config file %s\n", path);
-
-	return 0;
-}
-
-void
-yycf_init_buffer()
-{
-	int i;
-
-	for (i = 0; i < MAX_INCLUDE_DEPTH; i++)
-		memset(&incstack[i], 0, sizeof(incstack[i]));
-	incstackp = 0;
-}
-
-void
-yycf_clean_buffer()
-{
-	int i;
-
-	for (i = 0; i < MAX_INCLUDE_DEPTH; i++) {
-		if (incstack[i].path != NULL) {
-			fclose(incstack[i].fp);
-			racoon_free(incstack[i].path);
-			incstack[i].path = NULL;
-		}
-	}
-}
-
diff --git a/src/racoon/cftoken_proto.h b/src/racoon/cftoken_proto.h
deleted file mode 100644
index 41cb939..0000000
--- a/src/racoon/cftoken_proto.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*	$NetBSD: cftoken_proto.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: cftoken_proto.h,v 1.3 2004/06/11 16:00:15 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _CFTOKEN_PROTO_H
-#define _CFTOKEN_PROTO_H
-
-extern int yyerrorcount;
-
-extern int yylex __P((void));
-extern void yyerror __P((char *, ...));
-extern void yywarn __P((char *, ...));
-
-extern int yycf_switch_buffer __P((char *));
-extern int yycf_set_buffer __P((char *));
-extern void yycf_init_buffer __P((void));
-extern void yycf_clean_buffer __P((void));
-
-#endif /* _CFTOKEN_PROTO_H */
diff --git a/src/racoon/contrib/sp.pl b/src/racoon/contrib/sp.pl
deleted file mode 100644
index d1f9caf..0000000
--- a/src/racoon/contrib/sp.pl
+++ /dev/null
@@ -1,21 +0,0 @@
-#! /usr/pkg/bin/perl
-
-die "insufficient arguments" if (scalar(@ARGV) < 2);
-$src = $ARGV[0];
-$dst = $ARGV[1];
-$mode = 'transport';
-if (scalar(@ARGV) > 2) {
-	$mode = $ARGV[2];
-}
-
-open(OUT, "|setkey -c");
-if ($mode eq 'transport') {
-	print STDERR "install esp transport mode: $src -> $dst\n";
-	print OUT "spdadd $src $dst any -P out ipsec esp/transport//require;\n";
-	print OUT "spdadd $dst $src any -P in ipsec esp/transport//require;\n";
-} elsif ($mode eq 'delete') {
-	print STDERR "delete policy: $src -> $dst\n";
-	print OUT "spddelete $src $dst any -P out;\n";
-	print OUT "spddelete $dst $src any -P in;\n";
-}
-close(OUT);
diff --git a/src/racoon/crypto_openssl.c b/src/racoon/crypto_openssl.c
deleted file mode 100644
index b34b6dd..0000000
--- a/src/racoon/crypto_openssl.c
+++ /dev/null
@@ -1,2852 +0,0 @@
-/*	$NetBSD: crypto_openssl.c,v 1.11.6.6 2009/04/29 10:50:25 tteras Exp $	*/
-
-/* Id: crypto_openssl.c,v 1.47 2006/05/06 20:42:09 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <limits.h>
-#include <string.h>
-
-/* get openssl/ssleay version number */
-#include <openssl/opensslv.h>
-
-#if !defined(OPENSSL_VERSION_NUMBER) || (OPENSSL_VERSION_NUMBER < 0x0090602fL)
-#error OpenSSL version 0.9.6 or later required.
-#endif
-
-#include <openssl/pem.h>
-#include <openssl/evp.h>
-#include <openssl/x509.h>
-#include <openssl/x509v3.h>
-#include <openssl/x509_vfy.h>
-#include <openssl/bn.h>
-#include <openssl/dh.h>
-#include <openssl/md5.h>
-#include <openssl/sha.h>
-#include <openssl/hmac.h>
-#include <openssl/des.h>
-#include <openssl/crypto.h>
-#ifdef HAVE_OPENSSL_ENGINE_H
-#include <openssl/engine.h>
-#endif
-#ifndef ANDROID_CHANGES
-#include <openssl/blowfish.h>
-#include <openssl/cast.h>
-#else
-#define EVP_bf_cbc()    NULL
-#define EVP_cast5_cbc() NULL
-#endif
-#include <openssl/err.h>
-#ifdef HAVE_OPENSSL_RC5_H
-#include <openssl/rc5.h>
-#endif
-#ifdef HAVE_OPENSSL_IDEA_H
-#include <openssl/idea.h>
-#endif
-#if defined(HAVE_OPENSSL_AES_H)
-#include <openssl/aes.h>
-#elif defined(HAVE_OPENSSL_RIJNDAEL_H)
-#include <openssl/rijndael.h>
-#else
-#include "crypto/rijndael/rijndael-api-fst.h"
-#endif
-#if defined(HAVE_OPENSSL_CAMELLIA_H)
-#include <openssl/camellia.h>
-#endif
-#ifdef WITH_SHA2
-#ifdef HAVE_OPENSSL_SHA2_H
-#include <openssl/sha2.h>
-#else
-#include "crypto/sha2/sha2.h"
-#endif
-#endif
-#include "plog.h"
-
-/* 0.9.7 stuff? */
-#if OPENSSL_VERSION_NUMBER < 0x0090700fL
-typedef STACK_OF(GENERAL_NAME) GENERAL_NAMES;
-#else
-#define USE_NEW_DES_API
-#endif
-
-#define OpenSSL_BUG()	do { plog(LLV_ERROR, LOCATION, NULL, "OpenSSL function failed\n"); } while(0)
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "crypto_openssl.h"
-#include "debug.h"
-#include "gcmalloc.h"
-
-#if defined(OPENSSL_IS_BORINGSSL)
-/* HMAC_cleanup is deprecated wrapper in OpenSSL and has been removed in
- * BoringSSL. */
-#define HMAC_cleanup(ctx) HMAC_CTX_cleanup(ctx)
-#endif
-
-/*
- * I hate to cast every parameter to des_xx into void *, but it is
- * necessary for SSLeay/OpenSSL portability.  It sucks.
- */
-
-static int cb_check_cert_local __P((int, X509_STORE_CTX *));
-static int cb_check_cert_remote __P((int, X509_STORE_CTX *));
-static X509 *mem2x509 __P((vchar_t *));
-
-static caddr_t eay_hmac_init __P((vchar_t *, const EVP_MD *));
-
-/* X509 Certificate */
-/*
- * convert the string of the subject name into DER
- * e.g. str = "C=JP, ST=Kanagawa";
- */
-vchar_t *
-eay_str2asn1dn(str, len)
-	const char *str;
-	int len;
-{
-	X509_NAME *name;
-	char *buf;
-	char *field, *value;
-	int i, j;
-	vchar_t *ret = NULL;
-	caddr_t p;
-
-	if (len == -1)
-		len = strlen(str);
-
-	buf = racoon_malloc(len + 1);
-	if (!buf) {
-		plog(LLV_WARNING, LOCATION, NULL,"failed to allocate buffer\n");
-		return NULL;
-	}
-	memcpy(buf, str, len);
-
-	name = X509_NAME_new();
-
-	field = &buf[0];
-	value = NULL;
-	for (i = 0; i < len; i++) {
-		if (!value && buf[i] == '=') {
-			buf[i] = '\0';
-			value = &buf[i + 1];
-			continue;
-		} else if (buf[i] == ',' || buf[i] == '/') {
-			buf[i] = '\0';
-
-			plog(LLV_DEBUG, LOCATION, NULL, "DN: %s=%s\n",
-			     field, value);
-
-			if (!value) goto err;
-			if (!X509_NAME_add_entry_by_txt(name, field,
-					(value[0] == '*' && value[1] == 0) ? 
-						V_ASN1_PRINTABLESTRING : MBSTRING_ASC,
-					(unsigned char *) value, -1, -1, 0)) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				     "Invalid DN field: %s=%s\n",
-				     field, value);
-				plog(LLV_ERROR, LOCATION, NULL, 
-				     "%s\n", eay_strerror());
-				goto err;
-			}
-			for (j = i + 1; j < len; j++) {
-				if (buf[j] != ' ')
-					break;
-			}
-			field = &buf[j];
-			value = NULL;
-			continue;
-		}
-	}
-	buf[len] = '\0';
-
-	plog(LLV_DEBUG, LOCATION, NULL, "DN: %s=%s\n",
-	     field, value);
-
-	if (!value) goto err;
-	if (!X509_NAME_add_entry_by_txt(name, field,
-			(value[0] == '*' && value[1] == 0) ? 
-				V_ASN1_PRINTABLESTRING : MBSTRING_ASC,
-			(unsigned char *) value, -1, -1, 0)) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		     "Invalid DN field: %s=%s\n",
-		     field, value);
-		plog(LLV_ERROR, LOCATION, NULL, 
-		     "%s\n", eay_strerror());
-		goto err;
-	}
-
-	i = i2d_X509_NAME(name, NULL);
-	if (!i)
-		goto err;
-	ret = vmalloc(i);
-	if (!ret)
-		goto err;
-	p = ret->v;
-	i = i2d_X509_NAME(name, (void *)&p);
-	if (!i)
-		goto err;
-
-	return ret;
-
-    err:
-	if (buf)
-		racoon_free(buf);
-	if (name)
-		X509_NAME_free(name);
-	if (ret)
-		vfree(ret);
-	return NULL;
-}
-
-/*
- * convert the hex string of the subject name into DER
- */
-vchar_t *
-eay_hex2asn1dn(const char *hex, int len)
-{
-	BIGNUM *bn = BN_new();
-	char *binbuf;
-	size_t binlen;
-	vchar_t *ret = NULL;
-	
-	if (len == -1)
-		len = strlen(hex);
-
-	if (BN_hex2bn(&bn, hex) != len) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		     "conversion of Hex-encoded ASN1 string to binary failed: %s\n",
-		     eay_strerror());
-		goto out;
-	}
-	
-	binlen = BN_num_bytes(bn);
-	ret = vmalloc(binlen);
-	if (!ret) {
-		plog(LLV_WARNING, LOCATION, NULL,"failed to allocate buffer\n");
-		return NULL;
-	}
-	binbuf = ret->v;
-
-	BN_bn2bin(bn, (unsigned char *) binbuf);
-
-out:
-	BN_free(bn);
-
-	return ret;
-}
-
-/*
- * The following are derived from code in crypto/x509/x509_cmp.c
- * in OpenSSL0.9.7c:
- * X509_NAME_wildcmp() adds wildcard matching to the original
- * X509_NAME_cmp(), nocase_cmp() and nocase_spacenorm_cmp() are as is.
- */
-#include <ctype.h>
-/* Case insensitive string comparision */
-static int nocase_cmp(const ASN1_STRING *a, const ASN1_STRING *b)
-{
-	int i;
-
-	int a_length = ASN1_STRING_length(a);
-	int b_length = ASN1_STRING_length(b);
-	if (a_length != b_length)
-		return (a_length - b_length);
-
-	const unsigned char *a_data = ASN1_STRING_get0_data(a);
-	const unsigned char *b_data = ASN1_STRING_get0_data(b);
-	for (i=0; i<a_length; i++)
-	{
-		int ca, cb;
-
-		ca = tolower(a_data[i]);
-		cb = tolower(b_data[i]);
-
-		if (ca != cb)
-			return(ca-cb);
-	}
-	return 0;
-}
-
-/* Case insensitive string comparision with space normalization 
- * Space normalization - ignore leading, trailing spaces, 
- *       multiple spaces between characters are replaced by single space  
- */
-static int nocase_spacenorm_cmp(const ASN1_STRING *a, const ASN1_STRING *b)
-{
-	const unsigned char *pa = NULL, *pb = NULL;
-	int la, lb;
-	
-	la = ASN1_STRING_length(a);
-	lb = ASN1_STRING_length(b);
-	pa = ASN1_STRING_get0_data(a);
-	pb = ASN1_STRING_get0_data(b);
-
-	/* skip leading spaces */
-	while (la > 0 && isspace(*pa))
-	{
-		la--;
-		pa++;
-	}
-	while (lb > 0 && isspace(*pb))
-	{
-		lb--;
-		pb++;
-	}
-
-	/* skip trailing spaces */
-	while (la > 0 && isspace(pa[la-1]))
-		la--;
-	while (lb > 0 && isspace(pb[lb-1]))
-		lb--;
-
-	/* compare strings with space normalization */
-	while (la > 0 && lb > 0)
-	{
-		int ca, cb;
-
-		/* compare character */
-		ca = tolower(*pa);
-		cb = tolower(*pb);
-		if (ca != cb)
-			return (ca - cb);
-
-		pa++; pb++;
-		la--; lb--;
-
-		if (la <= 0 || lb <= 0)
-			break;
-
-		/* is white space next character ? */
-		if (isspace(*pa) && isspace(*pb))
-		{
-			/* skip remaining white spaces */
-			while (la > 0 && isspace(*pa))
-			{
-				la--;
-				pa++;
-			}
-			while (lb > 0 && isspace(*pb))
-			{
-				lb--;
-				pb++;
-			}
-		}
-	}
-	if (la > 0 || lb > 0)
-		return la - lb;
-
-	return 0;
-}
-
-static int X509_NAME_wildcmp(const X509_NAME *a, const X509_NAME *b)
-{
-    int i,j;
-    X509_NAME_ENTRY *na,*nb;
-
-    if (X509_NAME_entry_count(a)
-	!= X509_NAME_entry_count(b))
-	    return X509_NAME_entry_count(a)
-	      -X509_NAME_entry_count(b);
-    for (i=X509_NAME_entry_count(a)-1; i>=0; i--)
-    {
-	    na=X509_NAME_get_entry(a,i);
-	    nb=X509_NAME_get_entry(b,i);
-	    j=OBJ_cmp(X509_NAME_ENTRY_get_object(na),X509_NAME_ENTRY_get_object(nb));
-	    if (j) return(j);
-	    const ASN1_STRING *na_value=X509_NAME_ENTRY_get_data(na);
-	    const ASN1_STRING *nb_value=X509_NAME_ENTRY_get_data(nb);
-	    if ((ASN1_STRING_length(na_value) == 1 && ASN1_STRING_get0_data(na_value)[0] == '*')
-	     || (ASN1_STRING_length(nb_value) == 1 && ASN1_STRING_get0_data(nb_value)[0] == '*'))
-		    continue;
-	    j=ASN1_STRING_type(na_value)-ASN1_STRING_type(nb_value);
-	    if (j) return(j);
-	    if (ASN1_STRING_type(na_value) == V_ASN1_PRINTABLESTRING)
-		    j=nocase_spacenorm_cmp(na_value, nb_value);
-	    else if (ASN1_STRING_type(na_value) == V_ASN1_IA5STRING
-		    && OBJ_obj2nid(X509_NAME_ENTRY_get_object(na)) == NID_pkcs9_emailAddress)
-		    j=nocase_cmp(na_value, nb_value);
-	    else
-		    {
-		    j=ASN1_STRING_length(na_value)-ASN1_STRING_length(nb_value);
-		    if (j) return(j);
-		    j=memcmp(ASN1_STRING_get0_data(na_value),ASN1_STRING_get0_data(nb_value),
-			    ASN1_STRING_length(na_value));
-		    }
-	    if (j) return(j);
-	    j=X509_NAME_ENTRY_set(na)-X509_NAME_ENTRY_set(nb);
-	    if (j) return(j);
-    }
-
-    return(0);
-}
-
-/*
- * compare two subjectNames.
- * OUT:        0: equal
- *	positive:
- *	      -1: other error.
- */
-int
-eay_cmp_asn1dn(n1, n2)
-	vchar_t *n1, *n2;
-{
-	X509_NAME *a = NULL, *b = NULL;
-	caddr_t p;
-	int i = -1;
-
-	p = n1->v;
-	if (!d2i_X509_NAME(&a, (void *)&p, n1->l))
-		goto end;
-	p = n2->v;
-	if (!d2i_X509_NAME(&b, (void *)&p, n2->l))
-		goto end;
-
-	i = X509_NAME_wildcmp(a, b);
-
-    end:
-	if (a)
-		X509_NAME_free(a);
-	if (b)
-		X509_NAME_free(b);
-	return i;
-}
-
-#ifdef ANDROID_CHANGES
-
-static BIO *BIO_from_android(char *path)
-{       
-	void *data;
-	if (sscanf(path, pname, &data) == 1) {
-		return BIO_new_mem_buf(data, -1);
-	}
-	return NULL;
-}
-
-#endif
-
-/*
- * this functions is derived from apps/verify.c in OpenSSL0.9.5
- */
-int
-eay_check_x509cert(cert, CApath, CAfile, local)
-	vchar_t *cert;
-	char *CApath;
-	char *CAfile;
-	int local;
-{
-	X509_STORE *cert_ctx = NULL;
-	X509_LOOKUP *lookup = NULL;
-	X509 *x509 = NULL;
-	X509_STORE_CTX *csc;
-	int error = -1;
-
-	cert_ctx = X509_STORE_new();
-	if (cert_ctx == NULL)
-		goto end;
-
-	if (local)
-		X509_STORE_set_verify_cb_func(cert_ctx, cb_check_cert_local);
-	else 
-		X509_STORE_set_verify_cb_func(cert_ctx, cb_check_cert_remote);
-
-#ifdef ANDROID_CHANGES
-	if (pname) {
-		BIO *bio = BIO_from_android(CAfile);
-		STACK_OF(X509_INFO) *stack;
-		X509_INFO *info;
-		int i;
-
-		if (!bio) {
-			goto end;
-		}
-		stack = PEM_X509_INFO_read_bio(bio, NULL, NULL, NULL);
-		BIO_free(bio);
-		if (!stack) {
-			goto end;
-		}
-		for (i = 0; i < sk_X509_INFO_num(stack); ++i) {
-			info = sk_X509_INFO_value(stack, i);
-			if (info->x509) {
-				X509_STORE_add_cert(cert_ctx, info->x509);
-			}
-			if (info->crl) {
-				X509_STORE_add_crl(cert_ctx, info->crl);
-			}
-		}
-		sk_X509_INFO_pop_free(stack, X509_INFO_free);
-	} else {
-#endif
-	lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_file());
-	if (lookup == NULL)
-		goto end;
-
-	X509_LOOKUP_load_file(lookup, CAfile, 
-	    (CAfile == NULL) ? X509_FILETYPE_DEFAULT : X509_FILETYPE_PEM);
-
-	lookup = X509_STORE_add_lookup(cert_ctx, X509_LOOKUP_hash_dir());
-	if (lookup == NULL)
-		goto end;
-	error = X509_LOOKUP_add_dir(lookup, CApath, X509_FILETYPE_PEM);
-	if(!error) {
-		error = -1;
-		goto end;
-	}
-	error = -1;	/* initialized */
-#ifdef ANDROID_CHANGES
-	}
-#endif
-
-	/* read the certificate to be verified */
-	x509 = mem2x509(cert);
-	if (x509 == NULL)
-		goto end;
-
-	csc = X509_STORE_CTX_new();
-	if (csc == NULL)
-		goto end;
-	X509_STORE_CTX_init(csc, cert_ctx, x509, NULL);
-#if OPENSSL_VERSION_NUMBER >= 0x00907000L
-	X509_STORE_CTX_set_flags (csc, X509_V_FLAG_CRL_CHECK);
-	X509_STORE_CTX_set_flags (csc, X509_V_FLAG_CRL_CHECK_ALL);
-#endif
-	error = X509_verify_cert(csc);
-	X509_STORE_CTX_free(csc);
-
-	/*
-	 * if x509_verify_cert() is successful then the value of error is
-	 * set non-zero.
-	 */
-	error = error ? 0 : -1;
-
-end:
-	if (error)
-		plog(LLV_WARNING, LOCATION, NULL,"%s\n", eay_strerror());
-	if (cert_ctx != NULL)
-		X509_STORE_free(cert_ctx);
-	if (x509 != NULL)
-		X509_free(x509);
-
-	return(error);
-}
-
-/*
- * callback function for verifing certificate.
- * this function is derived from cb() in openssl/apps/s_server.c
- */
-static int
-cb_check_cert_local(ok, ctx)
-	int ok;
-	X509_STORE_CTX *ctx;
-{
-	char buf[256];
-	int log_tag;
-
-	if (!ok) {
-		X509_NAME_oneline(
-				X509_get_subject_name(X509_STORE_CTX_get_current_cert(ctx)),
-				buf,
-				256);
-		/*
-		 * since we are just checking the certificates, it is
-		 * ok if they are self signed. But we should still warn
-		 * the user.
- 		 */
-		int error = X509_STORE_CTX_get_error(ctx);
-		switch (error) {
-		case X509_V_ERR_CERT_HAS_EXPIRED:
-		case X509_V_ERR_DEPTH_ZERO_SELF_SIGNED_CERT:
-		case X509_V_ERR_INVALID_CA:
-		case X509_V_ERR_PATH_LENGTH_EXCEEDED:
-		case X509_V_ERR_INVALID_PURPOSE:
-		case X509_V_ERR_UNABLE_TO_GET_CRL:
-			ok = 1;
-			log_tag = LLV_WARNING;
-			break;
-		default:
-			log_tag = LLV_ERROR;
-		}
-		plog(log_tag, LOCATION, NULL,
-			"%s(%d) at depth:%d SubjectName:%s\n",
-			X509_verify_cert_error_string(error),
-			error,
-			X509_STORE_CTX_get_error_depth(ctx),
-			buf);
-	}
-	ERR_clear_error();
-
-	return ok;
-}
-
-/*
- * callback function for verifing remote certificates.
- * this function is derived from cb() in openssl/apps/s_server.c
- */
-static int
-cb_check_cert_remote(ok, ctx)
-	int ok;
-	X509_STORE_CTX *ctx;
-{
-	char buf[256];
-	int log_tag;
-
-	if (!ok) {
-		X509_NAME_oneline(
-				X509_get_subject_name(X509_STORE_CTX_get_current_cert(ctx)),
-				buf,
-				256);
-		int error = X509_STORE_CTX_get_error(ctx);
-		switch (error) {
-		case X509_V_ERR_UNABLE_TO_GET_CRL:
-			ok = 1;
-			log_tag = LLV_WARNING;
-			break;
-		default:
-			log_tag = LLV_ERROR;
-		}
-		plog(log_tag, LOCATION, NULL,
-			"%s(%d) at depth:%d SubjectName:%s\n",
-			X509_verify_cert_error_string(error),
-			error,
-			X509_STORE_CTX_get_error_depth(ctx),
-			buf);
-	}
-	ERR_clear_error();
-
-	return ok;
-}
-
-/*
- * get a subjectAltName from X509 certificate.
- */
-vchar_t *
-eay_get_x509asn1subjectname(cert)
-	vchar_t *cert;
-{
-	X509 *x509 = NULL;
-	u_char *bp;
-	vchar_t *name = NULL;
-	int len;
-
-	bp = (unsigned char *) cert->v;
-
-	x509 = mem2x509(cert);
-	if (x509 == NULL)
-		goto error;
-
-	/* get the length of the name */
-	len = i2d_X509_NAME(X509_get_subject_name(x509), NULL);
-	name = vmalloc(len);
-	if (!name)
-		goto error;
-	/* get the name */
-	bp = (unsigned char *) name->v;
-	len = i2d_X509_NAME(X509_get_subject_name(x509), &bp);
-
-	X509_free(x509);
-
-	return name;
-
-error:
-	plog(LLV_ERROR, LOCATION, NULL, "%s\n", eay_strerror());
-
-	if (name != NULL) 
-		vfree(name);
-
-	if (x509 != NULL)
-		X509_free(x509);
-
-	return NULL;
-}
-
-/*
- * get the subjectAltName from X509 certificate.
- * the name must be terminated by '\0'.
- */
-int
-eay_get_x509subjectaltname(cert, altname, type, pos)
-	vchar_t *cert;
-	char **altname;
-	int *type;
-	int pos;
-{
-	X509 *x509 = NULL;
-	GENERAL_NAMES *gens = NULL;
-	GENERAL_NAME *gen;
-	int len;
-	int error = -1;
-
-	*altname = NULL;
-	*type = GENT_OTHERNAME;
-
-	x509 = mem2x509(cert);
-	if (x509 == NULL)
-		goto end;
-
-	gens = X509_get_ext_d2i(x509, NID_subject_alt_name, NULL, NULL);
-	if (gens == NULL)
-		goto end;
-
-	/* there is no data at "pos" */
-	if (pos > sk_GENERAL_NAME_num(gens))
-		goto end;
-
-	gen = sk_GENERAL_NAME_value(gens, pos - 1);
-
-	/* read DNSName / Email */
-	if (gen->type == GEN_DNS	||
-		gen->type == GEN_EMAIL	||
-		gen->type == GEN_URI )
-	{
-		/* make sure if the data is terminated by '\0'. */
-		if (ASN1_STRING_get0_data(gen->d.ia5)[ASN1_STRING_length(gen->d.ia5)] != '\0')
-		{
-			plog(LLV_ERROR, LOCATION, NULL,
-				 "data is not terminated by NUL.");
-			racoon_hexdump(ASN1_STRING_get0_data(gen->d.ia5), ASN1_STRING_length(gen->d.ia5) + 1);
-			goto end;
-		}
-		
-		len = ASN1_STRING_length(gen->d.ia5) + 1;
-		*altname = racoon_malloc(len);
-		if (!*altname)
-			goto end;
-		
-		strlcpy(*altname, (const char *) ASN1_STRING_get0_data(gen->d.ia5), len);
-		*type = gen->type;
-		error = 0;
-	}
-	/* read IP address */
-	else if (gen->type == GEN_IPADD)
-	{
-		const unsigned char *ip;
-		
-		/* only support IPv4 */
-		if (ASN1_STRING_length(gen->d.ip) != 4)
-			goto end;
-		
-		/* convert Octet String to String
-		 * XXX ???????
-		 */
-		/*i2d_ASN1_OCTET_STRING(gen->d.ip,&ip);*/
-		ip = ASN1_STRING_get0_data(gen->d.ip);
-
-		/* XXX Magic, enough for an IPv4 address
-		 */
-		*altname = racoon_malloc(20);
-		if (!*altname)
-			goto end;
-		
-		sprintf(*altname, "%u.%u.%u.%u", ip[0], ip[1], ip[2], ip[3]);
-		*type = gen->type;
-		error = 0;
-	}
-	/* XXX other possible types ?
-	 * For now, error will be -1 if unsupported type
-	 */
-
-end:
-	if (error) {
-		if (*altname) {
-			racoon_free(*altname);
-			*altname = NULL;
-		}
-		plog(LLV_ERROR, LOCATION, NULL, "%s\n", eay_strerror());
-	}
-	if (x509)
-		X509_free(x509);
-	if (gens)
-		/* free the whole stack. */
-		sk_GENERAL_NAME_pop_free(gens, GENERAL_NAME_free);
-
-	return error;
-}
-
-
-/*
- * decode a X509 certificate and make a readable text terminated '\n'.
- * return the buffer allocated, so must free it later.
- */
-char *
-eay_get_x509text(cert)
-	vchar_t *cert;
-{
-	X509 *x509 = NULL;
-	BIO *bio = NULL;
-	char *text = NULL;
-	u_char *bp = NULL;
-	int len = 0;
-	int error = -1;
-
-	x509 = mem2x509(cert);
-	if (x509 == NULL)
-		goto end;
-
-	bio = BIO_new(BIO_s_mem());
-	if (bio == NULL)
-		goto end;
-
-	error = X509_print(bio, x509);
-	if (error != 1) {
-		error = -1;
-		goto end;
-	}
-
-#if defined(ANDROID_CHANGES)
-	len = BIO_get_mem_data(bio, (char**) &bp);
-#else
-	len = BIO_get_mem_data(bio, &bp);
-#endif
-	text = racoon_malloc(len + 1);
-	if (text == NULL)
-		goto end;
-	memcpy(text, bp, len);
-	text[len] = '\0';
-
-	error = 0;
-
-    end:
-	if (error) {
-		if (text) {
-			racoon_free(text);
-			text = NULL;
-		}
-		plog(LLV_ERROR, LOCATION, NULL, "%s\n", eay_strerror());
-	}
-	if (bio)
-		BIO_free(bio);
-	if (x509)
-		X509_free(x509);
-
-	return text;
-}
-
-/* get X509 structure from buffer. */
-static X509 *
-mem2x509(cert)
-	vchar_t *cert;
-{
-	X509 *x509;
-
-#ifndef EAYDEBUG
-    {
-	u_char *bp;
-
-	bp = (unsigned char *) cert->v;
-
-	x509 = d2i_X509(NULL, (void *)&bp, cert->l);
-    }
-#else
-    {
-	BIO *bio;
-	int len;
-
-	bio = BIO_new(BIO_s_mem());
-	if (bio == NULL)
-		return NULL;
-	len = BIO_write(bio, cert->v, cert->l);
-	if (len == -1)
-		return NULL;
-	x509 = PEM_read_bio_X509(bio, NULL, NULL, NULL);
-	BIO_free(bio);
-    }
-#endif
-	return x509;
-}
-
-/*
- * get a X509 certificate from local file.
- * a certificate must be PEM format.
- * Input:
- *	path to a certificate.
- * Output:
- *	NULL if error occured
- *	other is the cert.
- */
-vchar_t *
-eay_get_x509cert(path)
-	char *path;
-{
-	FILE *fp;
-	X509 *x509;
-	vchar_t *cert;
-	u_char *bp;
-	int len;
-	int error;
-
-#ifdef ANDROID_CHANGES
-	if (pname) {
-		BIO *bio = BIO_from_android(path);
-		if (!bio) {
-			return NULL;
-		}
-		x509 = PEM_read_bio_X509(bio, NULL, NULL, NULL);
-		BIO_free(bio);
-	} else {
-#endif
-	/* Read private key */
-	fp = fopen(path, "r");
-	if (fp == NULL)
-		return NULL;
-	x509 = PEM_read_X509(fp, NULL, NULL, NULL);
-	fclose (fp);
-#ifdef ANDROID_CHANGES
-	}
-#endif
-
-	if (x509 == NULL)
-		return NULL;
-
-	len = i2d_X509(x509, NULL);
-	cert = vmalloc(len);
-	if (cert == NULL) {
-		X509_free(x509);
-		return NULL;
-	}
-	bp = (unsigned char *) cert->v;
-	error = i2d_X509(x509, &bp);
-	X509_free(x509);
-
-	if (error == 0) {
-		vfree(cert);
-		return NULL;
-	}
-
-	return cert;
-}
-
-/*
- * check a X509 signature
- *	XXX: to be get hash type from my cert ?
- *		to be handled EVP_dss().
- * OUT: return -1 when error.
- *	0
- */
-int
-eay_check_x509sign(source, sig, cert)
-	vchar_t *source;
-	vchar_t *sig;
-	vchar_t *cert;
-{
-	X509 *x509;
-	u_char *bp;
-	EVP_PKEY *evp;
-	int res;
-
-	bp = (unsigned char *) cert->v;
-
-	x509 = d2i_X509(NULL, (void *)&bp, cert->l);
-	if (x509 == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "d2i_X509(): %s\n", eay_strerror());
-		return -1;
-	}
-
-	evp = X509_get_pubkey(x509);
-	if (! evp) {
-		plog(LLV_ERROR, LOCATION, NULL, "X509_get_pubkey(): %s\n", eay_strerror());
-		X509_free(x509);
-		return -1;
-	}
-
-	res = eay_rsa_verify(source, sig, EVP_PKEY_get0_RSA(evp));
-
-	EVP_PKEY_free(evp);
-	X509_free(x509);
-
-	return res;
-}
-
-/*
- * check RSA signature
- * OUT: return -1 when error.
- *	0 on success
- */
-int
-eay_check_rsasign(source, sig, rsa)
-	vchar_t *source;
-	vchar_t *sig;
-	RSA *rsa;
-{
-	return eay_rsa_verify(source, sig, rsa);
-}
-
-/*
- * get PKCS#1 Private Key of PEM format from local file.
- */
-vchar_t *
-eay_get_pkcs1privkey(path)
-	char *path;
-{
-	FILE *fp;
-	EVP_PKEY *evp = NULL;
-	vchar_t *pkey = NULL;
-	u_char *bp;
-	int pkeylen;
-	int error = -1;
-
-#ifdef ANDROID_CHANGES
-	if (pname) {
-		BIO *bio = BIO_from_android(path);
-		if (!bio) {
-			return NULL;
-		}
-		evp = PEM_read_bio_PrivateKey(bio, NULL, NULL, NULL);
-		BIO_free(bio);
-	} else {
-#endif
-	/* Read private key */
-	fp = fopen(path, "r");
-	if (fp == NULL)
-		return NULL;
-
-	evp = PEM_read_PrivateKey(fp, NULL, NULL, NULL);
-
-	fclose (fp);
-#ifdef ANDROID_CHANGES
-	}
-#endif
-
-	if (evp == NULL)
-		return NULL;
-
-	pkeylen = i2d_PrivateKey(evp, NULL);
-	if (pkeylen == 0)
-		goto end;
-	pkey = vmalloc(pkeylen);
-	if (pkey == NULL)
-		goto end;
-	bp = (unsigned char *) pkey->v;
-	pkeylen = i2d_PrivateKey(evp, &bp);
-	if (pkeylen == 0)
-		goto end;
-
-	error = 0;
-
-end:
-	if (evp != NULL)
-		EVP_PKEY_free(evp);
-	if (error != 0 && pkey != NULL) {
-		vfree(pkey);
-		pkey = NULL;
-	}
-
-	return pkey;
-}
-
-/*
- * get PKCS#1 Public Key of PEM format from local file.
- */
-vchar_t *
-eay_get_pkcs1pubkey(path)
-	char *path;
-{
-	FILE *fp;
-	EVP_PKEY *evp = NULL;
-	vchar_t *pkey = NULL;
-	X509 *x509 = NULL;
-	u_char *bp;
-	int pkeylen;
-	int error = -1;
-
-	/* Read private key */
-	fp = fopen(path, "r");
-	if (fp == NULL)
-		return NULL;
-
-	x509 = PEM_read_X509(fp, NULL, NULL, NULL);
-
-	fclose (fp);
-
-	if (x509 == NULL)
-		return NULL;
-  
-	/* Get public key - eay */
-	evp = X509_get_pubkey(x509);
-	if (evp == NULL)
-		return NULL;
-
-	pkeylen = i2d_PublicKey(evp, NULL);
-	if (pkeylen == 0)
-		goto end;
-	pkey = vmalloc(pkeylen);
-	if (pkey == NULL)
-		goto end;
-	bp = (unsigned char *) pkey->v;
-	pkeylen = i2d_PublicKey(evp, &bp);
-	if (pkeylen == 0)
-		goto end;
-
-	error = 0;
-end:
-	if (evp != NULL)
-		EVP_PKEY_free(evp);
-	if (error != 0 && pkey != NULL) {
-		vfree(pkey);
-		pkey = NULL;
-	}
-
-	return pkey;
-}
-
-vchar_t *
-eay_get_x509sign(src, privkey)
-	vchar_t *src, *privkey;
-{
-	EVP_PKEY *evp;
-	u_char *bp = (unsigned char *) privkey->v;
-	vchar_t *sig = NULL;
-	int len;
-	int pad = RSA_PKCS1_PADDING;
-
-	/* XXX to be handled EVP_PKEY_DSA */
-	evp = d2i_PrivateKey(EVP_PKEY_RSA, NULL, (void *)&bp, privkey->l);
-	if (evp == NULL)
-		return NULL;
-
-	sig = eay_rsa_sign(src, EVP_PKEY_get0_RSA(evp));
-
-	EVP_PKEY_free(evp);
-
-	return sig;
-}
-
-vchar_t *
-eay_get_rsasign(src, rsa)
-	vchar_t *src;
-	RSA *rsa;
-{
-	return eay_rsa_sign(src, rsa);
-}
-
-vchar_t *
-eay_rsa_sign(vchar_t *src, RSA *rsa)
-{
-	int len;
-	vchar_t *sig = NULL;
-	int pad = RSA_PKCS1_PADDING;
-
-	len = RSA_size(rsa);
-
-	sig = vmalloc(len);
-	if (sig == NULL)
-		return NULL;
-
-	len = RSA_private_encrypt(src->l, (unsigned char *) src->v, 
-			(unsigned char *) sig->v, rsa, pad);
-
-	if (len == 0 || len != sig->l) {
-		vfree(sig);
-		sig = NULL;
-	}
-
-	return sig;
-}
-
-int
-eay_rsa_verify(src, sig, rsa)
-	vchar_t *src, *sig;
-	RSA *rsa;
-{
-	vchar_t *xbuf = NULL;
-	int pad = RSA_PKCS1_PADDING;
-	int len = 0;
-	int error;
-
-	len = RSA_size(rsa);
-	xbuf = vmalloc(len);
-	if (xbuf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "%s\n", eay_strerror());
-		return -1;
-	}
-
-	len = RSA_public_decrypt(sig->l, (unsigned char *) sig->v, 
-			(unsigned char *) xbuf->v, rsa, pad);
-	if (len == 0 || len != src->l) {
-		plog(LLV_ERROR, LOCATION, NULL, "%s\n", eay_strerror());
-		vfree(xbuf);
-		return -1;
-	}
-
-	error = memcmp(src->v, xbuf->v, src->l);
-	vfree(xbuf);
-	if (error != 0)
-		return -1;
-
-	return 0;
-}
-
-/*
- * get error string
- * MUST load ERR_load_crypto_strings() first.
- */
-char *
-eay_strerror()
-{
-	static char ebuf[512];
-	int len = 0, n;
-	unsigned long l;
-	char buf[200];
-	const char *file, *data;
-	int line, flags;
-	unsigned long es;
-
-#if defined(ANDROID_CHANGES)
-	es = 0;
-#else
-	es = CRYPTO_thread_id();
-#endif
-
-	while ((l = ERR_get_error_line_data(&file, &line, &data, &flags)) != 0){
-		n = snprintf(ebuf + len, sizeof(ebuf) - len,
-				"%lu:%s:%s:%d:%s ",
-				es, ERR_error_string(l, buf), file, line,
-				(flags & ERR_TXT_STRING) ? data : "");
-		if (n < 0 || n >= sizeof(ebuf) - len)
-			break;
-		len += n;
-		if (sizeof(ebuf) < len)
-			break;
-	}
-
-	return ebuf;
-}
-
-vchar_t *
-evp_crypt(vchar_t *data, vchar_t *key, vchar_t *iv, const EVP_CIPHER *e, int enc)
-{
-	vchar_t *res;
-	EVP_CIPHER_CTX ctx;
-
-	if (!e)
-		return NULL;
-
-	if (data->l % EVP_CIPHER_block_size(e))
-		return NULL;
-
-	if ((res = vmalloc(data->l)) == NULL)
-		return NULL;
-
-	EVP_CIPHER_CTX_init(&ctx);
-
-#if !defined(OPENSSL_IS_BORINGSSL)
-	switch(EVP_CIPHER_nid(e)){
-	case NID_bf_cbc:
-	case NID_bf_ecb:
-	case NID_bf_cfb64:
-	case NID_bf_ofb64:
-	case NID_cast5_cbc:
-	case NID_cast5_ecb:
-	case NID_cast5_cfb64:
-	case NID_cast5_ofb64:
-		/* XXX: can we do that also for algos with a fixed key size ?
-		 */
-		/* init context without key/iv
-         */
-        if (!EVP_CipherInit(&ctx, e, NULL, NULL, enc))
-        {
-            OpenSSL_BUG();
-            vfree(res);
-            return NULL;
-        }
-		
-        /* update key size
-         */
-        if (!EVP_CIPHER_CTX_set_key_length(&ctx, key->l))
-        {
-            OpenSSL_BUG();
-            vfree(res);
-            return NULL;
-        }
-
-        /* finalize context init with desired key size
-         */
-        if (!EVP_CipherInit(&ctx, NULL, (u_char *) key->v,
-							(u_char *) iv->v, enc))
-        {
-            OpenSSL_BUG();
-            vfree(res);
-            return NULL;
-		}
-		break;
-	default:
-#endif  /* OPENSSL_IS_BORINGSSL */
-		if (!EVP_CipherInit(&ctx, e, (u_char *) key->v, 
-							(u_char *) iv->v, enc)) {
-			OpenSSL_BUG();
-			vfree(res);
-			return NULL;
-		}
-#if !defined(OPENSSL_IS_BORINGSSL)
-	}
-#endif
-
-	/* disable openssl padding */
-	EVP_CIPHER_CTX_set_padding(&ctx, 0); 
-	
-	if (!EVP_Cipher(&ctx, (u_char *) res->v, (u_char *) data->v, data->l)) {
-		OpenSSL_BUG();
-		vfree(res);
-		return NULL;
-	}
-
-	EVP_CIPHER_CTX_cleanup(&ctx);
-
-	return res;
-}
-
-int
-evp_weakkey(vchar_t *key, const EVP_CIPHER *e)
-{
-	return 0;
-}
-
-int
-evp_keylen(int len, const EVP_CIPHER *e)
-{
-	if (!e)
-		return -1;
-	/* EVP functions return lengths in bytes, ipsec-tools
-	 * uses lengths in bits, therefore conversion is required. --AK
-	 */
-	if (len != 0 && len != (EVP_CIPHER_key_length(e) << 3))
-		return -1;
-	
-	return EVP_CIPHER_key_length(e) << 3;
-}
-
-/*
- * DES-CBC
- */
-vchar_t *
-eay_des_encrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, EVP_des_cbc(), 1);
-}
-
-vchar_t *
-eay_des_decrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, EVP_des_cbc(), 0);
-}
-
-#if defined(OPENSSL_IS_BORINGSSL)
-/* BoringSSL doesn't implement DES_is_weak_key because the concept is nonsense.
- * Thankfully, ipsec-tools never actually uses the result of this function. */
-static int
-DES_is_weak_key(const DES_cblock *key)
-{
-	return 0;
-}
-#endif  /* OPENSSL_IS_BORINGSSL */
-
-int
-eay_des_weakkey(key)
-	vchar_t *key;
-{
-#ifdef USE_NEW_DES_API
-	return DES_is_weak_key((void *)key->v);
-#else
-	return des_is_weak_key((void *)key->v);
-#endif
-}
-
-int
-eay_des_keylen(len)
-	int len;
-{
-	return evp_keylen(len, EVP_des_cbc());
-}
-
-#ifdef HAVE_OPENSSL_IDEA_H
-/*
- * IDEA-CBC
- */
-vchar_t *
-eay_idea_encrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	vchar_t *res;
-	IDEA_KEY_SCHEDULE ks;
-
-	idea_set_encrypt_key((unsigned char *)key->v, &ks);
-
-	/* allocate buffer for result */
-	if ((res = vmalloc(data->l)) == NULL)
-		return NULL;
-
-	/* decryption data */
-	idea_cbc_encrypt((unsigned char *)data->v, (unsigned char *)res->v, data->l,
-			&ks, (unsigned char *)iv->v, IDEA_ENCRYPT);
-
-	return res;
-}
-
-vchar_t *
-eay_idea_decrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	vchar_t *res;
-	IDEA_KEY_SCHEDULE ks, dks;
-
-	idea_set_encrypt_key((unsigned char *)key->v, &ks);
-	idea_set_decrypt_key(&ks, &dks);
-
-	/* allocate buffer for result */
-	if ((res = vmalloc(data->l)) == NULL)
-		return NULL;
-
-	/* decryption data */
-	idea_cbc_encrypt((unsigned char *)data->v, (unsigned char *)res->v, data->l,
-			&dks, (unsigned char *)iv->v, IDEA_DECRYPT);
-
-	return res;
-}
-
-int
-eay_idea_weakkey(key)
-	vchar_t *key;
-{
-	return 0;       /* XXX */
-}
-
-int
-eay_idea_keylen(len)
-	int len;
-{
-	if (len != 0 && len != 128)
-		return -1;
-	return 128;
-}
-#endif
-
-/*
- * BLOWFISH-CBC
- */
-vchar_t *
-eay_bf_encrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, EVP_bf_cbc(), 1);
-}
-
-vchar_t *
-eay_bf_decrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, EVP_bf_cbc(), 0);
-}
-
-int
-eay_bf_weakkey(key)
-	vchar_t *key;
-{
-	return 0;	/* XXX to be done. refer to RFC 2451 */
-}
-
-int
-eay_bf_keylen(len)
-	int len;
-{
-	if (len == 0)
-		return 448;
-	if (len < 40 || len > 448)
-		return -1;
-	return len;
-}
-
-#ifdef HAVE_OPENSSL_RC5_H
-/*
- * RC5-CBC
- */
-vchar_t *
-eay_rc5_encrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	vchar_t *res;
-	RC5_32_KEY ks;
-
-	/* in RFC 2451, there is information about the number of round. */
-	RC5_32_set_key(&ks, key->l, (unsigned char *)key->v, 16);
-
-	/* allocate buffer for result */
-	if ((res = vmalloc(data->l)) == NULL)
-		return NULL;
-
-	/* decryption data */
-	RC5_32_cbc_encrypt((unsigned char *)data->v, (unsigned char *)res->v, data->l,
-		&ks, (unsigned char *)iv->v, RC5_ENCRYPT);
-
-	return res;
-}
-
-vchar_t *
-eay_rc5_decrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	vchar_t *res;
-	RC5_32_KEY ks;
-
-	/* in RFC 2451, there is information about the number of round. */
-	RC5_32_set_key(&ks, key->l, (unsigned char *)key->v, 16);
-
-	/* allocate buffer for result */
-	if ((res = vmalloc(data->l)) == NULL)
-		return NULL;
-
-	/* decryption data */
-	RC5_32_cbc_encrypt((unsigned char *)data->v, (unsigned char *)res->v, data->l,
-		&ks, (unsigned char *)iv->v, RC5_DECRYPT);
-
-	return res;
-}
-
-int
-eay_rc5_weakkey(key)
-	vchar_t *key;
-{
-	return 0;       /* No known weak keys when used with 16 rounds. */
-
-}
-
-int
-eay_rc5_keylen(len)
-	int len;
-{
-	if (len == 0)
-		return 128;
-	if (len < 40 || len > 2040)
-		return -1;
-	return len;
-}
-#endif
-
-/*
- * 3DES-CBC
- */
-vchar_t *
-eay_3des_encrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, EVP_des_ede3_cbc(), 1);
-}
-
-vchar_t *
-eay_3des_decrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, EVP_des_ede3_cbc(), 0);
-}
-
-int
-eay_3des_weakkey(key)
-	vchar_t *key;
-{
-#ifdef USE_NEW_DES_API
-	return (DES_is_weak_key((void *)key->v) ||
-	    DES_is_weak_key((void *)(key->v + 8)) ||
-	    DES_is_weak_key((void *)(key->v + 16)));
-#else
-	if (key->l < 24)
-		return 0;
-
-	return (des_is_weak_key((void *)key->v) ||
-	    des_is_weak_key((void *)(key->v + 8)) ||
-	    des_is_weak_key((void *)(key->v + 16)));
-#endif
-}
-
-int
-eay_3des_keylen(len)
-	int len;
-{
-	if (len != 0 && len != 192)
-		return -1;
-	return 192;
-}
-
-/*
- * CAST-CBC
- */
-vchar_t *
-eay_cast_encrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, EVP_cast5_cbc(), 1);
-}
-
-vchar_t *
-eay_cast_decrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, EVP_cast5_cbc(), 0);
-}
-
-int
-eay_cast_weakkey(key)
-	vchar_t *key;
-{
-	return 0;	/* No known weak keys. */
-}
-
-int
-eay_cast_keylen(len)
-	int len;
-{
-	if (len == 0)
-		return 128;
-	if (len < 40 || len > 128)
-		return -1;
-	return len;
-}
-
-/*
- * AES(RIJNDAEL)-CBC
- */
-#ifndef HAVE_OPENSSL_AES_H
-vchar_t *
-eay_aes_encrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	vchar_t *res;
-	keyInstance k;
-	cipherInstance c;
-
-	memset(&k, 0, sizeof(k));
-	if (rijndael_makeKey(&k, DIR_ENCRYPT, key->l << 3, key->v) < 0)
-		return NULL;
-
-	/* allocate buffer for result */
-	if ((res = vmalloc(data->l)) == NULL)
-		return NULL;
-
-	/* encryption data */
-	memset(&c, 0, sizeof(c));
-	if (rijndael_cipherInit(&c, MODE_CBC, iv->v) < 0){
-		vfree(res);
-		return NULL;
-	}
-	if (rijndael_blockEncrypt(&c, &k, data->v, data->l << 3, res->v) < 0){
-		vfree(res);
-		return NULL;
-	}
-
-	return res;
-}
-
-vchar_t *
-eay_aes_decrypt(data, key, iv)
-	vchar_t *data, *key, *iv;
-{
-	vchar_t *res;
-	keyInstance k;
-	cipherInstance c;
-
-	memset(&k, 0, sizeof(k));
-	if (rijndael_makeKey(&k, DIR_DECRYPT, key->l << 3, key->v) < 0)
-		return NULL;
-
-	/* allocate buffer for result */
-	if ((res = vmalloc(data->l)) == NULL)
-		return NULL;
-
-	/* decryption data */
-	memset(&c, 0, sizeof(c));
-	if (rijndael_cipherInit(&c, MODE_CBC, iv->v) < 0){
-		vfree(res);
-		return NULL;
-	}
-	if (rijndael_blockDecrypt(&c, &k, data->v, data->l << 3, res->v) < 0){
-		vfree(res);
-		return NULL;
-	}
-
-	return res;
-}
-#else
-static inline const EVP_CIPHER *
-aes_evp_by_keylen(int keylen)
-{
-	switch(keylen) {
-		case 16:
-		case 128:
-			return EVP_aes_128_cbc();
-#if !defined(ANDROID_CHANGES)
-		case 24:
-		case 192:
-			return EVP_aes_192_cbc();
-#endif
-		case 32:
-		case 256:
-			return EVP_aes_256_cbc();
-		default:
-			return NULL;
-	}
-}
-
-vchar_t *
-eay_aes_encrypt(data, key, iv)
-       vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, aes_evp_by_keylen(key->l), 1);
-}
-
-vchar_t *
-eay_aes_decrypt(data, key, iv)
-       vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, aes_evp_by_keylen(key->l), 0);
-}
-#endif
-
-int
-eay_aes_weakkey(key)
-	vchar_t *key;
-{
-	return 0;
-}
-
-int
-eay_aes_keylen(len)
-	int len;
-{
-	if (len == 0)
-		return 128;
-	if (len != 128 && len != 192 && len != 256)
-		return -1;
-	return len;
-}
-
-#if defined(HAVE_OPENSSL_CAMELLIA_H)
-/*
- * CAMELLIA-CBC
- */
-static inline const EVP_CIPHER *
-camellia_evp_by_keylen(int keylen)
-{
-	switch(keylen) {
-		case 16:
-		case 128:
-			return EVP_camellia_128_cbc();
-		case 24:
-		case 192:
-			return EVP_camellia_192_cbc();
-		case 32:
-		case 256:
-			return EVP_camellia_256_cbc();
-		default:
-			return NULL;
-	}
-}
-
-vchar_t *
-eay_camellia_encrypt(data, key, iv)
-       vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, camellia_evp_by_keylen(key->l), 1);
-}
-
-vchar_t *
-eay_camellia_decrypt(data, key, iv)
-       vchar_t *data, *key, *iv;
-{
-	return evp_crypt(data, key, iv, camellia_evp_by_keylen(key->l), 0);
-}
-
-int
-eay_camellia_weakkey(key)
-	vchar_t *key;
-{
-	return 0;
-}
-
-int
-eay_camellia_keylen(len)
-	int len;
-{
-	if (len == 0)
-		return 128;
-	if (len != 128 && len != 192 && len != 256)
-		return -1;
-	return len;
-}
-
-#endif
-
-/* for ipsec part */
-int
-eay_null_hashlen()
-{
-	return 0;
-}
-
-int
-eay_kpdk_hashlen()
-{
-	return 0;
-}
-
-int
-eay_twofish_keylen(len)
-	int len;
-{
-	if (len < 0 || len > 256)
-		return -1;
-	return len;
-}
-
-int
-eay_null_keylen(len)
-	int len;
-{
-	return 0;
-}
-
-/*
- * HMAC functions
- */
-static caddr_t
-eay_hmac_init(key, md)
-	vchar_t *key;
-	const EVP_MD *md;
-{
-	HMAC_CTX *c = racoon_malloc(sizeof(*c));
-
-	HMAC_Init(c, key->v, key->l, md);
-
-	return (caddr_t)c;
-}
-
-#ifdef WITH_SHA2
-/*
- * HMAC SHA2-512
- */
-vchar_t *
-eay_hmacsha2_512_one(key, data)
-	vchar_t *key, *data;
-{
-	vchar_t *res;
-	caddr_t ctx;
-
-	ctx = eay_hmacsha2_512_init(key);
-	eay_hmacsha2_512_update(ctx, data);
-	res = eay_hmacsha2_512_final(ctx);
-
-	return(res);
-}
-
-caddr_t
-eay_hmacsha2_512_init(key)
-	vchar_t *key;
-{
-	return eay_hmac_init(key, EVP_sha2_512());
-}
-
-void
-eay_hmacsha2_512_update(c, data)
-	caddr_t c;
-	vchar_t *data;
-{
-	HMAC_Update((HMAC_CTX *)c, (unsigned char *) data->v, data->l);
-}
-
-vchar_t *
-eay_hmacsha2_512_final(c)
-	caddr_t c;
-{
-	vchar_t *res;
-	unsigned int l;
-
-	if ((res = vmalloc(SHA512_DIGEST_LENGTH)) == 0)
-		return NULL;
-
-	HMAC_Final((HMAC_CTX *)c, (unsigned char *) res->v, &l);
-	res->l = l;
-	HMAC_cleanup((HMAC_CTX *)c);
-	(void)racoon_free(c);
-
-	if (SHA512_DIGEST_LENGTH != res->l) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"hmac sha2_512 length mismatch %zd.\n", res->l);
-		vfree(res);
-		return NULL;
-	}
-
-	return(res);
-}
-
-/*
- * HMAC SHA2-384
- */
-vchar_t *
-eay_hmacsha2_384_one(key, data)
-	vchar_t *key, *data;
-{
-	vchar_t *res;
-	caddr_t ctx;
-
-	ctx = eay_hmacsha2_384_init(key);
-	eay_hmacsha2_384_update(ctx, data);
-	res = eay_hmacsha2_384_final(ctx);
-
-	return(res);
-}
-
-caddr_t
-eay_hmacsha2_384_init(key)
-	vchar_t *key;
-{
-	return eay_hmac_init(key, EVP_sha2_384());
-}
-
-void
-eay_hmacsha2_384_update(c, data)
-	caddr_t c;
-	vchar_t *data;
-{
-	HMAC_Update((HMAC_CTX *)c, (unsigned char *) data->v, data->l);
-}
-
-vchar_t *
-eay_hmacsha2_384_final(c)
-	caddr_t c;
-{
-	vchar_t *res;
-	unsigned int l;
-
-	if ((res = vmalloc(SHA384_DIGEST_LENGTH)) == 0)
-		return NULL;
-
-	HMAC_Final((HMAC_CTX *)c, (unsigned char *) res->v, &l);
-	res->l = l;
-	HMAC_cleanup((HMAC_CTX *)c);
-	(void)racoon_free(c);
-
-	if (SHA384_DIGEST_LENGTH != res->l) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"hmac sha2_384 length mismatch %zd.\n", res->l);
-		vfree(res);
-		return NULL;
-	}
-
-	return(res);
-}
-
-/*
- * HMAC SHA2-256
- */
-vchar_t *
-eay_hmacsha2_256_one(key, data)
-	vchar_t *key, *data;
-{
-	vchar_t *res;
-	caddr_t ctx;
-
-	ctx = eay_hmacsha2_256_init(key);
-	eay_hmacsha2_256_update(ctx, data);
-	res = eay_hmacsha2_256_final(ctx);
-
-	return(res);
-}
-
-caddr_t
-eay_hmacsha2_256_init(key)
-	vchar_t *key;
-{
-	return eay_hmac_init(key, EVP_sha2_256());
-}
-
-void
-eay_hmacsha2_256_update(c, data)
-	caddr_t c;
-	vchar_t *data;
-{
-	HMAC_Update((HMAC_CTX *)c, (unsigned char *) data->v, data->l);
-}
-
-vchar_t *
-eay_hmacsha2_256_final(c)
-	caddr_t c;
-{
-	vchar_t *res;
-	unsigned int l;
-
-	if ((res = vmalloc(SHA256_DIGEST_LENGTH)) == 0)
-		return NULL;
-
-	HMAC_Final((HMAC_CTX *)c, (unsigned char *) res->v, &l);
-	res->l = l;
-	HMAC_cleanup((HMAC_CTX *)c);
-	(void)racoon_free(c);
-
-	if (SHA256_DIGEST_LENGTH != res->l) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"hmac sha2_256 length mismatch %zd.\n", res->l);
-		vfree(res);
-		return NULL;
-	}
-
-	return(res);
-}
-#endif	/* WITH_SHA2 */
-
-/*
- * HMAC SHA1
- */
-vchar_t *
-eay_hmacsha1_one(key, data)
-	vchar_t *key, *data;
-{
-	vchar_t *res;
-	caddr_t ctx;
-
-	ctx = eay_hmacsha1_init(key);
-	eay_hmacsha1_update(ctx, data);
-	res = eay_hmacsha1_final(ctx);
-
-	return(res);
-}
-
-caddr_t
-eay_hmacsha1_init(key)
-	vchar_t *key;
-{
-	return eay_hmac_init(key, EVP_sha1());
-}
-
-void
-eay_hmacsha1_update(c, data)
-	caddr_t c;
-	vchar_t *data;
-{
-	HMAC_Update((HMAC_CTX *)c, (unsigned char *) data->v, data->l);
-}
-
-vchar_t *
-eay_hmacsha1_final(c)
-	caddr_t c;
-{
-	vchar_t *res;
-	unsigned int l;
-
-	if ((res = vmalloc(SHA_DIGEST_LENGTH)) == 0)
-		return NULL;
-
-	HMAC_Final((HMAC_CTX *)c, (unsigned char *) res->v, &l);
-	res->l = l;
-	HMAC_cleanup((HMAC_CTX *)c);
-	(void)racoon_free(c);
-
-	if (SHA_DIGEST_LENGTH != res->l) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"hmac sha1 length mismatch %zd.\n", res->l);
-		vfree(res);
-		return NULL;
-	}
-
-	return(res);
-}
-
-/*
- * HMAC MD5
- */
-vchar_t *
-eay_hmacmd5_one(key, data)
-	vchar_t *key, *data;
-{
-	vchar_t *res;
-	caddr_t ctx;
-
-	ctx = eay_hmacmd5_init(key);
-	eay_hmacmd5_update(ctx, data);
-	res = eay_hmacmd5_final(ctx);
-
-	return(res);
-}
-
-caddr_t
-eay_hmacmd5_init(key)
-	vchar_t *key;
-{
-	return eay_hmac_init(key, EVP_md5());
-}
-
-void
-eay_hmacmd5_update(c, data)
-	caddr_t c;
-	vchar_t *data;
-{
-	HMAC_Update((HMAC_CTX *)c, (unsigned char *) data->v, data->l);
-}
-
-vchar_t *
-eay_hmacmd5_final(c)
-	caddr_t c;
-{
-	vchar_t *res;
-	unsigned int l;
-
-	if ((res = vmalloc(MD5_DIGEST_LENGTH)) == 0)
-		return NULL;
-
-	HMAC_Final((HMAC_CTX *)c, (unsigned char *) res->v, &l);
-	res->l = l;
-	HMAC_cleanup((HMAC_CTX *)c);
-	(void)racoon_free(c);
-
-	if (MD5_DIGEST_LENGTH != res->l) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"hmac md5 length mismatch %zd.\n", res->l);
-		vfree(res);
-		return NULL;
-	}
-
-	return(res);
-}
-
-#ifdef WITH_SHA2
-/*
- * SHA2-512 functions
- */
-caddr_t
-eay_sha2_512_init()
-{
-	SHA512_CTX *c = racoon_malloc(sizeof(*c));
-
-	SHA512_Init(c);
-
-	return((caddr_t)c);
-}
-
-void
-eay_sha2_512_update(c, data)
-	caddr_t c;
-	vchar_t *data;
-{
-	SHA512_Update((SHA512_CTX *)c, (unsigned char *) data->v, data->l);
-
-	return;
-}
-
-vchar_t *
-eay_sha2_512_final(c)
-	caddr_t c;
-{
-	vchar_t *res;
-
-	if ((res = vmalloc(SHA512_DIGEST_LENGTH)) == 0)
-		return(0);
-
-	SHA512_Final((unsigned char *) res->v, (SHA512_CTX *)c);
-	(void)racoon_free(c);
-
-	return(res);
-}
-
-vchar_t *
-eay_sha2_512_one(data)
-	vchar_t *data;
-{
-	caddr_t ctx;
-	vchar_t *res;
-
-	ctx = eay_sha2_512_init();
-	eay_sha2_512_update(ctx, data);
-	res = eay_sha2_512_final(ctx);
-
-	return(res);
-}
-
-int
-eay_sha2_512_hashlen()
-{
-	return SHA512_DIGEST_LENGTH << 3;
-}
-#endif
-
-#ifdef WITH_SHA2
-/*
- * SHA2-384 functions
- */
-caddr_t
-eay_sha2_384_init()
-{
-	SHA384_CTX *c = racoon_malloc(sizeof(*c));
-
-	SHA384_Init(c);
-
-	return((caddr_t)c);
-}
-
-void
-eay_sha2_384_update(c, data)
-	caddr_t c;
-	vchar_t *data;
-{
-	SHA384_Update((SHA384_CTX *)c, (unsigned char *) data->v, data->l);
-
-	return;
-}
-
-vchar_t *
-eay_sha2_384_final(c)
-	caddr_t c;
-{
-	vchar_t *res;
-
-	if ((res = vmalloc(SHA384_DIGEST_LENGTH)) == 0)
-		return(0);
-
-	SHA384_Final((unsigned char *) res->v, (SHA384_CTX *)c);
-	(void)racoon_free(c);
-
-	return(res);
-}
-
-vchar_t *
-eay_sha2_384_one(data)
-	vchar_t *data;
-{
-	caddr_t ctx;
-	vchar_t *res;
-
-	ctx = eay_sha2_384_init();
-	eay_sha2_384_update(ctx, data);
-	res = eay_sha2_384_final(ctx);
-
-	return(res);
-}
-
-int
-eay_sha2_384_hashlen()
-{
-	return SHA384_DIGEST_LENGTH << 3;
-}
-#endif
-
-#ifdef WITH_SHA2
-/*
- * SHA2-256 functions
- */
-caddr_t
-eay_sha2_256_init()
-{
-	SHA256_CTX *c = racoon_malloc(sizeof(*c));
-
-	SHA256_Init(c);
-
-	return((caddr_t)c);
-}
-
-void
-eay_sha2_256_update(c, data)
-	caddr_t c;
-	vchar_t *data;
-{
-	SHA256_Update((SHA256_CTX *)c, (unsigned char *) data->v, data->l);
-
-	return;
-}
-
-vchar_t *
-eay_sha2_256_final(c)
-	caddr_t c;
-{
-	vchar_t *res;
-
-	if ((res = vmalloc(SHA256_DIGEST_LENGTH)) == 0)
-		return(0);
-
-	SHA256_Final((unsigned char *) res->v, (SHA256_CTX *)c);
-	(void)racoon_free(c);
-
-	return(res);
-}
-
-vchar_t *
-eay_sha2_256_one(data)
-	vchar_t *data;
-{
-	caddr_t ctx;
-	vchar_t *res;
-
-	ctx = eay_sha2_256_init();
-	eay_sha2_256_update(ctx, data);
-	res = eay_sha2_256_final(ctx);
-
-	return(res);
-}
-
-int
-eay_sha2_256_hashlen()
-{
-	return SHA256_DIGEST_LENGTH << 3;
-}
-#endif
-
-/*
- * SHA functions
- */
-caddr_t
-eay_sha1_init()
-{
-	SHA_CTX *c = racoon_malloc(sizeof(*c));
-
-	SHA1_Init(c);
-
-	return((caddr_t)c);
-}
-
-void
-eay_sha1_update(c, data)
-	caddr_t c;
-	vchar_t *data;
-{
-	SHA1_Update((SHA_CTX *)c, data->v, data->l);
-
-	return;
-}
-
-vchar_t *
-eay_sha1_final(c)
-	caddr_t c;
-{
-	vchar_t *res;
-
-	if ((res = vmalloc(SHA_DIGEST_LENGTH)) == 0)
-		return(0);
-
-	SHA1_Final((unsigned char *) res->v, (SHA_CTX *)c);
-	(void)racoon_free(c);
-
-	return(res);
-}
-
-vchar_t *
-eay_sha1_one(data)
-	vchar_t *data;
-{
-	caddr_t ctx;
-	vchar_t *res;
-
-	ctx = eay_sha1_init();
-	eay_sha1_update(ctx, data);
-	res = eay_sha1_final(ctx);
-
-	return(res);
-}
-
-int
-eay_sha1_hashlen()
-{
-	return SHA_DIGEST_LENGTH << 3;
-}
-
-/*
- * MD5 functions
- */
-caddr_t
-eay_md5_init()
-{
-	MD5_CTX *c = racoon_malloc(sizeof(*c));
-
-	MD5_Init(c);
-
-	return((caddr_t)c);
-}
-
-void
-eay_md5_update(c, data)
-	caddr_t c;
-	vchar_t *data;
-{
-	MD5_Update((MD5_CTX *)c, data->v, data->l);
-
-	return;
-}
-
-vchar_t *
-eay_md5_final(c)
-	caddr_t c;
-{
-	vchar_t *res;
-
-	if ((res = vmalloc(MD5_DIGEST_LENGTH)) == 0)
-		return(0);
-
-	MD5_Final((unsigned char *) res->v, (MD5_CTX *)c);
-	(void)racoon_free(c);
-
-	return(res);
-}
-
-vchar_t *
-eay_md5_one(data)
-	vchar_t *data;
-{
-	caddr_t ctx;
-	vchar_t *res;
-
-	ctx = eay_md5_init();
-	eay_md5_update(ctx, data);
-	res = eay_md5_final(ctx);
-
-	return(res);
-}
-
-int
-eay_md5_hashlen()
-{
-	return MD5_DIGEST_LENGTH << 3;
-}
-
-/*
- * eay_set_random
- *   size: number of bytes.
- */
-vchar_t *
-eay_set_random(size)
-	u_int32_t size;
-{
-	BIGNUM *r = NULL;
-	vchar_t *res = 0;
-
-	if ((r = BN_new()) == NULL)
-		goto end;
-	BN_rand(r, size * 8, 0, 0);
-	eay_bn2v(&res, r);
-
-end:
-	if (r)
-		BN_free(r);
-	return(res);
-}
-
-/* DH */
-int
-eay_dh_generate(prime, g, publen, pub, priv)
-	vchar_t *prime, **pub, **priv;
-	u_int publen;
-	u_int32_t g;
-{
-	BIGNUM *p = NULL, *g_bn = NULL;
-	DH *dh = NULL;
-	int error = -1;
-
-	/* initialize */
-	/* pre-process to generate number */
-	if (eay_v2bn(&p, prime) < 0)
-		goto end;
-
-	if ((dh = DH_new()) == NULL)
-		goto end;
-	if ((g_bn = BN_new()) == NULL)
-		goto end;
-	if (!BN_set_word(g_bn, g))
-		goto end;
-	if (!DH_set0_pqg(dh, p, NULL, g_bn))
-		goto end;
-	/* DH_set0_pqg takes ownership on success. */
-	p = NULL;
-	g_bn = NULL;
-
-	if (publen != 0) {
-		DH_set_length(dh, publen);
-	}
-
-	/* generate public and private number */
-	if (!DH_generate_key(dh))
-		goto end;
-
-	/* copy results to buffers */
-	if (eay_bn2v(pub, DH_get0_pub_key(dh)) < 0)
-		goto end;
-	if (eay_bn2v(priv, DH_get0_priv_key(dh)) < 0) {
-		vfree(*pub);
-		goto end;
-	}
-
-	error = 0;
-
-end:
-	if (dh != NULL)
-		DH_free(dh);
-	if (p != NULL)
-		BN_free(p);
-	if (g_bn != NULL)
-		BN_free(g_bn);
-	return(error);
-}
-
-int
-eay_dh_compute(prime, g, pub, priv, pub2, key)
-	vchar_t *prime, *pub, *priv, *pub2, **key;
-	u_int32_t g;
-{
-	BIGNUM *dh_pub = NULL;
-	BIGNUM *dh_pub2 = NULL;
-	BIGNUM *dh_priv = NULL;
-	BIGNUM *dh_p = NULL;
-	BIGNUM *dh_g = NULL;
-	DH *dh = NULL;
-	int l;
-	unsigned char *v = NULL;
-	int error = -1;
-
-	/* make public number to compute */
-	if (eay_v2bn(&dh_pub2, pub2) < 0)
-		goto end;
-
-	/* make DH structure */
-	if ((dh = DH_new()) == NULL)
-		goto end;
-	if (eay_v2bn(&dh_p, prime) < 0)
-		goto end;
-	if (eay_v2bn(&dh_pub, pub) < 0)
-		goto end;
-	if (eay_v2bn(&dh_priv, priv) < 0)
-		goto end;
-	DH_set_length(dh, pub2->l * 8);
-
-	if ((dh_g = BN_new()) == NULL)
-		goto end;
-	if (!BN_set_word(dh_g, g))
-		goto end;
-	if (!DH_set0_pqg(dh, dh_p, NULL, dh_g))
-		goto end;
-	/* DH_set0_pqg takes ownership on success. */
-	dh_p = NULL;
-	dh_g = NULL;
-	if (!DH_set0_key(dh, dh_pub, dh_priv))
-		goto end;
-	/* DH_set0_key takes ownership on success. */
-	dh_pub = NULL;
-	dh_priv = NULL;
-
-	if ((v = racoon_calloc(prime->l, sizeof(u_char))) == NULL)
-		goto end;
-	if ((l = DH_compute_key(v, dh_pub2, dh)) == -1)
-		goto end;
-	memcpy((*key)->v + (prime->l - l), v, l);
-
-	error = 0;
-
-end:
-	if (dh_pub != NULL)
-		BN_free(dh_pub);
-	if (dh_pub2 != NULL)
-		BN_free(dh_pub2);
-	if (dh_priv != NULL)
-		BN_free(dh_priv);
-	if (dh_p != NULL)
-		BN_free(dh_p);
-	if (dh_g != NULL)
-		BN_free(dh_g);
-	if (dh != NULL)
-		DH_free(dh);
-	if (v != NULL)
-		racoon_free(v);
-	return(error);
-}
-
-/*
- * convert vchar_t <-> BIGNUM.
- *
- * vchar_t: unit is u_char, network endian, most significant byte first.
- * BIGNUM: unit is BN_ULONG, each of BN_ULONG is in host endian,
- *	least significant BN_ULONG must come first.
- *
- * hex value of "0x3ffe050104" is represented as follows:
- *	vchar_t: 3f fe 05 01 04
- *	BIGNUM (BN_ULONG = u_int8_t): 04 01 05 fe 3f
- *	BIGNUM (BN_ULONG = u_int16_t): 0x0104 0xfe05 0x003f
- *	BIGNUM (BN_ULONG = u_int32_t_t): 0xfe050104 0x0000003f
- */
-int
-eay_v2bn(bn, var)
-	BIGNUM **bn;
-	vchar_t *var;
-{
-	if ((*bn = BN_bin2bn((unsigned char *) var->v, var->l, NULL)) == NULL)
-		return -1;
-
-	return 0;
-}
-
-int
-eay_bn2v(var, bn)
-	vchar_t **var;
-	const BIGNUM *bn;
-{
-#if defined(ANDROID_CHANGES)
-	*var = vmalloc(BN_num_bytes(bn));
-#else
-	*var = vmalloc(bn->top * BN_BYTES);
-#endif
-	if (*var == NULL)
-		return(-1);
-
-	(*var)->l = BN_bn2bin(bn, (unsigned char *) (*var)->v);
-
-	return 0;
-}
-
-void
-eay_init()
-{
-	OpenSSL_add_all_algorithms();
-	ERR_load_crypto_strings();
-#ifdef HAVE_OPENSSL_ENGINE_H
-	ENGINE_load_builtin_engines();
-	ENGINE_register_all_complete();
-#endif
-}
-
-vchar_t *
-base64_decode(char *in, long inlen)
-{
-#if defined(OPENSSL_IS_BORINGSSL)
-	vchar_t *res;
-	size_t decoded_size;
-
-	if (!EVP_DecodedLength(&decoded_size, inlen)) {
-		return NULL;
-	}
-	res = vmalloc(decoded_size);
-	if (res == NULL) {
-		return NULL;
-	}
-	if (!EVP_DecodeBase64((uint8_t*) res->v, &res->l, decoded_size, (uint8_t*) in, inlen)) {
-		vfree(res);
-		return NULL;
-	}
-	return res;
-#else
-	BIO *bio=NULL, *b64=NULL;
-	vchar_t *res = NULL;
-	char *outb;
-	long outlen;
-
-	outb = malloc(inlen * 2);
-	if (outb == NULL)
-		goto out;
-	bio = BIO_new_mem_buf(in, inlen);
-	b64 = BIO_new(BIO_f_base64());
-	BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
-	bio = BIO_push(b64, bio);
-
-	outlen = BIO_read(bio, outb, inlen * 2);
-	if (outlen <= 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "%s\n", eay_strerror());
-		goto out;
-	}
-
-	res = vmalloc(outlen);
-	if (!res)
-		goto out;
-
-	memcpy(res->v, outb, outlen);
-
-out:
-	if (outb)
-		free(outb);
-	if (bio)
-		BIO_free_all(bio);
-
-	return res;
-#endif
-}
-
-vchar_t *
-base64_encode(char *in, long inlen)
-{
-#if defined(OPENSSL_IS_BORINGSSL)
-	vchar_t *res;
-	size_t encoded_size;
-
-	if (!EVP_EncodedLength(&encoded_size, inlen)) {
-		return NULL;
-	}
-	res = vmalloc(encoded_size+1);
-	if (res == NULL) {
-		return NULL;
-	}
-	EVP_EncodeBlock((uint8_t*) res->v, (uint8_t*) in, inlen);
-	res->v[encoded_size] = 0;
-	return res;
-#else
-	BIO *bio=NULL, *b64=NULL;
-	char *ptr;
-	long plen = -1;
-	vchar_t *res = NULL;
-
-	bio = BIO_new(BIO_s_mem());
-	b64 = BIO_new(BIO_f_base64());
-	BIO_set_flags(b64, BIO_FLAGS_BASE64_NO_NL);
-	bio = BIO_push(b64, bio);
-
-	BIO_write(bio, in, inlen);
-	BIO_flush(bio);
-
-	plen = BIO_get_mem_data(bio, &ptr);
-	res = vmalloc(plen+1);
-	if (!res)
-		goto out;
-	
-	memcpy (res->v, ptr, plen);
-	res->v[plen] = '\0';
-
-out:	
-	if (bio)
-		BIO_free_all(bio);
-
-	return res;
-#endif
-}
-
-static RSA *
-binbuf_pubkey2rsa(vchar_t *binbuf)
-{
-	BIGNUM *exp, *mod;
-	RSA *rsa_pub = NULL;
-
-	if (binbuf->v[0] > binbuf->l - 1) {
-		plog(LLV_ERROR, LOCATION, NULL, "Plain RSA pubkey format error: decoded string doesn't make sense.\n");
-		goto out;
-	}
-
-	exp = BN_bin2bn((unsigned char *) (binbuf->v + 1), binbuf->v[0], NULL);
-	mod = BN_bin2bn((unsigned char *) (binbuf->v + binbuf->v[0] + 1), 
-			binbuf->l - binbuf->v[0] - 1, NULL);
-	rsa_pub = RSA_new();
-
-	if (!exp || !mod || !rsa_pub || !RSA_set0_key(rsa_pub, mod, exp, NULL)) {
-		plog(LLV_ERROR, LOCATION, NULL, "Plain RSA pubkey parsing error: %s\n", eay_strerror());
-		if (exp)
-			BN_free(exp);
-		if (mod)
-			BN_free(exp);
-		if (rsa_pub)
-			RSA_free(rsa_pub);
-		rsa_pub = NULL;
-		goto out;
-	}
-	/* RSA_set0_key takes ownership of mod and exp on success. */
-	
-out:
-	return rsa_pub;
-}
-
-RSA *
-base64_pubkey2rsa(char *in)
-{
-	BIGNUM *exp, *mod;
-	RSA *rsa_pub = NULL;
-	vchar_t *binbuf;
-
-	if (strncmp(in, "0s", 2) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "Plain RSA pubkey format error: doesn't start with '0s'\n");
-		return NULL;
-	}
-
-	binbuf = base64_decode(in + 2, strlen(in + 2));
-	if (!binbuf) {
-		plog(LLV_ERROR, LOCATION, NULL, "Plain RSA pubkey format error: Base64 decoding failed.\n");
-		return NULL;
-	}
-	
-	if (binbuf->v[0] > binbuf->l - 1) {
-		plog(LLV_ERROR, LOCATION, NULL, "Plain RSA pubkey format error: decoded string doesn't make sense.\n");
-		goto out;
-	}
-
-	rsa_pub = binbuf_pubkey2rsa(binbuf);
-
-out:
-	if (binbuf)
-		vfree(binbuf);
-
-	return rsa_pub;
-}
-
-RSA *
-bignum_pubkey2rsa(BIGNUM *in)
-{
-	RSA *rsa_pub = NULL;
-	vchar_t *binbuf;
-
-	binbuf = vmalloc(BN_num_bytes(in));
-	if (!binbuf) {
-		plog(LLV_ERROR, LOCATION, NULL, "Plain RSA pubkey conversion: memory allocation failed..\n");
-		return NULL;
-	}
-	
-	BN_bn2bin(in, (unsigned char *) binbuf->v);
-
-	rsa_pub = binbuf_pubkey2rsa(binbuf);
-
-out:
-	if (binbuf)
-		vfree(binbuf);
-
-	return rsa_pub;
-}
-
-u_int32_t
-eay_random()
-{
-	u_int32_t result;
-	vchar_t *vrand;
-
-	vrand = eay_set_random(sizeof(result));
-	memcpy(&result, vrand->v, sizeof(result));
-	vfree(vrand);
-
-	return result;
-}
-
-const char *
-eay_version()
-{
-#if defined(OPENSSL_IS_BORINGSSL)
-	return "(BoringSSL)";
-#else
-	return SSLeay_version(SSLEAY_VERSION);
-#endif
-}
diff --git a/src/racoon/crypto_openssl.h b/src/racoon/crypto_openssl.h
deleted file mode 100644
index 983ffe5..0000000
--- a/src/racoon/crypto_openssl.h
+++ /dev/null
@@ -1,234 +0,0 @@
-/*	$NetBSD: crypto_openssl.h,v 1.5 2006/10/06 12:02:27 manu Exp $	*/
-
-/* Id: crypto_openssl.h,v 1.11 2004/11/13 11:28:01 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _CRYPTO_OPENSSL_H
-#define _CRYPTO_OPENSSL_H
-
-#include "crypto_openssl.h"
-
-#include <openssl/x509v3.h>
-#include <openssl/rsa.h>
-
-#define GENT_OTHERNAME	GEN_OTHERNAME
-#define GENT_EMAIL	GEN_EMAIL
-#define GENT_DNS	GEN_DNS
-#define GENT_X400	GEN_X400
-#define GENT_DIRNAME	GEN_DIRNAME
-#define GENT_EDIPARTY	GEN_EDIPARTY
-#define GENT_URI	GEN_URI
-#define GENT_IPADD	GEN_IPADD
-#define GENT_RID	GEN_RID
-
-extern vchar_t *eay_str2asn1dn __P((const char *, int));
-extern vchar_t *eay_hex2asn1dn __P((const char *, int));
-extern int eay_cmp_asn1dn __P((vchar_t *, vchar_t *));
-extern int eay_check_x509cert __P((vchar_t *, char *, char *, int));
-extern vchar_t *eay_get_x509asn1subjectname __P((vchar_t *));
-extern int eay_get_x509subjectaltname __P((vchar_t *, char **, int *, int));
-extern char *eay_get_x509text __P((vchar_t *));
-extern vchar_t *eay_get_x509cert __P((char *));
-extern vchar_t *eay_get_x509sign __P((vchar_t *, vchar_t *));
-extern int eay_check_x509sign __P((vchar_t *, vchar_t *, vchar_t *));
-
-extern int eay_check_rsasign __P((vchar_t *, vchar_t *, RSA *));
-extern vchar_t *eay_get_rsasign __P((vchar_t *, RSA *));
-
-/* RSA */
-extern vchar_t *eay_rsa_sign __P((vchar_t *, RSA *));
-extern int eay_rsa_verify __P((vchar_t *, vchar_t *, RSA *));
-
-/* ASN.1 */
-extern vchar_t *eay_get_pkcs1privkey __P((char *));
-extern vchar_t *eay_get_pkcs1pubkey __P((char *));
-
-/* string error */
-extern char *eay_strerror __P((void));
-
-/* OpenSSL initialization */
-extern void eay_init __P((void));
-
-/* Generic EVP */
-extern vchar_t *evp_crypt __P((vchar_t *data, vchar_t *key, vchar_t *iv,
-			       const EVP_CIPHER *e, int enc));
-extern int evp_weakkey __P((vchar_t *key, const EVP_CIPHER *e));
-extern int evp_keylen __P((int len, const EVP_CIPHER *e));
-
-/* DES */
-extern vchar_t *eay_des_encrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern vchar_t *eay_des_decrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern int eay_des_weakkey __P((vchar_t *));
-extern int eay_des_keylen __P((int));
-
-/* IDEA */
-extern vchar_t *eay_idea_encrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern vchar_t *eay_idea_decrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern int eay_idea_weakkey __P((vchar_t *));
-extern int eay_idea_keylen __P((int));
-
-/* blowfish */
-extern vchar_t *eay_bf_encrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern vchar_t *eay_bf_decrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern int eay_bf_weakkey __P((vchar_t *));
-extern int eay_bf_keylen __P((int));
-
-/* RC5 */
-extern vchar_t *eay_rc5_encrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern vchar_t *eay_rc5_decrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern int eay_rc5_weakkey __P((vchar_t *));
-extern int eay_rc5_keylen __P((int));
-
-/* 3DES */
-extern vchar_t *eay_3des_encrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern vchar_t *eay_3des_decrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern int eay_3des_weakkey __P((vchar_t *));
-extern int eay_3des_keylen __P((int));
-
-/* CAST */
-extern vchar_t *eay_cast_encrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern vchar_t *eay_cast_decrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern int eay_cast_weakkey __P((vchar_t *));
-extern int eay_cast_keylen __P((int));
-
-/* AES(RIJNDAEL) */
-extern vchar_t *eay_aes_encrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern vchar_t *eay_aes_decrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern int eay_aes_weakkey __P((vchar_t *));
-extern int eay_aes_keylen __P((int));
-
-#if defined(HAVE_OPENSSL_CAMELLIA_H)
-/* Camellia */
-extern vchar_t *eay_camellia_encrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern vchar_t *eay_camellia_decrypt __P((vchar_t *, vchar_t *, vchar_t *));
-extern int eay_camellia_weakkey __P((vchar_t *));
-extern int eay_camellia_keylen __P((int));
-#endif
-
-/* misc */
-extern int eay_null_keylen __P((int));
-extern int eay_null_hashlen __P((void));
-extern int eay_kpdk_hashlen __P((void));
-extern int eay_twofish_keylen __P((int));
-
-/* hash */
-#if defined(WITH_SHA2)
-/* HMAC SHA2 */
-extern vchar_t *eay_hmacsha2_512_one __P((vchar_t *, vchar_t *));
-extern caddr_t eay_hmacsha2_512_init __P((vchar_t *));
-extern void eay_hmacsha2_512_update __P((caddr_t, vchar_t *));
-extern vchar_t *eay_hmacsha2_512_final __P((caddr_t));
-extern vchar_t *eay_hmacsha2_384_one __P((vchar_t *, vchar_t *));
-extern caddr_t eay_hmacsha2_384_init __P((vchar_t *));
-extern void eay_hmacsha2_384_update __P((caddr_t, vchar_t *));
-extern vchar_t *eay_hmacsha2_384_final __P((caddr_t));
-extern vchar_t *eay_hmacsha2_256_one __P((vchar_t *, vchar_t *));
-extern caddr_t eay_hmacsha2_256_init __P((vchar_t *));
-extern void eay_hmacsha2_256_update __P((caddr_t, vchar_t *));
-extern vchar_t *eay_hmacsha2_256_final __P((caddr_t));
-#endif
-/* HMAC SHA1 */
-extern vchar_t *eay_hmacsha1_one __P((vchar_t *, vchar_t *));
-extern caddr_t eay_hmacsha1_init __P((vchar_t *));
-extern void eay_hmacsha1_update __P((caddr_t, vchar_t *));
-extern vchar_t *eay_hmacsha1_final __P((caddr_t));
-/* HMAC MD5 */
-extern vchar_t *eay_hmacmd5_one __P((vchar_t *, vchar_t *));
-extern caddr_t eay_hmacmd5_init __P((vchar_t *));
-extern void eay_hmacmd5_update __P((caddr_t, vchar_t *));
-extern vchar_t *eay_hmacmd5_final __P((caddr_t));
-
-#if defined(WITH_SHA2)
-/* SHA2 functions */
-extern caddr_t eay_sha2_512_init __P((void));
-extern void eay_sha2_512_update __P((caddr_t, vchar_t *));
-extern vchar_t *eay_sha2_512_final __P((caddr_t));
-extern vchar_t *eay_sha2_512_one __P((vchar_t *));
-#endif
-extern int eay_sha2_512_hashlen __P((void));
-
-#if defined(WITH_SHA2)
-extern caddr_t eay_sha2_384_init __P((void));
-extern void eay_sha2_384_update __P((caddr_t, vchar_t *));
-extern vchar_t *eay_sha2_384_final __P((caddr_t));
-extern vchar_t *eay_sha2_384_one __P((vchar_t *));
-#endif
-extern int eay_sha2_384_hashlen __P((void));
-
-#if defined(WITH_SHA2)
-extern caddr_t eay_sha2_256_init __P((void));
-extern void eay_sha2_256_update __P((caddr_t, vchar_t *));
-extern vchar_t *eay_sha2_256_final __P((caddr_t));
-extern vchar_t *eay_sha2_256_one __P((vchar_t *));
-#endif
-extern int eay_sha2_256_hashlen __P((void));
-
-/* SHA functions */
-extern caddr_t eay_sha1_init __P((void));
-extern void eay_sha1_update __P((caddr_t, vchar_t *));
-extern vchar_t *eay_sha1_final __P((caddr_t));
-extern vchar_t *eay_sha1_one __P((vchar_t *));
-extern int eay_sha1_hashlen __P((void));
-
-/* MD5 functions */
-extern caddr_t eay_md5_init __P((void));
-extern void eay_md5_update __P((caddr_t, vchar_t *));
-extern vchar_t *eay_md5_final __P((caddr_t));
-extern vchar_t *eay_md5_one __P((vchar_t *));
-extern int eay_md5_hashlen __P((void));
-
-/* RNG */
-extern vchar_t *eay_set_random __P((u_int32_t));
-extern u_int32_t eay_random __P((void));
-
-/* DH */
-extern int eay_dh_generate __P((vchar_t *, u_int32_t, u_int, vchar_t **, vchar_t **));
-extern int eay_dh_compute __P((vchar_t *, u_int32_t, vchar_t *, vchar_t *, vchar_t *, vchar_t **));
-
-/* Base 64 */
-vchar_t *base64_encode(char *in, long inlen);
-vchar_t *base64_decode(char *in, long inlen);
-
-RSA *base64_pubkey2rsa(char *in);
-RSA *bignum_pubkey2rsa(BIGNUM *in);
-
-/* misc */
-extern int eay_revbnl __P((vchar_t *));
-#include <openssl/bn.h>
-extern int eay_v2bn __P((BIGNUM **, vchar_t *));
-extern int eay_bn2v __P((vchar_t **, const BIGNUM *));
-
-extern const char *eay_version __P((void));
-
-#define CBC_BLOCKLEN 8
-#define IPSEC_ENCRYPTKEYLEN 8
-
-#endif /* _CRYPTO_OPENSSL_H */
diff --git a/src/racoon/debug.h b/src/racoon/debug.h
deleted file mode 100644
index 47c2641..0000000
--- a/src/racoon/debug.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*	$NetBSD: debug.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: debug.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _DEBUG_H
-#define _DEBUG_H
-
-/* define by main.c */
-extern int f_local;
-extern int vflag;
-
-#endif /* _DEBUG_H */
diff --git a/src/racoon/debugrm.h b/src/racoon/debugrm.h
deleted file mode 100644
index 6a2f411..0000000
--- a/src/racoon/debugrm.h
+++ /dev/null
@@ -1,102 +0,0 @@
-/*	$NetBSD: debugrm.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: debugrm.h,v 1.4 2006/04/06 14:00:06 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _DEBUGRM_H
-#define _DEBUGRM_H
-
-#define DRMDUMPFILE	"/var/tmp/debugrm.dump"
-
-#ifdef NONEED_DRM
-#ifndef racoon_malloc
-#define	racoon_malloc(sz)	malloc((sz))
-#endif
-#ifndef racoon_calloc
-#define	racoon_calloc(cnt, sz)	calloc((cnt), (sz))
-#endif
-#ifndef racoon_realloc
-#define	racoon_realloc(old, sz)	realloc((old), (sz))
-#endif
-#ifndef racoon_free
-#define	racoon_free(p)		free((p))
-#endif
-#ifndef racoon_strdup
-#define	racoon_strdup(p)	strdup((p))
-#endif
-#else /*!NONEED_DRM*/
-#ifndef racoon_malloc
-#define	racoon_malloc(sz)	\
-	DRM_malloc(__FILE__, __LINE__, __func__, (sz))
-#endif
-#ifndef racoon_calloc
-#define	racoon_calloc(cnt, sz)	\
-	DRM_calloc(__FILE__, __LINE__, __func__, (cnt), (sz))
-#endif
-#ifndef racoon_realloc
-#define	racoon_realloc(old, sz)	\
-	DRM_realloc(__FILE__, __LINE__, __func__, (old), (sz))
-#endif
-#ifndef racoon_free
-#define	racoon_free(p)		\
-	DRM_free(__FILE__, __LINE__, __func__, (p))
-#endif
-#ifndef racoon_strdup
-#define	racoon_strdup(p)	\
-	DRM_strdup(__FILE__, __LINE__, __func__, (p))
-#endif
-#endif /*NONEED_DRM*/
-
-extern void DRM_init __P((void));
-extern void DRM_dump __P((void));
-extern void *DRM_malloc __P((char *, int, char *, size_t));
-extern void *DRM_calloc __P((char *, int, char *, size_t, size_t));
-extern void *DRM_realloc __P((char *, int, char *, void *, size_t));
-extern void DRM_free __P((char *, int, char *, void *));
-extern char *DRM_strdup __P((char *, int, char *, const char *));
-
-#ifndef NONEED_DRM
-#define	vmalloc(sz)	\
-	DRM_vmalloc(__FILE__, __LINE__, __func__, (sz))
-#define	vdup(old)	\
-	DRM_vdup(__FILE__, __LINE__, __func__, (old))
-#define	vrealloc(old, sz)	\
-	DRM_vrealloc(__FILE__, __LINE__, __func__, (old), (sz))
-#define	vfree(p)		\
-	DRM_vfree(__FILE__, __LINE__, __func__, (p))
-#endif
-
-extern void *DRM_vmalloc __P((char *, int, char *, size_t));
-extern void *DRM_vrealloc __P((char *, int, char *, void *, size_t));
-extern void DRM_vfree __P((char *, int, char *, void *));
-extern void *DRM_vdup __P((char *, int, char *, void *));
-
-#endif /* _DEBUGRM_H */
diff --git a/src/racoon/dhgroup.h b/src/racoon/dhgroup.h
deleted file mode 100644
index 54d7eeb..0000000
--- a/src/racoon/dhgroup.h
+++ /dev/null
@@ -1,205 +0,0 @@
-/*	$NetBSD: dhgroup.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: dhgroup.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _DHGROUP_H
-#define _DHGROUP_H
-
-#define OAKLEY_PRIME_MODP768 \
-	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1" \
-	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD" \
-	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245" \
-	"E485B576 625E7EC6 F44C42E9 A63A3620 FFFFFFFF FFFFFFFF"
-
-#define OAKLEY_PRIME_MODP1024 \
-	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1" \
-	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD" \
-	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245" \
-	"E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED" \
-	"EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381" \
-	"FFFFFFFF FFFFFFFF"
-
-#define OAKLEY_PRIME_MODP1536 \
-	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1" \
-	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD" \
-	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245" \
-	"E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED" \
-	"EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D" \
-	"C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F" \
-	"83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D" \
-	"670C354E 4ABC9804 F1746C08 CA237327 FFFFFFFF FFFFFFFF"
-
-/* RFC 3526 */
-#define OAKLEY_PRIME_MODP2048 \
-	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1" \
-	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD" \
-	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245" \
-	"E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED" \
-	"EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D" \
-	"C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F" \
-	"83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D" \
-	"670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B" \
-	"E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9" \
-	"DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510" \
-	"15728E5A 8AACAA68 FFFFFFFF FFFFFFFF"
-
-#define OAKLEY_PRIME_MODP3072 \
-	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1" \
-	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD" \
-	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245" \
-	"E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED" \
-	"EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D" \
-	"C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F" \
-	"83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D" \
-	"670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B" \
-	"E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9" \
-	"DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510" \
-	"15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64" \
-	"ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7" \
-	"ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B" \
-	"F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C" \
-	"BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31" \
-	"43DB5BFC E0FD108E 4B82D120 A93AD2CA FFFFFFFF FFFFFFFF"
-
-#define OAKLEY_PRIME_MODP4096 \
-	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1" \
-	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD" \
-	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245" \
-	"E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED" \
-	"EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D" \
-	"C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F" \
-	"83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D" \
-	"670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B" \
-	"E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9" \
-	"DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510" \
-	"15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64" \
-	"ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7" \
-	"ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B" \
-	"F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C" \
-	"BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31" \
-	"43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7" \
-	"88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA" \
-	"2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6" \
-	"287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED" \
-	"1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9" \
-	"93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34063199" \
-	"FFFFFFFF FFFFFFFF"
-
-#define OAKLEY_PRIME_MODP6144 \
-	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1" \
-	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD" \
-	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245" \
-	"E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED" \
-	"EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D" \
-	"C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F" \
-	"83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D" \
-	"670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B" \
-	"E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9" \
-	"DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510" \
-	"15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64" \
-	"ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7" \
-	"ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B" \
-	"F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C" \
-	"BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31" \
-	"43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7" \
-	"88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA" \
-	"2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6" \
-	"287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED" \
-	"1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9" \
-	"93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34028492" \
-	"36C3FAB4 D27C7026 C1D4DCB2 602646DE C9751E76 3DBA37BD" \
-	"F8FF9406 AD9E530E E5DB382F 413001AE B06A53ED 9027D831" \
-	"179727B0 865A8918 DA3EDBEB CF9B14ED 44CE6CBA CED4BB1B" \
-	"DB7F1447 E6CC254B 33205151 2BD7AF42 6FB8F401 378CD2BF" \
-	"5983CA01 C64B92EC F032EA15 D1721D03 F482D7CE 6E74FEF6" \
-	"D55E702F 46980C82 B5A84031 900B1C9E 59E7C97F BEC7E8F3" \
-	"23A97A7E 36CC88BE 0F1D45B7 FF585AC5 4BD407B2 2B4154AA" \
-	"CC8F6D7E BF48E1D8 14CC5ED2 0F8037E0 A79715EE F29BE328" \
-	"06A1D58B B7C5DA76 F550AA3D 8A1FBFF0 EB19CCB1 A313D55C" \
-	"DA56C9EC 2EF29632 387FE8D7 6E3C0468 043E8F66 3F4860EE" \
-	"12BF2D5B 0B7474D6 E694F91E 6DCC4024 FFFFFFFF FFFFFFFF"
-
-#define OAKLEY_PRIME_MODP8192 \
-	"FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1" \
-	"29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD" \
-	"EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245" \
-	"E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED" \
-	"EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE45B3D" \
-	"C2007CB8 A163BF05 98DA4836 1C55D39A 69163FA8 FD24CF5F" \
-	"83655D23 DCA3AD96 1C62F356 208552BB 9ED52907 7096966D" \
-	"670C354E 4ABC9804 F1746C08 CA18217C 32905E46 2E36CE3B" \
-	"E39E772C 180E8603 9B2783A2 EC07A28F B5C55DF0 6F4C52C9" \
-	"DE2BCBF6 95581718 3995497C EA956AE5 15D22618 98FA0510" \
-	"15728E5A 8AAAC42D AD33170D 04507A33 A85521AB DF1CBA64" \
-	"ECFB8504 58DBEF0A 8AEA7157 5D060C7D B3970F85 A6E1E4C7" \
-	"ABF5AE8C DB0933D7 1E8C94E0 4A25619D CEE3D226 1AD2EE6B" \
-	"F12FFA06 D98A0864 D8760273 3EC86A64 521F2B18 177B200C" \
-	"BBE11757 7A615D6C 770988C0 BAD946E2 08E24FA0 74E5AB31" \
-	"43DB5BFC E0FD108E 4B82D120 A9210801 1A723C12 A787E6D7" \
-	"88719A10 BDBA5B26 99C32718 6AF4E23C 1A946834 B6150BDA" \
-	"2583E9CA 2AD44CE8 DBBBC2DB 04DE8EF9 2E8EFC14 1FBECAA6" \
-	"287C5947 4E6BC05D 99B2964F A090C3A2 233BA186 515BE7ED" \
-	"1F612970 CEE2D7AF B81BDD76 2170481C D0069127 D5B05AA9" \
-	"93B4EA98 8D8FDDC1 86FFB7DC 90A6C08F 4DF435C9 34028492" \
-	"36C3FAB4 D27C7026 C1D4DCB2 602646DE C9751E76 3DBA37BD" \
-	"F8FF9406 AD9E530E E5DB382F 413001AE B06A53ED 9027D831" \
-	"179727B0 865A8918 DA3EDBEB CF9B14ED 44CE6CBA CED4BB1B" \
-	"DB7F1447 E6CC254B 33205151 2BD7AF42 6FB8F401 378CD2BF" \
-	"5983CA01 C64B92EC F032EA15 D1721D03 F482D7CE 6E74FEF6" \
-	"D55E702F 46980C82 B5A84031 900B1C9E 59E7C97F BEC7E8F3" \
-	"23A97A7E 36CC88BE 0F1D45B7 FF585AC5 4BD407B2 2B4154AA" \
-	"CC8F6D7E BF48E1D8 14CC5ED2 0F8037E0 A79715EE F29BE328" \
-	"06A1D58B B7C5DA76 F550AA3D 8A1FBFF0 EB19CCB1 A313D55C" \
-	"DA56C9EC 2EF29632 387FE8D7 6E3C0468 043E8F66 3F4860EE" \
-	"12BF2D5B 0B7474D6 E694F91E 6DBE1159 74A3926F 12FEE5E4" \
-	"38777CB6 A932DF8C D8BEC4D0 73B931BA 3BC832B6 8D9DD300" \
-	"741FA7BF 8AFC47ED 2576F693 6BA42466 3AAB639C 5AE4F568" \
-	"3423B474 2BF1C978 238F16CB E39D652D E3FDB8BE FC848AD9" \
-	"22222E04 A4037C07 13EB57A8 1A23F0C7 3473FC64 6CEA306B" \
-	"4BCBC886 2F8385DD FA9D4B7F A2C087E8 79683303 ED5BDD3A" \
-	"062B3CF5 B3A278A6 6D2A13F8 3F44F82D DF310EE0 74AB6A36" \
-	"4597E899 A0255DC1 64F31CC5 0846851D F9AB4819 5DED7EA1" \
-	"B1D510BD 7EE74D73 FAF36BC3 1ECFA268 359046F4 EB879F92" \
-	"4009438B 481C6CD7 889A002E D5EE382B C9190DA6 FC026E47" \
-	"9558E447 5677E9AA 9E3050E2 765694DF C81F56E8 80B96E71" \
-	"60C980DD 98EDD3DF FFFFFFFF FFFFFFFF"
-
-extern struct dhgroup dh_modp768;
-extern struct dhgroup dh_modp1024;
-extern struct dhgroup dh_modp1536;
-extern struct dhgroup dh_modp2048;
-extern struct dhgroup dh_modp3072;
-extern struct dhgroup dh_modp4096;
-extern struct dhgroup dh_modp6144;
-extern struct dhgroup dh_modp8192;
-
-#endif /* _DHGROUP_H */
diff --git a/src/racoon/dnssec.c b/src/racoon/dnssec.c
deleted file mode 100644
index 1fc0bd1..0000000
--- a/src/racoon/dnssec.c
+++ /dev/null
@@ -1,154 +0,0 @@
-/*	$NetBSD: dnssec.c,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/*	$KAME: dnssec.c,v 1.2 2001/08/05 18:46:07 itojun Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <stdlib.h>
-#include <string.h>
-
-#include "var.h"
-#include "vmbuf.h"
-#include "misc.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "ipsec_doi.h"
-#include "oakley.h"
-#include "netdb_dnssec.h"
-#include "strnames.h"
-#include "dnssec.h"
-#include "gcmalloc.h"
-
-extern int h_errno;
-
-cert_t *
-dnssec_getcert(id)
-	vchar_t *id;
-{
-	cert_t *cert = NULL;
-	struct certinfo *res = NULL;
-	struct ipsecdoi_id_b *id_b;
-	int type;
-	char *name = NULL;
-	int namelen;
-	int error;
-
-	id_b = (struct ipsecdoi_id_b *)id->v;
-
-	namelen = id->l - sizeof(*id_b);
-	name = racoon_malloc(namelen + 1);
-	if (!name) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer.\n");
-		return NULL;
-	}
-	memcpy(name, id_b + 1, namelen);
-	name[namelen] = '\0';
-
-	switch (id_b->type) {
-	case IPSECDOI_ID_FQDN:
-		error = getcertsbyname(name, &res);
-		if (error != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"getcertsbyname(\"%s\") failed.\n", name);
-			goto err;
-		}
-		break;
-	case IPSECDOI_ID_IPV4_ADDR:
-	case IPSECDOI_ID_IPV6_ADDR:
-		/* XXX should be processed to query PTR ? */
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inpropper ID type passed %s "
-			"though getcert method is dnssec.\n",
-			s_ipsecdoi_ident(id_b->type));
-		goto err;
-	}
-
-	/* check response */
-	if (res->ci_next != NULL) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"not supported multiple CERT RR.\n");
-	}
-	switch (res->ci_type) {
-	case DNSSEC_TYPE_PKIX:
-		/* XXX is it enough condition to set this type ? */
-		type = ISAKMP_CERT_X509SIGN;
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"not supported CERT RR type %d.\n", res->ci_type);
-		goto err;
-	}
-
-	/* create cert holder */
-	cert = oakley_newcert();
-	if (cert == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get cert buffer.\n");
-		goto err;
-	}
-	cert->pl = vmalloc(res->ci_certlen + 1);
-	if (cert->pl == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get cert buffer.\n");
-		goto err;
-	}
-	memcpy(cert->pl->v + 1, res->ci_cert, res->ci_certlen);
-	cert->pl->v[0] = type;
-	cert->cert.v = cert->pl->v + 1;
-	cert->cert.l = cert->pl->l - 1;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "created CERT payload:\n");
-	plogdump(LLV_DEBUG, cert->pl->v, cert->pl->l);
-
-end:
-	if (res)
-		freecertinfo(res);
-
-	return cert;
-
-err:
-	if (name)
-		racoon_free(name);
-	if (cert) {
-		oakley_delcert(cert);
-		cert = NULL;
-	}
-
-	goto end;
-}
diff --git a/src/racoon/dnssec.h b/src/racoon/dnssec.h
deleted file mode 100644
index fb1c931..0000000
--- a/src/racoon/dnssec.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*	$NetBSD: dnssec.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: dnssec.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _DNSSEC_H
-#define _DNSSEC_H
-
-extern cert_t *dnssec_getcert __P((vchar_t *));
-
-#endif /* _DNSSEC_H */
diff --git a/src/racoon/doc/FAQ b/src/racoon/doc/FAQ
deleted file mode 100644
index 0ab49f0..0000000
--- a/src/racoon/doc/FAQ
+++ /dev/null
@@ -1,114 +0,0 @@
-This document is derived from the KAME racoon FAQ. Some answers do not
-apply to ipsec-tools (they are obsolete or not up to date). They are
-tagged [KAME]
-
-Q: With what other IKE/IPsec implementation racoon is known to be interoperable?
-
-A: [KAME]
-	See "IMPLEMENTATION" document supplied with KAME kit, or:
-	http://www.kame.net/dev/cvsweb.cgi/kame/IMPLEMENTATION
-	As we have tested/got test reports in the past, and our end and
-	the other end may have changed their implemenations, we are not sure
-	if we can interoperate with them today (we hope them to interoperate,
-	but we are not sure).
-	Also note that, IKE interoperability highly depends on configuration
-	on both ends.  You must configure both ends exactly the same.
-
-Q: How can I make racoon interoperate with <IKE/IPsec implementation>?
-
-A:
-	Configure both ends exactly the same.  With just a tiny little
-	differnce, you will be in trouble.
-
-Q: How to build racoon on my platform?
-
-A: 
-	As usual: configure && make && make install
-	ipsec-tools is also available as a package in the NetBSD pkgsrc
-
-Q: Describe me the options to "configure".
-
-A:
-	--enable-adminport:
-		Lets racoon to listen to racoon admin port, which is to
-		be contacted by racoonctl(8).
-	--enable-natt:
-		Enable NAT-Traversal. This needs kernel support, which is
-		available on Linux. On NetBSD, NAT-Traversal kernel support
-		has not been integrated yet, you can get it from here:
-		http://ipsec-tools.sourceforge.net/netbsd_nat-t.diff
-		If you live in a country where software patents are legal,
-		using NAT-Traversal might infringe a patent. 
-	--enable-broken-natt:
-		When ipsec-tools is built with --enable-natt, racoon 
-		sets IKE ports in SAD and SPD so that the kernel is 
-		able to ditinguish peers hidden behind the same NAT.
-		Some kernel will not cope with that ports. Use that
-		option to force the ports to 0 in SAD ans SPD. Of 
-		course this means that you cannot have multiple peers
-		behind the same NAT.
-	--enable-frag:
-		Enable IKE fragmentation, which is a workaround for 
-		broken routers that drop fragmented packets
-	--enable-hybrid:
-		Enable hybrid authentication, and ISAKMP mode config and
-		Xauth as well. Note that plain Xauth (without hybrid auth)
-		is not implemented.
-	--with-libradius:
-		Enable the use of RADIUS with hybrid authentication on the
-		server side. RADIUS is used for authentication, configuration
-		and accounting.
-	--with-libpam:
-		Enable the use of PAM with hybrid authentication on the 
-		server side. PAM can be used for authentication and accounting.
-	--enable-gssapi:
-		Enable GSS-API, for Kerberos V support.
-	--enable-stats:	
-		Enable statistics logging function.
-	--enable-samode-unspec:	
-		Enable to use unspecified a mode of SA.
-	--enable-ipv6:
-		Enable IPv6 support.
-	--with-kernel-headers:
-		Supply the location of Linux kernel headers.
-	--with-readline:
-		Support readline input (yes by default).
-	--with-openssl:
-		Specify OpenSSL directory.
-	--sysconfdir:
-		Where racoon config file goes. Default is /etc, which means
-		that racoon will look for /etc/racoon.conf
-	--localstatedir:
-		Where is the directory where racoon stores the control socket
-		(when using --enable-adminport). Default is /var, which 
-		means racoon will use /var/racoon/racoon.sock
-	--prefix:
-		Where racoon gets installed. 
-
-Q: How can I get help?
-
-A: 
-	Always identify your operating system platforms, the versions you are
-	using (like "ipsec-tools-0.5"), and information to repeat the
-	problem.  The more revelant information you supply, the better your 
-	chances of getting help are. Useful informations include, depending
-	of the problem: 
-	- version identification
-	- trace from racoon, taken by "racoon -d 0xffffffff"
-		(maximum debug level)
-	- configuration file you are using
-	- probabaly, tcpdump trace
-	http://orange.kame.net/dev/send-pr.html has the guideline.
-
-	If your question is not confidential, send your questions to:
-	<ipsec-tools-devel@lists.sourceforge.net>
-
-	If your question is confidential, send your questions to:
-	<ipsec-tools-core@lists.sourceforge.net>
-
-Q: Other documents to look at?
-
-A:
-	http://www.netbsd.org/Documentation/network/ipsec/
-	http://www.kame.net/
-	http://www.kame.net/newsletter/
diff --git a/src/racoon/doc/README.certificate b/src/racoon/doc/README.certificate
deleted file mode 100644
index a8bbfa2..0000000
--- a/src/racoon/doc/README.certificate
+++ /dev/null
@@ -1 +0,0 @@
-See http://www.kame.net/newsletter/20001119b/
diff --git a/src/racoon/doc/README.gssapi b/src/racoon/doc/README.gssapi
deleted file mode 100644
index 9cb3fbb..0000000
--- a/src/racoon/doc/README.gssapi
+++ /dev/null
@@ -1,106 +0,0 @@
-The gss-api authentication mechanism implementation for racoon was
-based on the ietf draft draft-ietf-ipsec-isakmp-gss-auth-06.txt.
-
-The implementation uses the Heimdal gss-api library, i.e. gss-api
-on top of Kerberos 5. The Heimdal gss-api library had to be modified
-to meet the requirements of using gss-api in a daemon. More specifically,
-the gss_acquire_cred() call did not work for other cases than
-GSS_C_NO_CREDENTIAL ("use default creds"). Daemons are often started
-as root, and have no Kerberos 5 credentials, so racoon explicitly
-needs to acquire its credentials. The usual method (already used
-by login authentication daemons) in these situations is to add
-a set of special credentials to be used. For example, authentication
-by daemons concerned with login credentials, uses 'host/fqdn' as
-its credential, where fqdn is the hostname on the interface that
-is being used. These special credentials need to be extracted into
-a local keytab from the kdc. The default value used in racoon
-is 'ike/fqdn', but it can be overridden in the racoon config file.
-
-The modification to the Heimdal gss-api library implements the
-mechanism above. If a credential other than GSS_C_NO_CREDENTIAL
-is specified to gss_acquire_cred(), it first looks in the default
-credential cache if it its principal matches the desired credential.
-If not, it extracts it from the default keytab file, and stores
-it in a memory-based credential cache, part of the gss credential
-structure.
-
-
-
-The modifcations to racoon itself are as follows:
-
-	* The racoon.conf config file accepts a new keyword, "gssapi_id",
-	  to be used inside a proposal specification. It specifies
-	  a string (a Kerberos 5 principal in this case), specifying the
-	  credential that racoon will try to acquire. The default value
-	  is 'ike/fqdn', where fqdn is the hostname for the interface
-	  being used for the exchange. If the id is not specified, no
-	  GSS endpoint attribute will be specified in the first SA sent.
-	  However, if the initiator does specify a GSS endpoint attribute,
-	  racoon will always respond with its own GSS endpoint name
-	  in the SA (the default one if not specified by this option).
-
-	* The racoon.conf file accepts "gssapi_krb" as authentication
-	  method inside a proposal specification. The number used
-	  for this method is 65001, which is a temporary number as
-	  specified in the draft.
-
-	* The cftoken.l and cfparse.y source files were modified to
-	  pick up the configuration options. The original sources
-	  stored algorithms in bitmask, which unfortunately meant
-	  that the maximum value was 32, clearly not enough for 65001.
-	  After consulting with the author (sakane@kame.net), it turned
-	  out that method was a leftover, and no longer needed. I replaced
-	  it with plain integers.
-
-	* The gss-api specific code was concentrated as much as possible
-	  in gssapi.c and gssapi.h. The code to call functions defined
-	  in these files is conditional on HAVE_GSSAPI, except for the
-	  config scan code. Specifying this flag on the compiler commandline
-	  is conditional on the --enable-gssapi option to the configure
-	  script.
-
-	* Racoon seems to want to send accepted SA proposals back to
-	  the initiator in a verbatim fashion, leaving no room to
-	  insert the (variable-length) GSS endpoint name attribute.
-	  I worked around this by re-assembling the extracted SA
-	  into a new SA if the gssapi_krb method is used, and the
-	  initiator sent the name attribute. This scheme should
-	  possibly be re-examined by the racoon maintainers, storing
-	  the SAs (the transformations, to be more precise) in a different
-	  fashion to allow for variable-length attributes to be
-	  re-inserted would be a good change, but I considered it to be
-	  beyond the scope of this project.
-
-	* The various state functions for aggressive and main mode
-	  (in isakmp_agg.c and isakmp_ident.c respectively) were
-	  changed to conditionally change their behavior if the
-	  gssapi_krb method is specified.
-
-
-This implementation tried to follow the specification in the ietf draft
-as close as possible. However, it has not been tested against other
-IKE daemon implementations. The only other one I know of is Windows 2000,
-and it has some caveats. I attempted to be Windows 2000 compatible.
-Should racoon be tried against Windows 2000, the gssapi_id option in
-the config file must be used, as Windows 2000 expects the GSS endpoint
-name to be sent at all times. I have my doubts as to the W2K compatibility,
-because the spec describes the GSS endpoint name sent by W2K as
-an unicode string 'xxx@domain', which doesn't seem to match the
-required standard for gss-api + kerberos 5 (i.e. I am fairly certain
-that such a string will be rejected by the Heimdal gss-api library, as it
-is not a valid Kerberos 5 principal).
-
-With the Heimdal gss-api implementation, the gssapi_krb authentication
-method will only work in main mode. Aggressive mode does not allow
-for the extra round-trips needed by gss_init_sec_context and
-gss_accept_sec_context when mutual authentication is requested.
-The draft specifies that the a fallback should be done to main mode,
-through the return of INVALID-EXCHANGE-TYPE if it turns out that
-the gss-api mechanisms needs more roundtrips. This is implemented.
-Unfortunately, racoon does not seem to properly fall back to
-its next mode, and this is not specific to the gssapi_krb method.
-So, to avoid problems, only specify main mode in the config file.
-
-
-	-- Frank van der Linden <fvdl@wasabisystems.com>
-
diff --git a/src/racoon/doc/README.plainrsa b/src/racoon/doc/README.plainrsa
deleted file mode 100644
index 36de09c..0000000
--- a/src/racoon/doc/README.plainrsa
+++ /dev/null
@@ -1,109 +0,0 @@
-HOW-TO use plainrsa auth, contributed by Simon Chang <simonychang@gmail.com>
-
-Before you begin, you should understand that the RSA authentication
-mechanism hinges upon the idea of a split cryptographic key:  one used
-by the public, the other readable only to you.  Any data that is
-encrypted by a public key can be decrypted only by the corresponding
-private key, so that the private key user can be assured that the
-content of the transmission has not been examined by unauthorized
-parties.  Similarly, any data encrypted by the private key can be
-decrypted by the public key so that the public knows that this
-transmission came from this user and nobody else (this idea is called
-non-repudiation).  Also, the longer the key length, the more difficult
-it would be for potential attacker to conduct brute-force discovery of
-the keys.  So, what all this means for the security administrator is
-that the setup needs a pair of reasonably long keys for each host that
-wishes to authenticate in this manner.
-
-With this in mind, it should be relatively straightforward to set up
-RSA authentication.  For the purpose of this document, we assume that
-we are setting up RSA authentication between two networked hosts
-called Boston and Chicago.  Unless otherwise noted, all steps should
-be performed on both hosts with corresponding key names.  Here are the
-steps:
-
-1)  Included in each default installation of ipsec-tools is a binary
-called plainrsa-gen.  This executable is used to generate a pair of
-RSA keys for the host.  There are only two parameters that you should
-be concerned about: -b, which sets the number of bits for the keys,
-and -f, which specifies the output file for plainrsa-gen to send the
-results.  On an ordinary Pentium-II with 128 MB of RAM, it takes only
-seconds to generate keys that are 2048 bits long, and only slightly
-longer to generate 4096-bit keys.  Either key length should be
-sufficient; any longer key length actually reduces performance and
-does not increase security significantly.  You should therefore run it
-as:
-
-	plainrsa-gen -b 2048 -f /var/tmp/boston.keys
-
-2)  When the process completes, you should have a text file that
-includes both public and private keys.  GUARD THIS FILE CAREFULLY,
-because once a private key is compromised it is no longer any good,
-and you must generate a new pair from scratch.  Reading the file
-itself, you should see several very long lines of alphanumeric data.
-The only line you should be concerned with is the line towards the top
-of the output file that begins with "# pubkey=0sAQPAmBdT/" or
-something to that effect.  This line is your public key, which should
-be made available to the other host that you are setting up.  Copy
-this line to a separate file called "boston.pub" and change the
-beginning of the line so that it reads ": PUB 0sAQPAmBdT/".
-Alternatively, you can also grab the first line of the boston.keys
-file and uncomment the line so that it reads the same as above.  Now
-rename the file you generated initially to "boston.priv".
-
-3)  You should now have two files, boston.priv and boston.pub
-(chicago.priv and chicago.pub on Chicago).  The first file contains
-your private key and the second file your public key.  Next you should
-find a way to get the public key over to the other host involved.
-Boston should have (1) its own key pair, and (2) Chicago's public key
-ONLY.  Do not copy Chicago's private key over to Boston, because (a)
-it is not necessary, and (b) you would now have two potential places
-for losing control of your private key.
-
-4)  You should now configure the racoon.conf configuration file for
-each host to (a) turn on RSA authentication, and (b) designate each
-host's private key and the remote host(s)'s public key(s).  Take all
-your keys and place it in one directory and use the global directive
-"path certificate" to specify the location of the keys.  This step is
-especially important if you are running racoon with privilege
-separation, because if racoon cannot find the keys inside the
-directory you have just specified it will fail the authentication
-process.  So, write the directive like the following:
-
-	path certificate "/etc/racoon";
-
-Next, you need to specify the host's own private key and the public
-keys of all the remote peers involved. For your local private key and 
-remote public key(s), you should use the following directives:
-
-	certificate_type plain_rsa "/etc/racoon/boston.priv";
-	peers_certfile plain_rsa "/etc/racoon/chicago.pub";
-
-Notice the option "plain_rsa" for both directives.
-
-Finally, under the "proposal" statement section, you should specify
-the "rsasig" option for "authentication_method".
-
-5)  You have finished configuring the host for RSA authentication.
-Now use racoonctl to reload the configuration or simply restart the
-machine and you should be all set.
-
-TROUBLESHOOTING
-
-In the event that the hosts fail to communicate, first go back to the
-instructions above and make sure that:
-
-1)  You have placed all the keys in the directory that is specified by
-the "path certificate" directive.  Keep in mind that privilege
-separation will force racoon to look into that directory and nowhere
-else.
-2)  You have specified correctly the host's own private key and the
-remote peer's public key.
-3)  You have specified the "rsasig" method for authentication in the
-proposal statement.
-
-If you run into any further problems, you should try to use "racoon
--v" to debug the setup, and send a copy of the debug messages to the
-mailing list so that we can help you determine what the problem is.
-
-Last modified: $Date: 2006/12/10 05:51:14 $
diff --git a/src/racoon/dump.h b/src/racoon/dump.h
deleted file mode 100644
index 3e8a5df..0000000
--- a/src/racoon/dump.h
+++ /dev/null
@@ -1,41 +0,0 @@
-/*	$NetBSD: dump.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: dump.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * Copyright (C) 2000 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.
- */
-
-#ifndef _DUMP_H
-#define _DUMP_H
-
-extern int isakmp_dump_open __P((char *));
-extern int isakmp_dump_close __P((void));
-extern int isakmp_dump __P((vchar_t *, struct sockaddr *, struct sockaddr *));
-
-#endif /* _DUMP_H */
diff --git a/src/racoon/eaytest.c b/src/racoon/eaytest.c
deleted file mode 100644
index 323ecef..0000000
--- a/src/racoon/eaytest.c
+++ /dev/null
@@ -1,1068 +0,0 @@
-/*	$NetBSD: eaytest.c,v 1.7.6.2 2008/07/15 00:55:48 mgrooms Exp $	*/
-
-/* Id: eaytest.c,v 1.22 2005/06/19 18:02:54 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <limits.h>
-#include <dirent.h>
-#include <fcntl.h>
-#include <unistd.h>
-#include <err.h>
-
-#include <openssl/bio.h>
-#include <openssl/pem.h>
-
-#include "var.h"
-#include "vmbuf.h"
-#include "misc.h"
-#include "debug.h"
-#include "str2val.h"
-#include "plog.h"
-
-#include "oakley.h"
-#include "dhgroup.h"
-#include "crypto_openssl.h"
-#include "gnuc.h"
-
-#include "package_version.h"
-
-#define PVDUMP(var) racoon_hexdump((var)->v, (var)->l)
-
-/*#define CERTTEST_BROKEN */
-
-/* prototype */
-
-static vchar_t *pem_read_buf __P((char *));
-void Usage __P((void));
-
-int rsatest __P((int, char **));
-int ciphertest __P((int, char **));
-int hmactest __P((int, char **));
-int sha1test __P((int, char **));
-int md5test __P((int, char **));
-int dhtest __P((int, char **));
-int bntest __P((int, char **));
-#ifndef CERTTEST_BROKEN
-static char **getcerts __P((char *));
-int certtest __P((int, char **));
-#endif
-
-/* test */
-
-static int
-rsa_verify_with_pubkey(src, sig, pubkey_txt)
-	vchar_t *src, *sig;
-	char *pubkey_txt;
-{
-	BIO *bio;
-	EVP_PKEY *evp;
-	int error;
-
-	bio = BIO_new_mem_buf(pubkey_txt, strlen(pubkey_txt));
-	evp = PEM_read_bio_PUBKEY(bio, NULL, NULL, NULL);
-	if (! evp) {
-		printf ("PEM_read_PUBKEY(): %s\n", eay_strerror());
-		return -1;
-	}
-	error = eay_check_rsasign(src, sig, evp->pkey.rsa);
-
-	return error;
-}
-
-int
-rsatest(ac, av)
-	int ac;
-	char **av;
-{
-	char *text = "this is test.";
-	vchar_t src;
-	vchar_t *priv, *sig;
-	int loglevel_saved;
-
-	char *pkcs1 =
-"-----BEGIN RSA PRIVATE KEY-----\n"
-"MIICXQIBAAKBgQChe5/Fzk9SA0vCKBOcu9jBcLb9oLv50PeuEfQojhakY+OH8A3Q\n"
-"M8A0qIDG6uhTNGPvzCWb/+mKeOB48n5HJpLxlDFyP3kyd2yXHIZ/MN8g1nh4FsB0\n"
-"iTkk8QUCJkkan6FCOBrIeLEsGA5AdodzuR+khnCMt8vO+NFHZYKAQeynyQIDAQAB\n"
-"AoGAOfDcnCHxjhDGrwyoNNWl6Yqi7hAtQm67YAbrH14UO7nnmxAENM9MyNgpFLaW\n"
-"07v5m8IZQIcradcDXAJOUwNBN8E06UflwEYCaScIwndvr5UpVlN3e2NC6Wyg2yC7\n"
-"GarxQput3zj35XNR5bK42UneU0H6zDxpHWqI1SwE+ToAHu0CQQDNl9gUJTpg0L09\n"
-"HkbE5jeb8bA5I20nKqBOBP0v5tnzpwu41umQwk9I7Ru0ucD7j+DW4k8otadW+FnI\n"
-"G1M1MpSjAkEAyRMt4bN8otfpOpsOQWzw4jQtouohOxRFCrQTntHhU20PrQnQLZWs\n"
-"pOVzqCjRytYtkPEUA1z8QK5gGcVPcOQsowJBALmt2rwPB1NrEo5Bat7noO+Zb3Ob\n"
-"WDiYWeE8xkHd95gDlSWiC53ur9aINo6ZeP556jGIgL+el/yHHecJLrQL84sCQH48\n"
-"zUxq/C/cb++8UzneJGlPqusiJNTLiAENR1gpmlZfHT1c8Nb9phMsfu0vG29GAfuC\n"
-"bzchVLljALCNQK+2gRMCQQCNIgN+R9mRWZhFAcC1sq++YnuSBlw4VwdL/fd1Yg9e\n"
-"Ul+U98yPl/NXt8Rs4TRBFcOZjkFI8xv0hQtevTgTmgz+\n"
-"-----END RSA PRIVATE KEY-----\n\n";
-	char *pubkey =
-"-----BEGIN PUBLIC KEY-----\n"
-"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQChe5/Fzk9SA0vCKBOcu9jBcLb9\n"
-"oLv50PeuEfQojhakY+OH8A3QM8A0qIDG6uhTNGPvzCWb/+mKeOB48n5HJpLxlDFy\n"
-"P3kyd2yXHIZ/MN8g1nh4FsB0iTkk8QUCJkkan6FCOBrIeLEsGA5AdodzuR+khnCM\n"
-"t8vO+NFHZYKAQeynyQIDAQAB\n"
-"-----END PUBLIC KEY-----\n\n";
-	char *pubkey_wrong = 
-"-----BEGIN PUBLIC KEY-----\n"
-"MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwDncG2tSokRBhK8la1mO\n"
-"QnUpxg6KvpoFUjEyRiIE1GRap5V6jCCEOmA9ZAz4Oa/97oxewwMWtchIxSBZVCia\n"
-"H9oGasbOFzrtSR+MKl6Cb/Ow3Fu+PKbHTsnfTk/nOOWyaQh91PRD7fdwHe8L9P7w\n"
-"2kFPmDW6+RNKIR4OErhXf1O0eSShPe0TO3vx43O7dWqhmh3Kgr4Jq7zAGqHtwu0B\n"
-"RFZnmsocOnVZb2yAHndp51/Mk1H37ThHwN7qMx7RqrS3ru3XtchpJd9IQJPBIRfY\n"
-"VYQ68u5ix/Z80Y6VkRf0qnAvel8B6D3N3Zyq5u7G60PfvvtCybeMn7nVrSMxqMW/\n"
-"xwIDAQAB\n"
-"-----END PUBLIC KEY-----\n\n";
-
-	printf ("%s", pkcs1);
-	printf ("%s", pubkey);
-	priv = pem_read_buf(pkcs1);
-
-	src.v = text;
-	src.l = strlen(text);
-
-	/* sign */
-	sig = eay_get_x509sign(&src, priv);
-	if (sig == NULL) {
-		printf("sign failed. %s\n", eay_strerror());
-		return -1;
-	}
-
-	printf("RSA signed data.\n");
-	PVDUMP(sig);
-
-	printf("Verification with correct pubkey: ");
-	if (rsa_verify_with_pubkey (&src, sig, pubkey) != 0) {
-		printf ("Failed.\n");
-		return -1;
-	}
-	else
-		printf ("Verified. Good.\n");
-
-	loglevel_saved = loglevel;
-	loglevel = 0;
-	printf("Verification with wrong pubkey: ");
-	if (rsa_verify_with_pubkey (&src, sig, pubkey_wrong) != 0)
-		printf ("Not verified. Good.\n");
-	else {
-		printf ("Verified. This is bad...\n");
-		loglevel = loglevel_saved;
-		return -1;
-	}
-	loglevel = loglevel_saved;
-
-	return 0;
-}
-
-static vchar_t *
-pem_read_buf(buf)
-	char *buf;
-{
-	BIO *bio;
-	char *nm = NULL, *header = NULL;
-	unsigned char *data = NULL;
-	long len;
-	vchar_t *ret;
-	int error;
-
-	bio = BIO_new_mem_buf(buf, strlen(buf));
-	error = PEM_read_bio(bio, &nm, &header, &data, &len);
-	if (error == 0)
-		errx(1, "%s", eay_strerror());
-	ret = vmalloc(len);
-	if (ret == NULL)
-		err(1, "vmalloc");
-	memcpy(ret->v, data, len);
-
-	return ret;
-}
-
-#ifndef CERTTEST_BROKEN
-int
-certtest(ac, av)
-	int ac;
-	char **av;
-{
-	char *certpath;
-	char **certs;
-	int type;
-	int error;
-
-	printf("\n**Test for Certificate.**\n");
-
-    {
-	vchar_t *asn1dn = NULL, asn1dn0;
-#ifdef ORIG_DN
-	char dnstr[] = "C=JP, ST=Kanagawa, L=Fujisawa, O=WIDE Project, OU=KAME Project, CN=Shoichi Sakane/Email=sakane@kame.net";
-	char *dnstr_w1 = NULL;
-	char *dnstr_w2 = NULL;
-	char dn0[] = {
-		0x30,0x81,0x9a,0x31,0x0b,0x30,0x09,0x06,
-		0x03,0x55,0x04,0x06,0x13,0x02,0x4a,0x50,
-		0x31,0x11,0x30,0x0f,0x06,0x03,0x55,0x04,
-		0x08,0x13,0x08,0x4b,0x61,0x6e,0x61,0x67,
-		0x61,0x77,0x61,0x31,0x11,0x30,0x0f,0x06,
-		0x03,0x55,0x04,0x07,0x13,0x08,0x46,0x75,
-		0x6a,0x69,0x73,0x61,0x77,0x61,0x31,0x15,
-		0x30,0x13,0x06,0x03,0x55,0x04,0x0a,0x13,
-		0x0c,0x57,0x49,0x44,0x45,0x20,0x50,0x72,
-		0x6f,0x6a,0x65,0x63,0x74,0x31,0x15,0x30,
-		0x13,0x06,0x03,0x55,0x04,0x0b,0x13,0x0c,
-		0x4b,0x41,0x4d,0x45,0x20,0x50,0x72,0x6f,
-		0x6a,0x65,0x63,0x74,0x31,0x17,0x30,0x15,
-		0x06,0x03,0x55,0x04,0x03,0x13,0x0e,0x53,
-		0x68,0x6f,0x69,0x63,0x68,0x69,0x20,0x53,
-		0x61,0x6b,0x61,0x6e,0x65,0x31,0x1e,0x30,
-		0x1c,0x06,0x09,0x2a,0x86,0x48,0x86,0xf7,
-		0x0d,0x01,0x09,0x01,
-		0x0c,	/* <== XXX */
-		0x0f,0x73,0x61,
-		0x6b,0x61,0x6e,0x65,0x40,0x6b,0x61,0x6d,
-		0x65,0x2e,0x6e,0x65,0x74,
-	};
-#else /* not ORIG_DN */
-	char dnstr[] = "C=JP, ST=Kanagawa, L=Fujisawa, O=WIDE Project, OU=KAME Project, CN=Shoichi Sakane";
-	char dnstr_w1[] = "C=JP, ST=Kanagawa, L=Fujisawa, O=WIDE Project, OU=*, CN=Shoichi Sakane";
-	char dnstr_w2[] = "C=JP, ST=Kanagawa, L=Fujisawa, O=WIDE Project, OU=KAME Project, CN=*";
-	char dn0[] = {
-		0x30,0x7a,0x31,0x0b,0x30,0x09,0x06,0x03,
-		0x55,0x04,0x06,0x13,0x02,0x4a,0x50,0x31,
-		0x11,0x30,0x0f,0x06,0x03,0x55,0x04,0x08,
-		0x13,0x08,0x4b,0x61,0x6e,0x61,0x67,0x61,
-		0x77,0x61,0x31,0x11,0x30,0x0f,0x06,0x03,
-		0x55,0x04,0x07,0x13,0x08,0x46,0x75,0x6a,
-		0x69,0x73,0x61,0x77,0x61,0x31,0x15,0x30,
-		0x13,0x06,0x03,0x55,0x04,0x0a,0x13,0x0c,
-		0x57,0x49,0x44,0x45,0x20,0x50,0x72,0x6f,
-		0x6a,0x65,0x63,0x74,0x31,0x15,0x30,0x13,
-		0x06,0x03,0x55,0x04,0x0b,0x13,0x0c,0x4b,
-		0x41,0x4d,0x45,0x20,0x50,0x72,0x6f,0x6a,
-		0x65,0x63,0x74,0x31,0x17,0x30,0x15,0x06,
-		0x03,0x55,0x04,0x03,0x13,0x0e,0x53,0x68,
-		0x6f,0x69,0x63,0x68,0x69,0x20,0x53,0x61,
-		0x6b,0x61,0x6e,0x65,
-	};
-#endif /* ORIG_DN */
-
-	printf("check to convert the string into subjectName.\n");
-	printf("%s\n", dnstr);
-
-	asn1dn0.v = dn0;
-	asn1dn0.l = sizeof(dn0);
-
-	asn1dn = eay_str2asn1dn(dnstr, strlen(dnstr));
-	if (asn1dn == NULL || asn1dn->l != asn1dn0.l)
-#ifdef OUTPUT_VALID_ASN1DN
-	{
-		unsigned char *cp; int  i;
-		printf("asn1dn length mismatched (%zu != %zu).\n", asn1dn ? asn1dn->l : -1, asn1dn0.l);
-		for (cp = asn1dn->v, i = 0; i < asn1dn->l; i++)
-		    printf ("0x%02x,", *cp++);
-		exit (1);
-	}
-#else
-		errx(1, "asn1dn length mismatched (%zu != %zu).\n", asn1dn ? asn1dn->l : -1, asn1dn0.l);
-#endif
-
-	/*
-	 * NOTE: The value pointed by "<==" above is different from the
-	 * return of eay_str2asn1dn().  but eay_cmp_asn1dn() can distinguish
-	 * both of the names are same name.
-	 */
-	if (eay_cmp_asn1dn(&asn1dn0,  asn1dn))
-		errx(1, "asn1dn mismatched.\n");
-	vfree(asn1dn);
-
-	printf("exact match: succeed.\n");
-
-	if (dnstr_w1 != NULL) {
-		asn1dn = eay_str2asn1dn(dnstr_w1, strlen(dnstr_w1));
-		if (asn1dn == NULL || asn1dn->l == asn1dn0.l)
-			errx(1, "asn1dn length wrong for wildcard 1\n");
-		if (eay_cmp_asn1dn(&asn1dn0,  asn1dn))
-			errx(1, "asn1dn mismatched for wildcard 1.\n");
-		vfree(asn1dn);
-		printf("wildcard 1 match: succeed.\n");
-	}
-
-	if (dnstr_w1 != NULL) {
-		asn1dn = eay_str2asn1dn(dnstr_w2, strlen(dnstr_w2));
-		if (asn1dn == NULL || asn1dn->l == asn1dn0.l)
-			errx(1, "asn1dn length wrong for wildcard 2\n");
-		if (eay_cmp_asn1dn(&asn1dn0,  asn1dn))
-			errx(1, "asn1dn mismatched for wildcard 2.\n");
-		vfree(asn1dn);
-		printf("wildcard 2 match: succeed.\n");
-	}
-
-    }
-	eay_init();
-
-	/* get certs */
-	if (ac > 1) {
-		certpath = *(av + 1);
-		certs = getcerts(certpath);
-	} else {
-#ifdef ORIG_DN
-		printf("\nCAUTION: These certificates are probably invalid "
-			"on your environment because you don't have their "
-			"issuer's certs in your environment.\n\n");
-
-		certpath = "/usr/local/openssl/certs";
-		certs = getcerts(NULL);
-#else
-		printf("\nWARNING: The main certificates are probably invalid "
-			"on your environment\nbecause you don't have their "
-			"issuer's certs in your environment\nso not doing "
-			"this test.\n\n");
-		return (0);
-#endif
-	}
-
-	while (*certs != NULL) {
-
-		vchar_t c;
-		char *str;
-		vchar_t *vstr;
-
-		printf("===CERT===\n");
-
-		c.v = *certs;
-		c.l = strlen(*certs);
-
-		/* print text */
-		str = eay_get_x509text(&c);
-		printf("%s", str);
-		racoon_free(str);
-
-		/* print ASN.1 of subject name */
-		vstr = eay_get_x509asn1subjectname(&c);
-		if (!vstr)
-			return 0;
-		PVDUMP(vstr);
-		printf("\n");
-		vfree(vstr);
-
-		/* print subject alt name */
-	    {
-		int pos;
-		for (pos = 1; ; pos++) {
-			error = eay_get_x509subjectaltname(&c, &str, &type, pos);
-			if (error) {
-				printf("no subjectaltname found.\n");
-				break;
-			}
-			if (!str)
-				break;
-			printf("SubjectAltName: %d: %s\n", type, str);
-			racoon_free(str);
-		}
-	    }
-
-		/* NULL => name of the certificate file */
-		error = eay_check_x509cert(&c, certpath, NULL, 1);
-		if (error)
-			printf("ERROR: cert is invalid.\n");
-		printf("\n");
-
-		certs++;
-	}
-	return 0;
-}
-
-static char **
-getcerts(path)
-	char *path;
-{
-	char **certs = NULL, **p;
-	DIR *dirp;
-	struct dirent *dp;
-	struct stat sb;
-	char buf[512];
-	int len;
-	int n;
-	int fd;
-
-	static char *samplecerts[] = {
-/* self signed */
-"-----BEGIN CERTIFICATE-----\n"
-"MIICpTCCAg4CAQAwDQYJKoZIhvcNAQEEBQAwgZoxCzAJBgNVBAYTAkpQMREwDwYD\n"
-"VQQIEwhLYW5hZ2F3YTERMA8GA1UEBxMIRnVqaXNhd2ExFTATBgNVBAoTDFdJREUg\n"
-"UHJvamVjdDEVMBMGA1UECxMMS0FNRSBQcm9qZWN0MRcwFQYDVQQDEw5TaG9pY2hp\n"
-"IFNha2FuZTEeMBwGCSqGSIb3DQEJARYPc2FrYW5lQGthbWUubmV0MB4XDTAwMDgy\n"
-"NDAxMzc0NFoXDTAwMDkyMzAxMzc0NFowgZoxCzAJBgNVBAYTAkpQMREwDwYDVQQI\n"
-"EwhLYW5hZ2F3YTERMA8GA1UEBxMIRnVqaXNhd2ExFTATBgNVBAoTDFdJREUgUHJv\n"
-"amVjdDEVMBMGA1UECxMMS0FNRSBQcm9qZWN0MRcwFQYDVQQDEw5TaG9pY2hpIFNh\n"
-"a2FuZTEeMBwGCSqGSIb3DQEJARYPc2FrYW5lQGthbWUubmV0MIGfMA0GCSqGSIb3\n"
-"DQEBAQUAA4GNADCBiQKBgQCpIQG/H3zn4czAmPBcbkDrYxE1A9vcpghpib3Of0Op\n"
-"SsiWIBOyIMiVAzK/I/JotWp3Vdn5fzGp/7DGAbWXAALas2xHkNmTMPpu6qhmNQ57\n"
-"kJHZHal24mgc1hwbrI9fb5olvIexx9a1riNPnKMRVHzXYizsyMbf+lJJmZ8QFhWN\n"
-"twIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACKs6X/BYycuHI3iop403R3XWMHHnNBN\n"
-"5XTHVWiWgR1cMWkq/dp51gn+nPftpdAaYGpqGkiHGhZcXLoBaX9uON3p+7av+sQN\n"
-"plXwnvUf2Zsgu+fojskS0gKcDlYiq1O8TOaBgJouFZgr1q6PiYjVEJGogAP28+HN\n"
-"M4o+GBFbFoqK\n"
-"-----END CERTIFICATE-----\n\n",
-/* signed by SSH testing CA + CA1 + CA2 */
-"-----BEGIN X509 CERTIFICATE-----\n"
-"MIICtTCCAj+gAwIBAgIEOaR8NjANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJG\n"
-"STEkMCIGA1UEChMbU1NIIENvbW11bmljYXRpb25zIFNlY3VyaXR5MREwDwYDVQQL\n"
-"EwhXZWIgdGVzdDEbMBkGA1UEAxMSVGVzdCBDQSAxIHN1YiBjYSAyMB4XDTAwMDgy\n"
-"NDAwMDAwMFoXDTAwMTAwMTAwMDAwMFowgZoxCzAJBgNVBAYTAkpQMREwDwYDVQQI\n"
-"EwhLYW5hZ2F3YTERMA8GA1UEBxMIRnVqaXNhd2ExFTATBgNVBAoTDFdJREUgUHJv\n"
-"amVjdDEVMBMGA1UECxMMS0FNRSBQcm9qZWN0MRcwFQYDVQQDEw5TaG9pY2hpIFNh\n"
-"a2FuZTEeMBwGCSqGSIb3DQEJAQwPc2FrYW5lQGthbWUubmV0MIGfMA0GCSqGSIb3\n"
-"DQEBAQUAA4GNADCBiQKBgQCpIQG/H3zn4czAmPBcbkDrYxE1A9vcpghpib3Of0Op\n"
-"SsiWIBOyIMiVAzK/I/JotWp3Vdn5fzGp/7DGAbWXAALas2xHkNmTMPpu6qhmNQ57\n"
-"kJHZHal24mgc1hwbrI9fb5olvIexx9a1riNPnKMRVHzXYizsyMbf+lJJmZ8QFhWN\n"
-"twIDAQABo18wXTALBgNVHQ8EBAMCBaAwGgYDVR0RBBMwEYEPc2FrYW5lQGthbWUu\n"
-"bmV0MDIGA1UdHwQrMCkwJ6AloCOGIWh0dHA6Ly9sZGFwLnNzaC5maS9jcmxzL2Nh\n"
-"MS0yLmNybDANBgkqhkiG9w0BAQUFAANhADtaqual41OWshF/rwCTuR6zySBJysGp\n"
-"+qjkp5efCiYKhAu1L4WXlMsV/SNdzspui5tHasPBvUw8gzFsU/VW/B2zuQZkimf1\n"
-"u6ZPjUb/vt8vLOPScP5MeH7xrTk9iigsqQ==\n"
-"-----END X509 CERTIFICATE-----\n\n",
-/* VP100 */
-"-----BEGIN CERTIFICATE-----\n"
-"MIICXzCCAcigAwIBAgIEOXGBIzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJG\n"
-"STEkMCIGA1UEChMbU1NIIENvbW11bmljYXRpb25zIFNlY3VyaXR5MREwDwYDVQQL\n"
-"EwhXZWIgdGVzdDESMBAGA1UEAxMJVGVzdCBDQSAxMB4XDTAwMDcxNjAwMDAwMFoX\n"
-"DTAwMDkwMTAwMDAwMFowNTELMAkGA1UEBhMCanAxETAPBgNVBAoTCHRhaGl0ZXN0\n"
-"MRMwEQYDVQQDEwpmdXJ1a2F3YS0xMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKB\n"
-"gQDUmI2RaAuoLvtRDbASwRhbkj/Oq0BBIKgAqbFknc/EanJSQwZQu82gD88nf7gG\n"
-"VEioWmKPLDuEjz5JCuM+k5f7HYHI1wWmz1KFr7UA+avZm4Kp6YKnhuH7soZp7kBL\n"
-"hTiZEpL0jdmCWLW3ZXoro55rmPrBsCd+bt8VU6tRZm5dUwIBKaNZMFcwCwYDVR0P\n"
-"BAQDAgWgMBYGA1UdEQQPMA2CBVZQMTAwhwQKFIaFMDAGA1UdHwQpMCcwJaAjoCGG\n"
-"H2h0dHA6Ly9sZGFwLnNzaC5maS9jcmxzL2NhMS5jcmwwDQYJKoZIhvcNAQEFBQAD\n"
-"gYEAKJ/2Co/KYW65mwpGG3CBvsoRL8xyUMHGt6gQpFLHiiHuAdix1ADTL6uoFuYi\n"
-"4sE5omQm1wKVv2ZhS03zDtUfKoVEv0HZ7IY3AU/FZT/M5gQvbt43Dki/ma3ock2I\n"
-"PPhbLsvXm+GCVh3jvkYGk1zr7VERVeTPtmT+hW63lcxfFp4=\n"
-"-----END CERTIFICATE-----\n\n",
-/* IKED */
-"-----BEGIN CERTIFICATE-----\n"
-"MIIEFTCCA7+gAwIBAgIKYU5X6AAAAAAACTANBgkqhkiG9w0BAQUFADCBljEpMCcG\n"
-"CSqGSIb3DQEJARYaeS13YXRhbmFAc2RsLmhpdGFjaGkuY28uanAxCzAJBgNVBAYT\n"
-"AkpQMREwDwYDVQQIEwhLQU5BR0FXQTERMA8GA1UEBxMIWW9rb2hhbWExEDAOBgNV\n"
-"BAoTB0hJVEFDSEkxDDAKBgNVBAsTA1NETDEWMBQGA1UEAxMNSVBzZWMgVGVzdCBD\n"
-"QTAeFw0wMDA3MTUwMjUxNDdaFw0wMTA3MTUwMzAxNDdaMEUxCzAJBgNVBAYTAkpQ\n"
-"MREwDwYDVQQIEwhLQU5BR0FXQTEQMA4GA1UEChMHSElUQUNISTERMA8GA1UEAxMI\n"
-"V0FUQU5BQkUwXDANBgkqhkiG9w0BAQEFAANLADBIAkEA6Wja5A7Ldzrtx+rMWHEB\n"
-"Cyt+/ZoG0qdFQbuuUiU1vOSq+1f+ZSCYAdTq13Lrr6Xfz3jDVFEZLPID9PSTFwq+\n"
-"yQIDAQABo4ICPTCCAjkwDgYDVR0PAQH/BAQDAgTwMBMGA1UdJQQMMAoGCCsGAQUF\n"
-"CAICMB0GA1UdDgQWBBTkv7/MH5Ra+S1zBAmnUIH5w8ZTUTCB0gYDVR0jBIHKMIHH\n"
-"gBQsF2qoaTl5F3GFLKrttaxPJ8j4faGBnKSBmTCBljEpMCcGCSqGSIb3DQEJARYa\n"
-"eS13YXRhbmFAc2RsLmhpdGFjaGkuY28uanAxCzAJBgNVBAYTAkpQMREwDwYDVQQI\n"
-"EwhLQU5BR0FXQTERMA8GA1UEBxMIWW9rb2hhbWExEDAOBgNVBAoTB0hJVEFDSEkx\n"
-"DDAKBgNVBAsTA1NETDEWMBQGA1UEAxMNSVBzZWMgVGVzdCBDQYIQeccIf4GYDIBA\n"
-"rS6HSUt8XjB7BgNVHR8EdDByMDagNKAyhjBodHRwOi8vZmxvcmEyMjAvQ2VydEVu\n"
-"cm9sbC9JUHNlYyUyMFRlc3QlMjBDQS5jcmwwOKA2oDSGMmZpbGU6Ly9cXGZsb3Jh\n"
-"MjIwXENlcnRFbnJvbGxcSVBzZWMlMjBUZXN0JTIwQ0EuY3JsMIGgBggrBgEFBQcB\n"
-"AQSBkzCBkDBFBggrBgEFBQcwAoY5aHR0cDovL2Zsb3JhMjIwL0NlcnRFbnJvbGwv\n"
-"ZmxvcmEyMjBfSVBzZWMlMjBUZXN0JTIwQ0EuY3J0MEcGCCsGAQUFBzAChjtmaWxl\n"
-"Oi8vXFxmbG9yYTIyMFxDZXJ0RW5yb2xsXGZsb3JhMjIwX0lQc2VjJTIwVGVzdCUy\n"
-"MENBLmNydDANBgkqhkiG9w0BAQUFAANBAG8yZAWHb6g3zba453Hw5loojVDZO6fD\n"
-"9lCsyaxeo9/+7x1JEEcdZ6qL7KKqe7ZBwza+hIN0ITkp2WEWo22gTz4=\n"
-"-----END CERTIFICATE-----\n\n",
-/* From Entrust */
-"-----BEGIN CERTIFICATE-----\n"
-"MIIDXTCCAsagAwIBAgIEOb6khTANBgkqhkiG9w0BAQUFADA4MQswCQYDVQQGEwJV\n"
-"UzEQMA4GA1UEChMHRW50cnVzdDEXMBUGA1UECxMOVlBOIEludGVyb3AgUk8wHhcN\n"
-"MDAwOTE4MjMwMDM3WhcNMDMwOTE4MjMzMDM3WjBTMQswCQYDVQQGEwJVUzEQMA4G\n"
-"A1UEChMHRW50cnVzdDEXMBUGA1UECxMOVlBOIEludGVyb3AgUk8xGTAXBgNVBAMT\n"
-"EFNob2ljaGkgU2FrYW5lIDIwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAKj3\n"
-"eXSt1qXxFXzpa265B/NQYk5BZN7pNJg0tlTKBTVV3UgpQ92Bx5DoNfZh11oIv0Sw\n"
-"6YnG5p9F9ma36U9HDoD3hVTjAvQKy4ssCsnU1y6v5XOU1QvYQo6UTzgsXUTaIau4\n"
-"Lrccl+nyoiNzy3lG51tLR8CxuA+3OOAK9xPjszClAgMBAAGjggFXMIIBUzBABgNV\n"
-"HREEOTA3gQ9zYWthbmVAa2FtZS5uZXSHBM6vIHWCHjIwNi0xNzUtMzItMTE3LnZw\n"
-"bndvcmtzaG9wLmNvbTATBgNVHSUEDDAKBggrBgEFBQgCAjALBgNVHQ8EBAMCAKAw\n"
-"KwYDVR0QBCQwIoAPMjAwMDA5MTgyMzAwMzdagQ8yMDAyMTAyNTExMzAzN1owWgYD\n"
-"VR0fBFMwUTBPoE2gS6RJMEcxCzAJBgNVBAYTAlVTMRAwDgYDVQQKEwdFbnRydXN0\n"
-"MRcwFQYDVQQLEw5WUE4gSW50ZXJvcCBSTzENMAsGA1UEAxMEQ1JMMTAfBgNVHSME\n"
-"GDAWgBTzVmhu0tBoWKwkZE5mXpooE9630DAdBgNVHQ4EFgQUEgBHPtXggJqei5Xz\n"
-"92CrWXTJxfAwCQYDVR0TBAIwADAZBgkqhkiG9n0HQQAEDDAKGwRWNS4wAwIEsDAN\n"
-"BgkqhkiG9w0BAQUFAAOBgQCIFriNGMUE8GH5LuDrTJfA8uGx8vLy2seljuo694TR\n"
-"et/ojp9QnfOJ1PF9iAdGaEaSLfkwhY4fZNZzxic5HBoHLeo9BXLP7i7FByXjvOZC\n"
-"Y8++0dC8NVvendIILcJBM5nbDq1TqIbb8K3SP80XhO5JLVJkoZiQftAMjo0peZPO\n"
-"EQ==\n"
-"-----END CERTIFICATE-----\n\n",
-	NULL,
-	};
-
-	if (path == NULL)
-		return (char **)&samplecerts;
-
-	stat(path, &sb);
-	if (!(sb.st_mode & S_IFDIR)) {
-		printf("ERROR: %s is not directory.\n", path);
-		exit(0);
-	}
-
-	dirp = opendir(path);
-	if (dirp == NULL) {
-		printf("opendir failed.\n");
-		exit(0);
-	}
-
-	n = 0;
-	while ((dp = readdir(dirp)) != NULL) {
-		if (dp->d_type != DT_REG)
-			continue;
-		if (strcmp(dp->d_name + strlen(dp->d_name) - 4, "cert"))
-			continue;
-		snprintf(buf, sizeof(buf), "%s/%s", path, dp->d_name);
-		stat(buf, &sb);
-
-		p = (char **)realloc(certs, (n + 1) * sizeof(certs));
-		if (p == NULL)
-			err(1, "realloc");
-		certs = p;
-
-		certs[n] = malloc(sb.st_size + 1);
-		if (certs[n] == NULL)
-			err(1, "malloc");
-
-		fd = open(buf, O_RDONLY);
-		if (fd == -1)
-			err(1, "open");
-		len = read(fd, certs[n], sb.st_size);
-		if (len == -1)
-			err(1, "read");
-		if (len != sb.st_size)
-			errx(1, "read: length mismatch");
-		certs[n][sb.st_size] = '\0';
-		close(fd);
-
-		printf("%s: %d\n", dp->d_name, (int)sb.st_size);
-
-		n++;
-	}
-
-	p = (char **)realloc(certs, (n + 1) * sizeof(certs));
-	if (p == NULL)
-		err(1, "realloc");
-	certs = p;
-	certs[n] = NULL;
-
-	return certs;
-}
-#endif /* CERTTEST_BROKEN */
-
-typedef vchar_t* (eay_func) (vchar_t *, vchar_t *, vchar_t *);
-
-static int 
-ciphertest_1 (const char *name,
-	      vchar_t *data,
-	      size_t data_align,
-	      vchar_t *key,
-	      size_t min_keysize,
-	      vchar_t *iv0,
-	      size_t iv_length,
-	      eay_func encrypt,
-	      eay_func decrypt)
-{
-	int padlen;
-	vchar_t *buf, *iv, *res1, *res2;
-	iv = vmalloc(iv_length);
-	
-	printf("Test for cipher %s\n", name);
-	printf("data:\n");
-	PVDUMP(data);
-
-	if (data_align <= 1 || (data->l % data_align) == 0)
-	  padlen = 0;
-	else
-	  padlen = data_align - data->l % data_align;
-
-	buf = vmalloc(data->l + padlen);
-	memcpy(buf->v, data->v, data->l);
-
-	memcpy(iv->v, iv0->v, iv_length);
-	res1 = (encrypt)(buf, key, iv);
-	if (res1 == NULL) {
-		printf("%s encryption failed.\n", name);
-		return -1;
-	}
-	printf("encrypted:\n");
-	PVDUMP(res1);
-
-	memcpy(iv->v, iv0->v, iv_length);
-	res2 = (decrypt)(res1, key, iv);
-	if (res2 == NULL) {
-		printf("%s decryption failed.\n", name);
-		return -1;
-	}
-	printf("decrypted:\n");
-	PVDUMP(res2);
-
-	if (memcmp(data->v, res2->v, data->l)) {
-		printf("XXXX NG (%s) XXXX\n", name);
-		return -1;
-	}
-	else
-		printf("%s cipher verified.\n", name);
-	vfree(res1);
-	vfree(res2);
-	vfree(buf);
-	vfree(iv);
-
-	return 0;
-}
-
-int
-ciphertest(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t data;
-	vchar_t key;
-	vchar_t iv0;
-
-	printf("\n**Testing CIPHERS**\n");
-
-	data.v = str2val("\
-06000017 03000000 73616b61 6e65406b 616d652e 6e657409 0002c104 308202b8 \
-04f05a90 \
-	", 16, &data.l);
-	key.v = str2val("f59bd70f 81b9b9cc 2a32c7fd 229a4b37", 16, &key.l);
-	iv0.v = str2val("26b68c90 9467b4ab 7ec29fa0 0b696b55", 16, &iv0.l);
-
-	if (ciphertest_1 ("DES", 
-			  &data, 8, 
-			  &key, 8, 
-			  &iv0, 8, 
-			  eay_des_encrypt, eay_des_decrypt) < 0)
-	  return -1;
-	
-	if (ciphertest_1 ("3DES",
-			  &data, 8,
-			  &key, 24,
-			  &iv0, 8,
-			  eay_3des_encrypt, eay_3des_decrypt) < 0)
-	  return -1;
-	
-	if (ciphertest_1 ("AES",
-			  &data, 16,
-			  &key, key.l,
-			  &iv0, 16,
-			  eay_aes_encrypt, eay_aes_decrypt) < 0)
-	  return -1;
-
-	if (ciphertest_1 ("BLOWFISH",
-			  &data, 8,
-			  &key, key.l,
-			  &iv0, 8,
-			  eay_bf_encrypt, eay_bf_decrypt) < 0)
-	  return -1;
-
-	if (ciphertest_1 ("CAST",
-			  &data, 8,
-			  &key, key.l,
-			  &iv0, 8,
-			  eay_cast_encrypt, eay_cast_decrypt) < 0)
-	  return -1;
-	
-#ifdef HAVE_OPENSSL_IDEA_H
-	if (ciphertest_1 ("IDEA",
-			  &data, 8,
-			  &key, key.l,
-			  &iv0, 8,
-			  eay_idea_encrypt, eay_idea_decrypt) < 0)
-	  return -1;
-#endif
-
-#ifdef HAVE_OPENSSL_RC5_H
-	if (ciphertest_1 ("RC5",
-			  &data, 8,
-			  &key, key.l,
-			  &iv0, 8,
-			  eay_rc5_encrypt, eay_rc5_decrypt) < 0)
-	  return -1;
-#endif
-#if defined(HAVE_OPENSSL_CAMELLIA_H)
-	if (ciphertest_1 ("CAMELLIA",
-			  &data, 16,
-			  &key, key.l,
-			  &iv0, 16,
-			  eay_camellia_encrypt, eay_camellia_decrypt) < 0)
-	  return -1;
-#endif
-	return 0;
-}
-
-int
-hmactest(ac, av)
-	int ac;
-	char **av;
-{
-	char *keyword = "hehehe test secret!";
-	char *object  = "d7e6a6c1876ef0488bb74958b9fee94e";
-	char *object1 = "d7e6a6c1876ef048";
-	char *object2 =                 "8bb74958b9fee94e";
-	char *r_hmd5  = "5702d7d1 fd1bfc7e 210fc9fa cda7d02c";
-	char *r_hsha1 = "309999aa 9779a43e ebdea839 1b4e7ee1 d8646874";
-#ifdef WITH_SHA2
-	char *r_hsha2 = "d47262d8 a5b6f39d d8686939 411b3e79 ed2e27f9 2c4ea89f dd0a06ae 0c0aa396";
-#endif
-	vchar_t *key, *data, *data1, *data2, *res;
-	vchar_t mod;
-	caddr_t ctx;
-
-#ifdef WITH_SHA2
-	printf("\n**Test for HMAC MD5, SHA1, and SHA256.**\n");
-#else
-	printf("\n**Test for HMAC MD5 & SHA1.**\n");
-#endif
-
-	key = vmalloc(strlen(keyword));
-	memcpy(key->v, keyword, key->l);
-
-	data = vmalloc(strlen(object));
-	data1 = vmalloc(strlen(object1));
-	data2 = vmalloc(strlen(object2));
-	memcpy(data->v, object, data->l);
-	memcpy(data1->v, object1, data1->l);
-	memcpy(data2->v, object2, data2->l);
-
-	/* HMAC MD5 */
-	printf("HMAC MD5 by eay_hmacmd5_one()\n");
-	res = eay_hmacmd5_one(key, data);
-	PVDUMP(res);
-	mod.v = str2val(r_hmd5, 16, &mod.l);
-	if (memcmp(res->v, mod.v, mod.l)) {
-		printf(" XXX NG XXX\n");
-		return -1;
-	}
-	free(mod.v);
-	vfree(res);
-
-	/* HMAC MD5 */
-	printf("HMAC MD5 by eay_hmacmd5_xxx()\n");
-	ctx = eay_hmacmd5_init(key);
-	eay_hmacmd5_update(ctx, data1);
-	eay_hmacmd5_update(ctx, data2);
-	res = eay_hmacmd5_final(ctx);
-	PVDUMP(res);
-	mod.v = str2val(r_hmd5, 16, &mod.l);
-	if (memcmp(res->v, mod.v, mod.l)) {
-		printf(" XXX NG XXX\n");
-		return -1;
-	}
-	free(mod.v);
-	vfree(res);
-
-	/* HMAC SHA1 */
-	printf("HMAC SHA1 by eay_hmacsha1_one()\n");
-	res = eay_hmacsha1_one(key, data);
-	PVDUMP(res);
-	mod.v = str2val(r_hsha1, 16, &mod.l);
-	if (memcmp(res->v, mod.v, mod.l)) {
-		printf(" XXX NG XXX\n");
-		return -1;
-	}
-	free(mod.v);
-	vfree(res);
-
-	/* HMAC SHA1 */
-	printf("HMAC SHA1 by eay_hmacsha1_xxx()\n");
-	ctx = eay_hmacsha1_init(key);
-	eay_hmacsha1_update(ctx, data1);
-	eay_hmacsha1_update(ctx, data2);
-	res = eay_hmacsha1_final(ctx);
-	PVDUMP(res);
-	mod.v = str2val(r_hsha1, 16, &mod.l);
-	if (memcmp(res->v, mod.v, mod.l)) {
-		printf(" XXX NG XXX\n");
-		return -1;
-	}
-	free(mod.v);
-	vfree(res);
-
-#ifdef WITH_SHA2
-	/* HMAC SHA2 */
-	printf("HMAC SHA2 by eay_hmacsha2_256_one()\n");
-	res = eay_hmacsha2_256_one(key, data);
-	PVDUMP(res);
-	mod.v = str2val(r_hsha2, 16, &mod.l);
-	if (memcmp(res->v, mod.v, mod.l)) {
-		printf(" XXX NG XXX\n");
-		return -1;
-	}
-	free(mod.v);
-	vfree(res);
-#endif
-
-	vfree(data);
-	vfree(data1);
-	vfree(data2);
-	vfree(key);
-
-	return 0;
-}
-
-int
-sha1test(ac, av)
-	int ac;
-	char **av;
-{
-	char *word1 = "1234567890", *word2 = "12345678901234567890";
-	caddr_t ctx;
-	vchar_t *buf, *res;
-
-	printf("\n**Test for SHA1.**\n");
-
-	ctx = eay_sha1_init();
-	buf = vmalloc(strlen(word1));
-	memcpy(buf->v, word1, buf->l);
-	eay_sha1_update(ctx, buf);
-	eay_sha1_update(ctx, buf);
-	res = eay_sha1_final(ctx);
-	PVDUMP(res);
-	vfree(res);
-	vfree(buf);
-
-	ctx = eay_sha1_init();
-	buf = vmalloc(strlen(word2));
-	memcpy(buf->v, word2, buf->l);
-	eay_sha1_update(ctx, buf);
-	res = eay_sha1_final(ctx);
-	PVDUMP(res);
-	vfree(res);
-
-	res = eay_sha1_one(buf);
-	PVDUMP(res);
-	vfree(res);
-	vfree(buf);
-
-	return 0;
-}
-
-int
-md5test(ac, av)
-	int ac;
-	char **av;
-{
-	char *word1 = "1234567890", *word2 = "12345678901234567890";
-	caddr_t ctx;
-	vchar_t *buf, *res;
-
-	printf("\n**Test for MD5.**\n");
-
-	ctx = eay_md5_init();
-	buf = vmalloc(strlen(word1));
-	memcpy(buf->v, word1, buf->l);
-	eay_md5_update(ctx, buf);
-	eay_md5_update(ctx, buf);
-	res = eay_md5_final(ctx);
-	PVDUMP(res);
-	vfree(res);
-	vfree(buf);
-
-	ctx = eay_md5_init();
-	buf = vmalloc(strlen(word2));
-	memcpy(buf->v, word2, buf->l);
-	eay_md5_update(ctx, buf);
-	res = eay_md5_final(ctx);
-	PVDUMP(res);
-	vfree(res);
-
-	res = eay_md5_one(buf);
-	PVDUMP(res);
-	vfree(res);
-	vfree(buf);
-
-	return 0;
-}
-
-int
-dhtest(ac, av)
-	int ac;
-	char **av;
-{
-	static struct {
-		char *name;
-		char *p;
-	} px[] = {
-		{ "modp768",	OAKLEY_PRIME_MODP768, },
-		{ "modp1024",	OAKLEY_PRIME_MODP1024, },
-		{ "modp1536",	OAKLEY_PRIME_MODP1536, },
-		{ "modp2048",	OAKLEY_PRIME_MODP2048, },
-		{ "modp3072",	OAKLEY_PRIME_MODP3072, },
-		{ "modp4096",	OAKLEY_PRIME_MODP4096, },
-		{ "modp6144",	OAKLEY_PRIME_MODP6144, },
-		{ "modp8192",	OAKLEY_PRIME_MODP8192, },
-	};
-	vchar_t p1, *pub1, *priv1, *gxy1;
-	vchar_t p2, *pub2, *priv2, *gxy2;
-	int i;
-
-	printf("\n**Test for DH.**\n");
-
-	for (i = 0; i < sizeof(px)/sizeof(px[0]); i++) {
-		printf("\n**Test for DH %s.**\n", px[i].name);
-
-		p1.v = str2val(px[i].p, 16, &p1.l);
-		p2.v = str2val(px[i].p, 16, &p2.l);
-		printf("prime number = \n"); PVDUMP(&p1);
-
-		if (eay_dh_generate(&p1, 2, 96, &pub1, &priv1) < 0) {
-			printf("error\n");
-			return -1;
-		}
-		printf("private key for user 1 = \n"); PVDUMP(priv1);
-		printf("public key for user 1  = \n"); PVDUMP(pub1);
-
-		if (eay_dh_generate(&p2, 2, 96, &pub2, &priv2) < 0) {
-			printf("error\n");
-			return -1;
-		}
-		printf("private key for user 2 = \n"); PVDUMP(priv2);
-		printf("public key for user 2  = \n"); PVDUMP(pub2);
-
-		/* process to generate key for user 1 */
-		gxy1 = vmalloc(p1.l);
-		memset(gxy1->v, 0, gxy1->l);
-		eay_dh_compute(&p1, 2, pub1, priv1, pub2, &gxy1);
-		printf("sharing gxy1 of user 1 = \n"); PVDUMP(gxy1);
-
-		/* process to generate key for user 2 */
-		gxy2 = vmalloc(p1.l);
-		memset(gxy2->v, 0, gxy2->l);
-		eay_dh_compute(&p2, 2, pub2, priv2, pub1, &gxy2);
-		printf("sharing gxy2 of user 2 = \n"); PVDUMP(gxy2);
-
-		if (memcmp(gxy1->v, gxy2->v, gxy1->l)) {
-			printf("ERROR: sharing gxy mismatched.\n");
-			return -1;
-		}
-
-		vfree(pub1);
-		vfree(pub2);
-		vfree(priv1);
-		vfree(priv2);
-		vfree(gxy1);
-		vfree(gxy2);
-	}
-
-	return 0;
-}
-
-int
-bntest(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *rn;
-
-	printf("\n**Test for generate a random number.**\n");
-
-	rn = eay_set_random((u_int32_t)96);
-	PVDUMP(rn);
-	vfree(rn);
-
-	return 0;
-}
-
-struct {
-	char *name;
-	int (*func) __P((int, char **));
-} func[] = {
-	{ "random", bntest, },
-	{ "dh", dhtest, },
-	{ "md5", md5test, },
-	{ "sha1", sha1test, },
-	{ "hmac", hmactest, },
-	{ "cipher", ciphertest, },
-#ifndef CERTTEST_BROKEN
-	{ "cert", certtest, },
-#endif
-	{ "rsa", rsatest, },
-};
-
-int
-main(ac, av)
-	int ac;
-	char **av;
-{
-	int i;
-	int len = sizeof(func)/sizeof(func[0]);
-
-	f_foreground = 1;
-	ploginit();
-
-	printf ("\nTestsuite of the %s\nlinked with %s\n\n", TOP_PACKAGE_STRING, eay_version());
-
-	if (strcmp(*av, "-h") == 0)
-		Usage();
-
-	ac--;
-	av++;
-
-	for (i = 0; i < len; i++) {
-		if ((ac == 0) || (strcmp(*av, func[i].name) == 0)) {
-			if ((func[i].func)(ac, av) != 0) {
-				printf ("\n!!!!! Test '%s' failed. !!!!!\n\n", func[i].name);
-				exit(1);
-			}
-			if (ac)
-				break;
-		}
-	}
-	if (ac && i == len)
-		Usage();
-
-	printf ("\n===== All tests passed =====\n\n");
-	exit(0);
-}
-
-void
-Usage()
-{
-	int i;
-	int len = sizeof(func)/sizeof(func[0]);
-
-	printf("Usage: eaytest [");
-	for (i = 0; i < len; i++)
-		printf("%s%s", func[i].name, (i<len-1)?"|":"");
-	printf("]\n");
-#ifndef CERTTEST_BROKEN
-	printf("       eaytest cert [cert_directory]\n");
-#endif
-	exit(1);
-}
-
diff --git a/src/racoon/evt.c b/src/racoon/evt.c
deleted file mode 100644
index fc65b20..0000000
--- a/src/racoon/evt.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/*	$NetBSD: evt.c,v 1.5 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: evt.c,v 1.5 2006/06/22 20:11:35 manubsd Exp */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus
- * 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.
- */
-
-#include "config.h"
-
-#include <errno.h>
-#include <string.h>
-#include <stdio.h>
-#include <time.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include <sys/queue.h>
-#include <sys/socket.h>
-
-#include "vmbuf.h"
-#include "plog.h"
-#include "misc.h"
-#include "admin.h"
-#include "gcmalloc.h"
-#include "evt.h"
-
-#ifdef ENABLE_ADMINPORT
-struct evtlist evtlist = TAILQ_HEAD_INITIALIZER(evtlist);
-int evtlist_len = 0;
-
-void
-evt_push(src, dst, type, optdata)
-	struct sockaddr *src;
-	struct sockaddr *dst;
-	int type;
-	vchar_t *optdata;
-{
-	struct evtdump *evtdump;
-	struct evt *evt;
-	size_t len;
-
-	/* If admin socket is disabled, silently discard anything */
-	if (adminsock_path == NULL)
-		return;
-
-	/* If we are above the limit, don't record anything */
-	if (evtlist_len > EVTLIST_MAX) {
-		plog(LLV_DEBUG, LOCATION, NULL, 
-		    "Cannot record event: event queue overflowed\n");
-		return;
-	}
-
-	/* If we hit the limit, record an overflow event instead */
-	if (evtlist_len == EVTLIST_MAX) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot record event: event queue overflow\n");
-		src = NULL;
-		dst = NULL;
-		type = EVTT_OVERFLOW;
-		optdata = NULL;
-	}
-
-	len = sizeof(*evtdump);
-	if (optdata)
-		len += optdata->l;
-
-	if ((evtdump = racoon_malloc(len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot record event: %s\n",
-		    strerror(errno));
-		return;
-	}
-
-	if ((evt = racoon_malloc(sizeof(*evt))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot record event: %s\n",
-		    strerror(errno));
-		racoon_free(evtdump);
-		return;
-	}
-
-	if (src)
-		memcpy(&evtdump->src, src, sysdep_sa_len(src));
-	if (dst)
-		memcpy(&evtdump->dst, dst, sysdep_sa_len(dst));
-	evtdump->len = len;
-	evtdump->type = type;
-	time(&evtdump->timestamp);
-
-	if (optdata)
-		memcpy(evtdump + 1, optdata->v, optdata->l);
-
-	evt->dump = evtdump;
-	TAILQ_INSERT_TAIL(&evtlist, evt, next);
-
-	evtlist_len++;
-
-	return;
-}
-
-struct evtdump *
-evt_pop(void) {
-	struct evtdump *evtdump;
-	struct evt *evt;
-
-	if ((evt = TAILQ_FIRST(&evtlist)) == NULL)
-		return NULL;
-
-	evtdump = evt->dump;
-	TAILQ_REMOVE(&evtlist, evt, next);
-	racoon_free(evt);
-	evtlist_len--;
-
-	return evtdump;
-}
-
-vchar_t *
-evt_dump(void) {
-	struct evtdump *evtdump;
-	vchar_t *buf = NULL;
-
-	if ((evtdump = evt_pop()) != NULL) {
-		if ((buf = vmalloc(evtdump->len)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "evt_dump failed: %s\n", strerror(errno));
-			return NULL;
-		}
-		memcpy(buf->v, evtdump, evtdump->len);	
-		racoon_free(evtdump);
-	}
-
-	return buf;
-}
-
-#endif /* ENABLE_ADMINPORT */
diff --git a/src/racoon/evt.h b/src/racoon/evt.h
deleted file mode 100644
index 88ee366..0000000
--- a/src/racoon/evt.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*	$NetBSD: evt.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: evt.h,v 1.5 2006/01/19 10:24:09 fredsen Exp */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus
- * 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.
- */
-
-#ifndef _EVT_H
-#define _EVT_H
-
-struct evtdump {
-	size_t len;	
-	struct sockaddr_storage src;
-	struct sockaddr_storage dst;
-	time_t timestamp;
-	int type;
-	/* 
-	 * Optionnal list of struct isakmp_data 
-	 * for type EVTT_ISAKMP_CFG_DONE
-	 */
-};
-
-/* type */
-#define EVTT_UNSEPC		0
-#define EVTT_PHASE1_UP		1
-#define EVTT_PHASE1_DOWN	2
-#define EVTT_XAUTH_SUCCESS	3
-#define EVTT_ISAKMP_CFG_DONE	4
-#define EVTT_PHASE2_UP		5
-#define EVTT_PHASE2_DOWN	6
-#define EVTT_DPD_TIMEOUT	7
-#define EVTT_PEER_NO_RESPONSE	8
-#define EVTT_PEER_DELETE	9
-#define EVTT_RACOON_QUIT	10
-#define EVTT_XAUTH_FAILED	11
-#define EVTT_OVERFLOW		12	/* Event queue overflowed */
-#define EVTT_PEERPH1AUTH_FAILED	13
-#define EVTT_PEERPH1_NOPROP	14	/* NO_PROPOSAL_CHOSEN & friends */
-#define EVTT_NO_ISAKMP_CFG	15	/* no need to wait for mode_cfg */
-
-struct evt {
-	struct evtdump *dump;
-	TAILQ_ENTRY(evt) next;
-};
-
-TAILQ_HEAD(evtlist, evt);
-
-#define EVTLIST_MAX	32
-
-#ifdef ENABLE_ADMINPORT
-struct evtdump *evt_pop(void);
-vchar_t *evt_dump(void);
-void evt_push(struct sockaddr *, struct sockaddr *, int, vchar_t *);
-#endif
-
-#ifdef ENABLE_ADMINPORT
-#define EVT_PUSH(src, dst, type, optdata) evt_push(src, dst, type, optdata);
-#else
-#define EVT_PUSH(src, dst, type, optdata) ;
-#endif
-
-#endif /* _EVT_H */
diff --git a/src/racoon/gcmalloc.h b/src/racoon/gcmalloc.h
deleted file mode 100644
index acdf7fa..0000000
--- a/src/racoon/gcmalloc.h
+++ /dev/null
@@ -1,127 +0,0 @@
-/*	$NetBSD: gcmalloc.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/*	$KAME: gcmalloc.h,v 1.4 2001/11/16 04:34:57 sakane Exp $	*/
-
-/*
- * Copyright (C) 2000, 2001 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.
- */
-
-/*
- * Debugging malloc glue for Racoon.
- */
-
-#ifndef _GCMALLOC_H_DEFINED
-#define _GCMALLOC_H_DEFINED
-
-/* ElectricFence needs no special handling. */
-
-/*
- * Boehm-GC provides GC_malloc(), GC_realloc(), GC_free() functions,
- * but not the traditional entry points.  So what we do is provide  
- * malloc(), calloc(), realloc(), and free() entry points in the main
- * program and letting the linker do the rest.
- */
-#ifdef GC
-#define GC_DEBUG
-#include <gc.h>
-
-#ifdef RACOON_MAIN_PROGRAM
-void *
-malloc(size_t size)
-{
-
-	return (GC_MALLOC(size));
-}
-
-void *
-calloc(size_t number, size_t size)
-{
-
-	/* GC_malloc() clears the storage. */
-	return (GC_MALLOC(number * size));
-}
-
-void *
-realloc(void *ptr, size_t size)
-{
-
-	return (GC_REALLOC(ptr, size));
-}
-
-void
-free(void *ptr)
-{
-
-	GC_FREE(ptr);
-}
-
-char *
-strdup(const char *str)
-{
-
-	return (GC_STRDUP(str));
-}
-#endif /* RACOON_MAIN_PROGRAM */
-
-#define	racoon_malloc(sz)	GC_debug_malloc(sz, GC_EXTRAS)
-#define	racoon_calloc(cnt, sz)	GC_debug_malloc(cnt * sz, GC_EXTRAS)
-#define	racoon_realloc(old, sz)	GC_debug_realloc(old, sz, GC_EXTRAS)
-#define	racoon_free(p)		GC_debug_free(p)
-#define	racoon_strdup(str)	GC_debug_strdup(str)
-
-#endif /* GC */
-
-/*
- * Dmalloc only requires that you pull in a header file and link
- * against libdmalloc.
- */
-#ifdef DMALLOC
-#include <dmalloc.h>
-#endif /* DMALLOC */
-
-#ifdef DEBUG_RECORD_MALLOCATION
-#include <debugrm.h>
-#else
-#ifndef racoon_malloc
-#define	racoon_malloc(sz)	malloc((sz))
-#endif
-#ifndef racoon_calloc
-#define	racoon_calloc(cnt, sz)	calloc((cnt), (sz))
-#endif
-#ifndef racoon_realloc
-#define	racoon_realloc(old, sz)	realloc((old), (sz))
-#endif
-#ifndef racoon_free
-#define	racoon_free(p)		free((p))
-#endif
-#ifndef racoon_strdup
-#define	racoon_strdup(s)	strdup((s))
-#endif
-#endif /* DEBUG_RECORD_MALLOCATION */
-
-#endif /* _GCMALLOC_H_DEFINED */
diff --git a/src/racoon/genlist.c b/src/racoon/genlist.c
deleted file mode 100644
index b5204c0..0000000
--- a/src/racoon/genlist.c
+++ /dev/null
@@ -1,174 +0,0 @@
-/*	$NetBSD: genlist.c,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: genlist.c,v 1.2 2004/07/12 20:43:50 ludvigm Exp */
-
-/*
- * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
- * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
- * 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.
- */
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <sys/queue.h>
-
-#include "genlist.h"
-
-struct genlist *
-genlist_init (void)
-{
-	struct genlist *new = calloc(sizeof(struct genlist), 1);
-	TAILQ_INIT(new);
-	return new;
-}
-
-struct genlist_entry *
-genlist_insert (struct genlist *head, void *data)
-{
-	struct genlist_entry *entry = calloc(sizeof(struct genlist_entry), 1);
-	entry->data = data;
-	TAILQ_INSERT_HEAD(head, entry, chain);
-	return entry;
-}
-
-struct genlist_entry *
-genlist_append (struct genlist *head, void *data)
-{
-	struct genlist_entry *entry = calloc(sizeof(struct genlist_entry), 1);
-	entry->data = data;
-	TAILQ_INSERT_TAIL(head, entry, chain);
-	return entry;
-}
-
-void *
-genlist_foreach (struct genlist *head, genlist_func_t func, void *arg)
-{
-	struct genlist_entry *p;
-	void *ret = NULL;
-	TAILQ_FOREACH(p, head, chain) {
-		ret = (*func)(p->data, arg);
-		if (ret)
-			break;
-	}
-
-	return ret;
-}
-
-void *
-genlist_next (struct genlist *head, struct genlist_entry **buf)
-{
-	struct genlist_entry *p;
-
-	if (head)
-		p = TAILQ_FIRST(head);
-	else
-		p = (buf && *buf) ? TAILQ_NEXT(*buf, chain) : NULL;
-	if (buf)
-		*buf = p;
-	return (p ? p->data : NULL);
-}
-
-void
-genlist_free (struct genlist *head, genlist_freedata_t func)
-{
-	struct genlist_entry *p;
-
-	while ((p = TAILQ_LAST(head, genlist)) != NULL) {
-		TAILQ_REMOVE(head, p, chain);
-		if (func)
-			func(p->data);
-		free(p);
-	}
-	free(head);
-}
-
-
-#if 0
-/* Here comes the example... */
-struct conf {
-	struct genlist	*l1, *l2;
-};
-
-void *
-print_entry(void *entry, void *arg)
-{
-	if (!entry)
-		return NULL;
-	printf("%s\n", (char *)entry);
-	return NULL;
-}
-
-void
-dump_list(struct genlist *head)
-{
-	genlist_foreach(head, print_entry, NULL);
-}
-
-void
-free_data(void *data)
-{
-	printf ("removing %s\n", (char *)data);
-}
-
-int main()
-{
-	struct conf *cf;
-	char *cp;
-	struct genlist_entry *gpb;
-
-	cf = calloc(sizeof(struct conf), 1);
-	cf->l1 = genlist_init();
-	cf->l2 = genlist_init();
-	
-	genlist_insert(cf->l1, "Ahoj");
-	genlist_insert(cf->l1, "Cau");
-	genlist_insert(cf->l1, "Nazdar");
-	genlist_insert(cf->l1, "Te buch");
-
-	genlist_append(cf->l2, "Curak");
-	genlist_append(cf->l2, "Kozy");
-	genlist_append(cf->l2, "Pica");
-	genlist_append(cf->l2, "Prdel");
-
-	printf("List 2\n");
-	dump_list(cf->l2);
-	printf("\nList 1\n");
-	dump_list(cf->l1);
-
-	printf("\nList 2 - using genlist_next()\n");
-	for (cp = genlist_next (cf->l2, &gpb); cp; cp = genlist_next (0, &gpb))
-	    printf("%s\n", cp);
-
-	printf("\nFreeing List 1\n");
-	/* the data here isn't actually alloc'd so we would really call
-	 * genlist_free (cf->l1, 0);    but to illustrate the idea */
-	genlist_free (cf->l1, free_data);
-	cf->l1 = 0;
-
-	return 0;
-}
-#endif
diff --git a/src/racoon/genlist.h b/src/racoon/genlist.h
deleted file mode 100644
index ee15392..0000000
--- a/src/racoon/genlist.h
+++ /dev/null
@@ -1,82 +0,0 @@
-/*	$NetBSD: genlist.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: genlist.h,v 1.2 2004/07/12 20:43:50 ludvigm Exp */
-
-/*
- * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
- * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
- * 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.
- */
-
-#ifndef _GENLIST_H
-#define _GENLIST_H
-
-#include <sys/queue.h>
-
-/* See the bottom of genlist.c for example use. */
-
-/* This declares 'struct genlist' */
-TAILQ_HEAD(genlist, genlist_entry);
-
-/* This is where the data are actually stored. */
-struct genlist_entry {
-	void *data;
-	TAILQ_ENTRY(genlist_entry) chain;
-};
-
-/* This function returns an initialized list head. */
-struct genlist *genlist_init (void);
-
-/* Insert an entry at the beginning/end og the list. */
-struct genlist_entry *genlist_insert (struct genlist *head, void *data);
-struct genlist_entry *genlist_append (struct genlist *head, void *data);
-
-/* Create a function with this prototype for use with genlist_foreach().
- * See genlist_foreach() description below for details. */
-typedef void *(genlist_func_t)(void *entry, void *arg);
-
-/* Traverse the list and call 'func' for each entry.  As long as func() returns
- * NULL the list traversal continues, once it returns non-NULL (usually the
- * 'entry' arg), the list traversal exits and the return value is returned
- * further from genlist_foreach(). Optional 'arg' may be passed to func(), e.g.
- * for some lookup purposes, etc. */
-void *genlist_foreach (struct genlist *head, genlist_func_t func, void *arg);
-
-/* Get first entry in list if head is not NULL, otherwise get next
- * entry based on saved position in list from previous call as stored in buf.
- * If buf is NULL no position is saved */
-void *genlist_next (struct genlist *head, struct genlist_entry **buf);
-
-/* Create a function with this prototype for use with genlist_free()
- * to free any storage associated with genlist_entry.data */
-typedef void (genlist_freedata_t)(void *entry);
-
-/* Free all storage associated with list at head using func to free any
- * alloc()d data in data field of genlist_entry */
-void genlist_free (struct genlist *head, genlist_freedata_t func);
-
-#endif /* _GENLIST_H */
diff --git a/src/racoon/getcertsbyname.c b/src/racoon/getcertsbyname.c
deleted file mode 100644
index 1ce7c62..0000000
--- a/src/racoon/getcertsbyname.c
+++ /dev/null
@@ -1,418 +0,0 @@
-/*	$NetBSD: getcertsbyname.c,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/*	$KAME: getcertsbyname.c,v 1.7 2001/11/16 04:12:59 sakane Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <arpa/nameser.h>
-#if (defined(__APPLE__) && defined(__MACH__))
-# include <nameser8_compat.h>
-#endif
-#include <resolv.h>
-#ifdef HAVE_LWRES_GETRRSETBYNAME
-#include <lwres/netdb.h>
-#include <lwres/lwres.h>
-#else
-#include <netdb.h>
-#endif
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#ifdef DNSSEC_DEBUG
-#include <stdio.h>
-#include <strings.h>
-#endif
-
-#include "netdb_dnssec.h"
-
-/* XXX should it use ci_errno to hold errno instead of h_errno ? */
-extern int h_errno;
-
-static struct certinfo *getnewci __P((int, int, int, int, int, 
-			unsigned char *));
-
-static struct certinfo *
-getnewci(qtype, keytag, algorithm, flags, certlen, cert)
-	int qtype, keytag, algorithm, flags, certlen;
-	unsigned char *cert;
-{
-	struct certinfo *res;
-
-	res = malloc(sizeof(*res));
-	if (!res)
-		return NULL;
-
-	memset(res, 0, sizeof(*res));
-	res->ci_type = qtype;
-	res->ci_keytag = keytag;
-	res->ci_algorithm = algorithm;
-	res->ci_flags = flags;
-	res->ci_certlen = certlen;
-	res->ci_cert = malloc(certlen);
-	if (!res->ci_cert) {
-		free(res);
-		return NULL;
-	}
-	memcpy(res->ci_cert, cert, certlen);
-
-	return res;
-}
-
-void
-freecertinfo(ci)
-	struct certinfo *ci;
-{
-	struct certinfo *next;
-
-	do {
-		next = ci->ci_next;
-		if (ci->ci_cert)
-			free(ci->ci_cert);
-		free(ci);
-		ci = next;
-	} while (ci);
-}
-
-/*
- * get CERT RR by FQDN and create certinfo structure chain.
- */
-#ifdef HAVE_LWRES_GETRRSETBYNAME
-#define getrrsetbyname lwres_getrrsetbyname
-#define freerrset lwres_freerrset
-#define hstrerror lwres_hstrerror
-#endif
-#if defined(HAVE_LWRES_GETRRSETBYNAME) || defined(AHVE_GETRRSETBYNAME)
-int
-getcertsbyname(name, res)
-	char *name;
-	struct certinfo **res;
-{
-	int rdlength;
-	char *cp;
-	int type, keytag, algorithm;
-	struct certinfo head, *cur;
-	struct rrsetinfo *rr = NULL;
-	int i;
-	int error = -1;
-
-	/* initialize res */
-	*res = NULL;
-
-	memset(&head, 0, sizeof(head));
-	cur = &head;
-
-	error = getrrsetbyname(name, C_IN, T_CERT, 0, &rr);
-	if (error) {
-#ifdef DNSSEC_DEBUG
-		printf("getrrsetbyname: %s\n", hstrerror(error));
-#endif
-		h_errno = NO_RECOVERY;
-		goto end;
-	}
-
-	if (rr->rri_rdclass != C_IN
-	 || rr->rri_rdtype != T_CERT
-	 || rr->rri_nrdatas == 0) {
-#ifdef DNSSEC_DEBUG
-		printf("getrrsetbyname: %s", hstrerror(error));
-#endif
-		h_errno = NO_RECOVERY;
-		goto end;
-	}
-#ifdef DNSSEC_DEBUG
-	if (!(rr->rri_flags & LWRDATA_VALIDATED))
-		printf("rr is not valid");
-#endif
-
-	for (i = 0; i < rr->rri_nrdatas; i++) {
-		rdlength = rr->rri_rdatas[i].rdi_length;
-		cp = rr->rri_rdatas[i].rdi_data;
-
-		GETSHORT(type, cp);	/* type */
-		rdlength -= INT16SZ;
-		GETSHORT(keytag, cp);	/* key tag */
-		rdlength -= INT16SZ;
-		algorithm = *cp++;	/* algorithm */
-		rdlength -= 1;
-
-#ifdef DNSSEC_DEBUG
-		printf("type=%d keytag=%d alg=%d len=%d\n",
-			type, keytag, algorithm, rdlength);
-#endif
-
-		/* create new certinfo */
-		cur->ci_next = getnewci(type, keytag, algorithm,
-					rr->rri_flags, rdlength, cp);
-		if (!cur->ci_next) {
-#ifdef DNSSEC_DEBUG
-			printf("getnewci: %s", strerror(errno));
-#endif
-			h_errno = NO_RECOVERY;
-			goto end;
-		}
-		cur = cur->ci_next;
-	}
-
-	*res = head.ci_next;
-	error = 0;
-
-end:
-	if (rr)
-		freerrset(rr);
-	if (error && head.ci_next)
-		freecertinfo(head.ci_next);
-
-	return error;
-}
-#else	/*!HAVE_LWRES_GETRRSETBYNAME*/
-int
-getcertsbyname(name, res)
-	char *name;
-	struct certinfo **res;
-{
-	unsigned char *answer = NULL, *p;
-	int buflen, anslen, len;
-	HEADER *hp;
-	int qdcount, ancount, rdlength;
-	unsigned char *cp, *eom;
-	char hostbuf[1024];	/* XXX */
-	int qtype, qclass, keytag, algorithm;
-	struct certinfo head, *cur;
-	int error = -1;
-
-	/* initialize res */
-	*res = NULL;
-
-	memset(&head, 0, sizeof(head));
-	cur = &head;
-
-	/* get CERT RR */
-	buflen = 512;
-	do {
-
-		buflen *= 2;
-		p = realloc(answer, buflen);
-		if (!p) {
-#ifdef DNSSEC_DEBUG
-			printf("realloc: %s", strerror(errno));
-#endif
-			h_errno = NO_RECOVERY;
-			goto end;
-		}
-		answer = p;
-
-		anslen = res_query(name,  C_IN, T_CERT, answer, buflen);
-		if (anslen == -1)
-			goto end;
-
-	} while (buflen < anslen);
-
-#ifdef DNSSEC_DEBUG
-	printf("get a DNS packet len=%d\n", anslen);
-#endif
-
-	/* parse CERT RR */
-	eom = answer + anslen;
-
-	hp = (HEADER *)answer;
-	qdcount = ntohs(hp->qdcount);
-	ancount = ntohs(hp->ancount);
-
-	/* question section */
-	if (qdcount != 1) {
-#ifdef DNSSEC_DEBUG
-		printf("query count is not 1.\n");
-#endif
-		h_errno = NO_RECOVERY;
-		goto end;
-	}
-	cp = (unsigned char *)(hp + 1);
-	len = dn_expand(answer, eom, cp, hostbuf, sizeof(hostbuf));
-	if (len < 0) {
-#ifdef DNSSEC_DEBUG
-		printf("dn_expand failed.\n");
-#endif
-		goto end;
-	}
-	cp += len;
-	GETSHORT(qtype, cp);		/* QTYPE */
-	GETSHORT(qclass, cp);		/* QCLASS */
-
-	/* answer section */
-	while (ancount-- && cp < eom) {
-		len = dn_expand(answer, eom, cp, hostbuf, sizeof(hostbuf));
-		if (len < 0) {
-#ifdef DNSSEC_DEBUG
-			printf("dn_expand failed.\n");
-#endif
-			goto end;
-		}
-		cp += len;
-		GETSHORT(qtype, cp);	/* TYPE */
-		GETSHORT(qclass, cp);	/* CLASS */
-		cp += INT32SZ;		/* TTL */
-		GETSHORT(rdlength, cp);	/* RDLENGTH */
-
-		/* CERT RR */
-		if (qtype != T_CERT) {
-#ifdef DNSSEC_DEBUG
-			printf("not T_CERT\n");
-#endif
-			h_errno = NO_RECOVERY;
-			goto end;
-		}
-		GETSHORT(qtype, cp);	/* type */
-		rdlength -= INT16SZ;
-		GETSHORT(keytag, cp);	/* key tag */
-		rdlength -= INT16SZ;
-		algorithm = *cp++;	/* algorithm */
-		rdlength -= 1;
-		if (cp + rdlength > eom) {
-#ifdef DNSSEC_DEBUG
-			printf("rdlength is too long.\n");
-#endif
-			h_errno = NO_RECOVERY;
-			goto end;
-		}
-#ifdef DNSSEC_DEBUG
-		printf("type=%d keytag=%d alg=%d len=%d\n",
-			qtype, keytag, algorithm, rdlength);
-#endif
-
-		/* create new certinfo */
-		cur->ci_next = getnewci(qtype, keytag, algorithm,
-					0, rdlength, cp);
-		if (!cur->ci_next) {
-#ifdef DNSSEC_DEBUG
-			printf("getnewci: %s", strerror(errno));
-#endif
-			h_errno = NO_RECOVERY;
-			goto end;
-		}
-		cur = cur->ci_next;
-
-		cp += rdlength;
-	}
-
-	*res = head.ci_next;
-	error = 0;
-
-end:
-	if (answer)
-		free(answer);
-	if (error && head.ci_next)
-		freecertinfo(head.ci_next);
-
-	return error;
-}
-#endif
-
-#ifdef DNSSEC_DEBUG
-int
-b64encode(p, len)
-	char *p;
-	int len;
-{
-	static const char b64t[] =
-		"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
-		"abcdefghijklmnopqrstuvwxyz"
-		"0123456789+/=";
-
-	while (len > 2) {
-                printf("%c", b64t[(p[0] >> 2) & 0x3f]);
-                printf("%c", b64t[((p[0] << 4) & 0x30) | ((p[1] >> 4) & 0x0f)]);
-                printf("%c", b64t[((p[1] << 2) & 0x3c) | ((p[2] >> 6) & 0x03)]);
-                printf("%c", b64t[p[2] & 0x3f]);
-		len -= 3;
-		p += 3;
-	}
-
-	if (len == 2) {
-                printf("%c", b64t[(p[0] >> 2) & 0x3f]);
-                printf("%c", b64t[((p[0] << 4) & 0x30)| ((p[1] >> 4) & 0x0f)]);
-                printf("%c", b64t[((p[1] << 2) & 0x3c)]);
-                printf("%c", '=');
-        } else if (len == 1) {
-                printf("%c", b64t[(p[0] >> 2) & 0x3f]);
-                printf("%c", b64t[((p[0] << 4) & 0x30)]);
-                printf("%c", '=');
-                printf("%c", '=');
-	}
-
-	return 0;
-}
-
-int
-main(ac, av)
-	int ac;
-	char **av;
-{
-	struct certinfo *res, *p;
-	int i;
-
-	if (ac < 2) {
-		printf("Usage: a.out (FQDN)\n");
-		exit(1);
-	}
-
-	i = getcertsbyname(*(av + 1), &res);
-	if (i != 0) {
-		herror("getcertsbyname");
-		exit(1);
-	}
-	printf("getcertsbyname succeeded.\n");
-
-	i = 0;
-	for (p = res; p; p = p->ci_next) {
-		printf("certinfo[%d]:\n", i);
-		printf("\tci_type=%d\n", p->ci_type);
-		printf("\tci_keytag=%d\n", p->ci_keytag);
-		printf("\tci_algorithm=%d\n", p->ci_algorithm);
-		printf("\tci_flags=%d\n", p->ci_flags);
-		printf("\tci_certlen=%d\n", p->ci_certlen);
-		printf("\tci_cert: ");
-		b64encode(p->ci_cert, p->ci_certlen);
-		printf("\n");
-		i++;
-	}
-
-	freecertinfo(res);
-
-	exit(0);
-}
-#endif
diff --git a/src/racoon/gnuc.h b/src/racoon/gnuc.h
deleted file mode 100644
index 8537ad2..0000000
--- a/src/racoon/gnuc.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*	$NetBSD: gnuc.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: gnuc.h,v 1.4 2004/11/18 15:14:44 ludvigm Exp */
-
-/* Define __P() macro, if necessary */
-#undef __P
-#ifndef __P
-#if __STDC__
-#define __P(protos) protos
-#else
-#define __P(protos) ()
-#endif
-#endif
-
-/* inline foo */
-#ifdef __GNUC__
-#define inline __inline
-#else
-#define inline
-#endif
-
-/*
- * Handle new and old "dead" routine prototypes
- *
- * For example:
- *
- *	__dead void foo(void) __attribute__((volatile));
- *
- */
-#ifdef __GNUC__
-#ifndef __dead
-#define __dead volatile
-#endif
-#if __GNUC__ < 2  || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)
-#ifndef __attribute__
-#define __attribute__(args)
-#endif
-#endif
-#else
-#ifndef __dead
-#define __dead
-#endif
-#ifndef __attribute__
-#define __attribute__(args)
-#endif
-#endif
diff --git a/src/racoon/grabmyaddr.c b/src/racoon/grabmyaddr.c
deleted file mode 100644
index dae4690..0000000
--- a/src/racoon/grabmyaddr.c
+++ /dev/null
@@ -1,938 +0,0 @@
-/*	$NetBSD: grabmyaddr.c,v 1.4.6.3 2008/06/18 07:30:18 mgrooms Exp $	*/
-
-/* Id: grabmyaddr.c,v 1.27 2006/04/06 16:27:05 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/ioctl.h>
-
-#include <net/if.h>
-#if defined(__FreeBSD__) && __FreeBSD__ >= 3
-#include <net/if_var.h>
-#endif
-#if defined(__NetBSD__) || defined(__FreeBSD__) ||	\
-  (defined(__APPLE__) && defined(__MACH__))
-#include <netinet/in.h>
-#include <netinet6/in6_var.h>
-#endif
-#include <net/route.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <netdb.h>
-#ifdef HAVE_GETIFADDRS
-#include <ifaddrs.h>
-#include <net/if.h>
-#endif 
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "debug.h"
-
-#include "localconf.h"
-#include "handler.h"
-#include "grabmyaddr.h"
-#include "sockmisc.h"
-#include "isakmp_var.h"
-#include "gcmalloc.h"
-#include "nattraversal.h"
-
-#ifdef __linux__
-#include <linux/types.h>
-#include <linux/rtnetlink.h>
-#ifndef HAVE_GETIFADDRS
-#define HAVE_GETIFADDRS
-#define NEED_LINUX_GETIFADDRS
-#endif
-#endif
-
-#ifdef ANDROID_CHANGES
-#include "NetdClient.h"
-#endif
-
-#ifndef HAVE_GETIFADDRS
-static unsigned int if_maxindex __P((void));
-#endif
-static struct myaddrs *find_myaddr __P((struct myaddrs *, struct myaddrs *));
-static int suitable_ifaddr __P((const char *, const struct sockaddr *));
-#ifdef INET6
-static int suitable_ifaddr6 __P((const char *, const struct sockaddr *));
-#endif
-
-#ifdef NEED_LINUX_GETIFADDRS
-
-/* We could do this _much_ better. kame racoon in its current form
- * will esentially die at frequent changes of address configuration.
- */
-
-struct ifaddrs
-{
-	struct ifaddrs *ifa_next;
-	char		ifa_name[16];
-	int		ifa_ifindex;
-	struct sockaddr *ifa_addr;
-	struct sockaddr_storage ifa_addrbuf;
-};
-
-static int parse_rtattr(struct rtattr *tb[], int max, struct rtattr *rta, int len)
-{
-	while (RTA_OK(rta, len)) {
-		if (rta->rta_type <= max)
-			tb[rta->rta_type] = rta;
-		rta = RTA_NEXT(rta,len);
-	}
-	return 0;
-}
-
-static void recvaddrs(int fd, struct ifaddrs **ifa, __u32 seq)
-{
-	char	buf[8192];
-	struct sockaddr_nl nladdr;
-	struct iovec iov = { buf, sizeof(buf) };
-	struct ifaddrmsg *m;
-	struct rtattr * rta_tb[IFA_MAX+1];
-	struct ifaddrs *I;
-
-	while (1) {
-		int status;
-		struct nlmsghdr *h;
-
-		struct msghdr msg = {
-			(void*)&nladdr, sizeof(nladdr),
-			&iov,	1,
-			NULL,	0,
-			0
-		};
-
-		status = recvmsg(fd, &msg, 0);
-
-		if (status < 0)
-			continue;
-
-		if (status == 0)
-			return;
-
-		if (nladdr.nl_pid) /* Message not from kernel */
-			continue;
-
-		h = (struct nlmsghdr*)buf;
-		while (NLMSG_OK(h, status)) {
-			if (h->nlmsg_seq != seq)
-				goto skip_it;
-
-			if (h->nlmsg_type == NLMSG_DONE)
-				return;
-
-			if (h->nlmsg_type == NLMSG_ERROR)
-				return;
-
-			if (h->nlmsg_type != RTM_NEWADDR)
-				goto skip_it;
-
-			m = NLMSG_DATA(h);
-
-			if (m->ifa_family != AF_INET &&
-			    m->ifa_family != AF_INET6)
-				goto skip_it;
-
-			if (m->ifa_flags&IFA_F_TENTATIVE)
-				goto skip_it;
-
-			memset(rta_tb, 0, sizeof(rta_tb));
-			parse_rtattr(rta_tb, IFA_MAX, IFA_RTA(m), h->nlmsg_len - NLMSG_LENGTH(sizeof(*m)));
-
-			if (rta_tb[IFA_LOCAL] == NULL)
-				rta_tb[IFA_LOCAL] = rta_tb[IFA_ADDRESS];
-			if (rta_tb[IFA_LOCAL] == NULL)
-				goto skip_it;
-			
-			I = malloc(sizeof(struct ifaddrs));
-			if (!I)
-				return;
-			memset(I, 0, sizeof(*I));
-
-			I->ifa_ifindex = m->ifa_index;
-			I->ifa_addr = (struct sockaddr*)&I->ifa_addrbuf;
-			I->ifa_addr->sa_family = m->ifa_family;
-			if (m->ifa_family == AF_INET) {
-				struct sockaddr_in *sin = (void*)I->ifa_addr;
-				memcpy(&sin->sin_addr, RTA_DATA(rta_tb[IFA_LOCAL]), 4);
-			} else {
-				struct sockaddr_in6 *sin = (void*)I->ifa_addr;
-				memcpy(&sin->sin6_addr, RTA_DATA(rta_tb[IFA_LOCAL]), 16);
-				if (IN6_IS_ADDR_LINKLOCAL(&sin->sin6_addr))
-					sin->sin6_scope_id = I->ifa_ifindex;
-			}
-			I->ifa_next = *ifa;
-			*ifa = I;
-
-skip_it:
-			h = NLMSG_NEXT(h, status);
-		}
-		if (msg.msg_flags & MSG_TRUNC)
-			continue;
-	}
-	return;
-}
-
-static int getifaddrs(struct ifaddrs **ifa0)
-{
-	struct {
-		struct nlmsghdr nlh;
-		struct rtgenmsg g;
-	} req;
-	struct sockaddr_nl nladdr;
-	static __u32 seq;
-	struct ifaddrs *i;
-	int fd;
-
-	fd = socket(PF_NETLINK, SOCK_RAW, NETLINK_ROUTE);
-	if (fd < 0)
-		return -1;
-
-	memset(&nladdr, 0, sizeof(nladdr));
-	nladdr.nl_family = AF_NETLINK;
-
-	req.nlh.nlmsg_len = sizeof(req);
-	req.nlh.nlmsg_type = RTM_GETADDR;
-	req.nlh.nlmsg_flags = NLM_F_ROOT|NLM_F_MATCH|NLM_F_REQUEST;
-	req.nlh.nlmsg_pid = 0;
-	req.nlh.nlmsg_seq = ++seq;
-	req.g.rtgen_family = AF_UNSPEC;
-
-	if (sendto(fd, (void*)&req, sizeof(req), 0, (struct sockaddr*)&nladdr, sizeof(nladdr)) < 0) {
-		close(fd);
-		return -1;
-	}
-
-	*ifa0 = NULL;
-
-	recvaddrs(fd, ifa0, seq);
-
-	close(fd);
-
-	fd = socket(AF_INET, SOCK_DGRAM, 0);
-
-	for (i=*ifa0; i; i = i->ifa_next) {
-		struct ifreq ifr;
-		ifr.ifr_ifindex = i->ifa_ifindex;
-		ioctl(fd, SIOCGIFNAME, (void*)&ifr);
-		memcpy(i->ifa_name, ifr.ifr_name, 16);
-	}
-	close(fd);
-
-	return 0;
-}
-
-static void freeifaddrs(struct ifaddrs *ifa0)
-{
-        struct ifaddrs *i;
-
-        while (ifa0) {
-                i = ifa0;
-                ifa0 = i->ifa_next;
-                free(i);
-        }
-}
-
-#endif
-
-#ifndef HAVE_GETIFADDRS
-static unsigned int
-if_maxindex()
-{
-	struct if_nameindex *p, *p0;
-	unsigned int max = 0;
-
-	p0 = if_nameindex();
-	for (p = p0; p && p->if_index && p->if_name; p++) {
-		if (max < p->if_index)
-			max = p->if_index;
-	}
-	if_freenameindex(p0);
-	return max;
-}
-#endif
-
-void
-clear_myaddr(db)
-	struct myaddrs **db;
-{
-	struct myaddrs *p;
-
-	while (*db) {
-		p = (*db)->next;
-		delmyaddr(*db);
-		*db = p;
-	}
-}
-  
-static struct myaddrs *
-find_myaddr(db, p)
-	struct myaddrs *db;
-	struct myaddrs *p;
-{
-	struct myaddrs *q;
-	char h1[NI_MAXHOST], h2[NI_MAXHOST];
-
-	if (getnameinfo(p->addr, sysdep_sa_len(p->addr), h1, sizeof(h1), NULL, 0,
-	    NI_NUMERICHOST | niflags) != 0)
-		return NULL;
-
-	for (q = db; q; q = q->next) {
-		if (p->addr->sa_family != q->addr->sa_family)
-			continue;
-		if (getnameinfo(q->addr, sysdep_sa_len(q->addr), h2, sizeof(h2),
-		    NULL, 0, NI_NUMERICHOST | niflags) != 0)
-			return NULL;
-		if (strcmp(h1, h2) == 0)
-			return q;
-	}
-
-	return NULL;
-}
-
-void
-grab_myaddrs()
-{
-#ifdef HAVE_GETIFADDRS
-	struct myaddrs *p, *q, *old;
-	struct ifaddrs *ifa0, *ifap;
-#ifdef INET6
-	struct sockaddr_in6 *sin6;
-#endif
-
-	char addr1[NI_MAXHOST];
-
-	if (getifaddrs(&ifa0)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"getifaddrs failed: %s\n", strerror(errno));
-		exit(1);
-		/*NOTREACHED*/
-	}
-
-	old = lcconf->myaddrs;
-
-	for (ifap = ifa0; ifap; ifap = ifap->ifa_next) {
-		if (! ifap->ifa_addr)
-			continue;
-
-		if (ifap->ifa_addr->sa_family != AF_INET
-#ifdef INET6
-		 && ifap->ifa_addr->sa_family != AF_INET6
-#endif
-		)
-			continue;
-
-		if (!suitable_ifaddr(ifap->ifa_name, ifap->ifa_addr)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"unsuitable address: %s %s\n",
-				ifap->ifa_name,
-				saddrwop2str(ifap->ifa_addr));
-			continue;
-		}
-
-		p = newmyaddr();
-		if (p == NULL) {
-			exit(1);
-			/*NOTREACHED*/
-		}
-		p->addr = dupsaddr(ifap->ifa_addr);
-		if (p->addr == NULL) {
-			exit(1);
-			/*NOTREACHED*/
-		}
-#ifdef INET6
-#ifdef __KAME__
-		if (ifap->ifa_addr->sa_family == AF_INET6) {
-			sin6 = (struct sockaddr_in6 *)p->addr;
-			if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)
-			 || IN6_IS_ADDR_SITELOCAL(&sin6->sin6_addr)) {
-				sin6->sin6_scope_id =
-					ntohs(*(u_int16_t *)&sin6->sin6_addr.s6_addr[2]);
-				sin6->sin6_addr.s6_addr[2] = 0;
-				sin6->sin6_addr.s6_addr[3] = 0;
-			}
-		}
-#else /* !__KAME__ */
-		if (ifap->ifa_addr->sa_family == AF_INET6) {
-			sin6 = (struct sockaddr_in6 *)p->addr;
-			if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)
-			 || IN6_IS_ADDR_SITELOCAL(&sin6->sin6_addr)) {
-				sin6->sin6_scope_id =
-					if_nametoindex(ifap->ifa_name);
-			}
-		}
-				
-#endif
-#endif
-		if (getnameinfo(p->addr, sysdep_sa_len(p->addr),
-				addr1, sizeof(addr1),
-				NULL, 0,
-				NI_NUMERICHOST | niflags))
-		strlcpy(addr1, "(invalid)", sizeof(addr1));
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"my interface: %s (%s)\n",
-			addr1, ifap->ifa_name);
-		q = find_myaddr(old, p);
-#ifdef ANDROID_CHANGES
-		if (q) {
-			protectFromVpn(q->sock);
-		}
-#endif
-		if (q)
-			p->sock = q->sock;
-		else
-			p->sock = -1;
-		p->next = lcconf->myaddrs;
-		lcconf->myaddrs = p;
-	}
-
-	freeifaddrs(ifa0);
-
-	clear_myaddr(&old);
-
-#else /*!HAVE_GETIFADDRS*/
-	int s;
-	unsigned int maxif;
-	int len;
-	struct ifreq *iflist;
-	struct ifconf ifconf;
-	struct ifreq *ifr, *ifr_end;
-	struct myaddrs *p, *q, *old;
-#ifdef INET6
-#ifdef __KAME__
-	struct sockaddr_in6 *sin6;
-#endif
-#endif
-
-	char addr1[NI_MAXHOST];
-
-	maxif = if_maxindex() + 1;
-	len = maxif * sizeof(struct sockaddr_storage) * 4; /* guess guess */
-
-	iflist = (struct ifreq *)racoon_malloc(len);
-	if (!iflist) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer\n");
-		exit(1);
-		/*NOTREACHED*/
-	}
-
-	if ((s = socket(PF_INET, SOCK_DGRAM, 0)) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"socket(SOCK_DGRAM) failed: %s\n",
-			strerror(errno));
-		exit(1);
-		/*NOTREACHED*/
-	}
-#ifdef ANDROID_CHANGES
-	protectFromVpn(s);
-#endif
-
-	memset(&ifconf, 0, sizeof(ifconf));
-	ifconf.ifc_req = iflist;
-	ifconf.ifc_len = len;
-	if (ioctl(s, SIOCGIFCONF, &ifconf) < 0) {
-		close(s);
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ioctl(SIOCGIFCONF) failed: %s\n",
-			strerror(errno));
-		exit(1);
-		/*NOTREACHED*/
-	}
-	close(s);
-
-	old = lcconf->myaddrs;
-
-	/* Look for this interface in the list */
-	ifr_end = (struct ifreq *) (ifconf.ifc_buf + ifconf.ifc_len);
-
-#define _IFREQ_LEN(p) \
-  (sizeof((p)->ifr_name) + sysdep_sa_len(&(p)->ifr_addr) > sizeof(struct ifreq) \
-    ? sizeof((p)->ifr_name) + sysdep_sa_len(&(p)->ifr_addr) : sizeof(struct ifreq))
-
-	for (ifr = ifconf.ifc_req;
-	     ifr < ifr_end;
-	     ifr = (struct ifreq *)((caddr_t)ifr + _IFREQ_LEN(ifr))) {
-
-		switch (ifr->ifr_addr.sa_family) {
-		case AF_INET:
-#ifdef INET6
-		case AF_INET6:
-#endif
-			if (!suitable_ifaddr(ifr->ifr_name, &ifr->ifr_addr)) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"unsuitable address: %s %s\n",
-					ifr->ifr_name,
-					saddrwop2str(&ifr->ifr_addr));
-				continue;
-			}
-
-			p = newmyaddr();
-			if (p == NULL) {
-				exit(1);
-				/*NOTREACHED*/
-			}
-			p->addr = dupsaddr(&ifr->ifr_addr);
-			if (p->addr == NULL) {
-				exit(1);
-				/*NOTREACHED*/
-			}
-#ifdef INET6
-#ifdef __KAME__
-			sin6 = (struct sockaddr_in6 *)p->addr;
-			if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr)
-			 || IN6_IS_ADDR_SITELOCAL(&sin6->sin6_addr)) {
-				sin6->sin6_scope_id =
-					ntohs(*(u_int16_t *)&sin6->sin6_addr.s6_addr[2]);
-				sin6->sin6_addr.s6_addr[2] = 0;
-				sin6->sin6_addr.s6_addr[3] = 0;
-			}
-#endif
-#endif
-			if (getnameinfo(p->addr, sysdep_sa_len(p->addr),
-					addr1, sizeof(addr1),
-					NULL, 0,
-					NI_NUMERICHOST | niflags))
-			strlcpy(addr1, "(invalid)", sizeof(addr1));
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"my interface: %s (%s)\n",
-				addr1, ifr->ifr_name);
-			q = find_myaddr(old, p);
-#ifdef ANDROID_CHANGES
-			if (q) {
-				protectFromVpn(q->sock);
-			}
-#endif
-			if (q)
-				p->sock = q->sock;
-			else
-				p->sock = -1;
-			p->next = lcconf->myaddrs;
-			lcconf->myaddrs = p;
-			break;
-		default:
-			break;
-		}
-	}
-
-	clear_myaddr(&old);
-
-	racoon_free(iflist);
-#endif /*HAVE_GETIFADDRS*/
-}
-
-/*
- * check the interface is suitable or not
- */
-static int
-suitable_ifaddr(ifname, ifaddr)
-	const char *ifname;
-	const struct sockaddr *ifaddr;
-{
-#ifdef ENABLE_HYBRID
-	/* Exclude any address we got through ISAKMP mode config */
-	if (exclude_cfg_addr(ifaddr) == 0)
-		return 0;
-#endif
-	switch(ifaddr->sa_family) {
-	case AF_INET:
-		return 1;
-#ifdef INET6
-	case AF_INET6:
-		return suitable_ifaddr6(ifname, ifaddr);
-#endif
-	default:
-		return 0;
-	}
-	/*NOTREACHED*/
-}
-
-#ifdef INET6
-static int
-suitable_ifaddr6(ifname, ifaddr)
-	const char *ifname;
-	const struct sockaddr *ifaddr;
-{
-#ifndef __linux__
-	struct in6_ifreq ifr6;
-	int s;
-#endif
-
-	if (ifaddr->sa_family != AF_INET6)
-		return 0;
-
-#ifndef __linux__
-	s = socket(PF_INET6, SOCK_DGRAM, 0);
-	if (s == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"socket(SOCK_DGRAM) failed:%s\n", strerror(errno));
-		return 0;
-	}
-#ifdef ANDROID_CHANGES
-	protectFromVpn(s);
-#endif
-
-	memset(&ifr6, 0, sizeof(ifr6));
-	strncpy(ifr6.ifr_name, ifname, strlen(ifname));
-
-	ifr6.ifr_addr = *(const struct sockaddr_in6 *)ifaddr;
-
-	if (ioctl(s, SIOCGIFAFLAG_IN6, &ifr6) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ioctl(SIOCGIFAFLAG_IN6) failed:%s\n", strerror(errno));
-		close(s);
-		return 0;
-	}
-
-	close(s);
-
-	if (ifr6.ifr_ifru.ifru_flags6 & IN6_IFF_DUPLICATED
-	 || ifr6.ifr_ifru.ifru_flags6 & IN6_IFF_DETACHED
-	 || ifr6.ifr_ifru.ifru_flags6 & IN6_IFF_ANYCAST)
-		return 0;
-#endif
-
-	/* suitable */
-	return 1;
-}
-#endif
-
-int
-update_myaddrs()
-{
-#ifdef __linux__
-	char msg[BUFSIZ];
-	int len;
-	struct nlmsghdr *h = (void*)msg;
-	len = read(lcconf->rtsock, msg, sizeof(msg));
-	if (len < 0)
-		return errno == ENOBUFS;
-	if (len < sizeof(*h))
-		return 0;
-	if (h->nlmsg_pid) /* not from kernel! */
-		return 0;
-	if (h->nlmsg_type == RTM_NEWLINK)
-		return 0;
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"netlink signals update interface address list\n");
-	return 1;
-#else
-	char msg[BUFSIZ];
-	int len;
-	struct rt_msghdr *rtm;
-
-	len = read(lcconf->rtsock, msg, sizeof(msg));
-	if (len < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"read(PF_ROUTE) failed: %s\n",
-			strerror(errno));
-		return 0;
-	}
-	rtm = (struct rt_msghdr *)msg;
-	if (len < rtm->rtm_msglen) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"read(PF_ROUTE) short read\n");
-		return 0;
-	}
-	if (rtm->rtm_version != RTM_VERSION) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"routing socket version mismatch\n");
-		close(lcconf->rtsock);
-		lcconf->rtsock = -1;
-		return 0;
-	}
-	switch (rtm->rtm_type) {
-	case RTM_NEWADDR:
-	case RTM_DELADDR:
-	case RTM_DELETE:
-	case RTM_IFINFO:
-		break;
-	case RTM_MISS:
-		/* ignore this message silently */
-		return 0;
-	default:
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"msg %d not interesting\n", rtm->rtm_type);
-		return 0;
-	}
-	/* XXX more filters here? */
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"caught rtm:%d, need update interface address list\n",
-		rtm->rtm_type);
-	return 1;
-#endif /* __linux__ */
-}
-
-/*
- * initialize default port for ISAKMP to send, if no "listen"
- * directive is specified in config file.
- *
- * DO NOT listen to wildcard addresses.  if you receive packets to
- * wildcard address, you'll be in trouble (DoS attack possible by
- * broadcast storm).
- */
-int
-autoconf_myaddrsport()
-{
-	struct myaddrs *p;
-	int n;
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"configuring default isakmp port.\n");
-
-#ifdef ENABLE_NATT
-	if (natt_enabled_in_rmconf ()) {
-		plog(LLV_NOTIFY, LOCATION, NULL, "NAT-T is enabled, autoconfiguring ports\n");
-		for (p = lcconf->myaddrs; p; p = p->next) {
-			struct myaddrs *new;
-			if (! p->udp_encap) {
-				new = dupmyaddr(p);
-				new->udp_encap = 1;
-			}
-		}
-	}
-#endif
-
-	for (p = lcconf->myaddrs, n = 0; p; p = p->next, n++) {
-		set_port (p->addr, p->udp_encap ? lcconf->port_isakmp_natt : lcconf->port_isakmp);
-	}
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"%d addrs are configured successfully\n", n);
-
-	return 0;
-}
-
-/*
- * get a port number to which racoon binded.
- */
-u_short
-getmyaddrsport(local)
-	struct sockaddr *local;
-{
-	struct myaddrs *p, *bestmatch = NULL;
-	u_short bestmatch_port = PORT_ISAKMP;
-
-	/* get a relative port */
-	for (p = lcconf->myaddrs; p; p = p->next) {
-		if (!p->addr)
-			continue;
-		if (cmpsaddrwop(local, p->addr))
-			continue;
-
-		/* use first matching address regardless of port */
-		if (!bestmatch) {
-			bestmatch = p;
-			continue;
-		}
-
-		/* matching address with port PORT_ISAKMP */
-		if (extract_port(p->addr) == PORT_ISAKMP) {
-			bestmatch = p;
-			bestmatch_port = PORT_ISAKMP;
-		}
-	}
-
-	return bestmatch_port;
-}
-
-struct myaddrs *
-newmyaddr()
-{
-	struct myaddrs *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer for myaddrs.\n");
-		return NULL;
-	}
-
-	new->next = NULL;
-	new->addr = NULL;
-
-	return new;
-}
-
-struct myaddrs *
-dupmyaddr(struct myaddrs *old)
-{
-	struct myaddrs *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer for myaddrs.\n");
-		return NULL;
-	}
-
-	/* Copy the whole structure and set the differences.  */
-	memcpy (new, old, sizeof (*new));
-	new->addr = dupsaddr (old->addr);
-	if (new->addr == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer for myaddrs.\n");
-		racoon_free(new);
-		return NULL;
-	}
-	new->next = old->next;
-	old->next = new;
-
-	return new;
-}
-
-void
-insmyaddr(new, head)
-	struct myaddrs *new;
-	struct myaddrs **head;
-{
-	new->next = *head;
-	*head = new;
-}
-
-void
-delmyaddr(myaddr)
-	struct myaddrs *myaddr;
-{
-	if (myaddr->addr)
-		racoon_free(myaddr->addr);
-	racoon_free(myaddr);
-}
-
-int
-initmyaddr()
-{
-	/* initialize routing socket */
-	lcconf->rtsock = socket(PF_ROUTE, SOCK_RAW, PF_UNSPEC);
-	if (lcconf->rtsock < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"socket(PF_ROUTE) failed: %s",
-			strerror(errno));
-		return -1;
-	}
-
-#ifdef __linux__
-   {
-	struct sockaddr_nl nl;
-	u_int addr_len;
-
-	memset(&nl, 0, sizeof(nl));
-	nl.nl_family = AF_NETLINK;
-	nl.nl_groups = RTMGRP_IPV4_IFADDR|RTMGRP_LINK|RTMGRP_IPV6_IFADDR;
-
-	if (bind(lcconf->rtsock, (struct sockaddr*)&nl, sizeof(nl)) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "bind(PF_NETLINK) failed: %s\n",
-		     strerror(errno));
-		return -1;
-	}
-	addr_len = sizeof(nl);
-	if (getsockname(lcconf->rtsock, (struct sockaddr*)&nl, &addr_len) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "getsockname(PF_NETLINK) failed: %s\n",
-		     strerror(errno));
-		return -1;
-	}
-   }
-#endif
-
-	if (lcconf->myaddrs == NULL && lcconf->autograbaddr == 1) {
-		grab_myaddrs();
-
-		if (autoconf_myaddrsport() < 0)
-			return -1;
-	}
-
-	return 0;
-}
-
-/* select the socket to be sent */
-/* should implement other method. */
-int
-getsockmyaddr(my)
-	struct sockaddr *my;
-{
-	struct myaddrs *p, *lastresort = NULL;
-#if defined(INET6) && defined(__linux__)
-	struct myaddrs *match_wo_scope_id = NULL;
-	int check_wo_scope_id = (my->sa_family == AF_INET6) && 
-		IN6_IS_ADDR_LINKLOCAL(&((struct sockaddr_in6 *)my)->sin6_addr);
-#endif
-
-	for (p = lcconf->myaddrs; p; p = p->next) {
-		if (p->addr == NULL)
-			continue;
-		if (my->sa_family == p->addr->sa_family) {
-			lastresort = p;
-		} else continue;
-		if (sysdep_sa_len(my) == sysdep_sa_len(p->addr)
-		 && memcmp(my, p->addr, sysdep_sa_len(my)) == 0) {
-			break;
-		}
-#if defined(INET6) && defined(__linux__)
-		if (check_wo_scope_id && IN6_IS_ADDR_LINKLOCAL(&((struct sockaddr_in6 *)p->addr)->sin6_addr) &&
-			/* XXX: this depends on sin6_scope_id to be last
-			 * item in struct sockaddr_in6 */
-			memcmp(my, p->addr, 
-				sysdep_sa_len(my) - sizeof(uint32_t)) == 0) {
-			match_wo_scope_id = p;
-		}
-#endif
-	}
-#if defined(INET6) && defined(__linux__)
-	if (!p)
-		p = match_wo_scope_id;
-#endif
-	if (!p)
-		p = lastresort;
-	if (!p) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no socket matches address family %d\n",
-			my->sa_family);
-		return -1;
-	}
-
-	return p->sock;
-}
diff --git a/src/racoon/grabmyaddr.h b/src/racoon/grabmyaddr.h
deleted file mode 100644
index ac74b46..0000000
--- a/src/racoon/grabmyaddr.h
+++ /dev/null
@@ -1,56 +0,0 @@
-/*	$NetBSD: grabmyaddr.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: grabmyaddr.h,v 1.5 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _GRABMYADDR_H
-#define _GRABMYADDR_H
-
-struct myaddrs {
-	struct myaddrs *next;
-	struct sockaddr *addr;
-	int sock;
-	int udp_encap;
-};
-
-extern void clear_myaddr __P((struct myaddrs **));
-extern void grab_myaddrs __P((void));
-extern int update_myaddrs __P((void));
-extern int autoconf_myaddrsport __P((void));
-extern u_short getmyaddrsport __P((struct sockaddr *));
-extern struct myaddrs *newmyaddr __P((void));
-extern struct myaddrs *dupmyaddr __P((struct myaddrs *));
-extern void insmyaddr __P((struct myaddrs *, struct myaddrs **));
-extern void delmyaddr __P((struct myaddrs *));
-extern int initmyaddr __P((void));
-extern int getsockmyaddr __P((struct sockaddr *));
-
-#endif /* _GRABMYADDR_H */
diff --git a/src/racoon/gssapi.c b/src/racoon/gssapi.c
deleted file mode 100644
index e64b201..0000000
--- a/src/racoon/gssapi.c
+++ /dev/null
@@ -1,749 +0,0 @@
-/*	$NetBSD: gssapi.c,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/*	$KAME: gssapi.c,v 1.19 2001/04/03 15:51:55 thorpej Exp $	*/
-
-/*
- * Copyright 2000 Wasabi Systems, Inc.
- * All rights reserved.
- *
- * This software was written by Frank van der Linden of Wasabi Systems
- * for Zembu Labs, Inc. http://www.zembu.com/
- *
- * 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. The name of Wasabi Systems, Inc. may not be used to endorse
- *    or promote products derived from this software without specific prior
- *    written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``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 WASABI SYSTEMS, INC
- * 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.
- */
-
-#include "config.h"
-
-#ifdef HAVE_GSSAPI
-
-#include <sys/types.h>
-#include <sys/queue.h>
-#include <sys/socket.h>
-#include <netdb.h>
-#include <unistd.h>
-
-#include <stdlib.h>
-#include <string.h>
-#include <errno.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "schedule.h"
-#include "debug.h"
-
-#include "localconf.h"
-#include "remoteconf.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "oakley.h"
-#include "handler.h"
-#include "ipsec_doi.h"
-#include "crypto_openssl.h"
-#include "pfkey.h"
-#include "isakmp_ident.h"
-#include "isakmp_inf.h"
-#include "vendorid.h"
-#include "gcmalloc.h"
-
-#include "gssapi.h"
-
-static void
-gssapi_error(OM_uint32 status_code, const char *where,
-	     const char *fmt, ...)
-{
-	OM_uint32 message_context, maj_stat, min_stat;
-	gss_buffer_desc status_string;
-	va_list ap;
-
-	va_start(ap, fmt);
-	plogv(LLV_ERROR, where, NULL, fmt, ap);
-	va_end(ap);
-
-	message_context = 0;
-
-	do {
-		maj_stat = gss_display_status(&min_stat, status_code,
-		    GSS_C_MECH_CODE, GSS_C_NO_OID, &message_context,
-		    &status_string);
-		if (GSS_ERROR(maj_stat))
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "UNABLE TO GET GSSAPI ERROR CODE\n");
-		else {
-			plog(LLV_ERROR, where, NULL,
-			    "%s\n", (char *)status_string.value);
-			gss_release_buffer(&min_stat, &status_string);
-		}
-	} while (message_context != 0);
-}
-
-/*
- * vmbufs and gss_buffer_descs are really just the same on NetBSD, but
- * this is to be portable.
- */
-static int
-gssapi_vm2gssbuf(vchar_t *vmbuf, gss_buffer_t gsstoken)
-{
-
-	gsstoken->value = racoon_malloc(vmbuf->l);
-	if (gsstoken->value == NULL)
-		return -1;
-	memcpy(gsstoken->value, vmbuf->v, vmbuf->l);
-	gsstoken->length = vmbuf->l;
-
-	return 0;
-}
-
-static int
-gssapi_gss2vmbuf(gss_buffer_t gsstoken, vchar_t **vmbuf)
-{
-
-	*vmbuf = vmalloc(gsstoken->length);
-	if (*vmbuf == NULL)
-		return -1;
-	memcpy((*vmbuf)->v, gsstoken->value, gsstoken->length);
-	(*vmbuf)->l = gsstoken->length;
-
-	return 0;
-}
-
-vchar_t *
-gssapi_get_default_gss_id(void)
-{
-	char name[NI_MAXHOST];
-	vchar_t *gssid;
-
-	if (gethostname(name, sizeof(name)) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "gethostname failed: %s\n",
-		    strerror(errno));
-		return (NULL);
-	}
-	name[sizeof(name) - 1] = '\0';
-
-	gssid = racoon_malloc(sizeof(*gssid));
-	gssid->l = asprintf(&gssid->v, "%s/%s", GSSAPI_DEF_NAME, name);
-
-	return (gssid);
-}
-
-static int
-gssapi_get_default_name(struct ph1handle *iph1, int remote, gss_name_t *service)
-{
-	char name[NI_MAXHOST];
-	struct sockaddr *sa;
-	char* buf = NULL;
-	gss_buffer_desc name_token;
-	OM_uint32 min_stat, maj_stat;
-
-	sa = remote ? iph1->remote : iph1->local;
-
-	if (getnameinfo(sa, sysdep_sa_len(sa), name, NI_MAXHOST, NULL, 0, 0) != 0)
-		return -1;
-
-	name_token.length = asprintf(&buf, "%s@%s", GSSAPI_DEF_NAME, name);
-	name_token.value = buf;
-
-	maj_stat = gss_import_name(&min_stat, &name_token,
-	    GSS_C_NT_HOSTBASED_SERVICE, service);
-	if (GSS_ERROR(maj_stat)) {
-		gssapi_error(min_stat, LOCATION, "import name\n");
-		maj_stat = gss_release_buffer(&min_stat, &name_token);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION, "release name_token");
-		return -1;
-	}
-	maj_stat = gss_release_buffer(&min_stat, &name_token);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release name_token");
-
-	return 0;
-}
-
-static int
-gssapi_init(struct ph1handle *iph1)
-{
-	struct gssapi_ph1_state *gps;
-	gss_buffer_desc id_token, cred_token;
-	gss_buffer_t cred = &cred_token;
-	gss_name_t princ, canon_princ;
-	OM_uint32 maj_stat, min_stat;
-
-	gps = racoon_calloc(1, sizeof (struct gssapi_ph1_state));
-	if (gps == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "racoon_calloc failed\n");
-		return -1;
-	}
-	gps->gss_context = GSS_C_NO_CONTEXT;
-	gps->gss_cred = GSS_C_NO_CREDENTIAL;
-
-	gssapi_set_state(iph1, gps);
-
-	if (iph1->rmconf->proposal->gssid != NULL) {
-		id_token.length = iph1->rmconf->proposal->gssid->l;
-		id_token.value = iph1->rmconf->proposal->gssid->v;
-		maj_stat = gss_import_name(&min_stat, &id_token, GSS_C_NO_OID,
-		    &princ);
-		if (GSS_ERROR(maj_stat)) {
-			gssapi_error(min_stat, LOCATION, "import name\n");
-			gssapi_free_state(iph1);
-			return -1;
-		}
-	} else
-		gssapi_get_default_name(iph1, 0, &princ);
-
-	maj_stat = gss_canonicalize_name(&min_stat, princ, GSS_C_NO_OID,
-	    &canon_princ);
-	if (GSS_ERROR(maj_stat)) {
-		gssapi_error(min_stat, LOCATION, "canonicalize name\n");
-		maj_stat = gss_release_name(&min_stat, &princ);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION, "release princ\n");
-		gssapi_free_state(iph1);
-		return -1;
-	}
-	maj_stat = gss_release_name(&min_stat, &princ);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release princ\n");
-
-	maj_stat = gss_export_name(&min_stat, canon_princ, cred);
-	if (GSS_ERROR(maj_stat)) {
-		gssapi_error(min_stat, LOCATION, "export name\n");
-		maj_stat = gss_release_name(&min_stat, &canon_princ);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION,
-			    "release canon_princ\n");
-		gssapi_free_state(iph1);
-		return -1;
-	}
-
-#if 0
-	/*
-	 * XXXJRT Did this debug message ever work?  This is a GSS name
-	 * blob at this point.
-	 */
-	plog(LLV_DEBUG, LOCATION, NULL, "will try to acquire '%.*s' creds\n",
-	    cred->length, cred->value);
-#endif
-
-	maj_stat = gss_release_buffer(&min_stat, cred);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release cred buffer\n");
-
-	maj_stat = gss_acquire_cred(&min_stat, canon_princ, GSS_C_INDEFINITE,
-	    GSS_C_NO_OID_SET, GSS_C_BOTH, &gps->gss_cred, NULL, NULL);
-	if (GSS_ERROR(maj_stat)) {
-		gssapi_error(min_stat, LOCATION, "acquire cred\n");
-		maj_stat = gss_release_name(&min_stat, &canon_princ);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION,
-			    "release canon_princ\n");
-		gssapi_free_state(iph1);
-		return -1;
-	}
-	maj_stat = gss_release_name(&min_stat, &canon_princ);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release canon_princ\n");
-
-	return 0;
-}
-
-int
-gssapi_get_itoken(struct ph1handle *iph1, int *lenp)
-{
-	struct gssapi_ph1_state *gps;
-	gss_buffer_desc empty, name_token;
-	gss_buffer_t itoken, rtoken, dummy;
-	OM_uint32 maj_stat, min_stat;
-	gss_name_t partner;
-
-	if (gssapi_get_state(iph1) == NULL && gssapi_init(iph1) < 0)
-		return -1;
-
-	gps = gssapi_get_state(iph1);
-
-	empty.length = 0;
-	empty.value = NULL;
-	dummy = &empty;
-
-	if (iph1->approval != NULL && iph1->approval->gssid != NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-		    "using provided service '%.*s'\n",
-		    (int)iph1->approval->gssid->l, iph1->approval->gssid->v);
-		name_token.length = iph1->approval->gssid->l;
-		name_token.value = iph1->approval->gssid->v;
-		maj_stat = gss_import_name(&min_stat, &name_token,
-		    GSS_C_NO_OID, &partner);
-		if (GSS_ERROR(maj_stat)) {
-			gssapi_error(min_stat, LOCATION, "import of %.*s\n",
-			    name_token.length, name_token.value);
-			return -1;
-		}
-	} else
-		if (gssapi_get_default_name(iph1, 1, &partner) < 0)
-			return -1;
-
-	rtoken = gps->gsscnt_p == 0 ? dummy : &gps->gss_p[gps->gsscnt_p - 1];
-	itoken = &gps->gss[gps->gsscnt];
-
-	gps->gss_status = gss_init_sec_context(&min_stat, gps->gss_cred,
-	    &gps->gss_context, partner, GSS_C_NO_OID,
-	    GSS_C_MUTUAL_FLAG | GSS_C_SEQUENCE_FLAG |
-		GSS_C_CONF_FLAG | GSS_C_INTEG_FLAG,
-	    0, GSS_C_NO_CHANNEL_BINDINGS, rtoken, NULL,
-	    itoken, NULL, NULL);
-
-	if (GSS_ERROR(gps->gss_status)) {
-		gssapi_error(min_stat, LOCATION, "init_sec_context\n");
-		maj_stat = gss_release_name(&min_stat, &partner);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION, "release name\n");
-		return -1;
-	}
-	maj_stat = gss_release_name(&min_stat, &partner);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release name\n");
-
-	plog(LLV_DEBUG, LOCATION, NULL, "gss_init_sec_context status %x\n",
-	    gps->gss_status);
-
-	if (lenp)
-		*lenp = itoken->length;
-
-	if (itoken->length != 0)
-		gps->gsscnt++;
-
-	return 0;
-}
-
-/*
- * Call gss_accept_context, with token just read from the wire.
- */
-int
-gssapi_get_rtoken(struct ph1handle *iph1, int *lenp)
-{
-	struct gssapi_ph1_state *gps;
-	gss_buffer_desc name_token;
-	gss_buffer_t itoken, rtoken;
-	OM_uint32 min_stat, maj_stat;
-	gss_name_t client_name;
-
-	if (gssapi_get_state(iph1) == NULL && gssapi_init(iph1) < 0)
-		return -1;
-
-	gps = gssapi_get_state(iph1);
-
-	rtoken = &gps->gss_p[gps->gsscnt_p - 1];
-	itoken = &gps->gss[gps->gsscnt];
-
-	gps->gss_status = gss_accept_sec_context(&min_stat, &gps->gss_context,
-	    gps->gss_cred, rtoken, GSS_C_NO_CHANNEL_BINDINGS, &client_name,
-	    NULL, itoken, NULL, NULL, NULL);
-
-	if (GSS_ERROR(gps->gss_status)) {
-		gssapi_error(min_stat, LOCATION, "accept_sec_context\n");
-		return -1;
-	}
-
-	maj_stat = gss_display_name(&min_stat, client_name, &name_token, NULL);
-	if (GSS_ERROR(maj_stat)) {
-		gssapi_error(min_stat, LOCATION, "gss_display_name\n");
-		maj_stat = gss_release_name(&min_stat, &client_name);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION,
-			    "release client_name\n");
-		return -1;
-	}
-	maj_stat = gss_release_name(&min_stat, &client_name);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release client_name\n");
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"gss_accept_sec_context: other side is %s\n",
-		(char *)name_token.value);
-	maj_stat = gss_release_buffer(&min_stat, &name_token);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release name buffer\n");
-
-	if (itoken->length != 0)
-		gps->gsscnt++;
-
-	if (lenp)
-		*lenp = itoken->length;
-
-	return 0;
-}
-
-int
-gssapi_save_received_token(struct ph1handle *iph1, vchar_t *token)
-{
-	struct gssapi_ph1_state *gps;
-	gss_buffer_t gsstoken;
-	int ret;
-
-	if (gssapi_get_state(iph1) == NULL && gssapi_init(iph1) < 0)
-		return -1;
-
-	gps = gssapi_get_state(iph1);
-
-	gsstoken = &gps->gss_p[gps->gsscnt_p];
-
-	ret = gssapi_vm2gssbuf(token, gsstoken);
-	if (ret < 0)
-		return ret;
-	gps->gsscnt_p++;
-
-	return 0;
-}
-
-int
-gssapi_get_token_to_send(struct ph1handle *iph1, vchar_t **token)
-{
-	struct gssapi_ph1_state *gps;
-	gss_buffer_t gsstoken;
-	int ret;
-
-	gps = gssapi_get_state(iph1);
-	if (gps == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "gssapi not yet initialized?\n");
-		return -1;
-	}
-	gsstoken = &gps->gss[gps->gsscnt - 1];
-	ret = gssapi_gss2vmbuf(gsstoken, token);
-	if (ret < 0)
-		return ret;
-
-	return 0;
-}
-
-int
-gssapi_get_itokens(struct ph1handle *iph1, vchar_t **tokens)
-{
-	struct gssapi_ph1_state *gps;
-	int len, i;
-	vchar_t *toks;
-	char *p;
-
-	gps = gssapi_get_state(iph1);
-	if (gps == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "gssapi not yet initialized?\n");
-		return -1;
-	}
-
-	for (i = len = 0; i < gps->gsscnt; i++)
-		len += gps->gss[i].length;
-
-	toks = vmalloc(len);
-	if (toks == 0)
-		return -1;
-	p = (char *)toks->v;
-	for (i = 0; i < gps->gsscnt; i++) {
-		memcpy(p, gps->gss[i].value, gps->gss[i].length);
-		p += gps->gss[i].length;
-	}
-
-	*tokens = toks;
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"%d itokens of length %zu\n", gps->gsscnt, (*tokens)->l);
-
-	return 0;
-}
-
-int
-gssapi_get_rtokens(struct ph1handle *iph1, vchar_t **tokens)
-{
-	struct gssapi_ph1_state *gps;
-	int len, i;
-	vchar_t *toks;
-	char *p;
-
-	gps = gssapi_get_state(iph1);
-	if (gps == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "gssapi not yet initialized?\n");
-		return -1;
-	}
-
-	if (gssapi_more_tokens(iph1)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "gssapi roundtrips not complete\n");
-		return -1;
-	}
-
-	for (i = len = 0; i < gps->gsscnt_p; i++)
-		len += gps->gss_p[i].length;
-
-	toks = vmalloc(len);
-	if (toks == 0)
-		return -1;
-	p = (char *)toks->v;
-	for (i = 0; i < gps->gsscnt_p; i++) {
-		memcpy(p, gps->gss_p[i].value, gps->gss_p[i].length);
-		p += gps->gss_p[i].length;
-	}
-
-	*tokens = toks;
-
-	return 0;
-}
-
-vchar_t *
-gssapi_wraphash(struct ph1handle *iph1)
-{
-	struct gssapi_ph1_state *gps;
-	OM_uint32 maj_stat, min_stat;
-	gss_buffer_desc hash_in_buf, hash_out_buf;
-	gss_buffer_t hash_in = &hash_in_buf, hash_out = &hash_out_buf;
-	vchar_t *outbuf;
-
-	gps = gssapi_get_state(iph1);
-	if (gps == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "gssapi not yet initialized?\n");
-		return NULL;
-	}
-
-	if (gssapi_more_tokens(iph1)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "gssapi roundtrips not complete\n");
-		return NULL;
-	}
-
-	if (gssapi_vm2gssbuf(iph1->hash, hash_in) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "vm2gssbuf failed\n");
-		return NULL;
-	}
-
-	maj_stat = gss_wrap(&min_stat, gps->gss_context, 1, GSS_C_QOP_DEFAULT,
-	    hash_in, NULL, hash_out);
-	if (GSS_ERROR(maj_stat)) {
-		gssapi_error(min_stat, LOCATION, "wrapping hash value\n");
-		maj_stat = gss_release_buffer(&min_stat, hash_in);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION,
-			    "release hash_in buffer\n");
-		return NULL;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "wrapped HASH, ilen %zu olen %zu\n",
-	    hash_in->length, hash_out->length);
-
-	maj_stat = gss_release_buffer(&min_stat, hash_in);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release hash_in buffer\n");
-
-	if (gssapi_gss2vmbuf(hash_out, &outbuf) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "gss2vmbuf failed\n");
-		maj_stat = gss_release_buffer(&min_stat, hash_out);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION,
-			    "release hash_out buffer\n");
-		return NULL;
-	}
-	maj_stat = gss_release_buffer(&min_stat, hash_out);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release hash_out buffer\n");
-
-	return outbuf;
-}
-
-vchar_t *
-gssapi_unwraphash(struct ph1handle *iph1)
-{
-	struct gssapi_ph1_state *gps;
-	OM_uint32 maj_stat, min_stat;
-	gss_buffer_desc hashbuf, hash_outbuf;
-	gss_buffer_t hash_in = &hashbuf, hash_out = &hash_outbuf;
-	vchar_t *outbuf;
-
-	gps = gssapi_get_state(iph1);
-	if (gps == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "gssapi not yet initialized?\n");
-		return NULL;
-	}
-
-
-	hashbuf.length = ntohs(iph1->pl_hash->h.len) - sizeof(*iph1->pl_hash);
-	hashbuf.value = (char *)(iph1->pl_hash + 1);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "unwrapping HASH of len %zu\n",
-	    hashbuf.length);
-
-	maj_stat = gss_unwrap(&min_stat, gps->gss_context, hash_in, hash_out,
-	    NULL, NULL);
-	if (GSS_ERROR(maj_stat)) {
-		gssapi_error(min_stat, LOCATION, "unwrapping hash value\n");
-		return NULL;
-	}
-
-	if (gssapi_gss2vmbuf(hash_out, &outbuf) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "gss2vmbuf failed\n");
-		maj_stat = gss_release_buffer(&min_stat, hash_out);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION,
-			    "release hash_out buffer\n");
-		return NULL;
-	}
-	maj_stat = gss_release_buffer(&min_stat, hash_out);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release hash_out buffer\n");
-
-	return outbuf;
-}
-
-void
-gssapi_set_id_sent(struct ph1handle *iph1)
-{
-	struct gssapi_ph1_state *gps;
-
-	gps = gssapi_get_state(iph1);
-
-	gps->gss_flags |= GSSFLAG_ID_SENT;
-}
-
-int
-gssapi_id_sent(struct ph1handle *iph1)
-{
-	struct gssapi_ph1_state *gps;
-
-	gps = gssapi_get_state(iph1);
-
-	return (gps->gss_flags & GSSFLAG_ID_SENT) != 0;
-}
-
-void
-gssapi_set_id_rcvd(struct ph1handle *iph1)
-{
-	struct gssapi_ph1_state *gps;
-
-	gps = gssapi_get_state(iph1);
-
-	gps->gss_flags |= GSSFLAG_ID_RCVD;
-}
-
-int
-gssapi_id_rcvd(struct ph1handle *iph1)
-{
-	struct gssapi_ph1_state *gps;
-
-	gps = gssapi_get_state(iph1);
-
-	return (gps->gss_flags & GSSFLAG_ID_RCVD) != 0;
-}
-
-void
-gssapi_free_state(struct ph1handle *iph1)
-{
-	struct gssapi_ph1_state *gps;
-	OM_uint32 maj_stat, min_stat;
-
-	gps = gssapi_get_state(iph1);
-
-	if (gps == NULL)
-		return;
-
-	gssapi_set_state(iph1, NULL);
-
-	if (gps->gss_cred != GSS_C_NO_CREDENTIAL) {
-		maj_stat = gss_release_cred(&min_stat, &gps->gss_cred);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION,
-			    "releasing credentials\n");
-	}
-	racoon_free(gps);
-}
-
-vchar_t *
-gssapi_get_id(struct ph1handle *iph1)
-{
-	gss_buffer_desc id_buffer;
-	gss_buffer_t id = &id_buffer;
-	gss_name_t defname, canon_name;
-	OM_uint32 min_stat, maj_stat;
-	vchar_t *vmbuf;
-
-	if (iph1->rmconf->proposal->gssid != NULL)
-		return (vdup(iph1->rmconf->proposal->gssid));
-
-	if (gssapi_get_default_name(iph1, 0, &defname) < 0)
-		return NULL;
-
-	maj_stat = gss_canonicalize_name(&min_stat, defname, GSS_C_NO_OID,
-	    &canon_name);
-	if (GSS_ERROR(maj_stat)) {
-		gssapi_error(min_stat, LOCATION, "canonicalize name\n");
-		maj_stat = gss_release_name(&min_stat, &defname);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION,
-			    "release default name\n");
-		return NULL;
-	}
-	maj_stat = gss_release_name(&min_stat, &defname);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release default name\n");
-
-	maj_stat = gss_export_name(&min_stat, canon_name, id);
-	if (GSS_ERROR(maj_stat)) {
-		gssapi_error(min_stat, LOCATION, "export name\n");
-		maj_stat = gss_release_name(&min_stat, &canon_name);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION,
-			    "release canonical name\n");
-		return NULL;
-	}
-	maj_stat = gss_release_name(&min_stat, &canon_name);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release canonical name\n");
-
-#if 0
-	/*
-	 * XXXJRT Did this debug message ever work?  This is a GSS name
-	 * blob at this point.
-	 */
-	plog(LLV_DEBUG, LOCATION, NULL, "will try to acquire '%.*s' creds\n",
-	    id->length, id->value);
-#endif
-
-	if (gssapi_gss2vmbuf(id, &vmbuf) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "gss2vmbuf failed\n");
-		maj_stat = gss_release_buffer(&min_stat, id);
-		if (GSS_ERROR(maj_stat))
-			gssapi_error(min_stat, LOCATION, "release id buffer\n");
-		return NULL;
-	}
-	maj_stat = gss_release_buffer(&min_stat, id);
-	if (GSS_ERROR(maj_stat))
-		gssapi_error(min_stat, LOCATION, "release id buffer\n");
-
-	return vmbuf;
-}
-#else
-int __gssapi_dUmMy;
-#endif
diff --git a/src/racoon/gssapi.h b/src/racoon/gssapi.h
deleted file mode 100644
index 25c6c48..0000000
--- a/src/racoon/gssapi.h
+++ /dev/null
@@ -1,91 +0,0 @@
-/*	$NetBSD: gssapi.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: gssapi.h,v 1.5 2005/02/11 06:59:01 manubsd Exp */
-
-/*
- * Copyright 2000 Wasabi Systems, Inc.
- * All rights reserved.
- *
- * This software was written by Frank van der Linden of Wasabi Systems
- * for Zembu Labs, Inc. http://www.zembu.com/
- *
- * 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. The name of Wasabi Systems, Inc. may not be used to endorse
- *    or promote products derived from this software without specific prior
- *    written permission.
- *
- * THIS SOFTWARE IS PROVIDED BY WASABI SYSTEMS, INC. ``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 WASABI SYSTEMS, INC
- * 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.
- */
-
-#ifdef __FreeBSD__
-#include "/usr/include/gssapi.h"
-#else
-#include <gssapi/gssapi.h>
-#endif
-
-#define GSSAPI_DEF_NAME         "host"
-
-struct ph1handle;
-struct isakmpsa;
-
-struct gssapi_ph1_state {
-	int gsscnt;			/* # of token we're working on */
-	int gsscnt_p;			/* # of token we're working on */
-
-	gss_buffer_desc gss[3];		/* gss-api tokens. */
-					/* NOTE: XXX this restricts the max # */
-					/* to 3. More should never happen */
-
-	gss_buffer_desc gss_p[3];
-
-	gss_ctx_id_t gss_context;	/* context for gss_init_sec_context */
-
-	OM_uint32 gss_status;		/* retval from gss_init_sec_context */
-	gss_cred_id_t gss_cred;		/* acquired credentials */
-
-	int gss_flags;
-#define GSSFLAG_ID_SENT		0x0001
-#define GSSFLAG_ID_RCVD		0x0001
-};
-
-#define	gssapi_get_state(ph)						\
-	((struct gssapi_ph1_state *)((ph)->gssapi_state))
-
-#define	gssapi_set_state(ph, st)					\
-	(ph)->gssapi_state = (st)
-
-#define	gssapi_more_tokens(ph)						\
-	((gssapi_get_state(ph)->gss_status & GSS_S_CONTINUE_NEEDED) != 0)
-
-int gssapi_get_itoken __P((struct ph1handle *, int *));
-int gssapi_get_rtoken __P((struct ph1handle *, int *));
-int gssapi_save_received_token __P((struct ph1handle *, vchar_t *));
-int gssapi_get_token_to_send __P((struct ph1handle *, vchar_t **));
-int gssapi_get_itokens __P((struct ph1handle *, vchar_t **));
-int gssapi_get_rtokens __P((struct ph1handle *, vchar_t **));
-vchar_t *gssapi_wraphash __P((struct ph1handle *));
-vchar_t *gssapi_unwraphash __P((struct ph1handle *));
-void gssapi_set_id_sent __P((struct ph1handle *));
-int gssapi_id_sent __P((struct ph1handle *));
-void gssapi_set_id_rcvd __P((struct ph1handle *));
-int gssapi_id_rcvd __P((struct ph1handle *));
-void gssapi_free_state __P((struct ph1handle *));
-vchar_t *gssapi_get_id __P((struct ph1handle *));
-vchar_t *gssapi_get_default_gss_id __P((void));
diff --git a/src/racoon/handler.c b/src/racoon/handler.c
deleted file mode 100644
index b643256..0000000
--- a/src/racoon/handler.c
+++ /dev/null
@@ -1,1571 +0,0 @@
-/*	$NetBSD: handler.c,v 1.9.6.8 2009/04/20 13:25:27 tteras Exp $	*/
-
-/* Id: handler.c,v 1.28 2006/05/26 12:17:29 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <time.h>
-#include <errno.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "debug.h"
-
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#endif
-
-#include "schedule.h"
-#include "grabmyaddr.h"
-#include "algorithm.h"
-#include "crypto_openssl.h"
-#include "policy.h"
-#include "proposal.h"
-#include "isakmp_var.h"
-#include "evt.h"
-#include "isakmp.h"
-#ifdef ENABLE_HYBRID
-#include "isakmp_xauth.h"  
-#include "isakmp_cfg.h"
-#endif
-#include "isakmp_inf.h"
-#include "oakley.h"
-#include "remoteconf.h"
-#include "localconf.h"
-#include "handler.h"
-#include "gcmalloc.h"
-#include "nattraversal.h"
-
-#include "sainfo.h"
-
-#ifdef HAVE_GSSAPI
-#include "gssapi.h"
-#endif
-
-static LIST_HEAD(_ph1tree_, ph1handle) ph1tree;
-static LIST_HEAD(_ph2tree_, ph2handle) ph2tree;
-static LIST_HEAD(_ctdtree_, contacted) ctdtree;
-static LIST_HEAD(_rcptree_, recvdpkt) rcptree;
-
-static void del_recvdpkt __P((struct recvdpkt *));
-static void rem_recvdpkt __P((struct recvdpkt *));
-static void sweep_recvdpkt __P((void *));
-
-/*
- * functions about management of the isakmp status table
- */
-/* %%% management phase 1 handler */
-/*
- * search for isakmpsa handler with isakmp index.
- */
-
-extern caddr_t val2str(const char *, size_t);
-
-struct ph1handle *
-getph1byindex(index)
-	isakmp_index *index;
-{
-	struct ph1handle *p;
-
-	LIST_FOREACH(p, &ph1tree, chain) {
-		if (p->status == PHASE1ST_EXPIRED)
-			continue;
-		if (memcmp(&p->index, index, sizeof(*index)) == 0)
-			return p;
-	}
-
-	return NULL;
-}
-
-
-/*
- * search for isakmp handler by i_ck in index.
- */
-struct ph1handle *
-getph1byindex0(index)
-	isakmp_index *index;
-{
-	struct ph1handle *p;
-
-	LIST_FOREACH(p, &ph1tree, chain) {
-		if (p->status == PHASE1ST_EXPIRED)
-			continue;
-		if (memcmp(&p->index, index, sizeof(cookie_t)) == 0)
-			return p;
-	}
-
-	return NULL;
-}
-
-/*
- * search for isakmpsa handler by source and remote address.
- * don't use port number to search because this function search
- * with phase 2's destinaion.
- */
-struct ph1handle *
-getph1byaddr(local, remote, established)
-	struct sockaddr *local, *remote;
-	int established;
-{
-	struct ph1handle *p;
-
-	plog(LLV_DEBUG2, LOCATION, NULL, "getph1byaddr: start\n");
-	plog(LLV_DEBUG2, LOCATION, NULL, "local: %s\n", saddr2str(local));
-	plog(LLV_DEBUG2, LOCATION, NULL, "remote: %s\n", saddr2str(remote));
-
-	LIST_FOREACH(p, &ph1tree, chain) {
-		if (p->status == PHASE1ST_EXPIRED)
-			continue;
-		plog(LLV_DEBUG2, LOCATION, NULL, "p->local: %s\n", saddr2str(p->local));
-		plog(LLV_DEBUG2, LOCATION, NULL, "p->remote: %s\n", saddr2str(p->remote));
-
-		if(established && p->status != PHASE1ST_ESTABLISHED){
-			plog(LLV_DEBUG2, LOCATION, NULL, "status %d, skipping\n", p->status);
-			continue;
-		}
-		if (CMPSADDR(local, p->local) == 0
-			&& CMPSADDR(remote, p->remote) == 0){
-			plog(LLV_DEBUG2, LOCATION, NULL, "matched\n");
-			return p;
-		}
-	}
-
-	plog(LLV_DEBUG2, LOCATION, NULL, "no match\n");
-
-	return NULL;
-}
-
-struct ph1handle *
-getph1byaddrwop(local, remote)
-	struct sockaddr *local, *remote;
-{
-	struct ph1handle *p;
-
-	LIST_FOREACH(p, &ph1tree, chain) {
-		if (p->status == PHASE1ST_EXPIRED)
-			continue;
-		if (cmpsaddrwop(local, p->local) == 0
-		 && cmpsaddrwop(remote, p->remote) == 0)
-			return p;
-	}
-
-	return NULL;
-}
-
-/*
- * search for isakmpsa handler by remote address.
- * don't use port number to search because this function search
- * with phase 2's destinaion.
- */
-struct ph1handle *
-getph1bydstaddrwop(remote)
-	struct sockaddr *remote;
-{
-	struct ph1handle *p;
-
-	LIST_FOREACH(p, &ph1tree, chain) {
-		if (p->status == PHASE1ST_EXPIRED)
-			continue;
-		if (cmpsaddrwop(remote, p->remote) == 0)
-			return p;
-	}
-
-	return NULL;
-}
-
-/*
- * dump isakmp-sa
- */
-vchar_t *
-dumpph1()
-{
-	struct ph1handle *iph1;
-	struct ph1dump *pd;
-	int cnt = 0;
-	vchar_t *buf;
-
-	/* get length of buffer */
-	LIST_FOREACH(iph1, &ph1tree, chain)
-		cnt++;
-
-	buf = vmalloc(cnt * sizeof(struct ph1dump));
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer\n");
-		return NULL;
-	}
-	pd = (struct ph1dump *)buf->v;
-
-	LIST_FOREACH(iph1, &ph1tree, chain) {
-		memcpy(&pd->index, &iph1->index, sizeof(iph1->index));
-		pd->status = iph1->status;
-		pd->side = iph1->side;
-		memcpy(&pd->remote, iph1->remote, sysdep_sa_len(iph1->remote));
-		memcpy(&pd->local, iph1->local, sysdep_sa_len(iph1->local));
-		pd->version = iph1->version;
-		pd->etype = iph1->etype;
-		pd->created = iph1->created;
-		pd->ph2cnt = iph1->ph2cnt;
-		pd++;
-	}
-
-	return buf;
-}
-
-/*
- * create new isakmp Phase 1 status record to handle isakmp in Phase1
- */
-struct ph1handle *
-newph1()
-{
-	struct ph1handle *iph1;
-
-	/* create new iph1 */
-	iph1 = racoon_calloc(1, sizeof(*iph1));
-	if (iph1 == NULL)
-		return NULL;
-
-	iph1->status = PHASE1ST_SPAWN;
-
-#ifdef ENABLE_DPD
-	iph1->dpd_support = 0;
-	iph1->dpd_lastack = 0;
-	iph1->dpd_seq = 0;
-	iph1->dpd_fails = 0;
-	iph1->dpd_r_u = NULL;
-#endif
-
-	return iph1;
-}
-
-/*
- * delete new isakmp Phase 1 status record to handle isakmp in Phase1
- */
-void
-delph1(iph1)
-	struct ph1handle *iph1;
-{
-	if (iph1 == NULL)
-		return;
-
-	/* SA down shell script hook */
-	script_hook(iph1, SCRIPT_PHASE1_DOWN);
-
-	EVT_PUSH(iph1->local, iph1->remote, EVTT_PHASE1_DOWN, NULL);
-
-#ifdef ENABLE_NATT
-	if (iph1->natt_flags & NAT_KA_QUEUED)
-		natt_keepalive_remove (iph1->local, iph1->remote);
-
-	if (iph1->natt_options) {
-		racoon_free(iph1->natt_options);
-		iph1->natt_options = NULL;
-	}
-#endif
-
-#ifdef ENABLE_HYBRID
-	if (iph1->mode_cfg)
-		isakmp_cfg_rmstate(iph1);
-#endif
-
-#ifdef ENABLE_DPD
-	SCHED_KILL(iph1->dpd_r_u);
-#endif
-
-	if (iph1->remote) {
-		racoon_free(iph1->remote);
-		iph1->remote = NULL;
-	}
-	if (iph1->local) {
-		racoon_free(iph1->local);
-		iph1->local = NULL;
-	}
-	if (iph1->approval) {
-		delisakmpsa(iph1->approval);
-		iph1->approval = NULL;
-	}
-
-	VPTRINIT(iph1->authstr);
-
-	sched_scrub_param(iph1);
-	iph1->sce = NULL;
-	iph1->scr = NULL;
-
-	VPTRINIT(iph1->sendbuf);
-
-	VPTRINIT(iph1->dhpriv);
-	VPTRINIT(iph1->dhpub);
-	VPTRINIT(iph1->dhpub_p);
-	VPTRINIT(iph1->dhgxy);
-	VPTRINIT(iph1->nonce);
-	VPTRINIT(iph1->nonce_p);
-	VPTRINIT(iph1->skeyid);
-	VPTRINIT(iph1->skeyid_d);
-	VPTRINIT(iph1->skeyid_a);
-	VPTRINIT(iph1->skeyid_e);
-	VPTRINIT(iph1->key);
-	VPTRINIT(iph1->hash);
-	VPTRINIT(iph1->sig);
-	VPTRINIT(iph1->sig_p);
-	oakley_delcert(iph1->cert);
-	iph1->cert = NULL;
-	oakley_delcert(iph1->cert_p);
-	iph1->cert_p = NULL;
-	oakley_delcert(iph1->crl_p);
-	iph1->crl_p = NULL;
-	oakley_delcert(iph1->cr_p);
-	iph1->cr_p = NULL;
-	VPTRINIT(iph1->id);
-	VPTRINIT(iph1->id_p);
-
-	if(iph1->approval != NULL)
-		delisakmpsa(iph1->approval);
-
-	if (iph1->ivm) {
-		oakley_delivm(iph1->ivm);
-		iph1->ivm = NULL;
-	}
-
-	VPTRINIT(iph1->sa);
-	VPTRINIT(iph1->sa_ret);
-
-#ifdef HAVE_GSSAPI
-	VPTRINIT(iph1->gi_i);
-	VPTRINIT(iph1->gi_r);
-
-	gssapi_free_state(iph1);
-#endif
-
-	racoon_free(iph1);
-}
-
-/*
- * create new isakmp Phase 1 status record to handle isakmp in Phase1
- */
-int
-insph1(iph1)
-	struct ph1handle *iph1;
-{
-	/* validity check */
-	if (iph1->remote == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid isakmp SA handler. no remote address.\n");
-		return -1;
-	}
-	LIST_INSERT_HEAD(&ph1tree, iph1, chain);
-
-	return 0;
-}
-
-void
-remph1(iph1)
-	struct ph1handle *iph1;
-{
-	LIST_REMOVE(iph1, chain);
-}
-
-/*
- * flush isakmp-sa
- */
-void
-flushph1()
-{
-	struct ph1handle *p, *next;
-
-	for (p = LIST_FIRST(&ph1tree); p; p = next) {
-		next = LIST_NEXT(p, chain);
-
-		/* send delete information */
-		if (p->status == PHASE1ST_ESTABLISHED) 
-			isakmp_info_send_d1(p);
-
-		remph1(p);
-		delph1(p);
-	}
-}
-
-void
-initph1tree()
-{
-	LIST_INIT(&ph1tree);
-}
-
-/* %%% management phase 2 handler */
-/*
- * search ph2handle with policy id.
- */
-struct ph2handle *
-getph2byspid(spid)
-      u_int32_t spid;
-{
-	struct ph2handle *p;
-
-	LIST_FOREACH(p, &ph2tree, chain) {
-		/*
-		 * there are ph2handle independent on policy
-		 * such like informational exchange.
-		 */
-		if (p->spid == spid)
-			return p;
-	}
-
-	return NULL;
-}
-
-/*
- * search ph2handle with sequence number.
- */
-struct ph2handle *
-getph2byseq(seq)
-	u_int32_t seq;
-{
-	struct ph2handle *p;
-
-	LIST_FOREACH(p, &ph2tree, chain) {
-		if (p->seq == seq)
-			return p;
-	}
-
-	return NULL;
-}
-
-/*
- * search ph2handle with message id.
- */
-struct ph2handle *
-getph2bymsgid(iph1, msgid)
-	struct ph1handle *iph1;
-	u_int32_t msgid;
-{
-	struct ph2handle *p;
-
-	LIST_FOREACH(p, &ph2tree, chain) {
-		if (p->msgid == msgid && p->ph1 == iph1)
-			return p;
-	}
-
-	return NULL;
-}
-
-struct ph2handle *
-getph2byid(src, dst, spid)
-	struct sockaddr *src, *dst;
-	u_int32_t spid;
-{
-	struct ph2handle *p;
-
-	LIST_FOREACH(p, &ph2tree, chain) {
-		if (spid == p->spid &&
-		    CMPSADDR(src, p->src) == 0 &&
-		    CMPSADDR(dst, p->dst) == 0){
-			/* Sanity check to detect zombie handlers
-			 * XXX Sould be done "somewhere" more interesting,
-			 * because we have lots of getph2byxxxx(), but this one
-			 * is called by pk_recvacquire(), so is the most important.
-			 */
-			if(p->status < PHASE2ST_ESTABLISHED &&
-			   p->retry_counter == 0
-			   && p->sce == NULL && p->scr == NULL){
-				plog(LLV_DEBUG, LOCATION, NULL,
-					 "Zombie ph2 found, expiring it\n");
-				isakmp_ph2expire(p);
-			}else
-				return p;
-		}
-	}
-
-	return NULL;
-}
-
-struct ph2handle *
-getph2bysaddr(src, dst)
-	struct sockaddr *src, *dst;
-{
-	struct ph2handle *p;
-
-	LIST_FOREACH(p, &ph2tree, chain) {
-		if (cmpsaddrstrict(src, p->src) == 0 &&
-		    cmpsaddrstrict(dst, p->dst) == 0)
-			return p;
-	}
-
-	return NULL;
-}
-
-/*
- * call by pk_recvexpire().
- */
-struct ph2handle *
-getph2bysaidx(src, dst, proto_id, spi)
-	struct sockaddr *src, *dst;
-	u_int proto_id;
-	u_int32_t spi;
-{
-	struct ph2handle *iph2;
-	struct saproto *pr;
-
-	LIST_FOREACH(iph2, &ph2tree, chain) {
-		if (iph2->proposal == NULL && iph2->approval == NULL)
-			continue;
-		if (iph2->approval != NULL) {
-			for (pr = iph2->approval->head; pr != NULL;
-			     pr = pr->next) {
-				if (proto_id != pr->proto_id)
-					break;
-				if (spi == pr->spi || spi == pr->spi_p)
-					return iph2;
-			}
-		} else if (iph2->proposal != NULL) {
-			for (pr = iph2->proposal->head; pr != NULL;
-			     pr = pr->next) {
-				if (proto_id != pr->proto_id)
-					break;
-				if (spi == pr->spi)
-					return iph2;
-			}
-		}
-	}
-
-	return NULL;
-}
-
-/*
- * create new isakmp Phase 2 status record to handle isakmp in Phase2
- */
-struct ph2handle *
-newph2()
-{
-	struct ph2handle *iph2 = NULL;
-
-	/* create new iph2 */
-	iph2 = racoon_calloc(1, sizeof(*iph2));
-	if (iph2 == NULL)
-		return NULL;
-
-	iph2->status = PHASE1ST_SPAWN;
-
-	return iph2;
-}
-
-/*
- * initialize ph2handle
- * NOTE: don't initialize src/dst.
- *       SPI in the proposal is cleared.
- */
-void
-initph2(iph2)
-	struct ph2handle *iph2;
-{
-	sched_scrub_param(iph2);
-	iph2->sce = NULL;
-	iph2->scr = NULL;
-
-	VPTRINIT(iph2->sendbuf);
-	VPTRINIT(iph2->msg1);
-
-	/* clear spi, keep variables in the proposal */
-	if (iph2->proposal) {
-		struct saproto *pr;
-		for (pr = iph2->proposal->head; pr != NULL; pr = pr->next)
-			pr->spi = 0;
-	}
-
-	/* clear approval */
-	if (iph2->approval) {
-		flushsaprop(iph2->approval);
-		iph2->approval = NULL;
-	}
-
-	/* clear the generated policy */
-	if (iph2->spidx_gen) {
-		delsp_bothdir((struct policyindex *)iph2->spidx_gen);
-		racoon_free(iph2->spidx_gen);
-		iph2->spidx_gen = NULL;
-	}
-
-	if (iph2->pfsgrp) {
-		oakley_dhgrp_free(iph2->pfsgrp);
-		iph2->pfsgrp = NULL;
-	}
-
-	VPTRINIT(iph2->dhpriv);
-	VPTRINIT(iph2->dhpub);
-	VPTRINIT(iph2->dhpub_p);
-	VPTRINIT(iph2->dhgxy);
-	VPTRINIT(iph2->id);
-	VPTRINIT(iph2->id_p);
-	VPTRINIT(iph2->nonce);
-	VPTRINIT(iph2->nonce_p);
-	VPTRINIT(iph2->sa);
-	VPTRINIT(iph2->sa_ret);
-
-	if (iph2->ivm) {
-		oakley_delivm(iph2->ivm);
-		iph2->ivm = NULL;
-	}
-}
-
-/*
- * delete new isakmp Phase 2 status record to handle isakmp in Phase2
- */
-void
-delph2(iph2)
-	struct ph2handle *iph2;
-{
-	initph2(iph2);
-
-	if (iph2->src) {
-		racoon_free(iph2->src);
-		iph2->src = NULL;
-	}
-	if (iph2->dst) {
-		racoon_free(iph2->dst);
-		iph2->dst = NULL;
-	}
-	if (iph2->src_id) {
-	      racoon_free(iph2->src_id);
-	      iph2->src_id = NULL;
-	}
-	if (iph2->dst_id) {
-	      racoon_free(iph2->dst_id);
-	      iph2->dst_id = NULL;
-	}
-
-	if (iph2->proposal) {
-		flushsaprop(iph2->proposal);
-		iph2->proposal = NULL;
-	}
-
-	racoon_free(iph2);
-}
-
-/*
- * create new isakmp Phase 2 status record to handle isakmp in Phase2
- */
-int
-insph2(iph2)
-	struct ph2handle *iph2;
-{
-	LIST_INSERT_HEAD(&ph2tree, iph2, chain);
-
-	return 0;
-}
-
-void
-remph2(iph2)
-	struct ph2handle *iph2;
-{
-	LIST_REMOVE(iph2, chain);
-}
-
-void
-initph2tree()
-{
-	LIST_INIT(&ph2tree);
-}
-
-void
-flushph2()
-{
-	struct ph2handle *p, *next;
-
-	plog(LLV_DEBUG2, LOCATION, NULL,
-		 "flushing all ph2 handlers...\n");
-
-	for (p = LIST_FIRST(&ph2tree); p; p = next) {
-		next = LIST_NEXT(p, chain);
-
-		/* send delete information */
-		if (p->status == PHASE2ST_ESTABLISHED){
-			plog(LLV_DEBUG2, LOCATION, NULL,
-				 "got a ph2 handler to flush...\n");
-			isakmp_info_send_d2(p);
-		}else{
-			plog(LLV_DEBUG2, LOCATION, NULL,
-				 "skipping ph2 handler (state %d)\n", p->status);
-		}
-
-		delete_spd(p, 0);
-		unbindph12(p);
-		remph2(p);
-		delph2(p);
-	}
-}
-
-/*
- * Delete all Phase 2 handlers for this src/dst/proto.  This
- * is used during INITIAL-CONTACT processing (so no need to
- * send a message to the peer).
- */
-void
-deleteallph2(src, dst, proto_id)
-	struct sockaddr *src, *dst;
-	u_int proto_id;
-{
-	struct ph2handle *iph2, *next;
-	struct saproto *pr;
-
-	for (iph2 = LIST_FIRST(&ph2tree); iph2 != NULL; iph2 = next) {
-		next = LIST_NEXT(iph2, chain);
-		if (iph2->proposal == NULL && iph2->approval == NULL)
-			continue;
-		if (iph2->approval != NULL) {
-			for (pr = iph2->approval->head; pr != NULL;
-			     pr = pr->next) {
-				if (proto_id == pr->proto_id)
-					goto zap_it;
-			}
-		} else if (iph2->proposal != NULL) {
-			for (pr = iph2->proposal->head; pr != NULL;
-			     pr = pr->next) {
-				if (proto_id == pr->proto_id)
-					goto zap_it;
-			}
-		}
-		continue;
- zap_it:
-		unbindph12(iph2);
-		remph2(iph2);
-		delph2(iph2);
-	}
-}
-
-/* %%% */
-void
-bindph12(iph1, iph2)
-	struct ph1handle *iph1;
-	struct ph2handle *iph2;
-{
-	iph2->ph1 = iph1;
-	LIST_INSERT_HEAD(&iph1->ph2tree, iph2, ph1bind);
-}
-
-void
-unbindph12(iph2)
-	struct ph2handle *iph2;
-{
-	if (iph2->ph1 != NULL) {
-		iph2->ph1 = NULL;
-		LIST_REMOVE(iph2, ph1bind);
-	}
-}
-
-/* %%% management contacted list */
-/*
- * search contacted list.
- */
-struct contacted *
-getcontacted(remote)
-	struct sockaddr *remote;
-{
-	struct contacted *p;
-
-	LIST_FOREACH(p, &ctdtree, chain) {
-		if (cmpsaddrstrict(remote, p->remote) == 0)
-			return p;
-	}
-
-	return NULL;
-}
-
-/*
- * create new isakmp Phase 2 status record to handle isakmp in Phase2
- */
-int
-inscontacted(remote)
-	struct sockaddr *remote;
-{
-	struct contacted *new;
-
-	/* create new iph2 */
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return -1;
-
-	new->remote = dupsaddr(remote);
-	if (new->remote == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer.\n");
-		racoon_free(new);
-		return -1;
-	}
-
-	LIST_INSERT_HEAD(&ctdtree, new, chain);
-
-	return 0;
-}
-
-void
-initctdtree()
-{
-	LIST_INIT(&ctdtree);
-}
-
-/*
- * check the response has been sent to the peer.  when not, simply reply
- * the buffered packet to the peer.
- * OUT:
- *	 0:	the packet is received at the first time.
- *	 1:	the packet was processed before.
- *	 2:	the packet was processed before, but the address mismatches.
- *	-1:	error happened.
- */
-int
-check_recvdpkt(remote, local, rbuf)
-	struct sockaddr *remote, *local;
-	vchar_t *rbuf;
-{
-	vchar_t *hash;
-	struct recvdpkt *r;
-	time_t t;
-	int len, s;
-
-	/* set current time */
-	t = time(NULL);
-
-	hash = eay_md5_one(rbuf);
-	if (!hash) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer.\n");
-		return -1;
-	}
-
-	LIST_FOREACH(r, &rcptree, chain) {
-		if (memcmp(hash->v, r->hash->v, r->hash->l) == 0)
-			break;
-	}
-	vfree(hash);
-
-	/* this is the first time to receive the packet */
-	if (r == NULL)
-		return 0;
-
-	/*
-	 * the packet was processed before, but the remote address mismatches.
-	 */
-	if (cmpsaddrstrict(remote, r->remote) != 0)
-		return 2;
-
-	/*
-	 * it should not check the local address because the packet
-	 * may arrive at other interface.
-	 */
-
-	/* check the previous time to send */
-	if (t - r->time_send < 1) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"the packet retransmitted in a short time from %s\n",
-			saddr2str(remote));
-		/*XXX should it be error ? */
-	}
-
-	/* select the socket to be sent */
-	s = getsockmyaddr(r->local);
-	if (s == -1)
-		return -1;
-
-	/* resend the packet if needed */
-	len = sendfromto(s, r->sendbuf->v, r->sendbuf->l,
-			r->local, r->remote, lcconf->count_persend);
-	if (len == -1) {
-		plog(LLV_ERROR, LOCATION, NULL, "sendfromto failed\n");
-		return -1;
-	}
-
-	/* check the retry counter */
-	r->retry_counter--;
-	if (r->retry_counter <= 0) {
-		rem_recvdpkt(r);
-		del_recvdpkt(r);
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"deleted the retransmission packet to %s.\n",
-			saddr2str(remote));
-	} else
-		r->time_send = t;
-
-	return 1;
-}
-
-/*
- * adding a hash of received packet into the received list.
- */
-int
-add_recvdpkt(remote, local, sbuf, rbuf)
-	struct sockaddr *remote, *local;
-	vchar_t *sbuf, *rbuf;
-{
-	struct recvdpkt *new = NULL;
-
-	if (lcconf->retry_counter == 0) {
-		/* no need to add it */
-		return 0;
-	}
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (!new) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer.\n");
-		return -1;
-	}
-
-	new->hash = eay_md5_one(rbuf);
-	if (!new->hash) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer.\n");
-		del_recvdpkt(new);
-		return -1;
-	}
-	new->remote = dupsaddr(remote);
-	if (new->remote == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer.\n");
-		del_recvdpkt(new);
-		return -1;
-	}
-	new->local = dupsaddr(local);
-	if (new->local == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer.\n");
-		del_recvdpkt(new);
-		return -1;
-	}
-	new->sendbuf = vdup(sbuf);
-	if (new->sendbuf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer.\n");
-		del_recvdpkt(new);
-		return -1;
-	}
-
-	new->retry_counter = lcconf->retry_counter;
-	new->time_send = 0;
-	new->created = time(NULL);
-
-	LIST_INSERT_HEAD(&rcptree, new, chain);
-
-	return 0;
-}
-
-void
-del_recvdpkt(r)
-	struct recvdpkt *r;
-{
-	if (r->remote)
-		racoon_free(r->remote);
-	if (r->local)
-		racoon_free(r->local);
-	if (r->hash)
-		vfree(r->hash);
-	if (r->sendbuf)
-		vfree(r->sendbuf);
-	racoon_free(r);
-}
-
-void
-rem_recvdpkt(r)
-	struct recvdpkt *r;
-{
-	LIST_REMOVE(r, chain);
-}
-
-void
-sweep_recvdpkt(dummy)
-	void *dummy;
-{
-	struct recvdpkt *r, *next;
-	time_t t, lt;
-
-	/* set current time */
-	t = time(NULL);
-
-	/* set the lifetime of the retransmission */
-	lt = lcconf->retry_counter * lcconf->retry_interval;
-
-	for (r = LIST_FIRST(&rcptree); r; r = next) {
-		next = LIST_NEXT(r, chain);
-
-		if (t - r->created > lt) {
-			rem_recvdpkt(r);
-			del_recvdpkt(r);
-		}
-	}
-
-	sched_new(lt, sweep_recvdpkt, NULL);
-}
-
-void
-init_recvdpkt()
-{
-	time_t lt = lcconf->retry_counter * lcconf->retry_interval;
-
-	LIST_INIT(&rcptree);
-
-	sched_new(lt, sweep_recvdpkt, NULL);
-}
-
-#ifdef ENABLE_HYBRID
-/* 
- * Retruns 0 if the address was obtained by ISAKMP mode config, 1 otherwise
- * This should be in isakmp_cfg.c but ph1tree being private, it must be there
- */
-int
-exclude_cfg_addr(addr)
-	const struct sockaddr *addr;
-{
-	struct ph1handle *p;
-	struct sockaddr_in *sin;
-
-	LIST_FOREACH(p, &ph1tree, chain) {
-		if ((p->mode_cfg != NULL) &&
-		    (p->mode_cfg->flags & ISAKMP_CFG_GOT_ADDR4) &&
-		    (addr->sa_family == AF_INET)) {
-			sin = (struct sockaddr_in *)addr;
-			if (sin->sin_addr.s_addr == p->mode_cfg->addr4.s_addr)
-				return 0;
-		}
-	}
-
-	return 1;
-}
-#endif
-
-
-
-/* 
- * Reload conf code
- */
-static int revalidate_ph2(struct ph2handle *iph2){
-	struct sainfoalg *alg;
-	int found, check_level;
-	struct sainfo *sainfo;
-	struct saprop *approval;
-	struct ph1handle *iph1;
-
-	/* 
-	 * Get the new sainfo using values of the old one
-	 */
-	if (iph2->sainfo != NULL) {
-		iph2->sainfo = getsainfo(iph2->sainfo->idsrc, 
-					  iph2->sainfo->iddst, iph2->sainfo->id_i,
-					  iph2->sainfo->remoteid);
-	}
-	approval = iph2->approval;
-	sainfo = iph2->sainfo;
-
-	if (sainfo == NULL) {
-		/* 
-		 * Sainfo has been removed
-		 */
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "Reload: No sainfo for ph2\n");
-		return 0;
-	}
-
-	if (approval == NULL) {
-		/*
-		 * XXX why do we have a NULL approval sometimes ???
-		 */
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "No approval found !\n");
-		return 0;
-	}	
-
-	/*
-	 * Don't care about proposals, should we do something ?
-	 * We have to keep iph2->proposal valid at least for initiator,
-	 * for pk_sendgetspi()
-	 */
-
-	plog(LLV_DEBUG, LOCATION, NULL, "active single bundle:\n");
-	printsaprop0(LLV_DEBUG, approval);
-
-	/*
-	 * Validate approval against sainfo
-	 * Note: we must have an updated ph1->rmconf before doing that,
-	 * we'll set check_level to EXACT if we don't have a ph1
-	 * XXX try tu find the new remote section to get the new check level ?
-	 * XXX lifebyte
-	 */
-	if (iph2->ph1 != NULL)
-		iph1=iph2->ph1;
-	else
-		iph1=getph1byaddr(iph2->src, iph2->dst, 0);
-
-	if(iph1 != NULL && iph1->rmconf != NULL) {
-		check_level = iph1->rmconf->pcheck_level;
-	} else {
-		if(iph1 != NULL)
-			plog(LLV_DEBUG, LOCATION, NULL, "No phase1 rmconf found !\n");
-		else
-			plog(LLV_DEBUG, LOCATION, NULL, "No phase1 found !\n");
-		check_level = PROP_CHECK_EXACT;
-	}
-
-	switch (check_level) {
-	case PROP_CHECK_OBEY:
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "Reload: OBEY for ph2, ok\n");
-		return 1;
-		break;
-
-	case PROP_CHECK_STRICT:
-		/* FALLTHROUGH */
-	case PROP_CHECK_CLAIM:
-		if (sainfo->lifetime < approval->lifetime) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "Reload: lifetime mismatch\n");
-			return 0;
-		}
-
-#if 0
-		/* Lifebyte is deprecated, just ignore it
-		 */
-		if (sainfo->lifebyte < approval->lifebyte) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "Reload: lifebyte mismatch\n");
-			return 0;
-		}
-#endif
-
-		if (sainfo->pfs_group &&
-		   sainfo->pfs_group != approval->pfs_group) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "Reload: PFS group mismatch\n");
-			return 0;
-		}
-		break;
-
-	case PROP_CHECK_EXACT:
-		if (sainfo->lifetime != approval->lifetime ||
-#if 0
-			/* Lifebyte is deprecated, just ignore it
-			 */
-		    sainfo->lifebyte != approval->lifebyte ||
-#endif
-		    sainfo->pfs_group != iph2->approval->pfs_group) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-			    "Reload: lifetime | pfs mismatch\n");
-			return 0;
-		}
-		break;
-
-	default:
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "Reload: Shouldn't be here !\n");
-		return 0;
-		break;
-	}
-
-	for (alg = sainfo->algs[algclass_ipsec_auth]; alg; alg = alg->next) {
-		if (alg->alg == approval->head->head->authtype)
-			break;
-	}
-	if (alg == NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "Reload: alg == NULL (auth)\n");
-		return 0;
-	}
-
-	found = 0;
-	for (alg = sainfo->algs[algclass_ipsec_enc]; 
-	    (found == 0 && alg != NULL); alg = alg->next) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "Reload: next ph2 enc alg...\n");
-
-		if (alg->alg != approval->head->head->trns_id){
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "Reload: encmode mismatch (%d / %d)\n",
-				 alg->alg, approval->head->head->trns_id);
-			continue;
-		}
-
-		switch (check_level){
-		/* PROP_CHECK_STRICT cannot happen here */
-		case PROP_CHECK_EXACT:
-			if (alg->encklen != approval->head->head->encklen) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-					 "Reload: enclen mismatch\n");
-				continue;
-			}
-			break;
-
-		case PROP_CHECK_CLAIM:
-			/* FALLTHROUGH */
-		case PROP_CHECK_STRICT:
-			if (alg->encklen > approval->head->head->encklen) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-					 "Reload: enclen mismatch\n");
-				continue;
-			}
-			break;
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "unexpected check_level\n");
-			continue;
-			break;
-		}
-		found = 1;
-	}
-
-	if (!found){
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "Reload: No valid enc\n");
-		return 0;
-	}
-
-	/*
-	 * XXX comp
-	 */
-	plog(LLV_DEBUG, LOCATION, NULL,
-		 "Reload: ph2 check ok\n");
-
-	return 1;
-}
-
-
-static void 
-remove_ph2(struct ph2handle *iph2)
-{
-	u_int32_t spis[2];
-
-	if(iph2 == NULL)
-		return;
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		 "Deleting a Ph2...\n");
-
-	if (iph2->status == PHASE2ST_ESTABLISHED)
-		isakmp_info_send_d2(iph2);
-
-	if(iph2->approval != NULL && iph2->approval->head != NULL){
-		spis[0]=iph2->approval->head->spi;
-		spis[1]=iph2->approval->head->spi_p;
-
-		/* purge_ipsec_spi() will do all the work:
-		 * - delete SPIs in kernel
-		 * - delete generated SPD
-		 * - unbind / rem / del ph2
-		 */
-		purge_ipsec_spi(iph2->dst, iph2->approval->head->proto_id,
-						spis, 2);
-	}else{
-		unbindph12(iph2);
-		remph2(iph2);
-		delph2(iph2);
-	}
-}
-
-static void remove_ph1(struct ph1handle *iph1){
-	struct ph2handle *iph2, *iph2_next;
-
-	if(iph1 == NULL)
-		return;
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		 "Removing PH1...\n");
-
-	if (iph1->status == PHASE1ST_ESTABLISHED){
-		for (iph2 = LIST_FIRST(&iph1->ph2tree); iph2; iph2 = iph2_next) {
-			iph2_next = LIST_NEXT(iph2, chain);
-			remove_ph2(iph2);
-		}
-		isakmp_info_send_d1(iph1);
-	}
-	iph1->status = PHASE1ST_EXPIRED;
-	iph1->sce = sched_new(1, isakmp_ph1delete_stub, iph1);
-}
-
-
-static int revalidate_ph1tree_rmconf(void){
-	struct ph1handle *p, *next;
-	struct remoteconf *newrmconf;
-
-	for (p = LIST_FIRST(&ph1tree); p; p = next) {
-		next = LIST_NEXT(p, chain);
-
-		if (p->status == PHASE1ST_EXPIRED)
-			continue;
-
-		newrmconf=getrmconf(p->remote);
-		if(newrmconf == NULL){
-			p->rmconf = NULL;
-			remove_ph1(p);
-		}else{
-			/* Do not free old rmconf, it is just a pointer to an entry in rmtree
-			 */
-			p->rmconf=newrmconf;
-			if(p->approval != NULL){
-				struct isakmpsa *tmpsa;
-
-				tmpsa=dupisakmpsa(p->approval);
-				if(tmpsa != NULL){
-					delisakmpsa(p->approval);
-					p->approval=tmpsa;
-					p->approval->rmconf=newrmconf;
-				}
-			}
-		}
-	}
-
-	return 1;
-}
-
-
-/* rmconf is already updated here
- */
-static int revalidate_ph1(struct ph1handle *iph1){
-	struct isakmpsa *p, *approval;
-	struct etypes *e;
-
-	if(iph1 == NULL ||
-	   iph1->approval == NULL ||
-		iph1->rmconf == NULL)
-		return 0;
-
-	approval=iph1->approval;
-
-	for (e = iph1->rmconf->etypes; e != NULL; e = e->next){
-		if (iph1->etype == e->type)
-			break;
-	}
-
-	if (e == NULL){
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "Reload: Exchange type mismatch\n");
-		return 0;
-	}
-
-	if (iph1->etype == ISAKMP_ETYPE_AGG &&
-	   approval->dh_group != iph1->rmconf->dh_group){
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "Reload: DH mismatch\n");
-		return 0;
-	}
-
-	for (p=iph1->rmconf->proposal; p != NULL; p=p->next){
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "Reload: Trying next proposal...\n");
-
-		if(approval->authmethod != p->authmethod){
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "Reload: Authmethod mismatch\n");
-			continue;
-		}
-
-		if(approval->enctype != p->enctype){
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "Reload: enctype mismatch\n");
-			continue;
-		}
-
-		switch (iph1->rmconf->pcheck_level) {
-		case PROP_CHECK_OBEY:
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "Reload: OBEY pcheck level, ok...\n");
-			return 1;
-			break;
-
-		case PROP_CHECK_CLAIM:
-			/* FALLTHROUGH */
-		case PROP_CHECK_STRICT:
-			if (approval->encklen < p->encklen) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-					 "Reload: encklen mismatch\n");
-				continue;
-			}
-
-			if (approval->lifetime > p->lifetime) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-					 "Reload: lifetime mismatch\n");
-				continue;
-			}
-
-#if 0
-			/* Lifebyte is deprecated, just ignore it
-			 */
-			if (approval->lifebyte > p->lifebyte) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-					 "Reload: lifebyte mismatch\n");
-				continue;
-			}
-#endif
-			break;
-
-		case PROP_CHECK_EXACT:
-			if (approval->encklen != p->encklen) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-					 "Reload: encklen mismatch\n");
-				continue;
-			}
-
-			if (approval->lifetime != p->lifetime) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-					 "Reload: lifetime mismatch\n");
-				continue;
-			}
-
-#if 0
-			/* Lifebyte is deprecated, just ignore it
-			 */
-			if (approval->lifebyte != p->lifebyte) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-					 "Reload: lifebyte mismatch\n");
-				continue;
-			}
-#endif
-			break;
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "unexpected check_level\n");
-			continue;
-			break;
-		}
-
-		if (approval->hashtype != p->hashtype) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "Reload: hashtype mismatch\n");
-			continue;
-		}
-
-		if (iph1->etype != ISAKMP_ETYPE_AGG &&
-		    approval->dh_group != p->dh_group) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "Reload: dhgroup mismatch\n");
-			continue;
-		}
-
-		plog(LLV_DEBUG, LOCATION, NULL, "Reload: Conf ok\n");
-		return 1;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "Reload: No valid conf found\n");
-	return 0;
-}
-
-
-static int revalidate_ph1tree(void){
-	struct ph1handle *p, *next;
-
-	for (p = LIST_FIRST(&ph1tree); p; p = next) {
-		next = LIST_NEXT(p, chain);
-
-		if (p->status == PHASE1ST_EXPIRED)
-			continue;
-
-		if(!revalidate_ph1(p))
-			remove_ph1(p);
-	}
-
-	return 1;
-}
-
-static int revalidate_ph2tree(void){
-	struct ph2handle *p, *next;
-
-	for (p = LIST_FIRST(&ph2tree); p; p = next) {
-		next = LIST_NEXT(p, chain);
-
-		if (p->status == PHASE2ST_EXPIRED)
-			continue;
-
-		if(!revalidate_ph2(p)){
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "PH2 not validated, removing it\n");
-			remove_ph2(p);
-		}
-	}
-
-	return 1;
-}
-
-int 
-revalidate_ph12(void)
-{
-
-	revalidate_ph1tree_rmconf();
-
-	revalidate_ph2tree();
-	revalidate_ph1tree();
-
-	return 1;
-}
-
-#ifdef ENABLE_HYBRID
-struct ph1handle *
-getph1bylogin(login)
-	char *login;
-{
-	struct ph1handle *p;
-
-	LIST_FOREACH(p, &ph1tree, chain) {
-		if (p->mode_cfg == NULL)
-			continue;
-		if (strncmp(p->mode_cfg->login, login, LOGINLEN) == 0)
-			return p;
-	}
-
-	return NULL;
-}
-
-int
-purgeph1bylogin(login)
-	char *login;
-{
-	struct ph1handle *p;
-	int found = 0;
-
-	LIST_FOREACH(p, &ph1tree, chain) {
-		if (p->mode_cfg == NULL)
-			continue;
-		if (strncmp(p->mode_cfg->login, login, LOGINLEN) == 0) {
-			if (p->status == PHASE1ST_ESTABLISHED)
-				isakmp_info_send_d1(p);
-			purge_remote(p);
-			found++;
-		}
-	}
-
-	return found;
-}
-#endif
diff --git a/src/racoon/handler.h b/src/racoon/handler.h
deleted file mode 100644
index a52dc6c..0000000
--- a/src/racoon/handler.h
+++ /dev/null
@@ -1,483 +0,0 @@
-/*	$NetBSD: handler.h,v 1.9.6.1 2008/01/11 14:12:01 vanhu Exp $	*/
-
-/* Id: handler.h,v 1.19 2006/02/25 08:25:12 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _HANDLER_H
-#define _HANDLER_H
-
-#include <sys/queue.h>
-#include <openssl/rsa.h>
-
-#include <sys/time.h>
-
-#include "isakmp_var.h"
-#include "oakley.h"
-
-/* Phase 1 handler */
-/*
- * main mode:
- *      initiator               responder
- *  0   (---)                   (---)
- *  1   start                   start (1st msg received)
- *  2   (---)                   1st valid msg received
- *  3   1st msg sent	        1st msg sent
- *  4   1st valid msg received  2st valid msg received
- *  5   2nd msg sent            2nd msg sent
- *  6   2nd valid msg received  3rd valid msg received
- *  7   3rd msg sent            3rd msg sent
- *  8   3rd valid msg received  (---)
- *  9   SA established          SA established
- *
- * aggressive mode:
- *      initiator               responder
- *  0   (---)                   (---)
- *  1   start                   start (1st msg received)
- *  2   (---)                   1st valid msg received
- *  3   1st msg sent	        1st msg sent
- *  4   1st valid msg received  2st valid msg received
- *  5   (---)                   (---)
- *  6   (---)                   (---)
- *  7   (---)                   (---)
- *  8   (---)                   (---)
- *  9   SA established          SA established
- *
- * base mode:
- *      initiator               responder
- *  0   (---)                   (---)
- *  1   start                   start (1st msg received)
- *  2   (---)                   1st valid msg received
- *  3   1st msg sent	        1st msg sent
- *  4   1st valid msg received  2st valid msg received
- *  5   2nd msg sent            (---)
- *  6   (---)                   (---)
- *  7   (---)                   (---)
- *  8   (---)                   (---)
- *  9   SA established          SA established
- */
-#define PHASE1ST_SPAWN			0
-#define PHASE1ST_START			1
-#define PHASE1ST_MSG1RECEIVED		2
-#define PHASE1ST_MSG1SENT		3
-#define PHASE1ST_MSG2RECEIVED		4
-#define PHASE1ST_MSG2SENT		5
-#define PHASE1ST_MSG3RECEIVED		6
-#define PHASE1ST_MSG3SENT		7
-#define PHASE1ST_MSG4RECEIVED		8
-#define PHASE1ST_ESTABLISHED		9
-#define PHASE1ST_EXPIRED		10
-#define PHASE1ST_MAX			11
-
-/* About address semantics in each case.
- *			initiator(addr=I)	responder(addr=R)
- *			src	dst		src	dst
- *			(local)	(remote)	(local)	(remote)
- * phase 1 handler	I	R		R	I
- * phase 2 handler	I	R		R	I
- * getspi msg		R	I		I	R
- * acquire msg		I	R
- * ID payload		I	R		I	R
- */
-#ifdef ENABLE_HYBRID
-struct isakmp_cfg_state;
-#endif
-struct ph1handle {
-	isakmp_index index;
-
-	int status;			/* status of this SA */
-	int side;			/* INITIATOR or RESPONDER */
-
-	struct sockaddr *remote;	/* remote address to negosiate ph1 */
-	struct sockaddr *local;		/* local address to negosiate ph1 */
-			/* XXX copy from rmconf due to anonymous configuration.
-			 * If anonymous will be forbidden, we do delete them. */
-
-	struct remoteconf *rmconf;	/* pointer to remote configuration */
-
-	struct isakmpsa *approval;	/* pointer to SA(s) approved. */
-	vchar_t *authstr;		/* place holder of string for auth. */
-					/* for example pre-shared key */
-
-	u_int8_t version;		/* ISAKMP version */
-	u_int8_t etype;			/* Exchange type actually for use */
-	u_int8_t flags;			/* Flags */
-	u_int32_t msgid;		/* message id */
-
-#ifdef ENABLE_NATT
-	struct ph1natt_options *natt_options;	/* Selected NAT-T IKE version */
-	u_int32_t natt_flags;		/* NAT-T related flags */
-#endif
-#ifdef ENABLE_FRAG
-	int frag;			/* IKE phase 1 fragmentation */
-	struct isakmp_frag_item *frag_chain;	/* Received fragments */
-#endif
-
-	struct sched *sce;		/* schedule for expire */
-
-	struct sched *scr;		/* schedule for resend */
-	int retry_counter;		/* for resend. */
-	vchar_t *sendbuf;		/* buffer for re-sending */
-
-	vchar_t *dhpriv;		/* DH; private value */
-	vchar_t *dhpub;			/* DH; public value */
-	vchar_t *dhpub_p;		/* DH; partner's public value */
-	vchar_t *dhgxy;			/* DH; shared secret */
-	vchar_t *nonce;			/* nonce value */
-	vchar_t *nonce_p;		/* partner's nonce value */
-	vchar_t *skeyid;		/* SKEYID */
-	vchar_t *skeyid_d;		/* SKEYID_d */
-	vchar_t *skeyid_a;		/* SKEYID_a, i.e. hash */
-	vchar_t *skeyid_e;		/* SKEYID_e, i.e. encryption */
-	vchar_t *key;			/* cipher key */
-	vchar_t *hash;			/* HASH minus general header */
-	vchar_t *sig;			/* SIG minus general header */
-	vchar_t *sig_p;			/* peer's SIG minus general header */
-	cert_t *cert;			/* CERT minus general header */
-	cert_t *cert_p;			/* peer's CERT minus general header */
-	cert_t *crl_p;			/* peer's CRL minus general header */
-	cert_t *cr_p;			/* peer's CR not including general */
-	RSA *rsa;			/* my RSA key */
-	RSA *rsa_p;			/* peer's RSA key */
-	struct genlist *rsa_candidates;	/* possible candidates for peer's RSA key */
-	vchar_t *id;			/* ID minus gen header */
-	vchar_t *id_p;			/* partner's ID minus general header */
-					/* i.e. struct ipsecdoi_id_b*. */
-	struct isakmp_ivm *ivm;		/* IVs */
-
-	vchar_t *sa;			/* whole SA payload to send/to be sent*/
-					/* to calculate HASH */
-					/* NOT INCLUDING general header. */
-
-	vchar_t *sa_ret;		/* SA payload to reply/to be replyed */
-					/* NOT INCLUDING general header. */
-					/* NOTE: Should be release after use. */
-
-#ifdef HAVE_GSSAPI
-	void *gssapi_state;		/* GSS-API specific state. */
-					/* Allocated when needed */
-	vchar_t *gi_i;			/* optional initiator GSS id */
-	vchar_t *gi_r;			/* optional responder GSS id */
-#endif
-
-	struct isakmp_pl_hash *pl_hash;	/* pointer to hash payload */
-
-	time_t created;			/* timestamp for establish */
-#ifdef ENABLE_STATS
-	struct timeval start;
-	struct timeval end;
-#endif
-
-#ifdef ENABLE_DPD
-	int		dpd_support;	/* Does remote supports DPD ? */
-	time_t		dpd_lastack;	/* Last ack received */
-	u_int16_t	dpd_seq;		/* DPD seq number to receive */
-	u_int8_t	dpd_fails;		/* number of failures */
-	struct sched	*dpd_r_u;
-#endif
-
-	u_int32_t msgid2;		/* msgid counter for Phase 2 */
-	int ph2cnt;	/* the number which is negotiated by this phase 1 */
-	LIST_HEAD(_ph2ofph1_, ph2handle) ph2tree;
-
-	LIST_ENTRY(ph1handle) chain;
-#ifdef ENABLE_HYBRID
-	struct isakmp_cfg_state *mode_cfg;	/* ISAKMP mode config state */
-#endif       
-
-};
-
-/* Phase 2 handler */
-/* allocated per a SA or SA bundles of a pair of peer's IP addresses. */
-/*
- *      initiator               responder
- *  0   (---)                   (---)
- *  1   start                   start (1st msg received)
- *  2   acquire msg get         1st valid msg received
- *  3   getspi request sent     getspi request sent
- *  4   getspi done             getspi done
- *  5   1st msg sent            1st msg sent
- *  6   1st valid msg received  2nd valid msg received
- *  7   (commit bit)            (commit bit)
- *  8   SAs added               SAs added
- *  9   SAs established         SAs established
- * 10   SAs expired             SAs expired
- */
-#define PHASE2ST_SPAWN		0
-#define PHASE2ST_START		1
-#define PHASE2ST_STATUS2	2
-#define PHASE2ST_GETSPISENT	3
-#define PHASE2ST_GETSPIDONE	4
-#define PHASE2ST_MSG1SENT	5
-#define PHASE2ST_STATUS6	6
-#define PHASE2ST_COMMIT		7
-#define PHASE2ST_ADDSA		8
-#define PHASE2ST_ESTABLISHED	9
-#define PHASE2ST_EXPIRED	10
-#define PHASE2ST_MAX		11
-
-struct ph2handle {
-	struct sockaddr *src;		/* my address of SA. */
-	struct sockaddr *dst;		/* peer's address of SA. */
-
-		/*
-		 * copy ip address from ID payloads when ID type is ip address.
-		 * In other case, they must be null.
-		 */
-	struct sockaddr *src_id;
-	struct sockaddr *dst_id;
-
-	u_int32_t spid;			/* policy id by kernel */
-
-	int status;			/* ipsec sa status */
-	u_int8_t side;			/* INITIATOR or RESPONDER */
-
-	struct sched *sce;		/* schedule for expire */
-	struct sched *scr;		/* schedule for resend */
-	int retry_counter;		/* for resend. */
-	vchar_t *sendbuf;		/* buffer for re-sending */
-	vchar_t *msg1;			/* buffer for re-sending */
-				/* used for responder's first message */
-
-	int retry_checkph1;		/* counter to wait phase 1 finished. */
-					/* NOTE: actually it's timer. */
-
-	u_int32_t seq;			/* sequence number used by PF_KEY */
-			/*
-			 * NOTE: In responder side, we can't identify each SAs
-			 * with same destination address for example, when
-			 * socket based SA is required.  So we set a identifier
-			 * number to "seq", and sent kernel by pfkey.
-			 */
-	u_int8_t satype;		/* satype in PF_KEY */
-			/*
-			 * saved satype in the original PF_KEY request from
-			 * the kernel in order to reply a error.
-			 */
-
-	u_int8_t flags;			/* Flags for phase 2 */
-	u_int32_t msgid;		/* msgid for phase 2 */
-
-	struct sainfo *sainfo;		/* place holder of sainfo */
-	struct saprop *proposal;	/* SA(s) proposal. */
-	struct saprop *approval;	/* SA(s) approved. */
-	caddr_t spidx_gen;		/* policy from peer's proposal */
-
-	struct dhgroup *pfsgrp;		/* DH; prime number */
-	vchar_t *dhpriv;		/* DH; private value */
-	vchar_t *dhpub;			/* DH; public value */
-	vchar_t *dhpub_p;		/* DH; partner's public value */
-	vchar_t *dhgxy;			/* DH; shared secret */
-	vchar_t *id;			/* ID minus gen header */
-	vchar_t *id_p;			/* peer's ID minus general header */
-	vchar_t *nonce;			/* nonce value in phase 2 */
-	vchar_t *nonce_p;		/* partner's nonce value in phase 2 */
-
-	vchar_t *sa;			/* whole SA payload to send/to be sent*/
-					/* to calculate HASH */
-					/* NOT INCLUDING general header. */
-
-	vchar_t *sa_ret;		/* SA payload to reply/to be replyed */
-					/* NOT INCLUDING general header. */
-					/* NOTE: Should be release after use. */
-
-	struct isakmp_ivm *ivm;		/* IVs */
-
-	int generated_spidx;	/* mark handlers whith generated policy */
-
-#ifdef ENABLE_STATS
-	struct timeval start;
-	struct timeval end;
-#endif
-	struct ph1handle *ph1;	/* back pointer to isakmp status */
-
-	LIST_ENTRY(ph2handle) chain;
-	LIST_ENTRY(ph2handle) ph1bind;	/* chain to ph1handle */
-};
-
-/*
- * for handling initial contact.
- */
-struct contacted {
-	struct sockaddr *remote;	/* remote address to negosiate ph1 */
-	LIST_ENTRY(contacted) chain;
-};
-
-/*
- * for checking a packet retransmited.
- */
-struct recvdpkt {
-	struct sockaddr *remote;	/* the remote address */
-	struct sockaddr *local;		/* the local address */
-	vchar_t *hash;			/* hash of the received packet */
-	vchar_t *sendbuf;		/* buffer for the response */
-	int retry_counter;		/* how many times to send */
-	time_t time_send;		/* timestamp to send a packet */
-	time_t created;			/* timestamp to create a queue */
-
-	struct sched *scr;		/* schedule for resend, may not used */
-
-	LIST_ENTRY(recvdpkt) chain;
-};
-
-/* for parsing ISAKMP header. */
-struct isakmp_parse_t {
-	u_char type;		/* payload type of mine */
-	int len;		/* ntohs(ptr->len) */
-	struct isakmp_gen *ptr;
-};
-
-/*
- * for IV management.
- *
- * - normal case
- * initiator                                     responder
- * -------------------------                     --------------------------
- * initialize iv(A), ive(A).                     initialize iv(A), ive(A).
- * encode by ive(A).
- * save to iv(B).            ---[packet(B)]-->   save to ive(B).
- *                                               decode by iv(A).
- *                                               packet consistency.
- *                                               sync iv(B) with ive(B).
- *                                               check auth, integrity.
- *                                               encode by ive(B).
- * save to ive(C).          <--[packet(C)]---    save to iv(C).
- * decoded by iv(B).
- *      :
- *
- * - In the case that a error is found while cipher processing,
- * initiator                                     responder
- * -------------------------                     --------------------------
- * initialize iv(A), ive(A).                     initialize iv(A), ive(A).
- * encode by ive(A).
- * save to iv(B).            ---[packet(B)]-->   save to ive(B).
- *                                               decode by iv(A).
- *                                               packet consistency.
- *                                               sync iv(B) with ive(B).
- *                                               check auth, integrity.
- *                                               error found.
- *                                               create notify.
- *                                               get ive2(X) from iv(B).
- *                                               encode by ive2(X).
- * get iv2(X) from iv(B).   <--[packet(Y)]---    save to iv2(Y).
- * save to ive2(Y).
- * decoded by iv2(X).
- *      :
- *
- * The reason why the responder synchronizes iv with ive after checking the
- * packet consistency is that it is required to leave the IV for decoding
- * packet.  Because there is a potential of error while checking the packet
- * consistency.  Also the reason why that is before authentication and
- * integirty check is that the IV for informational exchange has to be made
- * by the IV which is after packet decoded and checking the packet consistency.
- * Otherwise IV mismatched happens between the intitiator and the responder.
- */
-struct isakmp_ivm {
-	vchar_t *iv;	/* for decoding packet */
-			/* if phase 1, it's for computing phase2 iv */
-	vchar_t *ive;	/* for encoding packet */
-};
-
-/* for dumping */
-struct ph1dump {
-	isakmp_index index;
-	int status;
-	int side;
-	struct sockaddr_storage remote;
-	struct sockaddr_storage local;
-	u_int8_t version;
-	u_int8_t etype;	
-	time_t created;
-	int ph2cnt;
-};
-
-struct sockaddr;
-struct ph1handle;
-struct ph2handle;
-struct policyindex;
-
-extern struct ph1handle *getph1byindex __P((isakmp_index *));
-extern struct ph1handle *getph1byindex0 __P((isakmp_index *));
-extern struct ph1handle *getph1byaddr __P((struct sockaddr *,
-										   struct sockaddr *, int));
-extern struct ph1handle *getph1byaddrwop __P((struct sockaddr *,
-	struct sockaddr *));
-extern struct ph1handle *getph1bydstaddrwop __P((struct sockaddr *));
-#ifdef ENABLE_HYBRID
-struct ph1handle *getph1bylogin __P((char *));
-int purgeph1bylogin __P((char *));
-#endif
-extern vchar_t *dumpph1 __P((void));
-extern struct ph1handle *newph1 __P((void));
-extern void delph1 __P((struct ph1handle *));
-extern int insph1 __P((struct ph1handle *));
-extern void remph1 __P((struct ph1handle *));
-extern void flushph1 __P((void));
-extern void initph1tree __P((void));
-
-extern struct ph2handle *getph2byspidx __P((struct policyindex *));
-extern struct ph2handle *getph2byspid __P((u_int32_t));
-extern struct ph2handle *getph2byseq __P((u_int32_t));
-extern struct ph2handle *getph2bysaddr __P((struct sockaddr *,
-	struct sockaddr *));
-extern struct ph2handle *getph2bymsgid __P((struct ph1handle *, u_int32_t));
-extern struct ph2handle *getph2byid __P((struct sockaddr *,
-	struct sockaddr *, u_int32_t));
-extern struct ph2handle *getph2bysaidx __P((struct sockaddr *,
-	struct sockaddr *, u_int, u_int32_t));
-extern struct ph2handle *newph2 __P((void));
-extern void initph2 __P((struct ph2handle *));
-extern void delph2 __P((struct ph2handle *));
-extern int insph2 __P((struct ph2handle *));
-extern void remph2 __P((struct ph2handle *));
-extern void flushph2 __P((void));
-extern void deleteallph2 __P((struct sockaddr *, struct sockaddr *, u_int));
-extern void initph2tree __P((void));
-
-extern void bindph12 __P((struct ph1handle *, struct ph2handle *));
-extern void unbindph12 __P((struct ph2handle *));
-
-extern struct contacted *getcontacted __P((struct sockaddr *));
-extern int inscontacted __P((struct sockaddr *));
-extern void initctdtree __P((void));
-
-extern int check_recvdpkt __P((struct sockaddr *,
-	struct sockaddr *, vchar_t *));
-extern int add_recvdpkt __P((struct sockaddr *, struct sockaddr *,
-	vchar_t *, vchar_t *));
-extern void init_recvdpkt __P((void));
-
-#ifdef ENABLE_HYBRID
-extern int exclude_cfg_addr __P((const struct sockaddr *));
-#endif
-
-extern int revalidate_ph12(void);
-
-#endif /* _HANDLER_H */
diff --git a/src/racoon/ipsec_doi.c b/src/racoon/ipsec_doi.c
deleted file mode 100644
index 9a59135..0000000
--- a/src/racoon/ipsec_doi.c
+++ /dev/null
@@ -1,4949 +0,0 @@
-/*	$NetBSD: ipsec_doi.c,v 1.23.4.10 2009/06/19 07:32:52 tteras Exp $	*/
-
-/* Id: ipsec_doi.c,v 1.55 2006/08/17 09:20:41 vanhu Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-
-#include PATH_IPSEC_H
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <netdb.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-
-#include "var.h"
-#include "vmbuf.h"
-#include "misc.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "cfparse_proto.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "ipsec_doi.h"
-#include "oakley.h"
-#include "remoteconf.h"
-#include "localconf.h"
-#include "sockmisc.h"
-#include "handler.h"
-#include "policy.h"
-#include "algorithm.h"
-#include "sainfo.h"
-#include "proposal.h"
-#include "crypto_openssl.h"
-#include "strnames.h"
-#include "gcmalloc.h"
-
-#ifdef ENABLE_NATT
-#include "nattraversal.h"
-#endif
-#ifdef ENABLE_HYBRID
-static int switch_authmethod(int);
-#endif
-
-#ifdef HAVE_GSSAPI
-#include <iconv.h>
-#include "gssapi.h"
-#ifdef HAVE_ICONV_2ND_CONST
-#define __iconv_const const
-#else
-#define __iconv_const
-#endif
-#endif
-
-int verbose_proposal_check = 1;
-
-static vchar_t *get_ph1approval __P((struct ph1handle *, struct prop_pair **));
-static struct isakmpsa *get_ph1approvalx __P((struct prop_pair *,
-	struct isakmpsa *, struct isakmpsa *, int));
-static void print_ph1mismatched __P((struct prop_pair *, struct isakmpsa *));
-static int t2isakmpsa __P((struct isakmp_pl_t *, struct isakmpsa *));
-static int cmp_aproppair_i __P((struct prop_pair *, struct prop_pair *));
-static struct prop_pair *get_ph2approval __P((struct ph2handle *,
-	struct prop_pair **));
-static struct prop_pair *get_ph2approvalx __P((struct ph2handle *,
-	struct prop_pair *));
-static void free_proppair0 __P((struct prop_pair *));
-
-static int get_transform
-	__P((struct isakmp_pl_p *, struct prop_pair **, int *));
-static u_int32_t ipsecdoi_set_ld __P((vchar_t *));
-
-static int check_doi __P((u_int32_t));
-static int check_situation __P((u_int32_t));
-
-static int check_prot_main __P((int));
-static int check_prot_quick __P((int));
-static int (*check_protocol[]) __P((int)) = {
-	check_prot_main,	/* IPSECDOI_TYPE_PH1 */
-	check_prot_quick,	/* IPSECDOI_TYPE_PH2 */
-};
-
-static int check_spi_size __P((int, int));
-
-static int check_trns_isakmp __P((int));
-static int check_trns_ah __P((int));
-static int check_trns_esp __P((int));
-static int check_trns_ipcomp __P((int));
-static int (*check_transform[]) __P((int)) = {
-	0,
-	check_trns_isakmp,	/* IPSECDOI_PROTO_ISAKMP */
-	check_trns_ah,		/* IPSECDOI_PROTO_IPSEC_AH */
-	check_trns_esp,		/* IPSECDOI_PROTO_IPSEC_ESP */
-	check_trns_ipcomp,	/* IPSECDOI_PROTO_IPCOMP */
-};
-
-static int check_attr_isakmp __P((struct isakmp_pl_t *));
-static int check_attr_ah __P((struct isakmp_pl_t *));
-static int check_attr_esp __P((struct isakmp_pl_t *));
-static int check_attr_ipsec __P((int, struct isakmp_pl_t *));
-static int check_attr_ipcomp __P((struct isakmp_pl_t *));
-static int (*check_attributes[]) __P((struct isakmp_pl_t *)) = {
-	0,
-	check_attr_isakmp,	/* IPSECDOI_PROTO_ISAKMP */
-	check_attr_ah,		/* IPSECDOI_PROTO_IPSEC_AH */
-	check_attr_esp,		/* IPSECDOI_PROTO_IPSEC_ESP */
-	check_attr_ipcomp,	/* IPSECDOI_PROTO_IPCOMP */
-};
-
-static int setph1prop __P((struct isakmpsa *, caddr_t));
-static int setph1trns __P((struct isakmpsa *, caddr_t));
-static int setph1attr __P((struct isakmpsa *, caddr_t));
-static vchar_t *setph2proposal0 __P((const struct ph2handle *,
-	const struct saprop *, const struct saproto *));
-
-static vchar_t *getidval __P((int, vchar_t *));
-
-#ifdef HAVE_GSSAPI
-static struct isakmpsa *fixup_initiator_sa __P((struct isakmpsa *,
-	struct isakmpsa *));
-#endif
-
-/*%%%*/
-/*
- * check phase 1 SA payload.
- * make new SA payload to be replyed not including general header.
- * the pointer to one of isakmpsa in proposal is set into iph1->approval.
- * OUT:
- *	positive: the pointer to new buffer of SA payload.
- *		  network byte order.
- *	NULL	: error occurd.
- */
-int
-ipsecdoi_checkph1proposal(sa, iph1)
-	vchar_t *sa;
-	struct ph1handle *iph1;
-{
-	vchar_t *newsa;		/* new SA payload approved. */
-	struct prop_pair **pair;
-
-	/* get proposal pair */
-	pair = get_proppair(sa, IPSECDOI_TYPE_PH1);
-	if (pair == NULL)
-		return -1;
-
-	/* check and get one SA for use */
-	newsa = get_ph1approval(iph1, pair);
-	
-	free_proppair(pair);
-
-	if (newsa == NULL)
-		return -1;
-
-	iph1->sa_ret = newsa;
-
-	return 0;
-}
-
-/*
- * acceptable check for remote configuration.
- * return a new SA payload to be reply to peer.
- */
-static vchar_t *
-get_ph1approval(iph1, pair)
-	struct ph1handle *iph1;
-	struct prop_pair **pair;
-{
-	vchar_t *newsa;
-	struct isakmpsa *sa, tsa;
-	struct prop_pair *s, *p;
-	int prophlen;
-	int i;
-
-	if (iph1->approval) {
-		delisakmpsa(iph1->approval);
-		iph1->approval = NULL;
-	}
-
-	for (i = 0; i < MAXPROPPAIRLEN; i++) {
-		if (pair[i] == NULL)
-			continue;
-		for (s = pair[i]; s; s = s->next) {
-			prophlen = 
-			    sizeof(struct isakmp_pl_p) + s->prop->spi_size;
-
-			/* compare proposal and select one */
-			for (p = s; p; p = p->tnext) {
-				if ((sa = get_ph1approvalx(p, 
-				    iph1->rmconf->proposal, &tsa, 
-				    iph1->rmconf->pcheck_level)) != NULL)
-					goto found;
-			}
-		}
-	}
-
-	/*
-	 * if there is no suitable proposal, racoon complains about all of
-	 * mismatched items in those proposal.
-	 */
-	if (verbose_proposal_check) {
-		for (i = 0; i < MAXPROPPAIRLEN; i++) {
-			if (pair[i] == NULL)
-				continue;
-			for (s = pair[i]; s; s = s->next) {
-				prophlen = sizeof(struct isakmp_pl_p)
-						+ s->prop->spi_size;
-				for (p = s; p; p = p->tnext) {
-					print_ph1mismatched(p,
-						iph1->rmconf->proposal);
-				}
-			}
-		}
-	}
-	plog(LLV_ERROR, LOCATION, NULL, "no suitable proposal found.\n");
-
-	return NULL;
-
-found:
-	plog(LLV_DEBUG, LOCATION, NULL, "an acceptable proposal found.\n");
-
-	/* check DH group settings */
-	if (sa->dhgrp) {
-		if (sa->dhgrp->prime && sa->dhgrp->gen1) {
-			/* it's ok */
-			goto saok;
-		}
-		plog(LLV_WARNING, LOCATION, NULL,
-			"invalid DH parameter found, use default.\n");
-		oakley_dhgrp_free(sa->dhgrp);
-		sa->dhgrp=NULL;
-	}
-
-	if (oakley_setdhgroup(sa->dh_group, &sa->dhgrp) == -1) {
-		sa->dhgrp = NULL;
-		racoon_free(sa);
-		return NULL;
-	}
-
-saok:
-#ifdef HAVE_GSSAPI
-	if (sa->gssid != NULL)
-		plog(LLV_DEBUG, LOCATION, NULL, "gss id in new sa '%.*s'\n",
-		    (int)sa->gssid->l, sa->gssid->v);
-	if (iph1-> side == INITIATOR) {
-		if (iph1->rmconf->proposal->gssid != NULL)
-			iph1->gi_i = vdup(iph1->rmconf->proposal->gssid);
-		if (tsa.gssid != NULL)
-			iph1->gi_r = vdup(tsa.gssid);
-		iph1->approval = fixup_initiator_sa(sa, &tsa);
-	} else {
-		if (tsa.gssid != NULL) {
-			iph1->gi_r = vdup(tsa.gssid);
-			iph1->gi_i = gssapi_get_id(iph1);
-			if (sa->gssid == NULL && iph1->gi_i != NULL)
-				sa->gssid = vdup(iph1->gi_i);
-		}
-		iph1->approval = sa;
-	}
-	if (iph1->gi_i != NULL)
-		plog(LLV_DEBUG, LOCATION, NULL, "GIi is %.*s\n",
-		    (int)iph1->gi_i->l, iph1->gi_i->v);
-	if (iph1->gi_r != NULL)
-		plog(LLV_DEBUG, LOCATION, NULL, "GIr is %.*s\n",
-		    (int)iph1->gi_r->l, iph1->gi_r->v);
-#else
-	iph1->approval = sa;
-#endif
-	if(iph1->approval) {
-		plog(LLV_DEBUG, LOCATION, NULL, "agreed on %s auth.\n",
-		    s_oakley_attr_method(iph1->approval->authmethod));
-	}
-
-	newsa = get_sabyproppair(p, iph1);
-	if (newsa == NULL){
-		delisakmpsa(iph1->approval);
-		iph1->approval = NULL;
-	}
-
-	return newsa;
-}
-
-/*
- * compare peer's single proposal and all of my proposal.
- * and select one if suiatable.
- * p       : one of peer's proposal.
- * proposal: my proposals.
- */
-static struct isakmpsa *
-get_ph1approvalx(p, proposal, sap, check_level)
-	struct prop_pair *p;
-	struct isakmpsa *proposal, *sap;
-	int check_level;
-{
-	struct isakmp_pl_p *prop = p->prop;
-	struct isakmp_pl_t *trns = p->trns;
-	struct isakmpsa sa, *s, *tsap;
-	int authmethod;
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-       		"prop#=%d, prot-id=%s, spi-size=%d, #trns=%d\n",
-		prop->p_no, s_ipsecdoi_proto(prop->proto_id),
-		prop->spi_size, prop->num_t);
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"trns#=%d, trns-id=%s\n",
-		trns->t_no,
-		s_ipsecdoi_trns(prop->proto_id, trns->t_id));
-
-	tsap = sap != NULL ? sap : &sa;
-
-	memset(tsap, 0, sizeof(*tsap));
-	if (t2isakmpsa(trns, tsap) < 0)
-		return NULL;
-	for (s = proposal; s != NULL; s = s->next) {
-#ifdef ENABLE_HYBRID
-		authmethod = switch_authmethod(s->authmethod);
-#else
-		authmethod = s->authmethod;
-#endif
-		plog(LLV_DEBUG, LOCATION, NULL, "Compared: DB:Peer\n");
-		plog(LLV_DEBUG, LOCATION, NULL, "(lifetime = %ld:%ld)\n",
-			(long)s->lifetime, (long)tsap->lifetime);
-		plog(LLV_DEBUG, LOCATION, NULL, "(lifebyte = %zu:%zu)\n",
-			s->lifebyte, tsap->lifebyte);
-		plog(LLV_DEBUG, LOCATION, NULL, "enctype = %s:%s\n",
-			s_oakley_attr_v(OAKLEY_ATTR_ENC_ALG,
-					s->enctype),
-			s_oakley_attr_v(OAKLEY_ATTR_ENC_ALG,
-					tsap->enctype));
-		plog(LLV_DEBUG, LOCATION, NULL, "(encklen = %d:%d)\n",
-			s->encklen, tsap->encklen);
-		plog(LLV_DEBUG, LOCATION, NULL, "hashtype = %s:%s\n",
-			s_oakley_attr_v(OAKLEY_ATTR_HASH_ALG,
-					s->hashtype),
-			s_oakley_attr_v(OAKLEY_ATTR_HASH_ALG,
-					tsap->hashtype));
-		plog(LLV_DEBUG, LOCATION, NULL, "authmethod = %s:%s\n",
-			s_oakley_attr_v(OAKLEY_ATTR_AUTH_METHOD,
-					s->authmethod),
-			s_oakley_attr_v(OAKLEY_ATTR_AUTH_METHOD,
-					tsap->authmethod));
-		plog(LLV_DEBUG, LOCATION, NULL, "dh_group = %s:%s\n",
-			s_oakley_attr_v(OAKLEY_ATTR_GRP_DESC,
-					s->dh_group),
-			s_oakley_attr_v(OAKLEY_ATTR_GRP_DESC,
-					tsap->dh_group));
-#if 0
-		/* XXX to be considered ? */
-		if (tsap->lifebyte > s->lifebyte) ;
-#endif
-		/*
-		 * if responder side and peer's key length in proposal
-		 * is bigger than mine, it might be accepted.
-		 */
-		if(tsap->enctype == s->enctype &&
-		    tsap->authmethod == authmethod &&
-		    tsap->hashtype == s->hashtype &&
-		    tsap->dh_group == s->dh_group &&
-		    tsap->encklen == s->encklen) {
-			switch(check_level) {
-			case PROP_CHECK_OBEY:
-				goto found;
-				break;
-
-			case PROP_CHECK_STRICT:
-				if ((tsap->lifetime > s->lifetime) ||
-				    (tsap->lifebyte > s->lifebyte))
-					continue;
-				goto found;
-				break;
-
-			case PROP_CHECK_CLAIM:
-				if (tsap->lifetime < s->lifetime)
-					s->lifetime = tsap->lifetime;
-				if (tsap->lifebyte < s->lifebyte)
-					s->lifebyte = tsap->lifebyte;
-				goto found;
-				break;
-
-			case PROP_CHECK_EXACT:
-				if ((tsap->lifetime != s->lifetime) ||
-				    (tsap->lifebyte != s->lifebyte))
-					continue;
-				goto found;
-				break;
-
-			default:
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "Unexpected proposal_check value\n");
-				continue;
-				break;
-			}
-		}
-	}
-
-found:
-	if (tsap->dhgrp != NULL){
-		oakley_dhgrp_free(tsap->dhgrp);
-		tsap->dhgrp = NULL;
-	}
-
-	if ((s = dupisakmpsa(s)) != NULL) {
-		switch(check_level) {
-		case PROP_CHECK_OBEY:
-			s->lifetime = tsap->lifetime;
-			s->lifebyte = tsap->lifebyte;
-			break;
-
-		case PROP_CHECK_STRICT:
-			s->lifetime = tsap->lifetime;
-			s->lifebyte = tsap->lifebyte;
-			break;
-
-		case PROP_CHECK_CLAIM:
-			if (tsap->lifetime < s->lifetime)
-				s->lifetime = tsap->lifetime;
-			if (tsap->lifebyte < s->lifebyte)
-				s->lifebyte = tsap->lifebyte;
-			break;
-
-		default:
-			break;
-		}
-	}
-	return s;
-}
-
-/*
- * print all of items in peer's proposal which are mismatched to my proposal.
- * p       : one of peer's proposal.
- * proposal: my proposals.
- */
-static void
-print_ph1mismatched(p, proposal)
-	struct prop_pair *p;
-	struct isakmpsa *proposal;
-{
-	struct isakmpsa sa, *s;
-
-	memset(&sa, 0, sizeof(sa));
-	if (t2isakmpsa(p->trns, &sa) < 0)
-		return;
-	for (s = proposal; s ; s = s->next) {
-		if (sa.enctype != s->enctype) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"rejected enctype: "
-				"DB(prop#%d:trns#%d):Peer(prop#%d:trns#%d) = "
-				"%s:%s\n",
-				s->prop_no, s->trns_no,
-				p->prop->p_no, p->trns->t_no,
-				s_oakley_attr_v(OAKLEY_ATTR_ENC_ALG,
-					s->enctype),
-				s_oakley_attr_v(OAKLEY_ATTR_ENC_ALG,
-					sa.enctype));
-		}
-		if (sa.authmethod != s->authmethod) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"rejected authmethod: "
-				"DB(prop#%d:trns#%d):Peer(prop#%d:trns#%d) = "
-				"%s:%s\n",
-				s->prop_no, s->trns_no,
-				p->prop->p_no, p->trns->t_no,
-				s_oakley_attr_v(OAKLEY_ATTR_AUTH_METHOD,
-					s->authmethod),
-				s_oakley_attr_v(OAKLEY_ATTR_AUTH_METHOD,
-					sa.authmethod));
-		}
-		if (sa.hashtype != s->hashtype) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"rejected hashtype: "
-				"DB(prop#%d:trns#%d):Peer(prop#%d:trns#%d) = "
-				"%s:%s\n",
-				s->prop_no, s->trns_no,
-				p->prop->p_no, p->trns->t_no,
-				s_oakley_attr_v(OAKLEY_ATTR_HASH_ALG,
-					s->hashtype),
-				s_oakley_attr_v(OAKLEY_ATTR_HASH_ALG,
-					sa.hashtype));
-		}
-		if (sa.dh_group != s->dh_group) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"rejected dh_group: "
-				"DB(prop#%d:trns#%d):Peer(prop#%d:trns#%d) = "
-				"%s:%s\n",
-				s->prop_no, s->trns_no,
-				p->prop->p_no, p->trns->t_no,
-				s_oakley_attr_v(OAKLEY_ATTR_GRP_DESC,
-					s->dh_group),
-				s_oakley_attr_v(OAKLEY_ATTR_GRP_DESC,
-					sa.dh_group));
-		}
-	}
-
-	if (sa.dhgrp != NULL){
-		oakley_dhgrp_free(sa.dhgrp);
-		sa.dhgrp=NULL;
-	}
-}
-
-/*
- * get ISAKMP data attributes
- */
-static int
-t2isakmpsa(trns, sa)
-	struct isakmp_pl_t *trns;
-	struct isakmpsa *sa;
-{
-	struct isakmp_data *d, *prev;
-	int flag, type;
-	int error = -1;
-	int life_t;
-	int keylen = 0;
-	vchar_t *val = NULL;
-	int len, tlen;
-	u_char *p;
-
-	tlen = ntohs(trns->h.len) - sizeof(*trns);
-	prev = (struct isakmp_data *)NULL;
-	d = (struct isakmp_data *)(trns + 1);
-
-	/* default */
-	life_t = OAKLEY_ATTR_SA_LD_TYPE_DEFAULT;
-	sa->lifetime = OAKLEY_ATTR_SA_LD_SEC_DEFAULT;
-	sa->lifebyte = 0;
-	sa->dhgrp = racoon_calloc(1, sizeof(struct dhgroup));
-	if (!sa->dhgrp)
-		goto err;
-
-	while (tlen > 0) {
-
-		type = ntohs(d->type) & ~ISAKMP_GEN_MASK;
-		flag = ntohs(d->type) & ISAKMP_GEN_MASK;
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"type=%s, flag=0x%04x, lorv=%s\n",
-			s_oakley_attr(type), flag,
-			s_oakley_attr_v(type, ntohs(d->lorv)));
-
-		/* get variable-sized item */
-		switch (type) {
-		case OAKLEY_ATTR_GRP_PI:
-		case OAKLEY_ATTR_GRP_GEN_ONE:
-		case OAKLEY_ATTR_GRP_GEN_TWO:
-		case OAKLEY_ATTR_GRP_CURVE_A:
-		case OAKLEY_ATTR_GRP_CURVE_B:
-		case OAKLEY_ATTR_SA_LD:
-		case OAKLEY_ATTR_GRP_ORDER:
-			if (flag) {	/*TV*/
-				len = 2;
-				p = (u_char *)&d->lorv;
-			} else {	/*TLV*/
-				len = ntohs(d->lorv);
-				p = (u_char *)(d + 1);
-			}
-			val = vmalloc(len);
-			if (!val)
-				return -1;
-			memcpy(val->v, p, len);
-			break;
-
-		default:
-			break;
-		}
-
-		switch (type) {
-		case OAKLEY_ATTR_ENC_ALG:
-			sa->enctype = (u_int16_t)ntohs(d->lorv);
-			break;
-
-		case OAKLEY_ATTR_HASH_ALG:
-			sa->hashtype = (u_int16_t)ntohs(d->lorv);
-			break;
-
-		case OAKLEY_ATTR_AUTH_METHOD:
-			sa->authmethod = ntohs(d->lorv);
-			break;
-
-		case OAKLEY_ATTR_GRP_DESC:
-			sa->dh_group = (u_int16_t)ntohs(d->lorv);
-			break;
-
-		case OAKLEY_ATTR_GRP_TYPE:
-		{
-			int type = (int)ntohs(d->lorv);
-			if (type == OAKLEY_ATTR_GRP_TYPE_MODP)
-				sa->dhgrp->type = type;
-			else
-				return -1;
-			break;
-		}
-		case OAKLEY_ATTR_GRP_PI:
-			sa->dhgrp->prime = val;
-			break;
-
-		case OAKLEY_ATTR_GRP_GEN_ONE:
-			vfree(val);
-			if (!flag)
-				sa->dhgrp->gen1 = ntohs(d->lorv);
-			else {
-				int len = ntohs(d->lorv);
-				sa->dhgrp->gen1 = 0;
-				if (len > 4)
-					return -1;
-				memcpy(&sa->dhgrp->gen1, d + 1, len);
-				sa->dhgrp->gen1 = ntohl(sa->dhgrp->gen1);
-			}
-			break;
-
-		case OAKLEY_ATTR_GRP_GEN_TWO:
-			vfree(val);
-			if (!flag)
-				sa->dhgrp->gen2 = ntohs(d->lorv);
-			else {
-				int len = ntohs(d->lorv);
-				sa->dhgrp->gen2 = 0;
-				if (len > 4)
-					return -1;
-				memcpy(&sa->dhgrp->gen2, d + 1, len);
-				sa->dhgrp->gen2 = ntohl(sa->dhgrp->gen2);
-			}
-			break;
-
-		case OAKLEY_ATTR_GRP_CURVE_A:
-			sa->dhgrp->curve_a = val;
-			break;
-
-		case OAKLEY_ATTR_GRP_CURVE_B:
-			sa->dhgrp->curve_b = val;
-			break;
-
-		case OAKLEY_ATTR_SA_LD_TYPE:
-		{
-			int type = (int)ntohs(d->lorv);
-			switch (type) {
-			case OAKLEY_ATTR_SA_LD_TYPE_SEC:
-			case OAKLEY_ATTR_SA_LD_TYPE_KB:
-				life_t = type;
-				break;
-			default:
-				life_t = OAKLEY_ATTR_SA_LD_TYPE_DEFAULT;
-				break;
-			}
-			break;
-		}
-		case OAKLEY_ATTR_SA_LD:
-			if (!prev
-			 || (ntohs(prev->type) & ~ISAKMP_GEN_MASK) !=
-					OAKLEY_ATTR_SA_LD_TYPE) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				    "life duration must follow ltype\n");
-				break;
-			}
-
-			switch (life_t) {
-			case IPSECDOI_ATTR_SA_LD_TYPE_SEC:
-				sa->lifetime = ipsecdoi_set_ld(val);
-				vfree(val);
-				if (sa->lifetime == 0) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"invalid life duration.\n");
-					goto err;
-				}
-				break;
-			case IPSECDOI_ATTR_SA_LD_TYPE_KB:
-				sa->lifebyte = ipsecdoi_set_ld(val);
-				vfree(val);
-				if (sa->lifebyte == 0) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"invalid life duration.\n");
-					goto err;
-				}
-				break;
-			default:
-				vfree(val);
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid life type: %d\n", life_t);
-				goto err;
-			}
-			break;
-
-		case OAKLEY_ATTR_KEY_LEN:
-		{
-			int len = ntohs(d->lorv);
-			if (len % 8 != 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"keylen %d: not multiple of 8\n",
-					len);
-				goto err;
-			}
-			sa->encklen = (u_int16_t)len;
-			keylen++;
-			break;
-		}
-		case OAKLEY_ATTR_PRF:
-		case OAKLEY_ATTR_FIELD_SIZE:
-			/* unsupported */
-			break;
-
-		case OAKLEY_ATTR_GRP_ORDER:
-			sa->dhgrp->order = val;
-			break;
-#ifdef HAVE_GSSAPI
-		case OAKLEY_ATTR_GSS_ID:
-		{
-			int error = -1;
-			iconv_t cd = (iconv_t) -1;
-			size_t srcleft, dstleft, rv;
-			__iconv_const char *src;
-			char *dst;
-			int len = ntohs(d->lorv);
-
-			/*
-			 * Older verions of racoon just placed the
-			 * ISO-Latin-1 string on the wire directly.
-			 * Check to see if we are configured to be
-			 * compatible with this behavior.
-			 */
-			if (lcconf->gss_id_enc == LC_GSSENC_LATIN1) {
-				if ((sa->gssid = vmalloc(len)) == NULL) {
-					plog(LLV_ERROR, LOCATION, NULL,
-					    "failed to allocate memory\n");
-					goto out;
-				}
-				memcpy(sa->gssid->v, d + 1, len);
-				plog(LLV_DEBUG, LOCATION, NULL,
-				    "received old-style gss "
-				    "id '%.*s' (len %zu)\n",
-				    (int)sa->gssid->l, sa->gssid->v, 
-				    sa->gssid->l);
-				error = 0;
-				goto out;
-			}
-
-			/*
-			 * For Windows 2000 compatibility, we expect
-			 * the GSS ID attribute on the wire to be
-			 * encoded in UTF-16LE.  Internally, we work
-			 * in ISO-Latin-1.  Therefore, we should need
-			 * 1/2 the specified length, which should always
-			 * be a multiple of 2 octets.
-			 */
-			cd = iconv_open("latin1", "utf-16le");
-			if (cd == (iconv_t) -1) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				    "unable to initialize utf-16le -> latin1 "
-				    "conversion descriptor: %s\n",
-				    strerror(errno));
-				goto out;
-			}
-
-			if ((sa->gssid = vmalloc(len / 2)) == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				    "failed to allocate memory\n");
-				goto out;
-			}
-
-			src = (__iconv_const char *)(d + 1);
-			srcleft = len;
-
-			dst = sa->gssid->v;
-			dstleft = len / 2;
-
-			rv = iconv(cd, (__iconv_const char **)&src, &srcleft, 
-				   &dst, &dstleft);
-			if (rv != 0) {
-				if (rv == -1) {
-					plog(LLV_ERROR, LOCATION, NULL,
-					    "unable to convert GSS ID from "
-					    "utf-16le -> latin1: %s\n",
-					    strerror(errno));
-				} else {
-					plog(LLV_ERROR, LOCATION, NULL,
-					    "%zd character%s in GSS ID cannot "
-					    "be represented in latin1\n",
-					    rv, rv == 1 ? "" : "s");
-				}
-				goto out;
-			}
-
-			/* XXX dstleft should always be 0; assert it? */
-			sa->gssid->l = (len / 2) - dstleft;
-
-			plog(LLV_DEBUG, LOCATION, NULL,
-			    "received gss id '%.*s' (len %zu)\n",
-			    (int)sa->gssid->l, sa->gssid->v, sa->gssid->l);
-
-			error = 0;
-out:
-			if (cd != (iconv_t)-1)
-				(void)iconv_close(cd);
-
-			if ((error != 0) && (sa->gssid != NULL)) {
-				vfree(sa->gssid);
-				sa->gssid = NULL;
-			}
-			break;
-		}
-#endif /* HAVE_GSSAPI */
-
-		default:
-			break;
-		}
-
-		prev = d;
-		if (flag) {
-			tlen -= sizeof(*d);
-			d = (struct isakmp_data *)((char *)d + sizeof(*d));
-		} else {
-			tlen -= (sizeof(*d) + ntohs(d->lorv));
-			d = (struct isakmp_data *)((char *)d + sizeof(*d) + ntohs(d->lorv));
-		}
-	}
-
-	/* key length must not be specified on some algorithms */
-	if (keylen) {
-		if (sa->enctype == OAKLEY_ATTR_ENC_ALG_DES
-#ifdef HAVE_OPENSSL_IDEA_H
-		 || sa->enctype == OAKLEY_ATTR_ENC_ALG_IDEA
-#endif
-		 || sa->enctype == OAKLEY_ATTR_ENC_ALG_3DES) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"keylen must not be specified "
-				"for encryption algorithm %d\n",
-				sa->enctype);
-			return -1;
-		}
-	}
-
-	return 0;
-err:
-	return error;
-}
-
-/*%%%*/
-/*
- * check phase 2 SA payload and select single proposal.
- * make new SA payload to be replyed not including general header.
- * This function is called by responder only.
- * OUT:
- *	0: succeed.
- *	-1: error occured.
- */
-int
-ipsecdoi_selectph2proposal(iph2)
-	struct ph2handle *iph2;
-{
-	struct prop_pair **pair;
-	struct prop_pair *ret;
-
-	/* get proposal pair */
-	pair = get_proppair(iph2->sa, IPSECDOI_TYPE_PH2);
-	if (pair == NULL)
-		return -1;
-
-	/* check and select a proposal. */
-	ret = get_ph2approval(iph2, pair);
-	free_proppair(pair);
-	if (ret == NULL)
-		return -1;
-
-	/* make a SA to be replayed. */
-	/* SPI must be updated later. */
-	iph2->sa_ret = get_sabyproppair(ret, iph2->ph1);
-	free_proppair0(ret);
-	if (iph2->sa_ret == NULL)
-		return -1;
-
-	return 0;
-}
-
-/*
- * check phase 2 SA payload returned from responder.
- * This function is called by initiator only.
- * OUT:
- *	0: valid.
- *	-1: invalid.
- */
-int
-ipsecdoi_checkph2proposal(iph2)
-	struct ph2handle *iph2;
-{
-	struct prop_pair **rpair = NULL, **spair = NULL;
-	struct prop_pair *p;
-	int i, n, num;
-	int error = -1;
-	vchar_t *sa_ret = NULL;
-
-	/* get proposal pair of SA sent. */
-	spair = get_proppair(iph2->sa, IPSECDOI_TYPE_PH2);
-	if (spair == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get prop pair.\n");
-		goto end;
-	}
-
-	/* XXX should check the number of transform */
-
-	/* get proposal pair of SA replayed */
-	rpair = get_proppair(iph2->sa_ret, IPSECDOI_TYPE_PH2);
-	if (rpair == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get prop pair.\n");
-		goto end;
-	}
-
-	/* check proposal is only one ? */
-	n = 0;
-	num = 0;
-	for (i = 0; i < MAXPROPPAIRLEN; i++) {
-		if (rpair[i]) {
-			n = i;
-			num++;
-		}
-	}
-	if (num == 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no proposal received.\n");
-		goto end;
-	}
-	if (num != 1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"some proposals received.\n");
-		goto end;
-	}
-
-	if (spair[n] == NULL) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"invalid proposal number:%d received.\n", i);
-	}
-	
-
-	if (rpair[n]->tnext != NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"multi transforms replyed.\n");
-		goto end;
-	}
-
-	if (cmp_aproppair_i(rpair[n], spair[n])) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"proposal mismathed.\n");
-		goto end;
-	}
-
-	/*
-	 * check and select a proposal.
-	 * ensure that there is no modification of the proposal by
-	 * cmp_aproppair_i()
-	 */
-	p = get_ph2approval(iph2, rpair);
-	if (p == NULL)
-		goto end;
-
-	/* make a SA to be replayed. */
-	sa_ret = iph2->sa_ret;
-	iph2->sa_ret = get_sabyproppair(p, iph2->ph1);
-	free_proppair0(p);
-	if (iph2->sa_ret == NULL)
-		goto end;
-
-	error = 0;
-
-end:
-	if (rpair)
-		free_proppair(rpair);
-	if (spair)
-		free_proppair(spair);
-	if (sa_ret)
-		vfree(sa_ret);
-
-	return error;
-}
-
-/*
- * compare two prop_pair which is assumed to have same proposal number.
- * the case of bundle or single SA, NOT multi transforms.
- * a: a proposal that is multi protocols and single transform, usually replyed.
- * b: a proposal that is multi protocols and multi transform, usually sent.
- * NOTE: this function is for initiator.
- * OUT
- *	0: equal
- *	1: not equal
- * XXX cannot understand the comment!
- */
-static int
-cmp_aproppair_i(a, b)
-	struct prop_pair *a, *b;
-{
-	struct prop_pair *p, *q, *r;
-	int len;
-
-	for (p = a, q = b; p && q; p = p->next, q = q->next) {
-		for (r = q; r; r = r->tnext) {
-			/* compare trns */
-			if (p->trns->t_no == r->trns->t_no)
-				break;
-		}
-		if (!r) {
-			/* no suitable transform found */
-			plog(LLV_ERROR, LOCATION, NULL,
-				"no suitable transform found.\n");
-			return -1;
-		}
-
-		/* compare prop */
-		if (p->prop->p_no != r->prop->p_no) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				"proposal #%d mismatched, "
-				"expected #%d.\n",
-				r->prop->p_no, p->prop->p_no);
-			/*FALLTHROUGH*/
-		}
-
-		if (p->prop->proto_id != r->prop->proto_id) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"proto_id mismathed: my:%d peer:%d\n",
-				r->prop->proto_id, p->prop->proto_id);
-			return -1;
-		}
-
-		if (p->prop->spi_size != r->prop->spi_size) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid spi size: %d.\n",
-				p->prop->spi_size);
-			return -1;
-		}
-
-		/* check #of transforms */
-		if (p->prop->num_t != 1) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				"#of transform is %d, "
-				"but expected 1.\n", p->prop->num_t);
-			/*FALLTHROUGH*/
-		}
-
-		if (p->trns->t_id != r->trns->t_id) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				"transform number has been modified.\n");
-			/*FALLTHROUGH*/
-		}
-		if (p->trns->reserved != r->trns->reserved) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				"reserved field should be zero.\n");
-			/*FALLTHROUGH*/
-		}
-
-		/* compare attribute */
-		len = ntohs(r->trns->h.len) - sizeof(*p->trns);
-		if (memcmp(p->trns + 1, r->trns + 1, len) != 0) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				"attribute has been modified.\n");
-			/*FALLTHROUGH*/
-		}
-	}
-	if ((p && !q) || (!p && q)) {
-		/* # of protocols mismatched */
-		plog(LLV_ERROR, LOCATION, NULL,
-			"#of protocols mismatched.\n");
-		return -1;
-	}
-
-	return 0;
-}
-
-/*
- * acceptable check for policy configuration.
- * return a new SA payload to be reply to peer.
- */
-static struct prop_pair *
-get_ph2approval(iph2, pair)
-	struct ph2handle *iph2;
-	struct prop_pair **pair;
-{
-	struct prop_pair *ret;
-	int i;
-
-	iph2->approval = NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"begin compare proposals.\n");
-
-	for (i = 0; i < MAXPROPPAIRLEN; i++) {
-		if (pair[i] == NULL)
-			continue;
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"pair[%d]: %p\n", i, pair[i]);
-		print_proppair(LLV_DEBUG, pair[i]);;
-
-		/* compare proposal and select one */
-		ret = get_ph2approvalx(iph2, pair[i]);
-		if (ret != NULL) {
-			/* found */
-			return ret;
-		}
-	}
-
-	plog(LLV_ERROR, LOCATION, NULL, "no suitable policy found.\n");
-
-	return NULL;
-}
-
-/*
- * compare my proposal and peers just one proposal.
- * set a approval.
- */
-static struct prop_pair *
-get_ph2approvalx(iph2, pp)
-	struct ph2handle *iph2;
-	struct prop_pair *pp;
-{
-	struct prop_pair *ret = NULL;
-	struct saprop *pr0, *pr = NULL;
-	struct saprop *q1, *q2;
-
-	pr0 = aproppair2saprop(pp);
-	if (pr0 == NULL)
-		return NULL;
-
-	for (q1 = pr0; q1; q1 = q1->next) {
-		for (q2 = iph2->proposal; q2; q2 = q2->next) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"peer's single bundle:\n");
-			printsaprop0(LLV_DEBUG, q1);
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"my single bundle:\n");
-			printsaprop0(LLV_DEBUG, q2);
-
-			pr = cmpsaprop_alloc(iph2->ph1, q1, q2, iph2->side);
-			if (pr != NULL)
-				goto found;
-
-			plog(LLV_ERROR, LOCATION, NULL,
-				"not matched\n");
-		}
-	}
-	/* no proposal matching */
-err:
-	flushsaprop(pr0);
-	return NULL;
-
-found:
-	flushsaprop(pr0);
-	plog(LLV_DEBUG, LOCATION, NULL, "matched\n");
-	iph2->approval = pr;
-
-    {
-	struct saproto *sp;
-	struct prop_pair *p, *x;
-	struct prop_pair *n = NULL;
-
-	ret = NULL;
-
-	for (p = pp; p; p = p->next) {
-		/*
-		 * find a proposal with matching proto_id.
-		 * we have analyzed validity already, in cmpsaprop_alloc().
-		 */
-		for (sp = pr->head; sp; sp = sp->next) {
-			if (sp->proto_id == p->prop->proto_id)
-				break;
-		}
-		if (!sp)
-			goto err;
-		if (sp->head->next)
-			goto err;	/* XXX */
-
-		for (x = p; x; x = x->tnext)
-			if (sp->head->trns_no == x->trns->t_no)
-				break;
-		if (!x)
-			goto err;	/* XXX */
-
-		n = racoon_calloc(1, sizeof(struct prop_pair));
-		if (n == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get buffer.\n");
-			goto err;
-		}
-
-		n->prop = x->prop;
-		n->trns = x->trns;
-
-		/* need to preserve the order */
-		for (x = ret; x && x->next; x = x->next)
-			;
-		if (x && x->prop == n->prop) {
-			for (/*nothing*/; x && x->tnext; x = x->tnext)
-				;
-			x->tnext = n;
-		} else {
-			if (x)
-				x->next = n;
-			else {
-				ret = n;
-			}
-		}
-
-		/* #of transforms should be updated ? */
-	}
-    }
-
-	return ret;
-}
-
-void
-free_proppair(pair)
-	struct prop_pair **pair;
-{
-	int i;
-
-	for (i = 0; i < MAXPROPPAIRLEN; i++) {
-		free_proppair0(pair[i]);
-		pair[i] = NULL;
-	}
-	racoon_free(pair);
-}
-
-static void
-free_proppair0(pair)
-	struct prop_pair *pair;
-{
-	struct prop_pair *p, *q, *r, *s;
-
-	p = pair;
-	while (p) {
-		q = p->next;
-		r = p;
-		while (r) {
-			s = r->tnext;
-			racoon_free(r);
-			r = s;
-		}
-		p = q;
-	}
-}
-
-/*
- * get proposal pairs from SA payload.
- * tiny check for proposal payload.
- */
-struct prop_pair **
-get_proppair(sa, mode)
-	vchar_t *sa;
-	int mode;
-{
-	struct prop_pair **pair = NULL;
-	int num_p = 0;			/* number of proposal for use */
-	int tlen;
-	caddr_t bp;
-	int i;
-	struct ipsecdoi_sa_b *sab = (struct ipsecdoi_sa_b *)sa->v;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "total SA len=%zu\n", sa->l);
-	plogdump(LLV_DEBUG, sa->v, sa->l);
-
-	/* check SA payload size */
-	if (sa->l < sizeof(*sab)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid SA length = %zu.\n", sa->l);
-		goto bad;
-	}
-
-	/* check DOI */
-	if (check_doi(ntohl(sab->doi)) < 0)
-		goto bad;
-
-	/* check SITUATION */
-	if (check_situation(ntohl(sab->sit)) < 0)
-		goto bad;
-
-	pair = racoon_calloc(1, MAXPROPPAIRLEN * sizeof(*pair));
-	if (pair == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer.\n");
-		goto bad;
-	}
-#if defined(ANDROID_CHANGES)
-	memset(pair, 0, MAXPROPPAIRLEN * sizeof(*pair));
-#else
-	memset(pair, 0, sizeof(pair));
-#endif
-
-	bp = (caddr_t)(sab + 1);
-	tlen = sa->l - sizeof(*sab);
-
-    {
-	struct isakmp_pl_p *prop;
-	int proplen;
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-
-	pbuf = isakmp_parsewoh(ISAKMP_NPTYPE_P, (struct isakmp_gen *)bp, tlen);
-	if (pbuf == NULL)
-		goto bad;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-		/* check the value of next payload */
-		if (pa->type != ISAKMP_NPTYPE_P) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"Invalid payload type=%u\n", pa->type);
-			vfree(pbuf);
-			goto bad;
-		}
-
-		prop = (struct isakmp_pl_p *)pa->ptr;
-		proplen = pa->len;
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"proposal #%u len=%d\n", prop->p_no, proplen);
-
-		if (proplen == 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid proposal with length %d\n", proplen);
-			vfree(pbuf);
-			goto bad;
-		}
-
-		/* check Protocol ID */
-		if (!check_protocol[mode]) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"unsupported mode %d\n", mode);
-			continue;
-		}
-
-		if (check_protocol[mode](prop->proto_id) < 0)
-			continue;
-
-		/* check SPI length when IKE. */
-		if (check_spi_size(prop->proto_id, prop->spi_size) < 0)
-			continue;
-
-		/* get transform */
-		if (get_transform(prop, pair, &num_p) < 0) {
-			vfree(pbuf);
-			goto bad;
-		}
-	}
-	vfree(pbuf);
-	pbuf = NULL;
-    }
-
-    {
-	int notrans, nprop;
-	struct prop_pair *p, *q;
-
-	/* check for proposals with no transforms */
-	for (i = 0; i < MAXPROPPAIRLEN; i++) {
-		if (!pair[i])
-			continue;
-
-		plog(LLV_DEBUG, LOCATION, NULL, "pair %d:\n", i);
-		print_proppair(LLV_DEBUG, pair[i]);
-
-		notrans = nprop = 0;
-		for (p = pair[i]; p; p = p->next) {
-			if (p->trns == NULL) {
-				notrans++;
-				break;
-			}
-			for (q = p; q; q = q->tnext)
-				nprop++;
-		}
-
-#if 0
-		/*
-		 * XXX at this moment, we cannot accept proposal group
-		 * with multiple proposals.  this should be fixed.
-		 */
-		if (pair[i]->next) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				"proposal #%u ignored "
-				"(multiple proposal not supported)\n",
-				pair[i]->prop->p_no);
-			notrans++;
-		}
-#endif
-
-		if (notrans) {
-			for (p = pair[i]; p; p = q) {
-				q = p->next;
-				racoon_free(p);
-			}
-			pair[i] = NULL;
-			num_p--;
-		} else {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"proposal #%u: %d transform\n",
-				pair[i]->prop->p_no, nprop);
-		}
-	}
-    }
-
-	/* bark if no proposal is found. */
-	if (num_p <= 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no Proposal found.\n");
-		goto bad;
-	}
-
-	return pair;
-bad:
-	if (pair != NULL)
-		racoon_free(pair);
-	return NULL;
-}
-
-/*
- * check transform payload.
- * OUT:
- *	positive: return the pointer to the payload of valid transform.
- *	0	: No valid transform found.
- */
-static int
-get_transform(prop, pair, num_p)
-	struct isakmp_pl_p *prop;
-	struct prop_pair **pair;
-	int *num_p;
-{
-	int tlen; /* total length of all transform in a proposal */
-	caddr_t bp;
-	struct isakmp_pl_t *trns;
-	int trnslen;
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	struct prop_pair *p = NULL, *q;
-	int num_t;
-
-	bp = (caddr_t)prop + sizeof(struct isakmp_pl_p) + prop->spi_size;
-	tlen = ntohs(prop->h.len)
-		- (sizeof(struct isakmp_pl_p) + prop->spi_size);
-	pbuf = isakmp_parsewoh(ISAKMP_NPTYPE_T, (struct isakmp_gen *)bp, tlen);
-	if (pbuf == NULL)
-		return -1;
-
-	/* check and get transform for use */
-	num_t = 0;
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		num_t++;
-
-		/* check the value of next payload */
-		if (pa->type != ISAKMP_NPTYPE_T) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"Invalid payload type=%u\n", pa->type);
-			break;
-		}
-
-		trns = (struct isakmp_pl_t *)pa->ptr;
-		trnslen = pa->len;
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"transform #%u len=%u\n", trns->t_no, trnslen);
-
-		/* check transform ID */
-		if (prop->proto_id >= ARRAYLEN(check_transform)) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				"unsupported proto_id %u\n",
-				prop->proto_id);
-			continue;
-		}
-		if (prop->proto_id >= ARRAYLEN(check_attributes)) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				"unsupported proto_id %u\n",
-				prop->proto_id);
-			continue;
-		}
-
-		if (!check_transform[prop->proto_id]
-		 || !check_attributes[prop->proto_id]) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				"unsupported proto_id %u\n",
-				prop->proto_id);
-			continue;
-		}
-		if (check_transform[prop->proto_id](trns->t_id) < 0)
-			continue;
-
-		/* check data attributes */
-		if (check_attributes[prop->proto_id](trns) != 0)
-			continue;
-
-		p = racoon_calloc(1, sizeof(*p));
-		if (p == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get buffer.\n");
-			vfree(pbuf);
-			return -1;
-		}
-		p->prop = prop;
-		p->trns = trns;
-
-		/* need to preserve the order */
-		for (q = pair[prop->p_no]; q && q->next; q = q->next)
-			;
-		if (q && q->prop == p->prop) {
-			for (/*nothing*/; q && q->tnext; q = q->tnext)
-				;
-			q->tnext = p;
-		} else {
-			if (q)
-				q->next = p;
-			else {
-				pair[prop->p_no] = p;
-				(*num_p)++;
-			}
-		}
-	}
-
-	vfree(pbuf);
-
-	return 0;
-}
-
-/*
- * make a new SA payload from prop_pair.
- * NOTE: this function make spi value clear.
- */
-vchar_t *
-get_sabyproppair(pair, iph1)
-	struct prop_pair *pair;
-	struct ph1handle *iph1;
-{
-	vchar_t *newsa;
-	int newtlen;
-	u_int8_t *np_p = NULL;
-	struct prop_pair *p;
-	int prophlen, trnslen;
-	caddr_t bp;
-
-	newtlen = sizeof(struct ipsecdoi_sa_b);
-	for (p = pair; p; p = p->next) {
-		newtlen += sizeof(struct isakmp_pl_p);
-		newtlen += p->prop->spi_size;
-		newtlen += ntohs(p->trns->h.len);
-	}
-
-	newsa = vmalloc(newtlen);
-	if (newsa == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "failed to get newsa.\n");
-		return NULL;
-	}
-	bp = newsa->v;
-
-	((struct isakmp_gen *)bp)->len = htons(newtlen);
-
-	/* update some of values in SA header */
-	((struct ipsecdoi_sa_b *)bp)->doi = htonl(iph1->rmconf->doitype);
-	((struct ipsecdoi_sa_b *)bp)->sit = htonl(iph1->rmconf->sittype);
-	bp += sizeof(struct ipsecdoi_sa_b);
-
-	/* create proposal payloads */
-	for (p = pair; p; p = p->next) {
-		prophlen = sizeof(struct isakmp_pl_p)
-				+ p->prop->spi_size;
-		trnslen = ntohs(p->trns->h.len);
-
-		if (np_p)
-			*np_p = ISAKMP_NPTYPE_P;
-
-		/* create proposal */
-
-		memcpy(bp, p->prop, prophlen);
-		((struct isakmp_pl_p *)bp)->h.np = ISAKMP_NPTYPE_NONE;
-		((struct isakmp_pl_p *)bp)->h.len = htons(prophlen + trnslen);
-		((struct isakmp_pl_p *)bp)->num_t = 1;
-		np_p = &((struct isakmp_pl_p *)bp)->h.np;
-		memset(bp + sizeof(struct isakmp_pl_p), 0, p->prop->spi_size);
-		bp += prophlen;
-
-		/* create transform */
-		memcpy(bp, p->trns, trnslen);
-		((struct isakmp_pl_t *)bp)->h.np = ISAKMP_NPTYPE_NONE;
-		((struct isakmp_pl_t *)bp)->h.len = htons(trnslen);
-		bp += trnslen;
-	}
-
-	return newsa;
-}
-
-/*
- * update responder's spi
- */
-int
-ipsecdoi_updatespi(iph2)
-	struct ph2handle *iph2;
-{
-	struct prop_pair **pair, *p;
-	struct saprop *pp;
-	struct saproto *pr;
-	int i;
-	int error = -1;
-	u_int8_t *spi;
-
-	pair = get_proppair(iph2->sa_ret, IPSECDOI_TYPE_PH2);
-	if (pair == NULL)
-		return -1;
-	for (i = 0; i < MAXPROPPAIRLEN; i++) {
-		if (pair[i])
-			break;
-	}
-	if (i == MAXPROPPAIRLEN || pair[i]->tnext) {
-		/* multiple transform must be filtered by selectph2proposal.*/
-		goto end;
-	}
-
-	pp = iph2->approval;
-
-	/* create proposal payloads */
-	for (p = pair[i]; p; p = p->next) {
-		/*
-		 * find a proposal/transform with matching proto_id/t_id.
-		 * we have analyzed validity already, in cmpsaprop_alloc().
-		 */
-		for (pr = pp->head; pr; pr = pr->next) {
-			if (p->prop->proto_id == pr->proto_id &&
-			    p->trns->t_id == pr->head->trns_id) {
-				break;
-			}
-		}
-		if (!pr)
-			goto end;
-
-		/*
-		 * XXX SPI bits are left-filled, for use with IPComp.
-		 * we should be switching to variable-length spi field...
-		 */
-		spi = (u_int8_t *)&pr->spi;
-		spi += sizeof(pr->spi);
-		spi -= pr->spisize;
-		memcpy((caddr_t)p->prop + sizeof(*p->prop), spi, pr->spisize);
-	}
-
-	error = 0;
-end:
-	free_proppair(pair);
-	return error;
-}
-
-/*
- * make a new SA payload from prop_pair.
- */
-vchar_t *
-get_sabysaprop(pp0, sa0)
-	struct saprop *pp0;
-	vchar_t *sa0;
-{
-	struct prop_pair **pair = NULL;
-	vchar_t *newsa = NULL;
-	int newtlen;
-	u_int8_t *np_p = NULL;
-	struct prop_pair *p = NULL;
-	struct saprop *pp;
-	struct saproto *pr;
-	struct satrns *tr;
-	int prophlen, trnslen;
-	caddr_t bp;
-	int error = -1;
-
-	/* get proposal pair */
-	pair = get_proppair(sa0, IPSECDOI_TYPE_PH2);
-	if (pair == NULL)
-		goto out;
-
-	newtlen = sizeof(struct ipsecdoi_sa_b);
-	for (pp = pp0; pp; pp = pp->next) {
-
-		if (pair[pp->prop_no] == NULL)
-			goto out;
-
-		for (pr = pp->head; pr; pr = pr->next) {
-			newtlen += (sizeof(struct isakmp_pl_p)
-				+ pr->spisize);
-
-			for (tr = pr->head; tr; tr = tr->next) {
-				for (p = pair[pp->prop_no]; p; p = p->tnext) {
-					if (tr->trns_no == p->trns->t_no)
-						break;
-				}
-				if (p == NULL)
-					goto out;
-
-				newtlen += ntohs(p->trns->h.len);
-			}
-		}
-	}
-
-	newsa = vmalloc(newtlen);
-	if (newsa == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "failed to get newsa.\n");
-		goto out;
-	}
-	bp = newsa->v;
-
-	/* some of values of SA must be updated in the out of this function */
-	((struct isakmp_gen *)bp)->len = htons(newtlen);
-	bp += sizeof(struct ipsecdoi_sa_b);
-
-	/* create proposal payloads */
-	for (pp = pp0; pp; pp = pp->next) {
-
-		for (pr = pp->head; pr; pr = pr->next) {
-			prophlen = sizeof(struct isakmp_pl_p)
-					+ p->prop->spi_size;
-
-			for (tr = pr->head; tr; tr = tr->next) {
-				for (p = pair[pp->prop_no]; p; p = p->tnext) {
-					if (tr->trns_no == p->trns->t_no)
-						break;
-				}
-				if (p == NULL)
-					goto out;
-
-				trnslen = ntohs(p->trns->h.len);
-
-				if (np_p)
-					*np_p = ISAKMP_NPTYPE_P;
-
-				/* create proposal */
-
-				memcpy(bp, p->prop, prophlen);
-				((struct isakmp_pl_p *)bp)->h.np = ISAKMP_NPTYPE_NONE;
-				((struct isakmp_pl_p *)bp)->h.len = htons(prophlen + trnslen);
-				((struct isakmp_pl_p *)bp)->num_t = 1;
-				np_p = &((struct isakmp_pl_p *)bp)->h.np;
-				bp += prophlen;
-
-				/* create transform */
-				memcpy(bp, p->trns, trnslen);
-				((struct isakmp_pl_t *)bp)->h.np = ISAKMP_NPTYPE_NONE;
-				((struct isakmp_pl_t *)bp)->h.len = htons(trnslen);
-				bp += trnslen;
-			}
-		}
-	}
-
-	error = 0;
-out:
-	if (pair != NULL)
-		racoon_free(pair);
-
-	if (error != 0) {
-		if (newsa != NULL) {
-			vfree(newsa);
-			newsa = NULL;
-		}
-	}
-
-	return newsa;
-}
-
-/*
- * If some error happens then return 0.  Although 0 means that lifetime is zero,
- * such a value should not be accepted.
- * Also 0 of lifebyte should not be included in a packet although 0 means not
- * to care of it.
- */
-static u_int32_t
-ipsecdoi_set_ld(buf)
-	vchar_t *buf;
-{
-	u_int32_t ld;
-
-	if (buf == 0)
-		return 0;
-
-	switch (buf->l) {
-	case 2:
-		ld = ntohs(*(u_int16_t *)buf->v);
-		break;
-	case 4:
-		ld = ntohl(*(u_int32_t *)buf->v);
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"length %zu of life duration "
-			"isn't supported.\n", buf->l);
-		return 0;
-	}
-
-	return ld;
-}
-
-/*%%%*/
-/*
- * check DOI
- */
-static int
-check_doi(doi)
-	u_int32_t doi;
-{
-	switch (doi) {
-	case IPSEC_DOI:
-		return 0;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid value of DOI 0x%08x.\n", doi);
-		return -1;
-	}
-	/* NOT REACHED */
-}
-
-/*
- * check situation
- */
-static int
-check_situation(sit)
-	u_int32_t sit;
-{
-	switch (sit) {
-	case IPSECDOI_SIT_IDENTITY_ONLY:
-		return 0;
-
-	case IPSECDOI_SIT_SECRECY:
-	case IPSECDOI_SIT_INTEGRITY:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"situation 0x%08x unsupported yet.\n", sit);
-		return -1;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid situation 0x%08x.\n", sit);
-		return -1;
-	}
-	/* NOT REACHED */
-}
-
-/*
- * check protocol id in main mode
- */
-static int
-check_prot_main(proto_id)
-	int proto_id;
-{
-	switch (proto_id) {
-	case IPSECDOI_PROTO_ISAKMP:
-		return 0;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Illegal protocol id=%u.\n", proto_id);
-		return -1;
-	}
-	/* NOT REACHED */
-}
-
-/*
- * check protocol id in quick mode
- */
-static int
-check_prot_quick(proto_id)
-	int proto_id;
-{
-	switch (proto_id) {
-	case IPSECDOI_PROTO_IPSEC_AH:
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		return 0;
-
-	case IPSECDOI_PROTO_IPCOMP:
-		return 0;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid protocol id %d.\n", proto_id);
-		return -1;
-	}
-	/* NOT REACHED */
-}
-
-static int
-check_spi_size(proto_id, size)
-	int proto_id, size;
-{
-	switch (proto_id) {
-	case IPSECDOI_PROTO_ISAKMP:
-		if (size != 0) {
-			/* WARNING */
-			plog(LLV_WARNING, LOCATION, NULL,
-				"SPI size isn't zero, but IKE proposal.\n");
-		}
-		return 0;
-
-	case IPSECDOI_PROTO_IPSEC_AH:
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		if (size != 4) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid SPI size=%d for IPSEC proposal.\n",
-				size);
-			return -1;
-		}
-		return 0;
-
-	case IPSECDOI_PROTO_IPCOMP:
-		if (size != 2 && size != 4) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid SPI size=%d for IPCOMP proposal.\n",
-				size);
-			return -1;
-		}
-		return 0;
-
-	default:
-		/* ??? */
-		return -1;
-	}
-	/* NOT REACHED */
-}
-
-/*
- * check transform ID in ISAKMP.
- */
-static int
-check_trns_isakmp(t_id)
-	int t_id;
-{
-	switch (t_id) {
-	case IPSECDOI_KEY_IKE:
-		return 0;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid transform-id=%u in proto_id=%u.\n",
-			t_id, IPSECDOI_KEY_IKE);
-		return -1;
-	}
-	/* NOT REACHED */
-}
-
-/*
- * check transform ID in AH.
- */
-static int
-check_trns_ah(t_id)
-	int t_id;
-{
-	switch (t_id) {
-	case IPSECDOI_AH_MD5:
-	case IPSECDOI_AH_SHA:
-	case IPSECDOI_AH_SHA256:
-	case IPSECDOI_AH_SHA384:
-	case IPSECDOI_AH_SHA512:
-		return 0;
-	case IPSECDOI_AH_DES:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"not support transform-id=%u in AH.\n", t_id);
-		return -1;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid transform-id=%u in AH.\n", t_id);
-		return -1;
-	}
-	/* NOT REACHED */
-}
-
-/*
- * check transform ID in ESP.
- */
-static int
-check_trns_esp(t_id)
-	int t_id;
-{
-	switch (t_id) {
-	case IPSECDOI_ESP_DES:
-	case IPSECDOI_ESP_3DES:
-	case IPSECDOI_ESP_NULL:
-	case IPSECDOI_ESP_RC5:
-	case IPSECDOI_ESP_CAST:
-	case IPSECDOI_ESP_BLOWFISH:
-	case IPSECDOI_ESP_AES:
-	case IPSECDOI_ESP_TWOFISH:
-	case IPSECDOI_ESP_CAMELLIA:
-		return 0;
-	case IPSECDOI_ESP_DES_IV32:
-	case IPSECDOI_ESP_DES_IV64:
-	case IPSECDOI_ESP_IDEA:
-	case IPSECDOI_ESP_3IDEA:
-	case IPSECDOI_ESP_RC4:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"not support transform-id=%u in ESP.\n", t_id);
-		return -1;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid transform-id=%u in ESP.\n", t_id);
-		return -1;
-	}
-	/* NOT REACHED */
-}
-
-/*
- * check transform ID in IPCOMP.
- */
-static int
-check_trns_ipcomp(t_id)
-	int t_id;
-{
-	switch (t_id) {
-	case IPSECDOI_IPCOMP_OUI:
-	case IPSECDOI_IPCOMP_DEFLATE:
-	case IPSECDOI_IPCOMP_LZS:
-		return 0;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid transform-id=%u in IPCOMP.\n", t_id);
-		return -1;
-	}
-	/* NOT REACHED */
-}
-
-/*
- * check data attributes in IKE.
- */
-static int
-check_attr_isakmp(trns)
-	struct isakmp_pl_t *trns;
-{
-	struct isakmp_data *d;
-	int tlen;
-	int flag, type;
-	u_int16_t lorv;
-
-	tlen = ntohs(trns->h.len) - sizeof(struct isakmp_pl_t);
-	d = (struct isakmp_data *)((caddr_t)trns + sizeof(struct isakmp_pl_t));
-
-	while (tlen > 0) {
-		type = ntohs(d->type) & ~ISAKMP_GEN_MASK;
-		flag = ntohs(d->type) & ISAKMP_GEN_MASK;
-		lorv = ntohs(d->lorv);
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"type=%s, flag=0x%04x, lorv=%s\n",
-			s_oakley_attr(type), flag,
-			s_oakley_attr_v(type, lorv));
-
-		/*
-		 * some of the attributes must be encoded in TV.
-		 * see RFC2409 Appendix A "Attribute Classes".
-		 */
-		switch (type) {
-		case OAKLEY_ATTR_ENC_ALG:
-		case OAKLEY_ATTR_HASH_ALG:
-		case OAKLEY_ATTR_AUTH_METHOD:
-		case OAKLEY_ATTR_GRP_DESC:
-		case OAKLEY_ATTR_GRP_TYPE:
-		case OAKLEY_ATTR_SA_LD_TYPE:
-		case OAKLEY_ATTR_PRF:
-		case OAKLEY_ATTR_KEY_LEN:
-		case OAKLEY_ATTR_FIELD_SIZE:
-			if (!flag) {	/* TLV*/
-				plog(LLV_ERROR, LOCATION, NULL,
-					"oakley attribute %d must be TV.\n",
-					type);
-				return -1;
-			}
-			break;
-		}
-
-		/* sanity check for TLV.  length must be specified. */
-		if (!flag && lorv == 0) {	/*TLV*/
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid length %d for TLV attribute %d.\n",
-				lorv, type);
-			return -1;
-		}
-
-		switch (type) {
-		case OAKLEY_ATTR_ENC_ALG:
-			if (!alg_oakley_encdef_ok(lorv)) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalied encryption algorithm=%d.\n",
-					lorv);
-				return -1;
-			}
-			break;
-
-		case OAKLEY_ATTR_HASH_ALG:
-			if (!alg_oakley_hashdef_ok(lorv)) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalied hash algorithm=%d.\n",
-					lorv);
-				return -1;
-			}
-			break;
-
-		case OAKLEY_ATTR_AUTH_METHOD:
-			switch (lorv) {
-			case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-			case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-			case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-#if 0 /* Clashes with OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB */
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I:
-#endif
-#endif
-			case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-				break;
-			case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-#ifdef ENABLE_HYBRID
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-			case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-			case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-			case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-#endif
-			case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-			case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"auth method %s isn't supported.\n",
-					s_oakley_attr_method(lorv));
-				return -1;
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid auth method %d.\n",
-					lorv);
-				return -1;
-			}
-			break;
-
-		case OAKLEY_ATTR_GRP_DESC:
-			if (!alg_oakley_dhdef_ok(lorv)) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid DH group %d.\n",
-					lorv);
-				return -1;
-			}
-			break;
-
-		case OAKLEY_ATTR_GRP_TYPE:
-			switch (lorv) {
-			case OAKLEY_ATTR_GRP_TYPE_MODP:
-				break;
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"unsupported DH group type %d.\n",
-					lorv);
-				return -1;
-			}
-			break;
-
-		case OAKLEY_ATTR_GRP_PI:
-		case OAKLEY_ATTR_GRP_GEN_ONE:
-			/* sanity checks? */
-			break;
-
-		case OAKLEY_ATTR_GRP_GEN_TWO:
-		case OAKLEY_ATTR_GRP_CURVE_A:
-		case OAKLEY_ATTR_GRP_CURVE_B:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"attr type=%u isn't supported.\n", type);
-			return -1;
-
-		case OAKLEY_ATTR_SA_LD_TYPE:
-			switch (lorv) {
-			case OAKLEY_ATTR_SA_LD_TYPE_SEC:
-			case OAKLEY_ATTR_SA_LD_TYPE_KB:
-				break;
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid life type %d.\n", lorv);
-				return -1;
-			}
-			break;
-
-		case OAKLEY_ATTR_SA_LD:
-			/* should check the value */
-			break;
-
-		case OAKLEY_ATTR_PRF:
-		case OAKLEY_ATTR_KEY_LEN:
-			break;
-
-		case OAKLEY_ATTR_FIELD_SIZE:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"attr type=%u isn't supported.\n", type);
-			return -1;
-
-		case OAKLEY_ATTR_GRP_ORDER:
-			break;
-
-		case OAKLEY_ATTR_GSS_ID:
-			break;
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid attribute type %d.\n", type);
-			return -1;
-		}
-
-		if (flag) {
-			tlen -= sizeof(*d);
-			d = (struct isakmp_data *)((char *)d
-				+ sizeof(*d));
-		} else {
-			tlen -= (sizeof(*d) + lorv);
-			d = (struct isakmp_data *)((char *)d
-				+ sizeof(*d) + lorv);
-		}
-	}
-
-	return 0;
-}
-
-/*
- * check data attributes in IPSEC AH/ESP.
- */
-static int
-check_attr_ah(trns)
-	struct isakmp_pl_t *trns;
-{
-	return check_attr_ipsec(IPSECDOI_PROTO_IPSEC_AH, trns);
-}
-
-static int
-check_attr_esp(trns)
-	struct isakmp_pl_t *trns;
-{
-	return check_attr_ipsec(IPSECDOI_PROTO_IPSEC_ESP, trns);
-}
-
-static int
-check_attr_ipsec(proto_id, trns)
-	int proto_id;
-	struct isakmp_pl_t *trns;
-{
-	struct isakmp_data *d;
-	int tlen;
-	int flag, type = 0;
-	u_int16_t lorv;
-	int attrseen[16];	/* XXX magic number */
-
-	tlen = ntohs(trns->h.len) - sizeof(struct isakmp_pl_t);
-	d = (struct isakmp_data *)((caddr_t)trns + sizeof(struct isakmp_pl_t));
-	memset(attrseen, 0, sizeof(attrseen));
-
-	while (tlen > 0) {
-		type = ntohs(d->type) & ~ISAKMP_GEN_MASK;
-		flag = ntohs(d->type) & ISAKMP_GEN_MASK;
-		lorv = ntohs(d->lorv);
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"type=%s, flag=0x%04x, lorv=%s\n",
-			s_ipsecdoi_attr(type), flag,
-			s_ipsecdoi_attr_v(type, lorv));
-
-		if (type < sizeof(attrseen)/sizeof(attrseen[0]))
-			attrseen[type]++;
-
-		switch (type) {
-		case IPSECDOI_ATTR_ENC_MODE:
-			if (! flag) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"must be TV when ENC_MODE.\n");
-				return -1;
-			}
-
-			switch (lorv) {
-			case IPSECDOI_ATTR_ENC_MODE_TUNNEL:
-			case IPSECDOI_ATTR_ENC_MODE_TRNS:
-				break;
-#ifdef ENABLE_NATT
-			case IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_RFC:
-			case IPSECDOI_ATTR_ENC_MODE_UDPTRNS_RFC:
-			case IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_DRAFT:
-			case IPSECDOI_ATTR_ENC_MODE_UDPTRNS_DRAFT:
-				plog(LLV_DEBUG, LOCATION, NULL,
-				     "UDP encapsulation requested\n");
-				break;
-#endif
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid encryption mode=%u.\n",
-					lorv);
-				return -1;
-			}
-			break;
-
-		case IPSECDOI_ATTR_AUTH:
-			if (! flag) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"must be TV when AUTH.\n");
-				return -1;
-			}
-
-			switch (lorv) {
-			case IPSECDOI_ATTR_AUTH_HMAC_MD5:
-				if (proto_id == IPSECDOI_PROTO_IPSEC_AH &&
-				    trns->t_id != IPSECDOI_AH_MD5) {
-ahmismatch:
-					plog(LLV_ERROR, LOCATION, NULL,
-						"auth algorithm %u conflicts "
-						"with transform %u.\n",
-						lorv, trns->t_id);
-					return -1;
-				}
-				break;
-			case IPSECDOI_ATTR_AUTH_HMAC_SHA1:
-				if (proto_id == IPSECDOI_PROTO_IPSEC_AH) {
-					if (trns->t_id != IPSECDOI_AH_SHA)
-						goto ahmismatch;
-				}
-				break;
- 			case IPSECDOI_ATTR_AUTH_HMAC_SHA2_256:
- 				if (proto_id == IPSECDOI_PROTO_IPSEC_AH) {
- 					if (trns->t_id != IPSECDOI_AH_SHA256)
- 						goto ahmismatch;
- 				}	
- 				break;
- 			case IPSECDOI_ATTR_AUTH_HMAC_SHA2_384:
- 				if (proto_id == IPSECDOI_PROTO_IPSEC_AH) {
- 					if (trns->t_id != IPSECDOI_AH_SHA384)
- 						goto ahmismatch;
- 				}
- 				break;
- 			case IPSECDOI_ATTR_AUTH_HMAC_SHA2_512:
- 				if (proto_id == IPSECDOI_PROTO_IPSEC_AH) {
- 					if (trns->t_id != IPSECDOI_AH_SHA512)
- 					goto ahmismatch;
- 				}
- 				break;
-			case IPSECDOI_ATTR_AUTH_DES_MAC:
-			case IPSECDOI_ATTR_AUTH_KPDK:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"auth algorithm %u isn't supported.\n",
-					lorv);
-				return -1;
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid auth algorithm=%u.\n",
-					lorv);
-				return -1;
-			}
-			break;
-
-		case IPSECDOI_ATTR_SA_LD_TYPE:
-			if (! flag) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"must be TV when LD_TYPE.\n");
-				return -1;
-			}
-
-			switch (lorv) {
-			case IPSECDOI_ATTR_SA_LD_TYPE_SEC:
-			case IPSECDOI_ATTR_SA_LD_TYPE_KB:
-				break;
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid life type %d.\n", lorv);
-				return -1;
-			}
-			break;
-
-		case IPSECDOI_ATTR_SA_LD:
-			if (flag) {
-				/* i.e. ISAKMP_GEN_TV */
-				plog(LLV_DEBUG, LOCATION, NULL,
-					"life duration was in TLV.\n");
-			} else {
-				/* i.e. ISAKMP_GEN_TLV */
-				if (lorv == 0) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"invalid length of LD\n");
-					return -1;
-				}
-			}
-			break;
-
-		case IPSECDOI_ATTR_GRP_DESC:
-			if (! flag) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"must be TV when GRP_DESC.\n");
-				return -1;
-			}
-
-			if (!alg_oakley_dhdef_ok(lorv)) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid group description=%u.\n",
-					lorv);
-				return -1;
-			}
-			break;
-
-		case IPSECDOI_ATTR_KEY_LENGTH:
-			if (! flag) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"must be TV when KEY_LENGTH.\n");
-				return -1;
-			}
-			break;
-
-#ifdef HAVE_SECCTX
-		case IPSECDOI_ATTR_SECCTX:
-			if (flag) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"SECCTX must be in TLV.\n");
-				return -1;
-			}
-		break;
-#endif
-
-		case IPSECDOI_ATTR_KEY_ROUNDS:
-		case IPSECDOI_ATTR_COMP_DICT_SIZE:
-		case IPSECDOI_ATTR_COMP_PRIVALG:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"attr type=%u isn't supported.\n", type);
-			return -1;
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid attribute type %d.\n", type);
-			return -1;
-		}
-
-		if (flag) {
-			tlen -= sizeof(*d);
-			d = (struct isakmp_data *)((char *)d
-				+ sizeof(*d));
-		} else {
-			tlen -= (sizeof(*d) + lorv);
-			d = (struct isakmp_data *)((caddr_t)d
-				+ sizeof(*d) + lorv);
-		}
-	}
-
-	if (proto_id == IPSECDOI_PROTO_IPSEC_AH &&
-	    !attrseen[IPSECDOI_ATTR_AUTH]) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"attr AUTH must be present for AH.\n");
-		return -1;
-	}
-
-	if (proto_id == IPSECDOI_PROTO_IPSEC_ESP &&
-	    trns->t_id == IPSECDOI_ESP_NULL &&
-	    !attrseen[IPSECDOI_ATTR_AUTH]) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "attr AUTH must be present for ESP NULL encryption.\n");
-		return -1;
-	}
-
-	return 0;
-}
-
-static int
-check_attr_ipcomp(trns)
-	struct isakmp_pl_t *trns;
-{
-	struct isakmp_data *d;
-	int tlen;
-	int flag, type = 0;
-	u_int16_t lorv;
-	int attrseen[16];	/* XXX magic number */
-
-	tlen = ntohs(trns->h.len) - sizeof(struct isakmp_pl_t);
-	d = (struct isakmp_data *)((caddr_t)trns + sizeof(struct isakmp_pl_t));
-	memset(attrseen, 0, sizeof(attrseen));
-
-	while (tlen > 0) {
-		type = ntohs(d->type) & ~ISAKMP_GEN_MASK;
-		flag = ntohs(d->type) & ISAKMP_GEN_MASK;
-		lorv = ntohs(d->lorv);
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"type=%d, flag=0x%04x, lorv=0x%04x\n",
-			type, flag, lorv);
-
-		if (type < sizeof(attrseen)/sizeof(attrseen[0]))
-			attrseen[type]++;
-
-		switch (type) {
-		case IPSECDOI_ATTR_ENC_MODE:
-			if (! flag) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"must be TV when ENC_MODE.\n");
-				return -1;
-			}
-
-			switch (lorv) {
-			case IPSECDOI_ATTR_ENC_MODE_TUNNEL:
-			case IPSECDOI_ATTR_ENC_MODE_TRNS:
-				break;
-#ifdef ENABLE_NATT
-			case IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_RFC:
-			case IPSECDOI_ATTR_ENC_MODE_UDPTRNS_RFC:
-			case IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_DRAFT:
-			case IPSECDOI_ATTR_ENC_MODE_UDPTRNS_DRAFT:
-				plog(LLV_DEBUG, LOCATION, NULL,
-				     "UDP encapsulation requested\n");
-				break;
-#endif
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid encryption mode=%u.\n",
-					lorv);
-				return -1;
-			}
-			break;
-
-		case IPSECDOI_ATTR_SA_LD_TYPE:
-			if (! flag) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"must be TV when LD_TYPE.\n");
-				return -1;
-			}
-
-			switch (lorv) {
-			case IPSECDOI_ATTR_SA_LD_TYPE_SEC:
-			case IPSECDOI_ATTR_SA_LD_TYPE_KB:
-				break;
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid life type %d.\n", lorv);
-				return -1;
-			}
-			break;
-
-		case IPSECDOI_ATTR_SA_LD:
-			if (flag) {
-				/* i.e. ISAKMP_GEN_TV */
-				plog(LLV_DEBUG, LOCATION, NULL,
-					"life duration was in TLV.\n");
-			} else {
-				/* i.e. ISAKMP_GEN_TLV */
-				if (lorv == 0) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"invalid length of LD\n");
-					return -1;
-				}
-			}
-			break;
-
-		case IPSECDOI_ATTR_GRP_DESC:
-			if (! flag) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"must be TV when GRP_DESC.\n");
-				return -1;
-			}
-
-			if (!alg_oakley_dhdef_ok(lorv)) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid group description=%u.\n",
-					lorv);
-				return -1;
-			}
-			break;
-
-		case IPSECDOI_ATTR_AUTH:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid attr type=%u.\n", type);
-			return -1;
-
-		case IPSECDOI_ATTR_KEY_LENGTH:
-		case IPSECDOI_ATTR_KEY_ROUNDS:
-		case IPSECDOI_ATTR_COMP_DICT_SIZE:
-		case IPSECDOI_ATTR_COMP_PRIVALG:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"attr type=%u isn't supported.\n", type);
-			return -1;
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid attribute type %d.\n", type);
-			return -1;
-		}
-
-		if (flag) {
-			tlen -= sizeof(*d);
-			d = (struct isakmp_data *)((char *)d
-				+ sizeof(*d));
-		} else {
-			tlen -= (sizeof(*d) + lorv);
-			d = (struct isakmp_data *)((caddr_t)d
-				+ sizeof(*d) + lorv);
-		}
-	}
-
-#if 0
-	if (proto_id == IPSECDOI_PROTO_IPCOMP &&
-	    !attrseen[IPSECDOI_ATTR_AUTH]) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"attr AUTH must be present for AH.\n", type);
-		return -1;
-	}
-#endif
-
-	return 0;
-}
-
-/* %%% */
-/*
- * create phase1 proposal from remote configuration.
- * NOT INCLUDING isakmp general header of SA payload
- */
-vchar_t *
-ipsecdoi_setph1proposal(props)
-	struct isakmpsa *props;
-{
-	vchar_t *mysa;
-	int sablen;
-
-	/* count total size of SA minus isakmp general header */
-	/* not including isakmp general header of SA payload */
-	sablen = sizeof(struct ipsecdoi_sa_b);
-	sablen += setph1prop(props, NULL);
-
-	mysa = vmalloc(sablen);
-	if (mysa == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate my sa buffer\n");
-		return NULL;
-	}
-
-	/* create SA payload */
-	/* not including isakmp general header */
-	((struct ipsecdoi_sa_b *)mysa->v)->doi = htonl(props->rmconf->doitype);
-	((struct ipsecdoi_sa_b *)mysa->v)->sit = htonl(props->rmconf->sittype);
-
-	(void)setph1prop(props, mysa->v + sizeof(struct ipsecdoi_sa_b));
-
-	return mysa;
-}
-
-static int
-setph1prop(props, buf)
-	struct isakmpsa *props;
-	caddr_t buf;
-{
-	struct isakmp_pl_p *prop = NULL;
-	struct isakmpsa *s = NULL;
-	int proplen, trnslen;
-	u_int8_t *np_t; /* pointer next trns type in previous header */
-	int trns_num;
-	caddr_t p = buf;
-
-	proplen = sizeof(*prop);
-	if (buf) {
-		/* create proposal */
-		prop = (struct isakmp_pl_p *)p;
-		prop->h.np = ISAKMP_NPTYPE_NONE;
-		prop->p_no = props->prop_no;
-		prop->proto_id = IPSECDOI_PROTO_ISAKMP;
-		prop->spi_size = 0;
-		p += sizeof(*prop);
-	}
-
-	np_t = NULL;
-	trns_num = 0;
-
-	for (s = props; s != NULL; s = s->next) {
-		if (np_t)
-			*np_t = ISAKMP_NPTYPE_T;
-
-		trnslen = setph1trns(s, p);
-		proplen += trnslen;
-		if (buf) {
-			/* save buffer to pre-next payload */
-			np_t = &((struct isakmp_pl_t *)p)->h.np;
-			p += trnslen;
-
-			/* count up transform length */
-			trns_num++;
-		}
-	}
-
-	/* update proposal length */
-	if (buf) {
-		prop->h.len = htons(proplen);
-		prop->num_t = trns_num;
-	}
-
-	return proplen;
-}
-
-static int
-setph1trns(sa, buf)
-	struct isakmpsa *sa;
-	caddr_t buf;
-{
-	struct isakmp_pl_t *trns = NULL;
-	int trnslen, attrlen;
-	caddr_t p = buf;
-
-	trnslen = sizeof(*trns);
-	if (buf) {
-		/* create transform */
-		trns = (struct isakmp_pl_t *)p;
-		trns->h.np  = ISAKMP_NPTYPE_NONE;
-		trns->t_no  = sa->trns_no;
-		trns->t_id  = IPSECDOI_KEY_IKE;
-		p += sizeof(*trns);
-	}
-
-	attrlen = setph1attr(sa, p);
-	trnslen += attrlen;
-	if (buf)
-		p += attrlen;
-
-	if (buf)
-		trns->h.len = htons(trnslen);
-
-	return trnslen;
-}
-
-static int
-setph1attr(sa, buf)
-	struct isakmpsa *sa;
-	caddr_t buf;
-{
-	caddr_t p = buf;
-	int attrlen = 0;
-
-	if (sa->lifetime) {
-		u_int32_t lifetime = htonl((u_int32_t)sa->lifetime);
-
-		attrlen += sizeof(struct isakmp_data)
-			+ sizeof(struct isakmp_data);
-		if (sa->lifetime > 0xffff)
-			attrlen += sizeof(lifetime);
-		if (buf) {
-			p = isakmp_set_attr_l(p, OAKLEY_ATTR_SA_LD_TYPE,
-						OAKLEY_ATTR_SA_LD_TYPE_SEC);
-			if (sa->lifetime > 0xffff) {
-				p = isakmp_set_attr_v(p, OAKLEY_ATTR_SA_LD,
-						(caddr_t)&lifetime, 
-						sizeof(lifetime));
-			} else {
-				p = isakmp_set_attr_l(p, OAKLEY_ATTR_SA_LD,
-							sa->lifetime);
-			}
-		}
-	}
-
-	if (sa->lifebyte) {
-		u_int32_t lifebyte = htonl((u_int32_t)sa->lifebyte);
-		
-		attrlen += sizeof(struct isakmp_data)
-			+ sizeof(struct isakmp_data);
-		if (sa->lifebyte > 0xffff)
-			attrlen += sizeof(lifebyte);
-		if (buf) {
-			p = isakmp_set_attr_l(p, OAKLEY_ATTR_SA_LD_TYPE,
-						OAKLEY_ATTR_SA_LD_TYPE_KB);
-			if (sa->lifebyte > 0xffff) {
-				p = isakmp_set_attr_v(p, OAKLEY_ATTR_SA_LD,
-							(caddr_t)&lifebyte,
-							sizeof(lifebyte));
-			} else {
-				p = isakmp_set_attr_l(p, OAKLEY_ATTR_SA_LD,
-							sa->lifebyte);
-			}
-		}
-	}
-
-	if (sa->enctype) {
-		attrlen += sizeof(struct isakmp_data);
-		if (buf)
-			p = isakmp_set_attr_l(p, OAKLEY_ATTR_ENC_ALG, sa->enctype);
-	}
-	if (sa->encklen) {
-		attrlen += sizeof(struct isakmp_data);
-		if (buf)
-			p = isakmp_set_attr_l(p, OAKLEY_ATTR_KEY_LEN, sa->encklen);
-	}
-	if (sa->authmethod) {
-		int authmethod;
-
-#ifdef ENABLE_HYBRID
-		authmethod = switch_authmethod(sa->authmethod);
-#else
-		authmethod = sa->authmethod;
-#endif
-		attrlen += sizeof(struct isakmp_data);
-		if (buf)
-			p = isakmp_set_attr_l(p, OAKLEY_ATTR_AUTH_METHOD, authmethod);
-	}
-	if (sa->hashtype) {
-		attrlen += sizeof(struct isakmp_data);
-		if (buf)
-			p = isakmp_set_attr_l(p, OAKLEY_ATTR_HASH_ALG, sa->hashtype);
-	}
-	switch (sa->dh_group) {
-	case OAKLEY_ATTR_GRP_DESC_MODP768:
-	case OAKLEY_ATTR_GRP_DESC_MODP1024:
-	case OAKLEY_ATTR_GRP_DESC_MODP1536:
-	case OAKLEY_ATTR_GRP_DESC_MODP2048:
-	case OAKLEY_ATTR_GRP_DESC_MODP3072:
-	case OAKLEY_ATTR_GRP_DESC_MODP4096:
-	case OAKLEY_ATTR_GRP_DESC_MODP6144:
-	case OAKLEY_ATTR_GRP_DESC_MODP8192:
-		/* don't attach group type for known groups */
-		attrlen += sizeof(struct isakmp_data);
-		if (buf) {
-			p = isakmp_set_attr_l(p, OAKLEY_ATTR_GRP_DESC,
-				sa->dh_group);
-		}
-		break;
-	case OAKLEY_ATTR_GRP_DESC_EC2N155:
-	case OAKLEY_ATTR_GRP_DESC_EC2N185:
-		/* don't attach group type for known groups */
-		attrlen += sizeof(struct isakmp_data);
-		if (buf) {
-			p = isakmp_set_attr_l(p, OAKLEY_ATTR_GRP_TYPE,
-				OAKLEY_ATTR_GRP_TYPE_EC2N);
-		}
-		break;
-	case 0:
-	default:
-		break;
-	}
-
-#ifdef HAVE_GSSAPI
-	if (sa->authmethod == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB &&
-	    sa->gssid != NULL) {
-		attrlen += sizeof(struct isakmp_data);
-		/*
-		 * Older versions of racoon just placed the ISO-Latin-1
-		 * string on the wire directly.  Check to see if we are
-		 * configured to be compatible with this behavior.  Otherwise,
-		 * we encode the GSS ID as UTF-16LE for Windows 2000
-		 * compatibility, which requires twice the number of octets.
-		 */
-		if (lcconf->gss_id_enc == LC_GSSENC_LATIN1)
-			attrlen += sa->gssid->l;
-		else
-			attrlen += sa->gssid->l * 2;
-		if (buf) {
-			plog(LLV_DEBUG, LOCATION, NULL, "gss id attr: len %zu, "
-			    "val '%.*s'\n", sa->gssid->l, (int)sa->gssid->l,
-			    sa->gssid->v);
-			if (lcconf->gss_id_enc == LC_GSSENC_LATIN1) {
-				p = isakmp_set_attr_v(p, OAKLEY_ATTR_GSS_ID,
-					(caddr_t)sa->gssid->v,
-					sa->gssid->l);
-			} else {
-				size_t dstleft = sa->gssid->l * 2;
-				size_t srcleft = sa->gssid->l;
-				const char *src = (const char *)sa->gssid->v;
-				char *odst, *dst = racoon_malloc(dstleft);
-				iconv_t cd;
-				size_t rv;
-
-				cd = iconv_open("utf-16le", "latin1");
-				if (cd == (iconv_t) -1) {
-					plog(LLV_ERROR, LOCATION, NULL,
-					    "unable to initialize "
-					    "latin1 -> utf-16le "
-					    "converstion descriptor: %s\n",
-					    strerror(errno));
-					attrlen -= sa->gssid->l * 2;
-					goto gssid_done;
-				}
-				odst = dst;
-				rv = iconv(cd, (__iconv_const char **)&src, 
-				    &srcleft, &dst, &dstleft);
-				if (rv != 0) {
-					if (rv == -1) {
-						plog(LLV_ERROR, LOCATION, NULL,
-						    "unable to convert GSS ID "
-						    "from latin1 -> utf-16le: "
-						    "%s\n", strerror(errno));
-					} else {
-						/* should never happen */
-						plog(LLV_ERROR, LOCATION, NULL,
-						    "%zd character%s in GSS ID "
-						    "cannot be represented "
-						    "in utf-16le\n",
-						    rv, rv == 1 ? "" : "s");
-					}
-					(void) iconv_close(cd);
-					attrlen -= sa->gssid->l * 2;
-					goto gssid_done;
-				}
-				(void) iconv_close(cd);
-
-				/* XXX Check srcleft and dstleft? */
-
-				p = isakmp_set_attr_v(p, OAKLEY_ATTR_GSS_ID,
-					odst, sa->gssid->l * 2);
-
-				racoon_free(odst);
-			}
-		}
-	}
- gssid_done:
-#endif /* HAVE_GSSAPI */
-
-	return attrlen;
-}
-
-static vchar_t *
-setph2proposal0(iph2, pp, pr)
-	const struct ph2handle *iph2;
-	const struct saprop *pp;
-	const struct saproto *pr;
-{
-	vchar_t *p;
-	struct isakmp_pl_p *prop;
-	struct isakmp_pl_t *trns;
-	struct satrns *tr;
-	int attrlen;
-	size_t trnsoff;
-	caddr_t x0, x;
-	u_int8_t *np_t; /* pointer next trns type in previous header */
-	const u_int8_t *spi;
-#ifdef HAVE_SECCTX
-	int truectxlen = 0;
-#endif
-
-	p = vmalloc(sizeof(*prop) + sizeof(pr->spi));
-	if (p == NULL)
-		return NULL;
-
-	/* create proposal */
-	prop = (struct isakmp_pl_p *)p->v;
-	prop->h.np = ISAKMP_NPTYPE_NONE;
-	prop->p_no = pp->prop_no;
-	prop->proto_id = pr->proto_id;
-	prop->num_t = 1;
-
-	spi = (const u_int8_t *)&pr->spi;
-	switch (pr->proto_id) {
-	case IPSECDOI_PROTO_IPCOMP:
-		/*
-		 * draft-shacham-ippcp-rfc2393bis-05.txt:
-		 * construct 16bit SPI (CPI).
-		 * XXX we may need to provide a configuration option to
-		 * generate 32bit SPI.  otherwise we cannot interoeprate
-		 * with nodes that uses 32bit SPI, in case we are initiator.
-		 */
-		prop->spi_size = sizeof(u_int16_t);
-		spi += sizeof(pr->spi) - sizeof(u_int16_t);
-		p->l -= sizeof(pr->spi);
-		p->l += sizeof(u_int16_t);
-		break;
-	default:
-		prop->spi_size = sizeof(pr->spi);
-		break;
-	}
-	memcpy(prop + 1, spi, prop->spi_size);
-
-	/* create transform */
-	trnsoff = sizeof(*prop) + prop->spi_size;
-	np_t = NULL;
-
-	for (tr = pr->head; tr; tr = tr->next) {
-	
-		switch (pr->proto_id) {
-		case IPSECDOI_PROTO_IPSEC_ESP:
-			/*
-			 * don't build a null encryption
-			 * with no authentication transform.
-			 */
-			if (tr->trns_id == IPSECDOI_ESP_NULL &&
-			    tr->authtype == IPSECDOI_ATTR_AUTH_NONE)
-				continue;
-			break;
-		}
-
-		if (np_t) {
-			*np_t = ISAKMP_NPTYPE_T;
-			prop->num_t++;
-		}
-
-		/* get attribute length */
-		attrlen = 0;
-		if (pp->lifetime) {
-			attrlen += sizeof(struct isakmp_data)
-				+ sizeof(struct isakmp_data);
-			if (pp->lifetime > 0xffff)
-				attrlen += sizeof(u_int32_t);
-		}
-		if (pp->lifebyte && pp->lifebyte != IPSECDOI_ATTR_SA_LD_KB_MAX) {
-			attrlen += sizeof(struct isakmp_data)
-				+ sizeof(struct isakmp_data);
-			if (pp->lifebyte > 0xffff)
-				attrlen += sizeof(u_int32_t);
-		}
-		attrlen += sizeof(struct isakmp_data);	/* enc mode */
-		if (tr->encklen)
-			attrlen += sizeof(struct isakmp_data);
-
-		switch (pr->proto_id) {
-		case IPSECDOI_PROTO_IPSEC_ESP:
-			/* non authentication mode ? */
-			if (tr->authtype != IPSECDOI_ATTR_AUTH_NONE)
-				attrlen += sizeof(struct isakmp_data);
-			break;
-		case IPSECDOI_PROTO_IPSEC_AH:
-			if (tr->authtype == IPSECDOI_ATTR_AUTH_NONE) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"no authentication algorithm found "
-					"but protocol is AH.\n");
-				vfree(p);
-				return NULL;
-			}
-			attrlen += sizeof(struct isakmp_data);
-			break;
-		case IPSECDOI_PROTO_IPCOMP:
-			break;
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid protocol: %d\n", pr->proto_id);
-			vfree(p);
-			return NULL;
-		}
-
-		if (alg_oakley_dhdef_ok(iph2->sainfo->pfs_group))
-			attrlen += sizeof(struct isakmp_data);
-
-#ifdef HAVE_SECCTX
-		/* ctx_str is defined as char ctx_str[MAX_CTXSTR_SIZ].
-		 * The string may be smaller than MAX_CTXSTR_SIZ.
-		 */
-		if (*pp->sctx.ctx_str) {
-			truectxlen = sizeof(struct security_ctx) -
-				     (MAX_CTXSTR_SIZE - pp->sctx.ctx_strlen);
-			attrlen += sizeof(struct isakmp_data) + truectxlen;
-		}
-#endif /* HAVE_SECCTX */
-
-		p = vrealloc(p, p->l + sizeof(*trns) + attrlen);
-		if (p == NULL)
-			return NULL;
-		prop = (struct isakmp_pl_p *)p->v;
-
-		/* set transform's values */
-		trns = (struct isakmp_pl_t *)(p->v + trnsoff);
-		trns->h.np  = ISAKMP_NPTYPE_NONE;
-		trns->t_no  = tr->trns_no;
-		trns->t_id  = tr->trns_id;
-
-		/* set attributes */
-		x = x0 = p->v + trnsoff + sizeof(*trns);
-
-		if (pp->lifetime) {
-			x = isakmp_set_attr_l(x, IPSECDOI_ATTR_SA_LD_TYPE,
-						IPSECDOI_ATTR_SA_LD_TYPE_SEC);
-			if (pp->lifetime > 0xffff) {
-				u_int32_t v = htonl((u_int32_t)pp->lifetime);
-				x = isakmp_set_attr_v(x, IPSECDOI_ATTR_SA_LD,
-							(caddr_t)&v, sizeof(v));
-			} else {
-				x = isakmp_set_attr_l(x, IPSECDOI_ATTR_SA_LD,
-							pp->lifetime);
-			}
-		}
-
-		if (pp->lifebyte && pp->lifebyte != IPSECDOI_ATTR_SA_LD_KB_MAX) {
-			x = isakmp_set_attr_l(x, IPSECDOI_ATTR_SA_LD_TYPE,
-						IPSECDOI_ATTR_SA_LD_TYPE_KB);
-			if (pp->lifebyte > 0xffff) {
-				u_int32_t v = htonl((u_int32_t)pp->lifebyte);
-				x = isakmp_set_attr_v(x, IPSECDOI_ATTR_SA_LD,
-							(caddr_t)&v, sizeof(v));
-			} else {
-				x = isakmp_set_attr_l(x, IPSECDOI_ATTR_SA_LD,
-							pp->lifebyte);
-			}
-		}
-
-		x = isakmp_set_attr_l(x, IPSECDOI_ATTR_ENC_MODE, pr->encmode);
-
-		if (tr->encklen)
-			x = isakmp_set_attr_l(x, IPSECDOI_ATTR_KEY_LENGTH, tr->encklen);
-
-		/* mandatory check has done above. */
-		if ((pr->proto_id == IPSECDOI_PROTO_IPSEC_ESP && tr->authtype != IPSECDOI_ATTR_AUTH_NONE)
-		 || pr->proto_id == IPSECDOI_PROTO_IPSEC_AH)
-			x = isakmp_set_attr_l(x, IPSECDOI_ATTR_AUTH, tr->authtype);
-
-		if (alg_oakley_dhdef_ok(iph2->sainfo->pfs_group))
-			x = isakmp_set_attr_l(x, IPSECDOI_ATTR_GRP_DESC,
-				iph2->sainfo->pfs_group);
-
-#ifdef HAVE_SECCTX
-		if (*pp->sctx.ctx_str) {
-			struct security_ctx secctx;
-			secctx = pp->sctx;
-			secctx.ctx_strlen = htons(pp->sctx.ctx_strlen);
-			x = isakmp_set_attr_v(x, IPSECDOI_ATTR_SECCTX,
-					     (caddr_t)&secctx, truectxlen);
-		}
-#endif
-		/* update length of this transform. */
-		trns = (struct isakmp_pl_t *)(p->v + trnsoff);
-		trns->h.len = htons(sizeof(*trns) + attrlen);
-
-		/* save buffer to pre-next payload */
-		np_t = &trns->h.np;
-
-		trnsoff += (sizeof(*trns) + attrlen);
-	}
-
-	if (np_t == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no suitable proposal was created.\n");
-		return NULL;
-	}
-
-	/* update length of this protocol. */
-	prop->h.len = htons(p->l);
-
-	return p;
-}
-
-/*
- * create phase2 proposal from policy configuration.
- * NOT INCLUDING isakmp general header of SA payload.
- * This function is called by initiator only.
- */
-int
-ipsecdoi_setph2proposal(iph2)
-	struct ph2handle *iph2;
-{
-	struct saprop *proposal, *a;
-	struct saproto *b = NULL;
-	vchar_t *q;
-	struct ipsecdoi_sa_b *sab;
-	struct isakmp_pl_p *prop;
-	size_t propoff;	/* for previous field of type of next payload. */
-
-	proposal = iph2->proposal;
-
-	iph2->sa = vmalloc(sizeof(*sab));
-	if (iph2->sa == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate my sa buffer\n");
-		return -1;
-	}
-
-	/* create SA payload */
-	sab = (struct ipsecdoi_sa_b *)iph2->sa->v;
-	sab->doi = htonl(IPSEC_DOI);
-	sab->sit = htonl(IPSECDOI_SIT_IDENTITY_ONLY);	/* XXX configurable ? */
-
-	prop = NULL;
-	propoff = 0;
-	for (a = proposal; a; a = a->next) {
-		for (b = a->head; b; b = b->next) {
-#ifdef ENABLE_NATT
-			if (iph2->ph1->natt_flags & NAT_DETECTED) {
-			  int udp_diff = iph2->ph1->natt_options->mode_udp_diff;
-			  plog (LLV_INFO, LOCATION, NULL,
-				"NAT detected -> UDP encapsulation "
-				"(ENC_MODE %d->%d).\n",
-				b->encmode,
-				b->encmode+udp_diff);
-			  /* Tunnel -> UDP-Tunnel, Transport -> UDP_Transport */
-			  b->encmode += udp_diff;
-			  b->udp_encap = 1;
-			}
-#endif
-
-			q = setph2proposal0(iph2, a, b);
-			if (q == NULL) {
-				VPTRINIT(iph2->sa);
-				return -1;
-			}
-
-			iph2->sa = vrealloc(iph2->sa, iph2->sa->l + q->l);
-			if (iph2->sa == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to allocate my sa buffer\n");
-				if (q)
-					vfree(q);
-				return -1;
-			}
-			memcpy(iph2->sa->v + iph2->sa->l - q->l, q->v, q->l);
-			if (propoff != 0) {
-				prop = (struct isakmp_pl_p *)(iph2->sa->v +
-					propoff);
-				prop->h.np = ISAKMP_NPTYPE_P;
-			}
-			propoff = iph2->sa->l - q->l;
-
-			vfree(q);
-		}
-	}
-
-	return 0;
-}
-
-/*
- * return 1 if all of the given protocols are transport mode.
- */
-int
-ipsecdoi_transportmode(pp)
-	struct saprop *pp;
-{
-	struct saproto *pr = NULL;
-
-	for (; pp; pp = pp->next) {
-		for (pr = pp->head; pr; pr = pr->next) {
-			if (pr->encmode != IPSECDOI_ATTR_ENC_MODE_TRNS)
-				return 0;
-		}
-	}
-
-	return 1;
-}
-
-int
-ipsecdoi_get_defaultlifetime()
-{
-	return IPSECDOI_ATTR_SA_LD_SEC_DEFAULT;
-}
-
-int
-ipsecdoi_checkalgtypes(proto_id, enc, auth, comp)
-	int proto_id, enc, auth, comp;
-{
-#define TMPALGTYPE2STR(n) s_algtype(algclass_ipsec_##n, n)
-	switch (proto_id) {
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		if (enc == 0 || comp != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"illegal algorithm defined "
-				"ESP enc=%s auth=%s comp=%s.\n",
-				TMPALGTYPE2STR(enc),
-				TMPALGTYPE2STR(auth),
-				TMPALGTYPE2STR(comp));
-			return -1;
-		}
-		break;
-	case IPSECDOI_PROTO_IPSEC_AH:
-		if (enc != 0 || auth == 0 || comp != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"illegal algorithm defined "
-				"AH enc=%s auth=%s comp=%s.\n",
-				TMPALGTYPE2STR(enc),
-				TMPALGTYPE2STR(auth),
-				TMPALGTYPE2STR(comp));
-			return -1;
-		}
-		break;
-	case IPSECDOI_PROTO_IPCOMP:
-		if (enc != 0 || auth != 0 || comp == 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"illegal algorithm defined "
-				"IPcomp enc=%s auth=%s comp=%s.\n",
-				TMPALGTYPE2STR(enc),
-				TMPALGTYPE2STR(auth),
-				TMPALGTYPE2STR(comp));
-			return -1;
-		}
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid ipsec protocol %d\n", proto_id);
-		return -1;
-	}
-#undef TMPALGTYPE2STR
-	return 0;
-}
-
-int
-ipproto2doi(proto)
-	int proto;
-{
-	switch (proto) {
-	case IPPROTO_AH:
-		return IPSECDOI_PROTO_IPSEC_AH;
-	case IPPROTO_ESP:
-		return IPSECDOI_PROTO_IPSEC_ESP;
-	case IPPROTO_IPCOMP:
-		return IPSECDOI_PROTO_IPCOMP;
-	}
-	return -1;	/* XXX */
-}
-
-int
-doi2ipproto(proto)
-	int proto;
-{
-	switch (proto) {
-	case IPSECDOI_PROTO_IPSEC_AH:
-		return IPPROTO_AH;
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		return IPPROTO_ESP;
-	case IPSECDOI_PROTO_IPCOMP:
-		return IPPROTO_IPCOMP;
-	}
-	return -1;	/* XXX */
-}
-
-/*
- * Check if a subnet id is valid for comparison
- * with an address id ( address length mask )
- * and compare them
- * Return value
- * =  0 for match
- * =  1 for mismatch
- */
-
-int
-ipsecdoi_subnetisaddr_v4( subnet, address )
-	const vchar_t *subnet;
-	const vchar_t *address;
-{
-	struct in_addr *mask;
-
-	if (address->l != sizeof(struct in_addr))
-		return 1;
-
-	if (subnet->l != (sizeof(struct in_addr)*2))
-		return 1;
-
-	mask = (struct in_addr*)(subnet->v + sizeof(struct in_addr));
-
-	if (mask->s_addr!=0xffffffff)
-		return 1;
-
-	return memcmp(subnet->v,address->v,address->l);
-}
-
-#ifdef INET6
-
-int
-ipsecdoi_subnetisaddr_v6( subnet, address )
-	const vchar_t *subnet;
-	const vchar_t *address;
-{
-	struct in6_addr *mask;
-	int i;
-
-	if (address->l != sizeof(struct in6_addr))
-		return 1;
-
-	if (subnet->l != (sizeof(struct in6_addr)*2))
-		return 1;
-
-	mask = (struct in6_addr*)(subnet->v + sizeof(struct in6_addr));
-
-	for (i=0; i<16; i++)
-		if(mask->s6_addr[i]!=0xff)
-			return 1;
-
-	return memcmp(subnet->v,address->v,address->l);
-}
-
-#endif
-
-/*
- * Check and Compare two IDs
- * - specify 0 for exact if wildcards are allowed
- * Return value
- * =  0 for match
- * =  1 for misatch
- * = -1 for integrity error
- */
-
-int
-ipsecdoi_chkcmpids( idt, ids, exact )
-	const vchar_t *idt; /* id cmp target */
-	const vchar_t *ids; /* id cmp source */
-	int exact;
-{
-	struct ipsecdoi_id_b *id_bt;
-	struct ipsecdoi_id_b *id_bs;
-	vchar_t ident_t;
-	vchar_t ident_s;
-	int result;
-
-	/* handle wildcard IDs */
-
-	if (idt == NULL || ids == NULL)
-	{
-		if( !exact )
-		{
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"check and compare ids : values matched (ANONYMOUS)\n" );
-			return 0;
-		}
-		else
-		{
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"check and compare ids : value mismatch (ANONYMOUS)\n" );
-			return -1;
-		}
-	}
-
-	/* make sure the ids are of the same type */
-
-	id_bt = (struct ipsecdoi_id_b *) idt->v;
-	id_bs = (struct ipsecdoi_id_b *) ids->v;
-
-	ident_t.v = idt->v + sizeof(*id_bt);
-	ident_t.l = idt->l - sizeof(*id_bt);
-	ident_s.v = ids->v + sizeof(*id_bs);
-	ident_s.l = ids->l - sizeof(*id_bs);
-
-	if (id_bs->type != id_bt->type)
-	{
-		/*
-		 * special exception for comparing
-                 * address to subnet id types when
-                 * the netmask is address length
-                 */
-
-		if ((id_bs->type == IPSECDOI_ID_IPV4_ADDR)&&
-		    (id_bt->type == IPSECDOI_ID_IPV4_ADDR_SUBNET)) {
-			result = ipsecdoi_subnetisaddr_v4(&ident_t,&ident_s);
-			goto cmpid_result;
-		}
-
-		if ((id_bs->type == IPSECDOI_ID_IPV4_ADDR_SUBNET)&&
-		    (id_bt->type == IPSECDOI_ID_IPV4_ADDR)) {
-			result = ipsecdoi_subnetisaddr_v4(&ident_s,&ident_t);
-			goto cmpid_result;
-		}
-
-#ifdef INET6
-		if ((id_bs->type == IPSECDOI_ID_IPV6_ADDR)&&
-		    (id_bt->type == IPSECDOI_ID_IPV6_ADDR_SUBNET)) {
-			result = ipsecdoi_subnetisaddr_v6(&ident_t,&ident_s);
-			goto cmpid_result;
-		}
-
-		if ((id_bs->type == IPSECDOI_ID_IPV6_ADDR_SUBNET)&&
-		    (id_bt->type == IPSECDOI_ID_IPV6_ADDR)) {
-			result = ipsecdoi_subnetisaddr_v6(&ident_s,&ident_t);
-			goto cmpid_result;
-		}
-#endif
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"check and compare ids : id type mismatch %s != %s\n",
-			s_ipsecdoi_ident(id_bs->type),
-			s_ipsecdoi_ident(id_bt->type));
-
-		return 1;
-	}
-
-	if(id_bs->proto_id != id_bt->proto_id){
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"check and compare ids : proto_id mismatch %d != %d\n",
-			id_bs->proto_id, id_bt->proto_id);
-
-		return 1;
-	}
-
-	/* compare the ID data. */
-
-	switch (id_bt->type) {
-	        case IPSECDOI_ID_DER_ASN1_DN:
-        	case IPSECDOI_ID_DER_ASN1_GN:
-			/* compare asn1 ids */
-			result = eay_cmp_asn1dn(&ident_t, &ident_s);
-			goto cmpid_result;
-
-		case IPSECDOI_ID_IPV4_ADDR:
-			/* validate lengths */
-			if ((ident_t.l != sizeof(struct in_addr))||
-			    (ident_s.l != sizeof(struct in_addr)))
-				goto cmpid_invalid;
-			break;
-
-		case IPSECDOI_ID_IPV4_ADDR_SUBNET:
-		case IPSECDOI_ID_IPV4_ADDR_RANGE:
-			/* validate lengths */
-			if ((ident_t.l != (sizeof(struct in_addr)*2))||
-			    (ident_s.l != (sizeof(struct in_addr)*2)))
-				goto cmpid_invalid;
-			break;
-
-#ifdef INET6
-		case IPSECDOI_ID_IPV6_ADDR:
-			/* validate lengths */
-			if ((ident_t.l != sizeof(struct in6_addr))||
-			    (ident_s.l != sizeof(struct in6_addr)))
-				goto cmpid_invalid;
-			break;
-
-		case IPSECDOI_ID_IPV6_ADDR_SUBNET:
-		case IPSECDOI_ID_IPV6_ADDR_RANGE:
-			/* validate lengths */
-			if ((ident_t.l != (sizeof(struct in6_addr)*2))||
-			    (ident_s.l != (sizeof(struct in6_addr)*2)))
-				goto cmpid_invalid;
-			break;
-#endif
-		case IPSECDOI_ID_FQDN:
-		case IPSECDOI_ID_USER_FQDN:
-		case IPSECDOI_ID_KEY_ID:
-			break;
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"Unhandled id type %i specified for comparison\n",
-				id_bt->type);
-			return -1;
-	}
-
-	/* validate matching data and length */
-	if (ident_t.l == ident_s.l)
-		result = memcmp(ident_t.v,ident_s.v,ident_t.l);
-	else
-		result = 1;
-
-cmpid_result:
-
-	/* debug level output */
-	if(loglevel >= LLV_DEBUG) {
-		char *idstrt = ipsecdoi_id2str(idt);
-		char *idstrs = ipsecdoi_id2str(ids);
-
-		if (!result)
-	 		plog(LLV_DEBUG, LOCATION, NULL,
-				"check and compare ids : values matched (%s)\n",
-				 s_ipsecdoi_ident(id_bs->type) );
-		else
- 			plog(LLV_DEBUG, LOCATION, NULL,
-				"check and compare ids : value mismatch (%s)\n",
-				 s_ipsecdoi_ident(id_bs->type));
-
-		plog(LLV_DEBUG, LOCATION, NULL, "cmpid target: \'%s\'\n", idstrt );
-		plog(LLV_DEBUG, LOCATION, NULL, "cmpid source: \'%s\'\n", idstrs );
-
-		racoon_free(idstrs);
-		racoon_free(idstrt);
-	}
-
-	/* return result */
-	if( !result )
-		return 0;
-	else
-		return 1;
-
-cmpid_invalid:
-
-	/* id integrity error */
-	plog(LLV_DEBUG, LOCATION, NULL, "check and compare ids : %s integrity error\n",
-		s_ipsecdoi_ident(id_bs->type));
-	plog(LLV_DEBUG, LOCATION, NULL, "cmpid target: length = \'%zu\'\n", ident_t.l );
-	plog(LLV_DEBUG, LOCATION, NULL, "cmpid source: length = \'%zu\'\n", ident_s.l );
-
-	return -1;
-}
-
-/*
- * check the following:
- * - In main mode with pre-shared key, only address type can be used.
- * - if proper type for phase 1 ?
- * - if phase 1 ID payload conformed RFC2407 4.6.2.
- *   (proto, port) must be (0, 0), (udp, 500) or (udp, [specified]).
- * - if ID payload sent from peer is equal to the ID expected by me.
- *
- * both of "id" and "id_p" should be ID payload without general header,
- */
-int
-ipsecdoi_checkid1(iph1)
-	struct ph1handle *iph1;
-{
-	struct ipsecdoi_id_b *id_b;
-	struct sockaddr *sa;
-	caddr_t sa1, sa2;
-
-	if (iph1->id_p == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid iph1 passed id_p == NULL\n");
-		return ISAKMP_INTERNAL_ERROR;
-	}
-	if (iph1->id_p->l < sizeof(*id_b)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid value passed as \"ident\" (len=%lu)\n",
-			(u_long)iph1->id_p->l);
-		return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-	}
-
-	id_b = (struct ipsecdoi_id_b *)iph1->id_p->v;
-
-#ifndef ANDROID_PATCHED
-	/* In main mode with pre-shared key, only address type can be used. */
-	if (iph1->etype == ISAKMP_ETYPE_IDENT &&
-	    iph1->approval->authmethod == OAKLEY_ATTR_AUTH_METHOD_PSKEY) {
-		 if (id_b->type != IPSECDOI_ID_IPV4_ADDR
-		  && id_b->type != IPSECDOI_ID_IPV6_ADDR) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"Expecting IP address type in main mode, "
-				"but %s.\n", s_ipsecdoi_ident(id_b->type));
-			return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-		}
-	}
-#endif
-
-	/* if proper type for phase 1 ? */
-	switch (id_b->type) {
-	case IPSECDOI_ID_IPV4_ADDR_SUBNET:
-	case IPSECDOI_ID_IPV6_ADDR_SUBNET:
-	case IPSECDOI_ID_IPV4_ADDR_RANGE:
-	case IPSECDOI_ID_IPV6_ADDR_RANGE:
-		plog(LLV_WARNING, LOCATION, NULL,
-			"such ID type %s is not proper.\n",
-			s_ipsecdoi_ident(id_b->type));
-		/*FALLTHROUGH*/
-	}
-
-	/* if phase 1 ID payload conformed RFC2407 4.6.2. */
-	if (id_b->type == IPSECDOI_ID_IPV4_ADDR ||
-	    id_b->type == IPSECDOI_ID_IPV6_ADDR) {
-
-		if (id_b->proto_id == 0 && ntohs(id_b->port) != 0) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				"protocol ID and Port mismatched. "
-				"proto_id:%d port:%d\n",
-				id_b->proto_id, ntohs(id_b->port));
-			/*FALLTHROUGH*/
-
-		} else if (id_b->proto_id == IPPROTO_UDP) {
-			/*
-			 * copmaring with expecting port.
-			 * always permit if port is equal to PORT_ISAKMP
-			 */
-			if (ntohs(id_b->port) != PORT_ISAKMP) {
-				u_int16_t port;
-
-				port = extract_port(iph1->remote);
-				if (ntohs(id_b->port) != port) {
-					plog(LLV_WARNING, LOCATION, NULL,
-						"port %d expected, but %d\n",
-						port, ntohs(id_b->port));
-					/*FALLTHROUGH*/
-				}
-			}
-		}
-	}
-
-	/* compare with the ID if specified. */
-	if (genlist_next(iph1->rmconf->idvl_p, 0)) {
-		vchar_t *ident0 = NULL;
-		vchar_t ident;
-		struct idspec *id;
-		struct genlist_entry *gpb;
-
-		for (id = genlist_next (iph1->rmconf->idvl_p, &gpb); id; id = genlist_next (0, &gpb)) {
-			/* check the type of both IDs */
-			if (id->idtype != doi2idtype(id_b->type))
-				continue;  /* ID type mismatch */
-			if (id->id == 0)
-				goto matched;
-
-			/* compare defined ID with the ID sent by peer. */
-			if (ident0 != NULL)
-				vfree(ident0);
-			ident0 = getidval(id->idtype, id->id);
-
-			switch (id->idtype) {
-			case IDTYPE_ASN1DN:
-				ident.v = iph1->id_p->v + sizeof(*id_b);
-				ident.l = iph1->id_p->l - sizeof(*id_b);
-				if (eay_cmp_asn1dn(ident0, &ident) == 0)
-					goto matched;
-				break;
-			case IDTYPE_ADDRESS:
-				sa = (struct sockaddr *)ident0->v;
-				sa2 = (caddr_t)(id_b + 1);
-				switch (sa->sa_family) {
-				case AF_INET:
-					if (iph1->id_p->l - sizeof(*id_b) != sizeof(struct in_addr))
-						continue;  /* ID value mismatch */
-					sa1 = (caddr_t)&((struct sockaddr_in *)sa)->sin_addr;
-					if (memcmp(sa1, sa2, sizeof(struct in_addr)) == 0)
-						goto matched;
-					break;
-#ifdef INET6
-				case AF_INET6:
-					if (iph1->id_p->l - sizeof(*id_b) != sizeof(struct in6_addr))
-						continue;  /* ID value mismatch */
-					sa1 = (caddr_t)&((struct sockaddr_in6 *)sa)->sin6_addr;
-					if (memcmp(sa1, sa2, sizeof(struct in6_addr)) == 0)
-						goto matched;
-					break;
-#endif
-				default:
-					break;
-				}
-				break;
-			default:
-				if (memcmp(ident0->v, id_b + 1, ident0->l) == 0)
-					goto matched;
-				break;
-			}
-		}
-		if (ident0 != NULL) {
-			vfree(ident0);
-			ident0 = NULL;
-		}
-		plog(LLV_WARNING, LOCATION, NULL, "No ID match.\n");
-		if (iph1->rmconf->verify_identifier)
-			return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-matched: /* ID value match */
-		if (ident0 != NULL)
-			vfree(ident0);
-	}
-
-	return 0;
-}
-
-/*
- * create ID payload for phase 1 and set into iph1->id.
- * NOT INCLUDING isakmp general header.
- * see, RFC2407 4.6.2.1
- */
-int
-ipsecdoi_setid1(iph1)
-	struct ph1handle *iph1;
-{
-	vchar_t *ret = NULL;
-	struct ipsecdoi_id_b id_b;
-	vchar_t *ident = NULL;
-	struct sockaddr *ipid = NULL;
-
-	/* init */
-	id_b.proto_id = 0;
-	id_b.port = 0;
-	ident = NULL;
-
-	switch (iph1->rmconf->idvtype) {
-	case IDTYPE_FQDN:
-		id_b.type = IPSECDOI_ID_FQDN;
-		ident = getidval(iph1->rmconf->idvtype, iph1->rmconf->idv);
-		break;
-	case IDTYPE_USERFQDN:
-		id_b.type = IPSECDOI_ID_USER_FQDN;
-		ident = getidval(iph1->rmconf->idvtype, iph1->rmconf->idv);
-		break;
-	case IDTYPE_KEYID:
-		id_b.type = IPSECDOI_ID_KEY_ID;
-		ident = getidval(iph1->rmconf->idvtype, iph1->rmconf->idv);
-		break;
-	case IDTYPE_ASN1DN:
-		id_b.type = IPSECDOI_ID_DER_ASN1_DN;
-		if (iph1->rmconf->idv) {
-			/* XXX it must be encoded to asn1dn. */
-			ident = vdup(iph1->rmconf->idv);
-		} else {
-			if (oakley_getmycert(iph1) < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to get own CERT.\n");
-				goto err;
-			}
-			ident = eay_get_x509asn1subjectname(&iph1->cert->cert);
-		}
-		break;
-	case IDTYPE_ADDRESS:
-		/*
-		 * if the value of the id type was set by the configuration
-		 * file, then use it.  otherwise the value is get from local
-		 * ip address by using ike negotiation.
-		 */
-		if (iph1->rmconf->idv)
-			ipid = (struct sockaddr *)iph1->rmconf->idv->v;
-		/*FALLTHROUGH*/
-	default:
-	    {
-		int l;
-		caddr_t p;
-
-		if (ipid == NULL)
-			ipid = iph1->local;
-
-		/* use IP address */
-		switch (ipid->sa_family) {
-		case AF_INET:
-			id_b.type = IPSECDOI_ID_IPV4_ADDR;
-			l = sizeof(struct in_addr);
-			p = (caddr_t)&((struct sockaddr_in *)ipid)->sin_addr;
-			break;
-#ifdef INET6
-		case AF_INET6:
-			id_b.type = IPSECDOI_ID_IPV6_ADDR;
-			l = sizeof(struct in6_addr);
-			p = (caddr_t)&((struct sockaddr_in6 *)ipid)->sin6_addr;
-			break;
-#endif
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid address family.\n");
-			goto err;
-		}
-		id_b.proto_id = IPPROTO_UDP;
-		id_b.port = htons(PORT_ISAKMP);
-		ident = vmalloc(l);
-		if (!ident) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get ID buffer.\n");
-			return 0;
-		}
-		memcpy(ident->v, p, ident->l);
-	    }
-	}
-	if (!ident) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get ID buffer.\n");
-		return 0;
-	}
-
-	ret = vmalloc(sizeof(id_b) + ident->l);
-	if (ret == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get ID buffer.\n");
-		goto err;
-	}
-
-	memcpy(ret->v, &id_b, sizeof(id_b));
-	memcpy(ret->v + sizeof(id_b), ident->v, ident->l);
-
-	iph1->id = ret;
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"use ID type of %s\n", s_ipsecdoi_ident(id_b.type));
-	if (ident)
-		vfree(ident);
-	return 0;
-
-err:
-	if (ident)
-		vfree(ident);
-	plog(LLV_ERROR, LOCATION, NULL, "failed get my ID\n");
-	return -1;
-}
-
-static vchar_t *
-getidval(type, val)
-	int type;
-	vchar_t *val;
-{
-	vchar_t *new = NULL;
-
-	if (val)
-		new = vdup(val);
-	else if (lcconf->ident[type])
-		new = vdup(lcconf->ident[type]);
-
-	return new;
-}
-
-/* it's only called by cfparse.y. */
-int
-set_identifier(vpp, type, value)
-	vchar_t **vpp, *value;
-	int type;
-{
-	return set_identifier_qual(vpp, type, value, IDQUAL_UNSPEC);
-}
-
-int
-set_identifier_qual(vpp, type, value, qual)
-	vchar_t **vpp, *value;
-	int type;
-	int qual;
-{
-	vchar_t *new = NULL;
-
-	/* simply return if value is null. */
-	if (!value){
-		if( type == IDTYPE_FQDN || type == IDTYPE_USERFQDN){
-			plog(LLV_ERROR, LOCATION, NULL,
-				 "No %s\n", type == IDTYPE_FQDN ? "fqdn":"user fqdn");
-			return -1;
-		}
-		return 0;
-	}
-
-	switch (type) {
-	case IDTYPE_FQDN:
-	case IDTYPE_USERFQDN:
-		if(value->l <= 1){
-			plog(LLV_ERROR, LOCATION, NULL,
-				 "Empty %s\n", type == IDTYPE_FQDN ? "fqdn":"user fqdn");
-			return -1;
-		}
-		/* length is adjusted since QUOTEDSTRING teminates NULL. */
-		new = vmalloc(value->l - 1);
-		if (new == NULL)
-			return -1;
-		memcpy(new->v, value->v, new->l);
-		break;
-	case IDTYPE_KEYID:
-		/* 
-		 * If no qualifier is specified: IDQUAL_UNSPEC. It means
-		 * to use a file for backward compatibility sake. 
-		 */
-		switch(qual) {
-		case IDQUAL_FILE:
-		case IDQUAL_UNSPEC: {
-			FILE *fp;
-			char b[512];
-			int tlen, len;
-
-			fp = fopen(value->v, "r");
-			if (fp == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"can not open %s\n", value->v);
-				return -1;
-			}
-			tlen = 0;
-			while ((len = fread(b, 1, sizeof(b), fp)) != 0) {
-				new = vrealloc(new, tlen + len);
-				if (!new) {
-					fclose(fp);
-					return -1;
-				}
-				memcpy(new->v + tlen, b, len);
-				tlen += len;
-			}
-			break;
-		}
-
-		case IDQUAL_TAG:
-			new = vmalloc(value->l - 1);
-			if (new == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"can not allocate memory");
-				return -1;
-			}
-			memcpy(new->v, value->v, new->l);
-			break;
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"unknown qualifier");
-			return -1;
-		}
-		break;
-	
-	case IDTYPE_ADDRESS: {
-		struct sockaddr *sa;
-
-		/* length is adjusted since QUOTEDSTRING teminates NULL. */
-		if (value->l == 0)
-			break;
-
-		sa = str2saddr(value->v, NULL);
-		if (sa == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid ip address %s\n", value->v);
-			return -1;
-		}
-
-		new = vmalloc(sysdep_sa_len(sa));
-		if (new == NULL) {
-			racoon_free(sa);
-			return -1;
-		}
-		memcpy(new->v, sa, new->l);
-		racoon_free(sa);
-		break;
-	}
-	case IDTYPE_ASN1DN:
-		if (value->v[0] == '~')
-			/* Hex-encoded ASN1 strings */
-			new = eay_hex2asn1dn(value->v + 1, - 1);
-		else
-			/* DN encoded strings */
-			new = eay_str2asn1dn(value->v, value->l - 1);
-
-		if (new == NULL)
-			return -1;
-
-		if (loglevel >= LLV_DEBUG) {
-			X509_NAME *xn;
-			BIO *bio;
-			unsigned char *ptr = (unsigned char *) new->v, *buf;
-			size_t len;
-#if defined(ANDROID_CHANGES)
-			char *bio_contents;
-#else
-			char save;
-#endif
-
-			xn = d2i_X509_NAME(NULL, (void *)&ptr, new->l);
-			bio = BIO_new(BIO_s_mem());
-			
-			X509_NAME_print_ex(bio, xn, 0, 0);
-#if defined(ANDROID_CHANGES)
-			BIO_write(bio, "\x00", 1);
-			BIO_get_mem_data(bio, &bio_contents);
-			plog(LLV_DEBUG, LOCATION, NULL, "Parsed DN: %s\n", bio_contents);
-#else
-			len = BIO_get_mem_data(bio, &ptr);
-			save = ptr[len];
-			ptr[len] = 0;
-			plog(LLV_DEBUG, LOCATION, NULL, "Parsed DN: %s\n", ptr);
-			ptr[len] = save;
-#endif
-			X509_NAME_free(xn);
-			BIO_free(bio);
-		}
-
-		break;
-	}
-
-	*vpp = new;
-
-	return 0;
-}
-
-/*
- * create ID payload for phase 2, and set into iph2->id and id_p.  There are
- * NOT INCLUDING isakmp general header.
- * this function is for initiator.  responder will get to copy from payload.
- * responder ID type is always address type.
- * see, RFC2407 4.6.2.1
- */
-int
-ipsecdoi_setid2(iph2)
-	struct ph2handle *iph2;
-{
-	struct secpolicy *sp;
-
-	/* check there is phase 2 handler ? */
-	sp = getspbyspid(iph2->spid);
-	if (sp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no policy found for spid:%u.\n", iph2->spid);
-		return -1;
-	}
-
-	iph2->id = ipsecdoi_sockaddr2id((struct sockaddr *)&sp->spidx.src,
-					sp->spidx.prefs, sp->spidx.ul_proto);
-	if (iph2->id == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get ID for %s\n",
-			spidx2str(&sp->spidx));
-		return -1;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "use local ID type %s\n",
-		s_ipsecdoi_ident(((struct ipsecdoi_id_b *)iph2->id->v)->type));
-
-	/* remote side */
-	iph2->id_p = ipsecdoi_sockaddr2id((struct sockaddr *)&sp->spidx.dst,
-				sp->spidx.prefd, sp->spidx.ul_proto);
-	if (iph2->id_p == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get ID for %s\n",
-			spidx2str(&sp->spidx));
-		VPTRINIT(iph2->id);
-		return -1;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"use remote ID type %s\n",
-		s_ipsecdoi_ident(((struct ipsecdoi_id_b *)iph2->id_p->v)->type));
-
-	return 0;
-}
-
-/*
- * set address type of ID.
- * NOT INCLUDING general header.
- */
-vchar_t *
-ipsecdoi_sockaddr2id(saddr, prefixlen, ul_proto)
-	struct sockaddr *saddr;
-	u_int prefixlen;
-	u_int ul_proto;
-{
-	vchar_t *new;
-	int type, len1, len2;
-	caddr_t sa;
-	u_short port;
-
-	/*
-	 * Q. When type is SUBNET, is it allowed to be ::1/128.
-	 * A. Yes. (consensus at bake-off)
-	 */
-	switch (saddr->sa_family) {
-	case AF_INET:
-		len1 = sizeof(struct in_addr);
-		if (prefixlen == (sizeof(struct in_addr) << 3)) {
-			type = IPSECDOI_ID_IPV4_ADDR;
-			len2 = 0;
-		} else {
-			type = IPSECDOI_ID_IPV4_ADDR_SUBNET;
-			len2 = sizeof(struct in_addr);
-		}
-		sa = (caddr_t)&((struct sockaddr_in *)(saddr))->sin_addr;
-		port = ((struct sockaddr_in *)(saddr))->sin_port;
-		break;
-#ifdef INET6
-	case AF_INET6:
-		len1 = sizeof(struct in6_addr);
-		if (prefixlen == (sizeof(struct in6_addr) << 3)) {
-			type = IPSECDOI_ID_IPV6_ADDR;
-			len2 = 0;
-		} else {
-			type = IPSECDOI_ID_IPV6_ADDR_SUBNET;
-			len2 = sizeof(struct in6_addr);
-		}
-		sa = (caddr_t)&((struct sockaddr_in6 *)(saddr))->sin6_addr;
-		port = ((struct sockaddr_in6 *)(saddr))->sin6_port;
-		break;
-#endif
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid family: %d.\n", saddr->sa_family);
-		return NULL;
-	}
-
-	/* get ID buffer */
-	new = vmalloc(sizeof(struct ipsecdoi_id_b) + len1 + len2);
-	if (new == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get ID buffer.\n");
-		return NULL;
-	}
-
-	memset(new->v, 0, new->l);
-
-	/* set the part of header. */
-	((struct ipsecdoi_id_b *)new->v)->type = type;
-
-	/* set ul_proto and port */
-	/*
-	 * NOTE: we use both IPSEC_ULPROTO_ANY and IPSEC_PORT_ANY as wild card
-	 * because 0 means port number of 0.  Instead of 0, we use IPSEC_*_ANY.
-	 */
-	((struct ipsecdoi_id_b *)new->v)->proto_id =
-		ul_proto == IPSEC_ULPROTO_ANY ? 0 : ul_proto;
-	((struct ipsecdoi_id_b *)new->v)->port =
-		port == IPSEC_PORT_ANY ? 0 : port;
-	memcpy(new->v + sizeof(struct ipsecdoi_id_b), sa, len1);
-
-	/* set address */
-
-	/* set prefix */
-	if (len2) {
-		u_char *p = (unsigned char *) new->v + 
-			sizeof(struct ipsecdoi_id_b) + len1;
-		u_int bits = prefixlen;
-
-		while (bits >= 8) {
-			*p++ = 0xff;
-			bits -= 8;
-		}
-
-		if (bits > 0)
-			*p = ~((1 << (8 - bits)) - 1);
-	}
-
-	return new;
-}
-
-vchar_t *
-ipsecdoi_sockrange2id(laddr, haddr, ul_proto)
-	struct sockaddr *laddr, *haddr;
-	u_int ul_proto;
-{
-	vchar_t *new;
-	int type, len1, len2;
-	u_short port;
-
-	if (laddr->sa_family != haddr->sa_family) {
-	    plog(LLV_ERROR, LOCATION, NULL, "Address family mismatch\n");
-	    return NULL;
-	}
-
-	switch (laddr->sa_family) {
-	case AF_INET:
-	    type = IPSECDOI_ID_IPV4_ADDR_RANGE;
-	    len1 = sizeof(struct in_addr);
-	    len2 = sizeof(struct in_addr);
-	    break;
-#ifdef INET6
-	case AF_INET6:
-		type = IPSECDOI_ID_IPV6_ADDR_RANGE;
-		len1 = sizeof(struct in6_addr);
-		len2 = sizeof(struct in6_addr);
-		break;
-#endif
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid family: %d.\n", laddr->sa_family);
-		return NULL;
-	}
-
-	/* get ID buffer */
-	new = vmalloc(sizeof(struct ipsecdoi_id_b) + len1 + len2);
-	if (new == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get ID buffer.\n");
-		return NULL;
-	}
-
-	memset(new->v, 0, new->l);
-	/* set the part of header. */
-	((struct ipsecdoi_id_b *)new->v)->type = type;
-
-	/* set ul_proto and port */
-	/*
-	 * NOTE: we use both IPSEC_ULPROTO_ANY and IPSEC_PORT_ANY as wild card
-	 * because 0 means port number of 0.  Instead of 0, we use IPSEC_*_ANY.
-	 */
-	((struct ipsecdoi_id_b *)new->v)->proto_id =
-		ul_proto == IPSEC_ULPROTO_ANY ? 0 : ul_proto;
-	port = ((struct sockaddr_in *)(laddr))->sin_port;
-	((struct ipsecdoi_id_b *)new->v)->port =
-		port == IPSEC_PORT_ANY ? 0 : port;
-	memcpy(new->v + sizeof(struct ipsecdoi_id_b), 
-	       (caddr_t)&((struct sockaddr_in *)(laddr))->sin_addr, 
-	       len1);
-	memcpy(new->v + sizeof(struct ipsecdoi_id_b) + len1, 
-	       (caddr_t)&((struct sockaddr_in *)haddr)->sin_addr,
-	       len2);
-	return new;
-}
-
-
-/*
- * create sockaddr structure from ID payload (buf).
- * buffers (saddr, prefixlen, ul_proto) must be allocated.
- * see, RFC2407 4.6.2.1
- */
-int
-ipsecdoi_id2sockaddr(buf, saddr, prefixlen, ul_proto)
-	vchar_t *buf;
-	struct sockaddr *saddr;
-	u_int8_t *prefixlen;
-	u_int16_t *ul_proto;
-{
-	struct ipsecdoi_id_b *id_b = (struct ipsecdoi_id_b *)buf->v;
-	u_int plen = 0;
-
-	/*
-	 * When a ID payload of subnet type with a IP address of full bit
-	 * masked, it has to be processed as host address.
-	 * e.g. below 2 type are same.
-	 *      type = ipv6 subnet, data = 2001::1/128
-	 *      type = ipv6 address, data = 2001::1
-	 */
-	switch (id_b->type) {
-	case IPSECDOI_ID_IPV4_ADDR:
-	case IPSECDOI_ID_IPV4_ADDR_SUBNET:
-#ifndef __linux__
-		saddr->sa_len = sizeof(struct sockaddr_in);
-#endif
-		saddr->sa_family = AF_INET;
-		((struct sockaddr_in *)saddr)->sin_port =
-			(id_b->port == 0
-				? IPSEC_PORT_ANY
-				: id_b->port);		/* see sockaddr2id() */
-		memcpy(&((struct sockaddr_in *)saddr)->sin_addr,
-			buf->v + sizeof(*id_b), sizeof(struct in_addr));
-		break;
-#ifdef INET6
-	case IPSECDOI_ID_IPV6_ADDR:
-	case IPSECDOI_ID_IPV6_ADDR_SUBNET:
-#ifndef __linux__
-		saddr->sa_len = sizeof(struct sockaddr_in6);
-#endif
-		saddr->sa_family = AF_INET6;
-		((struct sockaddr_in6 *)saddr)->sin6_port =
-			(id_b->port == 0
-				? IPSEC_PORT_ANY
-				: id_b->port);		/* see sockaddr2id() */
-		memcpy(&((struct sockaddr_in6 *)saddr)->sin6_addr,
-			buf->v + sizeof(*id_b), sizeof(struct in6_addr));
-		break;
-#endif
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unsupported ID type %d\n", id_b->type);
-		return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-	}
-
-	/* get prefix length */
-	switch (id_b->type) {
-	case IPSECDOI_ID_IPV4_ADDR:
-		plen = sizeof(struct in_addr) << 3;
-		break;
-#ifdef INET6
-	case IPSECDOI_ID_IPV6_ADDR:
-		plen = sizeof(struct in6_addr) << 3;
-		break;
-#endif
-	case IPSECDOI_ID_IPV4_ADDR_SUBNET:
-#ifdef INET6
-	case IPSECDOI_ID_IPV6_ADDR_SUBNET:
-#endif
-	    {
-		u_char *p;
-		u_int max;
-		int alen = sizeof(struct in_addr);
-
-		switch (id_b->type) {
-		case IPSECDOI_ID_IPV4_ADDR_SUBNET:
-			alen = sizeof(struct in_addr);
-			break;
-#ifdef INET6
-		case IPSECDOI_ID_IPV6_ADDR_SUBNET:
-			alen = sizeof(struct in6_addr);
-			break;
-#endif
-		}
-
-		/* sanity check */
-		if (buf->l < alen)
-			return ISAKMP_INTERNAL_ERROR;
-
-		/* get subnet mask length */
-		plen = 0;
-		max = alen <<3;
-
-		p = (unsigned char *) buf->v
-			+ sizeof(struct ipsecdoi_id_b)
-			+ alen;
-
-		for (; *p == 0xff; p++) {
-			plen += 8;
-			if (plen >= max)
-				break;
-		}
-
-		if (plen < max) {
-			u_int l = 0;
-			u_char b = ~(*p);
-
-			while (b) {
-				b >>= 1;
-				l++;
-			}
-
-			l = 8 - l;
-			plen += l;
-		}
-	    }
-		break;
-	}
-
-	*prefixlen = plen;
-	*ul_proto = id_b->proto_id == 0
-				? IPSEC_ULPROTO_ANY
-				: id_b->proto_id;	/* see sockaddr2id() */
-
-	return 0;
-}
-
-/*
- * make printable string from ID payload except of general header.
- */
-char *
-ipsecdoi_id2str(id)
-	const vchar_t *id;
-{
-#define BUFLEN 512
-	char * ret = NULL;
-	int len = 0;
-	char *dat;
-	static char buf[BUFLEN];
-	struct ipsecdoi_id_b *id_b = (struct ipsecdoi_id_b *)id->v;
-	struct sockaddr_storage saddr_storage;
-	struct sockaddr        *saddr;
-	struct sockaddr_in     *saddr_in;
-	struct sockaddr_in6    *saddr_in6;
-	u_int plen = 0;
-
-	saddr     = (struct sockaddr *)&saddr_storage;
-	saddr_in  = (struct sockaddr_in *)&saddr_storage;
-	saddr_in6 = (struct sockaddr_in6 *)&saddr_storage;
-
-	
-	switch (id_b->type) {
-	case IPSECDOI_ID_IPV4_ADDR:
-	case IPSECDOI_ID_IPV4_ADDR_SUBNET:
-	case IPSECDOI_ID_IPV4_ADDR_RANGE:
-
-#ifndef __linux__
-		saddr->sa_len = sizeof(struct sockaddr_in);
-#endif
-		saddr->sa_family = AF_INET;
-
-		saddr_in->sin_port = IPSEC_PORT_ANY;
-		memcpy(&saddr_in->sin_addr,
-			id->v + sizeof(*id_b), sizeof(struct in_addr));
-		break;
-#ifdef INET6
-	case IPSECDOI_ID_IPV6_ADDR:
-	case IPSECDOI_ID_IPV6_ADDR_SUBNET:
-	case IPSECDOI_ID_IPV6_ADDR_RANGE:
-
-#ifndef __linux__
-		saddr->sa_len = sizeof(struct sockaddr_in6);
-#endif
-		saddr->sa_family = AF_INET6;
-
-		saddr_in6->sin6_port = IPSEC_PORT_ANY;
-		memcpy(&saddr_in6->sin6_addr,
-			id->v + sizeof(*id_b), sizeof(struct in6_addr));
-		saddr_in6->sin6_scope_id =
-			(IN6_IS_ADDR_LINKLOCAL(&saddr_in6->sin6_addr)
-				? ((struct sockaddr_in6 *)id_b)->sin6_scope_id
-				: 0);
-		break;
-#endif
-	}
-
-	switch (id_b->type) {
-	case IPSECDOI_ID_IPV4_ADDR:
-#ifdef INET6
-	case IPSECDOI_ID_IPV6_ADDR:
-#endif
-		len = snprintf( buf, BUFLEN, "%s", saddrwop2str(saddr));
-		break;
-
-	case IPSECDOI_ID_IPV4_ADDR_SUBNET:
-#ifdef INET6
-	case IPSECDOI_ID_IPV6_ADDR_SUBNET:
-#endif
-	    {
-		u_char *p;
-		u_int max;
-		int alen = sizeof(struct in_addr);
-
-		switch (id_b->type) {
-		case IPSECDOI_ID_IPV4_ADDR_SUBNET:
-			alen = sizeof(struct in_addr);
-			break;
-#ifdef INET6
-		case IPSECDOI_ID_IPV6_ADDR_SUBNET:
-			alen = sizeof(struct in6_addr);
-			break;
-#endif
-		}
-
-		/* sanity check */
-		if (id->l < alen) {
-			len = 0;
-			break;
-		}
-
-		/* get subnet mask length */
-		plen = 0;
-		max = alen <<3;
-
-		p = (unsigned char *) id->v
-			+ sizeof(struct ipsecdoi_id_b)
-			+ alen;
-
-		for (; *p == 0xff; p++) {
-			plen += 8;
-			if (plen >= max)
-				break;
-		}
-
-		if (plen < max) {
-			u_int l = 0;
-			u_char b = ~(*p);
-
-			while (b) {
-				b >>= 1;
-				l++;
-			}
-
-			l = 8 - l;
-			plen += l;
-		}
-
-		len = snprintf( buf, BUFLEN, "%s/%i", saddrwop2str(saddr), plen);
-	    }
-		break;
-
-	case IPSECDOI_ID_IPV4_ADDR_RANGE:
-
-		len = snprintf( buf, BUFLEN, "%s-", saddrwop2str(saddr));
-
-#ifndef __linux__
-		saddr->sa_len = sizeof(struct sockaddr_in);
-#endif
-		saddr->sa_family = AF_INET;
-		saddr_in->sin_port = IPSEC_PORT_ANY;
-		memcpy(&saddr_in->sin_addr,
-			id->v + sizeof(*id_b) + sizeof(struct in_addr),
-			sizeof(struct in_addr));
-
-		len += snprintf( buf + len, BUFLEN - len, "%s", saddrwop2str(saddr));
-
-		break;
-
-#ifdef INET6
-	case IPSECDOI_ID_IPV6_ADDR_RANGE:
-
-		len = snprintf( buf, BUFLEN, "%s-", saddrwop2str(saddr));
-
-#ifndef __linux__
-		saddr->sa_len = sizeof(struct sockaddr_in6);
-#endif
-		saddr->sa_family = AF_INET6;
-		saddr_in6->sin6_port = IPSEC_PORT_ANY;
-		memcpy(&saddr_in6->sin6_addr,
-			id->v + sizeof(*id_b) + sizeof(struct in6_addr),
-			sizeof(struct in6_addr));
-		saddr_in6->sin6_scope_id =
-			(IN6_IS_ADDR_LINKLOCAL(&saddr_in6->sin6_addr)
-				? ((struct sockaddr_in6 *)id_b)->sin6_scope_id
-				: 0);
-
-		len += snprintf( buf + len, BUFLEN - len, "%s", saddrwop2str(saddr));
-
-		break;
-#endif
-
-	case IPSECDOI_ID_FQDN:
-	case IPSECDOI_ID_USER_FQDN:
-		len = id->l - sizeof(*id_b);
-		if (len > BUFLEN)
-			len = BUFLEN;
-		memcpy(buf, id->v + sizeof(*id_b), len);
-		break;
-
-	case IPSECDOI_ID_DER_ASN1_DN:
-	case IPSECDOI_ID_DER_ASN1_GN:
-	{
-		X509_NAME *xn = NULL;
-
-		dat = id->v + sizeof(*id_b);
-		len = id->l - sizeof(*id_b);
-
-		if (d2i_X509_NAME(&xn, (void*) &dat, len) != NULL) {
-			BIO *bio = BIO_new(BIO_s_mem());
-			X509_NAME_print_ex(bio, xn, 0, 0);
-			len = BIO_get_mem_data(bio, &dat);
-			if (len > BUFLEN)
-				len = BUFLEN;
-			memcpy(buf,dat,len);
-			BIO_free(bio);
-			X509_NAME_free(xn);
-		} else {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"unable to extract asn1dn from id\n");
-
-			len = sprintf(buf, "<ASN1-DN>");
-		}
-
-		break;
-	}
-
-	/* currently unhandled id types */
-	case IPSECDOI_ID_KEY_ID:
-		len = sprintf( buf, "<KEY-ID>");
-		break;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unknown ID type %d\n", id_b->type);
-	}
-
-	if (!len)
-		len = sprintf( buf, "<?>");
-
-	ret = racoon_malloc(len+1);
-	if (ret != NULL) {
-		memcpy(ret,buf,len);
-		ret[len]=0;
-	}
-
-	return ret;
-}
-
-/*
- * set IPsec data attributes into a proposal.
- * NOTE: MUST called per a transform.
- */
-int
-ipsecdoi_t2satrns(t, pp, pr, tr)
-	struct isakmp_pl_t *t;
-	struct saprop *pp;
-	struct saproto *pr;
-	struct satrns *tr;
-{
-	struct isakmp_data *d, *prev;
-	int flag, type;
-	int error = -1;
-	int life_t;
-	int tlen;
-
-	tr->trns_no = t->t_no;
-	tr->trns_id = t->t_id;
-
-	tlen = ntohs(t->h.len) - sizeof(*t);
-	prev = (struct isakmp_data *)NULL;
-	d = (struct isakmp_data *)(t + 1);
-
-	/* default */
-	life_t = IPSECDOI_ATTR_SA_LD_TYPE_DEFAULT;
-	pp->lifetime = IPSECDOI_ATTR_SA_LD_SEC_DEFAULT;
-	pp->lifebyte = 0;
-	tr->authtype = IPSECDOI_ATTR_AUTH_NONE;
-
-	while (tlen > 0) {
-
-		type = ntohs(d->type) & ~ISAKMP_GEN_MASK;
-		flag = ntohs(d->type) & ISAKMP_GEN_MASK;
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"type=%s, flag=0x%04x, lorv=%s\n",
-			s_ipsecdoi_attr(type), flag,
-			s_ipsecdoi_attr_v(type, ntohs(d->lorv)));
-
-		switch (type) {
-		case IPSECDOI_ATTR_SA_LD_TYPE:
-		{
-			int type = ntohs(d->lorv);
-			switch (type) {
-			case IPSECDOI_ATTR_SA_LD_TYPE_SEC:
-			case IPSECDOI_ATTR_SA_LD_TYPE_KB:
-				life_t = type;
-				break;
-			default:
-				plog(LLV_WARNING, LOCATION, NULL,
-					"invalid life duration type. "
-					"use default\n");
-				life_t = IPSECDOI_ATTR_SA_LD_TYPE_DEFAULT;
-				break;
-			}
-			break;
-		}
-		case IPSECDOI_ATTR_SA_LD:
-			if (prev == NULL
-			 || (ntohs(prev->type) & ~ISAKMP_GEN_MASK) !=
-					IPSECDOI_ATTR_SA_LD_TYPE) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				    "life duration must follow ltype\n");
-				break;
-			}
-
-		    {
-			u_int32_t t;
-			vchar_t *ld_buf = NULL;
-
-			if (flag) {
-				/* i.e. ISAKMP_GEN_TV */
-				ld_buf = vmalloc(sizeof(d->lorv));
-				if (ld_buf == NULL) {
-					plog(LLV_ERROR, LOCATION, NULL,
-					    "failed to get LD buffer.\n");
-					goto end;
-				}
-				memcpy(ld_buf->v, &d->lorv, sizeof(d->lorv));
-			} else {
-				int len = ntohs(d->lorv);
-				/* i.e. ISAKMP_GEN_TLV */
-				ld_buf = vmalloc(len);
-				if (ld_buf == NULL) {
-					plog(LLV_ERROR, LOCATION, NULL,
-					    "failed to get LD buffer.\n");
-					goto end;
-				}
-				memcpy(ld_buf->v, d + 1, len);
-			}
-			switch (life_t) {
-			case IPSECDOI_ATTR_SA_LD_TYPE_SEC:
-				t = ipsecdoi_set_ld(ld_buf);
-				vfree(ld_buf);
-				if (t == 0) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"invalid life duration.\n");
-					goto end;
-				}
-				/* lifetime must be equal in a proposal. */
-				if (pp->lifetime == IPSECDOI_ATTR_SA_LD_SEC_DEFAULT)
-					pp->lifetime = t;
-				else if (pp->lifetime != t) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"lifetime mismatched "
-						"in a proposal, "
-						"prev:%ld curr:%u.\n",
-						(long)pp->lifetime, t);
-					goto end;
-				}
-				break;
-			case IPSECDOI_ATTR_SA_LD_TYPE_KB:
-				t = ipsecdoi_set_ld(ld_buf);
-				vfree(ld_buf);
-				if (t == 0) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"invalid life duration.\n");
-					goto end;
-				}
-				/* lifebyte must be equal in a proposal. */
-				if (pp->lifebyte == 0)
-					pp->lifebyte = t;
-				else if (pp->lifebyte != t) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"lifebyte mismatched "
-						"in a proposal, "
-						"prev:%d curr:%u.\n",
-						pp->lifebyte, t);
-					goto end;
-				}
-				break;
-			default:
-				vfree(ld_buf);
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid life type: %d\n", life_t);
-				goto end;
-			}
-		    }
-			break;
-
-		case IPSECDOI_ATTR_GRP_DESC:
-			/*
-			 * RFC2407: 4.5 IPSEC Security Association Attributes
-			 *   Specifies the Oakley Group to be used in a PFS QM
-			 *   negotiation.  For a list of supported values, see
-			 *   Appendix A of [IKE].
-			 */
-			if (pp->pfs_group == 0)
-				pp->pfs_group = (u_int16_t)ntohs(d->lorv);
-			else if (pp->pfs_group != (u_int16_t)ntohs(d->lorv)) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"pfs_group mismatched "
-					"in a proposal.\n");
-				goto end;
-			}
-			break;
-
-		case IPSECDOI_ATTR_ENC_MODE:
-			if (pr->encmode &&
-			    pr->encmode != (u_int16_t)ntohs(d->lorv)) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"multiple encmode exist "
-					"in a transform.\n");
-				goto end;
-			}
-			pr->encmode = (u_int16_t)ntohs(d->lorv);
-			break;
-
-		case IPSECDOI_ATTR_AUTH:
-			if (tr->authtype != IPSECDOI_ATTR_AUTH_NONE) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"multiple authtype exist "
-					"in a transform.\n");
-				goto end;
-			}
-			tr->authtype = (u_int16_t)ntohs(d->lorv);
-			break;
-
-		case IPSECDOI_ATTR_KEY_LENGTH:
-			if (pr->proto_id != IPSECDOI_PROTO_IPSEC_ESP) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"key length defined but not ESP");
-				goto end;
-			}
-			tr->encklen = ntohs(d->lorv);
-			break;
-#ifdef HAVE_SECCTX
-		case IPSECDOI_ATTR_SECCTX:
-		{
-			int len = ntohs(d->lorv);
-			memcpy(&pp->sctx, d + 1, len);
-			pp->sctx.ctx_strlen = ntohs(pp->sctx.ctx_strlen);
-			break;
-		}
-#endif /* HAVE_SECCTX */
-		case IPSECDOI_ATTR_KEY_ROUNDS:
-		case IPSECDOI_ATTR_COMP_DICT_SIZE:
-		case IPSECDOI_ATTR_COMP_PRIVALG:
-		default:
-			break;
-		}
-
-		prev = d;
-		if (flag) {
-			tlen -= sizeof(*d);
-			d = (struct isakmp_data *)((char *)d + sizeof(*d));
-		} else {
-			tlen -= (sizeof(*d) + ntohs(d->lorv));
-			d = (struct isakmp_data *)((caddr_t)d + sizeof(*d) + ntohs(d->lorv));
-		}
-	}
-
-	error = 0;
-end:
-	return error;
-}
-
-int
-ipsecdoi_authalg2trnsid(alg)
-	int alg;
-{
-	switch (alg) {
-        case IPSECDOI_ATTR_AUTH_HMAC_MD5:
-		return IPSECDOI_AH_MD5;
-        case IPSECDOI_ATTR_AUTH_HMAC_SHA1:
-		return IPSECDOI_AH_SHA;
-	case IPSECDOI_ATTR_AUTH_HMAC_SHA2_256:
-		return IPSECDOI_AH_SHA256;
-	case IPSECDOI_ATTR_AUTH_HMAC_SHA2_384:
-		return IPSECDOI_AH_SHA384;
-	case IPSECDOI_ATTR_AUTH_HMAC_SHA2_512:
-		return IPSECDOI_AH_SHA512;
-        case IPSECDOI_ATTR_AUTH_DES_MAC:
-		return IPSECDOI_AH_DES;
-	case IPSECDOI_ATTR_AUTH_KPDK:
-		return IPSECDOI_AH_MD5;	/* XXX */
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid authentication algorithm:%d\n", alg);
-	}
-	return -1;
-}
-
-#ifdef HAVE_GSSAPI
-struct isakmpsa *
-fixup_initiator_sa(match, received)
-	struct isakmpsa *match, *received;
-{
-	if (received->gssid != NULL)
-		match->gssid = vdup(received->gssid);
-
-	return match;
-}
-#endif
-
-static int rm_idtype2doi[] = {
-	255,				/* IDTYPE_UNDEFINED, 0 */
-	IPSECDOI_ID_FQDN,		/* IDTYPE_FQDN, 1 */
-	IPSECDOI_ID_USER_FQDN,		/* IDTYPE_USERFQDN, 2 */
-	IPSECDOI_ID_KEY_ID,		/* IDTYPE_KEYID, 3 */
-	255,    /*			   IDTYPE_ADDRESS, 4 
-		 * it expands into 4 types by another function. */
-	IPSECDOI_ID_DER_ASN1_DN,	/* IDTYPE_ASN1DN, 5 */
-};
-
-/*
- * convert idtype to DOI value.
- * OUT	255  : NG
- *	other: converted.
- */
-int
-idtype2doi(idtype)
-	int idtype;
-{
-	if (ARRAYLEN(rm_idtype2doi) > idtype)
-		return rm_idtype2doi[idtype];
-	return 255;
-}
-
-int
-doi2idtype(doi)
-	int doi;
-{
-	switch(doi) {
-	case IPSECDOI_ID_FQDN:
-		return(IDTYPE_FQDN);
-	case IPSECDOI_ID_USER_FQDN:
-		return(IDTYPE_USERFQDN);
-	case IPSECDOI_ID_KEY_ID:
-		return(IDTYPE_KEYID);
-	case IPSECDOI_ID_DER_ASN1_DN:
-		return(IDTYPE_ASN1DN);
-	case IPSECDOI_ID_IPV4_ADDR:
-	case IPSECDOI_ID_IPV4_ADDR_SUBNET:
-	case IPSECDOI_ID_IPV6_ADDR:
-	case IPSECDOI_ID_IPV6_ADDR_SUBNET:
-		return(IDTYPE_ADDRESS);
-	default:
-		plog(LLV_WARNING, LOCATION, NULL,
-			"Inproper idtype:%s in this function.\n",
-			s_ipsecdoi_ident(doi));
-		return(IDTYPE_ADDRESS);	/* XXX */
-	}
-	/*NOTREACHED*/
-}
-
-#ifdef ENABLE_HYBRID
-static int
-switch_authmethod(authmethod)
-	int authmethod;
-{
-	switch(authmethod) {
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-		authmethod = OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I;
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-		authmethod = OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I;
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-		authmethod = OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I;
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-		authmethod = OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I;
-		break;
-	/* Those are not implemented */
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-		authmethod = OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I;
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-		authmethod = OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I;
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-		authmethod = OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I;
-		break;
-	default:
-		break;
-	}
-
-	return authmethod;
-}
-#endif
diff --git a/src/racoon/ipsec_doi.h b/src/racoon/ipsec_doi.h
deleted file mode 100644
index 21dd93d..0000000
--- a/src/racoon/ipsec_doi.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/*	$NetBSD: ipsec_doi.h,v 1.9 2006/12/09 05:52:57 manu Exp $	*/
-
-/* Id: ipsec_doi.h,v 1.15 2006/08/11 16:06:30 vanhu Exp */
-
-/*
- * 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.
- */
-
-#ifndef _IPSEC_DOI_H
-#define _IPSEC_DOI_H
-
-/* refered to RFC2407 */
-
-#define IPSEC_DOI 1
-
-/* 4.2 IPSEC Situation Definition */
-#define IPSECDOI_SIT_IDENTITY_ONLY           0x00000001
-#define IPSECDOI_SIT_SECRECY                 0x00000002
-#define IPSECDOI_SIT_INTEGRITY               0x00000004
-
-/* 4.4.1 IPSEC Security Protocol Identifiers */
-  /* 4.4.2 IPSEC ISAKMP Transform Values */
-#define IPSECDOI_PROTO_ISAKMP                        1
-#define   IPSECDOI_KEY_IKE                             1
-
-/* 4.4.1 IPSEC Security Protocol Identifiers */
-#define IPSECDOI_PROTO_IPSEC_AH                      2
-  /* 4.4.3 IPSEC AH Transform Values */
-#define   IPSECDOI_AH_MD5                              2
-#define   IPSECDOI_AH_SHA                              3
-#define   IPSECDOI_AH_DES                              4
-#define   IPSECDOI_AH_SHA256                           5
-#define   IPSECDOI_AH_SHA384                           6
-#define   IPSECDOI_AH_SHA512                           7
-
-/* 4.4.1 IPSEC Security Protocol Identifiers */
-#define IPSECDOI_PROTO_IPSEC_ESP                     3
-  /* 4.4.4 IPSEC ESP Transform Identifiers */
-#define   IPSECDOI_ESP_DES_IV64				1
-#define   IPSECDOI_ESP_DES				2
-#define   IPSECDOI_ESP_3DES				3
-#define   IPSECDOI_ESP_RC5				4
-#define   IPSECDOI_ESP_IDEA				5
-#define   IPSECDOI_ESP_CAST				6
-#define   IPSECDOI_ESP_BLOWFISH				7
-#define   IPSECDOI_ESP_3IDEA				8
-#define   IPSECDOI_ESP_DES_IV32				9
-#define   IPSECDOI_ESP_RC4				10
-#define   IPSECDOI_ESP_NULL				11
-#define   IPSECDOI_ESP_AES				12
-#define   IPSECDOI_ESP_CAMELLIA				22
-#if 1
-  /* draft-ietf-ipsec-ciph-aes-cbc-00.txt */
-#define   IPSECDOI_ESP_TWOFISH				253
-#else
-  /* SSH uses these value for now */
-#define   IPSECDOI_ESP_TWOFISH				250
-#endif
-
-/* 4.4.1 IPSEC Security Protocol Identifiers */
-#define IPSECDOI_PROTO_IPCOMP                        4
-  /* 4.4.5 IPSEC IPCOMP Transform Identifiers */
-#define   IPSECDOI_IPCOMP_OUI				1
-#define   IPSECDOI_IPCOMP_DEFLATE			2
-#define   IPSECDOI_IPCOMP_LZS				3
-
-/* 4.5 IPSEC Security Association Attributes */
-/* NOTE: default value is not included in a packet. */
-#define IPSECDOI_ATTR_SA_LD_TYPE              1 /* B */
-#define   IPSECDOI_ATTR_SA_LD_TYPE_DEFAULT      1
-#define   IPSECDOI_ATTR_SA_LD_TYPE_SEC          1
-#define   IPSECDOI_ATTR_SA_LD_TYPE_KB           2
-#define   IPSECDOI_ATTR_SA_LD_TYPE_MAX          3
-#define IPSECDOI_ATTR_SA_LD                   2 /* V */
-#define   IPSECDOI_ATTR_SA_LD_SEC_DEFAULT      28800 /* 8 hours */
-#define   IPSECDOI_ATTR_SA_LD_KB_MAX  (~(1 << ((sizeof(int) << 3) - 1)))
-#define IPSECDOI_ATTR_GRP_DESC                3 /* B */
-#define IPSECDOI_ATTR_ENC_MODE                4 /* B */
-	/* default value: host dependent */
-#define   IPSECDOI_ATTR_ENC_MODE_ANY            0	/* NOTE:internal use */
-#define   IPSECDOI_ATTR_ENC_MODE_TUNNEL         1
-#define   IPSECDOI_ATTR_ENC_MODE_TRNS           2
-
-/* NAT-T draft-ietf-ipsec-nat-t-ike-05 and later */
-#define   IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_RFC	3
-#define   IPSECDOI_ATTR_ENC_MODE_UDPTRNS_RFC	4
-
-/* NAT-T up to draft-ietf-ipsec-nat-t-ike-04 */
-#define   IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_DRAFT	61443
-#define   IPSECDOI_ATTR_ENC_MODE_UDPTRNS_DRAFT		61444
-
-#define IPSECDOI_ATTR_AUTH                    5 /* B */
-	/* 0 means not to use authentication. */
-#define   IPSECDOI_ATTR_AUTH_HMAC_MD5           1
-#define   IPSECDOI_ATTR_AUTH_HMAC_SHA1          2
-#define   IPSECDOI_ATTR_AUTH_DES_MAC            3
-#define   IPSECDOI_ATTR_AUTH_KPDK               4 /*RFC-1826(Key/Pad/Data/Key)*/
-#define   IPSECDOI_ATTR_AUTH_HMAC_SHA2_256      5
-#define   IPSECDOI_ATTR_AUTH_HMAC_SHA2_384      6
-#define   IPSECDOI_ATTR_AUTH_HMAC_SHA2_512      7
-#define   IPSECDOI_ATTR_AUTH_NONE               254	/* NOTE:internal use */
-	/*
-	 * When negotiating ESP without authentication, the Auth
-	 * Algorithm attribute MUST NOT be included in the proposal.
-	 * When negotiating ESP without confidentiality, the Auth
-	 * Algorithm attribute MUST be included in the proposal and
-	 * the ESP transform ID must be ESP_NULL.
-	*/
-#define IPSECDOI_ATTR_KEY_LENGTH              6 /* B */
-#define IPSECDOI_ATTR_KEY_ROUNDS              7 /* B */
-#define IPSECDOI_ATTR_COMP_DICT_SIZE          8 /* B */
-#define IPSECDOI_ATTR_COMP_PRIVALG            9 /* V */
-
-#ifdef HAVE_SECCTX
-#define IPSECDOI_ATTR_SECCTX		     10 /* V */
-#endif
-
-/* 4.6.1 Security Association Payload */
-struct ipsecdoi_pl_sa {
-	struct isakmp_gen h;
-	struct ipsecdoi_sa_b {
-		u_int32_t doi; /* Domain of Interpretation */
-		u_int32_t sit; /* Situation */
-	} b;
-	/* followed by Leveled Domain Identifier and so on. */
-} __attribute__((__packed__));
-
-struct ipsecdoi_secrecy_h {
-	u_int16_t len;
-	u_int16_t reserved;
-	/* followed by the value */
-} __attribute__((__packed__));
-
-/* 4.6.2 Identification Payload Content */
-struct ipsecdoi_pl_id {
-	struct isakmp_gen h;
-	struct ipsecdoi_id_b {
-		u_int8_t type;		/* ID Type */
-		u_int8_t proto_id;	/* Protocol ID */
-		u_int16_t port;		/* Port */
-	} b;
-	/* followed by Identification Data */
-} __attribute__((__packed__));
-
-#define IPSECDOI_ID_IPV4_ADDR                        1
-#define IPSECDOI_ID_FQDN                             2
-#define IPSECDOI_ID_USER_FQDN                        3
-#define IPSECDOI_ID_IPV4_ADDR_SUBNET                 4
-#define IPSECDOI_ID_IPV6_ADDR                        5
-#define IPSECDOI_ID_IPV6_ADDR_SUBNET                 6
-#define IPSECDOI_ID_IPV4_ADDR_RANGE                  7
-#define IPSECDOI_ID_IPV6_ADDR_RANGE                  8
-#define IPSECDOI_ID_DER_ASN1_DN                      9
-#define IPSECDOI_ID_DER_ASN1_GN                      10
-#define IPSECDOI_ID_KEY_ID                           11
-
-/* compressing doi type, it's internal use. */
-#define IDTYPE_UNDEFINED	0
-#define IDTYPE_FQDN		1
-#define IDTYPE_USERFQDN		2
-#define IDTYPE_KEYID		3
-#define IDTYPE_ADDRESS		4
-#define IDTYPE_ASN1DN		5
-#define IDTYPE_SUBNET		6
-
-/* qualifiers for KEYID (and maybe others) */
-#define IDQUAL_UNSPEC		0
-#define IDQUAL_FILE		1
-#define IDQUAL_TAG		2
-
-/* The use for checking proposal payload. This is not exchange type. */
-#define IPSECDOI_TYPE_PH1	0
-#define IPSECDOI_TYPE_PH2	1
-
-struct isakmpsa;
-struct ipsecdoi_pl_sa;
-struct saprop;
-struct saproto;
-struct satrns;
-struct prop_pair;
-
-extern int ipsecdoi_checkph1proposal __P((vchar_t *, struct ph1handle *));
-extern int ipsecdoi_selectph2proposal __P((struct ph2handle *));
-extern int ipsecdoi_checkph2proposal __P((struct ph2handle *));
-
-extern struct prop_pair **get_proppair __P((vchar_t *, int));
-extern vchar_t *get_sabyproppair __P((struct prop_pair *, struct ph1handle *));
-extern int ipsecdoi_updatespi __P((struct ph2handle *iph2));
-extern vchar_t *get_sabysaprop __P((struct saprop *, vchar_t *));
-extern int ipsecdoi_chkcmpids( const vchar_t *, const vchar_t *, int );
-extern int ipsecdoi_checkid1 __P((struct ph1handle *));
-extern int ipsecdoi_setid1 __P((struct ph1handle *));
-extern int set_identifier __P((vchar_t **, int, vchar_t *));
-extern int set_identifier_qual __P((vchar_t **, int, vchar_t *, int));
-extern int ipsecdoi_setid2 __P((struct ph2handle *));
-extern vchar_t *ipsecdoi_sockaddr2id __P((struct sockaddr *, u_int, u_int));
-extern int ipsecdoi_id2sockaddr __P((vchar_t *, struct sockaddr *,
-	u_int8_t *, u_int16_t *));
-extern char *ipsecdoi_id2str __P((const vchar_t *));
-extern vchar_t *ipsecdoi_sockrange2id __P((	struct sockaddr *,
-	struct sockaddr *, u_int));
-
-extern vchar_t *ipsecdoi_setph1proposal __P((struct isakmpsa *));
-extern int ipsecdoi_setph2proposal __P((struct ph2handle *));
-extern int ipsecdoi_transportmode __P((struct saprop *));
-extern int ipsecdoi_get_defaultlifetime __P((void));
-extern int ipsecdoi_checkalgtypes __P((int, int, int, int));
-extern int ipproto2doi __P((int));
-extern int doi2ipproto __P((int));
-
-extern int ipsecdoi_t2satrns __P((struct isakmp_pl_t *,
-	struct saprop *, struct saproto *, struct satrns *));
-extern int ipsecdoi_authalg2trnsid __P((int));
-extern int idtype2doi __P((int));
-extern int doi2idtype __P((int));
-
-
-#endif /* _IPSEC_DOI_H */
diff --git a/src/racoon/isakmp.c b/src/racoon/isakmp.c
deleted file mode 100644
index b9fc5ee..0000000
--- a/src/racoon/isakmp.c
+++ /dev/null
@@ -1,3643 +0,0 @@
-/*	$NetBSD: isakmp.c,v 1.20.6.13 2008/09/25 09:34:39 vanhu Exp $	*/
-
-/* Id: isakmp.c,v 1.74 2006/05/07 21:32:59 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/queue.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include PATH_IPSEC_H
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#include <netdb.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <ctype.h>
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "schedule.h"
-#include "debug.h"
-
-#include "remoteconf.h"
-#include "localconf.h"
-#include "grabmyaddr.h"
-#include "admin.h"
-#include "privsep.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "oakley.h"
-#include "evt.h"
-#include "handler.h"
-#include "ipsec_doi.h"
-#include "pfkey.h"
-#include "crypto_openssl.h"
-#include "policy.h"
-#include "isakmp_ident.h"
-#include "isakmp_agg.h"
-#include "isakmp_base.h"
-#include "isakmp_quick.h"
-#include "isakmp_inf.h"
-#include "isakmp_newg.h"
-#ifdef ENABLE_HYBRID
-#include "vendorid.h"
-#include "isakmp_xauth.h"
-#include "isakmp_unity.h"
-#include "isakmp_cfg.h"
-#endif
-#ifdef ENABLE_FRAG
-#include "isakmp_frag.h"
-#endif
-#include "strnames.h"
-
-#include <fcntl.h>
-
-#ifdef ENABLE_NATT
-# include "nattraversal.h"
-#endif
-# ifdef __linux__
-#  include <linux/udp.h>
-#  include <linux/ip.h>
-#  ifndef SOL_UDP
-#   define SOL_UDP 17
-#  endif
-#if defined(__ANDROID__)
-#include <netinet/udp.h>
-#endif
-# endif /* __linux__ */
-# if defined(__NetBSD__) || defined(__FreeBSD__) ||	\
-  (defined(__APPLE__) && defined(__MACH__))
-#  include <netinet/in.h>
-#  include <netinet/udp.h>
-#  include <netinet/in_systm.h>
-#  include <netinet/ip.h>
-#  define SOL_UDP IPPROTO_UDP
-# endif /* __NetBSD__ / __FreeBSD__ */
-
-#ifdef ANDROID_CHANGES
-#include "NetdClient.h"
-#endif
-
-static int nostate1 __P((struct ph1handle *, vchar_t *));
-static int nostate2 __P((struct ph2handle *, vchar_t *));
-
-extern caddr_t val2str(const char *, size_t);
-
-static int (*ph1exchange[][2][PHASE1ST_MAX])
-	__P((struct ph1handle *, vchar_t *)) = {
- /* error */
- { {}, {}, },
- /* Identity Protection exchange */
- {
-  { nostate1, ident_i1send, nostate1, ident_i2recv, ident_i2send,
-    ident_i3recv, ident_i3send, ident_i4recv, ident_i4send, nostate1, },
-  { nostate1, ident_r1recv, ident_r1send, ident_r2recv, ident_r2send,
-    ident_r3recv, ident_r3send, nostate1, nostate1, nostate1, },
- },
- /* Aggressive exchange */
- {
-  { nostate1, agg_i1send, nostate1, agg_i2recv, agg_i2send,
-    nostate1, nostate1, nostate1, nostate1, nostate1, },
-  { nostate1, agg_r1recv, agg_r1send, agg_r2recv, agg_r2send,
-    nostate1, nostate1, nostate1, nostate1, nostate1, },
- },
- /* Base exchange */
- {
-  { nostate1, base_i1send, nostate1, base_i2recv, base_i2send,
-    base_i3recv, base_i3send, nostate1, nostate1, nostate1, },
-  { nostate1, base_r1recv, base_r1send, base_r2recv, base_r2send,
-    nostate1, nostate1, nostate1, nostate1, nostate1, },
- },
-};
-
-static int (*ph2exchange[][2][PHASE2ST_MAX])
-	__P((struct ph2handle *, vchar_t *)) = {
- /* error */
- { {}, {}, },
- /* Quick mode for IKE */
- {
-  { nostate2, nostate2, quick_i1prep, nostate2, quick_i1send,
-    quick_i2recv, quick_i2send, quick_i3recv, nostate2, nostate2, },
-  { nostate2, quick_r1recv, quick_r1prep, nostate2, quick_r2send,
-    quick_r3recv, quick_r3prep, quick_r3send, nostate2, nostate2, }
- },
-};
-
-static u_char r_ck0[] = { 0,0,0,0,0,0,0,0 }; /* used to verify the r_ck. */
- 
-static int isakmp_main __P((vchar_t *, struct sockaddr *, struct sockaddr *));
-static int ph1_main __P((struct ph1handle *, vchar_t *));
-static int quick_main __P((struct ph2handle *, vchar_t *));
-static int isakmp_ph1begin_r __P((vchar_t *,
-	struct sockaddr *, struct sockaddr *, u_int8_t));
-static int isakmp_ph2begin_i __P((struct ph1handle *, struct ph2handle *));
-static int isakmp_ph2begin_r __P((struct ph1handle *, vchar_t *));
-static int etypesw1 __P((int));
-static int etypesw2 __P((int));
-#ifdef ENABLE_FRAG
-static int frag_handler(struct ph1handle *, 
-    vchar_t *, struct sockaddr *, struct sockaddr *);
-#endif
-
-/*
- * isakmp packet handler
- */
-int
-isakmp_handler(so_isakmp)
-	int so_isakmp;
-{
-	struct isakmp isakmp;
-	union {
-		char		buf[sizeof (isakmp) + 4];
-		u_int32_t	non_esp[2];
-		char		lbuf[sizeof(struct udphdr) + 
-#ifdef __linux
-				     sizeof(struct iphdr) + 
-#else
-				     sizeof(struct ip) + 
-#endif
-				     sizeof(isakmp) + 4];
-	} x;
-	struct sockaddr_storage remote;
-	struct sockaddr_storage local;
-	unsigned int remote_len = sizeof(remote);
-	unsigned int local_len = sizeof(local);
-	int len = 0, extralen = 0;
-	vchar_t *buf = NULL, *tmpbuf = NULL;
-	int error = -1, res;
-
-	/* read message by MSG_PEEK */
-	while ((len = recvfromto(so_isakmp, x.buf, sizeof(x),
-		    MSG_PEEK, (struct sockaddr *)&remote, &remote_len,
-		    (struct sockaddr *)&local, &local_len)) < 0) {
-		if (errno == EINTR)
-			continue;
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to receive isakmp packet: %s\n",
-			strerror (errno));
-		goto end;
-	}
-
-	/* keep-alive packet - ignore */
-	if (len == 1 && (x.buf[0]&0xff) == 0xff) {
-		/* Pull the keep-alive packet */
-		if ((len = recvfrom(so_isakmp, (char *)x.buf, 1,
-		    0, (struct sockaddr *)&remote, &remote_len)) != 1) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "failed to receive keep alive packet: %s\n",
-			    strerror (errno));
-		}
-		goto end;
-	}
-
-	/* Lucent IKE in UDP encapsulation */
-	{
-		struct udphdr *udp;
-#ifdef __linux__
-		struct iphdr *ip;
-
-		udp = (struct udphdr *)&x.lbuf[0];
-		if (ntohs(udp->dest) == 501) {
-			ip = (struct iphdr *)(x.lbuf + sizeof(*udp));
-			extralen += sizeof(*udp) + ip->ihl;
-		}
-#else
-		struct ip *ip;
-
-		udp = (struct udphdr *)&x.lbuf[0];
-		if (ntohs(udp->uh_dport) == 501) {
-			ip = (struct ip *)(x.lbuf + sizeof(*udp));
-			extralen += sizeof(*udp) + ip->ip_hl;
-		}
-#endif
-	}	
-
-#ifdef ENABLE_NATT
-	/* we don't know about portchange yet, 
-	   look for non-esp marker instead */
-	if (x.non_esp[0] == 0 && x.non_esp[1] != 0)
-		extralen = NON_ESP_MARKER_LEN;
-#endif
-
-	/* now we know if there is an extra non-esp 
-	   marker at the beginning or not */
-	memcpy ((char *)&isakmp, x.buf + extralen, sizeof (isakmp));
-
-	/* check isakmp header length, as well as sanity of header length */
-	if (len < sizeof(isakmp) || ntohl(isakmp.len) < sizeof(isakmp)) {
-		plog(LLV_ERROR, LOCATION, (struct sockaddr *)&remote,
-			"packet shorter than isakmp header size (%u, %u, %zu)\n",
-			len, ntohl(isakmp.len), sizeof(isakmp));
-		/* dummy receive */
-		if ((len = recvfrom(so_isakmp, (char *)&isakmp, sizeof(isakmp),
-			    0, (struct sockaddr *)&remote, &remote_len)) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to receive isakmp packet: %s\n",
-				strerror (errno));
-		}
-		goto end;
-	}
-
-	/* reject it if the size is tooooo big. */
-	if (ntohl(isakmp.len) > 0xffff) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"the length in the isakmp header is too big.\n");
-		if ((len = recvfrom(so_isakmp, (char *)&isakmp, sizeof(isakmp),
-			    0, (struct sockaddr *)&remote, &remote_len)) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to receive isakmp packet: %s\n",
-				strerror (errno));
-		}
-		goto end;
-	}
-
-	/* read real message */
-	if ((tmpbuf = vmalloc(ntohl(isakmp.len) + extralen)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate reading buffer (%u Bytes)\n",
-			ntohl(isakmp.len) + extralen);
-		/* dummy receive */
-		if ((len = recvfrom(so_isakmp, (char *)&isakmp, sizeof(isakmp),
-			    0, (struct sockaddr *)&remote, &remote_len)) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to receive isakmp packet: %s\n", 
-				strerror (errno));
-		}
-		goto end;
-	}
-
-	while ((len = recvfromto(so_isakmp, (char *)tmpbuf->v, tmpbuf->l,
-	                    0, (struct sockaddr *)&remote, &remote_len,
-	                    (struct sockaddr *)&local, &local_len)) < 0) {
-		if (errno == EINTR)
-			continue;
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to receive isakmp packet: %s\n",
-			strerror (errno));
-		goto end;
-	}
-
-	if ((buf = vmalloc(len - extralen)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate reading buffer (%u Bytes)\n",
-			(len - extralen));
-		goto end;
-	}
-	
-	memcpy (buf->v, tmpbuf->v + extralen, buf->l);
-
-	len -= extralen;
-	
-	if (len != buf->l) {
-		plog(LLV_ERROR, LOCATION, (struct sockaddr *)&remote,
-			"received invalid length (%d != %zu), why ?\n",
-			len, buf->l);
-		goto end;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"%d bytes message received %s\n",
-		len, saddr2str_fromto("from %s to %s", 
-			(struct sockaddr *)&remote,
-			(struct sockaddr *)&local));
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-	/* avoid packets with malicious port/address */
-	if (extract_port((struct sockaddr *)&remote) == 0) {
-		plog(LLV_ERROR, LOCATION, (struct sockaddr *)&remote,
-			"src port == 0 (valid as UDP but not with IKE)\n");
-		goto end;
-	}
-
-	/* XXX: check sender whether to be allowed or not to accept */
-
-	/* XXX: I don't know how to check isakmp half connection attack. */
-
-	/* simply reply if the packet was processed. */
-	res=check_recvdpkt((struct sockaddr *)&remote,(struct sockaddr *)&local, buf);
-	if (res) {
-		plog(LLV_NOTIFY, LOCATION, NULL,
-			"the packet is retransmitted by %s (%d).\n",
-			 saddr2str((struct sockaddr *)&remote), res);
-		error = 0;
-		goto end;
-	}
-
-	/* isakmp main routine */
-	if (isakmp_main(buf, (struct sockaddr *)&remote,
-			(struct sockaddr *)&local) != 0) goto end;
-
-	error = 0;
-
-end:
-	if (tmpbuf != NULL)
-		vfree(tmpbuf);
-	if (buf != NULL)
-		vfree(buf);
-
-	return(error);
-}
-
-/*
- * main processing to handle isakmp payload
- */
-static int
-isakmp_main(msg, remote, local)
-	vchar_t *msg;
-	struct sockaddr *remote, *local;
-{
-	struct isakmp *isakmp = (struct isakmp *)msg->v;
-	isakmp_index *index = (isakmp_index *)isakmp;
-	u_int32_t msgid = isakmp->msgid;
-	struct ph1handle *iph1;
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(msg, remote, local, 0);
-#endif
-
-	/* the initiator's cookie must not be zero */
-	if (memcmp(&isakmp->i_ck, r_ck0, sizeof(cookie_t)) == 0) {
-		plog(LLV_ERROR, LOCATION, remote,
-			"malformed cookie received.\n");
-		return -1;
-	}
-
-	/* Check the Major and Minor Version fields. */
-	/*
-	 * XXX Is is right to check version here ?
-	 * I think it may no be here because the version depends
-	 * on exchange status.
-	 */
-	if (isakmp->v < ISAKMP_VERSION_NUMBER) {
-		if (ISAKMP_GETMAJORV(isakmp->v) < ISAKMP_MAJOR_VERSION) {
-			plog(LLV_ERROR, LOCATION, remote,
-				"invalid major version %d.\n",
-				ISAKMP_GETMAJORV(isakmp->v));
-			return -1;
-		}
-#if ISAKMP_MINOR_VERSION > 0
-		if (ISAKMP_GETMINORV(isakmp->v) < ISAKMP_MINOR_VERSION) {
-			plog(LLV_ERROR, LOCATION, remote,
-				"invalid minor version %d.\n",
-				ISAKMP_GETMINORV(isakmp->v));
-			return -1;
-		}
-#endif
-	}
-
-	/* check the Flags field. */
-	/* XXX How is the exclusive check, E and A ? */
-	if (isakmp->flags & ~(ISAKMP_FLAG_E | ISAKMP_FLAG_C | ISAKMP_FLAG_A)) {
-		plog(LLV_ERROR, LOCATION, remote,
-			"invalid flag 0x%02x.\n", isakmp->flags);
-		return -1;
-	}
-
-	/* ignore commit bit. */
-	if (ISSET(isakmp->flags, ISAKMP_FLAG_C)) {
-		if (isakmp->msgid == 0) {
-			isakmp_info_send_nx(isakmp, remote, local,
-				ISAKMP_NTYPE_INVALID_FLAGS, NULL);
-			plog(LLV_ERROR, LOCATION, remote,
-				"Commit bit on phase1 forbidden.\n");
-			return -1;
-		}
-	}
-
-	iph1 = getph1byindex(index);
-	if (iph1 != NULL) {
-		/* validity check */
-		if (memcmp(&isakmp->r_ck, r_ck0, sizeof(cookie_t)) == 0 &&
-		    iph1->side == INITIATOR) {
-			plog(LLV_DEBUG, LOCATION, remote,
-				"malformed cookie received or "
-				"the initiator's cookies collide.\n");
-			return -1;
-		}
-
-#ifdef ENABLE_NATT
-		/* Floating ports for NAT-T */
-		if (NATT_AVAILABLE(iph1) &&
-		    ! (iph1->natt_flags & NAT_PORTS_CHANGED) &&
-		    ((cmpsaddrstrict(iph1->remote, remote) != 0) ||
-		    (cmpsaddrstrict(iph1->local, local) != 0)))
-		{
-			/* prevent memory leak */
-			racoon_free(iph1->remote);
-			racoon_free(iph1->local);
-			iph1->remote = NULL;
-			iph1->local = NULL;
-
-			/* copy-in new addresses */
-			iph1->remote = dupsaddr(remote);
-			if (iph1->remote == NULL) {
-           			plog(LLV_ERROR, LOCATION, iph1->remote,
-				   "phase1 failed: dupsaddr failed.\n");
-				remph1(iph1);
-				delph1(iph1);
-				return -1;
-			}
-			iph1->local = dupsaddr(local);
-			if (iph1->local == NULL) {
-           			plog(LLV_ERROR, LOCATION, iph1->remote,
-				   "phase1 failed: dupsaddr failed.\n");
-				remph1(iph1);
-				delph1(iph1);
-				return -1;
-			}
-
-			/* set the flag to prevent further port floating
-			   (FIXME: should we allow it? E.g. when the NAT gw 
-			    is rebooted?) */
-			iph1->natt_flags |= NAT_PORTS_CHANGED | NAT_ADD_NON_ESP_MARKER;
-			
-			/* print some neat info */
-			plog (LLV_INFO, LOCATION, NULL, 
-			      "NAT-T: ports changed to: %s\n",
-			      saddr2str_fromto ("%s<->%s", iph1->remote, iph1->local));
-
-			natt_keepalive_add_ph1 (iph1);
-		}
-#endif
-
-		/* must be same addresses in one stream of a phase at least. */
-		if (cmpsaddrstrict(iph1->remote, remote) != 0) {
-			char *saddr_db, *saddr_act;
-
-			saddr_db = racoon_strdup(saddr2str(iph1->remote));
-			saddr_act = racoon_strdup(saddr2str(remote));
-			STRDUP_FATAL(saddr_db);
-			STRDUP_FATAL(saddr_act);
-
-			plog(LLV_WARNING, LOCATION, remote,
-				"remote address mismatched. db=%s, act=%s\n",
-				saddr_db, saddr_act);
-
-			racoon_free(saddr_db);
-			racoon_free(saddr_act);
-		}
-
-		/*
-		 * don't check of exchange type here because other type will be
-		 * with same index, for example, informational exchange.
-		 */
-
-		/* XXX more acceptable check */
-	}
-
-	switch (isakmp->etype) {
-	case ISAKMP_ETYPE_IDENT:
-	case ISAKMP_ETYPE_AGG:
-	case ISAKMP_ETYPE_BASE:
-		/* phase 1 validity check */
-		if (isakmp->msgid != 0) {
-			plog(LLV_ERROR, LOCATION, remote,
-				"message id should be zero in phase1.\n");
-			return -1;
-		}
-
-		/* search for isakmp status record of phase 1 */
-		if (iph1 == NULL) {
-			/*
-			 * the packet must be the 1st message from a initiator
-			 * or the 2nd message from the responder.
-			 */
-
-			/* search for phase1 handle by index without r_ck */
-			iph1 = getph1byindex0(index);
-			if (iph1 == NULL) {
-				/*it must be the 1st message from a initiator.*/
-				if (memcmp(&isakmp->r_ck, r_ck0,
-					sizeof(cookie_t)) != 0) {
-
-					plog(LLV_DEBUG, LOCATION, remote,
-						"malformed cookie received "
-						"or the spi expired.\n");
-					return -1;
-				}
-
-				/* it must be responder's 1st exchange. */
-				if (isakmp_ph1begin_r(msg, remote, local,
-					isakmp->etype) < 0)
-					return -1;
-				break;
-
-				/*NOTREACHED*/
-			}
-
-			/* it must be the 2nd message from the responder. */
-			if (iph1->side != INITIATOR) {
-				plog(LLV_DEBUG, LOCATION, remote,
-					"malformed cookie received. "
-					"it has to be as the initiator.  %s\n",
-					isakmp_pindex(&iph1->index, 0));
-				return -1;
-			}
-		}
-
-		/*
-		 * Don't delete phase 1 handler when the exchange type
-		 * in handler is not equal to packet's one because of no
-		 * authencication completed.
-		 */
-		if (iph1->etype != isakmp->etype) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"exchange type is mismatched: "
-				"db=%s packet=%s, ignore it.\n",
-				s_isakmp_etype(iph1->etype),
-				s_isakmp_etype(isakmp->etype));
-			return -1;
-		}
-
-#ifdef ENABLE_FRAG
-		if (isakmp->np == ISAKMP_NPTYPE_FRAG)
-			return frag_handler(iph1, msg, remote, local);
-#endif
-
-		/* call main process of phase 1 */
-		if (ph1_main(iph1, msg) < 0) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"phase1 negotiation failed.\n");
-			remph1(iph1);
-			delph1(iph1);
-			return -1;
-		}
-		break;
-
-	case ISAKMP_ETYPE_AUTH:
-		plog(LLV_INFO, LOCATION, remote,
-			"unsupported exchange %d received.\n",
-			isakmp->etype);
-		break;
-
-	case ISAKMP_ETYPE_INFO:
-	case ISAKMP_ETYPE_ACKINFO:
-		/*
-		 * iph1 must be present for Information message.
-		 * if iph1 is null then trying to get the phase1 status
-		 * as the packet from responder againt initiator's 1st
-		 * exchange in phase 1.
-		 * NOTE: We think such informational exchange should be ignored.
-		 */
-		if (iph1 == NULL) {
-			iph1 = getph1byindex0(index);
-			if (iph1 == NULL) {
-				plog(LLV_ERROR, LOCATION, remote,
-					"unknown Informational "
-					"exchange received.\n");
-				return -1;
-			}
-			if (cmpsaddrstrict(iph1->remote, remote) != 0) {
-				plog(LLV_WARNING, LOCATION, remote,
-					"remote address mismatched. "
-					"db=%s\n",
-					saddr2str(iph1->remote));
-			}
-		}
-
-#ifdef ENABLE_FRAG
-		if (isakmp->np == ISAKMP_NPTYPE_FRAG)
-			return frag_handler(iph1, msg, remote, local);
-#endif
-
-		if (isakmp_info_recv(iph1, msg) < 0)
-			return -1;
-		break;
-
-	case ISAKMP_ETYPE_QUICK:
-	{
-		struct ph2handle *iph2;
-
-		if (iph1 == NULL) {
-			isakmp_info_send_nx(isakmp, remote, local,
-				ISAKMP_NTYPE_INVALID_COOKIE, NULL);
-			plog(LLV_ERROR, LOCATION, remote,
-				"can't start the quick mode, "
-				"there is no ISAKMP-SA, %s\n",
-				isakmp_pindex((isakmp_index *)&isakmp->i_ck,
-					isakmp->msgid));
-			return -1;
-		}
-#ifdef ENABLE_HYBRID
-		/* Reinit the IVM if it's still there */		
-		if (iph1->mode_cfg && iph1->mode_cfg->ivm) {
-			oakley_delivm(iph1->mode_cfg->ivm);
-			iph1->mode_cfg->ivm = NULL;
-		}
-#endif
-#ifdef ENABLE_FRAG
-		if (isakmp->np == ISAKMP_NPTYPE_FRAG)
-			return frag_handler(iph1, msg, remote, local);
-#endif
-
-		/* check status of phase 1 whether negotiated or not. */
-		if (iph1->status != PHASE1ST_ESTABLISHED) {
-			plog(LLV_ERROR, LOCATION, remote,
-				"can't start the quick mode, "
-				"there is no valid ISAKMP-SA, %s\n",
-				isakmp_pindex(&iph1->index, iph1->msgid));
-			return -1;
-		}
-
-		/* search isakmp phase 2 stauts record. */
-		iph2 = getph2bymsgid(iph1, msgid);
-		if (iph2 == NULL) {
-			/* it must be new negotiation as responder */
-			if (isakmp_ph2begin_r(iph1, msg) < 0)
-				return -1;
-			return 0;
-			/*NOTREACHED*/
-		}
-
-		/* commit bit. */
-		/* XXX
-		 * we keep to set commit bit during negotiation.
-		 * When SA is configured, bit will be reset.
-		 * XXX
-		 * don't initiate commit bit.  should be fixed in the future.
-		 */
-		if (ISSET(isakmp->flags, ISAKMP_FLAG_C))
-			iph2->flags |= ISAKMP_FLAG_C;
-
-		/* call main process of quick mode */
-		if (quick_main(iph2, msg) < 0) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"phase2 negotiation failed.\n");
-			unbindph12(iph2);
-			remph2(iph2);
-			delph2(iph2);
-			return -1;
-		}
-	}
-		break;
-
-	case ISAKMP_ETYPE_NEWGRP:
-		if (iph1 == NULL) {
-			plog(LLV_ERROR, LOCATION, remote,
-				"Unknown new group mode exchange, "
-				"there is no ISAKMP-SA.\n");
-			return -1;
-		}
-
-#ifdef ENABLE_FRAG
-		if (isakmp->np == ISAKMP_NPTYPE_FRAG)
-			return frag_handler(iph1, msg, remote, local);
-#endif
-
-		isakmp_newgroup_r(iph1, msg);
-		break;
-
-#ifdef ENABLE_HYBRID
-	case ISAKMP_ETYPE_CFG:
-		if (iph1 == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "mode config %d from %s, "
-			     "but we have no ISAKMP-SA.\n",
-			     isakmp->etype, saddr2str(remote));
-			return -1;
-		}
-
-#ifdef ENABLE_FRAG
-		if (isakmp->np == ISAKMP_NPTYPE_FRAG)
-			return frag_handler(iph1, msg, remote, local);
-#endif
-
-		isakmp_cfg_r(iph1, msg);
-		break;
-#endif	 
-
-	case ISAKMP_ETYPE_NONE:
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid exchange type %d from %s.\n",
-			isakmp->etype, saddr2str(remote));
-		return -1;
-	}
-
-	return 0;
-}
-
-/*
- * main function of phase 1.
- */
-static int
-ph1_main(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	int error;
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-
-	/* ignore a packet */
-	if (iph1->status == PHASE1ST_ESTABLISHED)
-		return 0;
-
-#ifdef ENABLE_STATS
-	gettimeofday(&start, NULL);
-#endif
-	/* receive */
-	if (ph1exchange[etypesw1(iph1->etype)]
-		       [iph1->side]
-		       [iph1->status] == NULL) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"why isn't the function defined.\n");
-		return -1;
-	}
-	error = (ph1exchange[etypesw1(iph1->etype)]
-			    [iph1->side]
-			    [iph1->status])(iph1, msg);
-	if (error != 0) {
-
-		/* XXX
-		 * When an invalid packet is received on phase1, it should
-		 * be selected to process this packet.  That is to respond
-		 * with a notify and delete phase 1 handler, OR not to respond
-		 * and keep phase 1 handler. However, in PHASE1ST_START when
-		 * acting as RESPONDER we must not keep phase 1 handler or else
-		 * it will stay forever.
-		 */
-
-		if (iph1->side == RESPONDER && iph1->status == PHASE1ST_START) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"failed to pre-process packet.\n");
-			return -1;
-		} else {
-			/* ignore the error and keep phase 1 handler */
-			return 0;
-		}
-	}
-
-#ifndef ENABLE_FRAG
-	/* free resend buffer */
-	if (iph1->sendbuf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no buffer found as sendbuf\n"); 
-		return -1;
-	}
-#endif
-
-	VPTRINIT(iph1->sendbuf);
-
-	/* turn off schedule */
-	SCHED_KILL(iph1->scr);
-
-	/* send */
-	plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-	if ((ph1exchange[etypesw1(iph1->etype)]
-			[iph1->side]
-			[iph1->status])(iph1, msg) != 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"failed to process packet.\n");
-		return -1;
-	}
-
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s): %8.6f",
-		"phase1", s_isakmp_state(iph1->etype, iph1->side, iph1->status),
-		timedelta(&start, &end));
-#endif
-	if (iph1->status == PHASE1ST_ESTABLISHED) {
-
-#ifdef ENABLE_STATS
-		gettimeofday(&iph1->end, NULL);
-		syslog(LOG_NOTICE, "%s(%s): %8.6f",
-			"phase1", s_isakmp_etype(iph1->etype),
-			timedelta(&iph1->start, &iph1->end));
-#endif
-
-		/* save created date. */
-		(void)time(&iph1->created);
-
-		/* add to the schedule to expire, and seve back pointer. */
-		iph1->sce = sched_new(iph1->approval->lifetime,
-		    isakmp_ph1expire_stub, iph1);
-#ifdef ENABLE_HYBRID
-		if (iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_XAUTH) {
-			switch(AUTHMETHOD(iph1)) {
-			case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-			case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-				xauth_sendreq(iph1);
-				/* XXX Don't process INITIAL_CONTACT */
-				iph1->rmconf->ini_contact = 0;
-				break;
-			default:
-				break;
-			}
-		}
-#endif
-#ifdef ENABLE_DPD
-		/* Schedule the r_u_there.... */
-		if(iph1->dpd_support && iph1->rmconf->dpd_interval)
-			isakmp_sched_r_u(iph1, 0);
-#endif
-
-		/* INITIAL-CONTACT processing */
-		/* don't anything if local test mode. */
-		if (!f_local
-		 && iph1->rmconf->ini_contact && !getcontacted(iph1->remote)) {
-			/* send INITIAL-CONTACT */
-			isakmp_info_send_n1(iph1,
-					ISAKMP_NTYPE_INITIAL_CONTACT, NULL);
-			/* insert a node into contacted list. */
-			if (inscontacted(iph1->remote) == -1) {
-				plog(LLV_ERROR, LOCATION, iph1->remote,
-					"failed to add contacted list.\n");
-				/* ignore */
-			}
-		}
-
-		log_ph1established(iph1);
-		plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-
-		/* 
-		 * SA up shell script hook: do it now,except if
-		 * ISAKMP mode config was requested. In the later
-		 * case it is done when we receive the configuration.
-		 */
-		if ((iph1->status == PHASE1ST_ESTABLISHED) &&
-		    !iph1->rmconf->mode_cfg) { 
-			switch (AUTHMETHOD(iph1)) {
-#ifdef ENABLE_HYBRID
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-			case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-			/* Unimplemeted... */
-			case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-			case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-				break;
-#endif
-			default:
-				script_hook(iph1, SCRIPT_PHASE1_UP);
-				break;
-			}
-		}
-	}
-
-	return 0;
-}
-
-/*
- * main function of quick mode.
- */
-static int
-quick_main(iph2, msg)
-	struct ph2handle *iph2;
-	vchar_t *msg;
-{
-	struct isakmp *isakmp = (struct isakmp *)msg->v;
-	int error;
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-
-	/* ignore a packet */
-	if (iph2->status == PHASE2ST_ESTABLISHED
-	 || iph2->status == PHASE2ST_GETSPISENT)
-		return 0;
-
-#ifdef ENABLE_STATS
-	gettimeofday(&start, NULL);
-#endif
-
-	/* receive */
-	if (ph2exchange[etypesw2(isakmp->etype)]
-		       [iph2->side]
-		       [iph2->status] == NULL) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"why isn't the function defined.\n");
-		return -1;
-	}
-	error = (ph2exchange[etypesw2(isakmp->etype)]
-			    [iph2->side]
-			    [iph2->status])(iph2, msg);
-	if (error != 0) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"failed to pre-process packet.\n");
-		if (error == ISAKMP_INTERNAL_ERROR)
-			return 0;
-		isakmp_info_send_n1(iph2->ph1, error, NULL);
-		return -1;
-	}
-
-	/* when using commit bit, status will be reached here. */
-	if (iph2->status == PHASE2ST_ADDSA)
-		return 0;
-
-	/* free resend buffer */
-	if (iph2->sendbuf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no buffer found as sendbuf\n"); 
-		return -1;
-	}
-	VPTRINIT(iph2->sendbuf);
-
-	/* turn off schedule */
-	SCHED_KILL(iph2->scr);
-
-	/* send */
-	plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-	if ((ph2exchange[etypesw2(isakmp->etype)]
-			[iph2->side]
-			[iph2->status])(iph2, msg) != 0) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"failed to process packet.\n");
-		return -1;
-	}
-
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s): %8.6f",
-		"phase2",
-		s_isakmp_state(ISAKMP_ETYPE_QUICK, iph2->side, iph2->status),
-		timedelta(&start, &end));
-#endif
-
-	return 0;
-}
-
-/* new negotiation of phase 1 for initiator */
-int
-isakmp_ph1begin_i(rmconf, remote, local)
-	struct remoteconf *rmconf;
-	struct sockaddr *remote, *local;
-{
-	struct ph1handle *iph1;
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-
-	/* get new entry to isakmp status table. */
-	iph1 = newph1();
-	if (iph1 == NULL)
-		return -1;
-
-	iph1->status = PHASE1ST_START;
-	iph1->rmconf = rmconf;
-	iph1->side = INITIATOR;
-	iph1->version = ISAKMP_VERSION_NUMBER;
-	iph1->msgid = 0;
-	iph1->flags = 0;
-	iph1->ph2cnt = 0;
-#ifdef HAVE_GSSAPI
-	iph1->gssapi_state = NULL;
-#endif
-#ifdef ENABLE_HYBRID
-	if ((iph1->mode_cfg = isakmp_cfg_mkstate()) == NULL) {
-		delph1(iph1);
-		return -1;
-	}
-#endif
-#ifdef ENABLE_FRAG
-
-	if(rmconf->ike_frag == ISAKMP_FRAG_FORCE)
-		iph1->frag = 1;
-	else
-		iph1->frag = 0;
-	iph1->frag_chain = NULL;
-#endif
-	iph1->approval = NULL;
-
-	/* XXX copy remote address */
-	if (copy_ph1addresses(iph1, rmconf, remote, local) < 0) {
-		delph1(iph1);
-		return -1;
-	}
-
-	(void)insph1(iph1);
-
-	/* start phase 1 exchange */
-	iph1->etype = rmconf->etypes->type;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-    {
-	char *a;
-
-	a = racoon_strdup(saddr2str(iph1->local));
-	STRDUP_FATAL(a);
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"initiate new phase 1 negotiation: %s<=>%s\n",
-		a, saddr2str(iph1->remote));
-	racoon_free(a);
-    }
-	plog(LLV_INFO, LOCATION, NULL,
-		"begin %s mode.\n",
-		s_isakmp_etype(iph1->etype));
-
-#ifdef ENABLE_STATS
-	gettimeofday(&iph1->start, NULL);
-	gettimeofday(&start, NULL);
-#endif
-	/* start exchange */
-	if ((ph1exchange[etypesw1(iph1->etype)]
-			[iph1->side]
-			[iph1->status])(iph1, NULL) != 0) {
-		/* failed to start phase 1 negotiation */
-		remph1(iph1);
-		delph1(iph1);
-
-		return -1;
-	}
-
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s): %8.6f",
-		"phase1",
-		s_isakmp_state(iph1->etype, iph1->side, iph1->status),
-		timedelta(&start, &end));
-#endif
-
-	return 0;
-}
-
-/* new negotiation of phase 1 for responder */
-static int
-isakmp_ph1begin_r(vchar_t *msg, struct sockaddr *remote,
-                  struct sockaddr *local, u_int8_t etype)
-{
-	struct isakmp *isakmp = (struct isakmp *)msg->v;
-	struct remoteconf *rmconf;
-	struct ph1handle *iph1;
-	struct etypes *etypeok;
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-
-	/* look for my configuration */
-	rmconf = getrmconf(remote);
-	if (rmconf == NULL) {
-		plog(LLV_ERROR, LOCATION, remote,
-			"couldn't find "
-			"configuration.\n");
-		return -1;
-	}
-
-	/* check to be acceptable exchange type */
-	etypeok = check_etypeok(rmconf, etype);
-	if (etypeok == NULL) {
-		plog(LLV_ERROR, LOCATION, remote,
-			"not acceptable %s mode\n", s_isakmp_etype(etype));
-		return -1;
-	}
-
-	/* get new entry to isakmp status table. */
-	iph1 = newph1();
-	if (iph1 == NULL)
-		return -1;
-
-	memcpy(&iph1->index.i_ck, &isakmp->i_ck, sizeof(iph1->index.i_ck));
-	iph1->status = PHASE1ST_START;
-	iph1->rmconf = rmconf;
-	iph1->flags = 0;
-	iph1->side = RESPONDER;
-	iph1->etype = etypeok->type;
-	iph1->version = isakmp->v;
-	iph1->msgid = 0;
-#ifdef HAVE_GSSAPI
-	iph1->gssapi_state = NULL;
-#endif
-#ifdef ENABLE_HYBRID
-	if ((iph1->mode_cfg = isakmp_cfg_mkstate()) == NULL) {
-		delph1(iph1);
-		return -1;
-	}
-#endif
-#ifdef ENABLE_FRAG
-	iph1->frag = 0;
-	iph1->frag_chain = NULL;
-#endif
-	iph1->approval = NULL;
-
-#ifdef ENABLE_NATT
-	/* RFC3947 says that we MUST accept new phases1 on NAT-T floated port.
-	 * We have to setup this flag now to correctly generate the first reply.
-	 * Don't know if a better check could be done for that ?
-	 */
-	if(extract_port(local) == lcconf->port_isakmp_natt)
-		iph1->natt_flags |= (NAT_PORTS_CHANGED);
-#endif
-
-	/* copy remote address */
-	if (copy_ph1addresses(iph1, rmconf, remote, local) < 0) {
-		delph1(iph1);
-		return -1;
-	}
-	(void)insph1(iph1);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-    {
-	char *a;
-
-	a = racoon_strdup(saddr2str(iph1->local));
-	STRDUP_FATAL(a);
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"respond new phase 1 negotiation: %s<=>%s\n",
-		a, saddr2str(iph1->remote));
-	racoon_free(a);
-    }
-	plog(LLV_INFO, LOCATION, NULL,
-		"begin %s mode.\n", s_isakmp_etype(etype));
-
-#ifdef ENABLE_STATS
-	gettimeofday(&iph1->start, NULL);
-	gettimeofday(&start, NULL);
-#endif
-
-#ifndef ENABLE_FRAG
-
-	/* start exchange */
-	if ((ph1exchange[etypesw1(iph1->etype)]
-	                [iph1->side]
-	                [iph1->status])(iph1, msg) < 0
-	 || (ph1exchange[etypesw1(iph1->etype)]
-			[iph1->side]
-			[iph1->status])(iph1, msg) < 0) {
-		plog(LLV_ERROR, LOCATION, remote,
-			"failed to process packet.\n");
-		remph1(iph1);
-		delph1(iph1);
-		return -1;
-	}
-
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s): %8.6f",
-		"phase1",
-		s_isakmp_state(iph1->etype, iph1->side, iph1->status),
-		timedelta(&start, &end));
-#endif
-
-	return 0;
-
-#else /* ENABLE_FRAG */
-
-	/* now that we have a phase1 handle, feed back into our
-	 * main receive function to catch fragmented packets
-	 */
-
-	return isakmp_main(msg, remote, local);
-
-#endif /* ENABLE_FRAG */
-
-}
-
-/* new negotiation of phase 2 for initiator */
-static int
-isakmp_ph2begin_i(iph1, iph2)
-	struct ph1handle *iph1;
-	struct ph2handle *iph2;
-{
-#ifdef ENABLE_HYBRID
-	if (xauth_check(iph1) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "Attempt to start phase 2 whereas Xauth failed\n");
-		return -1;
-	}
-#endif
-
-	/* found ISAKMP-SA. */
-	plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-	plog(LLV_DEBUG, LOCATION, NULL, "begin QUICK mode.\n");
-    {
-	char *a;
-	a = racoon_strdup(saddr2str(iph2->src));
-	STRDUP_FATAL(a);
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"initiate new phase 2 negotiation: %s<=>%s\n",
-		a, saddr2str(iph2->dst));
-	racoon_free(a);
-    }
-
-#ifdef ENABLE_STATS
-	gettimeofday(&iph2->start, NULL);
-#endif
-	/* found isakmp-sa */
-	bindph12(iph1, iph2);
-	iph2->status = PHASE2ST_STATUS2;
-
-	if ((ph2exchange[etypesw2(ISAKMP_ETYPE_QUICK)]
-			 [iph2->side]
-			 [iph2->status])(iph2, NULL) < 0) {
-		unbindph12(iph2);
-		/* release ipsecsa handler due to internal error. */
-		remph2(iph2);
-		return -1;
-	}
-	return 0;
-}
-
-/* new negotiation of phase 2 for responder */
-static int
-isakmp_ph2begin_r(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	struct isakmp *isakmp = (struct isakmp *)msg->v;
-	struct ph2handle *iph2 = 0;
-	int error;
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-#ifdef ENABLE_HYBRID
-	if (xauth_check(iph1) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "Attempt to start phase 2 whereas Xauth failed\n");
-		return -1;
-	}
-#endif
-
-	iph2 = newph2();
-	if (iph2 == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate phase2 entry.\n");
-		return -1;
-	}
-
-	iph2->ph1 = iph1;
-	iph2->side = RESPONDER;
-	iph2->status = PHASE2ST_START;
-	iph2->flags = isakmp->flags;
-	iph2->msgid = isakmp->msgid;
-	iph2->seq = pk_getseq();
-	iph2->ivm = oakley_newiv2(iph1, iph2->msgid);
-	if (iph2->ivm == NULL) {
-		delph2(iph2);
-		return -1;
-	}
-	iph2->dst = dupsaddr(iph1->remote);	/* XXX should be considered */
-	if (iph2->dst == NULL) {
-		delph2(iph2);
-		return -1;
-	}
-	iph2->src = dupsaddr(iph1->local);	/* XXX should be considered */
-	if (iph2->src == NULL) {
-		delph2(iph2);
-		return -1;
-	}
-#if (!defined(ENABLE_NATT)) || (defined(BROKEN_NATT))
-	if (set_port(iph2->dst, 0) == NULL ||
-	    set_port(iph2->src, 0) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "invalid family: %d\n", iph2->dst->sa_family);
-		delph2(iph2);
-		return -1;
-	}
-#endif
-
-	/* add new entry to isakmp status table */
-	insph2(iph2);
-	bindph12(iph1, iph2);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-    {
-	char *a;
-
-	a = racoon_strdup(saddr2str(iph2->src));
-	STRDUP_FATAL(a);
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"respond new phase 2 negotiation: %s<=>%s\n",
-		a, saddr2str(iph2->dst));
-	racoon_free(a);
-    }
-
-#ifdef ENABLE_STATS
-	gettimeofday(&start, NULL);
-#endif
-
-	error = (ph2exchange[etypesw2(ISAKMP_ETYPE_QUICK)]
-	                   [iph2->side]
-	                   [iph2->status])(iph2, msg);
-	if (error != 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"failed to pre-process packet.\n");
-		if (error != ISAKMP_INTERNAL_ERROR)
-			isakmp_info_send_n1(iph2->ph1, error, NULL);
-		/*
-		 * release handler because it's wrong that ph2handle is kept
-		 * after failed to check message for responder's.
-		 */
-		unbindph12(iph2);
-		remph2(iph2);
-		delph2(iph2);
-		return -1;
-	}
-
-	/* send */
-	plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-	if ((ph2exchange[etypesw2(isakmp->etype)]
-			[iph2->side]
-			[iph2->status])(iph2, msg) < 0) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"failed to process packet.\n");
-		/* don't release handler */
-		return -1;
-	}
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s): %8.6f",
-		"phase2",
-		s_isakmp_state(ISAKMP_ETYPE_QUICK, iph2->side, iph2->status),
-		timedelta(&start, &end));
-#endif
-
-	return 0;
-}
-
-/*
- * parse ISAKMP payloads, without ISAKMP base header.
- */
-vchar_t *
-isakmp_parsewoh(np0, gen, len)
-	int np0;
-	struct isakmp_gen *gen;
-	int len;
-{
-	u_char np = np0 & 0xff;
-	int tlen, plen;
-	vchar_t *result;
-	struct isakmp_parse_t *p, *ep;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "begin.\n");
-
-	/*
-	 * 5 is a magic number, but any value larger than 2 should be fine
-	 * as we do vrealloc() in the following loop.
-	 */
-	result = vmalloc(sizeof(struct isakmp_parse_t) * 5);
-	if (result == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer.\n");
-		return NULL;
-	}
-	p = (struct isakmp_parse_t *)result->v;
-	ep = (struct isakmp_parse_t *)(result->v + result->l - sizeof(*ep));
-
-	tlen = len;
-
-	/* parse through general headers */
-	while (0 < tlen && np != ISAKMP_NPTYPE_NONE) {
-		if (tlen <= sizeof(struct isakmp_gen)) {
-			/* don't send information, see isakmp_ident_r1() */
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid length of payload\n");
-			vfree(result);
-			return NULL;
-		}
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"seen nptype=%u(%s)\n", np, s_isakmp_nptype(np));
-
-		p->type = np;
-		p->len = ntohs(gen->len);
-		if (p->len < sizeof(struct isakmp_gen) || p->len > tlen) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"invalid length of payload\n");
-			vfree(result);
-			return NULL;
-		}
-		p->ptr = gen;
-		p++;
-		if (ep <= p) {
-			int off;
-
-			off = p - (struct isakmp_parse_t *)result->v;
-			result = vrealloc(result, result->l * 2);
-			if (result == NULL) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-					"failed to realloc buffer.\n");
-				vfree(result);
-				return NULL;
-			}
-			ep = (struct isakmp_parse_t *)
-				(result->v + result->l - sizeof(*ep));
-			p = (struct isakmp_parse_t *)result->v;
-			p += off;
-		}
-
-		np = gen->np;
-		plen = ntohs(gen->len);
-		gen = (struct isakmp_gen *)((caddr_t)gen + plen);
-		tlen -= plen;
-	}
-	p->type = ISAKMP_NPTYPE_NONE;
-	p->len = 0;
-	p->ptr = NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "succeed.\n");
-
-	return result;
-}
-
-/*
- * parse ISAKMP payloads, including ISAKMP base header.
- */
-vchar_t *
-isakmp_parse(buf)
-	vchar_t *buf;
-{
-	struct isakmp *isakmp = (struct isakmp *)buf->v;
-	struct isakmp_gen *gen;
-	int tlen;
-	vchar_t *result;
-	u_char np;
-
-	np = isakmp->np;
-	gen = (struct isakmp_gen *)(buf->v + sizeof(*isakmp));
-	tlen = buf->l - sizeof(struct isakmp);
-	result = isakmp_parsewoh(np, gen, tlen);
-
-	return result;
-}
-
-/* %%% */
-int
-isakmp_init()
-{
-	/* initialize a isakmp status table */
-	initph1tree();
-	initph2tree();
-	initctdtree();
-	init_recvdpkt();
-
-	if (isakmp_open() < 0)
-		goto err;
-
-	return(0);
-
-err:
-	isakmp_close();
-	return(-1);
-}
-
-/*
- * make strings containing i_cookie + r_cookie + msgid
- */
-const char *
-isakmp_pindex(index, msgid)
-	const isakmp_index *index;
-	const u_int32_t msgid;
-{
-	static char buf[64];
-	const u_char *p;
-	int i, j;
-
-	memset(buf, 0, sizeof(buf));
-
-	/* copy index */
-	p = (const u_char *)index;
-	for (j = 0, i = 0; i < sizeof(isakmp_index); i++) {
-		snprintf((char *)&buf[j], sizeof(buf) - j, "%02x", p[i]);
-		j += 2;
-		switch (i) {
-		case 7:
-			buf[j++] = ':';
-		}
-	}
-
-	if (msgid == 0)
-		return buf;
-
-	/* copy msgid */
-	snprintf((char *)&buf[j], sizeof(buf) - j, ":%08x", ntohs(msgid));
-
-	return buf;
-}
-
-/* open ISAKMP sockets. */
-int
-isakmp_open()
-{
-	const int yes = 1;
-	int ifnum = 0, encap_ifnum = 0;
-#ifdef INET6
-	int pktinfo;
-#endif
-	struct myaddrs *p;
-
-	for (p = lcconf->myaddrs; p; p = p->next) {
-		if (!p->addr)
-			continue;
-
-		/* warn if wildcard address - should we forbid this? */
-		switch (p->addr->sa_family) {
-		case AF_INET:
-			if (((struct sockaddr_in *)p->addr)->sin_addr.s_addr == 0)
-				plog(LLV_WARNING, LOCATION, NULL,
-					"listening to wildcard address,"
-					"broadcast IKE packet may kill you\n");
-			break;
-#ifdef INET6
-		case AF_INET6:
-			if (IN6_IS_ADDR_UNSPECIFIED(&((struct sockaddr_in6 *)p->addr)->sin6_addr))
-				plog(LLV_WARNING, LOCATION, NULL,
-					"listening to wildcard address, "
-					"broadcast IKE packet may kill you\n");
-			break;
-#endif
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"unsupported address family %d\n",
-				lcconf->default_af);
-			goto err_and_next;
-		}
-
-#ifdef INET6
-		if (p->addr->sa_family == AF_INET6 &&
-		    IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6 *)
-					    p->addr)->sin6_addr))
-		{
-			plog(LLV_DEBUG, LOCATION, NULL, 
-				"Ignoring multicast address %s\n",
-				saddr2str(p->addr));
-				racoon_free(p->addr);
-				p->addr = NULL;
-			continue;
-		}
-#endif
-
-		if ((p->sock = socket(p->addr->sa_family, SOCK_DGRAM, 0)) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"socket (%s)\n", strerror(errno));
-			goto err_and_next;
-		}
-#ifdef ANDROID_CHANGES
-		protectFromVpn(p->sock);
-#endif
-
-		if (fcntl(p->sock, F_SETFL, O_NONBLOCK) == -1)
-			plog(LLV_WARNING, LOCATION, NULL,
-				"failed to put socket in non-blocking mode\n");
-
-		/* receive my interface address on inbound packets. */
-		switch (p->addr->sa_family) {
-		case AF_INET:
-			if (setsockopt(p->sock, IPPROTO_IP,
-#ifdef __linux__
-				       IP_PKTINFO,
-#else
-				       IP_RECVDSTADDR,
-#endif
-					(const void *)&yes, sizeof(yes)) < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"setsockopt IP_RECVDSTADDR (%s)\n", 
-					strerror(errno));
-				goto err_and_next;
-			}
-			break;
-#ifdef INET6
-		case AF_INET6:
-#ifdef INET6_ADVAPI
-#ifdef IPV6_RECVPKTINFO
-			pktinfo = IPV6_RECVPKTINFO;
-#else  /* old adv. API */
-			pktinfo = IPV6_PKTINFO;
-#endif /* IPV6_RECVPKTINFO */
-#else
-			pktinfo = IPV6_RECVDSTADDR;
-#endif
-			if (setsockopt(p->sock, IPPROTO_IPV6, pktinfo,
-					(const void *)&yes, sizeof(yes)) < 0)
-			{
-				plog(LLV_ERROR, LOCATION, NULL,
-					"setsockopt IPV6_RECVDSTADDR (%d):%s\n",
-					pktinfo, strerror(errno));
-				goto err_and_next;
-			}
-			break;
-#endif
-		}
-
-#ifdef IPV6_USE_MIN_MTU
-		if (p->addr->sa_family == AF_INET6 &&
-		    setsockopt(p->sock, IPPROTO_IPV6, IPV6_USE_MIN_MTU,
-		    (void *)&yes, sizeof(yes)) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "setsockopt IPV6_USE_MIN_MTU (%s)\n", 
-			    strerror(errno));
-			return -1;
-		}
-#endif
-
-		if (setsockopt_bypass(p->sock, p->addr->sa_family) < 0)
-			goto err_and_next;
-
-		if (bind(p->sock, p->addr, sysdep_sa_len(p->addr)) < 0) {
-			plog(LLV_ERROR, LOCATION, p->addr,
-				"failed to bind to address %s (%s).\n",
-				saddr2str(p->addr), strerror(errno));
-			close(p->sock);
-			goto err_and_next;
-		}
-
-		ifnum++;
-
-		plog(LLV_INFO, LOCATION, NULL,
-			"%s used as isakmp port (fd=%d)\n",
-			saddr2str(p->addr), p->sock);
-
-#ifdef ENABLE_NATT
-		if (p->addr->sa_family == AF_INET) {
-			int option = -1;
-
-
-			if(p->udp_encap)
-				option = UDP_ENCAP_ESPINUDP;
-#if defined(ENABLE_NATT_00) || defined(ENABLE_NATT_01)
-			else
-				option = UDP_ENCAP_ESPINUDP_NON_IKE;
-#endif
-			if(option != -1){
-				if (setsockopt (p->sock, SOL_UDP, 
-				    UDP_ENCAP, &option, sizeof (option)) < 0) {
-					plog(LLV_WARNING, LOCATION, NULL,
-					    "setsockopt(%s): UDP_ENCAP %s\n",
-					    option == UDP_ENCAP_ESPINUDP ? "UDP_ENCAP_ESPINUDP" : "UDP_ENCAP_ESPINUDP_NON_IKE",
-						 strerror(errno));
-					goto skip_encap;
-				}
-				else {
-					plog(LLV_INFO, LOCATION, NULL,
-						 "%s used for NAT-T\n",
-						 saddr2str(p->addr));
-					encap_ifnum++;
-				}
-			}
-		}
-skip_encap:
-#endif
-		continue;
-
-	err_and_next:
-		racoon_free(p->addr);
-		p->addr = NULL;
-		if (! lcconf->autograbaddr && lcconf->strict_address)
-			return -1;
-		continue;
-	}
-
-	if (!ifnum) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no address could be bound.\n");
-		return -1;
-	}
-
-#ifdef ENABLE_NATT
-	if (natt_enabled_in_rmconf() && !encap_ifnum) {
-		plog(LLV_WARNING, LOCATION, NULL, 
-			"NAT-T is enabled in at least one remote{} section,\n");
-		plog(LLV_WARNING, LOCATION, NULL, 
-			"but no 'isakmp_natt' address was specified!\n");
-	}
-#endif
-
-	return 0;
-}
-
-void
-isakmp_close()
-{
-#ifndef ANDROID_PATCHED
-	struct myaddrs *p, *next;
-
-	for (p = lcconf->myaddrs; p; p = next) {
-		next = p->next;
-
-		if (!p->addr) {
-			racoon_free(p);
-			continue;
-		}
-		close(p->sock);
-		racoon_free(p->addr);
-		racoon_free(p);
-	}
-
-	lcconf->myaddrs = NULL;
-#endif
-}
-
-int
-isakmp_send(iph1, sbuf)
-	struct ph1handle *iph1;
-	vchar_t *sbuf;
-{
-	int len = 0;
-	int s;
-	vchar_t *vbuf = NULL, swap;
-
-#ifdef ENABLE_NATT
-	size_t extralen = NON_ESP_MARKER_USE(iph1) ? NON_ESP_MARKER_LEN : 0;
-
-	/* Check if NON_ESP_MARKER_LEN is already there (happens when resending packets)
-	 */
-	if(extralen == NON_ESP_MARKER_LEN &&
-	   *(u_int32_t *)sbuf->v == 0)
-		extralen = 0;
-
-#ifdef ENABLE_FRAG
-	/* 
-	 * Do not add the non ESP marker for a packet that will
-	 * be fragmented. The non ESP marker should appear in 
-	 * all fragment's packets, but not in the fragmented packet
-	 */
-	if (iph1->frag && sbuf->l > ISAKMP_FRAG_MAXLEN) 
-		extralen = 0;
-#endif
-	if (extralen)
-		plog (LLV_DEBUG, LOCATION, NULL, "Adding NON-ESP marker\n");
-
-	/* If NAT-T port floating is in use, 4 zero bytes (non-ESP marker) 
-	   must added just before the packet itself. For this we must 
-	   allocate a new buffer and release it at the end. */
-	if (extralen) {
-		if ((vbuf = vmalloc (sbuf->l + extralen)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "vbuf allocation failed\n");
-			return -1;
-		}
-		*(u_int32_t *)vbuf->v = 0;
-		memcpy (vbuf->v + extralen, sbuf->v, sbuf->l);
-		/* ensures that the modified buffer will be sent back to the caller, so
-		 * add_recvdpkt() will add the correct buffer
-		 */
-		swap = *sbuf;
-		*sbuf = *vbuf;
-		*vbuf = swap;
-		vfree(vbuf);
-	}
-#endif
-
-	/* select the socket to be sent */
-	s = getsockmyaddr(iph1->local);
-	if (s == -1){
-		return -1;
-	}
-
-	plog (LLV_DEBUG, LOCATION, NULL, "%zu bytes %s\n", sbuf->l, 
-	      saddr2str_fromto("from %s to %s", iph1->local, iph1->remote));
-
-#ifdef ENABLE_FRAG
-	if (iph1->frag && sbuf->l > ISAKMP_FRAG_MAXLEN) {
-		if (isakmp_sendfrags(iph1, sbuf) == -1) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "isakmp_sendfrags failed\n");
-			return -1;
-		}
-	} else 
-#endif
-	{
-		len = sendfromto(s, sbuf->v, sbuf->l,
-		    iph1->local, iph1->remote, lcconf->count_persend);
-
-		if (len == -1) {
-			plog(LLV_ERROR, LOCATION, NULL, "sendfromto failed\n");
-			return -1;
-		}
-	}
-	
-	return 0;
-}
-
-/* called from scheduler */
-void
-isakmp_ph1resend_stub(p)
-	void *p;
-{
-	struct ph1handle *iph1;
-
-	iph1=(struct ph1handle *)p;
-	if(isakmp_ph1resend(iph1) < 0){
-		if(iph1->scr != NULL){
-			/* Should not happen...
-			 */
-			sched_kill(iph1->scr);
-			iph1->scr=NULL;
-		}
-
-		remph1(iph1);
-		delph1(iph1);
-	}
-}
-
-int
-isakmp_ph1resend(iph1)
-	struct ph1handle *iph1;
-{
-	/* Note: NEVER do the rem/del here, it will be done by the caller or by the _stub function
-	 */
-	if (iph1->retry_counter <= 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"phase1 negotiation failed due to time up. %s\n",
-			isakmp_pindex(&iph1->index, iph1->msgid));
-		EVT_PUSH(iph1->local, iph1->remote, 
-		    EVTT_PEER_NO_RESPONSE, NULL);
-
-		return -1;
-	}
-
-	if (isakmp_send(iph1, iph1->sendbuf) < 0){
-		plog(LLV_ERROR, LOCATION, NULL,
-			 "phase1 negotiation failed due to send error. %s\n",
-			 isakmp_pindex(&iph1->index, iph1->msgid));
-		EVT_PUSH(iph1->local, iph1->remote, 
-				 EVTT_PEER_NO_RESPONSE, NULL);
-		return -1;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"resend phase1 packet %s\n",
-		isakmp_pindex(&iph1->index, iph1->msgid));
-
-	iph1->retry_counter--;
-
-	iph1->scr = sched_new(iph1->rmconf->retry_interval,
-		isakmp_ph1resend_stub, iph1);
-
-	return 0;
-}
-
-/* called from scheduler */
-void
-isakmp_ph2resend_stub(p)
-	void *p;
-{
-	struct ph2handle *iph2;
-
-	iph2=(struct ph2handle *)p;
-
-	if(isakmp_ph2resend(iph2) < 0){
-		unbindph12(iph2);
-		remph2(iph2);
-		delph2(iph2);
-	}
-}
-
-int
-isakmp_ph2resend(iph2)
-	struct ph2handle *iph2;
-{
-	/* Note: NEVER do the unbind/rem/del here, it will be done by the caller or by the _stub function
-	 */
-	if (iph2->ph1->status == PHASE1ST_EXPIRED){
-		plog(LLV_ERROR, LOCATION, NULL,
-			"phase2 negotiation failed due to phase1 expired. %s\n",
-				isakmp_pindex(&iph2->ph1->index, iph2->msgid));
-		return -1;
-	}
-
-	if (iph2->retry_counter <= 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"phase2 negotiation failed due to time up. %s\n",
-				isakmp_pindex(&iph2->ph1->index, iph2->msgid));
-		EVT_PUSH(iph2->src, iph2->dst, EVTT_PEER_NO_RESPONSE, NULL);
-		unbindph12(iph2);
-		return -1;
-	}
-
-	if (isakmp_send(iph2->ph1, iph2->sendbuf) < 0){
-		plog(LLV_ERROR, LOCATION, NULL,
-			"phase2 negotiation failed due to send error. %s\n",
-				isakmp_pindex(&iph2->ph1->index, iph2->msgid));
-		EVT_PUSH(iph2->src, iph2->dst, EVTT_PEER_NO_RESPONSE, NULL);
-
-		return -1;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"resend phase2 packet %s\n",
-		isakmp_pindex(&iph2->ph1->index, iph2->msgid));
-
-	iph2->retry_counter--;
-
-	iph2->scr = sched_new(iph2->ph1->rmconf->retry_interval,
-		isakmp_ph2resend_stub, iph2);
-
-	return 0;
-}
-
-/* called from scheduler */
-void
-isakmp_ph1expire_stub(p)
-	void *p;
-{
-
-	isakmp_ph1expire((struct ph1handle *)p);
-}
-
-void
-isakmp_ph1expire(iph1)
-	struct ph1handle *iph1;
-{
-	char *src, *dst;
-
-	SCHED_KILL(iph1->sce);
-
-	if(iph1->status != PHASE1ST_EXPIRED){
-		src = racoon_strdup(saddr2str(iph1->local));
-		dst = racoon_strdup(saddr2str(iph1->remote));
-		STRDUP_FATAL(src);
-		STRDUP_FATAL(dst);
-
-		plog(LLV_INFO, LOCATION, NULL,
-			 "ISAKMP-SA expired %s-%s spi:%s\n",
-			 src, dst,
-			 isakmp_pindex(&iph1->index, 0));
-		racoon_free(src);
-		racoon_free(dst);
-		iph1->status = PHASE1ST_EXPIRED;
-	}
-
-	/*
-	 * the phase1 deletion is postponed until there is no phase2.
-	 */
-	if (LIST_FIRST(&iph1->ph2tree) != NULL) {
-		iph1->sce = sched_new(1, isakmp_ph1expire_stub, iph1);
-		return;
-	}
-
-	iph1->sce = sched_new(1, isakmp_ph1delete_stub, iph1);
-}
-
-/* called from scheduler */
-void
-isakmp_ph1delete_stub(p)
-	void *p;
-{
-
-	isakmp_ph1delete((struct ph1handle *)p);
-}
-
-void
-isakmp_ph1delete(iph1)
-	struct ph1handle *iph1;
-{
-	char *src, *dst;
-
-	SCHED_KILL(iph1->sce);
-
-	if (LIST_FIRST(&iph1->ph2tree) != NULL) {
-		iph1->sce = sched_new(1, isakmp_ph1delete_stub, iph1);
-		return;
-	}
-
-	/* don't re-negosiation when the phase 1 SA expires. */
-
-	src = racoon_strdup(saddr2str(iph1->local));
-	dst = racoon_strdup(saddr2str(iph1->remote));
-	STRDUP_FATAL(src);
-	STRDUP_FATAL(dst);
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"ISAKMP-SA deleted %s-%s spi:%s\n",
-		src, dst, isakmp_pindex(&iph1->index, 0));
-	EVT_PUSH(iph1->local, iph1->remote, EVTT_PHASE1_DOWN, NULL);
-	racoon_free(src);
-	racoon_free(dst);
-
-	remph1(iph1);
-	delph1(iph1);
-
-	return;
-}
-
-/* called from scheduler.
- * this function will call only isakmp_ph2delete().
- * phase 2 handler remain forever if kernel doesn't cry a expire of phase 2 SA
- * by something cause.  That's why this function is called after phase 2 SA
- * expires in the userland.
- */
-void
-isakmp_ph2expire_stub(p)
-	void *p;
-{
-
-	isakmp_ph2expire((struct ph2handle *)p);
-}
-
-void
-isakmp_ph2expire(iph2)
-	struct ph2handle *iph2;
-{
-	char *src, *dst;
-
-	SCHED_KILL(iph2->sce);
-
-	src = racoon_strdup(saddrwop2str(iph2->src));
-	dst = racoon_strdup(saddrwop2str(iph2->dst));
-	STRDUP_FATAL(src);
-	STRDUP_FATAL(dst);
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"phase2 sa expired %s-%s\n", src, dst);
-	racoon_free(src);
-	racoon_free(dst);
-
-	iph2->status = PHASE2ST_EXPIRED;
-
-	iph2->sce = sched_new(1, isakmp_ph2delete_stub, iph2);
-
-	return;
-}
-
-/* called from scheduler */
-void
-isakmp_ph2delete_stub(p)
-	void *p;
-{
-
-	isakmp_ph2delete((struct ph2handle *)p);
-}
-
-void
-isakmp_ph2delete(iph2)
-	struct ph2handle *iph2;
-{
-	char *src, *dst;
-
-	SCHED_KILL(iph2->sce);
-
-	src = racoon_strdup(saddrwop2str(iph2->src));
-	dst = racoon_strdup(saddrwop2str(iph2->dst));
-	STRDUP_FATAL(src);
-	STRDUP_FATAL(dst);
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"phase2 sa deleted %s-%s\n", src, dst);
-	racoon_free(src);
-	racoon_free(dst);
-
-	unbindph12(iph2);
-	remph2(iph2);
-	delph2(iph2);
-
-	return;
-}
-
-/* %%%
- * Interface between PF_KEYv2 and ISAKMP
- */
-/*
- * receive ACQUIRE from kernel, and begin either phase1 or phase2.
- * if phase1 has been finished, begin phase2.
- */
-int
-isakmp_post_acquire(iph2)
-	struct ph2handle *iph2;
-{
-	struct remoteconf *rmconf;
-	struct ph1handle *iph1 = NULL;
-	
-	plog(LLV_DEBUG, LOCATION, NULL, "in post_acquire\n");
-
-	/* search appropreate configuration with masking port. */
-	rmconf = getrmconf(iph2->dst);
-	if (rmconf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no configuration found for %s.\n",
-			saddrwop2str(iph2->dst));
-		return -1;
-	}
-
-	/* if passive mode, ignore the acquire message */
-	if (rmconf->passive) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"because of passive mode, "
-			"ignore the acquire message for %s.\n",
-			saddrwop2str(iph2->dst));
-		return 0;
-	}
-
-	/* 
-	 * Search isakmp status table by address and port 
-	 * If NAT-T is in use, consider null ports as a 
-	 * wildcard and use IKE ports instead.
-	 */
-#ifdef ENABLE_NATT
-	if (!extract_port(iph2->src) && !extract_port(iph2->dst)) {
-		if ((iph1 = getph1byaddrwop(iph2->src, iph2->dst)) != NULL) {
-			set_port(iph2->src, extract_port(iph1->local));
-			set_port(iph2->dst, extract_port(iph1->remote));
-		}
-	} else {
-		iph1 = getph1byaddr(iph2->src, iph2->dst, 0);
-	}
-#else
-	iph1 = getph1byaddr(iph2->src, iph2->dst, 0);
-#endif
-
-	/* no ISAKMP-SA found. */
-	if (iph1 == NULL) {
-		struct sched *sc;
-
-		iph2->retry_checkph1 = lcconf->retry_checkph1;
-		sc = sched_new(1, isakmp_chkph1there_stub, iph2);
-		plog(LLV_INFO, LOCATION, NULL,
-			"IPsec-SA request for %s queued "
-			"due to no phase1 found.\n",
-			saddrwop2str(iph2->dst));
-
-		/* start phase 1 negotiation as a initiator. */
-		if (isakmp_ph1begin_i(rmconf, iph2->dst, iph2->src) < 0) {
-			SCHED_KILL(sc);
-			return -1;
-		}
-
-		return 0;
-		/*NOTREACHED*/
-	}
-
-	/* found ISAKMP-SA, but on negotiation. */
-	if (iph1->status != PHASE1ST_ESTABLISHED) {
-		iph2->retry_checkph1 = lcconf->retry_checkph1;
-		sched_new(1, isakmp_chkph1there_stub, iph2);
-		plog(LLV_INFO, LOCATION, iph2->dst,
-			"request for establishing IPsec-SA was queued "
-			"due to no phase1 found.\n");
-		return 0;
-		/*NOTREACHED*/
-	}
-
-	/* found established ISAKMP-SA */
-	/* i.e. iph1->status == PHASE1ST_ESTABLISHED */
-
-	/* found ISAKMP-SA. */
-	plog(LLV_DEBUG, LOCATION, NULL, "begin QUICK mode.\n");
-
-	/* begin quick mode */
-	if (isakmp_ph2begin_i(iph1, iph2))
-		return -1;
-
-	return 0;
-}
-
-/*
- * receive GETSPI from kernel.
- */
-int
-isakmp_post_getspi(iph2)
-	struct ph2handle *iph2;
-{
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-
-	/* don't process it because there is no suitable phase1-sa. */
-	if (iph2->ph1->status == PHASE1ST_EXPIRED) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"the negotiation is stopped, "
-			"because there is no suitable ISAKMP-SA.\n");
-		return -1;
-	}
-
-#ifdef ENABLE_STATS
-	gettimeofday(&start, NULL);
-#endif
-	if ((ph2exchange[etypesw2(ISAKMP_ETYPE_QUICK)]
-	                [iph2->side]
-	                [iph2->status])(iph2, NULL) != 0)
-		return -1;
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s): %8.6f",
-		"phase2",
-		s_isakmp_state(ISAKMP_ETYPE_QUICK, iph2->side, iph2->status),
-		timedelta(&start, &end));
-#endif
-
-	return 0;
-}
-
-/* called by scheduler */
-void
-isakmp_chkph1there_stub(p)
-	void *p;
-{
-	isakmp_chkph1there((struct ph2handle *)p);
-}
-
-void
-isakmp_chkph1there(iph2)
-	struct ph2handle *iph2;
-{
-	struct ph1handle *iph1;
-
-	iph2->retry_checkph1--;
-	if (iph2->retry_checkph1 < 0) {
-		plog(LLV_ERROR, LOCATION, iph2->dst,
-			"phase2 negotiation failed "
-			"due to time up waiting for phase1. %s\n",
-			sadbsecas2str(iph2->dst, iph2->src,
-				iph2->satype, 0, 0));
-		plog(LLV_INFO, LOCATION, NULL,
-			"delete phase 2 handler.\n");
-
-		/* send acquire to kernel as error */
-		pk_sendeacquire(iph2);
-
-		unbindph12(iph2);
-		remph2(iph2);
-		delph2(iph2);
-
-		return;
-	}
-
-	/* 
-	 * Search isakmp status table by address and port 
-	 * If NAT-T is in use, consider null ports as a 
-	 * wildcard and use IKE ports instead.
-	 */
-#ifdef ENABLE_NATT
-	if (!extract_port(iph2->src) && !extract_port(iph2->dst)) {
-		plog(LLV_DEBUG2, LOCATION, NULL, "CHKPH1THERE: extract_port.\n");
-		if( (iph1 = getph1byaddrwop(iph2->src, iph2->dst)) != NULL){
-			plog(LLV_DEBUG2, LOCATION, NULL, "CHKPH1THERE: found a ph1 wop.\n");
-		}
-	} else {
-		plog(LLV_DEBUG2, LOCATION, NULL, "CHKPH1THERE: searching byaddr.\n");
-		iph1 = getph1byaddr(iph2->src, iph2->dst, 0);
-		if(iph1 != NULL)
-			plog(LLV_DEBUG2, LOCATION, NULL, "CHKPH1THERE: found byaddr.\n");
-	}
-#else
-	iph1 = getph1byaddr(iph2->src, iph2->dst, 0);
-#endif
-
-	/* XXX Even if ph1 as responder is there, should we not start
-	 * phase 2 negotiation ? */
-	if (iph1 != NULL
-	 && iph1->status == PHASE1ST_ESTABLISHED) {
-		/* found isakmp-sa */
-
-		plog(LLV_DEBUG2, LOCATION, NULL, "CHKPH1THERE: got a ph1 handler, setting ports.\n");
-		plog(LLV_DEBUG2, LOCATION, NULL, "iph1->local: %s\n", saddr2str(iph1->local));
-		plog(LLV_DEBUG2, LOCATION, NULL, "iph1->remote: %s\n", saddr2str(iph1->remote));
-		plog(LLV_DEBUG2, LOCATION, NULL, "before:\n");
-		plog(LLV_DEBUG2, LOCATION, NULL, "src: %s\n", saddr2str(iph2->src));
-		plog(LLV_DEBUG2, LOCATION, NULL, "dst: %s\n", saddr2str(iph2->dst));
-		set_port(iph2->src, extract_port(iph1->local));
-		set_port(iph2->dst, extract_port(iph1->remote));
-		plog(LLV_DEBUG2, LOCATION, NULL, "After:\n");
-		plog(LLV_DEBUG2, LOCATION, NULL, "src: %s\n", saddr2str(iph2->src));
-		plog(LLV_DEBUG2, LOCATION, NULL, "dst: %s\n", saddr2str(iph2->dst));
-
-		/* begin quick mode */
-		(void)isakmp_ph2begin_i(iph1, iph2);
-		return;
-	}
-
-	plog(LLV_DEBUG2, LOCATION, NULL, "CHKPH1THERE: no established ph1 handler found\n");
-
-	/* no isakmp-sa found */
-	sched_new(1, isakmp_chkph1there_stub, iph2);
-
-	return;
-}
-
-/* copy variable data into ALLOCATED buffer. */
-caddr_t
-isakmp_set_attr_v(buf, type, val, len)
-	caddr_t buf;
-	int type;
-	caddr_t val;
-	int len;
-{
-	struct isakmp_data *data;
-
-	data = (struct isakmp_data *)buf;
-	data->type = htons((u_int16_t)type | ISAKMP_GEN_TLV);
-	data->lorv = htons((u_int16_t)len);
-	memcpy(data + 1, val, len);
-
-	return buf + sizeof(*data) + len;
-}
-
-/* copy fixed length data into ALLOCATED buffer. */
-caddr_t
-isakmp_set_attr_l(buf, type, val)
-	caddr_t buf;
-	int type;
-	u_int32_t val;
-{
-	struct isakmp_data *data;
-
-	data = (struct isakmp_data *)buf;
-	data->type = htons((u_int16_t)type | ISAKMP_GEN_TV);
-	data->lorv = htons((u_int16_t)val);
-
-	return buf + sizeof(*data);
-}
-
-/* add a variable data attribute to the buffer by reallocating it. */
-vchar_t *
-isakmp_add_attr_v(buf0, type, val, len)
-	vchar_t *buf0;
-	int type;
-	caddr_t val;
-	int len;
-{
-	vchar_t *buf = NULL;
-	struct isakmp_data *data;
-	int tlen;
-	int oldlen = 0;
-
-	tlen = sizeof(*data) + len;
-
-	if (buf0) {
-		oldlen = buf0->l;
-		buf = vrealloc(buf0, oldlen + tlen);
-	} else
-		buf = vmalloc(tlen);
-	if (!buf) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get a attribute buffer.\n");
-		return NULL;
-	}
-
-	data = (struct isakmp_data *)(buf->v + oldlen);
-	data->type = htons((u_int16_t)type | ISAKMP_GEN_TLV);
-	data->lorv = htons((u_int16_t)len);
-	memcpy(data + 1, val, len);
-
-	return buf;
-}
-
-/* add a fixed data attribute to the buffer by reallocating it. */
-vchar_t *
-isakmp_add_attr_l(buf0, type, val)
-	vchar_t *buf0;
-	int type;
-	u_int32_t val;
-{
-	vchar_t *buf = NULL;
-	struct isakmp_data *data;
-	int tlen;
-	int oldlen = 0;
-
-	tlen = sizeof(*data);
-
-	if (buf0) {
-		oldlen = buf0->l;
-		buf = vrealloc(buf0, oldlen + tlen);
-	} else
-		buf = vmalloc(tlen);
-	if (!buf) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get a attribute buffer.\n");
-		return NULL;
-	}
-
-	data = (struct isakmp_data *)(buf->v + oldlen);
-	data->type = htons((u_int16_t)type | ISAKMP_GEN_TV);
-	data->lorv = htons((u_int16_t)val);
-
-	return buf;
-}
-
-/*
- * calculate cookie and set.
- */
-int
-isakmp_newcookie(place, remote, local)
-	caddr_t place;
-	struct sockaddr *remote;
-	struct sockaddr *local;
-{
-	vchar_t *buf = NULL, *buf2 = NULL;
-	char *p;
-	int blen;
-	int alen;
-	caddr_t sa1, sa2;
-	time_t t;
-	int error = -1;
-	u_short port;
-
-
-	if (remote->sa_family != local->sa_family) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"address family mismatch, remote:%d local:%d\n",
-			remote->sa_family, local->sa_family);
-		goto end;
-	}
-	switch (remote->sa_family) {
-	case AF_INET:
-		alen = sizeof(struct in_addr);
-		sa1 = (caddr_t)&((struct sockaddr_in *)remote)->sin_addr;
-		sa2 = (caddr_t)&((struct sockaddr_in *)local)->sin_addr;
-		break;
-#ifdef INET6
-	case AF_INET6:
-		alen = sizeof(struct in6_addr);
-		sa1 = (caddr_t)&((struct sockaddr_in6 *)remote)->sin6_addr;
-		sa2 = (caddr_t)&((struct sockaddr_in6 *)local)->sin6_addr;
-		break;
-#endif
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid family: %d\n", remote->sa_family);
-		goto end;
-	}
-	blen = (alen + sizeof(u_short)) * 2
-		+ sizeof(time_t) + lcconf->secret_size;
-	buf = vmalloc(blen);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get a cookie.\n");
-		goto end;
-	}
-	p = buf->v;
-
-	/* copy my address */
-	memcpy(p, sa1, alen);
-	p += alen;
-	port = ((struct sockaddr_in *)remote)->sin_port;
-	memcpy(p, &port, sizeof(u_short));
-	p += sizeof(u_short);
-
-	/* copy target address */
-	memcpy(p, sa2, alen);
-	p += alen;
-	port = ((struct sockaddr_in *)local)->sin_port;
-	memcpy(p, &port, sizeof(u_short));
-	p += sizeof(u_short);
-
-	/* copy time */
-	t = time(0);
-	memcpy(p, (caddr_t)&t, sizeof(t));
-	p += sizeof(t);
-
-	/* copy random value */
-	buf2 = eay_set_random(lcconf->secret_size);
-	if (buf2 == NULL)
-		goto end;
-	memcpy(p, buf2->v, lcconf->secret_size);
-	p += lcconf->secret_size;
-	vfree(buf2);
-
-	buf2 = eay_sha1_one(buf);
-	memcpy(place, buf2->v, sizeof(cookie_t));
-
-	sa1 = val2str(place, sizeof (cookie_t));
-	plog(LLV_DEBUG, LOCATION, NULL, "new cookie:\n%s\n", sa1);
-	racoon_free(sa1);
-
-	error = 0;
-end:
-	if (buf != NULL)
-		vfree(buf);
-	if (buf2 != NULL)
-		vfree(buf2);
-	return error;
-}
-
-/*
- * save partner's(payload) data into phhandle.
- */
-int
-isakmp_p2ph(buf, gen)
-	vchar_t **buf;
-	struct isakmp_gen *gen;
-{
-	/* XXX to be checked in each functions for logging. */
-	if (*buf) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"ignore this payload, same payload type exist.\n");
-		return -1;
-	}
-
-	*buf = vmalloc(ntohs(gen->len) - sizeof(*gen));
-	if (*buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer.\n");
-		return -1;
-	}
-	memcpy((*buf)->v, gen + 1, (*buf)->l);
-
-	return 0;
-}
-
-u_int32_t
-isakmp_newmsgid2(iph1)
-	struct ph1handle *iph1;
-{
-	u_int32_t msgid2;
-
-	do {
-		msgid2 = eay_random();
-	} while (getph2bymsgid(iph1, msgid2));
-
-	return msgid2;
-}
-
-/*
- * set values into allocated buffer of isakmp header for phase 1
- */
-static caddr_t
-set_isakmp_header(vbuf, iph1, nptype, etype, flags, msgid)
-	vchar_t *vbuf;
-	struct ph1handle *iph1;
-	int nptype;
-	u_int8_t etype;
-	u_int8_t flags;
-	u_int32_t msgid;
-{
-	struct isakmp *isakmp;
-
-	if (vbuf->l < sizeof(*isakmp))
-		return NULL;
-
-	isakmp = (struct isakmp *)vbuf->v;
-
-	memcpy(&isakmp->i_ck, &iph1->index.i_ck, sizeof(cookie_t));
-	memcpy(&isakmp->r_ck, &iph1->index.r_ck, sizeof(cookie_t));
-	isakmp->np = nptype;
-	isakmp->v = iph1->version;
-	isakmp->etype = etype;
-	isakmp->flags = flags;
-	isakmp->msgid = msgid;
-	isakmp->len = htonl(vbuf->l);
-
-	return vbuf->v + sizeof(*isakmp);
-}
-
-/*
- * set values into allocated buffer of isakmp header for phase 1
- */
-caddr_t
-set_isakmp_header1(vbuf, iph1, nptype)
-	vchar_t *vbuf;
-	struct ph1handle *iph1;
-	int nptype;
-{
-	return set_isakmp_header (vbuf, iph1, nptype, iph1->etype, iph1->flags, iph1->msgid);
-}
-
-/*
- * set values into allocated buffer of isakmp header for phase 2
- */
-caddr_t
-set_isakmp_header2(vbuf, iph2, nptype)
-	vchar_t *vbuf;
-	struct ph2handle *iph2;
-	int nptype;
-{
-	return set_isakmp_header (vbuf, iph2->ph1, nptype, ISAKMP_ETYPE_QUICK, iph2->flags, iph2->msgid);
-}
-
-/*
- * set values into allocated buffer of isakmp payload.
- */
-caddr_t
-set_isakmp_payload(buf, src, nptype)
-	caddr_t buf;
-	vchar_t *src;
-	int nptype;
-{
-	struct isakmp_gen *gen;
-	caddr_t p = buf;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "add payload of len %zu, next type %d\n",
-	    src->l, nptype);
-
-	gen = (struct isakmp_gen *)p;
-	gen->np = nptype;
-	gen->len = htons(sizeof(*gen) + src->l);
-	p += sizeof(*gen);
-	memcpy(p, src->v, src->l);
-	p += src->l;
-
-	return p;
-}
-
-static int
-etypesw1(etype)
-	int etype;
-{
-	switch (etype) {
-	case ISAKMP_ETYPE_IDENT:
-		return 1;
-	case ISAKMP_ETYPE_AGG:
-		return 2;
-	case ISAKMP_ETYPE_BASE:
-		return 3;
-	default:
-		return 0;
-	}
-	/*NOTREACHED*/
-}
-
-static int
-etypesw2(etype)
-	int etype;
-{
-	switch (etype) {
-	case ISAKMP_ETYPE_QUICK:
-		return 1;
-	default:
-		return 0;
-	}
-	/*NOTREACHED*/
-}
-
-#ifdef HAVE_PRINT_ISAKMP_C
-/* for print-isakmp.c */
-char *snapend;
-extern void isakmp_print __P((const u_char *, u_int, const u_char *));
-
-char *getname __P((const u_char *));
-#ifdef INET6
-char *getname6 __P((const u_char *));
-#endif
-int safeputchar __P((int));
-
-/*
- * Return a name for the IP address pointed to by ap.  This address
- * is assumed to be in network byte order.
- */
-char *
-getname(ap)
-	const u_char *ap;
-{
-	struct sockaddr_in addr;
-	static char ntop_buf[NI_MAXHOST];
-
-	memset(&addr, 0, sizeof(addr));
-#ifndef __linux__
-	addr.sin_len = sizeof(struct sockaddr_in);
-#endif
-	addr.sin_family = AF_INET;
-	memcpy(&addr.sin_addr, ap, sizeof(addr.sin_addr));
-	if (getnameinfo((struct sockaddr *)&addr, sizeof(addr),
-			ntop_buf, sizeof(ntop_buf), NULL, 0,
-			NI_NUMERICHOST | niflags))
-		strlcpy(ntop_buf, "?", sizeof(ntop_buf));
-
-	return ntop_buf;
-}
-
-#ifdef INET6
-/*
- * Return a name for the IP6 address pointed to by ap.  This address
- * is assumed to be in network byte order.
- */
-char *
-getname6(ap)
-	const u_char *ap;
-{
-	struct sockaddr_in6 addr;
-	static char ntop_buf[NI_MAXHOST];
-
-	memset(&addr, 0, sizeof(addr));
-	addr.sin6_len = sizeof(struct sockaddr_in6);
-	addr.sin6_family = AF_INET6;
-	memcpy(&addr.sin6_addr, ap, sizeof(addr.sin6_addr));
-	if (getnameinfo((struct sockaddr *)&addr, addr.sin6_len,
-			ntop_buf, sizeof(ntop_buf), NULL, 0,
-			NI_NUMERICHOST | niflags))
-		strlcpy(ntop_buf, "?", sizeof(ntop_buf));
-
-	return ntop_buf;
-}
-#endif /* INET6 */
-
-int
-safeputchar(c)
-	int c;
-{
-	unsigned char ch;
-
-	ch = (unsigned char)(c & 0xff);
-	if (c < 0x80 && isprint(c))
-		return printf("%c", c & 0xff);
-	else
-		return printf("\\%03o", c & 0xff);
-}
-
-void
-isakmp_printpacket(msg, from, my, decoded)
-	vchar_t *msg;
-	struct sockaddr *from;
-	struct sockaddr *my;
-	int decoded;
-{
-#ifdef YIPS_DEBUG
-	struct timeval tv;
-	int s;
-	char hostbuf[NI_MAXHOST];
-	char portbuf[NI_MAXSERV];
-	struct isakmp *isakmp;
-	vchar_t *buf;
-#endif
-
-	if (loglevel < LLV_DEBUG)
-		return;
-
-#ifdef YIPS_DEBUG
-	plog(LLV_DEBUG, LOCATION, NULL, "begin.\n");
-
-	gettimeofday(&tv, NULL);
-	s = tv.tv_sec % 3600;
-	printf("%02d:%02d.%06u ", s / 60, s % 60, (u_int32_t)tv.tv_usec);
-
-	if (from) {
-		if (getnameinfo(from, sysdep_sa_len(from), hostbuf, sizeof(hostbuf),
-				portbuf, sizeof(portbuf),
-				NI_NUMERICHOST | NI_NUMERICSERV | niflags)) {
-			strlcpy(hostbuf, "?", sizeof(hostbuf));
-			strlcpy(portbuf, "?", sizeof(portbuf));
-		}
-		printf("%s:%s", hostbuf, portbuf);
-	} else
-		printf("?");
-	printf(" -> ");
-	if (my) {
-		if (getnameinfo(my, sysdep_sa_len(my), hostbuf, sizeof(hostbuf),
-				portbuf, sizeof(portbuf),
-				NI_NUMERICHOST | NI_NUMERICSERV | niflags)) {
-			strlcpy(hostbuf, "?", sizeof(hostbuf));
-			strlcpy(portbuf, "?", sizeof(portbuf));
-		}
-		printf("%s:%s", hostbuf, portbuf);
-	} else
-		printf("?");
-	printf(": ");
-
-	buf = vdup(msg);
-	if (!buf) {
-		printf("(malloc fail)\n");
-		return;
-	}
-	if (decoded) {
-		isakmp = (struct isakmp *)buf->v;
-		if (isakmp->flags & ISAKMP_FLAG_E) {
-#if 0
-			int pad;
-			pad = *(u_char *)(buf->v + buf->l - 1);
-			if (buf->l < pad && 2 < vflag)
-				printf("(wrong padding)");
-#endif
-			isakmp->flags &= ~ISAKMP_FLAG_E;
-		}
-	}
-
-	snapend = buf->v + buf->l;
-	isakmp_print(buf->v, buf->l, NULL);
-	vfree(buf);
-	printf("\n");
-	fflush(stdout);
-
-	return;
-#endif
-}
-#endif /*HAVE_PRINT_ISAKMP_C*/
-
-int
-copy_ph1addresses(iph1, rmconf, remote, local)
-	struct ph1handle *iph1;
-	struct remoteconf *rmconf;
-	struct sockaddr *remote, *local;
-{
-	u_int16_t port;
-
-	/* address portion must be grabbed from real remote address "remote" */
-	iph1->remote = dupsaddr(remote);
-	if (iph1->remote == NULL)
-		return -1;
-
-	/*
-	 * if remote has no port # (in case of initiator - from ACQUIRE msg)
-	 * - if remote.conf specifies port #, use that
-	 * - if remote.conf does not, use 500
-	 * if remote has port # (in case of responder - from recvfrom(2))
-	 * respect content of "remote".
-	 */
-	if (extract_port(iph1->remote) == 0) {
-		port = extract_port(rmconf->remote);
-		if (port == 0)
-			port = PORT_ISAKMP;
-		set_port(iph1->remote, port);
-	}
-
-	if (local == NULL)
-		iph1->local = getlocaladdr(iph1->remote);
-	else
-		iph1->local = dupsaddr(local);
-	if (iph1->local == NULL)
-		return -1;
-
-	if (extract_port(iph1->local) == 0)
-		set_port(iph1->local, PORT_ISAKMP);
-
-#ifdef ENABLE_NATT
-	if (extract_port(iph1->local) == lcconf->port_isakmp_natt) {
-		plog(LLV_DEBUG, LOCATION, NULL, "Marking ports as changed\n");
-		iph1->natt_flags |= NAT_ADD_NON_ESP_MARKER;
-	}
-#endif
-
-	return 0;
-}
-
-static int
-nostate1(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	plog(LLV_ERROR, LOCATION, iph1->remote, "wrong state %u.\n",
-			iph1->status);
-	return -1;
-}
-
-static int
-nostate2(iph2, msg)
-	struct ph2handle *iph2;
-	vchar_t *msg;
-{
-	plog(LLV_ERROR, LOCATION, iph2->ph1->remote, "wrong state %u.\n",
-		iph2->status);
-	return -1;
-}
-
-void
-log_ph1established(iph1)
-	const struct ph1handle *iph1;
-{
-	char *src, *dst;
-
-	src = racoon_strdup(saddr2str(iph1->local));
-	dst = racoon_strdup(saddr2str(iph1->remote));
-	STRDUP_FATAL(src);
-	STRDUP_FATAL(dst);
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"ISAKMP-SA established %s-%s spi:%s\n",
-		src, dst,
-		isakmp_pindex(&iph1->index, 0));
-	
-	EVT_PUSH(iph1->local, iph1->remote, EVTT_PHASE1_UP, NULL);
-	if(!iph1->rmconf->mode_cfg) {
-		EVT_PUSH(iph1->local, iph1->remote, EVTT_NO_ISAKMP_CFG, NULL);
-	}
-
-	racoon_free(src);
-	racoon_free(dst);
-
-	return;
-}
-
-struct payload_list *
-isakmp_plist_append (struct payload_list *plist, vchar_t *payload, int payload_type)
-{
-	if (! plist) {
-		plist = racoon_malloc (sizeof (struct payload_list));
-		plist->prev = NULL;
-	}
-	else {
-		plist->next = racoon_malloc (sizeof (struct payload_list));
-		plist->next->prev = plist;
-		plist = plist->next;
-	}
-
-	plist->next = NULL;
-	plist->payload = payload;
-	plist->payload_type = payload_type;
-
-	return plist;
-}
-
-vchar_t * 
-isakmp_plist_set_all (struct payload_list **plist, struct ph1handle *iph1)
-{
-	struct payload_list *ptr = *plist, *first;
-	size_t tlen = sizeof (struct isakmp), n = 0;
-	vchar_t *buf = NULL;
-	char *p;
-
-	/* Seek to the first item.  */
-	while (ptr->prev) ptr = ptr->prev;
-	first = ptr;
-	
-	/* Compute the whole length.  */
-	while (ptr) {
-		tlen += ptr->payload->l + sizeof (struct isakmp_gen);
-		ptr = ptr->next;
-	}
-
-	buf = vmalloc(tlen);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		goto end;
-	}
-
-	ptr = first;
-
-	p = set_isakmp_header1(buf, iph1, ptr->payload_type);
-	if (p == NULL)
-		goto end;
-
-	while (ptr)
-	{
-		p = set_isakmp_payload (p, ptr->payload, ptr->next ? ptr->next->payload_type : ISAKMP_NPTYPE_NONE);
-		first = ptr;
-		ptr = ptr->next;
-		racoon_free (first);
-		/* ptr->prev = NULL; first = NULL; ... omitted.  */
-		n++;
-	}
-
-	*plist = NULL;
-
-	return buf;
-end:
-	if (buf != NULL)
-		vfree(buf);
-	return NULL;
-}
-
-#ifdef ENABLE_FRAG
-int 
-frag_handler(iph1, msg, remote, local)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-	struct sockaddr *remote;
-	struct sockaddr *local;
-{
-	vchar_t *newmsg;
-
-	if (isakmp_frag_extract(iph1, msg) == 1) {
-		if ((newmsg = isakmp_frag_reassembly(iph1)) == NULL) {
-			plog(LLV_ERROR, LOCATION, remote, 
-			    "Packet reassembly failed\n");
-			return -1;
-		}
-		return isakmp_main(newmsg, remote, local);
-	}
-
-	return 0;
-}
-#endif
-
-void
-script_hook(iph1, script)
-	struct ph1handle *iph1;
-	int script;
-{
-#define IP_MAX 40
-#define PORT_MAX 6
-	char addrstr[IP_MAX];
-	char portstr[PORT_MAX];
-	char **envp = NULL;
-	int envc = 1;
-	struct sockaddr_in *sin;
-	char **c;
-
-	if (iph1 == NULL ||
-		iph1->rmconf == NULL ||
-		iph1->rmconf->script[script] == NULL)
-		return;
-
-#ifdef ENABLE_HYBRID
-	(void)isakmp_cfg_setenv(iph1, &envp, &envc);
-#endif
-
-	/* local address */
-	sin = (struct sockaddr_in *)iph1->local;
-	inet_ntop(sin->sin_family, &sin->sin_addr, addrstr, IP_MAX);
-	snprintf(portstr, PORT_MAX, "%d", ntohs(sin->sin_port));
-
-	if (script_env_append(&envp, &envc, "LOCAL_ADDR", addrstr) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot set LOCAL_ADDR\n");
-		goto out;
-	}
-
-	if (script_env_append(&envp, &envc, "LOCAL_PORT", portstr) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot set LOCAL_PORT\n");
-		goto out;
-	}
-
-	/* Peer address */
-	if (iph1->remote != NULL) {
-		sin = (struct sockaddr_in *)iph1->remote;
-		inet_ntop(sin->sin_family, &sin->sin_addr, addrstr, IP_MAX);
-		snprintf(portstr, PORT_MAX, "%d", ntohs(sin->sin_port));
-
-		if (script_env_append(&envp, &envc, 
-		    "REMOTE_ADDR", addrstr) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot set REMOTE_ADDR\n");
-			goto out;
-		}
-
-		if (script_env_append(&envp, &envc, 
-		    "REMOTE_PORT", portstr) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot set REMOTEL_PORT\n");
-			goto out;
-		}
-	}
-
-	if (privsep_script_exec(iph1->rmconf->script[script]->v, 
-	    script, envp) != 0) 
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Script %s execution failed\n", script_names[script]);
-
-out:
-	for (c = envp; *c; c++)
-		racoon_free(*c);
-
-	racoon_free(envp);
-
-	return;
-}
-
-int
-script_env_append(envp, envc, name, value)
-	char ***envp;
-	int *envc;
-	char *name;
-	char *value;
-{
-	char *envitem;
-	char **newenvp;
-	int newenvc;
-
-	if (value == NULL) {
-	        value = "";
-	}
-
-	envitem = racoon_malloc(strlen(name) + 1 + strlen(value) + 1);
-	if (envitem == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		return -1;
-	}
-	sprintf(envitem, "%s=%s", name, value);
-
-	newenvc = (*envc) + 1;
-	newenvp = racoon_realloc(*envp, newenvc * sizeof(char *));
-	if (newenvp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		racoon_free(envitem);
-		return -1;
-	}
-
-	newenvp[newenvc - 2] = envitem;
-	newenvp[newenvc - 1] = NULL;
-
-	*envp = newenvp;
-	*envc = newenvc;
-	return 0;
-}
-
-int
-script_exec(script, name, envp)
-	char *script;
-	int name;
-	char *const envp[];
-{
-	char *argv[] = { NULL, NULL, NULL };
-
-	argv[0] = script;
-	argv[1] = script_names[name];
-	argv[2] = NULL;
-
-	switch (fork()) { 
-	case 0:
-		execve(argv[0], argv, envp);
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "execve(\"%s\") failed: %s\n",
-		    argv[0], strerror(errno));
-		_exit(1);
-		break;
-	case -1:
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "Cannot fork: %s\n", strerror(errno));
-		return -1;
-		break;
-	default:
-		break;
-	}	
-	return 0;
-
-}
-
-void
-purge_remote(iph1)
-	struct ph1handle *iph1;
-{
-	vchar_t *buf = NULL;
-	struct sadb_msg *msg, *next, *end;
-	struct sadb_sa *sa;
-	struct sockaddr *src, *dst;
-	caddr_t mhp[SADB_EXT_MAX + 1];
-	u_int proto_id;
-	struct ph2handle *iph2;
-	struct ph1handle *new_iph1;
-
-	plog(LLV_INFO, LOCATION, NULL,
-		 "purging ISAKMP-SA spi=%s.\n",
-		 isakmp_pindex(&(iph1->index), iph1->msgid));
-
-	/* Mark as expired. */
-	iph1->status = PHASE1ST_EXPIRED;
-
-	/* Check if we have another, still valid, phase1 SA. */
-	new_iph1 = getph1byaddr(iph1->local, iph1->remote, 1);
-
-	/*
-	 * Delete all orphaned or binded to the deleting ph1handle phase2 SAs.
-	 * Keep all others phase2 SAs.
-	 */
-	buf = pfkey_dump_sadb(SADB_SATYPE_UNSPEC);
-	if (buf == NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"pfkey_dump_sadb returned nothing.\n");
-		return;
-	}
-
-	msg = (struct sadb_msg *)buf->v;
-	end = (struct sadb_msg *)(buf->v + buf->l);
-
-	while (msg < end) {
-		if ((msg->sadb_msg_len << 3) < sizeof(*msg))
-			break;
-		next = (struct sadb_msg *)((caddr_t)msg + (msg->sadb_msg_len << 3));
-		if (msg->sadb_msg_type != SADB_DUMP) {
-			msg = next;
-			continue;
-		}
-
-		if (pfkey_align(msg, mhp) || pfkey_check(mhp)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"pfkey_check (%s)\n", ipsec_strerror());
-			msg = next;
-			continue;
-		}
-
-		sa = (struct sadb_sa *)(mhp[SADB_EXT_SA]);
-		if (!sa ||
-		    !mhp[SADB_EXT_ADDRESS_SRC] ||
-		    !mhp[SADB_EXT_ADDRESS_DST]) {
-			msg = next;
-			continue;
-		}
-		src = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]);
-		dst = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_DST]);
-
-		if (sa->sadb_sa_state != SADB_SASTATE_LARVAL &&
-		    sa->sadb_sa_state != SADB_SASTATE_MATURE &&
-		    sa->sadb_sa_state != SADB_SASTATE_DYING) {
-			msg = next;
-			continue;
-		}
-
-		/*
-		 * check in/outbound SAs.
-		 * Select only SAs where src == local and dst == remote (outgoing)
-		 * or src == remote and dst == local (incoming).
-		 */
-		if ((CMPSADDR(iph1->local, src) || CMPSADDR(iph1->remote, dst)) &&
-			(CMPSADDR(iph1->local, dst) || CMPSADDR(iph1->remote, src))) {
-			msg = next;
-			continue;
-		}
-
-		proto_id = pfkey2ipsecdoi_proto(msg->sadb_msg_satype);
-		iph2 = getph2bysaidx(src, dst, proto_id, sa->sadb_sa_spi);
-
-		/* Check if there is another valid ISAKMP-SA */
-		if (new_iph1 != NULL) {
-
-			if (iph2 == NULL) {
-				/* No handler... still send a pfkey_delete message, but log this !*/
-				plog(LLV_INFO, LOCATION, NULL,
-					"Unknown IPsec-SA spi=%u, hmmmm?\n",
-					ntohl(sa->sadb_sa_spi));
-			}else{
-
-				/* 
-				 * If we have a new ph1, do not purge IPsec-SAs binded
-				 *  to a different ISAKMP-SA
-				 */
-				if (iph2->ph1 != NULL && iph2->ph1 != iph1){
-					msg = next;
-					continue;
-				}
-
-				/* If the ph2handle is established, do not purge IPsec-SA */
-				if (iph2->status == PHASE2ST_ESTABLISHED ||
-					iph2->status == PHASE2ST_EXPIRED) {
-					
-					plog(LLV_INFO, LOCATION, NULL,
-						 "keeping IPsec-SA spi=%u - found valid ISAKMP-SA spi=%s.\n",
-						 ntohl(sa->sadb_sa_spi),
-						 isakmp_pindex(&(new_iph1->index), new_iph1->msgid));
-					msg = next;
-					continue;
-				}
-			}
-		}
-
-		
-		pfkey_send_delete(lcconf->sock_pfkey,
-				  msg->sadb_msg_satype,
-				  IPSEC_MODE_ANY,
-				  src, dst, sa->sadb_sa_spi);
-
-		/* delete a relative phase 2 handle. */
-		if (iph2 != NULL) {
-			delete_spd(iph2, 0);
-			unbindph12(iph2);
-			remph2(iph2);
-			delph2(iph2);
-		}
-
-		plog(LLV_INFO, LOCATION, NULL,
-			 "purged IPsec-SA spi=%u.\n",
-			 ntohl(sa->sadb_sa_spi));
-
-		msg = next;
-	}
-
-	if (buf)
-		vfree(buf);
-
-	/* Mark the phase1 handler as EXPIRED */
-	plog(LLV_INFO, LOCATION, NULL,
-		 "purged ISAKMP-SA spi=%s.\n",
-		 isakmp_pindex(&(iph1->index), iph1->msgid));
-
-	SCHED_KILL(iph1->sce);
-
-	iph1->sce = sched_new(1, isakmp_ph1delete_stub, iph1);
-}
-
-void 
-delete_spd(iph2, created)
-	struct ph2handle *iph2;
- 	u_int64_t created;
-{
-	struct policyindex spidx;
-	struct sockaddr_storage addr;
-	u_int8_t pref;
-	struct sockaddr *src;
-	struct sockaddr *dst;
-	int error;
-	int idi2type = 0;/* switch whether copy IDs into id[src,dst]. */
-
-	if (iph2 == NULL)
-		return;
-
-	/* Delete the SPD entry if we generated it
-	 */
-	if (! iph2->generated_spidx )
-		return;
-
-	src = iph2->src;
-	dst = iph2->dst;
-
-	plog(LLV_INFO, LOCATION, NULL,
-		 "generated policy, deleting it.\n");
-		
-	memset(&spidx, 0, sizeof(spidx));
-	iph2->spidx_gen = (caddr_t )&spidx;
-		
-	/* make inbound policy */
-	iph2->src = dst;
-	iph2->dst = src;
-	spidx.dir = IPSEC_DIR_INBOUND;
-	spidx.ul_proto = 0;
-		
-	/* 
-	 * Note: code from get_proposal_r
-	 */
-		
-#define _XIDT(d) ((struct ipsecdoi_id_b *)(d)->v)->type
-		
-	/*
-	 * make destination address in spidx from either ID payload
-	 * or phase 1 address into a address in spidx.
-	 */
-	if (iph2->id != NULL
-		&& (_XIDT(iph2->id) == IPSECDOI_ID_IPV4_ADDR
-			|| _XIDT(iph2->id) == IPSECDOI_ID_IPV6_ADDR
-			|| _XIDT(iph2->id) == IPSECDOI_ID_IPV4_ADDR_SUBNET
-			|| _XIDT(iph2->id) == IPSECDOI_ID_IPV6_ADDR_SUBNET)) {
-		/* get a destination address of a policy */
-		error = ipsecdoi_id2sockaddr(iph2->id,
-									 (struct sockaddr *)&spidx.dst,
-									 &spidx.prefd, &spidx.ul_proto);
-		if (error)
-			goto purge;
-			
-#ifdef INET6
-		/*
-		 * get scopeid from the SA address.
-		 * note that the phase 1 source address is used as
-		 * a destination address to search for a inbound 
-		 * policy entry because rcoon is responder.
-		 */
-		if (_XIDT(iph2->id) == IPSECDOI_ID_IPV6_ADDR) {
-			if ((error = 
-				 setscopeid((struct sockaddr *)&spidx.dst,
-							iph2->src)) != 0)
-				goto purge;
-		}
-#endif
-			
-		if (_XIDT(iph2->id) == IPSECDOI_ID_IPV4_ADDR
-			|| _XIDT(iph2->id) == IPSECDOI_ID_IPV6_ADDR)
-			idi2type = _XIDT(iph2->id);
-			
-	} else {
-			
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "get a destination address of SP index "
-			 "from phase1 address "
-			 "due to no ID payloads found "
-			 "OR because ID type is not address.\n");
-			
-		/*
-		 * copy the SOURCE address of IKE into the 
-		 * DESTINATION address of the key to search the 
-		 * SPD because the direction of policy is inbound.
-		 */
-		memcpy(&spidx.dst, iph2->src, sysdep_sa_len(iph2->src));
-		switch (spidx.dst.ss_family) {
-		case AF_INET:
-			spidx.prefd = 
-				sizeof(struct in_addr) << 3;
-			break;
-#ifdef INET6
-		case AF_INET6:
-			spidx.prefd = 
-				sizeof(struct in6_addr) << 3;
-			break;
-#endif
-		default:
-			spidx.prefd = 0;
-			break;
-		}
-	}
-					
-	/* make source address in spidx */
-	if (iph2->id_p != NULL
-		&& (_XIDT(iph2->id_p) == IPSECDOI_ID_IPV4_ADDR
-			|| _XIDT(iph2->id_p) == IPSECDOI_ID_IPV6_ADDR
-			|| _XIDT(iph2->id_p) == IPSECDOI_ID_IPV4_ADDR_SUBNET
-			|| _XIDT(iph2->id_p) == IPSECDOI_ID_IPV6_ADDR_SUBNET)) {
-		/* get a source address of inbound SA */
-		error = ipsecdoi_id2sockaddr(iph2->id_p,
-									 (struct sockaddr *)&spidx.src,
-									 &spidx.prefs, &spidx.ul_proto);
-		if (error)
-			goto purge;
-
-#ifdef INET6
-		/*
-		 * get scopeid from the SA address.
-		 * for more detail, see above of this function.
-		 */
-		if (_XIDT(iph2->id_p) == IPSECDOI_ID_IPV6_ADDR) {
-			error = 
-				setscopeid((struct sockaddr *)&spidx.src,
-						   iph2->dst);
-			if (error)
-				goto purge;
-		}
-#endif
-
-		/* make id[src,dst] if both ID types are IP address and same */
-		if (_XIDT(iph2->id_p) == idi2type
-			&& spidx.dst.ss_family == spidx.src.ss_family) {
-			iph2->src_id = 
-				dupsaddr((struct sockaddr *)&spidx.dst);
-			if (iph2->src_id == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					 "allocation failed\n");
-				goto purge;
-			}
-			iph2->dst_id = 
-				dupsaddr((struct sockaddr *)&spidx.src);
-			if (iph2->dst_id == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					 "allocation failed\n");
-				goto purge;
-			}
-		}
-
-	} else {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "get a source address of SP index "
-			 "from phase1 address "
-			 "due to no ID payloads found "
-			 "OR because ID type is not address.\n");
-
-		/* see above comment. */
-		memcpy(&spidx.src, iph2->dst, sysdep_sa_len(iph2->dst));
-		switch (spidx.src.ss_family) {
-		case AF_INET:
-			spidx.prefs = 
-				sizeof(struct in_addr) << 3;
-			break;
-#ifdef INET6
-		case AF_INET6:
-			spidx.prefs = 
-				sizeof(struct in6_addr) << 3;
-			break;
-#endif
-		default:
-			spidx.prefs = 0;
-			break;
-		}
-	}
-
-#undef _XIDT
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		 "get a src address from ID payload "
-		 "%s prefixlen=%u ul_proto=%u\n",
-		 saddr2str((struct sockaddr *)&spidx.src),
-		 spidx.prefs, spidx.ul_proto);
-	plog(LLV_DEBUG, LOCATION, NULL,
-		 "get dst address from ID payload "
-		 "%s prefixlen=%u ul_proto=%u\n",
-		 saddr2str((struct sockaddr *)&spidx.dst),
-		 spidx.prefd, spidx.ul_proto);
-
-	/*
-	 * convert the ul_proto if it is 0
-	 * because 0 in ID payload means a wild card.
-	 */
-	if (spidx.ul_proto == 0)
-		spidx.ul_proto = IPSEC_ULPROTO_ANY;
-
-#undef _XIDT
-
-	/* Check if the generated SPD has the same timestamp as the SA.
-	 * If timestamps are different, this means that the SPD entry has been
-	 * refreshed by another SA, and should NOT be deleted with the current SA.
-	 */
-	if( created ){
-		struct secpolicy *p;
-		
-		p = getsp(&spidx);
-		if(p != NULL){
-			/* just do no test if p is NULL, because this probably just means
-			 * that the policy has already be deleted for some reason.
-			 */
-			if(p->spidx.created != created)
-				goto purge;
-		}
-	}
-
-	/* End of code from get_proposal_r
-	 */
-
-	if (pk_sendspddelete(iph2) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			 "pfkey spddelete(inbound) failed.\n");
-	}else{
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "pfkey spddelete(inbound) sent.\n");
-	}
-
-#ifdef HAVE_POLICY_FWD
-	/* make forward policy if required */
-	if (tunnel_mode_prop(iph2->approval)) {
-		spidx.dir = IPSEC_DIR_FWD;
-		if (pk_sendspddelete(iph2) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				 "pfkey spddelete(forward) failed.\n");
-		}else{
-			plog(LLV_DEBUG, LOCATION, NULL,
-				 "pfkey spddelete(forward) sent.\n");
-		}
-	}
-#endif
-
-	/* make outbound policy */
-	iph2->src = src;
-	iph2->dst = dst;
-	spidx.dir = IPSEC_DIR_OUTBOUND;
-	addr = spidx.src;
-	spidx.src = spidx.dst;
-	spidx.dst = addr;
-	pref = spidx.prefs;
-	spidx.prefs = spidx.prefd;
-	spidx.prefd = pref;
-
-	if (pk_sendspddelete(iph2) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			 "pfkey spddelete(outbound) failed.\n");
-	}else{
-		plog(LLV_DEBUG, LOCATION, NULL,
-			 "pfkey spddelete(outbound) sent.\n");
-	}
-purge:
-	iph2->spidx_gen=NULL;
-}
-
-
-#ifdef INET6
-u_int32_t
-setscopeid(sp_addr0, sa_addr0)
-	struct sockaddr *sp_addr0, *sa_addr0;
-{
-	struct sockaddr_in6 *sp_addr, *sa_addr;
-    
-	sp_addr = (struct sockaddr_in6 *)sp_addr0;
-	sa_addr = (struct sockaddr_in6 *)sa_addr0;
-
-	if (!IN6_IS_ADDR_LINKLOCAL(&sp_addr->sin6_addr)
-	 && !IN6_IS_ADDR_SITELOCAL(&sp_addr->sin6_addr)
-	 && !IN6_IS_ADDR_MULTICAST(&sp_addr->sin6_addr))
-		return 0;
-
-	/* this check should not be here ? */
-	if (sa_addr->sin6_family != AF_INET6) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"can't get scope ID: family mismatch\n");
-		return -1;
-	}
-
-	if (!IN6_IS_ADDR_LINKLOCAL(&sa_addr->sin6_addr)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"scope ID is not supported except of lladdr.\n");
-		return -1;
-	}
-
-	sp_addr->sin6_scope_id = sa_addr->sin6_scope_id;
-
-	return 0;
-}
-#endif
diff --git a/src/racoon/isakmp.h b/src/racoon/isakmp.h
deleted file mode 100644
index d0fd242..0000000
--- a/src/racoon/isakmp.h
+++ /dev/null
@@ -1,429 +0,0 @@
-/*	$NetBSD: isakmp.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: isakmp.h,v 1.11 2005/04/25 22:19:39 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ISAKMP_H
-#define _ISAKMP_H
-
-/* refer to RFC 2408 */
-
-/* must include <netinet/in.h> first. */
-/* must include "isakmp_var.h" first. */
-
-#define INITIATOR	0	/* synonym sender */
-#define RESPONDER	1	/* synonym receiver */
-
-#define GENERATE	1
-#define VALIDATE	0
-
-/* 3.1 ISAKMP Header Format
-         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        !                          Initiator                            !
-        !                            Cookie                             !
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        !                          Responder                            !
-        !                            Cookie                             !
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        !  Next Payload ! MjVer ! MnVer ! Exchange Type !     Flags     !
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        !                          Message ID                           !
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        !                            Length                             !
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-*/
-struct isakmp {
-	cookie_t i_ck;		/* Initiator Cookie */
-	cookie_t r_ck;		/* Responder Cookie */
-	u_int8_t np;		/* Next Payload Type */
-	u_int8_t v;
-	u_int8_t etype;		/* Exchange Type */
-	u_int8_t flags;		/* Flags */
-	u_int32_t msgid;
-	u_int32_t len;		/* Length */
-} __attribute__((__packed__));
-
-/* Next Payload Type */
-#define ISAKMP_NPTYPE_NONE	0	/* NONE*/
-#define ISAKMP_NPTYPE_SA	1	/* Security Association */
-#define ISAKMP_NPTYPE_P		2	/* Proposal */
-#define ISAKMP_NPTYPE_T		3	/* Transform */
-#define ISAKMP_NPTYPE_KE	4	/* Key Exchange */
-#define ISAKMP_NPTYPE_ID	5	/* Identification */
-#define ISAKMP_NPTYPE_CERT	6	/* Certificate */
-#define ISAKMP_NPTYPE_CR	7	/* Certificate Request */
-#define ISAKMP_NPTYPE_HASH	8	/* Hash */
-#define ISAKMP_NPTYPE_SIG	9	/* Signature */
-#define ISAKMP_NPTYPE_NONCE	10	/* Nonce */
-#define ISAKMP_NPTYPE_N		11	/* Notification */
-#define ISAKMP_NPTYPE_D		12	/* Delete */
-#define ISAKMP_NPTYPE_VID	13	/* Vendor ID */
-#define ISAKMP_NPTYPE_ATTR	14	/* Attribute */
-
-
-/* NAT-T draft-ietf-ipsec-nat-t-ike-05 and later */
-/* XXX conflicts with values assigned to RFC 3547 */
-#define ISAKMP_NPTYPE_NATD_BADDRAFT		15	/* NAT Discovery */
-#define ISAKMP_NPTYPE_NATOA_BADDRAFT	16	/* NAT Original Address */
-
-
-/* NAT-T RFC */
-#define ISAKMP_NPTYPE_NATD_RFC	20	/* NAT Discovery */
-#define ISAKMP_NPTYPE_NATOA_RFC	21	/* NAT Original Address */
-
-/* NAT-T up to draft-ietf-ipsec-nat-t-ike-04 */
-#define ISAKMP_NPTYPE_NATD_DRAFT	130	/* NAT Discovery */
-#define ISAKMP_NPTYPE_NATOA_DRAFT	131	/* NAT Original Address */
-
-/* Frag does not seems to be documented */
-#define ISAKMP_NPTYPE_FRAG	132	/* IKE fragmentation payload */
-
-#define ISAKMP_NPTYPE_MAX	17
-			/*	128 - 255 Private Use */
-
-/*
- * The following are valid when the Vendor ID is one of the
- * following:
- *
- *	MD5("A GSS-API Authentication Method for IKE")
- *	MD5("GSSAPI") (recognized by Windows 2000)
- *	MD5("MS NT5 ISAKMPOAKLEY") (sent by Windows 2000)
- *
- * See draft-ietf-ipsec-isakmp-gss-auth-06.txt.
- */
-#define ISAKMP_NPTYPE_GSS	129	/* GSS token */
-
-#define ISAKMP_MAJOR_VERSION	1
-#define ISAKMP_MINOR_VERSION	0
-#define ISAKMP_VERSION_NUMBER	0x10
-#define ISAKMP_GETMAJORV(v)	(((v) & 0xf0) >> 4)
-#define ISAKMP_SETMAJORV(v, m)	((v) = ((v) & 0x0f) | (((m) << 4) & 0xf0))
-#define ISAKMP_GETMINORV(v)	((v) & 0x0f)
-#define ISAKMP_SETMINORV(v, m)	((v) = ((v) & 0xf0) | ((m) & 0x0f))
-
-/* Exchange Type */
-#define ISAKMP_ETYPE_NONE	0	/* NONE */
-#define ISAKMP_ETYPE_BASE	1	/* Base */
-#define ISAKMP_ETYPE_IDENT	2	/* Identity Proteciton */
-#define ISAKMP_ETYPE_AUTH	3	/* Authentication Only */
-#define ISAKMP_ETYPE_AGG	4	/* Aggressive */
-#define ISAKMP_ETYPE_INFO	5	/* Informational */
-#define ISAKMP_ETYPE_CFG	6	/* Mode config */
-/* Additional Exchange Type */
-#define ISAKMP_ETYPE_QUICK	32	/* Quick Mode */
-#define ISAKMP_ETYPE_NEWGRP	33	/* New group Mode */
-#define ISAKMP_ETYPE_ACKINFO	34	/* Acknowledged Informational */
-
-/* Flags */
-#define ISAKMP_FLAG_E 0x01 /* Encryption Bit */
-#define ISAKMP_FLAG_C 0x02 /* Commit Bit */
-#define ISAKMP_FLAG_A 0x04 /* Authentication Only Bit */
-
-/* 3.2 Payload Generic Header
-         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        ! Next Payload  !   RESERVED    !         Payload Length        !
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-*/
-struct isakmp_gen {
-	u_int8_t np;		/* Next Payload */
-	u_int8_t reserved;	/* RESERVED, unused, must set to 0 */
-	u_int16_t len;		/* Payload Length */
-} __attribute__((__packed__));
-
-/* 3.3 Data Attributes
-         0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        !A!       Attribute Type        !    AF=0  Attribute Length     !
-        !F!                             !    AF=1  Attribute Value      !
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-        .                   AF=0  Attribute Value                       .
-        .                   AF=1  Not Transmitted                       .
-        +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
-*/
-struct isakmp_data {
-	u_int16_t type;		/* defined by DOI-spec, and Attribute Format */
-	u_int16_t lorv;		/* if f equal 1, Attribute Length */
-				/* if f equal 0, Attribute Value */
-	/* if f equal 1, Attribute Value */
-} __attribute__((__packed__));
-#define ISAKMP_GEN_TLV 0x0000
-#define ISAKMP_GEN_TV  0x8000
-	/* mask for type of attribute format */
-#define ISAKMP_GEN_MASK 0x8000
-
-#if 0
-/* MAY NOT be used, because of being defined in ipsec-doi. */
-/* 3.4 Security Association Payload */
-struct isakmp_pl_sa {
-	struct isakmp_gen h;
-	u_int32_t doi;		/* Domain of Interpretation */
-	u_int32_t sit;		/* Situation */
-} __attribute__((__packed__));
-#endif
-
-/* 3.5 Proposal Payload */
-	/*
-	The value of the next payload field MUST only contain the value "2"
-	or "0".  If there are additional Proposal payloads in the message,
-	then this field will be 2.  If the current Proposal payload is the
-	last within the security association proposal, then this field will
-	be 0.
-	*/
-struct isakmp_pl_p {
-	struct isakmp_gen h;
-	u_int8_t p_no;		/* Proposal # */
-	u_int8_t proto_id;	/* Protocol */
-	u_int8_t spi_size;	/* SPI Size */
-	u_int8_t num_t;		/* Number of Transforms */
-	/* SPI */
-} __attribute__((__packed__));
-
-/* 3.6 Transform Payload */
-	/*
-	The value of the next payload field MUST only contain the value "3"
-	or "0".  If there are additional Transform payloads in the proposal,
-	then this field will be 3.  If the current Transform payload is the
-	last within the proposal, then this field will be 0.
-	*/
-struct isakmp_pl_t {
-	struct isakmp_gen h;
-	u_int8_t t_no;		/* Transform # */
-	u_int8_t t_id;		/* Transform-Id */
-	u_int16_t reserved;	/* RESERVED2 */
-	/* SA Attributes */
-} __attribute__((__packed__));
-
-/* 3.7 Key Exchange Payload */
-struct isakmp_pl_ke {
-	struct isakmp_gen h;
-	/* Key Exchange Data */
-} __attribute__((__packed__));
-
-#if 0
-/* NOTE: MUST NOT use because of being defined in ipsec-doi instead them. */
-/* 3.8 Identification Payload */
-struct isakmp_pl_id {
-	struct isakmp_gen h;
-	union {
-		u_int8_t id_type;	/* ID Type */
-		u_int32_t doi_data;	/* DOI Specific ID Data */
-	} d;
-	/* Identification Data */
-} __attribute__((__packed__));
-/* A.4 ISAKMP Identification Type Values */
-#define ISAKMP_ID_IPV4_ADDR		0
-#define ISAKMP_ID_IPV4_ADDR_SUBNET	1
-#define ISAKMP_ID_IPV6_ADDR		2
-#define ISAKMP_ID_IPV6_ADDR_SUBNET	3
-#endif
-
-/* 3.9 Certificate Payload */
-struct isakmp_pl_cert {
-	struct isakmp_gen h;
-	/*
-	 * Encoding type of 1 octet follows immediately,
-	 * variable length CERT data follows encoding type.
-	 */
-} __attribute__((__packed__));
-
-/* Certificate Type */
-#define ISAKMP_CERT_NONE	0
-#define ISAKMP_CERT_PKCS7	1
-#define ISAKMP_CERT_PGP		2
-#define ISAKMP_CERT_DNS		3
-#define ISAKMP_CERT_X509SIGN	4
-#define ISAKMP_CERT_X509KE	5
-#define ISAKMP_CERT_KERBEROS	6
-#define ISAKMP_CERT_CRL		7
-#define ISAKMP_CERT_ARL		8
-#define ISAKMP_CERT_SPKI	9
-#define ISAKMP_CERT_X509ATTR	10
-#define ISAKMP_CERT_PLAINRSA	11
-
-/* the method to get peers certificate */
-#define ISAKMP_GETCERT_PAYLOAD		1
-#define ISAKMP_GETCERT_LOCALFILE	2
-#define ISAKMP_GETCERT_DNS		3
-
-/* 3.10 Certificate Request Payload */
-struct isakmp_pl_cr {
-	struct isakmp_gen h;
-	u_int8_t num_cert; /* # Cert. Types */
-	/*
-	Certificate Types (variable length)
-	  -- Contains a list of the types of certificates requested,
-	  sorted in order of preference.  Each individual certificate
-	  type is 1 octet.  This field is NOT required.
-	*/
-	/* # Certificate Authorities (1 octet) */
-	/* Certificate Authorities (variable length) */
-} __attribute__((__packed__));
-
-/* 3.11 Hash Payload */
-struct isakmp_pl_hash {
-	struct isakmp_gen h;
-	/* Hash Data */
-} __attribute__((__packed__));
-
-/* 3.12 Signature Payload */
-struct isakmp_pl_sig {
-	struct isakmp_gen h;
-	/* Signature Data */
-} __attribute__((__packed__));
-
-/* 3.13 Nonce Payload */
-struct isakmp_pl_nonce {
-	struct isakmp_gen h;
-	/* Nonce Data */
-} __attribute__((__packed__));
-
-/* 3.14 Notification Payload */
-struct isakmp_pl_n {
-	struct isakmp_gen h;
-	u_int32_t doi;		/* Domain of Interpretation */
-	u_int8_t proto_id;	/* Protocol-ID */
-	u_int8_t spi_size;	/* SPI Size */
-	u_int16_t type;		/* Notify Message Type */
-	/* SPI */
-	/* Notification Data */
-} __attribute__((__packed__));
-
-/* 3.14.1 Notify Message Types */
-/* NOTIFY MESSAGES - ERROR TYPES */
-#define ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE	1
-#define ISAKMP_NTYPE_DOI_NOT_SUPPORTED		2
-#define ISAKMP_NTYPE_SITUATION_NOT_SUPPORTED	3
-#define ISAKMP_NTYPE_INVALID_COOKIE		4
-#define ISAKMP_NTYPE_INVALID_MAJOR_VERSION	5
-#define ISAKMP_NTYPE_INVALID_MINOR_VERSION	6
-#define ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE	7
-#define ISAKMP_NTYPE_INVALID_FLAGS		8
-#define ISAKMP_NTYPE_INVALID_MESSAGE_ID		9
-#define ISAKMP_NTYPE_INVALID_PROTOCOL_ID	10
-#define ISAKMP_NTYPE_INVALID_SPI		11
-#define ISAKMP_NTYPE_INVALID_TRANSFORM_ID	12
-#define ISAKMP_NTYPE_ATTRIBUTES_NOT_SUPPORTED	13
-#define ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN		14
-#define ISAKMP_NTYPE_BAD_PROPOSAL_SYNTAX	15
-#define ISAKMP_NTYPE_PAYLOAD_MALFORMED		16
-#define ISAKMP_NTYPE_INVALID_KEY_INFORMATION	17
-#define ISAKMP_NTYPE_INVALID_ID_INFORMATION	18
-#define ISAKMP_NTYPE_INVALID_CERT_ENCODING	19
-#define ISAKMP_NTYPE_INVALID_CERTIFICATE	20
-#define ISAKMP_NTYPE_BAD_CERT_REQUEST_SYNTAX	21
-#define ISAKMP_NTYPE_INVALID_CERT_AUTHORITY	22
-#define ISAKMP_NTYPE_INVALID_HASH_INFORMATION	23
-#define ISAKMP_NTYPE_AUTHENTICATION_FAILED	24
-#define ISAKMP_NTYPE_INVALID_SIGNATURE		25
-#define ISAKMP_NTYPE_ADDRESS_NOTIFICATION	26
-#define ISAKMP_NTYPE_NOTIFY_SA_LIFETIME		27
-#define ISAKMP_NTYPE_CERTIFICATE_UNAVAILABLE	28
-#define ISAKMP_NTYPE_UNSUPPORTED_EXCHANGE_TYPE	29
-#define ISAKMP_NTYPE_UNEQUAL_PAYLOAD_LENGTHS	30
-#define ISAKMP_NTYPE_MINERROR			1
-#define ISAKMP_NTYPE_MAXERROR			16383
-/* NOTIFY MESSAGES - STATUS TYPES */
-#define ISAKMP_NTYPE_CONNECTED			16384
-/* 4.6.3 IPSEC DOI Notify Message Types */
-#define ISAKMP_NTYPE_RESPONDER_LIFETIME		24576
-#define ISAKMP_NTYPE_REPLAY_STATUS		24577
-#define ISAKMP_NTYPE_INITIAL_CONTACT		24578
-
-/* DPD */
-#define ISAKMP_NTYPE_R_U_THERE			36136
-#define ISAKMP_NTYPE_R_U_THERE_ACK		36137
-
-#define ISAKMP_NTYPE_HEARTBEAT			40503
-
-/* using only to log */
-#define ISAKMP_LOG_RETRY_LIMIT_REACHED		65530
-
-/* XXX means internal error but it's not reserved by any drafts... */
-#define ISAKMP_INTERNAL_ERROR			-1
-
-/* 3.15 Delete Payload */
-struct isakmp_pl_d {
-	struct isakmp_gen h;
-	u_int32_t doi;		/* Domain of Interpretation */
-	u_int8_t proto_id;	/* Protocol-Id */
-	u_int8_t spi_size;	/* SPI Size */
-	u_int16_t num_spi;	/* # of SPIs */
-	/* SPI(es) */
-} __attribute__((__packed__));
-
-struct payload_list {
-	struct payload_list	*next, *prev;
-	vchar_t			*payload;
-	int			payload_type;
-};
-
-
-/* See draft-ietf-ipsec-isakmp-mode-cfg-04.txt, 3.2 */
-struct isakmp_pl_attr {
-	struct isakmp_gen h;
-	u_int8_t type;		/* Exchange type */
-	u_int8_t res2;
-	u_int16_t id;		/* Per transaction id */
-} __attribute__((__packed__));
-            
-/* Exchange type */
-#define ISAKMP_CFG_REQUEST	1
-#define ISAKMP_CFG_REPLY	2
-#define ISAKMP_CFG_SET		3
-#define ISAKMP_CFG_ACK		4
-
-/* IKE fragmentation payload */
-struct isakmp_frag {
-	u_int16_t unknown0;	/* always set to zero? */
-	u_int16_t len;
-	u_int16_t unknown1;	/* always set to 1? */
-	u_int8_t index;
-	u_int8_t flags;
-} __attribute__((__packed__)); 
-
-/* flags */
-#define ISAKMP_FRAG_LAST	1
-
-/* DPD R-U-THERE / R-U-THERE-ACK Payload */
-struct isakmp_pl_ru {
-	struct isakmp_gen h;
-	u_int32_t doi;		/* Domain of Interpretation */
-	u_int8_t proto_id;	/* Protocol-Id */
-	u_int8_t spi_size;	/* SPI Size */
-	u_int16_t type;		/* Notify type */
-	cookie_t  i_ck;	/* Initiator Cookie */
-	cookie_t r_ck;	/* Responder cookie*/
-	u_int32_t data;		/* Notification data */
-} __attribute__((__packed__));
-
-#endif /* _ISAKMP_H */
diff --git a/src/racoon/isakmp_agg.c b/src/racoon/isakmp_agg.c
deleted file mode 100644
index d9b89d9..0000000
--- a/src/racoon/isakmp_agg.c
+++ /dev/null
@@ -1,1489 +0,0 @@
-/*	$NetBSD: isakmp_agg.c,v 1.9 2006/09/30 21:49:37 manu Exp $	*/
-
-/* Id: isakmp_agg.c,v 1.28 2006/04/06 16:46:08 manubsd Exp */
-
-/*
- * 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.
- */
-
-/* Aggressive Exchange (Aggressive Mode) */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "schedule.h"
-#include "debug.h"
-
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#endif
-
-#include "localconf.h"
-#include "remoteconf.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "evt.h"
-#include "oakley.h"
-#include "handler.h"
-#include "ipsec_doi.h"
-#include "crypto_openssl.h"
-#include "pfkey.h"
-#include "isakmp_agg.h"
-#include "isakmp_inf.h"
-#ifdef ENABLE_HYBRID
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h"
-#endif
-#ifdef ENABLE_FRAG
-#include "isakmp_frag.h"
-#endif
-#include "vendorid.h"
-#include "strnames.h"
-
-#ifdef ENABLE_NATT
-#include "nattraversal.h"
-#endif
-
-#ifdef HAVE_GSSAPI
-#include "gssapi.h"
-#endif
-
-/*
- * begin Aggressive Mode as initiator.
- */
-/*
- * send to responder
- * 	psk: HDR, SA, KE, Ni, IDi1
- * 	sig: HDR, SA, KE, Ni, IDi1 [, CR ]
- *   gssapi: HDR, SA, KE, Ni, IDi1, GSSi
- * 	rsa: HDR, SA, [ HASH(1),] KE, <IDi1_b>Pubkey_r, <Ni_b>Pubkey_r
- * 	rev: HDR, SA, [ HASH(1),] <Ni_b>Pubkey_r, <KE_b>Ke_i,
- * 	     <IDii_b>Ke_i [, <Cert-I_b>Ke_i ]
- */
-int
-agg_i1send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg; /* must be null */
-{
-	struct payload_list *plist = NULL;
-	int need_cr = 0;
-	vchar_t *cr = NULL; 
-	int error = -1;
-#ifdef ENABLE_NATT
-	vchar_t *vid_natt[MAX_NATT_VID_COUNT] = { NULL };
-	int i;
-#endif
-#ifdef ENABLE_HYBRID
-	vchar_t *vid_xauth = NULL;
-	vchar_t *vid_unity = NULL;
-#endif
-#ifdef ENABLE_FRAG
-	vchar_t *vid_frag = NULL;
-#endif
-#ifdef HAVE_GSSAPI
-	vchar_t *gsstoken = NULL;
-	int len;
-#endif
-#ifdef ENABLE_DPD
-	vchar_t *vid_dpd = NULL;
-#endif
-
-
-	/* validity check */
-	if (msg != NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"msg has to be NULL in this function.\n");
-		goto end;
-	}
-	if (iph1->status != PHASE1ST_START) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* create isakmp index */
-	memset(&iph1->index, 0, sizeof(iph1->index));
-	isakmp_newcookie((caddr_t)&iph1->index, iph1->remote, iph1->local);
-
-	/* make ID payload into isakmp status */
-	if (ipsecdoi_setid1(iph1) < 0)
-		goto end;
-
-	/* create SA payload for my proposal */
-	iph1->sa = ipsecdoi_setph1proposal(iph1->rmconf->proposal);
-	if (iph1->sa == NULL)
-		goto end;
-
-	/* consistency check of proposals */
-	if (iph1->rmconf->dhgrp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"configuration failure about DH group.\n");
-		goto end;
-	}
-
-	/* generate DH public value */
-	if (oakley_dh_generate(iph1->rmconf->dhgrp,
-				&iph1->dhpub, &iph1->dhpriv) < 0)
-		goto end;
-
-	/* generate NONCE value */
-	iph1->nonce = eay_set_random(iph1->rmconf->nonce_size);
-	if (iph1->nonce == NULL)
-		goto end;
-
-#ifdef ENABLE_HYBRID
-	/* Do we need Xauth VID? */
-	switch (RMAUTHMETHOD(iph1)) {
-	case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-		if ((vid_xauth = set_vendorid(VENDORID_XAUTH)) == NULL)
-			plog(LLV_ERROR, LOCATION, NULL, 
-			     "Xauth vendor ID generation failed\n");
-		if ((vid_unity = set_vendorid(VENDORID_UNITY)) == NULL)
-			plog(LLV_ERROR, LOCATION, NULL, 
-			     "Unity vendor ID generation failed\n");
-		break;
-	default:
-		break;
-	}
-#endif
-
-#ifdef ENABLE_FRAG
-	if (iph1->rmconf->ike_frag) {
-		vid_frag = set_vendorid(VENDORID_FRAG);
-		if (vid_frag != NULL)
-			vid_frag = isakmp_frag_addcap(vid_frag,
-			    VENDORID_FRAG_AGG);
-		if (vid_frag == NULL)
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Frag vendorID construction failed\n");
-	}		
-#endif
-
-	/* create CR if need */
-	if (iph1->rmconf->send_cr
-	 && oakley_needcr(iph1->rmconf->proposal->authmethod)
-	 && iph1->rmconf->peerscertfile == NULL) {
-		need_cr = 1;
-		cr = oakley_getcr(iph1);
-		if (cr == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get cr buffer.\n");
-			goto end;
-		}
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "authmethod is %s\n",
-		s_oakley_attr_method(iph1->rmconf->proposal->authmethod));
-#ifdef HAVE_GSSAPI
-	if (RMAUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB)
-		gssapi_get_itoken(iph1, &len);
-#endif
-
-	/* set SA payload to propose */
-	plist = isakmp_plist_append(plist, iph1->sa, ISAKMP_NPTYPE_SA);
-
-	/* create isakmp KE payload */
-	plist = isakmp_plist_append(plist, iph1->dhpub, ISAKMP_NPTYPE_KE);
-
-	/* create isakmp NONCE payload */
-	plist = isakmp_plist_append(plist, iph1->nonce, ISAKMP_NPTYPE_NONCE);
-
-	/* create isakmp ID payload */
-	plist = isakmp_plist_append(plist, iph1->id, ISAKMP_NPTYPE_ID);
-
-#ifdef HAVE_GSSAPI
-	if (RMAUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB) {
-		gssapi_get_token_to_send(iph1, &gsstoken);
-		plist = isakmp_plist_append(plist, gsstoken, ISAKMP_NPTYPE_GSS);
-	}
-#endif
-	/* create isakmp CR payload */
-	if (need_cr)
-		plist = isakmp_plist_append(plist, cr, ISAKMP_NPTYPE_CR);
-
-#ifdef ENABLE_FRAG
-	if (vid_frag)
-		plist = isakmp_plist_append(plist, vid_frag, ISAKMP_NPTYPE_VID);
-#endif
-#ifdef ENABLE_NATT
-	/* 
-	 * set VID payload for NAT-T if NAT-T 
-	 * support allowed in the config file 
-	 */
-	if (iph1->rmconf->nat_traversal) 
-		plist = isakmp_plist_append_natt_vids(plist, vid_natt);
-#endif
-#ifdef ENABLE_HYBRID
-	if (vid_xauth)
-		plist = isakmp_plist_append(plist, 
-		    vid_xauth, ISAKMP_NPTYPE_VID);
-	if (vid_unity)
-		plist = isakmp_plist_append(plist, 
-		    vid_unity, ISAKMP_NPTYPE_VID);
-#endif
-#ifdef ENABLE_DPD
-	if(iph1->rmconf->dpd){
-		vid_dpd = set_vendorid(VENDORID_DPD);
-		if (vid_dpd != NULL)
-			plist = isakmp_plist_append(plist, vid_dpd, ISAKMP_NPTYPE_VID);
-	}
-#endif
-
-	iph1->sendbuf = isakmp_plist_set_all (&plist, iph1);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 0);
-#endif
-
-	/* send the packet, add to the schedule to resend */
-	iph1->retry_counter = iph1->rmconf->retry_counter;
-	if (isakmp_ph1resend(iph1) == -1)
-		goto end;
-
-	iph1->status = PHASE1ST_MSG1SENT;
-
-	error = 0;
-
-end:
-	if (cr)
-		vfree(cr);
-#ifdef HAVE_GSSAPI
-	if (gsstoken)
-		vfree(gsstoken);
-#endif
-#ifdef ENABLE_FRAG
-	if (vid_frag)
-		vfree(vid_frag);
-#endif
-#ifdef ENABLE_NATT
-	for (i = 0; i < MAX_NATT_VID_COUNT && vid_natt[i] != NULL; i++)
-		vfree(vid_natt[i]);
-#endif
-#ifdef ENABLE_HYBRID
-	if (vid_xauth != NULL)
-		vfree(vid_xauth);
-	if (vid_unity != NULL)
-		vfree(vid_unity);
-#endif
-#ifdef ENABLE_DPD
-	if (vid_dpd != NULL)
-		vfree(vid_dpd);
-#endif
-
-	return error;
-}
-
-/*
- * receive from responder
- * 	psk: HDR, SA, KE, Nr, IDr1, HASH_R
- * 	sig: HDR, SA, KE, Nr, IDr1, [ CR, ] [ CERT, ] SIG_R
- *   gssapi: HDR, SA, KE, Nr, IDr1, GSSr, HASH_R
- * 	rsa: HDR, SA, KE, <IDr1_b>PubKey_i, <Nr_b>PubKey_i, HASH_R
- * 	rev: HDR, SA, <Nr_b>PubKey_i, <KE_b>Ke_r, <IDir_b>Ke_r, HASH_R
- */
-int
-agg_i2recv(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	vchar_t *satmp = NULL;
-	int error = -1;
-	int vid_numeric;
-	int ptype;
-#ifdef ENABLE_HYBRID
-	vchar_t *unity_vid;
-	vchar_t *xauth_vid;
-#endif
-#ifdef HAVE_GSSAPI
-	vchar_t *gsstoken = NULL;
-#endif
-
-#ifdef ENABLE_NATT
-	int natd_seq = 0;
-	struct natd_payload {
-		int seq;
-		vchar_t *payload;
-		TAILQ_ENTRY(natd_payload) chain;
-	};
-	TAILQ_HEAD(_natd_payload, natd_payload) natd_tree;
-	TAILQ_INIT(&natd_tree);
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG1SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-	pa = (struct isakmp_parse_t *)pbuf->v;
-
-	iph1->pl_hash = NULL;
-
-	/* SA payload is fixed postion */
-	if (pa->type != ISAKMP_NPTYPE_SA) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"received invalid next payload type %d, "
-			"expecting %d.\n",
-			pa->type, ISAKMP_NPTYPE_SA);
-		goto end;
-	}
-
-	if (isakmp_p2ph(&satmp, pa->ptr) < 0)
-		goto end;
-	pa++;
-
-	for (/*nothing*/;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_KE:
-			if (isakmp_p2ph(&iph1->dhpub_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_NONCE:
-			if (isakmp_p2ph(&iph1->nonce_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_ID:
-			if (isakmp_p2ph(&iph1->id_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_HASH:
-			iph1->pl_hash = (struct isakmp_pl_hash *)pa->ptr;
-			break;
-		case ISAKMP_NPTYPE_CR:
-			if (oakley_savecr(iph1, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_CERT:
-			if (oakley_savecert(iph1, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_SIG:
-			if (isakmp_p2ph(&iph1->sig_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-		case ISAKMP_NPTYPE_N:
-			isakmp_check_notify(pa->ptr, iph1);
-			break;
-#ifdef HAVE_GSSAPI
-		case ISAKMP_NPTYPE_GSS:
-			if (isakmp_p2ph(&gsstoken, pa->ptr) < 0)
-				goto end;
-			gssapi_save_received_token(iph1, gsstoken);
-			break;
-#endif
-
-#ifdef ENABLE_NATT
-		case ISAKMP_NPTYPE_NATD_DRAFT:
-		case ISAKMP_NPTYPE_NATD_RFC:
-			if (NATT_AVAILABLE(iph1) && iph1->natt_options != NULL &&
-			    pa->type == iph1->natt_options->payload_nat_d) {
-				struct natd_payload *natd;
-				natd = (struct natd_payload *)racoon_malloc(sizeof(*natd));
-				if (!natd)
-					goto end;
-
-				natd->payload = NULL;
-
-				if (isakmp_p2ph (&natd->payload, pa->ptr) < 0)
-					goto end;
-
-				natd->seq = natd_seq++;
-
-				TAILQ_INSERT_TAIL(&natd_tree, natd, chain);
-				break;
-			}
-			/* passthrough to default... */
-#endif
-
-		default:
-			/* don't send information, see isakmp_ident_r1() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-	/* payload existency check */
-	if (iph1->dhpub_p == NULL || iph1->nonce_p == NULL) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"few isakmp message received.\n");
-		goto end;
-	}
-
-	/* verify identifier */
-	if (ipsecdoi_checkid1(iph1) != 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"invalid ID payload.\n");
-		goto end;
-	}
-
-	/* check SA payload and set approval SA for use */
-	if (ipsecdoi_checkph1proposal(satmp, iph1) < 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"failed to get valid proposal.\n");
-		/* XXX send information */
-		goto end;
-	}
-	VPTRINIT(iph1->sa_ret);
-
-	/* fix isakmp index */
-	memcpy(&iph1->index.r_ck, &((struct isakmp *)msg->v)->r_ck,
-		sizeof(cookie_t));
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1)) {
-		struct natd_payload *natd = NULL;
-		int natd_verified;
-		
-		plog(LLV_INFO, LOCATION, iph1->remote,
-		     "Selected NAT-T version: %s\n",
-		     vid_string_by_id(iph1->natt_options->version));
-
-		/* set both bits first so that we can clear them
-		   upon verifying hashes */
-		iph1->natt_flags |= NAT_DETECTED;
-                        
-		while ((natd = TAILQ_FIRST(&natd_tree)) != NULL) {
-			/* this function will clear appropriate bits bits 
-			   from iph1->natt_flags */
-			natd_verified = natt_compare_addr_hash (iph1,
-				natd->payload, natd->seq);
-
-			plog (LLV_INFO, LOCATION, NULL, "NAT-D payload #%d %s\n",
-				natd->seq - 1,
-				natd_verified ? "verified" : "doesn't match");
-			
-			vfree (natd->payload);
-
-			TAILQ_REMOVE(&natd_tree, natd, chain);
-			racoon_free (natd);
-		}
-
-		plog (LLV_INFO, LOCATION, NULL, "NAT %s %s%s\n",
-		      iph1->natt_flags & NAT_DETECTED ? 
-		      		"detected:" : "not detected",
-		      iph1->natt_flags & NAT_DETECTED_ME ? "ME " : "",
-		      iph1->natt_flags & NAT_DETECTED_PEER ? "PEER" : "");
-
-		if (iph1->natt_flags & NAT_DETECTED)
-			natt_float_ports (iph1);
-	}
-#endif
-
-	/* compute sharing secret of DH */
-	if (oakley_dh_compute(iph1->rmconf->dhgrp, iph1->dhpub,
-				iph1->dhpriv, iph1->dhpub_p, &iph1->dhgxy) < 0)
-		goto end;
-
-	/* generate SKEYIDs & IV & final cipher key */
-	if (oakley_skeyid(iph1) < 0)
-		goto end;
-	if (oakley_skeyid_dae(iph1) < 0)
-		goto end;
-	if (oakley_compute_enckey(iph1) < 0)
-		goto end;
-	if (oakley_newiv(iph1) < 0)
-		goto end;
-
-	/* validate authentication value */
-	ptype = oakley_validate_auth(iph1);
-	if (ptype != 0) {
-		if (ptype == -1) {
-			/* message printed inner oakley_validate_auth() */
-			goto end;
-		}
-		EVT_PUSH(iph1->local, iph1->remote, 
-		    EVTT_PEERPH1AUTH_FAILED, NULL);
-		isakmp_info_send_n1(iph1, ptype, NULL);
-		goto end;
-	}
-
-	if (oakley_checkcr(iph1) < 0) {
-		/* Ignore this error in order to be interoperability. */
-		;
-	}
-
-	/* change status of isakmp status entry */
-	iph1->status = PHASE1ST_MSG2RECEIVED;
-
-	error = 0;
-
-end:
-#ifdef HAVE_GSSAPI
-	if (gsstoken)
-		vfree(gsstoken);
-#endif
-	if (pbuf)
-		vfree(pbuf);
-	if (satmp)
-		vfree(satmp);
-	if (error) {
-		VPTRINIT(iph1->dhpub_p);
-		VPTRINIT(iph1->nonce_p);
-		VPTRINIT(iph1->id_p);
-		oakley_delcert(iph1->cert_p);
-		iph1->cert_p = NULL;
-		oakley_delcert(iph1->crl_p);
-		iph1->crl_p = NULL;
-		VPTRINIT(iph1->sig_p);
-		oakley_delcert(iph1->cr_p);
-		iph1->cr_p = NULL;
-	}
-
-	return error;
-}
-
-/*
- * send to responder
- * 	psk: HDR, HASH_I
- *   gssapi: HDR, HASH_I
- * 	sig: HDR, [ CERT, ] SIG_I
- * 	rsa: HDR, HASH_I
- * 	rev: HDR, HASH_I
- */
-int
-agg_i2send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	struct payload_list *plist = NULL;
-	int need_cert = 0;
-	int error = -1;
-	vchar_t *gsshash = NULL;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG2RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* generate HASH to send */
-	plog(LLV_DEBUG, LOCATION, NULL, "generate HASH_I\n");
-	iph1->hash = oakley_ph1hash_common(iph1, GENERATE);
-	if (iph1->hash == NULL) {
-#ifdef HAVE_GSSAPI
-		if (gssapi_more_tokens(iph1) &&
-#ifdef ENABLE_HYBRID
-		    !iph1->rmconf->xauth &&
-#endif
-		    1)
-			isakmp_info_send_n1(iph1,
-			    ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE, NULL);
-#endif
-		goto end;
-	}
-
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-#ifdef ENABLE_HYBRID
-	case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-#endif  
-		/* set HASH payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->hash, ISAKMP_NPTYPE_HASH);
-		break;
-
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-#endif
-		/* XXX if there is CR or not ? */
-
-		if (oakley_getmycert(iph1) < 0)
-			goto end;
-
-		if (oakley_getsign(iph1) < 0)
-			goto end;
-
-		if (iph1->cert != NULL && iph1->rmconf->send_cert)
-			need_cert = 1;
-
-		/* add CERT payload if there */
-		if (need_cert)
-			plist = isakmp_plist_append(plist, 
-			    iph1->cert->pl, ISAKMP_NPTYPE_CERT);
-
-		/* add SIG payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->sig, ISAKMP_NPTYPE_SIG);
-		break;
-
-	case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-#endif
-		break;
-#ifdef HAVE_GSSAPI
-	case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-		gsshash = gssapi_wraphash(iph1);
-		if (gsshash == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to wrap hash\n");
-			isakmp_info_send_n1(iph1,
-				ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE, NULL);
-			goto end;
-		}
-
-		plist = isakmp_plist_append(plist, 
-		    gsshash, ISAKMP_NPTYPE_HASH);
-		break;
-#endif
-	}
-
-#ifdef ENABLE_NATT
-	/* generate NAT-D payloads */
-	if (NATT_AVAILABLE(iph1)) {
-		vchar_t *natd[2] = { NULL, NULL };
-
-		plog(LLV_INFO, LOCATION, 
-		    NULL, "Adding remote and local NAT-D payloads.\n");
-
-		if ((natd[0] = natt_hash_addr (iph1, iph1->remote)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "NAT-D hashing failed for %s\n", 
-			    saddr2str(iph1->remote));
-			goto end;
-		}
-
-		if ((natd[1] = natt_hash_addr (iph1, iph1->local)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "NAT-D hashing failed for %s\n", 
-			    saddr2str(iph1->local));
-			goto end;
-		}
-
-		plist = isakmp_plist_append(plist, 
-		    natd[0], iph1->natt_options->payload_nat_d);
-		plist = isakmp_plist_append(plist, 
-		    natd[1], iph1->natt_options->payload_nat_d);
-	}
-#endif
-
-	iph1->sendbuf = isakmp_plist_set_all (&plist, iph1);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 0);
-#endif
-
-	/* send to responder */
-	if (isakmp_send(iph1, iph1->sendbuf) < 0)
-		goto end;
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph1->remote, iph1->local, iph1->sendbuf, msg) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	/* set encryption flag */
-	iph1->flags |= ISAKMP_FLAG_E;
-
-	iph1->status = PHASE1ST_ESTABLISHED;
-
-	error = 0;
-
-end:
-	if (gsshash)
-		vfree(gsshash);
-	return error;
-}
-
-/*
- * receive from initiator
- * 	psk: HDR, SA, KE, Ni, IDi1
- * 	sig: HDR, SA, KE, Ni, IDi1 [, CR ]
- *   gssapi: HDR, SA, KE, Ni, IDi1 , GSSi
- * 	rsa: HDR, SA, [ HASH(1),] KE, <IDi1_b>Pubkey_r, <Ni_b>Pubkey_r
- * 	rev: HDR, SA, [ HASH(1),] <Ni_b>Pubkey_r, <KE_b>Ke_i,
- * 	     <IDii_b>Ke_i [, <Cert-I_b>Ke_i ]
- */
-int
-agg_r1recv(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	int error = -1;
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	int vid_numeric;
-#ifdef HAVE_GSSAPI
-	vchar_t *gsstoken = NULL;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_START) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-	pa = (struct isakmp_parse_t *)pbuf->v;
-
-	/* SA payload is fixed postion */
-	if (pa->type != ISAKMP_NPTYPE_SA) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"received invalid next payload type %d, "
-			"expecting %d.\n",
-			pa->type, ISAKMP_NPTYPE_SA);
-		goto end;
-	}
-	if (isakmp_p2ph(&iph1->sa, pa->ptr) < 0)
-		goto end;
-	pa++;
-
-	for (/*nothing*/;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"received payload of type %s\n",
-			s_isakmp_nptype(pa->type));
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_KE:
-			if (isakmp_p2ph(&iph1->dhpub_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_NONCE:
-			if (isakmp_p2ph(&iph1->nonce_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_ID:
-			if (isakmp_p2ph(&iph1->id_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_VID:
-			vid_numeric = handle_vendorid(iph1, pa->ptr);
-#ifdef ENABLE_FRAG
-			if ((vid_numeric == VENDORID_FRAG) &&
-			    (vendorid_frag_cap(pa->ptr) & VENDORID_FRAG_AGG))
-				iph1->frag = 1;
-#endif
-			break;
-
-		case ISAKMP_NPTYPE_CR:
-			if (oakley_savecr(iph1, pa->ptr) < 0)
-				goto end;
-			break;
-
-#ifdef HAVE_GSSAPI
-		case ISAKMP_NPTYPE_GSS:
-			if (isakmp_p2ph(&gsstoken, pa->ptr) < 0)
-				goto end;
-			gssapi_save_received_token(iph1, gsstoken);
-			break;
-#endif
-		default:
-			/* don't send information, see isakmp_ident_r1() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-	/* payload existency check */
-	if (iph1->dhpub_p == NULL || iph1->nonce_p == NULL) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"few isakmp message received.\n");
-		goto end;
-	}
-
-	/* verify identifier */
-	if (ipsecdoi_checkid1(iph1) != 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"invalid ID payload.\n");
-		goto end;
-	}
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1))
-		plog(LLV_INFO, LOCATION, iph1->remote,
-		     "Selected NAT-T version: %s\n",
-		     vid_string_by_id(iph1->natt_options->version));
-#endif
-
-	/* check SA payload and set approval SA for use */
-	if (ipsecdoi_checkph1proposal(iph1->sa, iph1) < 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"failed to get valid proposal.\n");
-		/* XXX send information */
-		goto end;
-	}
-
-	if (oakley_checkcr(iph1) < 0) {
-		/* Ignore this error in order to be interoperability. */
-		;
-	}
-
-	iph1->status = PHASE1ST_MSG1RECEIVED;
-
-	error = 0;
-
-end:
-#ifdef HAVE_GSSAPI
-	if (gsstoken)
-		vfree(gsstoken);
-#endif
-	if (pbuf)
-		vfree(pbuf);
-	if (error) {
-		VPTRINIT(iph1->sa);
-		VPTRINIT(iph1->dhpub_p);
-		VPTRINIT(iph1->nonce_p);
-		VPTRINIT(iph1->id_p);
-		oakley_delcert(iph1->cr_p);
-		iph1->cr_p = NULL;
-	}
-
-	return error;
-}
-
-/*
- * send to initiator
- * 	psk: HDR, SA, KE, Nr, IDr1, HASH_R
- * 	sig: HDR, SA, KE, Nr, IDr1, [ CR, ] [ CERT, ] SIG_R
- *   gssapi: HDR, SA, KE, Nr, IDr1, GSSr, HASH_R
- * 	rsa: HDR, SA, KE, <IDr1_b>PubKey_i, <Nr_b>PubKey_i, HASH_R
- * 	rev: HDR, SA, <Nr_b>PubKey_i, <KE_b>Ke_r, <IDir_b>Ke_r, HASH_R
- */
-int
-agg_r1send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	struct payload_list *plist = NULL;
-	int need_cr = 0;
-	int need_cert = 0;
-	vchar_t *cr = NULL;
-	int error = -1;
-#ifdef ENABLE_HYBRID
-	vchar_t *xauth_vid = NULL;
-	vchar_t *unity_vid = NULL;
-#endif
-#ifdef ENABLE_NATT
-	vchar_t *vid_natt = NULL;
-	vchar_t *natd[2] = { NULL, NULL };
-#endif
-#ifdef ENABLE_DPD
-	vchar_t *vid_dpd = NULL;
-#endif
-#ifdef ENABLE_FRAG
-	vchar_t *vid_frag = NULL;
-#endif
-
-#ifdef HAVE_GSSAPI
-	int gsslen;
-	vchar_t *gsstoken = NULL, *gsshash = NULL;
-	vchar_t *gss_sa = NULL;
-	int free_gss_sa = 0;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG1RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* set responder's cookie */
-	isakmp_newcookie((caddr_t)&iph1->index.r_ck, iph1->remote, iph1->local);
-
-	/* make ID payload into isakmp status */
-	if (ipsecdoi_setid1(iph1) < 0)
-		goto end;
-
-	/* generate DH public value */
-	if (oakley_dh_generate(iph1->rmconf->dhgrp,
-				&iph1->dhpub, &iph1->dhpriv) < 0)
-		goto end;
-
-	/* generate NONCE value */
-	iph1->nonce = eay_set_random(iph1->rmconf->nonce_size);
-	if (iph1->nonce == NULL)
-		goto end;
-
-	/* compute sharing secret of DH */
-	if (oakley_dh_compute(iph1->approval->dhgrp, iph1->dhpub,
-				iph1->dhpriv, iph1->dhpub_p, &iph1->dhgxy) < 0)
-		goto end;
-
-	/* generate SKEYIDs & IV & final cipher key */
-	if (oakley_skeyid(iph1) < 0)
-		goto end;
-	if (oakley_skeyid_dae(iph1) < 0)
-		goto end;
-	if (oakley_compute_enckey(iph1) < 0)
-		goto end;
-	if (oakley_newiv(iph1) < 0)
-		goto end;
-
-#ifdef HAVE_GSSAPI
-	if (RMAUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB)
-		gssapi_get_rtoken(iph1, &gsslen);
-#endif
-
-	/* generate HASH to send */
-	plog(LLV_DEBUG, LOCATION, NULL, "generate HASH_R\n");
-	iph1->hash = oakley_ph1hash_common(iph1, GENERATE);
-	if (iph1->hash == NULL) {
-#ifdef HAVE_GSSAPI
-		if (gssapi_more_tokens(iph1))
-			isakmp_info_send_n1(iph1,
-			    ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE, NULL);
-#endif
-		goto end;
-	}
-
-	/* create CR if need */
-	if (iph1->rmconf->send_cr
-	 && oakley_needcr(iph1->approval->authmethod)
-	 && iph1->rmconf->peerscertfile == NULL) {
-		need_cr = 1;
-		cr = oakley_getcr(iph1);
-		if (cr == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get cr buffer.\n");
-			goto end;
-		}
-	}
-
-#ifdef ENABLE_NATT
-	/* Has the peer announced NAT-T? */
-	if (NATT_AVAILABLE(iph1)) {
-	  	/* set chosen VID */
-		vid_natt = set_vendorid(iph1->natt_options->version);
-
-		/* generate NAT-D payloads */
-		plog (LLV_INFO, LOCATION, NULL, "Adding remote and local NAT-D payloads.\n");
-		if ((natd[0] = natt_hash_addr (iph1, iph1->remote)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"NAT-D hashing failed for %s\n", saddr2str(iph1->remote));
-			goto end;
-		}
-
-		if ((natd[1] = natt_hash_addr (iph1, iph1->local)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"NAT-D hashing failed for %s\n", saddr2str(iph1->local));
-			goto end;
-		}
-	}
-#endif
-#ifdef ENABLE_DPD
-	/* Only send DPD support if remote announced DPD and if DPD support is active */
-	if (iph1->dpd_support && iph1->rmconf->dpd)
-		vid_dpd = set_vendorid(VENDORID_DPD);
-#endif
-#ifdef ENABLE_FRAG
-	if (iph1->frag) {
-		vid_frag = set_vendorid(VENDORID_FRAG);
-		if (vid_frag != NULL)
-			vid_frag = isakmp_frag_addcap(vid_frag,
-			    VENDORID_FRAG_AGG);
-		if (vid_frag == NULL)
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Frag vendorID construction failed\n");
-	}
-#endif
-
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-#endif
-		/* set SA payload to reply */
-		plist = isakmp_plist_append(plist, 
-		    iph1->sa_ret, ISAKMP_NPTYPE_SA);
-
-		/* create isakmp KE payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->dhpub, ISAKMP_NPTYPE_KE);
-
-		/* create isakmp NONCE payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->nonce, ISAKMP_NPTYPE_NONCE);
-
-		/* create isakmp ID payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->id, ISAKMP_NPTYPE_ID);
-
-		/* create isakmp HASH payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->hash, ISAKMP_NPTYPE_HASH);
-
-		/* create isakmp CR payload if needed */
-		if (need_cr)
-			plist = isakmp_plist_append(plist, 
-			    cr, ISAKMP_NPTYPE_CR);
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-#endif
-		/* XXX if there is CR or not ? */
-
-		if (oakley_getmycert(iph1) < 0)
-			goto end;
-
-		if (oakley_getsign(iph1) < 0)
-			goto end;
-
-		if (iph1->cert != NULL && iph1->rmconf->send_cert)
-			need_cert = 1;
-
-		/* set SA payload to reply */
-		plist = isakmp_plist_append(plist, 
-		    iph1->sa_ret, ISAKMP_NPTYPE_SA);
-
-		/* create isakmp KE payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->dhpub, ISAKMP_NPTYPE_KE);
-
-		/* create isakmp NONCE payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->nonce, ISAKMP_NPTYPE_NONCE);
-
-		/* add ID payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->id, ISAKMP_NPTYPE_ID);
-
-		/* add CERT payload if there */
-		if (need_cert)
-			plist = isakmp_plist_append(plist, 
-			    iph1->cert->pl, ISAKMP_NPTYPE_CERT);
-
-		/* add SIG payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->sig, ISAKMP_NPTYPE_SIG);
-
-		/* create isakmp CR payload if needed */
-		if (need_cr)
-			plist = isakmp_plist_append(plist, 
-			    cr, ISAKMP_NPTYPE_CR);
-		break;
-
-	case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-#endif
-		break;
-#ifdef HAVE_GSSAPI
-	case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-			/* create buffer to send isakmp payload */
-			gsshash = gssapi_wraphash(iph1);
-			if (gsshash == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to wrap hash\n");
-				/*
-				 * This is probably due to the GSS 
-				 * roundtrips not being finished yet. 
-				 * Return this error in the hope that 
-				 * a fallback to main mode will be done.
-				 */
-				isakmp_info_send_n1(iph1,
-				    ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE, NULL);
-				goto end;
-			}
-			if (iph1->approval->gssid != NULL)
-				gss_sa = 
-				    ipsecdoi_setph1proposal(iph1->approval);  
-			else
-				gss_sa = iph1->sa_ret;
-
-			if (gss_sa != iph1->sa_ret)
-				free_gss_sa = 1;
-
-			/* set SA payload to reply */
-			plist = isakmp_plist_append(plist, 
-			    gss_sa, ISAKMP_NPTYPE_SA);
-
-			/* create isakmp KE payload */
-			plist = isakmp_plist_append(plist, 
-			    iph1->dhpub, ISAKMP_NPTYPE_KE);
-
-			/* create isakmp NONCE payload */
-			plist = isakmp_plist_append(plist, 
-			    iph1->nonce, ISAKMP_NPTYPE_NONCE);
-
-			/* create isakmp ID payload */
-			plist = isakmp_plist_append(plist, 
-			    iph1->id, ISAKMP_NPTYPE_ID);
-
-			/* create GSS payload */
-			gssapi_get_token_to_send(iph1, &gsstoken);
-			plist = isakmp_plist_append(plist, 
-			    gsstoken, ISAKMP_NPTYPE_GSS);
-
-			/* create isakmp HASH payload */
-			plist = isakmp_plist_append(plist, 
-			    gsshash, ISAKMP_NPTYPE_HASH);
-
-			/* append vendor id, if needed */
-			break;
-#endif
-	}
-
-#ifdef ENABLE_HYBRID
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_XAUTH) {
-		plog (LLV_INFO, LOCATION, NULL, "Adding xauth VID payload.\n");
-		if ((xauth_vid = set_vendorid(VENDORID_XAUTH)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Cannot create Xauth vendor ID\n");
-			goto end;
-		}
-		plist = isakmp_plist_append(plist, 
-		    xauth_vid, ISAKMP_NPTYPE_VID);
-	}
-
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_UNITY) {
-		if ((unity_vid = set_vendorid(VENDORID_UNITY)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Cannot create Unity vendor ID\n");
-			goto end;
-		}
-		plist = isakmp_plist_append(plist, 
-		    unity_vid, ISAKMP_NPTYPE_VID);
-	}
-#endif
-
-#ifdef ENABLE_NATT
-	/* append NAT-T payloads */
-	if (vid_natt) {
-		/* chosen VID */
-		plist = isakmp_plist_append(plist, vid_natt, ISAKMP_NPTYPE_VID);
-		/* NAT-D */
-		plist = isakmp_plist_append(plist, natd[0], iph1->natt_options->payload_nat_d);
-		plist = isakmp_plist_append(plist, natd[1], iph1->natt_options->payload_nat_d);
-	}
-#endif
-
-#ifdef ENABLE_FRAG
-	if (vid_frag)
-		plist = isakmp_plist_append(plist, vid_frag, ISAKMP_NPTYPE_VID);
-#endif
-
-#ifdef ENABLE_DPD
-	if (vid_dpd)
-		plist = isakmp_plist_append(plist, vid_dpd, ISAKMP_NPTYPE_VID);
-#endif
-
-	iph1->sendbuf = isakmp_plist_set_all (&plist, iph1);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 1);
-#endif
-
-	/* send the packet, add to the schedule to resend */
-	iph1->retry_counter = iph1->rmconf->retry_counter;
-	if (isakmp_ph1resend(iph1) == -1)
-		goto end;
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph1->remote, iph1->local, iph1->sendbuf, msg) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_MSG1SENT;
-
-	error = 0;
-
-end:
-	if (cr)
-		vfree(cr);
-#ifdef ENABLE_HYBRID
-	if (xauth_vid)
-		vfree(xauth_vid);
-	if (unity_vid)
-		vfree(unity_vid);
-#endif
-#ifdef HAVE_GSSAPI
-	if (gsstoken)
-		vfree(gsstoken);
-	if (gsshash)
-		vfree(gsshash);
-	if (free_gss_sa)
-		vfree(gss_sa);
-#endif
-#ifdef ENABLE_DPD
-	if (vid_dpd)
-		vfree(vid_dpd);
-#endif
-#ifdef ENABLE_FRAG
-	if (vid_frag)
-		vfree(vid_frag);
-#endif
-
-	return error;
-}
-
-/*
- * receive from initiator
- * 	psk: HDR, HASH_I
- *   gssapi: HDR, HASH_I
- * 	sig: HDR, [ CERT, ] SIG_I
- * 	rsa: HDR, HASH_I
- * 	rev: HDR, HASH_I
- */
-int
-agg_r2recv(iph1, msg0)
-	struct ph1handle *iph1;
-	vchar_t *msg0;
-{
-	vchar_t *msg = NULL;
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	int error = -1;
-	int ptype;
-
-#ifdef ENABLE_NATT
-	int natd_seq = 0;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG1SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* decrypting if need. */
-	/* XXX configurable ? */
-	if (ISSET(((struct isakmp *)msg0->v)->flags, ISAKMP_FLAG_E)) {
-		msg = oakley_do_decrypt(iph1, msg0,
-					iph1->ivm->iv, iph1->ivm->ive);
-		if (msg == NULL)
-			goto end;
-	} else
-		msg = vdup(msg0);
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-
-	iph1->pl_hash = NULL;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_HASH:
-			iph1->pl_hash = (struct isakmp_pl_hash *)pa->ptr;
-			break;
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-		case ISAKMP_NPTYPE_CERT:
-			if (oakley_savecert(iph1, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_SIG:
-			if (isakmp_p2ph(&iph1->sig_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_N:
-			isakmp_check_notify(pa->ptr, iph1);
-			break;
-
-#ifdef ENABLE_NATT
-		case ISAKMP_NPTYPE_NATD_DRAFT:
-		case ISAKMP_NPTYPE_NATD_RFC:
-			if (NATT_AVAILABLE(iph1) && iph1->natt_options != NULL &&
-				pa->type == iph1->natt_options->payload_nat_d)
-			{
-				vchar_t *natd_received = NULL;
-				int natd_verified;
-				
-				if (isakmp_p2ph (&natd_received, pa->ptr) < 0)
-					goto end;
-				
-				if (natd_seq == 0)
-					iph1->natt_flags |= NAT_DETECTED;
-				
-				natd_verified = natt_compare_addr_hash (iph1,
-					natd_received, natd_seq++);
-				
-				plog (LLV_INFO, LOCATION, NULL, "NAT-D payload #%d %s\n",
-					natd_seq - 1,
-					natd_verified ? "verified" : "doesn't match");
-				
-				vfree (natd_received);
-				break;
-			}
-			/* passthrough to default... */
-#endif
-
-		default:
-			/* don't send information, see isakmp_ident_r1() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1))
-		plog (LLV_INFO, LOCATION, NULL, "NAT %s %s%s\n",
-		      iph1->natt_flags & NAT_DETECTED ? 
-		      		"detected:" : "not detected",
-		      iph1->natt_flags & NAT_DETECTED_ME ? "ME " : "",
-		      iph1->natt_flags & NAT_DETECTED_PEER ? "PEER" : "");
-#endif
-
-	/* validate authentication value */
-	ptype = oakley_validate_auth(iph1);
-	if (ptype != 0) {
-		if (ptype == -1) {
-			/* message printed inner oakley_validate_auth() */
-			goto end;
-		}
-		EVT_PUSH(iph1->local, iph1->remote, 
-		    EVTT_PEERPH1AUTH_FAILED, NULL);
-		isakmp_info_send_n1(iph1, ptype, NULL);
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_MSG2RECEIVED;
-
-	error = 0;
-
-end:
-	if (pbuf)
-		vfree(pbuf);
-	if (msg)
-		vfree(msg);
-	if (error) {
-		oakley_delcert(iph1->cert_p);
-		iph1->cert_p = NULL;
-		oakley_delcert(iph1->crl_p);
-		iph1->crl_p = NULL;
-		VPTRINIT(iph1->sig_p);
-	}
-
-	return error;
-}
-
-/*
- * status update and establish isakmp sa.
- */
-int
-agg_r2send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	int error = -1;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG2RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* IV synchronized when packet encrypted. */
-	/* see handler.h about IV synchronization. */
-	if (ISSET(((struct isakmp *)msg->v)->flags, ISAKMP_FLAG_E))
-		memcpy(iph1->ivm->iv->v, iph1->ivm->ive->v, iph1->ivm->iv->l);
-
-	/* set encryption flag */
-	iph1->flags |= ISAKMP_FLAG_E;
-
-	iph1->status = PHASE1ST_ESTABLISHED;
-
-	error = 0;
-
-end:
-	return error;
-}
diff --git a/src/racoon/isakmp_agg.h b/src/racoon/isakmp_agg.h
deleted file mode 100644
index 89645eb..0000000
--- a/src/racoon/isakmp_agg.h
+++ /dev/null
@@ -1,46 +0,0 @@
-/*	$NetBSD: isakmp_agg.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: isakmp_agg.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ISAKMP_AGG_H
-#define _ISAKMP_AGG_H
-
-extern int agg_i1send __P((struct ph1handle *, vchar_t *));
-extern int agg_i2recv __P((struct ph1handle *, vchar_t *));
-extern int agg_i2send __P((struct ph1handle *, vchar_t *));
-
-extern int agg_r1recv __P((struct ph1handle *, vchar_t *));
-extern int agg_r1send __P((struct ph1handle *, vchar_t *));
-extern int agg_r2recv __P((struct ph1handle *, vchar_t *));
-extern int agg_r2send __P((struct ph1handle *, vchar_t *));
-
-#endif /* _ISAKMP_AGG_H */
diff --git a/src/racoon/isakmp_base.c b/src/racoon/isakmp_base.c
deleted file mode 100644
index 308c3e3..0000000
--- a/src/racoon/isakmp_base.c
+++ /dev/null
@@ -1,1407 +0,0 @@
-/*	$NetBSD: isakmp_base.c,v 1.7 2006/10/02 21:51:33 manu Exp $	*/
-
-/*	$KAME: isakmp_base.c,v 1.49 2003/11/13 02:30:20 sakane Exp $	*/
-
-/*
- * 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.
- */
-
-/* Base Exchange (Base Mode) */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "schedule.h"
-#include "debug.h"
-
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#endif
-
-#include "localconf.h"
-#include "remoteconf.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "evt.h"
-#include "oakley.h"
-#include "handler.h"
-#include "ipsec_doi.h"
-#include "crypto_openssl.h"
-#include "pfkey.h"
-#include "isakmp_base.h"
-#include "isakmp_inf.h"
-#include "vendorid.h"
-#ifdef ENABLE_NATT
-#include "nattraversal.h"
-#endif
-#ifdef ENABLE_FRAG
-#include "isakmp_frag.h"
-#endif
-#ifdef ENABLE_HYBRID
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h"
-#endif
-
-/* %%%
- * begin Identity Protection Mode as initiator.
- */
-/*
- * send to responder
- * 	psk: HDR, SA, Idii, Ni_b
- * 	sig: HDR, SA, Idii, Ni_b
- * 	rsa: HDR, SA, [HASH(1),] <IDii_b>Pubkey_r, <Ni_b>Pubkey_r
- * 	rev: HDR, SA, [HASH(1),] <Ni_b>Pubkey_r, <IDii_b>Ke_i
- */
-int
-base_i1send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg; /* must be null */
-{
-	struct payload_list *plist = NULL;
-	int error = -1;
-#ifdef ENABLE_NATT
-	vchar_t *vid_natt[MAX_NATT_VID_COUNT] = { NULL };
-	int i, vid_natt_i = 0;
-#endif
-#ifdef ENABLE_FRAG
-	vchar_t *vid_frag = NULL;
-#endif
-#ifdef ENABLE_HYBRID
-	vchar_t *vid_xauth = NULL;
-	vchar_t *vid_unity = NULL;
-#endif
-#ifdef ENABLE_DPD
-	vchar_t *vid_dpd = NULL;
-#endif
-
-
-	/* validity check */
-	if (msg != NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"msg has to be NULL in this function.\n");
-		goto end;
-	}
-	if (iph1->status != PHASE1ST_START) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* create isakmp index */
-	memset(&iph1->index, 0, sizeof(iph1->index));
-	isakmp_newcookie((caddr_t)&iph1->index, iph1->remote, iph1->local);
-
-	/* make ID payload into isakmp status */
-	if (ipsecdoi_setid1(iph1) < 0)
-		goto end;
-
-	/* create SA payload for my proposal */
-	iph1->sa = ipsecdoi_setph1proposal(iph1->rmconf->proposal);
-	if (iph1->sa == NULL)
-		goto end;
-
-	/* generate NONCE value */
-	iph1->nonce = eay_set_random(iph1->rmconf->nonce_size);
-	if (iph1->nonce == NULL)
-		goto end;
-
-#ifdef ENABLE_HYBRID
-        /* Do we need Xauth VID? */
-        switch (RMAUTHMETHOD(iph1)) {
-        case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-        case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-        case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-        case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-        case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-        case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-        case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-                if ((vid_xauth = set_vendorid(VENDORID_XAUTH)) == NULL)
-                        plog(LLV_ERROR, LOCATION, NULL,
-                             "Xauth vendor ID generation failed\n");
-
-                if ((vid_unity = set_vendorid(VENDORID_UNITY)) == NULL)
-                        plog(LLV_ERROR, LOCATION, NULL,
-                             "Unity vendor ID generation failed\n");
-                break;
-        default:
-                break;
-        }
-#endif
-#ifdef ENABLE_FRAG
-	if (iph1->rmconf->ike_frag) {
-		vid_frag = set_vendorid(VENDORID_FRAG);
-		if (vid_frag != NULL)
-			vid_frag = isakmp_frag_addcap(vid_frag, 
-			    VENDORID_FRAG_BASE);
-		if (vid_frag == NULL)
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Frag vendorID construction failed\n");
-	}
-#endif
-#ifdef ENABLE_NATT
-	/* Is NAT-T support allowed in the config file? */
-	if (iph1->rmconf->nat_traversal) {
-		/* Advertise NAT-T capability */
-		memset (vid_natt, 0, sizeof (vid_natt));
-#ifdef VENDORID_NATT_00
-		if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_00)) != NULL)
-			vid_natt_i++;
-#endif
-#ifdef VENDORID_NATT_02
-		if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_02)) != NULL)
-			vid_natt_i++;
-#endif
-#ifdef VENDORID_NATT_02_N
-		if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_02_N)) != NULL)
-			vid_natt_i++;
-#endif
-#ifdef VENDORID_NATT_RFC
-		if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_RFC)) != NULL)
-			vid_natt_i++;
-#endif
-	}
-#endif
-
-	/* set SA payload to propose */
-	plist = isakmp_plist_append(plist, iph1->sa, ISAKMP_NPTYPE_SA);
-
-	/* create isakmp ID payload */
-	plist = isakmp_plist_append(plist, iph1->id, ISAKMP_NPTYPE_ID);
-
-	/* create isakmp NONCE payload */
-	plist = isakmp_plist_append(plist, iph1->nonce, ISAKMP_NPTYPE_NONCE);
-
-#ifdef ENABLE_FRAG
-	if (vid_frag)
-		plist = isakmp_plist_append(plist, vid_frag, ISAKMP_NPTYPE_VID);
-#endif
-#ifdef ENABLE_HYBRID
-	if (vid_xauth)
-		plist = isakmp_plist_append(plist, 
-		    vid_xauth, ISAKMP_NPTYPE_VID);
-	if (vid_unity)
-		plist = isakmp_plist_append(plist, 
-		    vid_unity, ISAKMP_NPTYPE_VID);
-#endif
-#ifdef ENABLE_DPD
-	if (iph1->rmconf->dpd) {
-		vid_dpd = set_vendorid(VENDORID_DPD);
-		if (vid_dpd != NULL)
-			plist = isakmp_plist_append(plist, vid_dpd, ISAKMP_NPTYPE_VID); 
-	}
-#endif  
-#ifdef ENABLE_NATT
-	/* set VID payload for NAT-T */
-	for (i = 0; i < vid_natt_i; i++)
-		plist = isakmp_plist_append(plist, vid_natt[i], ISAKMP_NPTYPE_VID);
-#endif
-	iph1->sendbuf = isakmp_plist_set_all (&plist, iph1);
-
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 0);
-#endif
-
-	/* send the packet, add to the schedule to resend */
-	iph1->retry_counter = iph1->rmconf->retry_counter;
-	if (isakmp_ph1resend(iph1) == -1)
-		goto end;
-
-	iph1->status = PHASE1ST_MSG1SENT;
-
-	error = 0;
-
-end:
-#ifdef ENABLE_FRAG
-	if (vid_frag)
-		vfree(vid_frag);
-#endif 
-#ifdef ENABLE_NATT
-	for (i = 0; i < vid_natt_i; i++)
-		vfree(vid_natt[i]);
-#endif
-#ifdef ENABLE_HYBRID    
-	if (vid_xauth != NULL)
-		vfree(vid_xauth);
-	if (vid_unity != NULL) 
-		vfree(vid_unity);
-#endif 
-#ifdef ENABLE_DPD
-	if (vid_dpd != NULL)    
-		vfree(vid_dpd);
-#endif     
-
-	return error;
-}
-
-/*
- * receive from responder
- * 	psk: HDR, SA, Idir, Nr_b
- * 	sig: HDR, SA, Idir, Nr_b, [ CR ]
- * 	rsa: HDR, SA, <IDir_b>PubKey_i, <Nr_b>PubKey_i
- * 	rev: HDR, SA, <Nr_b>PubKey_i, <IDir_b>Ke_r
- */
-int
-base_i2recv(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	vchar_t *satmp = NULL;
-	int error = -1;
-	int vid_numeric;
-#ifdef ENABLE_HYBRID
-	vchar_t *unity_vid;
-	vchar_t *xauth_vid;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG1SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-	pa = (struct isakmp_parse_t *)pbuf->v;
-
-	/* SA payload is fixed postion */
-	if (pa->type != ISAKMP_NPTYPE_SA) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"received invalid next payload type %d, "
-			"expecting %d.\n",
-			pa->type, ISAKMP_NPTYPE_SA);
-		goto end;
-	}
-	if (isakmp_p2ph(&satmp, pa->ptr) < 0)
-		goto end;
-	pa++;
-
-	for (/*nothing*/;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_NONCE:
-			if (isakmp_p2ph(&iph1->nonce_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_ID:
-			if (isakmp_p2ph(&iph1->id_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-	if (iph1->nonce_p == NULL || iph1->id_p == NULL) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"few isakmp message received.\n");
-		goto end;
-	}
-
-	/* verify identifier */
-	if (ipsecdoi_checkid1(iph1) != 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"invalid ID payload.\n");
-		goto end;
-	}
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1))
-		plog(LLV_INFO, LOCATION, iph1->remote,
-		     "Selected NAT-T version: %s\n",
-		     vid_string_by_id(iph1->natt_options->version));
-#endif
-
-	/* check SA payload and set approval SA for use */
-	if (ipsecdoi_checkph1proposal(satmp, iph1) < 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"failed to get valid proposal.\n");
-		/* XXX send information */
-		goto end;
-	}
-	VPTRINIT(iph1->sa_ret);
-
-	iph1->status = PHASE1ST_MSG2RECEIVED;
-
-	error = 0;
-
-end:
-	if (pbuf)
-		vfree(pbuf);
-	if (satmp)
-		vfree(satmp);
-
-	if (error) {
-		VPTRINIT(iph1->nonce_p);
-		VPTRINIT(iph1->id_p);
-	}
-
-	return error;
-}
-
-/*
- * send to responder
- * 	psk: HDR, KE, HASH_I
- * 	sig: HDR, KE, [ CR, ] [CERT,] SIG_I
- * 	rsa: HDR, KE, HASH_I
- * 	rev: HDR, <KE>Ke_i, HASH_I
- */
-int
-base_i2send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	struct payload_list *plist = NULL;
-	vchar_t *vid = NULL;
-	int need_cert = 0;
-	int error = -1;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG2RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* fix isakmp index */
-	memcpy(&iph1->index.r_ck, &((struct isakmp *)msg->v)->r_ck,
-		sizeof(cookie_t));
-
-	/* generate DH public value */
-	if (oakley_dh_generate(iph1->approval->dhgrp,
-				&iph1->dhpub, &iph1->dhpriv) < 0)
-		goto end;
-
-	/* generate SKEYID to compute hash if not signature mode */
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-#endif
-		break;
-	default:
-		if (oakley_skeyid(iph1) < 0)
-			goto end;
-		break;
-	}
-
-	/* generate HASH to send */
-	plog(LLV_DEBUG, LOCATION, NULL, "generate HASH_I\n");
-	iph1->hash = oakley_ph1hash_base_i(iph1, GENERATE);
-	if (iph1->hash == NULL)
-		goto end;
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-#ifdef ENABLE_HYBRID
-	case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-#endif
-		vid = set_vendorid(iph1->approval->vendorid);
-
-		/* create isakmp KE payload */
-		plist = isakmp_plist_append(plist, iph1->dhpub, ISAKMP_NPTYPE_KE);
-
-		/* create isakmp HASH payload */
-		plist = isakmp_plist_append(plist, iph1->hash, ISAKMP_NPTYPE_HASH);
-
-		/* append vendor id, if needed */
-		if (vid)
-			plist = isakmp_plist_append(plist, vid, ISAKMP_NPTYPE_VID);
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-#endif
-		/* XXX if there is CR or not ? */
-
-		if (oakley_getmycert(iph1) < 0)
-			goto end;
-
-		if (oakley_getsign(iph1) < 0)
-			goto end;
-
-		if (iph1->cert && iph1->rmconf->send_cert)
-			need_cert = 1;
-
-		/* create isakmp KE payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->dhpub, ISAKMP_NPTYPE_KE);
-
-		/* add CERT payload if there */
-		if (need_cert)
-			plist = isakmp_plist_append(plist, 
-			    iph1->cert->pl, ISAKMP_NPTYPE_CERT);
-
-		/* add SIG payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->sig, ISAKMP_NPTYPE_SIG);
-
-		break;
-#ifdef HAVE_GSSAPI
-	case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-		/* ... */
-		break;
-#endif
-	case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-#endif
-		break;
-	}
-
-#ifdef ENABLE_NATT
-	/* generate NAT-D payloads */
-	if (NATT_AVAILABLE(iph1))
-	{
-		vchar_t *natd[2] = { NULL, NULL };
-
-		plog (LLV_INFO, LOCATION, NULL, "Adding remote and local NAT-D payloads.\n");
-		if ((natd[0] = natt_hash_addr (iph1, iph1->remote)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"NAT-D hashing failed for %s\n", saddr2str(iph1->remote));
-			goto end;
-		}
-
-		if ((natd[1] = natt_hash_addr (iph1, iph1->local)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"NAT-D hashing failed for %s\n", saddr2str(iph1->local));
-			goto end;
-		}
-
-		plist = isakmp_plist_append(plist, natd[0], iph1->natt_options->payload_nat_d);
-		plist = isakmp_plist_append(plist, natd[1], iph1->natt_options->payload_nat_d);
-	}
-#endif
-
-	iph1->sendbuf = isakmp_plist_set_all (&plist, iph1);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 0);
-#endif
-
-	/* send the packet, add to the schedule to resend */
-	iph1->retry_counter = iph1->rmconf->retry_counter;
-	if (isakmp_ph1resend(iph1) == -1)
-		goto end;
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph1->remote, iph1->local, iph1->sendbuf, msg) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_MSG2SENT;
-
-	error = 0;
-
-end:
-	if (vid)
-		vfree(vid);
-	return error;
-}
-
-/*
- * receive from responder
- * 	psk: HDR, KE, HASH_R
- * 	sig: HDR, KE, [CERT,] SIG_R
- * 	rsa: HDR, KE, HASH_R
- * 	rev: HDR, <KE>_Ke_r, HASH_R
- */
-int
-base_i3recv(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	int error = -1;
-	int ptype;
-#ifdef ENABLE_NATT
-	vchar_t	*natd_received;
-	int natd_seq = 0, natd_verified;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG2SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_KE:
-			if (isakmp_p2ph(&iph1->dhpub_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_HASH:
-			iph1->pl_hash = (struct isakmp_pl_hash *)pa->ptr;
-			break;
-		case ISAKMP_NPTYPE_CERT:
-			if (oakley_savecert(iph1, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_SIG:
-			if (isakmp_p2ph(&iph1->sig_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-
-#ifdef ENABLE_NATT
-		case ISAKMP_NPTYPE_NATD_DRAFT:
-		case ISAKMP_NPTYPE_NATD_RFC:
-			if (NATT_AVAILABLE(iph1) && iph1->natt_options &&
-			    pa->type == iph1->natt_options->payload_nat_d) {
-				natd_received = NULL;
-				if (isakmp_p2ph (&natd_received, pa->ptr) < 0)
-					goto end;
-                        
-				/* set both bits first so that we can clear them
-				   upon verifying hashes */
-				if (natd_seq == 0)
-					iph1->natt_flags |= NAT_DETECTED;
-                        
-				/* this function will clear appropriate bits bits 
-				   from iph1->natt_flags */
-				natd_verified = natt_compare_addr_hash (iph1,
-					natd_received, natd_seq++);
-                        
-				plog (LLV_INFO, LOCATION, NULL, "NAT-D payload #%d %s\n",
-					natd_seq - 1,
-					natd_verified ? "verified" : "doesn't match");
-                        
-				vfree (natd_received);
-				break;
-			}
-			/* passthrough to default... */
-#endif
-
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1)) {
-		plog (LLV_INFO, LOCATION, NULL, "NAT %s %s%s\n",
-		      iph1->natt_flags & NAT_DETECTED ? 
-		      		"detected:" : "not detected",
-		      iph1->natt_flags & NAT_DETECTED_ME ? "ME " : "",
-		      iph1->natt_flags & NAT_DETECTED_PEER ? "PEER" : "");
-		if (iph1->natt_flags & NAT_DETECTED)
-			natt_float_ports (iph1);
-	}
-#endif
-
-	/* payload existency check */
-	/* validate authentication value */
-	ptype = oakley_validate_auth(iph1);
-	if (ptype != 0) {
-		if (ptype == -1) {
-			/* message printed inner oakley_validate_auth() */
-			goto end;
-		}
-		EVT_PUSH(iph1->local, iph1->remote, 
-		    EVTT_PEERPH1AUTH_FAILED, NULL);
-		isakmp_info_send_n1(iph1, ptype, NULL);
-		goto end;
-	}
-
-	/* compute sharing secret of DH */
-	if (oakley_dh_compute(iph1->approval->dhgrp, iph1->dhpub,
-				iph1->dhpriv, iph1->dhpub_p, &iph1->dhgxy) < 0)
-		goto end;
-
-	/* generate SKEYID to compute hash if signature mode */
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-#endif
-		if (oakley_skeyid(iph1) < 0)
-			goto end;
-		break;
-	default:
-		break;
-	}
-
-	/* generate SKEYIDs & IV & final cipher key */
-	if (oakley_skeyid_dae(iph1) < 0)
-		goto end;
-	if (oakley_compute_enckey(iph1) < 0)
-		goto end;
-	if (oakley_newiv(iph1) < 0)
-		goto end;
-
-	/* see handler.h about IV synchronization. */
-	memcpy(iph1->ivm->iv->v, iph1->ivm->ive->v, iph1->ivm->iv->l);
-
-	/* set encryption flag */
-	iph1->flags |= ISAKMP_FLAG_E;
-
-	iph1->status = PHASE1ST_MSG3RECEIVED;
-
-	error = 0;
-
-end:
-	if (pbuf)
-		vfree(pbuf);
-
-	if (error) {
-		VPTRINIT(iph1->dhpub_p);
-		oakley_delcert(iph1->cert_p);
-		iph1->cert_p = NULL;
-		oakley_delcert(iph1->crl_p);
-		iph1->crl_p = NULL;
-		VPTRINIT(iph1->sig_p);
-	}
-
-	return error;
-}
-
-/*
- * status update and establish isakmp sa.
- */
-int
-base_i3send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	int error = -1;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG3RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_ESTABLISHED;
-
-	error = 0;
-
-end:
-	return error;
-}
-
-/*
- * receive from initiator
- * 	psk: HDR, SA, Idii, Ni_b
- * 	sig: HDR, SA, Idii, Ni_b
- * 	rsa: HDR, SA, [HASH(1),] <IDii_b>Pubkey_r, <Ni_b>Pubkey_r
- * 	rev: HDR, SA, [HASH(1),] <Ni_b>Pubkey_r, <IDii_b>Ke_i
- */
-int
-base_r1recv(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	int error = -1;
-	int vid_numeric;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_START) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* validate the type of next payload */
-	/*
-	 * NOTE: XXX even if multiple VID, we'll silently ignore those.
-	 */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-	pa = (struct isakmp_parse_t *)pbuf->v;
-
-	/* check the position of SA payload */
-	if (pa->type != ISAKMP_NPTYPE_SA) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"received invalid next payload type %d, "
-			"expecting %d.\n",
-			pa->type, ISAKMP_NPTYPE_SA);
-		goto end;
-	}
-	if (isakmp_p2ph(&iph1->sa, pa->ptr) < 0)
-		goto end;
-	pa++;
-
-	for (/*nothing*/;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_NONCE:
-			if (isakmp_p2ph(&iph1->nonce_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_ID:
-			if (isakmp_p2ph(&iph1->id_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_VID:
-			vid_numeric = handle_vendorid(iph1, pa->ptr);
-#ifdef ENABLE_FRAG
-			if ((vid_numeric == VENDORID_FRAG) &&
-			    (vendorid_frag_cap(pa->ptr) & VENDORID_FRAG_BASE))
-				iph1->frag = 1;
-#endif
-			break;
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-	if (iph1->nonce_p == NULL || iph1->id_p == NULL) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"few isakmp message received.\n");
-		goto end;
-	}
-
-	/* verify identifier */
-	if (ipsecdoi_checkid1(iph1) != 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"invalid ID payload.\n");
-		goto end;
-	}
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1))
-		plog(LLV_INFO, LOCATION, iph1->remote,
-		     "Selected NAT-T version: %s\n",
-		     vid_string_by_id(iph1->natt_options->version));
-#endif
-
-	/* check SA payload and set approval SA for use */
-	if (ipsecdoi_checkph1proposal(iph1->sa, iph1) < 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"failed to get valid proposal.\n");
-		/* XXX send information */
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_MSG1RECEIVED;
-
-	error = 0;
-
-end:
-	if (pbuf)
-		vfree(pbuf);
-
-	if (error) {
-		VPTRINIT(iph1->sa);
-		VPTRINIT(iph1->nonce_p);
-		VPTRINIT(iph1->id_p);
-	}
-
-	return error;
-}
-
-/*
- * send to initiator
- * 	psk: HDR, SA, Idir, Nr_b
- * 	sig: HDR, SA, Idir, Nr_b, [ CR ]
- * 	rsa: HDR, SA, <IDir_b>PubKey_i, <Nr_b>PubKey_i
- * 	rev: HDR, SA, <Nr_b>PubKey_i, <IDir_b>Ke_r
- */
-int
-base_r1send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	struct payload_list *plist = NULL;
-	int error = -1;
-#ifdef ENABLE_NATT
-	vchar_t *vid_natt = NULL;
-#endif
-#ifdef ENABLE_HYBRID    
-        vchar_t *vid_xauth = NULL;
-        vchar_t *vid_unity = NULL;
-#endif  
-#ifdef ENABLE_FRAG
-	vchar_t *vid_frag = NULL;
-#endif
-#ifdef ENABLE_DPD
-	vchar_t *vid_dpd = NULL;
-#endif  
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG1RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* set responder's cookie */
-	isakmp_newcookie((caddr_t)&iph1->index.r_ck, iph1->remote, iph1->local);
-
-	/* make ID payload into isakmp status */
-	if (ipsecdoi_setid1(iph1) < 0)
-		goto end;
-
-	/* generate NONCE value */
-	iph1->nonce = eay_set_random(iph1->rmconf->nonce_size);
-	if (iph1->nonce == NULL)
-		goto end;
-
-	/* set SA payload to reply */
-	plist = isakmp_plist_append(plist, iph1->sa_ret, ISAKMP_NPTYPE_SA);
-
-	/* create isakmp ID payload */
-	plist = isakmp_plist_append(plist, iph1->id, ISAKMP_NPTYPE_ID);
-
-	/* create isakmp NONCE payload */
-	plist = isakmp_plist_append(plist, iph1->nonce, ISAKMP_NPTYPE_NONCE);
-
-#ifdef ENABLE_NATT
-	/* has the peer announced nat-t? */
-	if (NATT_AVAILABLE(iph1))
-		vid_natt = set_vendorid(iph1->natt_options->version);
-	if (vid_natt)
-		plist = isakmp_plist_append(plist, vid_natt, ISAKMP_NPTYPE_VID);
-#endif
-#ifdef ENABLE_HYBRID
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_XAUTH) {
-		plog (LLV_INFO, LOCATION, NULL, "Adding xauth VID payload.\n");
-		if ((vid_xauth = set_vendorid(VENDORID_XAUTH)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Cannot create Xauth vendor ID\n");
-			goto end;
-		}
-		plist = isakmp_plist_append(plist,
-		    vid_xauth, ISAKMP_NPTYPE_VID);
-	}
-
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_UNITY) {
-		if ((vid_unity = set_vendorid(VENDORID_UNITY)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Cannot create Unity vendor ID\n");
-			goto end;
-		}
-		plist = isakmp_plist_append(plist,
-		    vid_unity, ISAKMP_NPTYPE_VID);
-	}
-#endif
-#ifdef ENABLE_DPD
-	/* 
-	 * Only send DPD support if remote announced DPD 
-	 * and if DPD support is active 
-	 */
-	if (iph1->dpd_support && iph1->rmconf->dpd) {
-		if ((vid_dpd = set_vendorid(VENDORID_DPD)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "DPD vendorID construction failed\n");
-		} else {
-			plist = isakmp_plist_append(plist, vid_dpd,
-			    ISAKMP_NPTYPE_VID);
-		}
-	}
-#endif
-#ifdef ENABLE_FRAG
-	if (iph1->rmconf->ike_frag) {
-		if ((vid_frag = set_vendorid(VENDORID_FRAG)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Frag vendorID construction failed\n");
-		} else {
-			vid_frag = isakmp_frag_addcap(vid_frag,
-			    VENDORID_FRAG_BASE);
-			plist = isakmp_plist_append(plist,
-			    vid_frag, ISAKMP_NPTYPE_VID);
-		}
-	}
-#endif
-
-	iph1->sendbuf = isakmp_plist_set_all (&plist, iph1);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 0);
-#endif
-
-	/* send the packet, add to the schedule to resend */
-	iph1->retry_counter = iph1->rmconf->retry_counter;
-	if (isakmp_ph1resend(iph1) == -1) {
-		iph1 = NULL;
-		goto end;
-	}
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph1->remote, iph1->local, iph1->sendbuf, msg) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_MSG1SENT;
-
-	error = 0;
-
-end:
-#ifdef ENABLE_NATT
-	if (vid_natt)
-		vfree(vid_natt);
-#endif
-#ifdef ENABLE_HYBRID    
-	if (vid_xauth != NULL)
-		vfree(vid_xauth);
-	if (vid_unity != NULL)
-		vfree(vid_unity);
-#endif    
-#ifdef ENABLE_FRAG
-	if (vid_frag)
-		vfree(vid_frag);
-#endif
-#ifdef ENABLE_DPD
-	if (vid_dpd)
-		vfree(vid_dpd);
-#endif
-
-	if (iph1 != NULL)
-		VPTRINIT(iph1->sa_ret);
-
-	return error;
-}
-
-/*
- * receive from initiator
- * 	psk: HDR, KE, HASH_I
- * 	sig: HDR, KE, [ CR, ] [CERT,] SIG_I
- * 	rsa: HDR, KE, HASH_I
- * 	rev: HDR, <KE>Ke_i, HASH_I
- */
-int
-base_r2recv(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	int error = -1;
-	int ptype;
-#ifdef ENABLE_NATT
-	int natd_seq = 0;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG1SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-
-	iph1->pl_hash = NULL;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_KE:
-			if (isakmp_p2ph(&iph1->dhpub_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_HASH:
-			iph1->pl_hash = (struct isakmp_pl_hash *)pa->ptr;
-			break;
-		case ISAKMP_NPTYPE_CERT:
-			if (oakley_savecert(iph1, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_SIG:
-			if (isakmp_p2ph(&iph1->sig_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-
-#ifdef ENABLE_NATT
-		case ISAKMP_NPTYPE_NATD_DRAFT:
-		case ISAKMP_NPTYPE_NATD_RFC:
-			if (pa->type == iph1->natt_options->payload_nat_d)
-			{
-				vchar_t *natd_received = NULL;
-				int natd_verified;
-				
-				if (isakmp_p2ph (&natd_received, pa->ptr) < 0)
-					goto end;
-				
-				if (natd_seq == 0)
-					iph1->natt_flags |= NAT_DETECTED;
-				
-				natd_verified = natt_compare_addr_hash (iph1,
-					natd_received, natd_seq++);
-				
-				plog (LLV_INFO, LOCATION, NULL, "NAT-D payload #%d %s\n",
-					natd_seq - 1,
-					natd_verified ? "verified" : "doesn't match");
-				
-				vfree (natd_received);
-				break;
-			}
-			/* passthrough to default... */
-#endif
-
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-	/* generate DH public value */
-	if (oakley_dh_generate(iph1->approval->dhgrp,
-				&iph1->dhpub, &iph1->dhpriv) < 0)
-		goto end;
-
-	/* compute sharing secret of DH */
-	if (oakley_dh_compute(iph1->approval->dhgrp, iph1->dhpub,
-				iph1->dhpriv, iph1->dhpub_p, &iph1->dhgxy) < 0)
-		goto end;
-
-	/* generate SKEYID */
-	if (oakley_skeyid(iph1) < 0)
-		goto end;
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1))
-		plog (LLV_INFO, LOCATION, NULL, "NAT %s %s%s\n",
-		      iph1->natt_flags & NAT_DETECTED ? 
-		      		"detected:" : "not detected",
-		      iph1->natt_flags & NAT_DETECTED_ME ? "ME " : "",
-		      iph1->natt_flags & NAT_DETECTED_PEER ? "PEER" : "");
-#endif
-
-	/* payload existency check */
-	/* validate authentication value */
-	ptype = oakley_validate_auth(iph1);
-	if (ptype != 0) {
-		if (ptype == -1) {
-			/* message printed inner oakley_validate_auth() */
-			goto end;
-		}
-		EVT_PUSH(iph1->local, iph1->remote, 
-		    EVTT_PEERPH1AUTH_FAILED, NULL);
-		isakmp_info_send_n1(iph1, ptype, NULL);
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_MSG2RECEIVED;
-
-	error = 0;
-
-end:
-	if (pbuf)
-		vfree(pbuf);
-
-	if (error) {
-		VPTRINIT(iph1->dhpub_p);
-		oakley_delcert(iph1->cert_p);
-		iph1->cert_p = NULL;
-		oakley_delcert(iph1->crl_p);
-		iph1->crl_p = NULL;
-		VPTRINIT(iph1->sig_p);
-	}
-
-	return error;
-}
-
-/*
- * send to initiator
- * 	psk: HDR, KE, HASH_R
- * 	sig: HDR, KE, [CERT,] SIG_R
- * 	rsa: HDR, KE, HASH_R
- * 	rev: HDR, <KE>_Ke_r, HASH_R
- */
-int
-base_r2send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	struct payload_list *plist = NULL;
-	vchar_t *vid = NULL;
-	int need_cert = 0;
-	int error = -1;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG2RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* generate HASH to send */
-	plog(LLV_DEBUG, LOCATION, NULL, "generate HASH_I\n");
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-#endif
-	case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-#endif
-		iph1->hash = oakley_ph1hash_common(iph1, GENERATE);
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-#endif
-#ifdef HAVE_GSSAPI
-	case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-#endif
-		iph1->hash = oakley_ph1hash_base_r(iph1, GENERATE);
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid authentication method %d\n",
-			iph1->approval->authmethod);
-		goto end; 
-	}
-	if (iph1->hash == NULL)
-		goto end;
-
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-#endif
-		vid = set_vendorid(iph1->approval->vendorid);
-
-		/* create isakmp KE payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->dhpub, ISAKMP_NPTYPE_KE);
-
-		/* create isakmp HASH payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->hash, ISAKMP_NPTYPE_HASH);
-
-		/* append vendor id, if needed */
-		if (vid)
-			plist = isakmp_plist_append(plist, 
-			    vid, ISAKMP_NPTYPE_VID);
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-#endif
-		/* XXX if there is CR or not ? */
-
-		if (oakley_getmycert(iph1) < 0)
-			goto end;
-
-		if (oakley_getsign(iph1) < 0)
-			goto end;
-
-		if (iph1->cert && iph1->rmconf->send_cert)
-			need_cert = 1;
-
-		/* create isakmp KE payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->dhpub, ISAKMP_NPTYPE_KE);
-
-		/* add CERT payload if there */
-		if (need_cert)
-			plist = isakmp_plist_append(plist, 
-			    iph1->cert->pl, ISAKMP_NPTYPE_CERT);
-		/* add SIG payload */
-		plist = isakmp_plist_append(plist, 
-		    iph1->sig, ISAKMP_NPTYPE_SIG);
-		break;
-#ifdef HAVE_GSSAPI
-	case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-		/* ... */
-		break;
-#endif
-	case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-#endif
-		break;
-	}
-
-#ifdef ENABLE_NATT
-	/* generate NAT-D payloads */
-	if (NATT_AVAILABLE(iph1)) {
-		vchar_t *natd[2] = { NULL, NULL };
-
-		plog(LLV_INFO, LOCATION, 
-		    NULL, "Adding remote and local NAT-D payloads.\n");
-		if ((natd[0] = natt_hash_addr(iph1, iph1->remote)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "NAT-D hashing failed for %s\n", 
-			    saddr2str(iph1->remote));
-			goto end;
-		}
-
-		if ((natd[1] = natt_hash_addr(iph1, iph1->local)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "NAT-D hashing failed for %s\n", 
-			    saddr2str(iph1->local));
-			goto end;
-		}
-
-		plist = isakmp_plist_append(plist, 
-		    natd[0], iph1->natt_options->payload_nat_d);
-		plist = isakmp_plist_append(plist, 
-		    natd[1], iph1->natt_options->payload_nat_d);
-	}
-#endif
-
-	iph1->sendbuf = isakmp_plist_set_all(&plist, iph1);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 0);
-#endif
-
-	/* send HDR;KE;NONCE to responder */
-	if (isakmp_send(iph1, iph1->sendbuf) < 0)
-		goto end;
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph1->remote, iph1->local, iph1->sendbuf, msg) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	/* generate SKEYIDs & IV & final cipher key */
-	if (oakley_skeyid_dae(iph1) < 0)
-		goto end;
-	if (oakley_compute_enckey(iph1) < 0)
-		goto end;
-	if (oakley_newiv(iph1) < 0)
-		goto end;
-
-	/* set encryption flag */
-	iph1->flags |= ISAKMP_FLAG_E;
-
-	iph1->status = PHASE1ST_ESTABLISHED;
-
-	error = 0;
-
-end:
-	if (vid)
-		vfree(vid);
-	return error;
-}
diff --git a/src/racoon/isakmp_base.h b/src/racoon/isakmp_base.h
deleted file mode 100644
index 560880e..0000000
--- a/src/racoon/isakmp_base.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*	$NetBSD: isakmp_base.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: isakmp_base.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ISAKMP_BASE_H
-#define _ISAKMP_BASE_H
-
-extern int base_i1send __P((struct ph1handle *, vchar_t *));
-extern int base_i2recv __P((struct ph1handle *, vchar_t *));
-extern int base_i2send __P((struct ph1handle *, vchar_t *));
-extern int base_i3recv __P((struct ph1handle *, vchar_t *));
-extern int base_i3send __P((struct ph1handle *, vchar_t *));
-
-extern int base_r1recv __P((struct ph1handle *, vchar_t *));
-extern int base_r1send __P((struct ph1handle *, vchar_t *));
-extern int base_r2recv __P((struct ph1handle *, vchar_t *));
-extern int base_r2send __P((struct ph1handle *, vchar_t *));
-
-#endif /* _ISAKMP_BASE_H */
diff --git a/src/racoon/isakmp_cfg.c b/src/racoon/isakmp_cfg.c
deleted file mode 100644
index fa127dc..0000000
--- a/src/racoon/isakmp_cfg.c
+++ /dev/null
@@ -1,2194 +0,0 @@
-/*	$NetBSD: isakmp_cfg.c,v 1.12.6.4 2008/11/27 15:25:20 vanhu Exp $	*/
-
-/* Id: isakmp_cfg.c,v 1.55 2006/08/22 18:17:17 manubsd Exp */
-
-/*
- * Copyright (C) 2004-2006 Emmanuel Dreyfus
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/queue.h>
-
-#ifndef ANDROID_PATCHED
-#include <utmp.h>
-#endif
-#if defined(__APPLE__) && defined(__MACH__)
-#include <util.h>
-#endif
-
-#ifdef __FreeBSD__
-# include <libutil.h>
-#endif
-#ifdef __NetBSD__
-#  include <util.h>
-#endif
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#include <netdb.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#if HAVE_STDINT_H
-#include <stdint.h>
-#endif
-#include <ctype.h>
-#include <resolv.h>
-
-#ifdef HAVE_LIBRADIUS
-#include <sys/utsname.h>
-#include <radlib.h>
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "schedule.h"
-#include "debug.h"
-
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "handler.h"
-#include "evt.h"
-#include "throttle.h"
-#include "remoteconf.h"
-#include "crypto_openssl.h"
-#include "isakmp_inf.h"
-#include "isakmp_xauth.h"
-#include "isakmp_unity.h"
-#include "isakmp_cfg.h"
-#include "strnames.h"
-#include "admin.h"
-#include "privsep.h"
-
-struct isakmp_cfg_config isakmp_cfg_config;
-
-static vchar_t *buffer_cat(vchar_t *s, vchar_t *append);
-static vchar_t *isakmp_cfg_net(struct ph1handle *, struct isakmp_data *);
-#if 0
-static vchar_t *isakmp_cfg_void(struct ph1handle *, struct isakmp_data *);
-#endif
-static vchar_t *isakmp_cfg_addr4(struct ph1handle *, 
-				 struct isakmp_data *, in_addr_t *);
-static void isakmp_cfg_getaddr4(struct isakmp_data *, struct in_addr *);
-static vchar_t *isakmp_cfg_addr4_list(struct ph1handle *,
-				      struct isakmp_data *, in_addr_t *, int);
-static void isakmp_cfg_appendaddr4(struct isakmp_data *, 
-				   struct in_addr *, int *, int);
-static void isakmp_cfg_getstring(struct isakmp_data *,char *);
-void isakmp_cfg_iplist_to_str(char *, int, void *, int);
-
-#define ISAKMP_CFG_LOGIN	1
-#define ISAKMP_CFG_LOGOUT	2
-static int isakmp_cfg_accounting(struct ph1handle *, int);
-#ifdef HAVE_LIBRADIUS
-static int isakmp_cfg_accounting_radius(struct ph1handle *, int);
-#endif
-
-/* 
- * Handle an ISAKMP config mode packet
- * We expect HDR, HASH, ATTR
- */
-void
-isakmp_cfg_r(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	struct isakmp *packet;
-	struct isakmp_gen *ph;
-	int tlen;
-	char *npp;
-	int np;
-	vchar_t *dmsg;
-	struct isakmp_ivm *ivm;
-
-	/* Check that the packet is long enough to have a header */
-	if (msg->l < sizeof(*packet)) {
-	     plog(LLV_ERROR, LOCATION, NULL, "Unexpected short packet\n");
-	     return;
-	}
-
-	packet = (struct isakmp *)msg->v;
-
-	/* Is it encrypted? It should be encrypted */
-	if ((packet->flags & ISAKMP_FLAG_E) == 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "User credentials sent in cleartext!\n");
-		return;
-	}
-
-	/* 
-	 * Decrypt the packet. If this is the beginning of a new
-	 * exchange, reinitialize the IV
-	 */
-	if (iph1->mode_cfg->ivm == NULL ||
-	    iph1->mode_cfg->last_msgid != packet->msgid )
-		iph1->mode_cfg->ivm = 
-		    isakmp_cfg_newiv(iph1, packet->msgid);
-	ivm = iph1->mode_cfg->ivm;
-
-	dmsg = oakley_do_decrypt(iph1, msg, ivm->iv, ivm->ive);
-	if (dmsg == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "failed to decrypt message\n");
-		return;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "MODE_CFG packet\n");
-	plogdump(LLV_DEBUG, dmsg->v, dmsg->l);
-
-	/* Now work with the decrypted packet */
-	packet = (struct isakmp *)dmsg->v;
-	tlen = dmsg->l - sizeof(*packet);
-	ph = (struct isakmp_gen *)(packet + 1);
-
-	np = packet->np;
-	while ((tlen > 0) && (np != ISAKMP_NPTYPE_NONE)) {
-		/* Check that the payload header fits in the packet */
-		if (tlen < sizeof(*ph)) {
-			 plog(LLV_WARNING, LOCATION, NULL, 
-			      "Short payload header\n");
-			 goto out;
-		}
-
-		/* Check that the payload fits in the packet */
-		if (tlen < ntohs(ph->len)) {
-			plog(LLV_WARNING, LOCATION, NULL, 
-			      "Short payload\n");
-			goto out;
-		}
-		
-		plog(LLV_DEBUG, LOCATION, NULL, "Seen payload %d\n", np);
-		plogdump(LLV_DEBUG, ph, ntohs(ph->len));
-
-		switch(np) {
-		case ISAKMP_NPTYPE_HASH: {
-			vchar_t *check;
-			vchar_t *payload;
-			size_t plen;
-			struct isakmp_gen *nph;
-
-			plen = ntohs(ph->len);
-			nph = (struct isakmp_gen *)((char *)ph + plen);
-			plen = ntohs(nph->len);
-
-			if ((payload = vmalloc(plen)) == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "Cannot allocate memory\n");
-				goto out;
-			}
-			memcpy(payload->v, nph, plen);
-
-			if ((check = oakley_compute_hash1(iph1, 
-			    packet->msgid, payload)) == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "Cannot compute hash\n");
-				vfree(payload);
-				goto out;
-			}
-
-			if (memcmp(ph + 1, check->v, check->l) != 0) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "Hash verification failed\n");
-				vfree(payload);
-				vfree(check);
-				goto out;
-			}
-			vfree(payload);
-			vfree(check);
-			break;
-		}
-		case ISAKMP_NPTYPE_ATTR: {
-			struct isakmp_pl_attr *attrpl;
-
-			attrpl = (struct isakmp_pl_attr *)ph;
-			isakmp_cfg_attr_r(iph1, packet->msgid, attrpl);
-
-			break;
-		}
-		default:
-			 plog(LLV_WARNING, LOCATION, NULL, 
-			      "Unexpected next payload %d\n", np);
-			 /* Skip to the next payload */
-			 break;
-		}
-
-		/* Move to the next payload */
-		np = ph->np;
-		tlen -= ntohs(ph->len);
-		npp = (char *)ph;
-		ph = (struct isakmp_gen *)(npp + ntohs(ph->len));
-	}
-
-out:
-	vfree(dmsg);
-}
-
-int
-isakmp_cfg_attr_r(iph1, msgid, attrpl) 
-	struct ph1handle *iph1;
-	u_int32_t msgid;
-	struct isakmp_pl_attr *attrpl;
-{
-	int type = attrpl->type;
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-	     "Configuration exchange type %s\n", s_isakmp_cfg_ptype(type));
-	switch (type) {
-	case ISAKMP_CFG_ACK:
-		/* ignore, but this is the time to reinit the IV */
-		oakley_delivm(iph1->mode_cfg->ivm);
-		iph1->mode_cfg->ivm = NULL;
-		return 0;
-		break;
-
-	case ISAKMP_CFG_REPLY:
-		return isakmp_cfg_reply(iph1, attrpl);
-		break;
-
-	case ISAKMP_CFG_REQUEST:
-		iph1->msgid = msgid;
-		return isakmp_cfg_request(iph1, attrpl);
-		break;
-
-	case ISAKMP_CFG_SET:
-		iph1->msgid = msgid;
-		return isakmp_cfg_set(iph1, attrpl);
-		break;
-
-	default:
-		plog(LLV_WARNING, LOCATION, NULL,
-		     "Unepected configuration exchange type %d\n", type);
-		return -1;
-		break;
-	}
-
-	return 0;
-}
-
-int
-isakmp_cfg_reply(iph1, attrpl)
-	struct ph1handle *iph1;
-	struct isakmp_pl_attr *attrpl;
-{
-	struct isakmp_data *attr;
-	int tlen;
-	size_t alen;
-	char *npp;
-	int type;
-	struct sockaddr_in *sin;
-	int error;
-
-	tlen = ntohs(attrpl->h.len);
-	attr = (struct isakmp_data *)(attrpl + 1);
-	tlen -= sizeof(*attrpl);
-	
-	while (tlen > 0) {
-		type = ntohs(attr->type);
-
-		/* Handle short attributes */
-		if ((type & ISAKMP_GEN_MASK) == ISAKMP_GEN_TV) {
-			type &= ~ISAKMP_GEN_MASK;
-
-			plog(LLV_DEBUG, LOCATION, NULL,
-			     "Short attribute %s = %d\n", 
-			     s_isakmp_cfg_type(type), ntohs(attr->lorv));
-
-			switch (type) {
-			case XAUTH_TYPE:
-				if ((error = xauth_attr_reply(iph1, 
-				    attr, ntohs(attrpl->id))) != 0)
-					return error;
-				break;
-
-			default:
-				plog(LLV_WARNING, LOCATION, NULL,
-				     "Ignored short attribute %s\n",
-				     s_isakmp_cfg_type(type));
-				break;
-			}
-
-			tlen -= sizeof(*attr);
-			attr++;
-			continue;
-		}
-
-		type = ntohs(attr->type);
-		alen = ntohs(attr->lorv);
-
-		/* Check that the attribute fit in the packet */
-		if (tlen < alen) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "Short attribute %s\n",
-			     s_isakmp_cfg_type(type));
-			return -1;
-		}
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-		     "Attribute %s, len %zu\n", 
-		     s_isakmp_cfg_type(type), alen);
-
-		switch(type) {
-		case XAUTH_TYPE:
-		case XAUTH_USER_NAME:
-		case XAUTH_USER_PASSWORD:
-		case XAUTH_PASSCODE:
-		case XAUTH_MESSAGE:
-		case XAUTH_CHALLENGE:
-		case XAUTH_DOMAIN:
-		case XAUTH_STATUS:
-		case XAUTH_NEXT_PIN:
-		case XAUTH_ANSWER:
-			if ((error = xauth_attr_reply(iph1, 
-			    attr, ntohs(attrpl->id))) != 0)
-				return error;
-			break;
-		case INTERNAL_IP4_ADDRESS:
-			isakmp_cfg_getaddr4(attr, &iph1->mode_cfg->addr4);
-			iph1->mode_cfg->flags |= ISAKMP_CFG_GOT_ADDR4;
-			break;
-		case INTERNAL_IP4_NETMASK:
-			isakmp_cfg_getaddr4(attr, &iph1->mode_cfg->mask4);
-			iph1->mode_cfg->flags |= ISAKMP_CFG_GOT_MASK4;
-			break;
-		case INTERNAL_IP4_DNS:
-			isakmp_cfg_appendaddr4(attr, 
-			    &iph1->mode_cfg->dns4[iph1->mode_cfg->dns4_index],
-			    &iph1->mode_cfg->dns4_index, MAXNS);
-			iph1->mode_cfg->flags |= ISAKMP_CFG_GOT_DNS4;
-			break;
-		case INTERNAL_IP4_NBNS:
-			isakmp_cfg_appendaddr4(attr, 
-			    &iph1->mode_cfg->wins4[iph1->mode_cfg->wins4_index],
-			    &iph1->mode_cfg->wins4_index, MAXNS);
-			iph1->mode_cfg->flags |= ISAKMP_CFG_GOT_WINS4;
-			break;
-		case UNITY_DEF_DOMAIN:
-			isakmp_cfg_getstring(attr, 
-			    iph1->mode_cfg->default_domain);
-			iph1->mode_cfg->flags |= ISAKMP_CFG_GOT_DEFAULT_DOMAIN;
-			break;
-		case UNITY_SPLIT_INCLUDE:
-		case UNITY_LOCAL_LAN:
-		case UNITY_SPLITDNS_NAME:
-		case UNITY_BANNER:
-		case UNITY_SAVE_PASSWD:
-		case UNITY_NATT_PORT:
-		case UNITY_PFS:
-		case UNITY_FW_TYPE:
-		case UNITY_BACKUP_SERVERS:
-		case UNITY_DDNS_HOSTNAME:
-			isakmp_unity_reply(iph1, attr);
-			break;
-		case INTERNAL_IP4_SUBNET:
-		case INTERNAL_ADDRESS_EXPIRY:
-		default:
-			plog(LLV_WARNING, LOCATION, NULL,
-			     "Ignored attribute %s\n",
-			     s_isakmp_cfg_type(type));
-			break;
-		}
-
-		npp = (char *)attr;
-		attr = (struct isakmp_data *)(npp + sizeof(*attr) + alen);
-		tlen -= (sizeof(*attr) + alen);
-	}
-
-	/* 
-	 * Call the SA up script hook now that we have the configuration
-	 * It is done at the end of phase 1 if ISAKMP mode config is not
-	 * requested.
-	 */
-	
-	if ((iph1->status == PHASE1ST_ESTABLISHED) && 
-	    iph1->rmconf->mode_cfg) {
-		switch (AUTHMETHOD(iph1)) {
-		case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-		case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-		/* Unimplemented */
-		case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I: 
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I: 
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I: 
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I: 
-			script_hook(iph1, SCRIPT_PHASE1_UP);
-			break;
-		default:
-			break;
-		}
-	}
-		
-
-#ifdef ENABLE_ADMINPORT
-	{
-		vchar_t *buf;
-
-		alen = ntohs(attrpl->h.len) - sizeof(*attrpl);
-		if ((buf = vmalloc(alen)) == NULL) {
-			plog(LLV_WARNING, LOCATION, NULL, 
-			    "Cannot allocate memory: %s\n", strerror(errno));
-		} else {
-			memcpy(buf->v, attrpl + 1, buf->l);
-			EVT_PUSH(iph1->local, iph1->remote, 
-			    EVTT_ISAKMP_CFG_DONE, buf);
-			vfree(buf);
-		}
-	}
-#endif
-
-	return 0;
-}
-
-int
-isakmp_cfg_request(iph1, attrpl)
-	struct ph1handle *iph1;
-	struct isakmp_pl_attr *attrpl;
-{
-	struct isakmp_data *attr;
-	int tlen;
-	size_t alen;
-	char *npp;
-	vchar_t *payload;
-	struct isakmp_pl_attr *reply;
-	vchar_t *reply_attr;
-	int type;
-	int error = -1;
-
-	if ((payload = vmalloc(sizeof(*reply))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		return -1;
-	}
-	memset(payload->v, 0, sizeof(*reply));
-
-	tlen = ntohs(attrpl->h.len);
-	attr = (struct isakmp_data *)(attrpl + 1);
-	tlen -= sizeof(*attrpl);
-	
-	while (tlen > 0) {
-		reply_attr = NULL;
-		type = ntohs(attr->type);
-
-		/* Handle short attributes */
-		if ((type & ISAKMP_GEN_MASK) == ISAKMP_GEN_TV) {
-			type &= ~ISAKMP_GEN_MASK;
-
-			plog(LLV_DEBUG, LOCATION, NULL,
-			     "Short attribute %s = %d\n", 
-			     s_isakmp_cfg_type(type), ntohs(attr->lorv));
-
-			switch (type) {
-			case XAUTH_TYPE:
-				reply_attr = isakmp_xauth_req(iph1, attr);
-				break;
-			default:
-				plog(LLV_WARNING, LOCATION, NULL,
-				     "Ignored short attribute %s\n",
-				     s_isakmp_cfg_type(type));
-				break;
-			}
-
-			tlen -= sizeof(*attr);
-			attr++;
-
-			if (reply_attr != NULL) {
-				payload = buffer_cat(payload, reply_attr);
-				vfree(reply_attr);
-			}
-
-			continue;
-		}
-
-		type = ntohs(attr->type);
-		alen = ntohs(attr->lorv);
-
-		/* Check that the attribute fit in the packet */
-		if (tlen < alen) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "Short attribute %s\n",
-			     s_isakmp_cfg_type(type));
-			goto end;
-		}
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-		     "Attribute %s, len %zu\n",
-		     s_isakmp_cfg_type(type), alen);
-
-		switch(type) {
-		case INTERNAL_IP4_ADDRESS:
-		case INTERNAL_IP4_NETMASK:
-		case INTERNAL_IP4_DNS:
-		case INTERNAL_IP4_NBNS:
-		case INTERNAL_IP4_SUBNET:
-			reply_attr = isakmp_cfg_net(iph1, attr);
-			break;
-
-		case XAUTH_TYPE:
-		case XAUTH_USER_NAME:
-		case XAUTH_USER_PASSWORD:
-		case XAUTH_PASSCODE:
-		case XAUTH_MESSAGE:
-		case XAUTH_CHALLENGE:
-		case XAUTH_DOMAIN:
-		case XAUTH_STATUS:
-		case XAUTH_NEXT_PIN:
-		case XAUTH_ANSWER:
-			reply_attr = isakmp_xauth_req(iph1, attr);
-			break;
-
-		case APPLICATION_VERSION:
-			reply_attr = isakmp_cfg_string(iph1, 
-			    attr, ISAKMP_CFG_RACOON_VERSION);
-			break;
-
-		case UNITY_BANNER:
-		case UNITY_PFS:
-		case UNITY_SAVE_PASSWD:
-		case UNITY_DEF_DOMAIN:
-		case UNITY_DDNS_HOSTNAME:
-		case UNITY_FW_TYPE:
-		case UNITY_SPLITDNS_NAME:
-		case UNITY_SPLIT_INCLUDE:
-		case UNITY_LOCAL_LAN:
-		case UNITY_NATT_PORT:
-		case UNITY_BACKUP_SERVERS:
-			reply_attr = isakmp_unity_req(iph1, attr);
-			break;
-
-		case INTERNAL_ADDRESS_EXPIRY:
-		default:
-			plog(LLV_WARNING, LOCATION, NULL,
-			     "Ignored attribute %s\n",
-			     s_isakmp_cfg_type(type));
-			break;
-		}
-
-		npp = (char *)attr;
-		attr = (struct isakmp_data *)(npp + sizeof(*attr) + alen);
-		tlen -= (sizeof(*attr) + alen);
-
-		if (reply_attr != NULL) {
-			payload = buffer_cat(payload, reply_attr);
-			vfree(reply_attr);
-		}
-
-	}
-
-	reply = (struct isakmp_pl_attr *)payload->v;
-	reply->h.len = htons(payload->l);
-	reply->type = ISAKMP_CFG_REPLY;
-	reply->id = attrpl->id;
-
-	plog(LLV_DEBUG, LOCATION, NULL, 
-		    "Sending MODE_CFG REPLY\n");
-
-	error = isakmp_cfg_send(iph1, payload, 
-	    ISAKMP_NPTYPE_ATTR, ISAKMP_FLAG_E, 0);
-
-	if (iph1->status == PHASE1ST_ESTABLISHED) {
-		switch (AUTHMETHOD(iph1)) {
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-		case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-		/* Unimplemented */
-		case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R: 
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R: 
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R: 
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R: 
-			script_hook(iph1, SCRIPT_PHASE1_UP);
-			break;
-		default:
-			break;
-		}
-	}
-	
-end:
-	vfree(payload);
-
-	return error;
-}
-
-int
-isakmp_cfg_set(iph1, attrpl)
-	struct ph1handle *iph1;
-	struct isakmp_pl_attr *attrpl;
-{
-	struct isakmp_data *attr;
-	int tlen;
-	size_t alen;
-	char *npp;
-	vchar_t *payload;
-	struct isakmp_pl_attr *reply;
-	vchar_t *reply_attr;
-	int type;
-	int error = -1;
-
-	if ((payload = vmalloc(sizeof(*reply))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		return -1;
-	}
-	memset(payload->v, 0, sizeof(*reply));
-
-	tlen = ntohs(attrpl->h.len);
-	attr = (struct isakmp_data *)(attrpl + 1);
-	tlen -= sizeof(*attrpl);
-	
-	/* 
-	 * We should send ack for the attributes we accepted 
-	 */
-	while (tlen > 0) {
-		reply_attr = NULL;
-		type = ntohs(attr->type);
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-		     "Attribute %s\n", 
-		     s_isakmp_cfg_type(type & ~ISAKMP_GEN_MASK));
-		
-		switch (type & ~ISAKMP_GEN_MASK) {
-		case XAUTH_STATUS:
-			reply_attr = isakmp_xauth_set(iph1, attr);
-			break;
-		default:
-			plog(LLV_DEBUG, LOCATION, NULL,
-			     "Unexpected SET attribute %s\n", 
-		     	     s_isakmp_cfg_type(type & ~ISAKMP_GEN_MASK));
-			break;
-		}
-
-		if (reply_attr != NULL) {
-			payload = buffer_cat(payload, reply_attr);
-			vfree(reply_attr);
-		}
-
-		/* 
-		 * Move to next attribute. If we run out of the packet, 
-		 * tlen becomes negative and we exit. 
-		 */
-		if ((type & ISAKMP_GEN_MASK) == ISAKMP_GEN_TV) {
-			tlen -= sizeof(*attr);
-			attr++;
-		} else {
-			alen = ntohs(attr->lorv);
-			tlen -= (sizeof(*attr) + alen);
-			npp = (char *)attr;
-			attr = (struct isakmp_data *)
-			    (npp + sizeof(*attr) + alen);
-		}
-	}
-
-	reply = (struct isakmp_pl_attr *)payload->v;
-	reply->h.len = htons(payload->l);
-	reply->type = ISAKMP_CFG_ACK;
-	reply->id = attrpl->id;
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		     "Sending MODE_CFG ACK\n");
-
-	error = isakmp_cfg_send(iph1, payload, 
-	    ISAKMP_NPTYPE_ATTR, ISAKMP_FLAG_E, 0);
-
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_DELETE_PH1) {
-		if (iph1->status == PHASE1ST_ESTABLISHED)
-			isakmp_info_send_d1(iph1);
-		remph1(iph1);
-		delph1(iph1);
-		iph1 = NULL;
-	}
-end:
-	vfree(payload);
-
-	/* 
-	 * If required, request ISAKMP mode config information
-	 */
-	if ((iph1 != NULL) && (iph1->rmconf->mode_cfg) && (error == 0))
-		error = isakmp_cfg_getconfig(iph1);
-
-	return error;
-}
-
-
-static vchar_t *
-buffer_cat(s, append)
-	vchar_t *s;
-	vchar_t *append;
-{
-	vchar_t *new;
-
-	new = vmalloc(s->l + append->l);
-	if (new == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate memory\n");
-		return s;
-	}
-
-	memcpy(new->v, s->v, s->l);
-	memcpy(new->v + s->l, append->v, append->l);
-
-	vfree(s);
-	return new;
-}
-
-static vchar_t *
-isakmp_cfg_net(iph1, attr)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-{
-	int type;
-	int confsource;
-	in_addr_t addr4;
-
-	type = ntohs(attr->type);
-
-	/* 
-	 * Don't give an address to a peer that did not succeed Xauth
-	 */
-	if (xauth_check(iph1) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "Attempt to start phase config whereas Xauth failed\n");
-		return NULL;
-	}
-
-	confsource = isakmp_cfg_config.confsource;
-	/*
-	 * If we have to fall back to a local
-	 * configuration source, we will jump
-	 * back to this point.
-	 */
-retry_source:
-
-	switch(type) {
-	case INTERNAL_IP4_ADDRESS:
-		switch(confsource) {
-#ifdef HAVE_LIBLDAP
-		case ISAKMP_CFG_CONF_LDAP:
-			if (iph1->mode_cfg->flags & ISAKMP_CFG_ADDR4_EXTERN)
-			    break;
-			plog(LLV_INFO, LOCATION, NULL, 
-			    "No IP from LDAP, using local pool\n");
-			/* FALLTHROUGH */
-			confsource = ISAKMP_CFG_CONF_LOCAL;
-			goto retry_source;
-#endif
-#ifdef HAVE_LIBRADIUS
-		case ISAKMP_CFG_CONF_RADIUS:
-			if ((iph1->mode_cfg->flags & ISAKMP_CFG_ADDR4_EXTERN)
-			    && (iph1->mode_cfg->addr4.s_addr != htonl(-2)))
-			    /*
-			     * -2 is 255.255.255.254, RADIUS uses that
-			     * to instruct the NAS to use a local pool
-			     */
-			    break;
-			plog(LLV_INFO, LOCATION, NULL, 
-			    "No IP from RADIUS, using local pool\n");
-			/* FALLTHROUGH */
-			confsource = ISAKMP_CFG_CONF_LOCAL;
-			goto retry_source;
-#endif
-		case ISAKMP_CFG_CONF_LOCAL:
-			if (isakmp_cfg_getport(iph1) == -1) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "Port pool depleted\n");
-				break;
-			}
-
-			iph1->mode_cfg->addr4.s_addr = 
-			    htonl(ntohl(isakmp_cfg_config.network4) 
-			    + iph1->mode_cfg->port);
-			iph1->mode_cfg->flags |= ISAKMP_CFG_ADDR4_LOCAL;
-			break;
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Unexpected confsource\n");
-		}
-			
-		if (isakmp_cfg_accounting(iph1, ISAKMP_CFG_LOGIN) != 0)
-			plog(LLV_ERROR, LOCATION, NULL, "Accounting failed\n");
-
-		return isakmp_cfg_addr4(iph1, 
-		    attr, &iph1->mode_cfg->addr4.s_addr);
-		break;
-
-	case INTERNAL_IP4_NETMASK:
-		switch(confsource) {
-#ifdef HAVE_LIBLDAP
-		case ISAKMP_CFG_CONF_LDAP:
-			if (iph1->mode_cfg->flags & ISAKMP_CFG_MASK4_EXTERN)
-				break;
-			plog(LLV_INFO, LOCATION, NULL, 
-			    "No mask from LDAP, using local pool\n");
-			/* FALLTHROUGH */
-			confsource = ISAKMP_CFG_CONF_LOCAL;
-			goto retry_source;
-#endif
-#ifdef HAVE_LIBRADIUS
-		case ISAKMP_CFG_CONF_RADIUS:
-			if (iph1->mode_cfg->flags & ISAKMP_CFG_MASK4_EXTERN)
-				break;
-			plog(LLV_INFO, LOCATION, NULL, 
-			    "No mask from RADIUS, using local pool\n");
-			/* FALLTHROUGH */
-			confsource = ISAKMP_CFG_CONF_LOCAL;
-			goto retry_source;
-#endif
-		case ISAKMP_CFG_CONF_LOCAL:
-			iph1->mode_cfg->mask4.s_addr 
-			    = isakmp_cfg_config.netmask4;
-			iph1->mode_cfg->flags |= ISAKMP_CFG_MASK4_LOCAL;
-			break;
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Unexpected confsource\n");
-		}
-		return isakmp_cfg_addr4(iph1, attr, 
-		    &iph1->mode_cfg->mask4.s_addr);
-		break;
-
-	case INTERNAL_IP4_DNS:
-		return isakmp_cfg_addr4_list(iph1, 
-		    attr, &isakmp_cfg_config.dns4[0], 
-		    isakmp_cfg_config.dns4_index);
-		break;
-
-	case INTERNAL_IP4_NBNS:
-		return isakmp_cfg_addr4_list(iph1, 
-		    attr, &isakmp_cfg_config.nbns4[0], 
-		    isakmp_cfg_config.nbns4_index);
-		break;
-
-	case INTERNAL_IP4_SUBNET:
-		return isakmp_cfg_addr4(iph1, 
-		    attr, &isakmp_cfg_config.network4);
-		break;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL, "Unexpected type %d\n", type);
-		break;
-	}
-	return NULL;
-}
-
-#if 0
-static vchar_t *
-isakmp_cfg_void(iph1, attr)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-{
-	vchar_t *buffer;
-	struct isakmp_data *new;
-
-	if ((buffer = vmalloc(sizeof(*attr))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		return NULL;
-	}
-
-	new = (struct isakmp_data *)buffer->v;
-
-	new->type = attr->type;
-	new->lorv = htons(0);
-
-	return buffer;
-}
-#endif
-
-vchar_t *
-isakmp_cfg_copy(iph1, attr)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-{
-	vchar_t *buffer;
-	size_t len = 0;
-
-	if ((ntohs(attr->type) & ISAKMP_GEN_MASK) == ISAKMP_GEN_TLV)
-		len = ntohs(attr->lorv);
-
-	if ((buffer = vmalloc(sizeof(*attr) + len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		return NULL;
-	}
-
-	memcpy(buffer->v, attr, sizeof(*attr) + ntohs(attr->lorv));
-
-	return buffer;
-}
-
-vchar_t *
-isakmp_cfg_short(iph1, attr, value)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-	int value;
-{
-	vchar_t *buffer;
-	struct isakmp_data *new;
-	int type;
-
-	if ((buffer = vmalloc(sizeof(*attr))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		return NULL;
-	}
-
-	new = (struct isakmp_data *)buffer->v;
-	type = ntohs(attr->type) & ~ISAKMP_GEN_MASK;
-
-	new->type = htons(type | ISAKMP_GEN_TV);
-	new->lorv = htons(value);
-
-	return buffer;
-}
-
-vchar_t *
-isakmp_cfg_varlen(iph1, attr, string, len)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-	char *string;
-	size_t len;
-{
-	vchar_t *buffer;
-	struct isakmp_data *new;
-	char *data;
-
-	if ((buffer = vmalloc(sizeof(*attr) + len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		return NULL;
-	}
-
-	new = (struct isakmp_data *)buffer->v;
-
-	new->type = attr->type;
-	new->lorv = htons(len);
-	data = (char *)(new + 1);
-
-	memcpy(data, string, len);
-	
-	return buffer;
-}
-vchar_t *
-isakmp_cfg_string(iph1, attr, string)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-	char *string;
-{
-	size_t len = strlen(string);
-	return isakmp_cfg_varlen(iph1, attr, string, len);
-}
-
-static vchar_t *
-isakmp_cfg_addr4(iph1, attr, addr)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-	in_addr_t *addr;
-{
-	vchar_t *buffer;
-	struct isakmp_data *new;
-	size_t len;
-
-	len = sizeof(*addr);
-	if ((buffer = vmalloc(sizeof(*attr) + len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		return NULL;
-	}
-
-	new = (struct isakmp_data *)buffer->v;
-
-	new->type = attr->type;
-	new->lorv = htons(len);
-	memcpy(new + 1, addr, len);
-	
-	return buffer;
-}
-
-static vchar_t *
-isakmp_cfg_addr4_list(iph1, attr, addr, nbr)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-	in_addr_t *addr;
-	int nbr;
-{
-	int error = -1;
-	vchar_t *buffer = NULL;
-	vchar_t *bufone = NULL;
-	struct isakmp_data *new;
-	size_t len;
-	int i;
-
-	len = sizeof(*addr);
-	if ((buffer = vmalloc(0)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		goto out;
-	}
-	for(i = 0; i < nbr; i++) {
-		if ((bufone = vmalloc(sizeof(*attr) + len)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot allocate memory\n");
-			goto out;
-		}
-		new = (struct isakmp_data *)bufone->v;
-		new->type = attr->type;
-		new->lorv = htons(len);
-		memcpy(new + 1, &addr[i], len);
-		new += (len + sizeof(*attr));
-		buffer = buffer_cat(buffer, bufone);
-		vfree(bufone);
-	}
-
-	error = 0;
-
-out:
-	if ((error != 0) && (buffer != NULL)) {
-		vfree(buffer);
-		buffer = NULL;
-	}
-
-	return buffer;
-}
-
-struct isakmp_ivm *
-isakmp_cfg_newiv(iph1, msgid)
-	struct ph1handle *iph1;
-	u_int32_t msgid;
-{
-	struct isakmp_cfg_state *ics = iph1->mode_cfg;
-
-	if (ics == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "isakmp_cfg_newiv called without mode config state\n");
-		return NULL;
-	}
-
-	if (ics->ivm != NULL)
-		oakley_delivm(ics->ivm);
-
-	ics->ivm = oakley_newiv2(iph1, msgid);
-	ics->last_msgid = msgid;
-
-	return ics->ivm;
-}
-
-/* Derived from isakmp_info_send_common */
-int
-isakmp_cfg_send(iph1, payload, np, flags, new_exchange)
-	struct ph1handle *iph1;
-	vchar_t *payload;
-	u_int32_t np;
-	int flags;
-	int new_exchange;
-{
-	struct ph2handle *iph2 = NULL;
-	vchar_t *hash = NULL;
-	struct isakmp *isakmp;
-	struct isakmp_gen *gen;
-	char *p;
-	int tlen;
-	int error = -1;
-	struct isakmp_cfg_state *ics = iph1->mode_cfg;
-
-	/* Check if phase 1 is established */
-	if ((iph1->status != PHASE1ST_ESTABLISHED) || 
-	    (iph1->local == NULL) ||
-	    (iph1->remote == NULL)) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "ISAKMP mode config exchange with immature phase 1\n");
-		goto end;
-	}
-
-	/* add new entry to isakmp status table */
-	iph2 = newph2();
-	if (iph2 == NULL)
-		goto end;
-
-	iph2->dst = dupsaddr(iph1->remote);
-	if (iph2->dst == NULL) {
-		delph2(iph2);
-		goto end;
-	}
-	iph2->src = dupsaddr(iph1->local);
-	if (iph2->src == NULL) {
-		delph2(iph2);
-		goto end;
-	}
-
-#if (!defined(ENABLE_NATT)) || (defined(BROKEN_NATT))
-	if (set_port(iph2->dst, 0) == NULL ||
-	    set_port(iph2->src, 0) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "invalid family: %d\n", iph1->remote->sa_family);
-		delph2(iph2);
-		goto end;
-	}
-#endif
-	iph2->ph1 = iph1;
-	iph2->side = INITIATOR;
-	iph2->status = PHASE2ST_START;
-
-	if (new_exchange)
-		iph2->msgid = isakmp_newmsgid2(iph1);
-	else
-		iph2->msgid = iph1->msgid;
-
-	/* get IV and HASH(1) if skeyid_a was generated. */
-	if (iph1->skeyid_a != NULL) {
-		if (new_exchange) {
-			if (isakmp_cfg_newiv(iph1, iph2->msgid) == NULL) {
-				delph2(iph2);
-				goto end;
-			}
-		}
-
-		/* generate HASH(1) */
-		hash = oakley_compute_hash1(iph2->ph1, iph2->msgid, payload);
-		if (hash == NULL) {
-			delph2(iph2);
-			goto end;
-		}
-
-		/* initialized total buffer length */
-		tlen = hash->l;
-		tlen += sizeof(*gen);
-	} else {
-		/* IKE-SA is not established */
-		hash = NULL;
-
-		/* initialized total buffer length */
-		tlen = 0;
-	}
-	if ((flags & ISAKMP_FLAG_A) == 0)
-		iph2->flags = (hash == NULL ? 0 : ISAKMP_FLAG_E);
-	else
-		iph2->flags = (hash == NULL ? 0 : ISAKMP_FLAG_A);
-
-	insph2(iph2);
-	bindph12(iph1, iph2);
-
-	tlen += sizeof(*isakmp) + payload->l;
-
-	/* create buffer for isakmp payload */
-	iph2->sendbuf = vmalloc(tlen);
-	if (iph2->sendbuf == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		goto err;
-	}
-
-	/* create isakmp header */
-	isakmp = (struct isakmp *)iph2->sendbuf->v;
-	memcpy(&isakmp->i_ck, &iph1->index.i_ck, sizeof(cookie_t));
-	memcpy(&isakmp->r_ck, &iph1->index.r_ck, sizeof(cookie_t));
-	isakmp->np = hash == NULL ? (np & 0xff) : ISAKMP_NPTYPE_HASH;
-	isakmp->v = iph1->version;
-	isakmp->etype = ISAKMP_ETYPE_CFG;
-	isakmp->flags = iph2->flags;
-	memcpy(&isakmp->msgid, &iph2->msgid, sizeof(isakmp->msgid));
-	isakmp->len = htonl(tlen);
-	p = (char *)(isakmp + 1);
-
-	/* create HASH payload */
-	if (hash != NULL) {
-		gen = (struct isakmp_gen *)p;
-		gen->np = np & 0xff;
-		gen->len = htons(sizeof(*gen) + hash->l);
-		p += sizeof(*gen);
-		memcpy(p, hash->v, hash->l);
-		p += hash->l;
-	}
-
-	/* add payload */
-	memcpy(p, payload->v, payload->l);
-	p += payload->l;
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph2->sendbuf, iph1->local, iph1->remote, 1);
-#endif
-	
-	plog(LLV_DEBUG, LOCATION, NULL, "MODE_CFG packet to send\n");
-	plogdump(LLV_DEBUG, iph2->sendbuf->v, iph2->sendbuf->l);
-
-	/* encoding */
-	if (ISSET(isakmp->flags, ISAKMP_FLAG_E)) {
-		vchar_t *tmp;
-
-		tmp = oakley_do_encrypt(iph2->ph1, iph2->sendbuf, 
-			ics->ivm->ive, ics->ivm->iv);
-		VPTRINIT(iph2->sendbuf);
-		if (tmp == NULL)
-			goto err;
-		iph2->sendbuf = tmp;
-	}
-
-	/* HDR*, HASH(1), ATTR */
-	if (isakmp_send(iph2->ph1, iph2->sendbuf) < 0) {
-		VPTRINIT(iph2->sendbuf);
-		goto err;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"sendto mode config %s.\n", s_isakmp_nptype(np));
-
-	/*
-	 * XXX We might need to resend the message...
-	 */
-
-	error = 0;
-	VPTRINIT(iph2->sendbuf);
-
-err:
-	if (iph2->sendbuf != NULL)
-		vfree(iph2->sendbuf);
-
-	unbindph12(iph2);
-	remph2(iph2);
-	delph2(iph2);
-end:
-	if (hash)
-		vfree(hash);
-	return error;
-}
-
-
-void 
-isakmp_cfg_rmstate(iph1)
-	struct ph1handle *iph1;
-{
-	struct isakmp_cfg_state *state = iph1->mode_cfg;
-
-	if (isakmp_cfg_accounting(iph1, ISAKMP_CFG_LOGOUT) != 0)
-		plog(LLV_ERROR, LOCATION, NULL, "Accounting failed\n");
-
-	if (state->flags & ISAKMP_CFG_PORT_ALLOCATED)
-		isakmp_cfg_putport(iph1, state->port);	
-
-	/* Delete the IV if it's still there */
-	if(iph1->mode_cfg->ivm) {
-		oakley_delivm(iph1->mode_cfg->ivm);
-		iph1->mode_cfg->ivm = NULL;
-	}
-
-	/* Free any allocated splitnet lists */
-	if(iph1->mode_cfg->split_include != NULL)
-		splitnet_list_free(iph1->mode_cfg->split_include,
-			&iph1->mode_cfg->include_count);
-	if(iph1->mode_cfg->split_local != NULL)
-		splitnet_list_free(iph1->mode_cfg->split_local,
-			&iph1->mode_cfg->local_count);
-
-	xauth_rmstate(&state->xauth);
-
-	racoon_free(state);
-	iph1->mode_cfg = NULL;
-
-	return;
-}
-
-struct isakmp_cfg_state *
-isakmp_cfg_mkstate(void) 
-{
-	struct isakmp_cfg_state *state;
-
-	if ((state = racoon_malloc(sizeof(*state))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "Cannot allocate memory for mode config state\n");
-		return NULL;
-	}
-	memset(state, 0, sizeof(*state));
-
-	return state;
-}
-
-int 
-isakmp_cfg_getport(iph1)
-	struct ph1handle *iph1;
-{
-	unsigned int i;
-	size_t size = isakmp_cfg_config.pool_size;
-
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_PORT_ALLOCATED)
-		return iph1->mode_cfg->port;
-
-	if (isakmp_cfg_config.port_pool == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "isakmp_cfg_config.port_pool == NULL\n");
-		return -1;
-	}
-
-	for (i = 0; i < size; i++) {
-		if (isakmp_cfg_config.port_pool[i].used == 0)
-			break;
-	}
-
-	if (i == size) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "No more addresses available\n");
-			return -1;
-	}
-
-	isakmp_cfg_config.port_pool[i].used = 1;
-
-	plog(LLV_INFO, LOCATION, NULL, "Using port %d\n", i);
-
-	iph1->mode_cfg->flags |= ISAKMP_CFG_PORT_ALLOCATED;
-	iph1->mode_cfg->port = i;
-
-	return i;
-}
-
-int 
-isakmp_cfg_putport(iph1, index)
-	struct ph1handle *iph1;
-	unsigned int index;
-{
-	if (isakmp_cfg_config.port_pool == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "isakmp_cfg_config.port_pool == NULL\n");
-		return -1;
-	}
-
-	if (isakmp_cfg_config.port_pool[index].used == 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Attempt to release an unallocated address (port %d)\n",
-		    index);
-		return -1;
-	}
-
-#ifdef HAVE_LIBPAM
-	/* Cleanup PAM status associated with the port */
-	if (isakmp_cfg_config.authsource == ISAKMP_CFG_AUTH_PAM)
-		privsep_cleanup_pam(index);
-#endif
-	isakmp_cfg_config.port_pool[index].used = 0;
-	iph1->mode_cfg->flags &= ISAKMP_CFG_PORT_ALLOCATED;
-
-	plog(LLV_INFO, LOCATION, NULL, "Released port %d\n", index);
-
-	return 0;
-}
-
-#ifdef HAVE_LIBPAM
-void
-cleanup_pam(port)
-	int port;
-{
-	if (isakmp_cfg_config.port_pool[port].pam != NULL) {
-		pam_end(isakmp_cfg_config.port_pool[port].pam, PAM_SUCCESS);
-		isakmp_cfg_config.port_pool[port].pam = NULL;
-	}
-
-	return;
-}
-#endif
-
-/* Accounting, only for RADIUS or PAM */
-static int
-isakmp_cfg_accounting(iph1, inout)
-	struct ph1handle *iph1;
-	int inout;
-{
-#ifdef HAVE_LIBPAM
-	if (isakmp_cfg_config.accounting == ISAKMP_CFG_ACCT_PAM)
-		return privsep_accounting_pam(iph1->mode_cfg->port, 
-		    inout);
-#endif 
-#ifdef HAVE_LIBRADIUS
-	if (isakmp_cfg_config.accounting == ISAKMP_CFG_ACCT_RADIUS)
-		return isakmp_cfg_accounting_radius(iph1, inout);
-#endif
-	if (isakmp_cfg_config.accounting == ISAKMP_CFG_ACCT_SYSTEM)
-		return privsep_accounting_system(iph1->mode_cfg->port,
-			iph1->remote, iph1->mode_cfg->login, inout);
-	return 0;
-}
-
-#ifdef HAVE_LIBPAM
-int 
-isakmp_cfg_accounting_pam(port, inout)
-	int port;
-	int inout;
-{
-	int error = 0;
-	pam_handle_t *pam;
-
-	if (isakmp_cfg_config.port_pool == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "isakmp_cfg_config.port_pool == NULL\n");
-		return -1;
-	}
-	
-	pam = isakmp_cfg_config.port_pool[port].pam;
-	if (pam == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "pam handle is NULL\n");
-		return -1;
-	}
-
-	switch (inout) {
-	case ISAKMP_CFG_LOGIN:
-		error = pam_open_session(pam, 0);
-		break;
-	case ISAKMP_CFG_LOGOUT:
-		error = pam_close_session(pam, 0);
-		pam_end(pam, error);
-		isakmp_cfg_config.port_pool[port].pam = NULL;
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL, "Unepected inout\n");
-		break;
-	}
-	
-	if (error != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "pam_open_session/pam_close_session failed: %s\n",
-		    pam_strerror(pam, error)); 
-		return -1;
-        }
-
-	return 0;
-}
-#endif /* HAVE_LIBPAM */
-
-#ifdef HAVE_LIBRADIUS
-static int
-isakmp_cfg_accounting_radius(iph1, inout)
-	struct ph1handle *iph1;
-	int inout;
-{
-	/* For first time use, initialize Radius */
-	if (radius_acct_state == NULL) {
-		if ((radius_acct_state = rad_acct_open()) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Cannot init librradius\n");
-			return -1;
-		}
-
-		if (rad_config(radius_acct_state, NULL) != 0) {
-			 plog(LLV_ERROR, LOCATION, NULL,
-			     "Cannot open librarius config file: %s\n",
-			     rad_strerror(radius_acct_state));
-			  rad_close(radius_acct_state);
-			  radius_acct_state = NULL;
-			  return -1;
-		}
-	}
-
-	if (rad_create_request(radius_acct_state, 
-	    RAD_ACCOUNTING_REQUEST) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "rad_create_request failed: %s\n",
-		    rad_strerror(radius_acct_state));
-		return -1;
-	}
-
-	if (rad_put_string(radius_acct_state, RAD_USER_NAME, 
-	    iph1->mode_cfg->login) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "rad_put_string failed: %s\n",
-		    rad_strerror(radius_acct_state));
-		return -1;
-	}
-
-	switch (inout) {
-	case ISAKMP_CFG_LOGIN:
-		inout = RAD_START;
-		break;
-	case ISAKMP_CFG_LOGOUT:
-		inout = RAD_STOP;
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL, "Unepected inout\n");
-		break;
-	}
-
-	if (rad_put_addr(radius_acct_state, 
-	    RAD_FRAMED_IP_ADDRESS, iph1->mode_cfg->addr4) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "rad_put_addr failed: %s\n",
-		    rad_strerror(radius_acct_state));
-		return -1;
-	}
-
-	if (rad_put_addr(radius_acct_state, 
-	    RAD_LOGIN_IP_HOST, iph1->mode_cfg->addr4) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "rad_put_addr failed: %s\n",
-		    rad_strerror(radius_acct_state));
-		return -1;
-	}
-
-	if (rad_put_int(radius_acct_state, RAD_ACCT_STATUS_TYPE, inout) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "rad_put_int failed: %s\n",
-		    rad_strerror(radius_acct_state));
-		return -1;
-	}
-
-	if (isakmp_cfg_radius_common(radius_acct_state, 
-	    iph1->mode_cfg->port) != 0)
-		return -1;
-
-	if (rad_send_request(radius_acct_state) != RAD_ACCOUNTING_RESPONSE) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "rad_send_request failed: %s\n",
-		    rad_strerror(radius_acct_state));
-		return -1;
-	}
-
-	return 0;
-}
-#endif /* HAVE_LIBRADIUS */
-
-/*
- * Attributes common to all RADIUS requests
- */
-#ifdef HAVE_LIBRADIUS
-int
-isakmp_cfg_radius_common(radius_state, port)
-	struct rad_handle *radius_state;
-	int port;
-{ 
-	struct utsname name;
-	static struct hostent *host = NULL;
-	struct in_addr nas_addr;
-
-	/* 
-	 * Find our own IP by resolving our nodename
-	 */
-	if (host == NULL) {
-		if (uname(&name) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "uname failed: %s\n", strerror(errno));
-			return -1;
-		}
-
-		if ((host = gethostbyname(name.nodename)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "gethostbyname failed: %s\n", strerror(errno));
-			return -1;
-		}
-	}
-
-	memcpy(&nas_addr, host->h_addr, sizeof(nas_addr));
-	if (rad_put_addr(radius_state, RAD_NAS_IP_ADDRESS, nas_addr) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "rad_put_addr failed: %s\n",
-		    rad_strerror(radius_state));
-		return -1;
-	}
-
-	if (rad_put_int(radius_state, RAD_NAS_PORT, port) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "rad_put_int failed: %s\n",
-		    rad_strerror(radius_state));
-		return -1;
-	}
-
-	if (rad_put_int(radius_state, RAD_NAS_PORT_TYPE, RAD_VIRTUAL) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "rad_put_int failed: %s\n",
-		    rad_strerror(radius_state));
-		return -1;
-	}
-
-	if (rad_put_int(radius_state, RAD_SERVICE_TYPE, RAD_FRAMED) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "rad_put_int failed: %s\n",
-		    rad_strerror(radius_state));
-		return -1;
-	}
-	
-	return 0;
-}
-#endif
-
-#ifndef ANDROID_PATCHED
-
-/*
-	Logs the user into the utmp system files.
-*/
-
-int
-isakmp_cfg_accounting_system(port, raddr, usr, inout)
-	int port;
-	struct sockaddr *raddr;
-	char *usr;
-	int inout;
-{
-	int error = 0;
-	struct utmp ut;
-	char term[UT_LINESIZE];
-	char addr[NI_MAXHOST];
-	
-	if (usr == NULL || usr[0]=='\0') {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"system accounting : no login found\n");
-		return -1;
-	}
-
-	sprintf(term, TERMSPEC, port);
-
-	switch (inout) {
-	case ISAKMP_CFG_LOGIN:
-		strncpy(ut.ut_name, usr, UT_NAMESIZE);
-		ut.ut_name[UT_NAMESIZE - 1] = '\0';
-
-		strncpy(ut.ut_line, term, UT_LINESIZE);
-		ut.ut_line[UT_LINESIZE - 1] = '\0';
-
-		GETNAMEINFO_NULL(raddr, addr);
-		strncpy(ut.ut_host, addr, UT_HOSTSIZE);
-		ut.ut_host[UT_HOSTSIZE - 1] = '\0';
-
-		ut.ut_time = time(NULL);
- 
-		plog(LLV_INFO, LOCATION, NULL,
-			"Accounting : '%s' logging on '%s' from %s.\n",
-			ut.ut_name, ut.ut_line, ut.ut_host);
-
-		login(&ut);
-
-		break;
-	case ISAKMP_CFG_LOGOUT:	
-
-		plog(LLV_INFO, LOCATION, NULL,
-			"Accounting : '%s' unlogging from '%s'.\n",
-			usr, term);
-
-		logout(term);
-
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL, "Unepected inout\n");
-		break;
-	}
-
-	return 0;
-}
-	
-#endif
-
-int 
-isakmp_cfg_getconfig(iph1)
-	struct ph1handle *iph1;
-{
-	vchar_t *buffer;
-	struct isakmp_pl_attr *attrpl;
-	struct isakmp_data *attr;
-	size_t len;
-	int error;
-	int attrcount;
-	int i;
-	int attrlist[] = {
-		INTERNAL_IP4_ADDRESS,
-		INTERNAL_IP4_NETMASK,
-		INTERNAL_IP4_DNS,
-		INTERNAL_IP4_NBNS,
-		UNITY_BANNER,
-		UNITY_DEF_DOMAIN,
-		UNITY_SPLITDNS_NAME,
-		UNITY_SPLIT_INCLUDE,
-		UNITY_LOCAL_LAN,
-		APPLICATION_VERSION,
-	};
-
-	attrcount = sizeof(attrlist) / sizeof(*attrlist);
-	len = sizeof(*attrpl) + sizeof(*attr) * attrcount;
-	    
-	if ((buffer = vmalloc(len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		return -1;
-	}
-
-	attrpl = (struct isakmp_pl_attr *)buffer->v;
-	attrpl->h.len = htons(len);
-	attrpl->type = ISAKMP_CFG_REQUEST;
-	attrpl->id = htons((u_int16_t)(eay_random() & 0xffff));
-
-	attr = (struct isakmp_data *)(attrpl + 1);
-
-	for (i = 0; i < attrcount; i++) {
-		attr->type = htons(attrlist[i]);
-		attr->lorv = htons(0);
-		attr++;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, 
-		    "Sending MODE_CFG REQUEST\n");
-
-	error = isakmp_cfg_send(iph1, buffer,
-	    ISAKMP_NPTYPE_ATTR, ISAKMP_FLAG_E, 1);
-
-	vfree(buffer);
-
-	return error;
-}
-
-static void
-isakmp_cfg_getaddr4(attr, ip)
-	struct isakmp_data *attr;
-	struct in_addr *ip;
-{
-	size_t alen = ntohs(attr->lorv);
-	in_addr_t *addr;
-
-	if (alen != sizeof(*ip)) {
-		plog(LLV_ERROR, LOCATION, NULL, "Bad IPv4 address len\n");
-		return;
-	}
-
-	addr = (in_addr_t *)(attr + 1);
-	ip->s_addr = *addr;
-
-	return;
-}
-
-static void
-isakmp_cfg_appendaddr4(attr, ip, num, max)
-	struct isakmp_data *attr;
-	struct in_addr *ip;
-	int *num;
-	int max;
-{
-	size_t alen = ntohs(attr->lorv);
-	in_addr_t *addr;
-
-	if (alen != sizeof(*ip)) {
-		plog(LLV_ERROR, LOCATION, NULL, "Bad IPv4 address len\n");
-		return;
-	}
-	if (*num == max) {
-		plog(LLV_ERROR, LOCATION, NULL, "Too many addresses given\n");
-		return;
-	}
-
-	addr = (in_addr_t *)(attr + 1);
-	ip->s_addr = *addr;
-	(*num)++;
-
-	return;
-}
-
-static void
-isakmp_cfg_getstring(attr, str)
-	struct isakmp_data *attr;
-	char *str;
-{
-	size_t alen = ntohs(attr->lorv);
-	char *src;
-	src = (char *)(attr + 1);
-
-	memcpy(str, src, (alen > MAXPATHLEN ? MAXPATHLEN : alen));
-
-	return;
-}
-
-#define IP_MAX 40
-
-void
-isakmp_cfg_iplist_to_str(dest, count, addr, withmask)
-	char *dest;
-	int count;
-	void *addr;
-	int withmask;
-{
-	int i;
-	int p;
-	int l;
-	struct unity_network tmp;
-	for(i = 0, p = 0; i < count; i++) {
-		if(withmask == 1)
-			l = sizeof(struct unity_network);
-		else
-			l = sizeof(struct in_addr);
-		memcpy(&tmp, addr, l);
-#if defined(ANDROID_CHANGES)
-		addr = ((uint8_t*) addr) + l;
-#else
-		addr += l;
-#endif
-		if((uint32_t)tmp.addr4.s_addr == 0)
-			break;
-	
-		inet_ntop(AF_INET, &tmp.addr4, dest + p, IP_MAX);
-		p += strlen(dest + p);
-		if(withmask == 1) {
-			dest[p] = '/';
-			p++;
-			inet_ntop(AF_INET, &tmp.mask4, dest + p, IP_MAX);
-			p += strlen(dest + p);
-		}
-		dest[p] = ' ';
-		p++;
-	}
-	if(p > 0)
-		dest[p-1] = '\0';
-	else
-		dest[0] = '\0';
-}
-
-int
-isakmp_cfg_setenv(iph1, envp, envc)
-	struct ph1handle *iph1; 
-	char ***envp;
-	int *envc;
-{
-	char addrstr[IP_MAX];
-	char addrlist[IP_MAX * MAXNS + MAXNS];
-	char *splitlist = addrlist;
-	char *splitlist_cidr;
-	char defdom[MAXPATHLEN + 1];
-	int cidr, tmp;
-	char cidrstr[4];
-	int i, p;
-	int test;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "Starting a script.\n");
-
-	/* 
-	 * Internal IPv4 address, either if 
-	 * we are a client or a server.
-	 */
-	if ((iph1->mode_cfg->flags & ISAKMP_CFG_GOT_ADDR4) ||
-#ifdef HAVE_LIBLDAP
-	    (iph1->mode_cfg->flags & ISAKMP_CFG_ADDR4_EXTERN) ||
-#endif
-#ifdef HAVE_LIBRADIUS
-	    (iph1->mode_cfg->flags & ISAKMP_CFG_ADDR4_EXTERN) ||
-#endif
-	    (iph1->mode_cfg->flags & ISAKMP_CFG_ADDR4_LOCAL)) {
-		inet_ntop(AF_INET, &iph1->mode_cfg->addr4, 
-		    addrstr, IP_MAX);
-	} else
-		addrstr[0] = '\0';
-
-	if (script_env_append(envp, envc, "INTERNAL_ADDR4", addrstr) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot set INTERNAL_ADDR4\n");
-		return -1;
-	}
-
-	if (iph1->mode_cfg->xauth.authdata.generic.usr != NULL) {
-		if (script_env_append(envp, envc, "XAUTH_USER", 
-		    iph1->mode_cfg->xauth.authdata.generic.usr) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot set XAUTH_USER\n");
-			return -1;
-		}
-	}
-
-	/* Internal IPv4 mask */
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_GOT_MASK4) 
-		inet_ntop(AF_INET, &iph1->mode_cfg->mask4, 
-		    addrstr, IP_MAX);
-	else
-		addrstr[0] = '\0';
-
-	/* 	
-	 * During several releases, documentation adverised INTERNAL_NETMASK4
-	 * while code was using INTERNAL_MASK4. We now do both.
-	 */
-
-	if (script_env_append(envp, envc, "INTERNAL_MASK4", addrstr) != 0) { 
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot set INTERNAL_MASK4\n");
-		return -1;
-	}
-
-	if (script_env_append(envp, envc, "INTERNAL_NETMASK4", addrstr) != 0) { 
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot set INTERNAL_NETMASK4\n");
-		return -1;
-	}
-
-	tmp = ntohl(iph1->mode_cfg->mask4.s_addr);
-	for (cidr = 0; tmp != 0; cidr++)
-		tmp <<= 1;
-	snprintf(cidrstr, 3, "%d", cidr);
-
-	if (script_env_append(envp, envc, "INTERNAL_CIDR4", cidrstr) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot set INTERNAL_CIDR4\n");
-		return -1;
-	}
-
-	/* Internal IPv4 DNS */
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_GOT_DNS4) {
-		/* First Internal IPv4 DNS (for compatibilty with older code */
-		inet_ntop(AF_INET, &iph1->mode_cfg->dns4[0], 
-		    addrstr, IP_MAX);
-
-		/* Internal IPv4 DNS - all */
-		isakmp_cfg_iplist_to_str(addrlist, iph1->mode_cfg->dns4_index,
-			(void *)iph1->mode_cfg->dns4, 0);
-	} else {
-		addrstr[0] = '\0';
-		addrlist[0] = '\0';
-	}
-
-	if (script_env_append(envp, envc, "INTERNAL_DNS4", addrstr) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot set INTERNAL_DNS4\n");
-		return -1;
-	}
-	if (script_env_append(envp, envc, "INTERNAL_DNS4_LIST", addrlist) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot set INTERNAL_DNS4_LIST\n");
-		return -1;
-	}
-	
-	/* Internal IPv4 WINS */
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_GOT_WINS4) {
-		/* 
-		 * First Internal IPv4 WINS 
-		 * (for compatibilty with older code 
-		 */
-		inet_ntop(AF_INET, &iph1->mode_cfg->wins4[0], 
-		    addrstr, IP_MAX);
-
-		/* Internal IPv4 WINS - all */
-		isakmp_cfg_iplist_to_str(addrlist, iph1->mode_cfg->wins4_index,
-			(void *)iph1->mode_cfg->wins4, 0);
-	} else {
-		addrstr[0] = '\0';
-		addrlist[0] = '\0';
-	}
-
-	if (script_env_append(envp, envc, "INTERNAL_WINS4", addrstr) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot set INTERNAL_WINS4\n");
-		return -1;
-	}
-	if (script_env_append(envp, envc, 
-	    "INTERNAL_WINS4_LIST", addrlist) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot set INTERNAL_WINS4_LIST\n");
-		return -1;
-	}
-
-	/* Deault domain */
-	if(iph1->mode_cfg->flags & ISAKMP_CFG_GOT_DEFAULT_DOMAIN) 
-		strncpy(defdom, 
-		    iph1->mode_cfg->default_domain, 
-		    MAXPATHLEN + 1);
-	else
-		defdom[0] = '\0';
-	
-	if (script_env_append(envp, envc, "DEFAULT_DOMAIN", defdom) != 0) { 
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot set DEFAULT_DOMAIN\n");
-		return -1;
-	}
-
-	/* Split networks */
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_GOT_SPLIT_INCLUDE) {
-		splitlist =
-		    splitnet_list_2str(iph1->mode_cfg->split_include, NETMASK);
-		splitlist_cidr =
-		    splitnet_list_2str(iph1->mode_cfg->split_include, CIDR);
-	} else {
-		splitlist = addrlist;
-		splitlist_cidr = addrlist;
-		addrlist[0] = '\0';
-	}
-
-	if (script_env_append(envp, envc, "SPLIT_INCLUDE", splitlist) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot set SPLIT_INCLUDE\n");
-		return -1;
-	}
-	if (script_env_append(envp, envc,
-	    "SPLIT_INCLUDE_CIDR", splitlist_cidr) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "Cannot set SPLIT_INCLUDE_CIDR\n");
-		return -1;
-	}
-	if (splitlist != addrlist)
-		racoon_free(splitlist);
-	if (splitlist_cidr != addrlist)
-		racoon_free(splitlist_cidr);
-
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_GOT_SPLIT_LOCAL) {
-		splitlist =
-		    splitnet_list_2str(iph1->mode_cfg->split_local, NETMASK);
-		splitlist_cidr =
-		    splitnet_list_2str(iph1->mode_cfg->split_local, CIDR);
-	} else {
-		splitlist = addrlist;
-		splitlist_cidr = addrlist;
-		addrlist[0] = '\0';
-	}
-
-	if (script_env_append(envp, envc, "SPLIT_LOCAL", splitlist) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot set SPLIT_LOCAL\n");
-		return -1;
-	}
-	if (script_env_append(envp, envc,
-	    "SPLIT_LOCAL_CIDR", splitlist_cidr) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "Cannot set SPLIT_LOCAL_CIDR\n");
-		return -1;
-	}
-	if (splitlist != addrlist)
-		racoon_free(splitlist);
-	if (splitlist_cidr != addrlist)
-		racoon_free(splitlist_cidr);
-
-	return 0;
-}
-
-int
-isakmp_cfg_resize_pool(size)
-	int size;
-{
-	struct isakmp_cfg_port *new_pool;
-	size_t len;
-	int i;
-
-	if (size == isakmp_cfg_config.pool_size)
-		return 0;
-
-	plog(LLV_INFO, LOCATION, NULL,
-	    "Resize address pool from %zu to %d\n",
-	    isakmp_cfg_config.pool_size, size);
-
-	/* If a pool already exists, check if we can shrink it */
-	if ((isakmp_cfg_config.port_pool != NULL) &&
-	    (size < isakmp_cfg_config.pool_size)) {
-		for (i = isakmp_cfg_config.pool_size-1; i >= size; --i) {
-			if (isakmp_cfg_config.port_pool[i].used) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "resize pool from %zu to %d impossible "
-				    "port %d is in use\n", 
-				    isakmp_cfg_config.pool_size, size, i);
-				size = i;
-				break;
-			}	
-		}
-	}
-
-	len = size * sizeof(*isakmp_cfg_config.port_pool);
-	new_pool = racoon_realloc(isakmp_cfg_config.port_pool, len);
-	if (new_pool == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "resize pool from %zu to %d impossible: %s",
-		    isakmp_cfg_config.pool_size, size, strerror(errno));
-		return -1;
-	}
-
-	/* If size increase, intialize correctly the new records */
-	if (size > isakmp_cfg_config.pool_size) {
-		size_t unit;
-		size_t old_size;
-
-		unit =  sizeof(*isakmp_cfg_config.port_pool);
-		old_size = isakmp_cfg_config.pool_size;
-
-		bzero((char *)new_pool + (old_size * unit), 
-		    (size - old_size) * unit);
-	}
-
-	isakmp_cfg_config.port_pool = new_pool;
-	isakmp_cfg_config.pool_size = size;
-
-	return 0;
-}
-
-int
-isakmp_cfg_init(cold) 
-	int cold;
-{
-	int i;
-	int error;
-
-	isakmp_cfg_config.network4 = (in_addr_t)0x00000000;
-	isakmp_cfg_config.netmask4 = (in_addr_t)0x00000000;
-	for (i = 0; i < MAXNS; i++)
-		isakmp_cfg_config.dns4[i] = (in_addr_t)0x00000000;
-	isakmp_cfg_config.dns4_index = 0;
-	for (i = 0; i < MAXWINS; i++)
-		isakmp_cfg_config.nbns4[i] = (in_addr_t)0x00000000;
-	isakmp_cfg_config.nbns4_index = 0;
-	if (cold == ISAKMP_CFG_INIT_COLD)
-		isakmp_cfg_config.port_pool = NULL;
-	isakmp_cfg_config.authsource = ISAKMP_CFG_AUTH_SYSTEM;
-	isakmp_cfg_config.groupsource = ISAKMP_CFG_GROUP_SYSTEM;
-	if (cold == ISAKMP_CFG_INIT_COLD) {
-		if (isakmp_cfg_config.grouplist != NULL) {
-			for (i = 0; i < isakmp_cfg_config.groupcount; i++)
-				racoon_free(isakmp_cfg_config.grouplist[i]);
-			racoon_free(isakmp_cfg_config.grouplist);
-		}
-	}
-	isakmp_cfg_config.grouplist = NULL;
-	isakmp_cfg_config.groupcount = 0;
-	isakmp_cfg_config.confsource = ISAKMP_CFG_CONF_LOCAL;
-	isakmp_cfg_config.accounting = ISAKMP_CFG_ACCT_NONE;
-	if (cold == ISAKMP_CFG_INIT_COLD)
-		isakmp_cfg_config.pool_size = 0;
-	isakmp_cfg_config.auth_throttle = THROTTLE_PENALTY;
-	strlcpy(isakmp_cfg_config.default_domain, ISAKMP_CFG_DEFAULT_DOMAIN,
-	    MAXPATHLEN);
-	strlcpy(isakmp_cfg_config.motd, ISAKMP_CFG_MOTD, MAXPATHLEN);
-
-	if (cold != ISAKMP_CFG_INIT_COLD )
-		if (isakmp_cfg_config.splitnet_list != NULL)
-			splitnet_list_free(isakmp_cfg_config.splitnet_list,
-				&isakmp_cfg_config.splitnet_count);
-	isakmp_cfg_config.splitnet_list = NULL;
-	isakmp_cfg_config.splitnet_count = 0;
-	isakmp_cfg_config.splitnet_type = 0;
-
-	isakmp_cfg_config.pfs_group = 0;
-	isakmp_cfg_config.save_passwd = 0;
-
-	if (cold != ISAKMP_CFG_INIT_COLD )
-		if (isakmp_cfg_config.splitdns_list != NULL)
-			racoon_free(isakmp_cfg_config.splitdns_list);
-	isakmp_cfg_config.splitdns_list = NULL;
-	isakmp_cfg_config.splitdns_len = 0;
-
-#if 0
-	if (cold == ISAKMP_CFG_INIT_COLD) {
-		if ((error = isakmp_cfg_resize_pool(ISAKMP_CFG_MAX_CNX)) != 0)
-			return error;
-	}
-#endif
-
-	return 0;
-}
-
diff --git a/src/racoon/isakmp_cfg.h b/src/racoon/isakmp_cfg.h
deleted file mode 100644
index 253a17f..0000000
--- a/src/racoon/isakmp_cfg.h
+++ /dev/null
@@ -1,229 +0,0 @@
-/*	$NetBSD: isakmp_cfg.h,v 1.6 2006/09/09 16:22:09 manu Exp $	*/
-
-/*	$KAME$ */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus
- * 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.
- */
-
-#ifdef HAVE_LIBPAM
-#include <security/pam_appl.h>
-#endif
-
-#ifdef ANDROID_PATCHED
-#include <arpa/inet.h>
-#ifndef MAXNS
-#define MAXNS 2
-#endif
-#endif
-
-/* 
- * XXX don't forget to update 
- * src/racoon/handler.c:exclude_cfg_addr()
- * if you add IPv6 capability
- */
-
-/* Attribute types */
-#define INTERNAL_IP4_ADDRESS        1
-#define INTERNAL_IP4_NETMASK        2
-#define INTERNAL_IP4_DNS            3
-#define INTERNAL_IP4_NBNS           4
-#define INTERNAL_ADDRESS_EXPIRY     5
-#define INTERNAL_IP4_DHCP           6
-#define APPLICATION_VERSION         7
-#define INTERNAL_IP6_ADDRESS        8
-#define INTERNAL_IP6_NETMASK        9
-#define INTERNAL_IP6_DNS           10
-#define INTERNAL_IP6_NBNS          11
-#define INTERNAL_IP6_DHCP          12
-#define INTERNAL_IP4_SUBNET        13
-#define SUPPORTED_ATTRIBUTES       14
-#define INTERNAL_IP6_SUBNET        15
-
-/* For APPLICATION_VERSION */
-#define ISAKMP_CFG_RACOON_VERSION "racoon / IPsec-tools"
-
-/* For the wins servers -- XXX find the value somewhere ? */
-#define MAXWINS 4
-
-/* 
- * Global configuration for ISAKMP mode confiration address allocation 
- * Read from the mode_cfg section of racoon.conf
- */
-struct isakmp_cfg_port {
-	char	used;
-#ifdef HAVE_LIBPAM
-	pam_handle_t *pam;
-#endif
-};
-
-struct isakmp_cfg_config {
-	in_addr_t		network4;
-	in_addr_t		netmask4;
-	in_addr_t		dns4[MAXNS];
-	int			dns4_index;
-	in_addr_t		nbns4[MAXWINS];
-	int			nbns4_index;
-	struct isakmp_cfg_port 	*port_pool;
-	int			authsource;
-	int			groupsource;
-	char			**grouplist;
-	int			groupcount;
-	int			confsource;
-	int			accounting;
-	size_t			pool_size;
-	int			auth_throttle;
-	/* XXX move this to a unity specific sub-structure */
-	char			default_domain[MAXPATHLEN + 1];
-	char			motd[MAXPATHLEN + 1];
-	struct unity_netentry	*splitnet_list;
-	int			splitnet_count;
-	int			splitnet_type;
-	char 			*splitdns_list;
-	int			splitdns_len;
-	int			pfs_group;
-	int			save_passwd;
-};
-
-/* For utmp updating */
-#define TERMSPEC	"vpn%d"
-
-/* For authsource */
-#define ISAKMP_CFG_AUTH_SYSTEM	0
-#define ISAKMP_CFG_AUTH_RADIUS	1
-#define ISAKMP_CFG_AUTH_PAM	2
-#define ISAKMP_CFG_AUTH_LDAP	4
-
-/* For groupsource */
-#define ISAKMP_CFG_GROUP_SYSTEM	0
-#define ISAKMP_CFG_GROUP_LDAP	1
-
-/* For confsource */
-#define ISAKMP_CFG_CONF_LOCAL	0
-#define ISAKMP_CFG_CONF_RADIUS	1
-#define ISAKMP_CFG_CONF_LDAP	2
-
-/* For accounting */
-#define ISAKMP_CFG_ACCT_NONE	0
-#define ISAKMP_CFG_ACCT_RADIUS	1
-#define ISAKMP_CFG_ACCT_PAM	2
-#define ISAKMP_CFG_ACCT_LDAP	3
-#define ISAKMP_CFG_ACCT_SYSTEM	4
-
-/* For pool_size */
-#define ISAKMP_CFG_MAX_CNX	255
-
-/* For motd */
-#define ISAKMP_CFG_MOTD	"/etc/motd"
-
-/* For default domain */
-#define ISAKMP_CFG_DEFAULT_DOMAIN ""
-
-extern struct isakmp_cfg_config isakmp_cfg_config;
-
-/*
- * ISAKMP mode config state 
- */
-#define LOGINLEN 31
-struct isakmp_cfg_state {
-	int flags;			/* See below */
-	unsigned int port;		/* address index */
-	char login[LOGINLEN + 1];	/* login */
-	struct in_addr addr4;		/* IPv4 address */
-	struct in_addr mask4;		/* IPv4 netmask */
-	struct in_addr dns4[MAXNS];	/* IPv4 DNS (when client only) */
-	int dns4_index;			/* Number of IPv4 DNS (client only) */
-	struct in_addr wins4[MAXWINS];	/* IPv4 WINS (when client only) */
-	int wins4_index;		/* Number of IPv4 WINS (client only) */
-	char default_domain[MAXPATHLEN + 1];	/* Default domain recieved */
-	struct unity_netentry 
-	    *split_include; 		/* UNITY_SPLIT_INCLUDE */
-	int include_count;		/* Number of SPLIT_INCLUDES */
-	struct unity_netentry 
-	    *split_local;		/* UNITY_LOCAL_LAN */
-	int local_count;		/* Number of SPLIT_LOCAL */
-	struct xauth_state xauth;	/* Xauth state, if revelant */		
-	struct isakmp_ivm *ivm;		/* XXX Use iph1's ivm? */
-	u_int32_t last_msgid;           /* Last message-ID */
-};
-
-/* flags */
-#define ISAKMP_CFG_VENDORID_XAUTH	0x01	/* Supports Xauth */
-#define ISAKMP_CFG_VENDORID_UNITY	0x02	/* Cisco Unity compliant */
-#define ISAKMP_CFG_PORT_ALLOCATED	0x04	/* Port allocated */
-#define ISAKMP_CFG_ADDR4_EXTERN		0x08	/* Address from external config  */
-#define ISAKMP_CFG_MASK4_EXTERN		0x10	/* Netmask from external config */
-#define ISAKMP_CFG_ADDR4_LOCAL		0x20	/* Address from local pool */
-#define ISAKMP_CFG_MASK4_LOCAL		0x40	/* Netmask from local pool */
-#define ISAKMP_CFG_GOT_ADDR4		0x80	/* Client got address */
-#define ISAKMP_CFG_GOT_MASK4		0x100	/* Client got mask */
-#define ISAKMP_CFG_GOT_DNS4		0x200	/* Client got DNS */
-#define ISAKMP_CFG_GOT_WINS4		0x400	/* Client got WINS */
-#define ISAKMP_CFG_DELETE_PH1		0x800	/* phase 1 should be deleted */
-#define ISAKMP_CFG_GOT_DEFAULT_DOMAIN	0x1000	/* Client got default domain */
-#define ISAKMP_CFG_GOT_SPLIT_INCLUDE	0x2000	/* Client got a split network config */
-#define ISAKMP_CFG_GOT_SPLIT_LOCAL	0x4000	/* Client got a split LAN config */
-
-struct isakmp_pl_attr;
-struct ph1handle;
-struct isakmp_ivm;
-void isakmp_cfg_r(struct ph1handle *, vchar_t *);
-int isakmp_cfg_attr_r(struct ph1handle *, u_int32_t, struct isakmp_pl_attr *);
-int isakmp_cfg_reply(struct ph1handle *, struct isakmp_pl_attr *);
-int isakmp_cfg_request(struct ph1handle *, struct isakmp_pl_attr *);
-int isakmp_cfg_set(struct ph1handle *, struct isakmp_pl_attr *);
-int isakmp_cfg_send(struct ph1handle *, vchar_t *, u_int32_t, int, int);
-struct isakmp_ivm *isakmp_cfg_newiv(struct ph1handle *, u_int32_t);
-void isakmp_cfg_rmstate(struct ph1handle *);
-struct isakmp_cfg_state *isakmp_cfg_mkstate(void);
-vchar_t *isakmp_cfg_copy(struct ph1handle *, struct isakmp_data *);
-vchar_t *isakmp_cfg_short(struct ph1handle *, struct isakmp_data *, int);
-vchar_t *isakmp_cfg_varlen(struct ph1handle *, struct isakmp_data *, char *, size_t);
-vchar_t *isakmp_cfg_string(struct ph1handle *, struct isakmp_data *, char *);
-int isakmp_cfg_getconfig(struct ph1handle *);
-int isakmp_cfg_setenv(struct ph1handle *, char ***, int *);
-
-int isakmp_cfg_resize_pool(int);
-int isakmp_cfg_getport(struct ph1handle *);
-int isakmp_cfg_putport(struct ph1handle *, unsigned int);
-int isakmp_cfg_init(int);
-#define ISAKMP_CFG_INIT_COLD	1
-#define ISAKMP_CFG_INIT_WARM	0
-
-#ifdef HAVE_LIBRADIUS
-struct rad_handle;
-extern struct rad_handle *radius_acct_state;
-int isakmp_cfg_radius_common(struct rad_handle *, int); 
-#endif
-
-#ifdef HAVE_LIBPAM
-int isakmp_cfg_accounting_pam(int, int);
-void cleanup_pam(int);
-#endif
-
-int isakmp_cfg_accounting_system(int, struct sockaddr *, char *, int);
diff --git a/src/racoon/isakmp_frag.c b/src/racoon/isakmp_frag.c
deleted file mode 100644
index 6fac6a2..0000000
--- a/src/racoon/isakmp_frag.c
+++ /dev/null
@@ -1,356 +0,0 @@
-/*	$NetBSD: isakmp_frag.c,v 1.4.6.1 2009/04/22 11:25:35 tteras Exp $	*/
-
-/* Id: isakmp_frag.c,v 1.4 2004/11/13 17:31:36 manubsd Exp */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/queue.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <openssl/md5.h> 
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#include <netdb.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <ctype.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "schedule.h"
-#include "debug.h"
-
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "handler.h"
-#include "isakmp_frag.h"
-#include "strnames.h"
-
-int
-isakmp_sendfrags(iph1, buf) 
-	struct ph1handle *iph1;
-	vchar_t *buf;
-{
-	struct isakmp *hdr;
-	struct isakmp_frag *fraghdr;
-	caddr_t data;
-	caddr_t sdata;
-	size_t datalen;
-	size_t max_datalen;
-	size_t fraglen;
-	vchar_t *frag;
-	unsigned int trailer;
-	unsigned int fragnum = 0;
-	size_t len;
-	int etype;
-
-	/*
-	 * Catch the exchange type for later: the fragments and the
-	 * fragmented packet must have the same exchange type.
-	 */
-	hdr = (struct isakmp *)buf->v;
-	etype = hdr->etype;
-
-	/*
-	 * We want to send a a packet smaller than ISAKMP_FRAG_MAXLEN
-	 * First compute the maximum data length that will fit in it
-	 */
-	max_datalen = ISAKMP_FRAG_MAXLEN - 
-	    (sizeof(*hdr) + sizeof(*fraghdr) + sizeof(trailer));
-
-	sdata = buf->v;
-	len = buf->l;
-
-	while (len > 0) {
-		fragnum++;
-
-		if (len > max_datalen)
-			datalen = max_datalen;
-		else
-			datalen = len;
-
-		fraglen = sizeof(*hdr) 
-			+ sizeof(*fraghdr) 
-			+ datalen;
-
-		if ((frag = vmalloc(fraglen)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot allocate memory\n");
-			return -1;
-		}
-
-		set_isakmp_header1(frag, iph1, ISAKMP_NPTYPE_FRAG);
-		hdr = (struct isakmp *)frag->v;
-		hdr->etype = etype;
-
-		fraghdr = (struct isakmp_frag *)(hdr + 1);
-		fraghdr->unknown0 = htons(0);
-		fraghdr->len = htons(fraglen - sizeof(*hdr));
-		fraghdr->unknown1 = htons(1);
-		fraghdr->index = fragnum;
-		if (len == datalen)
-			fraghdr->flags = ISAKMP_FRAG_LAST;
-		else
-			fraghdr->flags = 0;
-
-		data = (caddr_t)(fraghdr + 1);
-		memcpy(data, sdata, datalen);
-
-		if (isakmp_send(iph1, frag) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL, "isakmp_send failed\n");
-			return -1;
-		}
-
-		vfree(frag);
-
-		len -= datalen;
-		sdata += datalen;
-	}
-		
-	return fragnum;
-}
-
-unsigned int 
-vendorid_frag_cap(gen)
-	struct isakmp_gen *gen;
-{
-	int *hp;
-
-	hp = (int *)(gen + 1);
-
-	return ntohl(hp[MD5_DIGEST_LENGTH / sizeof(*hp)]);
-}
-
-int 
-isakmp_frag_extract(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	struct isakmp *isakmp;
-	struct isakmp_frag *frag;
-	struct isakmp_frag_item *item;
-	vchar_t *buf;
-	size_t len;
-	int last_frag = 0;
-	char *data;
-	int i;
-
-	if (msg->l < sizeof(*isakmp) + sizeof(*frag)) {
-		plog(LLV_ERROR, LOCATION, NULL, "Message too short\n");
-		return -1;
-	}
-
-	isakmp = (struct isakmp *)msg->v;
-	frag = (struct isakmp_frag *)(isakmp + 1);
-
-	/* 
-	 * frag->len is the frag payload data plus the frag payload header,
-	 * whose size is sizeof(*frag) 
-	 */
-	if (msg->l < sizeof(*isakmp) + ntohs(frag->len) ||
-	    ntohs(frag->len) < sizeof(*frag) + 1) {
-		plog(LLV_ERROR, LOCATION, NULL, "Fragment too short\n");
-		return -1;
-	}
-
-	if ((buf = vmalloc(ntohs(frag->len) - sizeof(*frag))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		return -1;
-	}
-
-	if ((item = racoon_malloc(sizeof(*item))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		vfree(buf);
-		return -1;
-	}
-
-	data = (char *)(frag + 1);
-	memcpy(buf->v, data, buf->l);
-
-	item->frag_num = frag->index;
-	item->frag_last = (frag->flags & ISAKMP_FRAG_LAST);
-	item->frag_next = NULL;
-	item->frag_packet = buf;
-
-	/* Look for the last frag while inserting the new item in the chain */
-	if (item->frag_last)
-		last_frag = item->frag_num;
-
-	if (iph1->frag_chain == NULL) {
-		iph1->frag_chain = item;
-	} else {
-		struct isakmp_frag_item *current;
-
-		current = iph1->frag_chain;
-		while (current->frag_next) {
-			if (current->frag_last)
-				last_frag = item->frag_num;
-			current = current->frag_next;
-		}
-		current->frag_next = item;
-	}
-
-	/* If we saw the last frag, check if the chain is complete */
-	if (last_frag != 0) {
-		for (i = 1; i <= last_frag; i++) {
-			item = iph1->frag_chain;
-			do {
-				if (item->frag_num == i)
-					break;
-				item = item->frag_next;
-			} while (item != NULL);
-
-			if (item == NULL) /* Not found */
-				break;
-		}
-
-		if (item != NULL) /* It is complete */
-			return 1;
-	}
-		
-	return 0;
-}
-
-vchar_t *
-isakmp_frag_reassembly(iph1)
-	struct ph1handle *iph1;
-{
-	struct isakmp_frag_item *item;
-	size_t len = 0;
-	vchar_t *buf = NULL;
-	int frag_count = 0;
-	int i;
-	char *data;
-
-	if ((item = iph1->frag_chain) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "No fragment to reassemble\n");
-		goto out;
-	}
-
-	do {
-		frag_count++;
-		len += item->frag_packet->l;
-		item = item->frag_next;
-	} while (item != NULL);
-	
-	if ((buf = vmalloc(len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		goto out;
-	}
-	data = buf->v;
-
-	for (i = 1; i <= frag_count; i++) {
-		item = iph1->frag_chain;
-		do {
-			if (item->frag_num == i)
-				break;
-			item = item->frag_next;
-		} while (item != NULL);
-
-		if (item == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Missing fragment #%d\n", i);
-			vfree(buf);
-			buf = NULL;
-			goto out;
-		}
-		memcpy(data, item->frag_packet->v, item->frag_packet->l);
-		data += item->frag_packet->l;
-	}
-
-out:
-	item = iph1->frag_chain;		
-	do {
-		struct isakmp_frag_item *next_item;
-
-		next_item = item->frag_next;
-
-		vfree(item->frag_packet);
-		racoon_free(item);
-
-		item = next_item;
-	} while (item != NULL);
-
-	iph1->frag_chain = NULL;
-
-	return buf;
-}
-
-vchar_t *
-isakmp_frag_addcap(buf, cap)
-	vchar_t *buf;
-	int cap;
-{
-	int *capp;
-	size_t len;
-
-	/* If the capability has not been added, add room now */
-	len = buf->l;
-	if (len == MD5_DIGEST_LENGTH) {
-		if ((buf = vrealloc(buf, len + sizeof(cap))) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot allocate memory\n");
-			return NULL;
-		}
-		capp = (int *)(buf->v + len);
-		*capp = htonl(0);
-	}
-
-	capp = (int *)(buf->v + MD5_DIGEST_LENGTH);
-	*capp |= htonl(cap);
-
-	return buf;
-}
-
diff --git a/src/racoon/isakmp_frag.h b/src/racoon/isakmp_frag.h
deleted file mode 100644
index f2d4c33..0000000
--- a/src/racoon/isakmp_frag.h
+++ /dev/null
@@ -1,58 +0,0 @@
-/*	$NetBSD: isakmp_frag.h,v 1.5 2006/09/18 20:32:40 manu Exp $	*/
-
-/*	Id: isakmp_frag.h,v 1.3 2005/04/09 16:25:24 manubsd Exp */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus 
- * 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.
- */
-
-/* These are the values from parsing "remote {}"
-   block of the config file. */
-#define ISAKMP_FRAG_OFF		FLASE   /* = 0 */
-#define ISAKMP_FRAG_ON		TRUE    /* = 1 */
-#define ISAKMP_FRAG_FORCE	2
-
-/* IKE fragmentation capabilities */
-#define VENDORID_FRAG_IDENT 	0x80000000
-#define VENDORID_FRAG_BASE 	0x40000000
-#define VENDORID_FRAG_AGG 	0x80000000
-
-#define ISAKMP_FRAG_MAXLEN 552
-
-struct isakmp_frag_item {
-	int	frag_num;
-	int	frag_last;
-	struct isakmp_frag_item *frag_next;
-	vchar_t *frag_packet;
-};
-
-int isakmp_sendfrags(struct ph1handle *, vchar_t *);
-unsigned int vendorid_frag_cap(struct isakmp_gen *);
-int isakmp_frag_extract(struct ph1handle *, vchar_t *);
-vchar_t *isakmp_frag_reassembly(struct ph1handle *);
-vchar_t *isakmp_frag_addcap(vchar_t *, int);
diff --git a/src/racoon/isakmp_ident.c b/src/racoon/isakmp_ident.c
deleted file mode 100644
index c3f71b3..0000000
--- a/src/racoon/isakmp_ident.c
+++ /dev/null
@@ -1,1911 +0,0 @@
-/*	$NetBSD: isakmp_ident.c,v 1.6 2006/10/02 21:41:59 manu Exp $	*/
-
-/* Id: isakmp_ident.c,v 1.21 2006/04/06 16:46:08 manubsd Exp */
-
-/*
- * 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.
- */
-
-/* Identity Protecion Exchange (Main Mode) */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "schedule.h"
-#include "debug.h"
-
-#include "localconf.h"
-#include "remoteconf.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "evt.h"
-#include "oakley.h"
-#include "handler.h"
-#include "ipsec_doi.h"
-#include "crypto_openssl.h"
-#include "pfkey.h"
-#include "isakmp_ident.h"
-#include "isakmp_inf.h"
-#include "vendorid.h"
-
-#ifdef ENABLE_NATT
-#include "nattraversal.h"
-#endif
-#ifdef HAVE_GSSAPI
-#include "gssapi.h"
-#endif
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h"
-#endif
-#ifdef ENABLE_FRAG 
-#include "isakmp_frag.h"
-#endif
-
-static vchar_t *ident_ir2mx __P((struct ph1handle *));
-static vchar_t *ident_ir3mx __P((struct ph1handle *));
-
-/* %%%
- * begin Identity Protection Mode as initiator.
- */
-/*
- * send to responder
- * 	psk: HDR, SA
- * 	sig: HDR, SA
- * 	rsa: HDR, SA
- * 	rev: HDR, SA
- */
-int
-ident_i1send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg; /* must be null */
-{
-	struct payload_list *plist = NULL;
-	int error = -1;
-#ifdef ENABLE_NATT
-	vchar_t *vid_natt[MAX_NATT_VID_COUNT] = { NULL };
-	int i;
-#endif
-#ifdef ENABLE_HYBRID  
-	vchar_t *vid_xauth = NULL;
-	vchar_t *vid_unity = NULL;
-#endif
-#ifdef ENABLE_FRAG 
-	vchar_t *vid_frag = NULL;
-#endif 
-#ifdef ENABLE_DPD
-	vchar_t *vid_dpd = NULL;
-#endif
-	/* validity check */
-	if (msg != NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"msg has to be NULL in this function.\n");
-		goto end;
-	}
-	if (iph1->status != PHASE1ST_START) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* create isakmp index */
-	memset(&iph1->index, 0, sizeof(iph1->index));
-	isakmp_newcookie((caddr_t)&iph1->index, iph1->remote, iph1->local);
-
-	/* create SA payload for my proposal */
-	iph1->sa = ipsecdoi_setph1proposal(iph1->rmconf->proposal);
-	if (iph1->sa == NULL)
-		goto end;
-
-	/* set SA payload to propose */
-	plist = isakmp_plist_append(plist, iph1->sa, ISAKMP_NPTYPE_SA);
-
-#ifdef ENABLE_NATT
-	/* set VID payload for NAT-T if NAT-T support allowed in the config file */
-	if (iph1->rmconf->nat_traversal) 
-		plist = isakmp_plist_append_natt_vids(plist, vid_natt);
-#endif
-#ifdef ENABLE_HYBRID
-	/* Do we need Xauth VID? */
-	switch (RMAUTHMETHOD(iph1)) {
-	case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-		if ((vid_xauth = set_vendorid(VENDORID_XAUTH)) == NULL)
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "Xauth vendor ID generation failed\n");
-		else
-			plist = isakmp_plist_append(plist,
-			    vid_xauth, ISAKMP_NPTYPE_VID);
-			
-		if ((vid_unity = set_vendorid(VENDORID_UNITY)) == NULL)
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "Unity vendor ID generation failed\n");
-		else
-                	plist = isakmp_plist_append(plist,
-			    vid_unity, ISAKMP_NPTYPE_VID);
-		break;
-	default:
-		break;
-	}
-#endif
-#ifdef ENABLE_FRAG
-	if (iph1->rmconf->ike_frag) {
-		if ((vid_frag = set_vendorid(VENDORID_FRAG)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Frag vendorID construction failed\n");
-		} else {
-			vid_frag = isakmp_frag_addcap(vid_frag,
-			    VENDORID_FRAG_IDENT);
-			plist = isakmp_plist_append(plist, 
-			    vid_frag, ISAKMP_NPTYPE_VID);
-		}
-	}
-#endif
-#ifdef ENABLE_DPD
-	if(iph1->rmconf->dpd){
-		vid_dpd = set_vendorid(VENDORID_DPD);
-		if (vid_dpd != NULL)
-			plist = isakmp_plist_append(plist, vid_dpd,
-			    ISAKMP_NPTYPE_VID);
-	}
-#endif
-
-	iph1->sendbuf = isakmp_plist_set_all (&plist, iph1);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 0);
-#endif
-
-	/* send the packet, add to the schedule to resend */
-	iph1->retry_counter = iph1->rmconf->retry_counter;
-	if (isakmp_ph1resend(iph1) == -1)
-		goto end;
-
-	iph1->status = PHASE1ST_MSG1SENT;
-
-	error = 0;
-
-end:
-#ifdef ENABLE_FRAG
-	if (vid_frag) 
-		vfree(vid_frag);
-#endif  
-#ifdef ENABLE_NATT
-	for (i = 0; i < MAX_NATT_VID_COUNT && vid_natt[i] != NULL; i++)
-		vfree(vid_natt[i]);
-#endif
-#ifdef ENABLE_HYBRID
-	if (vid_xauth != NULL)
-		vfree(vid_xauth);
-	if (vid_unity != NULL)
-		vfree(vid_unity);
-#endif
-#ifdef ENABLE_DPD
-	if (vid_dpd != NULL)
-		vfree(vid_dpd);
-#endif
-
-	return error;
-}
-
-/*
- * receive from responder
- * 	psk: HDR, SA
- * 	sig: HDR, SA
- * 	rsa: HDR, SA
- * 	rev: HDR, SA
- */
-int
-ident_i2recv(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	vchar_t *satmp = NULL;
-	int error = -1;
-	int vid_numeric;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG1SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* validate the type of next payload */
-	/*
-	 * NOTE: RedCreek(as responder) attaches N[responder-lifetime] here,
-	 *	if proposal-lifetime > lifetime-redcreek-wants.
-	 *	(see doi-08 4.5.4)
-	 *	=> According to the seciton 4.6.3 in RFC 2407, This is illegal.
-	 * NOTE: we do not really care about ordering of VID and N.
-	 *	does it matters?
-	 * NOTE: even if there's multiple VID/N, we'll ignore them.
-	 */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-	pa = (struct isakmp_parse_t *)pbuf->v;
-
-	/* SA payload is fixed postion */
-	if (pa->type != ISAKMP_NPTYPE_SA) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"received invalid next payload type %d, "
-			"expecting %d.\n",
-			pa->type, ISAKMP_NPTYPE_SA);
-		goto end;
-	}
-	if (isakmp_p2ph(&satmp, pa->ptr) < 0)
-		goto end;
-	pa++;
-
-	for (/*nothing*/;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1))
-		plog(LLV_INFO, LOCATION, iph1->remote,
-		     "Selected NAT-T version: %s\n",
-		     vid_string_by_id(iph1->natt_options->version));
-#endif
-
-	/* check SA payload and set approval SA for use */
-	if (ipsecdoi_checkph1proposal(satmp, iph1) < 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"failed to get valid proposal.\n");
-		/* XXX send information */
-		goto end;
-	}
-	VPTRINIT(iph1->sa_ret);
-
-	iph1->status = PHASE1ST_MSG2RECEIVED;
-
-	error = 0;
-
-end:
-	if (pbuf)
-		vfree(pbuf);
-	if (satmp)
-		vfree(satmp);
-	return error;
-}
-
-/*
- * send to responder
- * 	psk: HDR, KE, Ni
- * 	sig: HDR, KE, Ni
- *   gssapi: HDR, KE, Ni, GSSi
- * 	rsa: HDR, KE, [ HASH(1), ] <IDi1_b>PubKey_r, <Ni_b>PubKey_r
- * 	rev: HDR, [ HASH(1), ] <Ni_b>Pubkey_r, <KE_b>Ke_i,
- * 	          <IDi1_b>Ke_i, [<<Cert-I_b>Ke_i]
- */
-int
-ident_i2send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	int error = -1;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG2RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* fix isakmp index */
-	memcpy(&iph1->index.r_ck, &((struct isakmp *)msg->v)->r_ck,
-		sizeof(cookie_t));
-
-	/* generate DH public value */
-	if (oakley_dh_generate(iph1->approval->dhgrp,
-				&iph1->dhpub, &iph1->dhpriv) < 0)
-		goto end;
-
-	/* generate NONCE value */
-	iph1->nonce = eay_set_random(iph1->rmconf->nonce_size);
-	if (iph1->nonce == NULL)
-		goto end;
-
-#ifdef HAVE_GSSAPI
-	if (AUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB &&
-	    gssapi_get_itoken(iph1, NULL) < 0)
-		goto end;
-#endif
-
-	/* create buffer to send isakmp payload */
-	iph1->sendbuf = ident_ir2mx(iph1);
-	if (iph1->sendbuf == NULL)
-		goto end;
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 0);
-#endif
-
-	/* send the packet, add to the schedule to resend */
-	iph1->retry_counter = iph1->rmconf->retry_counter;
-	if (isakmp_ph1resend(iph1) == -1)
-		goto end;
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph1->remote, iph1->local, iph1->sendbuf, msg) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_MSG2SENT;
-
-	error = 0;
-
-end:
-	return error;
-}
-
-/*
- * receive from responder
- * 	psk: HDR, KE, Nr
- * 	sig: HDR, KE, Nr [, CR ]
- *   gssapi: HDR, KE, Nr, GSSr
- * 	rsa: HDR, KE, <IDr1_b>PubKey_i, <Nr_b>PubKey_i
- * 	rev: HDR, <Nr_b>PubKey_i, <KE_b>Ke_r, <IDr1_b>Ke_r,
- */
-int
-ident_i3recv(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	int error = -1;
-#ifdef HAVE_GSSAPI
-	vchar_t *gsstoken = NULL;
-#endif
-#ifdef ENABLE_NATT
-	vchar_t	*natd_received;
-	int natd_seq = 0, natd_verified;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG2SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_KE:
-			if (isakmp_p2ph(&iph1->dhpub_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_NONCE:
-			if (isakmp_p2ph(&iph1->nonce_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-		case ISAKMP_NPTYPE_CR:
-			if (oakley_savecr(iph1, pa->ptr) < 0)
-				goto end;
-			break;
-#ifdef HAVE_GSSAPI
-		case ISAKMP_NPTYPE_GSS:
-			if (isakmp_p2ph(&gsstoken, pa->ptr) < 0)
-				goto end;
-			gssapi_save_received_token(iph1, gsstoken);
-			break;
-#endif
-
-#ifdef ENABLE_NATT
-		case ISAKMP_NPTYPE_NATD_DRAFT:
-		case ISAKMP_NPTYPE_NATD_RFC:
-			if (NATT_AVAILABLE(iph1) && iph1->natt_options != NULL &&
-			    pa->type == iph1->natt_options->payload_nat_d) {
-				natd_received = NULL;
-				if (isakmp_p2ph (&natd_received, pa->ptr) < 0)
-					goto end;
-                        
-				/* set both bits first so that we can clear them
-				   upon verifying hashes */
-				if (natd_seq == 0)
-					iph1->natt_flags |= NAT_DETECTED;
-                        
-				/* this function will clear appropriate bits bits 
-				   from iph1->natt_flags */
-				natd_verified = natt_compare_addr_hash (iph1,
-					natd_received, natd_seq++);
-                        
-				plog (LLV_INFO, LOCATION, NULL, "NAT-D payload #%d %s\n",
-					natd_seq - 1,
-					natd_verified ? "verified" : "doesn't match");
-                        
-				vfree (natd_received);
-				break;
-			}
-			/* passthrough to default... */
-#endif
-
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1)) {
-		plog (LLV_INFO, LOCATION, NULL, "NAT %s %s%s\n",
-		      iph1->natt_flags & NAT_DETECTED ? 
-		      		"detected:" : "not detected",
-		      iph1->natt_flags & NAT_DETECTED_ME ? "ME " : "",
-		      iph1->natt_flags & NAT_DETECTED_PEER ? "PEER" : "");
-		if (iph1->natt_flags & NAT_DETECTED)
-			natt_float_ports (iph1);
-	}
-#endif
-
-	/* payload existency check */
-	if (iph1->dhpub_p == NULL || iph1->nonce_p == NULL) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"few isakmp message received.\n");
-		goto end;
-	}
-
-	if (oakley_checkcr(iph1) < 0) {
-		/* Ignore this error in order to be interoperability. */
-		;
-	}
-
-	iph1->status = PHASE1ST_MSG3RECEIVED;
-
-	error = 0;
-
-end:
-#ifdef HAVE_GSSAPI
-	if (gsstoken)
-		vfree(gsstoken);
-#endif
-	if (pbuf)
-		vfree(pbuf);
-	if (error) {
-		VPTRINIT(iph1->dhpub_p);
-		VPTRINIT(iph1->nonce_p);
-		VPTRINIT(iph1->id_p);
-		oakley_delcert(iph1->cr_p);
-		iph1->cr_p = NULL;
-	}
-
-	return error;
-}
-
-/*
- * send to responder
- * 	psk: HDR*, IDi1, HASH_I
- * 	sig: HDR*, IDi1, [ CR, ] [ CERT, ] SIG_I
- *   gssapi: HDR*, IDi1, < Gssi(n) | HASH_I >
- * 	rsa: HDR*, HASH_I
- * 	rev: HDR*, HASH_I
- */
-int
-ident_i3send(iph1, msg0)
-	struct ph1handle *iph1;
-	vchar_t *msg0;
-{
-	int error = -1;
-	int dohash = 1;
-#ifdef HAVE_GSSAPI
-	int len;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG3RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* compute sharing secret of DH */
-	if (oakley_dh_compute(iph1->approval->dhgrp, iph1->dhpub,
-				iph1->dhpriv, iph1->dhpub_p, &iph1->dhgxy) < 0)
-		goto end;
-
-	/* generate SKEYIDs & IV & final cipher key */
-	if (oakley_skeyid(iph1) < 0)
-		goto end;
-	if (oakley_skeyid_dae(iph1) < 0)
-		goto end;
-	if (oakley_compute_enckey(iph1) < 0)
-		goto end;
-	if (oakley_newiv(iph1) < 0)
-		goto end;
-
-	/* make ID payload into isakmp status */
-	if (ipsecdoi_setid1(iph1) < 0)
-		goto end;
-
-#ifdef HAVE_GSSAPI
-	if (AUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB &&
-	    gssapi_more_tokens(iph1)) {
-		plog(LLV_DEBUG, LOCATION, NULL, "calling get_itoken\n");
-		if (gssapi_get_itoken(iph1, &len) < 0)
-			goto end;
-		if (len != 0)
-			dohash = 0;
-	}
-#endif
-
-	/* generate HASH to send */
-	if (dohash) {
-		iph1->hash = oakley_ph1hash_common(iph1, GENERATE);
-		if (iph1->hash == NULL)
-			goto end;
-	} else
-		iph1->hash = NULL;
-
-	/* set encryption flag */
-	iph1->flags |= ISAKMP_FLAG_E;
-
-	/* create HDR;ID;HASH payload */
-	iph1->sendbuf = ident_ir3mx(iph1);
-	if (iph1->sendbuf == NULL)
-		goto end;
-
-	/* send the packet, add to the schedule to resend */
-	iph1->retry_counter = iph1->rmconf->retry_counter;
-	if (isakmp_ph1resend(iph1) == -1)
-		goto end;
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph1->remote, iph1->local, iph1->sendbuf, msg0) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	/* see handler.h about IV synchronization. */
-	memcpy(iph1->ivm->ive->v, iph1->ivm->iv->v, iph1->ivm->iv->l);
-
-	iph1->status = PHASE1ST_MSG3SENT;
-
-	error = 0;
-
-end:
-	return error;
-}
-
-/*
- * receive from responder
- * 	psk: HDR*, IDr1, HASH_R
- * 	sig: HDR*, IDr1, [ CERT, ] SIG_R
- *   gssapi: HDR*, IDr1, < GSSr(n) | HASH_R >
- * 	rsa: HDR*, HASH_R
- * 	rev: HDR*, HASH_R
- */
-int
-ident_i4recv(iph1, msg0)
-	struct ph1handle *iph1;
-	vchar_t *msg0;
-{
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	vchar_t *msg = NULL;
-	int error = -1;
-	int type;
-#ifdef HAVE_GSSAPI
-	vchar_t *gsstoken = NULL;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG3SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* decrypting */
-	if (!ISSET(((struct isakmp *)msg0->v)->flags, ISAKMP_FLAG_E)) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"ignore the packet, "
-			"expecting the packet encrypted.\n");
-		goto end;
-	}
-	msg = oakley_do_decrypt(iph1, msg0, iph1->ivm->iv, iph1->ivm->ive);
-	if (msg == NULL)
-		goto end;
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-
-	iph1->pl_hash = NULL;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_ID:
-			if (isakmp_p2ph(&iph1->id_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_HASH:
-			iph1->pl_hash = (struct isakmp_pl_hash *)pa->ptr;
-			break;
-		case ISAKMP_NPTYPE_CERT:
-			if (oakley_savecert(iph1, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_SIG:
-			if (isakmp_p2ph(&iph1->sig_p, pa->ptr) < 0)
-				goto end;
-			break;
-#ifdef HAVE_GSSAPI
-		case ISAKMP_NPTYPE_GSS:
-			if (isakmp_p2ph(&gsstoken, pa->ptr) < 0)
-				goto end;
-			gssapi_save_received_token(iph1, gsstoken);
-			break;
-#endif
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-		case ISAKMP_NPTYPE_N:
-			isakmp_check_notify(pa->ptr, iph1);
-			break;
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-	/* payload existency check */
-
-	/* verify identifier */
-	if (ipsecdoi_checkid1(iph1) != 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"invalid ID payload.\n");
-		goto end;
-	}
-
-	/* validate authentication value */
-#ifdef HAVE_GSSAPI
-	if (gsstoken == NULL) {
-#endif
-		type = oakley_validate_auth(iph1);
-		if (type != 0) {
-			if (type == -1) {
-				/* msg printed inner oakley_validate_auth() */
-				goto end;
-			}
-			EVT_PUSH(iph1->local, iph1->remote, 
-			    EVTT_PEERPH1AUTH_FAILED, NULL);
-			isakmp_info_send_n1(iph1, type, NULL);
-			goto end;
-		}
-#ifdef HAVE_GSSAPI
-	}
-#endif
-
-	/*
-	 * XXX: Should we do compare two addresses, ph1handle's and ID
-	 * payload's.
-	 */
-
-	plog(LLV_DEBUG, LOCATION, iph1->remote, "peer's ID:");
-	plogdump(LLV_DEBUG, iph1->id_p->v, iph1->id_p->l);
-
-	/* see handler.h about IV synchronization. */
-	memcpy(iph1->ivm->iv->v, iph1->ivm->ive->v, iph1->ivm->ive->l);
-
-	/*
-	 * If we got a GSS token, we need to this roundtrip again.
-	 */
-#ifdef HAVE_GSSAPI
-	iph1->status = gsstoken != 0 ? PHASE1ST_MSG3RECEIVED : 
-	    PHASE1ST_MSG4RECEIVED;
-#else
-	iph1->status = PHASE1ST_MSG4RECEIVED;
-#endif
-
-	error = 0;
-
-end:
-	if (pbuf)
-		vfree(pbuf);
-	if (msg)
-		vfree(msg);
-#ifdef HAVE_GSSAPI
-	if (gsstoken)
-		vfree(gsstoken);
-#endif
-
-	if (error) {
-		VPTRINIT(iph1->id_p);
-		oakley_delcert(iph1->cert_p);
-		iph1->cert_p = NULL;
-		oakley_delcert(iph1->crl_p);
-		iph1->crl_p = NULL;
-		VPTRINIT(iph1->sig_p);
-	}
-
-	return error;
-}
-
-/*
- * status update and establish isakmp sa.
- */
-int
-ident_i4send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	int error = -1;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG4RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* see handler.h about IV synchronization. */
-	memcpy(iph1->ivm->iv->v, iph1->ivm->ive->v, iph1->ivm->iv->l);
-
-	iph1->status = PHASE1ST_ESTABLISHED;
-
-	error = 0;
-
-end:
-	return error;
-}
-
-/*
- * receive from initiator
- * 	psk: HDR, SA
- * 	sig: HDR, SA
- * 	rsa: HDR, SA
- * 	rev: HDR, SA
- */
-int
-ident_r1recv(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	int error = -1;
-	int vid_numeric;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_START) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* validate the type of next payload */
-	/*
-	 * NOTE: XXX even if multiple VID, we'll silently ignore those.
-	 */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-	pa = (struct isakmp_parse_t *)pbuf->v;
-
-	/* check the position of SA payload */
-	if (pa->type != ISAKMP_NPTYPE_SA) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"received invalid next payload type %d, "
-			"expecting %d.\n",
-			pa->type, ISAKMP_NPTYPE_SA);
-		goto end;
-	}
-	if (isakmp_p2ph(&iph1->sa, pa->ptr) < 0)
-		goto end;
-	pa++;
-
-	for (/*nothing*/;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_VID:
-			vid_numeric = handle_vendorid(iph1, pa->ptr);
-#ifdef ENABLE_FRAG
-			if ((vid_numeric == VENDORID_FRAG) &&
-			    (vendorid_frag_cap(pa->ptr) & VENDORID_FRAG_IDENT))
-				iph1->frag = 1;
-#endif   
-			break;
-		default:
-			/*
-			 * We don't send information to the peer even
-			 * if we received malformed packet.  Because we
-			 * can't distinguish the malformed packet and
-			 * the re-sent packet.  And we do same behavior
-			 * when we expect encrypted packet.
-			 */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1))
-		plog(LLV_INFO, LOCATION, iph1->remote,
-		     "Selected NAT-T version: %s\n",
-		     vid_string_by_id(iph1->natt_options->version));
-#endif
-
-	/* check SA payload and set approval SA for use */
-	if (ipsecdoi_checkph1proposal(iph1->sa, iph1) < 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"failed to get valid proposal.\n");
-		/* XXX send information */
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_MSG1RECEIVED;
-
-	error = 0;
-
-end:
-	if (pbuf)
-		vfree(pbuf);
-	if (error) {
-		VPTRINIT(iph1->sa);
-	}
-
-	return error;
-}
-
-/*
- * send to initiator
- * 	psk: HDR, SA
- * 	sig: HDR, SA
- * 	rsa: HDR, SA
- * 	rev: HDR, SA
- */
-int
-ident_r1send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	struct payload_list *plist = NULL;
-	int error = -1;
-	vchar_t *gss_sa = NULL;
-#ifdef HAVE_GSSAPI
-	int free_gss_sa = 0;
-#endif
-#ifdef ENABLE_NATT
-	vchar_t *vid_natt = NULL;
-#endif
-#ifdef ENABLE_HYBRID
-        vchar_t *vid_xauth = NULL;
-        vchar_t *vid_unity = NULL;
-#endif  
-#ifdef ENABLE_DPD
-	vchar_t *vid_dpd = NULL;
-#endif
-#ifdef ENABLE_FRAG          
-	vchar_t *vid_frag = NULL;
-#endif 
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG1RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* set responder's cookie */
-	isakmp_newcookie((caddr_t)&iph1->index.r_ck, iph1->remote, iph1->local);
-
-#ifdef HAVE_GSSAPI
-	if (iph1->approval->gssid != NULL) {
-		gss_sa = ipsecdoi_setph1proposal(iph1->approval);
-		if (gss_sa != iph1->sa_ret)
-			free_gss_sa = 1;
-	} else 
-#endif
-		gss_sa = iph1->sa_ret;
-
-	/* set SA payload to reply */
-	plist = isakmp_plist_append(plist, gss_sa, ISAKMP_NPTYPE_SA);
-
-#ifdef ENABLE_HYBRID
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_XAUTH) {
-		plog (LLV_INFO, LOCATION, NULL, "Adding xauth VID payload.\n");
-		if ((vid_xauth = set_vendorid(VENDORID_XAUTH)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Cannot create Xauth vendor ID\n");
-			goto end;
-		}
-		plist = isakmp_plist_append(plist,
-		    vid_xauth, ISAKMP_NPTYPE_VID);
-	}
-
-	if (iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_UNITY) {
-		if ((vid_unity = set_vendorid(VENDORID_UNITY)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Cannot create Unity vendor ID\n");
-			goto end;
-		}
-		plist = isakmp_plist_append(plist,
-		    vid_unity, ISAKMP_NPTYPE_VID);
-	}
-#endif
-#ifdef ENABLE_NATT
-	/* Has the peer announced NAT-T? */
-	if (NATT_AVAILABLE(iph1))
-		vid_natt = set_vendorid(iph1->natt_options->version);
-
-	if (vid_natt)
-		plist = isakmp_plist_append(plist, vid_natt, ISAKMP_NPTYPE_VID);
-#endif
-#ifdef ENABLE_DPD
-	/* XXX only send DPD VID if remote sent it ? */
-	if(iph1->rmconf->dpd){
-		vid_dpd = set_vendorid(VENDORID_DPD);
-		if (vid_dpd != NULL)
-			plist = isakmp_plist_append(plist, vid_dpd, ISAKMP_NPTYPE_VID);
-	}
-#endif
-#ifdef ENABLE_FRAG
-	if (iph1->frag) {
-		vid_frag = set_vendorid(VENDORID_FRAG);
-		if (vid_frag != NULL)
-			vid_frag = isakmp_frag_addcap(vid_frag,
-			    VENDORID_FRAG_IDENT);
-		if (vid_frag == NULL)
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Frag vendorID construction failed\n");
-		else
-			plist = isakmp_plist_append(plist, 
-			     vid_frag, ISAKMP_NPTYPE_VID);
-	}
-#endif
-
-	iph1->sendbuf = isakmp_plist_set_all (&plist, iph1);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 0);
-#endif
-
-	/* send the packet, add to the schedule to resend */
-	iph1->retry_counter = iph1->rmconf->retry_counter;
-	if (isakmp_ph1resend(iph1) == -1) {
-		goto end;
-	}
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph1->remote, iph1->local, iph1->sendbuf, msg) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_MSG1SENT;
-
-	error = 0;
-
-end:
-#ifdef HAVE_GSSAPI
-	if (free_gss_sa)
-		vfree(gss_sa);
-#endif
-#ifdef ENABLE_NATT
-	if (vid_natt)
-		vfree(vid_natt);
-#endif
-#ifdef ENABLE_HYBRID
-	if (vid_xauth != NULL)
-		vfree(vid_xauth);
-	if (vid_unity != NULL)
-		vfree(vid_unity);
-#endif
-#ifdef ENABLE_DPD
-	if (vid_dpd != NULL)
-		vfree(vid_dpd);
-#endif
-#ifdef ENABLE_FRAG
-	if (vid_frag != NULL)
-		vfree(vid_frag);
-#endif
-
-	return error;
-}
-
-/*
- * receive from initiator
- * 	psk: HDR, KE, Ni
- * 	sig: HDR, KE, Ni
- *   gssapi: HDR, KE, Ni, GSSi
- * 	rsa: HDR, KE, [ HASH(1), ] <IDi1_b>PubKey_r, <Ni_b>PubKey_r
- * 	rev: HDR, [ HASH(1), ] <Ni_b>Pubkey_r, <KE_b>Ke_i,
- * 	          <IDi1_b>Ke_i, [<<Cert-I_b>Ke_i]
- */
-int
-ident_r2recv(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	int error = -1;
-#ifdef HAVE_GSSAPI
-	vchar_t *gsstoken = NULL;
-#endif
-#ifdef ENABLE_NATT
-	int natd_seq = 0;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG1SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_KE:
-			if (isakmp_p2ph(&iph1->dhpub_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_NONCE:
-			if (isakmp_p2ph(&iph1->nonce_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-		case ISAKMP_NPTYPE_CR:
-			plog(LLV_WARNING, LOCATION, iph1->remote,
-				"CR received, ignore it. "
-				"It should be in other exchange.\n");
-			break;
-#ifdef HAVE_GSSAPI
-		case ISAKMP_NPTYPE_GSS:
-			if (isakmp_p2ph(&gsstoken, pa->ptr) < 0)
-				goto end;
-			gssapi_save_received_token(iph1, gsstoken);
-			break;
-#endif
-
-#ifdef ENABLE_NATT
-		case ISAKMP_NPTYPE_NATD_DRAFT:
-		case ISAKMP_NPTYPE_NATD_RFC:
-			if (NATT_AVAILABLE(iph1) && iph1->natt_options != NULL &&
-				pa->type == iph1->natt_options->payload_nat_d)
-			{
-				vchar_t *natd_received = NULL;
-				int natd_verified;
-				
-				if (isakmp_p2ph (&natd_received, pa->ptr) < 0)
-					goto end;
-				
-				if (natd_seq == 0)
-					iph1->natt_flags |= NAT_DETECTED;
-				
-				natd_verified = natt_compare_addr_hash (iph1,
-					natd_received, natd_seq++);
-				
-				plog (LLV_INFO, LOCATION, NULL, "NAT-D payload #%d %s\n",
-					natd_seq - 1,
-					natd_verified ? "verified" : "doesn't match");
-				
-				vfree (natd_received);
-				break;
-			}
-			/* passthrough to default... */
-#endif
-
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-#ifdef ENABLE_NATT
-	if (NATT_AVAILABLE(iph1))
-		plog (LLV_INFO, LOCATION, NULL, "NAT %s %s%s\n",
-		      iph1->natt_flags & NAT_DETECTED ? 
-		      		"detected:" : "not detected",
-		      iph1->natt_flags & NAT_DETECTED_ME ? "ME " : "",
-		      iph1->natt_flags & NAT_DETECTED_PEER ? "PEER" : "");
-#endif
-
-	/* payload existency check */
-	if (iph1->dhpub_p == NULL || iph1->nonce_p == NULL) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"few isakmp message received.\n");
-		goto end;
-	}
-
-	iph1->status = PHASE1ST_MSG2RECEIVED;
-
-	error = 0;
-
-end:
-	if (pbuf)
-		vfree(pbuf);
-#ifdef HAVE_GSSAPI
-	if (gsstoken)
-		vfree(gsstoken);
-#endif
-
-	if (error) {
-		VPTRINIT(iph1->dhpub_p);
-		VPTRINIT(iph1->nonce_p);
-		VPTRINIT(iph1->id_p);
-	}
-
-	return error;
-}
-
-/*
- * send to initiator
- * 	psk: HDR, KE, Nr
- * 	sig: HDR, KE, Nr [, CR ]
- *   gssapi: HDR, KE, Nr, GSSr
- * 	rsa: HDR, KE, <IDr1_b>PubKey_i, <Nr_b>PubKey_i
- * 	rev: HDR, <Nr_b>PubKey_i, <KE_b>Ke_r, <IDr1_b>Ke_r,
- */
-int
-ident_r2send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	int error = -1;
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG2RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* generate DH public value */
-	if (oakley_dh_generate(iph1->approval->dhgrp,
-				&iph1->dhpub, &iph1->dhpriv) < 0)
-		goto end;
-
-	/* generate NONCE value */
-	iph1->nonce = eay_set_random(iph1->rmconf->nonce_size);
-	if (iph1->nonce == NULL)
-		goto end;
-
-#ifdef HAVE_GSSAPI
-	if (AUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB)
-		gssapi_get_rtoken(iph1, NULL);
-#endif
-
-	/* create HDR;KE;NONCE payload */
-	iph1->sendbuf = ident_ir2mx(iph1);
-	if (iph1->sendbuf == NULL)
-		goto end;
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph1->sendbuf, iph1->local, iph1->remote, 0);
-#endif
-
-	/* send the packet, add to the schedule to resend */
-	iph1->retry_counter = iph1->rmconf->retry_counter;
-	if (isakmp_ph1resend(iph1) == -1)
-		goto end;
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph1->remote, iph1->local, iph1->sendbuf, msg) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	/* compute sharing secret of DH */
-	if (oakley_dh_compute(iph1->approval->dhgrp, iph1->dhpub,
-				iph1->dhpriv, iph1->dhpub_p, &iph1->dhgxy) < 0)
-		goto end;
-
-	/* generate SKEYIDs & IV & final cipher key */
-	if (oakley_skeyid(iph1) < 0)
-		goto end;
-	if (oakley_skeyid_dae(iph1) < 0)
-		goto end;
-	if (oakley_compute_enckey(iph1) < 0)
-		goto end;
-	if (oakley_newiv(iph1) < 0)
-		goto end;
-
-	iph1->status = PHASE1ST_MSG2SENT;
-
-	error = 0;
-
-end:
-	return error;
-}
-
-/*
- * receive from initiator
- * 	psk: HDR*, IDi1, HASH_I
- * 	sig: HDR*, IDi1, [ CR, ] [ CERT, ] SIG_I
- *   gssapi: HDR*, [ IDi1, ] < GSSi(n) | HASH_I >
- * 	rsa: HDR*, HASH_I
- * 	rev: HDR*, HASH_I
- */
-int
-ident_r3recv(iph1, msg0)
-	struct ph1handle *iph1;
-	vchar_t *msg0;
-{
-	vchar_t *msg = NULL;
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-	int error = -1;
-	int type;
-#ifdef HAVE_GSSAPI
-	vchar_t *gsstoken = NULL;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG2SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* decrypting */
-	if (!ISSET(((struct isakmp *)msg0->v)->flags, ISAKMP_FLAG_E)) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"reject the packet, "
-			"expecting the packet encrypted.\n");
-		goto end;
-	}
-	msg = oakley_do_decrypt(iph1, msg0, iph1->ivm->iv, iph1->ivm->ive);
-	if (msg == NULL)
-		goto end;
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-
-	iph1->pl_hash = NULL;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_ID:
-			if (isakmp_p2ph(&iph1->id_p, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_HASH:
-			iph1->pl_hash = (struct isakmp_pl_hash *)pa->ptr;
-			break;
-		case ISAKMP_NPTYPE_CR:
-			if (oakley_savecr(iph1, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_CERT:
-			if (oakley_savecert(iph1, pa->ptr) < 0)
-				goto end;
-			break;
-		case ISAKMP_NPTYPE_SIG:
-			if (isakmp_p2ph(&iph1->sig_p, pa->ptr) < 0)
-				goto end;
-			break;
-#ifdef HAVE_GSSAPI
-		case ISAKMP_NPTYPE_GSS:
-			if (isakmp_p2ph(&gsstoken, pa->ptr) < 0)
-				goto end;
-			gssapi_save_received_token(iph1, gsstoken);
-			break;
-#endif
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-		case ISAKMP_NPTYPE_N:
-			isakmp_check_notify(pa->ptr, iph1);
-			break;
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-	/* payload existency check */
-	/* XXX same as ident_i4recv(), should be merged. */
-    {
-	int ng = 0;
-
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-#endif
-		if (iph1->id_p == NULL || iph1->pl_hash == NULL)
-			ng++;
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-#endif
-		if (iph1->id_p == NULL || iph1->sig_p == NULL)
-			ng++;
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-#endif
-		if (iph1->pl_hash == NULL)
-			ng++;
-		break;
-#ifdef HAVE_GSSAPI
-	case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-		if (gsstoken == NULL && iph1->pl_hash == NULL)
-			ng++;
-		break;
-#endif
-	default:
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"invalid authmethod %d why ?\n",
-			iph1->approval->authmethod);
-		goto end;
-	}
-	if (ng) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"few isakmp message received.\n");
-		goto end;
-	}
-    }
-
-	/* verify identifier */
-	if (ipsecdoi_checkid1(iph1) != 0) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"invalid ID payload.\n");
-		goto end;
-	}
-
-	/* validate authentication value */
-#ifdef HAVE_GSSAPI
-	if (gsstoken == NULL) {
-#endif
-		type = oakley_validate_auth(iph1);
-		if (type != 0) {
-			if (type == -1) {
-				/* msg printed inner oakley_validate_auth() */
-				goto end;
-			}
-			EVT_PUSH(iph1->local, iph1->remote, 
-			    EVTT_PEERPH1AUTH_FAILED, NULL);
-			isakmp_info_send_n1(iph1, type, NULL);
-			goto end;
-		}
-#ifdef HAVE_GSSAPI
-	}
-#endif
-
-	if (oakley_checkcr(iph1) < 0) {
-		/* Ignore this error in order to be interoperability. */
-		;
-	}
-
-	/*
-	 * XXX: Should we do compare two addresses, ph1handle's and ID
-	 * payload's.
-	 */
-
-	plog(LLV_DEBUG, LOCATION, iph1->remote, "peer's ID\n");
-	plogdump(LLV_DEBUG, iph1->id_p->v, iph1->id_p->l);
-
-	/* see handler.h about IV synchronization. */
-	memcpy(iph1->ivm->iv->v, iph1->ivm->ive->v, iph1->ivm->ive->l);
-
-#ifdef HAVE_GSSAPI
-	iph1->status = gsstoken != NULL ? PHASE1ST_MSG2RECEIVED :
-	    PHASE1ST_MSG3RECEIVED;
-#else
-	iph1->status = PHASE1ST_MSG3RECEIVED;
-#endif
-
-	error = 0;
-
-end:
-	if (pbuf)
-		vfree(pbuf);
-	if (msg)
-		vfree(msg);
-#ifdef HAVE_GSSAPI
-	if (gsstoken)
-		vfree(gsstoken);
-#endif
-
-	if (error) {
-		VPTRINIT(iph1->id_p);
-		oakley_delcert(iph1->cert_p);
-		iph1->cert_p = NULL;
-		oakley_delcert(iph1->crl_p);
-		iph1->crl_p = NULL;
-		VPTRINIT(iph1->sig_p);
-		oakley_delcert(iph1->cr_p);
-		iph1->cr_p = NULL;
-	}
-
-	return error;
-}
-
-/*
- * send to initiator
- * 	psk: HDR*, IDr1, HASH_R
- * 	sig: HDR*, IDr1, [ CERT, ] SIG_R
- *   gssapi: HDR*, IDr1, < GSSr(n) | HASH_R >
- * 	rsa: HDR*, HASH_R
- * 	rev: HDR*, HASH_R
- */
-int
-ident_r3send(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-	int error = -1;
-	int dohash = 1;
-#ifdef HAVE_GSSAPI
-	int len;
-#endif
-
-	/* validity check */
-	if (iph1->status != PHASE1ST_MSG3RECEIVED) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph1->status);
-		goto end;
-	}
-
-	/* make ID payload into isakmp status */
-	if (ipsecdoi_setid1(iph1) < 0)
-		goto end;
-
-#ifdef HAVE_GSSAPI
-	if (AUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB &&
-	    gssapi_more_tokens(iph1)) {
-		gssapi_get_rtoken(iph1, &len);
-		if (len != 0)
-			dohash = 0;
-	}
-#endif
-
-	if (dohash) {
-		/* generate HASH to send */
-		plog(LLV_DEBUG, LOCATION, NULL, "generate HASH_R\n");
-		iph1->hash = oakley_ph1hash_common(iph1, GENERATE);
-		if (iph1->hash == NULL)
-			goto end;
-	} else
-		iph1->hash = NULL;
-
-	/* set encryption flag */
-	iph1->flags |= ISAKMP_FLAG_E;
-
-	/* create HDR;ID;HASH payload */
-	iph1->sendbuf = ident_ir3mx(iph1);
-	if (iph1->sendbuf == NULL)
-		goto end;
-
-	/* send HDR;ID;HASH to responder */
-	if (isakmp_send(iph1, iph1->sendbuf) < 0)
-		goto end;
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph1->remote, iph1->local, iph1->sendbuf, msg) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	/* see handler.h about IV synchronization. */
-	memcpy(iph1->ivm->ive->v, iph1->ivm->iv->v, iph1->ivm->iv->l);
-
-	iph1->status = PHASE1ST_ESTABLISHED;
-
-	error = 0;
-
-end:
-
-	return error;
-}
-
-/*
- * This is used in main mode for:
- * initiator's 3rd exchange send to responder
- * 	psk: HDR, KE, Ni
- * 	sig: HDR, KE, Ni
- * 	rsa: HDR, KE, [ HASH(1), ] <IDi1_b>PubKey_r, <Ni_b>PubKey_r
- * 	rev: HDR, [ HASH(1), ] <Ni_b>Pubkey_r, <KE_b>Ke_i,
- * 	          <IDi1_b>Ke_i, [<<Cert-I_b>Ke_i]
- * responders 2nd exchnage send to initiator
- * 	psk: HDR, KE, Nr
- * 	sig: HDR, KE, Nr [, CR ]
- * 	rsa: HDR, KE, <IDr1_b>PubKey_i, <Nr_b>PubKey_i
- * 	rev: HDR, <Nr_b>PubKey_i, <KE_b>Ke_r, <IDr1_b>Ke_r,
- */
-static vchar_t *
-ident_ir2mx(iph1)
-	struct ph1handle *iph1;
-{
-	vchar_t *buf = 0;
-	struct payload_list *plist = NULL;
-	int need_cr = 0;
-	vchar_t *cr = NULL;
-	vchar_t *vid = NULL;
-	int error = -1;
-#ifdef HAVE_GSSAPI
-	vchar_t *gsstoken = NULL;
-#endif
-#ifdef ENABLE_NATT
-	vchar_t *natd[2] = { NULL, NULL };
-#endif
-
-	/* create CR if need */
-	if (iph1->side == RESPONDER
-	 && iph1->rmconf->send_cr
-	 && oakley_needcr(iph1->approval->authmethod)
-	 && iph1->rmconf->peerscertfile == NULL) {
-		need_cr = 1;
-		cr = oakley_getcr(iph1);
-		if (cr == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get cr buffer.\n");
-			goto end;
-		}
-	}
-
-#ifdef HAVE_GSSAPI
-	if (AUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB)
-		gssapi_get_token_to_send(iph1, &gsstoken);
-#endif
-
-	/* create isakmp KE payload */
-	plist = isakmp_plist_append(plist, iph1->dhpub, ISAKMP_NPTYPE_KE);
-
-	/* create isakmp NONCE payload */
-	plist = isakmp_plist_append(plist, iph1->nonce, ISAKMP_NPTYPE_NONCE);
-
-#ifdef HAVE_GSSAPI
-	if (AUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB)
-		plist = isakmp_plist_append(plist, gsstoken, ISAKMP_NPTYPE_GSS);
-#endif
-
-	/* append vendor id, if needed */
-	if (vid)
-		plist = isakmp_plist_append(plist, vid, ISAKMP_NPTYPE_VID);
-
-	/* create isakmp CR payload if needed */
-	if (need_cr)
-		plist = isakmp_plist_append(plist, cr, ISAKMP_NPTYPE_CR);
-
-#ifdef ENABLE_NATT
-	/* generate and append NAT-D payloads */
-	if (NATT_AVAILABLE(iph1) && iph1->status == PHASE1ST_MSG2RECEIVED)
-	{
-		if ((natd[0] = natt_hash_addr (iph1, iph1->remote)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"NAT-D hashing failed for %s\n", saddr2str(iph1->remote));
-			goto end;
-		}
-
-		if ((natd[1] = natt_hash_addr (iph1, iph1->local)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"NAT-D hashing failed for %s\n", saddr2str(iph1->local));
-			goto end;
-		}
-
-		plog (LLV_INFO, LOCATION, NULL, "Adding remote and local NAT-D payloads.\n");
-		plist = isakmp_plist_append(plist, natd[0], iph1->natt_options->payload_nat_d);
-		plist = isakmp_plist_append(plist, natd[1], iph1->natt_options->payload_nat_d);
-	}
-#endif
-	
-	buf = isakmp_plist_set_all (&plist, iph1);
-	
-	error = 0;
-
-end:
-	if (error && buf != NULL) {
-		vfree(buf);
-		buf = NULL;
-	}
-	if (cr)
-		vfree(cr);
-#ifdef HAVE_GSSAPI
-	if (gsstoken)
-		vfree(gsstoken);
-#endif
-	if (vid)
-		vfree(vid);
-
-#ifdef ENABLE_NATT
-	if (natd[0])
-		vfree(natd[0]);
-	if (natd[1])
-		vfree(natd[1]);
-#endif
-
-	return buf;
-}
-
-/*
- * This is used in main mode for:
- * initiator's 4th exchange send to responder
- * 	psk: HDR*, IDi1, HASH_I
- * 	sig: HDR*, IDi1, [ CR, ] [ CERT, ] SIG_I
- *   gssapi: HDR*, [ IDi1, ] < GSSi(n) | HASH_I >
- * 	rsa: HDR*, HASH_I
- * 	rev: HDR*, HASH_I
- * responders 3rd exchnage send to initiator
- * 	psk: HDR*, IDr1, HASH_R
- * 	sig: HDR*, IDr1, [ CERT, ] SIG_R
- *   gssapi: HDR*, [ IDr1, ] < GSSr(n) | HASH_R >
- * 	rsa: HDR*, HASH_R
- * 	rev: HDR*, HASH_R
- */
-static vchar_t *
-ident_ir3mx(iph1)
-	struct ph1handle *iph1;
-{
-	struct payload_list *plist = NULL;
-	vchar_t *buf = NULL, *new = NULL;
-	int need_cr = 0;
-	int need_cert = 0;
-	vchar_t *cr = NULL;
-	int error = -1;
-#ifdef HAVE_GSSAPI
-	int nptype;
-	vchar_t *gsstoken = NULL;
-	vchar_t *gsshash = NULL;
-#endif
-
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-#ifdef ENABLE_HYBRID
-	case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-#endif
-		/* create isakmp ID payload */
-		plist = isakmp_plist_append(plist, iph1->id, ISAKMP_NPTYPE_ID);
-
-		/* create isakmp HASH payload */
-		plist = isakmp_plist_append(plist, iph1->hash, ISAKMP_NPTYPE_HASH);
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-#endif 
-		if (oakley_getmycert(iph1) < 0)
-			goto end;
-
-		if (oakley_getsign(iph1) < 0)
-			goto end;
-
-		/* create CR if need */
-		if (iph1->side == INITIATOR
-		 && iph1->rmconf->send_cr
-	 	 && oakley_needcr(iph1->approval->authmethod)
-		 && iph1->rmconf->peerscertfile == NULL) {
-			need_cr = 1;
-			cr = oakley_getcr(iph1);
-			if (cr == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to get cr buffer.\n");
-				goto end;
-			}
-		}
-
-		if (iph1->cert != NULL && iph1->rmconf->send_cert)
-			need_cert = 1;
-
-		/* add ID payload */
-		plist = isakmp_plist_append(plist, iph1->id, ISAKMP_NPTYPE_ID);
-
-		/* add CERT payload if there */
-		if (need_cert)
-			plist = isakmp_plist_append(plist, iph1->cert->pl, ISAKMP_NPTYPE_CERT);
-		/* add SIG payload */
-		plist = isakmp_plist_append(plist, iph1->sig, ISAKMP_NPTYPE_SIG);
-
-		/* create isakmp CR payload */
-		if (need_cr)
-			plist = isakmp_plist_append(plist, cr, ISAKMP_NPTYPE_CR);
-		break;
-#ifdef HAVE_GSSAPI
-	case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-		if (iph1->hash != NULL) {
-			gsshash = gssapi_wraphash(iph1);
-			if (gsshash == NULL)
-				goto end;
-		} else {
-			gssapi_get_token_to_send(iph1, &gsstoken);
-		}
-
-		if (!gssapi_id_sent(iph1)) {
-			/* create isakmp ID payload */
-			plist = isakmp_plist_append(plist, iph1->id, ISAKMP_NPTYPE_ID);
-			gssapi_set_id_sent(iph1);
-		}
-
-		if (iph1->hash != NULL)
-			/* create isakmp HASH payload */
-			plist = isakmp_plist_append(plist, gsshash, ISAKMP_NPTYPE_HASH);
-		else
-			plist = isakmp_plist_append(plist, gsstoken, ISAKMP_NPTYPE_GSS);
-		break;
-#endif
-	case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-#endif
-		plog(LLV_ERROR, LOCATION, NULL,
-			"not supported authentication type %d\n",
-			iph1->approval->authmethod);
-		goto end;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid authentication type %d\n",
-			iph1->approval->authmethod);
-		goto end;
-	}
-
-	buf = isakmp_plist_set_all (&plist, iph1);
-	
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(buf, iph1->local, iph1->remote, 1);
-#endif
-
-	/* encoding */
-	new = oakley_do_encrypt(iph1, buf, iph1->ivm->ive, iph1->ivm->iv);
-	if (new == NULL)
-		goto end;
-
-	vfree(buf);
-
-	buf = new;
-
-	error = 0;
-
-end:
-#ifdef HAVE_GSSAPI
-	if (gsstoken)
-		vfree(gsstoken);
-#endif
-	if (cr)
-		vfree(cr);
-	if (error && buf != NULL) {
-		vfree(buf);
-		buf = NULL;
-	}
-
-	return buf;
-}
diff --git a/src/racoon/isakmp_ident.h b/src/racoon/isakmp_ident.h
deleted file mode 100644
index ea5595d..0000000
--- a/src/racoon/isakmp_ident.h
+++ /dev/null
@@ -1,52 +0,0 @@
-/*	$NetBSD: isakmp_ident.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: isakmp_ident.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ISAKMP_IDENT_H
-#define _ISAKMP_IDENT_H
-
-extern int ident_i1send __P((struct ph1handle *, vchar_t *));
-extern int ident_i2recv __P((struct ph1handle *, vchar_t *));
-extern int ident_i2send __P((struct ph1handle *, vchar_t *));
-extern int ident_i3recv __P((struct ph1handle *, vchar_t *));
-extern int ident_i3send __P((struct ph1handle *, vchar_t *));
-extern int ident_i4recv __P((struct ph1handle *, vchar_t *));
-extern int ident_i4send __P((struct ph1handle *, vchar_t *));
-
-extern int ident_r1recv __P((struct ph1handle *, vchar_t *));
-extern int ident_r1send __P((struct ph1handle *, vchar_t *));
-extern int ident_r2recv __P((struct ph1handle *, vchar_t *));
-extern int ident_r2send __P((struct ph1handle *, vchar_t *));
-extern int ident_r3recv __P((struct ph1handle *, vchar_t *));
-extern int ident_r3send __P((struct ph1handle *, vchar_t *));
-
-#endif /* _ISAKMP_IDENT_H */
diff --git a/src/racoon/isakmp_inf.c b/src/racoon/isakmp_inf.c
deleted file mode 100644
index 5f487d2..0000000
--- a/src/racoon/isakmp_inf.c
+++ /dev/null
@@ -1,1714 +0,0 @@
-/*	$NetBSD: isakmp_inf.c,v 1.14.4.17 2009/05/18 17:07:46 tteras Exp $	*/
-
-/* Id: isakmp_inf.c,v 1.44 2006/05/06 20:45:52 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <net/pfkeyv2.h>
-#include <netinet/in.h>
-#include <sys/queue.h>
-#include PATH_IPSEC_H
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#endif
-
-#include "libpfkey.h"
-
-#include "var.h"
-#include "vmbuf.h"
-#include "schedule.h"
-#include "str2val.h"
-#include "misc.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "localconf.h"
-#include "remoteconf.h"
-#include "sockmisc.h"
-#include "handler.h"
-#include "policy.h"
-#include "proposal.h"
-#include "isakmp_var.h"
-#include "evt.h"
-#include "isakmp.h"
-#ifdef ENABLE_HYBRID
-#include "isakmp_xauth.h"
-#include "isakmp_unity.h"
-#include "isakmp_cfg.h" 
-#endif
-#include "isakmp_inf.h"
-#include "oakley.h"
-#include "ipsec_doi.h"
-#include "crypto_openssl.h"
-#include "pfkey.h"
-#include "policy.h"
-#include "algorithm.h"
-#include "proposal.h"
-#include "admin.h"
-#include "strnames.h"
-#ifdef ENABLE_NATT
-#include "nattraversal.h"
-#endif
-
-/* information exchange */
-static int isakmp_info_recv_n (struct ph1handle *, struct isakmp_pl_n *, u_int32_t, int);
-static int isakmp_info_recv_d (struct ph1handle *, struct isakmp_pl_d *, u_int32_t, int);
-
-#ifdef ENABLE_DPD
-static int isakmp_info_recv_r_u __P((struct ph1handle *,
-	struct isakmp_pl_ru *, u_int32_t));
-static int isakmp_info_recv_r_u_ack __P((struct ph1handle *,
-	struct isakmp_pl_ru *, u_int32_t));
-static void isakmp_info_send_r_u __P((void *));
-#endif
-
-static void purge_isakmp_spi __P((int, isakmp_index *, size_t));
-static void info_recv_initialcontact __P((struct ph1handle *));
-
-/* %%%
- * Information Exchange
- */
-/*
- * receive Information
- */
-int
-isakmp_info_recv(iph1, msg0)
-	struct ph1handle *iph1;
-	vchar_t *msg0;
-{
-	vchar_t *msg = NULL;
-	vchar_t *pbuf = NULL;
-	u_int32_t msgid = 0;
-	int error = -1;
-	struct isakmp *isakmp;
-	struct isakmp_gen *gen;
-	struct isakmp_parse_t *pa, *pap;
-	void *p;
-	vchar_t *hash, *payload;
-	struct isakmp_gen *nd;
-	u_int8_t np;
-	int encrypted;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "receive Information.\n");
-
-	encrypted = ISSET(((struct isakmp *)msg0->v)->flags, ISAKMP_FLAG_E);
-	msgid = ((struct isakmp *)msg0->v)->msgid;
-
-	/* Use new IV to decrypt Informational message. */
-	if (encrypted) {
-		struct isakmp_ivm *ivm;
-
-		if (iph1->ivm == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, "iph1->ivm == NULL\n");
-			return -1;
-		}
-
-		/* compute IV */
-		ivm = oakley_newiv2(iph1, ((struct isakmp *)msg0->v)->msgid);
-		if (ivm == NULL)
-			return -1;
-
-		msg = oakley_do_decrypt(iph1, msg0, ivm->iv, ivm->ive);
-		oakley_delivm(ivm);
-		if (msg == NULL)
-			return -1;
-
-	} else
-		msg = vdup(msg0);
-
-	/* Safety check */
-	if (msg->l < sizeof(*isakmp) + sizeof(*gen)) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-			"ignore information because the "
-			"message is way too short - %zu byte(s).\n", msg->l);
-		goto end;
-	}
-
-	isakmp = (struct isakmp *)msg->v;
-	gen = (struct isakmp_gen *)((caddr_t)isakmp + sizeof(struct isakmp));
-	np = gen->np;
-
-	if (encrypted) {
-		if (isakmp->np != ISAKMP_NPTYPE_HASH) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "ignore information because the"
-			    "message has no hash payload.\n");
-			goto end;
-		}
-
-		if (iph1->status != PHASE1ST_ESTABLISHED) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "ignore information because ISAKMP-SA"
-			    "has not been established yet.\n");
-			goto end;
-		}
-		
-		/* Safety check */
-		if (msg->l < sizeof(*isakmp) + ntohs(gen->len) + sizeof(*nd)) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-				"ignore information because the "
-				"message is too short - %zu byte(s).\n", msg->l);
-			goto end;
-		}
-
-		p = (caddr_t) gen + sizeof(struct isakmp_gen);
-		nd = (struct isakmp_gen *) ((caddr_t) gen + ntohs(gen->len));
-
-		/* nd length check */
-		if (ntohs(nd->len) > msg->l - (sizeof(struct isakmp) +
-		    ntohs(gen->len))) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				 "too long payload length (broken message?)\n");
-			goto end;
-		}
-
-		if (ntohs(nd->len) < sizeof(*nd)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"too short payload length (broken message?)\n");
-			goto end;
-		}
-
-		payload = vmalloc(ntohs(nd->len));
-		if (payload == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "cannot allocate memory\n");
-			goto end;
-		}
-
-		memcpy(payload->v, (caddr_t) nd, ntohs(nd->len));
-
-		/* compute HASH */
-		hash = oakley_compute_hash1(iph1, isakmp->msgid, payload);
-		if (hash == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "cannot compute hash\n");
-
-			vfree(payload);
-			goto end;
-		}
-		
-		if (ntohs(gen->len) - sizeof(struct isakmp_gen) != hash->l) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "ignore information due to hash length mismatch\n");
-
-			vfree(hash);
-			vfree(payload);
-			goto end;
-		}
-
-		if (memcmp(p, hash->v, hash->l) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "ignore information due to hash mismatch\n");
-
-			vfree(hash);
-			vfree(payload);
-			goto end;
-		}
-
-		plog(LLV_DEBUG, LOCATION, NULL, "hash validated.\n");
-
-		vfree(hash);
-		vfree(payload);
-	} else {
-		/* make sure the packet was encrypted after the beginning of phase 1. */
-		switch (iph1->etype) {
-		case ISAKMP_ETYPE_AGG:
-		case ISAKMP_ETYPE_BASE:
-		case ISAKMP_ETYPE_IDENT:
-			if ((iph1->side == INITIATOR && iph1->status < PHASE1ST_MSG3SENT)
-			 || (iph1->side == RESPONDER && iph1->status < PHASE1ST_MSG2SENT)) {
-				break;
-			}
-			/*FALLTHRU*/
-		default:
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"%s message must be encrypted\n",
-				s_isakmp_nptype(np));
-			error = 0;
-			goto end;
-		}
-	}
-
-	if (!(pbuf = isakmp_parse(msg))) {
-		error = -1;
-		goto end;
-	}
-
-	error = 0;
-	for (pa = (struct isakmp_parse_t *)pbuf->v; pa->type; pa++) {
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_HASH:
-			/* Handled above */
-			break;
-		case ISAKMP_NPTYPE_N:
-			error = isakmp_info_recv_n(iph1,
-				(struct isakmp_pl_n *)pa->ptr,
-				msgid, encrypted);
-			break;
-		case ISAKMP_NPTYPE_D:
-			error = isakmp_info_recv_d(iph1,
-				(struct isakmp_pl_d *)pa->ptr,
-				msgid, encrypted);
-			break;
-		case ISAKMP_NPTYPE_NONCE:
-			/* XXX to be 6.4.2 ike-01.txt */
-			/* XXX IV is to be synchronized. */
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore Acknowledged Informational\n");
-			break;
-		default:
-			/* don't send information, see isakmp_ident_r1() */
-			error = 0;
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"reject the packet, "
-				"received unexpected payload type %s.\n",
-				s_isakmp_nptype(gen->np));
-		}
-		if (error < 0)
-			break;
-	}
-    end:
-	if (msg != NULL)
-		vfree(msg);
-	if (pbuf != NULL)
-		vfree(pbuf);
-	return error;
-}
-
-/*
- * handling of Notification payload
- */
-static int
-isakmp_info_recv_n(iph1, notify, msgid, encrypted)
-	struct ph1handle *iph1;
-	struct isakmp_pl_n *notify;
-	u_int32_t msgid;
-	int encrypted;
-{
-	u_int type;
-	vchar_t *pbuf;
-	char *nraw, *ndata;
-	size_t l;
-	char *spi;
-
-	type = ntohs(notify->type);
-
-	switch (type) {
-	case ISAKMP_NTYPE_CONNECTED:
-	case ISAKMP_NTYPE_RESPONDER_LIFETIME:
-	case ISAKMP_NTYPE_REPLAY_STATUS:
-#ifdef ENABLE_HYBRID
-	case ISAKMP_NTYPE_UNITY_HEARTBEAT:
-#endif
-		/* do something */
-		break;
-	case ISAKMP_NTYPE_INITIAL_CONTACT:
-		if (encrypted)
-			info_recv_initialcontact(iph1);
-			return 0;
-		break;
-#ifdef ENABLE_DPD
-	case ISAKMP_NTYPE_R_U_THERE:
-		if (encrypted)
-			return isakmp_info_recv_r_u(iph1,
-				(struct isakmp_pl_ru *)notify, msgid);
-		break;
-	case ISAKMP_NTYPE_R_U_THERE_ACK:
-		if (encrypted)
-			return isakmp_info_recv_r_u_ack(iph1,
-				(struct isakmp_pl_ru *)notify, msgid);
-		break;
-#endif
-	default:
-	    {
-		/* XXX there is a potential of dos attack. */
-		if(type >= ISAKMP_NTYPE_MINERROR &&
-		   type <= ISAKMP_NTYPE_MAXERROR) {
-			if (msgid == 0) {
-				/* don't think this realy deletes ph1 ? */
-				plog(LLV_ERROR, LOCATION, iph1->remote,
-					"delete phase1 handle.\n");
-				return -1;
-			} else {
-				if (getph2bymsgid(iph1, msgid) == NULL) {
-					plog(LLV_ERROR, LOCATION, iph1->remote,
-						"fatal %s notify messsage, "
-						"phase1 should be deleted.\n",
-						s_isakmp_notify_msg(type));
-				} else {
-					plog(LLV_ERROR, LOCATION, iph1->remote,
-						"fatal %s notify messsage, "
-						"phase2 should be deleted.\n",
-						s_isakmp_notify_msg(type));
-				}
-			}
-		} else {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"unhandled notify message %s, "
-				"no phase2 handle found.\n",
-				s_isakmp_notify_msg(type));
-		}
-	    }
-	    break;
-	}
-
-	/* get spi if specified and allocate */
-	if(notify->spi_size > 0) {
-		if (ntohs(notify->h.len) < sizeof(*notify) + notify->spi_size) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"invalid spi_size in notification payload.\n");
-			return -1;
-		}
-		spi = val2str((char *)(notify + 1), notify->spi_size);
-
-		plog(LLV_DEBUG, LOCATION, iph1->remote,
-			"notification message %d:%s, "
-			"doi=%d proto_id=%d spi=%s(size=%d).\n",
-			type, s_isakmp_notify_msg(type),
-			ntohl(notify->doi), notify->proto_id, spi, notify->spi_size);
-
-		racoon_free(spi);
-	}
-
-	/* Send the message data to the logs */
-	if(type >= ISAKMP_NTYPE_MINERROR &&
-	   type <= ISAKMP_NTYPE_MAXERROR) {
-		l = ntohs(notify->h.len) - sizeof(*notify) - notify->spi_size;
-		if (l > 0) {
-			nraw = (char*)notify;	
-			nraw += sizeof(*notify) + notify->spi_size;
-			ndata = binsanitize(nraw, l);
-			if (ndata != NULL) {
-				plog(LLV_ERROR, LOCATION, iph1->remote,
-				    "Message: '%s'.\n", 
-				    ndata);
-				racoon_free(ndata);
-			} else {
-				plog(LLV_ERROR, LOCATION, iph1->remote,
-				    "Cannot allocate memory\n");
-			}
-		}
-	}
-	return 0;
-}
-
-/*
- * handling of Deletion payload
- */
-static int
-isakmp_info_recv_d(iph1, delete, msgid, encrypted)
-	struct ph1handle *iph1;
-	struct isakmp_pl_d *delete;
-	u_int32_t msgid;
-	int encrypted;
-{
-	int tlen, num_spi;
-	vchar_t *pbuf;
-	int protected = 0;
-	struct ph1handle *del_ph1;
-	struct ph2handle *iph2;
-	union {
-		u_int32_t spi32;
-		u_int16_t spi16[2];
-	} spi;
-
-	if (ntohl(delete->doi) != IPSEC_DOI) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"delete payload with invalid doi:%d.\n",
-			ntohl(delete->doi));
-#ifdef ENABLE_HYBRID
-		/*
-		 * At deconnexion time, Cisco VPN client does this
-		 * with a zero DOI. Don't give up in that situation.
-		 */
-		if (((iph1->mode_cfg->flags &
-		    ISAKMP_CFG_VENDORID_UNITY) == 0) || (delete->doi != 0))
-			return 0;
-#else
-		return 0;
-#endif
-	}
-
-	num_spi = ntohs(delete->num_spi);
-	tlen = ntohs(delete->h.len) - sizeof(struct isakmp_pl_d);
-
-	if (tlen != num_spi * delete->spi_size) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"deletion payload with invalid length.\n");
-		return 0;
-	}
-
-	plog(LLV_DEBUG, LOCATION, iph1->remote,
-		"delete payload for protocol %s\n",
-		s_ipsecdoi_proto(delete->proto_id));
-
-	if(!iph1->rmconf->weak_phase1_check && !encrypted) {
-		plog(LLV_WARNING, LOCATION, iph1->remote,
-			"Ignoring unencrypted delete payload "
-			"(check the weak_phase1_check option)\n");
-		return 0;
-	}
-
-	switch (delete->proto_id) {
-	case IPSECDOI_PROTO_ISAKMP:
-		if (delete->spi_size != sizeof(isakmp_index)) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"delete payload with strange spi "
-				"size %d(proto_id:%d)\n",
-				delete->spi_size, delete->proto_id);
-			return 0;
-		}
-
-		del_ph1=getph1byindex((isakmp_index *)(delete + 1));
-		if(del_ph1 != NULL){
-
-			EVT_PUSH(del_ph1->local, del_ph1->remote,
-			EVTT_PEERPH1_NOPROP, NULL);
-			if (del_ph1->scr)
-				SCHED_KILL(del_ph1->scr);
-
-			/*
-			 * Do not delete IPsec SAs when receiving an IKE delete notification.
-			 * Just delete the IKE SA.
-			 */
-			isakmp_ph1expire(del_ph1);
-		}
-		break;
-
-	case IPSECDOI_PROTO_IPSEC_AH:
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		if (delete->spi_size != sizeof(u_int32_t)) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"delete payload with strange spi "
-				"size %d(proto_id:%d)\n",
-				delete->spi_size, delete->proto_id);
-			return 0;
-		}
-		EVT_PUSH(iph1->local, iph1->remote, 
-		    EVTT_PEER_DELETE, NULL);
-		purge_ipsec_spi(iph1->remote, delete->proto_id,
-		    (u_int32_t *)(delete + 1), num_spi);
-		break;
-
-	case IPSECDOI_PROTO_IPCOMP:
-		/* need to handle both 16bit/32bit SPI */
-		memset(&spi, 0, sizeof(spi));
-		if (delete->spi_size == sizeof(spi.spi16[1])) {
-			memcpy(&spi.spi16[1], delete + 1,
-			    sizeof(spi.spi16[1]));
-		} else if (delete->spi_size == sizeof(spi.spi32))
-			memcpy(&spi.spi32, delete + 1, sizeof(spi.spi32));
-		else {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"delete payload with strange spi "
-				"size %d(proto_id:%d)\n",
-				delete->spi_size, delete->proto_id);
-			return 0;
-		}
-		purge_ipsec_spi(iph1->remote, delete->proto_id,
-		    &spi.spi32, num_spi);
-		break;
-
-	default:
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"deletion message received, "
-			"invalid proto_id: %d\n",
-			delete->proto_id);
-		return 0;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "purged SAs.\n");
-
-	return 0;
-}
-
-/*
- * send Delete payload (for ISAKMP SA) in Informational exchange.
- */
-int
-isakmp_info_send_d1(iph1)
-	struct ph1handle *iph1;
-{
-	struct isakmp_pl_d *d;
-	vchar_t *payload = NULL;
-	int tlen;
-	int error = 0;
-
-	if (iph1->status != PHASE2ST_ESTABLISHED)
-		return 0;
-
-	/* create delete payload */
-
-	/* send SPIs of inbound SAs. */
-	/* XXX should send outbound SAs's ? */
-	tlen = sizeof(*d) + sizeof(isakmp_index);
-	payload = vmalloc(tlen);
-	if (payload == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-			"failed to get buffer for payload.\n");
-		return errno;
-	}
-
-	d = (struct isakmp_pl_d *)payload->v;
-	d->h.np = ISAKMP_NPTYPE_NONE;
-	d->h.len = htons(tlen);
-	d->doi = htonl(IPSEC_DOI);
-	d->proto_id = IPSECDOI_PROTO_ISAKMP;
-	d->spi_size = sizeof(isakmp_index);
-	d->num_spi = htons(1);
-	memcpy(d + 1, &iph1->index, sizeof(isakmp_index));
-
-	error = isakmp_info_send_common(iph1, payload,
-					ISAKMP_NPTYPE_D, 0);
-	vfree(payload);
-
-	return error;
-}
-
-/*
- * send Delete payload (for IPsec SA) in Informational exchange, based on
- * pfkey msg.  It sends always single SPI.
- */
-int
-isakmp_info_send_d2(iph2)
-	struct ph2handle *iph2;
-{
-	struct ph1handle *iph1;
-	struct saproto *pr;
-	struct isakmp_pl_d *d;
-	vchar_t *payload = NULL;
-	int tlen;
-	int error = 0;
-	u_int8_t *spi;
-
-	if (iph2->status != PHASE2ST_ESTABLISHED)
-		return 0;
-
-	/*
-	 * don't send delete information if there is no phase 1 handler.
-	 * It's nonsensical to negotiate phase 1 to send the information.
-	 */
-	iph1 = getph1byaddr(iph2->src, iph2->dst, 0);
-	if (iph1 == NULL){
-		plog(LLV_DEBUG2, LOCATION, NULL,
-			 "No ph1 handler found, could not send DELETE_SA\n");
-		return 0;
-	}
-
-	/* create delete payload */
-	for (pr = iph2->approval->head; pr != NULL; pr = pr->next) {
-
-		/* send SPIs of inbound SAs. */
-		/*
-		 * XXX should I send outbound SAs's ?
-		 * I send inbound SAs's SPI only at the moment because I can't
-		 * decode any more if peer send encoded packet without aware of
-		 * deletion of SA.  Outbound SAs don't come under the situation.
-		 */
-		tlen = sizeof(*d) + pr->spisize;
-		payload = vmalloc(tlen);
-		if (payload == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-				"failed to get buffer for payload.\n");
-			return errno;
-		}
-
-		d = (struct isakmp_pl_d *)payload->v;
-		d->h.np = ISAKMP_NPTYPE_NONE;
-		d->h.len = htons(tlen);
-		d->doi = htonl(IPSEC_DOI);
-		d->proto_id = pr->proto_id;
-		d->spi_size = pr->spisize;
-		d->num_spi = htons(1);
-		/*
-		 * XXX SPI bits are left-filled, for use with IPComp.
-		 * we should be switching to variable-length spi field...
-		 */
-		spi = (u_int8_t *)&pr->spi;
-		spi += sizeof(pr->spi);
-		spi -= pr->spisize;
-		memcpy(d + 1, spi, pr->spisize);
-
-		error = isakmp_info_send_common(iph1, payload,
-						ISAKMP_NPTYPE_D, 0);
-		vfree(payload);
-	}
-
-	return error;
-}
-
-/*
- * send Notification payload (for without ISAKMP SA) in Informational exchange
- */
-int
-isakmp_info_send_nx(isakmp, remote, local, type, data)
-	struct isakmp *isakmp;
-	struct sockaddr *remote, *local;
-	int type;
-	vchar_t *data;
-{
-	struct ph1handle *iph1 = NULL;
-	struct remoteconf *rmconf;
-	vchar_t *payload = NULL;
-	int tlen;
-	int error = -1;
-	struct isakmp_pl_n *n;
-	int spisiz = 0;		/* see below */
-
-	/* search appropreate configuration */
-	rmconf = getrmconf(remote);
-	if (rmconf == NULL) {
-		plog(LLV_ERROR, LOCATION, remote,
-			"no configuration found for peer address.\n");
-		goto end;
-	}
-
-	/* add new entry to isakmp status table. */
-	iph1 = newph1();
-	if (iph1 == NULL)
-		return -1;
-
-	memcpy(&iph1->index.i_ck, &isakmp->i_ck, sizeof(cookie_t));
-	isakmp_newcookie((char *)&iph1->index.r_ck, remote, local);
-	iph1->status = PHASE1ST_START;
-	iph1->rmconf = rmconf;
-	iph1->side = INITIATOR;
-	iph1->version = isakmp->v;
-	iph1->flags = 0;
-	iph1->msgid = 0;	/* XXX */
-#ifdef ENABLE_HYBRID
-	if ((iph1->mode_cfg = isakmp_cfg_mkstate()) == NULL)
-		goto end;
-#endif
-#ifdef ENABLE_FRAG
-	iph1->frag = 0;
-	iph1->frag_chain = NULL;
-#endif
-
-	/* copy remote address */
-	if (copy_ph1addresses(iph1, rmconf, remote, local) < 0)
-		goto end;
-
-	tlen = sizeof(*n) + spisiz;
-	if (data)
-		tlen += data->l;
-	payload = vmalloc(tlen);
-	if (payload == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		goto end;
-	}
-
-	n = (struct isakmp_pl_n *)payload->v;
-	n->h.np = ISAKMP_NPTYPE_NONE;
-	n->h.len = htons(tlen);
-	n->doi = htonl(IPSEC_DOI);
-	n->proto_id = IPSECDOI_KEY_IKE;
-	n->spi_size = spisiz;
-	n->type = htons(type);
-	if (spisiz)
-		memset(n + 1, 0, spisiz);	/* XXX spisiz is always 0 */
-	if (data)
-		memcpy((caddr_t)(n + 1) + spisiz, data->v, data->l);
-
-	error = isakmp_info_send_common(iph1, payload, ISAKMP_NPTYPE_N, 0);
-	vfree(payload);
-
-    end:
-	if (iph1 != NULL)
-		delph1(iph1);
-
-	return error;
-}
-
-/*
- * send Notification payload (for ISAKMP SA) in Informational exchange
- */
-int
-isakmp_info_send_n1(iph1, type, data)
-	struct ph1handle *iph1;
-	int type;
-	vchar_t *data;
-{
-	vchar_t *payload = NULL;
-	int tlen;
-	int error = 0;
-	struct isakmp_pl_n *n;
-	int spisiz;
-
-	/*
-	 * note on SPI size: which description is correct?  I have chosen
-	 * this to be 0.
-	 *
-	 * RFC2408 3.1, 2nd paragraph says: ISAKMP SA is identified by
-	 * Initiator/Responder cookie and SPI has no meaning, SPI size = 0.
-	 * RFC2408 3.1, first paragraph on page 40: ISAKMP SA is identified
-	 * by cookie and SPI has no meaning, 0 <= SPI size <= 16.
-	 * RFC2407 4.6.3.3, INITIAL-CONTACT is required to set to 16.
-	 */
-	if (type == ISAKMP_NTYPE_INITIAL_CONTACT)
-		spisiz = sizeof(isakmp_index);
-	else
-		spisiz = 0;
-
-	tlen = sizeof(*n) + spisiz;
-	if (data)
-		tlen += data->l;
-	payload = vmalloc(tlen);
-	if (payload == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		return errno;
-	}
-
-	n = (struct isakmp_pl_n *)payload->v;
-	n->h.np = ISAKMP_NPTYPE_NONE;
-	n->h.len = htons(tlen);
-	n->doi = htonl(iph1->rmconf->doitype);
-	n->proto_id = IPSECDOI_PROTO_ISAKMP; /* XXX to be configurable ? */
-	n->spi_size = spisiz;
-	n->type = htons(type);
-	if (spisiz)
-		memcpy(n + 1, &iph1->index, sizeof(isakmp_index));
-	if (data)
-		memcpy((caddr_t)(n + 1) + spisiz, data->v, data->l);
-
-	error = isakmp_info_send_common(iph1, payload, ISAKMP_NPTYPE_N, iph1->flags);
-	vfree(payload);
-
-	return error;
-}
-
-/*
- * send Notification payload (for IPsec SA) in Informational exchange
- */
-int
-isakmp_info_send_n2(iph2, type, data)
-	struct ph2handle *iph2;
-	int type;
-	vchar_t *data;
-{
-	struct ph1handle *iph1 = iph2->ph1;
-	vchar_t *payload = NULL;
-	int tlen;
-	int error = 0;
-	struct isakmp_pl_n *n;
-	struct saproto *pr;
-
-	if (!iph2->approval)
-		return EINVAL;
-
-	pr = iph2->approval->head;
-
-	/* XXX must be get proper spi */
-	tlen = sizeof(*n) + pr->spisize;
-	if (data)
-		tlen += data->l;
-	payload = vmalloc(tlen);
-	if (payload == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		return errno;
-	}
-
-	n = (struct isakmp_pl_n *)payload->v;
-	n->h.np = ISAKMP_NPTYPE_NONE;
-	n->h.len = htons(tlen);
-	n->doi = htonl(IPSEC_DOI);		/* IPSEC DOI (1) */
-	n->proto_id = pr->proto_id;		/* IPSEC AH/ESP/whatever*/
-	n->spi_size = pr->spisize;
-	n->type = htons(type);
-	*(u_int32_t *)(n + 1) = pr->spi;
-	if (data)
-		memcpy((caddr_t)(n + 1) + pr->spisize, data->v, data->l);
-
-	iph2->flags |= ISAKMP_FLAG_E;	/* XXX Should we do FLAG_A ? */
-	error = isakmp_info_send_common(iph1, payload, ISAKMP_NPTYPE_N, iph2->flags);
-	vfree(payload);
-
-	return error;
-}
-
-/*
- * send Information
- * When ph1->skeyid_a == NULL, send message without encoding.
- */
-int
-isakmp_info_send_common(iph1, payload, np, flags)
-	struct ph1handle *iph1;
-	vchar_t *payload;
-	u_int32_t np;
-	int flags;
-{
-	struct ph2handle *iph2 = NULL;
-	vchar_t *hash = NULL;
-	struct isakmp *isakmp;
-	struct isakmp_gen *gen;
-	char *p;
-	int tlen;
-	int error = -1;
-
-	/* add new entry to isakmp status table */
-	iph2 = newph2();
-	if (iph2 == NULL)
-		goto end;
-
-	iph2->dst = dupsaddr(iph1->remote);
-	if (iph2->dst == NULL) {
-		delph2(iph2);
-		goto end;
-	}
-	iph2->src = dupsaddr(iph1->local);
-	if (iph2->src == NULL) {
-		delph2(iph2);
-		goto end;
-	}
-#if (!defined(ENABLE_NATT)) || (defined(BROKEN_NATT))
-	if (set_port(iph2->dst, 0) == NULL ||
-	    set_port(iph2->src, 0) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "invalid family: %d\n", iph1->remote->sa_family);
-		delph2(iph2);
-		goto end;
-	}
-#endif
-	iph2->ph1 = iph1;
-	iph2->side = INITIATOR;
-	iph2->status = PHASE2ST_START;
-	iph2->msgid = isakmp_newmsgid2(iph1);
-
-	/* get IV and HASH(1) if skeyid_a was generated. */
-	if (iph1->skeyid_a != NULL) {
-		iph2->ivm = oakley_newiv2(iph1, iph2->msgid);
-		if (iph2->ivm == NULL) {
-			delph2(iph2);
-			goto end;
-		}
-
-		/* generate HASH(1) */
-		hash = oakley_compute_hash1(iph2->ph1, iph2->msgid, payload);
-		if (hash == NULL) {
-			delph2(iph2);
-			goto end;
-		}
-
-		/* initialized total buffer length */
-		tlen = hash->l;
-		tlen += sizeof(*gen);
-	} else {
-		/* IKE-SA is not established */
-		hash = NULL;
-
-		/* initialized total buffer length */
-		tlen = 0;
-	}
-	if ((flags & ISAKMP_FLAG_A) == 0)
-		iph2->flags = (hash == NULL ? 0 : ISAKMP_FLAG_E);
-	else
-		iph2->flags = (hash == NULL ? 0 : ISAKMP_FLAG_A);
-
-	insph2(iph2);
-	bindph12(iph1, iph2);
-
-	tlen += sizeof(*isakmp) + payload->l;
-
-	/* create buffer for isakmp payload */
-	iph2->sendbuf = vmalloc(tlen);
-	if (iph2->sendbuf == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		goto err;
-	}
-
-	/* create isakmp header */
-	isakmp = (struct isakmp *)iph2->sendbuf->v;
-	memcpy(&isakmp->i_ck, &iph1->index.i_ck, sizeof(cookie_t));
-	memcpy(&isakmp->r_ck, &iph1->index.r_ck, sizeof(cookie_t));
-	isakmp->np = hash == NULL ? (np & 0xff) : ISAKMP_NPTYPE_HASH;
-	isakmp->v = iph1->version;
-	isakmp->etype = ISAKMP_ETYPE_INFO;
-	isakmp->flags = iph2->flags;
-	memcpy(&isakmp->msgid, &iph2->msgid, sizeof(isakmp->msgid));
-	isakmp->len   = htonl(tlen);
-	p = (char *)(isakmp + 1);
-
-	/* create HASH payload */
-	if (hash != NULL) {
-		gen = (struct isakmp_gen *)p;
-		gen->np = np & 0xff;
-		gen->len = htons(sizeof(*gen) + hash->l);
-		p += sizeof(*gen);
-		memcpy(p, hash->v, hash->l);
-		p += hash->l;
-	}
-
-	/* add payload */
-	memcpy(p, payload->v, payload->l);
-	p += payload->l;
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(iph2->sendbuf, iph1->local, iph1->remote, 1);
-#endif
-
-	/* encoding */
-	if (ISSET(isakmp->flags, ISAKMP_FLAG_E)) {
-		vchar_t *tmp;
-
-		tmp = oakley_do_encrypt(iph2->ph1, iph2->sendbuf, iph2->ivm->ive,
-				iph2->ivm->iv);
-		VPTRINIT(iph2->sendbuf);
-		if (tmp == NULL)
-			goto err;
-		iph2->sendbuf = tmp;
-	}
-
-	/* HDR*, HASH(1), N */
-	if (isakmp_send(iph2->ph1, iph2->sendbuf) < 0) {
-		VPTRINIT(iph2->sendbuf);
-		goto err;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"sendto Information %s.\n", s_isakmp_nptype(np));
-
-	/*
-	 * don't resend notify message because peer can use Acknowledged
-	 * Informational if peer requires the reply of the notify message.
-	 */
-
-	/* XXX If Acknowledged Informational required, don't delete ph2handle */
-	error = 0;
-	VPTRINIT(iph2->sendbuf);
-	goto err;	/* XXX */
-
-end:
-	if (hash)
-		vfree(hash);
-	return error;
-
-err:
-	unbindph12(iph2);
-	remph2(iph2);
-	delph2(iph2);
-	goto end;
-}
-
-/*
- * add a notify payload to buffer by reallocating buffer.
- * If buf == NULL, the function only create a notify payload.
- *
- * XXX Which is SPI to be included, inbound or outbound ?
- */
-vchar_t *
-isakmp_add_pl_n(buf0, np_p, type, pr, data)
-	vchar_t *buf0;
-	u_int8_t **np_p;
-	int type;
-	struct saproto *pr;
-	vchar_t *data;
-{
-	vchar_t *buf = NULL;
-	struct isakmp_pl_n *n;
-	int tlen;
-	int oldlen = 0;
-
-	if (*np_p)
-		**np_p = ISAKMP_NPTYPE_N;
-
-	tlen = sizeof(*n) + pr->spisize;
-
-	if (data)
-		tlen += data->l;
-	if (buf0) {
-		oldlen = buf0->l;
-		buf = vrealloc(buf0, buf0->l + tlen);
-	} else
-		buf = vmalloc(tlen);
-	if (!buf) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get a payload buffer.\n");
-		return NULL;
-	}
-
-	n = (struct isakmp_pl_n *)(buf->v + oldlen);
-	n->h.np = ISAKMP_NPTYPE_NONE;
-	n->h.len = htons(tlen);
-	n->doi = htonl(IPSEC_DOI);		/* IPSEC DOI (1) */
-	n->proto_id = pr->proto_id;		/* IPSEC AH/ESP/whatever*/
-	n->spi_size = pr->spisize;
-	n->type = htons(type);
-	*(u_int32_t *)(n + 1) = pr->spi;	/* XXX */
-	if (data)
-		memcpy((caddr_t)(n + 1) + pr->spisize, data->v, data->l);
-
-	/* save the pointer of next payload type */
-	*np_p = &n->h.np;
-
-	return buf;
-}
-
-static void
-purge_isakmp_spi(proto, spi, n)
-	int proto;
-	isakmp_index *spi;	/*network byteorder*/
-	size_t n;
-{
-	struct ph1handle *iph1;
-	size_t i;
-
-	for (i = 0; i < n; i++) {
-		iph1 = getph1byindex(&spi[i]);
-		if (!iph1)
-			continue;
-
-		plog(LLV_INFO, LOCATION, NULL,
-			"purged ISAKMP-SA proto_id=%s spi=%s.\n",
-			s_ipsecdoi_proto(proto),
-			isakmp_pindex(&spi[i], 0));
-
-		SCHED_KILL(iph1->sce);
-		iph1->status = PHASE1ST_EXPIRED;
-		iph1->sce = sched_new(1, isakmp_ph1delete_stub, iph1);
-	}
-}
-
-
-
-void
-purge_ipsec_spi(dst0, proto, spi, n)
-	struct sockaddr *dst0;
-	int proto;
-	u_int32_t *spi;	/*network byteorder*/
-	size_t n;
-{
-	vchar_t *buf = NULL;
-	struct sadb_msg *msg, *next, *end;
-	struct sadb_sa *sa;
-	struct sadb_lifetime *lt;
-	struct sockaddr *src, *dst;
-	struct ph2handle *iph2;
-	u_int64_t created;
-	size_t i;
-	caddr_t mhp[SADB_EXT_MAX + 1];
-#ifdef ENABLE_NATT
-	struct sadb_x_nat_t_type *natt_type;
-	struct sadb_x_nat_t_port *natt_port;
-#endif
-
-	plog(LLV_DEBUG2, LOCATION, NULL,
-		 "purge_ipsec_spi:\n");
-	plog(LLV_DEBUG2, LOCATION, NULL, "dst0: %s\n", saddr2str(dst0));
-	plog(LLV_DEBUG2, LOCATION, NULL, "SPI: %08X\n", ntohl(spi[0]));
-
-	buf = pfkey_dump_sadb(ipsecdoi2pfkey_proto(proto));
-	if (buf == NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"pfkey_dump_sadb returned nothing.\n");
-		return;
-	}
-
-	msg = (struct sadb_msg *)buf->v;
-	end = (struct sadb_msg *)(buf->v + buf->l);
-
-	while (msg < end) {
-		if ((msg->sadb_msg_len << 3) < sizeof(*msg))
-			break;
-		next = (struct sadb_msg *)((caddr_t)msg + (msg->sadb_msg_len << 3));
-		if (msg->sadb_msg_type != SADB_DUMP) {
-			msg = next;
-			continue;
-		}
-
-		if (pfkey_align(msg, mhp) || pfkey_check(mhp)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"pfkey_check (%s)\n", ipsec_strerror());
-			msg = next;
-			continue;
-		}
-
-		sa = (struct sadb_sa *)(mhp[SADB_EXT_SA]);
-		if (!sa
-		 || !mhp[SADB_EXT_ADDRESS_SRC]
-		 || !mhp[SADB_EXT_ADDRESS_DST]) {
-			msg = next;
-			continue;
-		}
-		src = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]);
-		dst = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_DST]);
-		lt = (struct sadb_lifetime*)mhp[SADB_EXT_LIFETIME_HARD];
-		if(lt != NULL)
-			created = lt->sadb_lifetime_addtime;
-		else
-			created = 0;
-
-		if (sa->sadb_sa_state != SADB_SASTATE_MATURE
-		 && sa->sadb_sa_state != SADB_SASTATE_DYING) {
-			msg = next;
-			continue;
-		}
-#ifdef ENABLE_NATT
-		natt_type = (void *)mhp[SADB_X_EXT_NAT_T_TYPE];
-		if (natt_type && natt_type->sadb_x_nat_t_type_type) {
-			/* NAT-T is enabled for this SADB entry; copy
-			 * the ports from NAT-T extensions */
-			natt_port = (void *)mhp[SADB_X_EXT_NAT_T_SPORT];
-			if (extract_port(src) == 0 && natt_port != NULL)
-				set_port(src, ntohs(natt_port->sadb_x_nat_t_port_port));
-
-			natt_port = (void *)mhp[SADB_X_EXT_NAT_T_DPORT];
-			if (extract_port(dst) == 0 && natt_port != NULL)
-				set_port(dst, ntohs(natt_port->sadb_x_nat_t_port_port));
-		}else{
-			/* Force default UDP ports, so CMPSADDR will match SAs with NO encapsulation
-			 */
-			set_port(src, PORT_ISAKMP);
-			set_port(dst, PORT_ISAKMP);
-		}
-#endif
-		plog(LLV_DEBUG2, LOCATION, NULL, "src: %s\n", saddr2str(src));
-		plog(LLV_DEBUG2, LOCATION, NULL, "dst: %s\n", saddr2str(dst));
-
-		/* XXX n^2 algorithm, inefficient */
-
-		/* don't delete inbound SAs at the moment */
-		/* XXX should we remove SAs with opposite direction as well? */
-		if (CMPSADDR(dst0, dst)) {
-			msg = next;
-			continue;
-		}
-
-#ifdef ENABLE_NATT
-		if (natt_type == NULL ||
-			! natt_type->sadb_x_nat_t_type_type) {
-			/* Set back port to 0 if it was forced to default UDP port
-			 */
-			set_port(src, 0);
-			set_port(dst, 0);
-		}
-#endif
-		for (i = 0; i < n; i++) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"check spi(packet)=%u spi(db)=%u.\n",
-				ntohl(spi[i]), ntohl(sa->sadb_sa_spi));
-			if (spi[i] != sa->sadb_sa_spi)
-				continue;
-
-			pfkey_send_delete(lcconf->sock_pfkey,
-				msg->sadb_msg_satype,
-				IPSEC_MODE_ANY,
-				src, dst, sa->sadb_sa_spi);
-
-			/*
-			 * delete a relative phase 2 handler.
-			 * continue to process if no relative phase 2 handler
-			 * exists.
-			 */
-			iph2 = getph2bysaidx(src, dst, proto, spi[i]);
-			if(iph2 != NULL){
-				delete_spd(iph2, created);
-				unbindph12(iph2);
-				remph2(iph2);
-				delph2(iph2);
-			}
-
-			plog(LLV_INFO, LOCATION, NULL,
-				"purged IPsec-SA proto_id=%s spi=%u.\n",
-				s_ipsecdoi_proto(proto),
-				ntohl(spi[i]));
-		}
-
-		msg = next;
-	}
-
-	if (buf)
-		vfree(buf);
-}
-
-/*
- * delete all phase2 sa relatived to the destination address.
- * Don't delete Phase 1 handlers on INITIAL-CONTACT, and don't ignore
- * an INITIAL-CONTACT if we have contacted the peer.  This matches the
- * Sun IKE behavior, and makes rekeying work much better when the peer
- * restarts.
- */
-static void
-info_recv_initialcontact(iph1)
-	struct ph1handle *iph1;
-{
-	vchar_t *buf = NULL;
-	struct sadb_msg *msg, *next, *end;
-	struct sadb_sa *sa;
-	struct sockaddr *src, *dst;
-	caddr_t mhp[SADB_EXT_MAX + 1];
-	int proto_id, i;
-	struct ph2handle *iph2;
-#if 0
-	char *loc, *rem;
-#endif
-
-	if (f_local)
-		return;
-
-#if 0
-	loc = racoon_strdup(saddrwop2str(iph1->local));
-	rem = racoon_strdup(saddrwop2str(iph1->remote));
-	STRDUP_FATAL(loc);
-	STRDUP_FATAL(rem);
-
-	/*
-	 * Purge all IPSEC-SAs for the peer.  We can do this
-	 * the easy way (using a PF_KEY SADB_DELETE extension)
-	 * or we can do it the hard way.
-	 */
-	for (i = 0; i < pfkey_nsatypes; i++) {
-		proto_id = pfkey2ipsecdoi_proto(pfkey_satypes[i].ps_satype);
-
-		plog(LLV_INFO, LOCATION, NULL,
-		    "purging %s SAs for %s -> %s\n",
-		    pfkey_satypes[i].ps_name, loc, rem);
-		if (pfkey_send_delete_all(lcconf->sock_pfkey,
-		    pfkey_satypes[i].ps_satype, IPSEC_MODE_ANY,
-		    iph1->local, iph1->remote) == -1) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "delete_all %s -> %s failed for %s (%s)\n",
-			    loc, rem,
-			    pfkey_satypes[i].ps_name, ipsec_strerror());
-			goto the_hard_way;
-		}
-
-		deleteallph2(iph1->local, iph1->remote, proto_id);
-
-		plog(LLV_INFO, LOCATION, NULL,
-		    "purging %s SAs for %s -> %s\n",
-		    pfkey_satypes[i].ps_name, rem, loc);
-		if (pfkey_send_delete_all(lcconf->sock_pfkey,
-		    pfkey_satypes[i].ps_satype, IPSEC_MODE_ANY,
-		    iph1->remote, iph1->local) == -1) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "delete_all %s -> %s failed for %s (%s)\n",
-			    rem, loc,
-			    pfkey_satypes[i].ps_name, ipsec_strerror());
-			goto the_hard_way;
-		}
-
-		deleteallph2(iph1->remote, iph1->local, proto_id);
-	}
-
-	racoon_free(loc);
-	racoon_free(rem);
-	return;
-
- the_hard_way:
-	racoon_free(loc);
-	racoon_free(rem);
-#endif
-
-	buf = pfkey_dump_sadb(SADB_SATYPE_UNSPEC);
-	if (buf == NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"pfkey_dump_sadb returned nothing.\n");
-		return;
-	}
-
-	msg = (struct sadb_msg *)buf->v;
-	end = (struct sadb_msg *)(buf->v + buf->l);
-
-	while (msg < end) {
-		if ((msg->sadb_msg_len << 3) < sizeof(*msg))
-			break;
-		next = (struct sadb_msg *)((caddr_t)msg + (msg->sadb_msg_len << 3));
-		if (msg->sadb_msg_type != SADB_DUMP) {
-			msg = next;
-			continue;
-		}
-
-		if (pfkey_align(msg, mhp) || pfkey_check(mhp)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"pfkey_check (%s)\n", ipsec_strerror());
-			msg = next;
-			continue;
-		}
-
-		if (mhp[SADB_EXT_SA] == NULL
-		 || mhp[SADB_EXT_ADDRESS_SRC] == NULL
-		 || mhp[SADB_EXT_ADDRESS_DST] == NULL) {
-			msg = next;
-			continue;
-		}
-		sa = (struct sadb_sa *)mhp[SADB_EXT_SA];
-		src = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]);
-		dst = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_DST]);
-
-		if (sa->sadb_sa_state != SADB_SASTATE_MATURE
-		 && sa->sadb_sa_state != SADB_SASTATE_DYING) {
-			msg = next;
-			continue;
-		}
-
-		/*
-		 * RFC2407 4.6.3.3 INITIAL-CONTACT is the message that
-		 * announces the sender of the message was rebooted.
-		 * it is interpreted to delete all SAs which source address
-		 * is the sender of the message.
-		 * racoon only deletes SA which is matched both the
-		 * source address and the destination accress.
-		 */
-#ifdef ENABLE_NATT
-		/* 
-		 * XXX RFC 3947 says that whe MUST NOT use IP+port to find old SAs
-		 * from this peer !
-		 */
-		if(iph1->natt_flags & NAT_DETECTED){
-			if (CMPSADDR(iph1->local, src) == 0 &&
-				CMPSADDR(iph1->remote, dst) == 0)
-				;
-			else if (CMPSADDR(iph1->remote, src) == 0 &&
-					 CMPSADDR(iph1->local, dst) == 0)
-				;
-			else {
-				msg = next;
-				continue;
-			}
-		} else
-#endif
-		/* If there is no NAT-T, we don't have to check addr + port...
-		 * XXX what about a configuration with a remote peers which is not
-		 * NATed, but which NATs some other peers ?
-		 * Here, the INITIAl-CONTACT would also flush all those NATed peers !!
-		 */
-		if (cmpsaddrwop(iph1->local, src) == 0 &&
-		    cmpsaddrwop(iph1->remote, dst) == 0)
-			;
-		else if (cmpsaddrwop(iph1->remote, src) == 0 &&
-		    cmpsaddrwop(iph1->local, dst) == 0)
-			;
-		else {
-			msg = next;
-			continue;
-		}
-
-		/*
-		 * Make sure this is an SATYPE that we manage.
-		 * This is gross; too bad we couldn't do it the
-		 * easy way.
-		 */
-		for (i = 0; i < pfkey_nsatypes; i++) {
-			if (pfkey_satypes[i].ps_satype ==
-			    msg->sadb_msg_satype)
-				break;
-		}
-		if (i == pfkey_nsatypes) {
-			msg = next;
-			continue;
-		}
-
-		plog(LLV_INFO, LOCATION, NULL,
-			"purging spi=%u.\n", ntohl(sa->sadb_sa_spi));
-		pfkey_send_delete(lcconf->sock_pfkey,
-			msg->sadb_msg_satype,
-			IPSEC_MODE_ANY, src, dst, sa->sadb_sa_spi);
-
-		/*
-		 * delete a relative phase 2 handler.
-		 * continue to process if no relative phase 2 handler
-		 * exists.
-		 */
-		proto_id = pfkey2ipsecdoi_proto(msg->sadb_msg_satype);
-		iph2 = getph2bysaidx(src, dst, proto_id, sa->sadb_sa_spi);
-		if (iph2) {
-			delete_spd(iph2, 0);
-			unbindph12(iph2);
-			remph2(iph2);
-			delph2(iph2);
-		}
-
-		msg = next;
-	}
-
-	vfree(buf);
-}
-
-void
-isakmp_check_notify(gen, iph1)
-	struct isakmp_gen *gen;		/* points to Notify payload */
-	struct ph1handle *iph1;
-{
-	struct isakmp_pl_n *notify = (struct isakmp_pl_n *)gen;
-
-	plog(LLV_DEBUG, LOCATION, iph1->remote,
-		"Notify Message received\n");
-
-	switch (ntohs(notify->type)) {
-	case ISAKMP_NTYPE_CONNECTED:
-	case ISAKMP_NTYPE_RESPONDER_LIFETIME:
-	case ISAKMP_NTYPE_REPLAY_STATUS:
-	case ISAKMP_NTYPE_HEARTBEAT:
-#ifdef ENABLE_HYBRID
-	case ISAKMP_NTYPE_UNITY_HEARTBEAT:
-#endif
-		plog(LLV_WARNING, LOCATION, iph1->remote,
-			"ignore %s notification.\n",
-			s_isakmp_notify_msg(ntohs(notify->type)));
-		break;
-	case ISAKMP_NTYPE_INITIAL_CONTACT:
-		plog(LLV_WARNING, LOCATION, iph1->remote,
-			"ignore INITIAL-CONTACT notification, "
-			"because it is only accepted after phase1.\n");
-		break;
-	default:
-		isakmp_info_send_n1(iph1, ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE, NULL);
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"received unknown notification type %s.\n",
-			s_isakmp_notify_msg(ntohs(notify->type)));
-	}
-
-	return;
-}
-
-
-#ifdef ENABLE_DPD
-static int
-isakmp_info_recv_r_u (iph1, ru, msgid)
-	struct ph1handle *iph1;
-	struct isakmp_pl_ru *ru;
-	u_int32_t msgid;
-{
-	struct isakmp_pl_ru *ru_ack;
-	vchar_t *payload = NULL;
-	int tlen;
-	int error = 0;
-
-	plog(LLV_DEBUG, LOCATION, iph1->remote,
-		 "DPD R-U-There received\n");
-
-	/* XXX should compare cookies with iph1->index?
-	   Or is this already done by calling function?  */
-	tlen = sizeof(*ru_ack);
-	payload = vmalloc(tlen);
-	if (payload == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		return errno;
-	}
-
-	ru_ack = (struct isakmp_pl_ru *)payload->v;
-	ru_ack->h.np = ISAKMP_NPTYPE_NONE;
-	ru_ack->h.len = htons(tlen);
-	ru_ack->doi = htonl(IPSEC_DOI);
-	ru_ack->type = htons(ISAKMP_NTYPE_R_U_THERE_ACK);
-	ru_ack->proto_id = IPSECDOI_PROTO_ISAKMP; /* XXX ? */
-	ru_ack->spi_size = sizeof(isakmp_index);
-	memcpy(ru_ack->i_ck, ru->i_ck, sizeof(cookie_t));
-	memcpy(ru_ack->r_ck, ru->r_ck, sizeof(cookie_t));	
-	ru_ack->data = ru->data;
-
-	/* XXX Should we do FLAG_A ?  */
-	error = isakmp_info_send_common(iph1, payload, ISAKMP_NPTYPE_N,
-					ISAKMP_FLAG_E);
-	vfree(payload);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "received a valid R-U-THERE, ACK sent\n");
-
-	/* Should we mark tunnel as active ? */
-	return error;
-}
-
-static int
-isakmp_info_recv_r_u_ack (iph1, ru, msgid)
-	struct ph1handle *iph1;
-	struct isakmp_pl_ru *ru;
-	u_int32_t msgid;
-{
-
-	plog(LLV_DEBUG, LOCATION, iph1->remote,
-		 "DPD R-U-There-Ack received\n");
-
-	/* XXX Maintain window of acceptable sequence numbers ?
-	 * => ru->data <= iph2->dpd_seq &&
-	 *    ru->data >= iph2->dpd_seq - iph2->dpd_fails ? */
-	if (ntohl(ru->data) != iph1->dpd_seq-1) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			 "Wrong DPD sequence number (%d, %d expected).\n", 
-			 ntohl(ru->data), iph1->dpd_seq-1);
-		return 0;
-	}
-
-	if (memcmp(ru->i_ck, iph1->index.i_ck, sizeof(cookie_t)) ||
-	    memcmp(ru->r_ck, iph1->index.r_ck, sizeof(cookie_t))) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			 "Cookie mismatch in DPD ACK!.\n");
-		return 0;
-	}
-
-	iph1->dpd_fails = 0;
-
-	/* Useless ??? */
-	iph1->dpd_lastack = time(NULL);
-
-	SCHED_KILL(iph1->dpd_r_u);
-
-	isakmp_sched_r_u(iph1, 0);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "received an R-U-THERE-ACK\n");
-
-	return 0;
-}
-
-
-
-
-/*
- * send DPD R-U-THERE payload in Informational exchange.
- */
-static void
-isakmp_info_send_r_u(arg)
-	void *arg;
-{
-	struct ph1handle *iph1 = arg;
-
-	/* create R-U-THERE payload */
-	struct isakmp_pl_ru *ru;
-	vchar_t *payload = NULL;
-	int tlen;
-	int error = 0;
-
-	plog(LLV_DEBUG, LOCATION, iph1->remote, "DPD monitoring....\n");
-
-	iph1->dpd_r_u=NULL;
-
-	if (iph1->dpd_fails >= iph1->rmconf->dpd_maxfails) {
-
-		plog(LLV_INFO, LOCATION, iph1->remote,
-			"DPD: remote (ISAKMP-SA spi=%s) seems to be dead.\n",
-			isakmp_pindex(&iph1->index, 0));
-
-		EVT_PUSH(iph1->local, iph1->remote, EVTT_DPD_TIMEOUT, NULL);
-		purge_remote(iph1);
-
-		/* Do not reschedule here: phase1 is deleted,
-		 * DPD will be reactivated when a new ph1 will be negociated
-		 */
-		return;
-	}
-
-	/* TODO: check recent activity to avoid useless sends... */
-
-	tlen = sizeof(*ru);
-	payload = vmalloc(tlen);
-	if (payload == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-			 "failed to get buffer for payload.\n");
-		return;
-	}
-	ru = (struct isakmp_pl_ru *)payload->v;
-	ru->h.np = ISAKMP_NPTYPE_NONE;
-	ru->h.len = htons(tlen);
-	ru->doi = htonl(IPSEC_DOI);
-	ru->type = htons(ISAKMP_NTYPE_R_U_THERE);
-	ru->proto_id = IPSECDOI_PROTO_ISAKMP; /* XXX ?*/
-	ru->spi_size = sizeof(isakmp_index);
-
-	memcpy(ru->i_ck, iph1->index.i_ck, sizeof(cookie_t));
-	memcpy(ru->r_ck, iph1->index.r_ck, sizeof(cookie_t));
-
-	if (iph1->dpd_seq == 0){
-		/* generate a random seq which is not too big */
-		srand(time(NULL));
-		iph1->dpd_seq = rand() & 0x0fff;
-	}
-
-	ru->data = htonl(iph1->dpd_seq);
-
-	error = isakmp_info_send_common(iph1, payload, ISAKMP_NPTYPE_N, 0);
-	vfree(payload);
-
-	plog(LLV_DEBUG, LOCATION, iph1->remote,
-		 "DPD R-U-There sent (%d)\n", error);
-
-	/* will be decreased if ACK received... */
-	iph1->dpd_fails++;
-
-	/* XXX should be increased only when ACKed ? */
-	iph1->dpd_seq++;
-
-	/* Reschedule the r_u_there with a short delay,
-	 * will be deleted/rescheduled if ACK received before */
-	isakmp_sched_r_u(iph1, 1);
-
-	plog(LLV_DEBUG, LOCATION, iph1->remote,
-		 "rescheduling send_r_u (%d).\n", iph1->rmconf->dpd_retry);
-}
-
-/* Schedule a new R-U-THERE */
-int
-isakmp_sched_r_u(iph1, retry)
-	struct ph1handle *iph1;
-	int retry;
-{
-	if(iph1 == NULL ||
-	   iph1->rmconf == NULL)
-		return 1;
-
-
-	if(iph1->dpd_support == 0 ||
-	   iph1->rmconf->dpd_interval == 0)
-		return 0;
-
-	if(retry)
-		iph1->dpd_r_u = sched_new(iph1->rmconf->dpd_retry,
-								  isakmp_info_send_r_u, iph1);
-	else
-		iph1->dpd_r_u = sched_new(iph1->rmconf->dpd_interval,
-								  isakmp_info_send_r_u, iph1);
-
-	return 0;
-}
-#endif
diff --git a/src/racoon/isakmp_inf.h b/src/racoon/isakmp_inf.h
deleted file mode 100644
index c7682d9..0000000
--- a/src/racoon/isakmp_inf.h
+++ /dev/null
@@ -1,60 +0,0 @@
-/*	$NetBSD: isakmp_inf.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: isakmp_inf.h,v 1.6 2005/05/07 14:15:59 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ISAKMP_INF_H
-#define _ISAKMP_INF_H
-
-struct saproto;
-extern int isakmp_info_recv __P((struct ph1handle *, vchar_t *));
-extern int isakmp_info_send_d1 __P((struct ph1handle *));
-extern int isakmp_info_send_d2 __P((struct ph2handle *));
-extern int isakmp_info_send_nx __P((struct isakmp *,
-	struct sockaddr *, struct sockaddr *, int, vchar_t *));
-extern int isakmp_info_send_n1 __P((struct ph1handle *, int, vchar_t *));
-extern int isakmp_info_send_n2 __P((struct ph2handle *, int, vchar_t *));
-extern int isakmp_info_send_common __P((struct ph1handle *,
-	vchar_t *, u_int32_t, int));
-
-extern vchar_t * isakmp_add_pl_n __P((vchar_t *, u_int8_t **, int,
-	struct saproto *, vchar_t *));
-
-extern void isakmp_check_notify __P((struct isakmp_gen *, struct ph1handle *));
-
-#ifdef ENABLE_DPD
-extern int isakmp_sched_r_u __P((struct ph1handle *, int));
-#endif
-
-extern void purge_ipsec_spi __P((struct sockaddr *, int,	u_int32_t *, size_t));
-extern int tunnel_mode_prop __P((struct saprop *));
-
-#endif /* _ISAKMP_INF_H */
diff --git a/src/racoon/isakmp_newg.c b/src/racoon/isakmp_newg.c
deleted file mode 100644
index 85b91b9..0000000
--- a/src/racoon/isakmp_newg.c
+++ /dev/null
@@ -1,232 +0,0 @@
-/*	$NetBSD: isakmp_newg.c,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/*	$KAME: isakmp_newg.c,v 1.10 2002/09/27 05:55:52 itojun Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "debug.h"
-
-#include "schedule.h"
-#include "cfparse_proto.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "isakmp_newg.h"
-#include "oakley.h"
-#include "ipsec_doi.h"
-#include "crypto_openssl.h"
-#include "handler.h"
-#include "pfkey.h"
-#include "admin.h"
-#include "str2val.h"
-#include "vendorid.h"
-
-/*
- * New group mode as responder
- */
-int
-isakmp_newgroup_r(iph1, msg)
-	struct ph1handle *iph1;
-	vchar_t *msg;
-{
-#if 0
-	struct isakmp *isakmp = (struct isakmp *)msg->v;
-	struct isakmp_pl_hash *hash = NULL;
-	struct isakmp_pl_sa *sa = NULL;
-	int error = -1;
-	vchar_t *buf;
-	struct oakley_sa *osa;
-	int len;
-
-	/* validate the type of next payload */
-	/*
-	 * ISAKMP_ETYPE_NEWGRP,
-	 * ISAKMP_NPTYPE_HASH, (ISAKMP_NPTYPE_VID), ISAKMP_NPTYPE_SA,
-	 * ISAKMP_NPTYPE_NONE
-	 */
-    {
-	vchar_t *pbuf = NULL;
-	struct isakmp_parse_t *pa;
-
-	if ((pbuf = isakmp_parse(msg)) == NULL)
-		goto end;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_HASH:
-			if (hash) {
-				isakmp_info_send_n1(iph1, ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE, NULL);
-				plog(LLV_ERROR, LOCATION, iph1->remote,
-					"received multiple payload type %d.\n",
-					pa->type);
-				vfree(pbuf);
-				goto end;
-			}
-			hash = (struct isakmp_pl_hash *)pa->ptr;
-			break;
-		case ISAKMP_NPTYPE_SA:
-			if (sa) {
-				isakmp_info_send_n1(iph1, ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE, NULL);
-				plog(LLV_ERROR, LOCATION, iph1->remote,
-					"received multiple payload type %d.\n",
-					pa->type);
-				vfree(pbuf);
-				goto end;
-			}
-			sa = (struct isakmp_pl_sa *)pa->ptr;
-			break;
-		case ISAKMP_NPTYPE_VID:
-			handle_vendorid(iph1, pa->ptr);
-			break;
-		default:
-			isakmp_info_send_n1(iph1, ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE, NULL);
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			vfree(pbuf);
-			goto end;
-		}
-	}
-	vfree(pbuf);
-
-	if (!hash || !sa) {
-		isakmp_info_send_n1(iph1, ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE, NULL);
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"no HASH, or no SA payload.\n");
-		goto end;
-	}
-    }
-
-	/* validate HASH */
-    {
-	char *r_hash;
-	vchar_t *my_hash = NULL;
-	int result;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "validate HASH\n");
-
-	len = sizeof(isakmp->msgid) + ntohs(sa->h.len);
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		goto end;
-	}
-	memcpy(buf->v, &isakmp->msgid, sizeof(isakmp->msgid));
-	memcpy(buf->v + sizeof(isakmp->msgid), sa, ntohs(sa->h.len));
-
-	plog(LLV_DEBUG, LOCATION, NULL, "hash source\n");
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-	my_hash = isakmp_prf(iph1->skeyid_a, buf, iph1);
-	vfree(buf);
-	if (my_hash == NULL)
-		goto end;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "hash result\n");
-	plogdump(LLV_DEBUG, my_hash->v, my_hash->l);
-
-	r_hash = (char *)hash + sizeof(*hash);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "original hash\n"));
-	plogdump(LLV_DEBUG, r_hash, ntohs(hash->h.len) - sizeof(*hash)));
-
-	result = memcmp(my_hash->v, r_hash, my_hash->l);
-	vfree(my_hash);
-
-	if (result) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"HASH mismatch.\n");
-		isakmp_info_send_n1(iph1, ISAKMP_NTYPE_INVALID_HASH_INFORMATION, NULL);
-		goto end;
-	}
-    }
-
-	/* check SA payload and get new one for use */
-	buf = ipsecdoi_get_proposal((struct ipsecdoi_sa *)sa,
-					OAKLEY_NEWGROUP_MODE);
-	if (buf == NULL) {
-		isakmp_info_send_n1(iph1, ISAKMP_NTYPE_ATTRIBUTES_NOT_SUPPORTED, NULL);
-		goto end;
-	}
-
-	/* save sa parameters */
-	osa = ipsecdoi_get_oakley(buf);
-	if (osa == NULL) {
-		isakmp_info_send_n1(iph1, ISAKMP_NTYPE_ATTRIBUTES_NOT_SUPPORTED, NULL);
-		goto end;
-	}
-	vfree(buf);
-
-	switch (osa->dhgrp) {
-	case OAKLEY_ATTR_GRP_DESC_MODP768:
-	case OAKLEY_ATTR_GRP_DESC_MODP1024:
-	case OAKLEY_ATTR_GRP_DESC_MODP1536:
-		/*XXX*/
-	default:
-		isakmp_info_send_n1(iph1, ISAKMP_NTYPE_ATTRIBUTES_NOT_SUPPORTED, NULL);
-		plog(LLV_ERROR, LOCATION, NULL,
-			"dh group %d isn't supported.\n", osa->dhgrp);
-		goto end;
-	}
-
-	plog(LLV_INFO, LOCATION, iph1->remote,
-		"got new dh group %s.\n", isakmp_pindex(&iph1->index, 0));
-
-	error = 0;
-
-end:
-	if (error) {
-		if (iph1 != NULL)
-			(void)isakmp_free_ph1(iph1);
-	}
-	return error;
-#endif
-	return 0;
-}
-
diff --git a/src/racoon/isakmp_newg.h b/src/racoon/isakmp_newg.h
deleted file mode 100644
index 1562c41..0000000
--- a/src/racoon/isakmp_newg.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*	$NetBSD: isakmp_newg.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: isakmp_newg.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ISAKMP_NEWG_H
-#define _ISAKMP_NEWG_H
-
-extern int isakmp_newgroup_r __P((struct ph1handle *, vchar_t *));
-
-#endif /* _ISAKMP_NEWG_H */
diff --git a/src/racoon/isakmp_quick.c b/src/racoon/isakmp_quick.c
deleted file mode 100644
index 963438d..0000000
--- a/src/racoon/isakmp_quick.c
+++ /dev/null
@@ -1,2189 +0,0 @@
-/*	$NetBSD: isakmp_quick.c,v 1.11.4.1 2007/08/01 11:52:21 vanhu Exp $	*/
-
-/* Id: isakmp_quick.c,v 1.29 2006/08/22 18:17:17 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#endif
-
-#include PATH_IPSEC_H
-
-#include "var.h"
-#include "vmbuf.h"
-#include "schedule.h"
-#include "misc.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "localconf.h"
-#include "remoteconf.h"
-#include "handler.h"
-#include "policy.h"
-#include "proposal.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "isakmp_inf.h"
-#include "isakmp_quick.h"
-#include "oakley.h"
-#include "ipsec_doi.h"
-#include "crypto_openssl.h"
-#include "pfkey.h"
-#include "policy.h"
-#include "algorithm.h"
-#include "sockmisc.h"
-#include "proposal.h"
-#include "sainfo.h"
-#include "admin.h"
-#include "strnames.h"
-
-/* quick mode */
-static vchar_t *quick_ir1mx __P((struct ph2handle *, vchar_t *, vchar_t *));
-static int get_sainfo_r __P((struct ph2handle *));
-static int get_proposal_r __P((struct ph2handle *));
-
-/* %%%
- * Quick Mode
- */
-/*
- * begin Quick Mode as initiator.  send pfkey getspi message to kernel.
- */
-int
-quick_i1prep(iph2, msg)
-	struct ph2handle *iph2;
-	vchar_t *msg; /* must be null pointer */
-{
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* validity check */
-	if (iph2->status != PHASE2ST_STATUS2) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	iph2->msgid = isakmp_newmsgid2(iph2->ph1);
-	iph2->ivm = oakley_newiv2(iph2->ph1, iph2->msgid);
-	if (iph2->ivm == NULL)
-		return 0;
-
-	iph2->status = PHASE2ST_GETSPISENT;
-
-	/* don't anything if local test mode. */
-	if (f_local) {
-		error = 0;
-		goto end;
-	}
-
-	/* send getspi message */
-	if (pk_sendgetspi(iph2) < 0)
-		goto end;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "pfkey getspi sent.\n");
-
-	iph2->sce = sched_new(lcconf->wait_ph2complete,
-		pfkey_timeover_stub, iph2);
-
-	error = 0;
-
-end:
-	return error;
-}
-
-/*
- * send to responder
- * 	HDR*, HASH(1), SA, Ni [, KE ] [, IDi2, IDr2 ]
- */
-int
-quick_i1send(iph2, msg)
-	struct ph2handle *iph2;
-	vchar_t *msg; /* must be null pointer */
-{
-	vchar_t *body = NULL;
-	vchar_t *hash = NULL;
-	struct isakmp_gen *gen;
-	char *p;
-	int tlen;
-	int error = ISAKMP_INTERNAL_ERROR;
-	int pfsgroup, idci, idcr;
-	int np;
-	struct ipsecdoi_id_b *id, *id_p;
-
-	/* validity check */
-	if (msg != NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"msg has to be NULL in this function.\n");
-		goto end;
-	}
-	if (iph2->status != PHASE2ST_GETSPIDONE) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	/* create SA payload for my proposal */
-	if (ipsecdoi_setph2proposal(iph2) < 0)
-		goto end;
-
-	/* generate NONCE value */
-	iph2->nonce = eay_set_random(iph2->ph1->rmconf->nonce_size);
-	if (iph2->nonce == NULL)
-		goto end;
-
-	/*
-	 * DH value calculation is kicked out into cfparse.y.
-	 * because pfs group can not be negotiated, it's only to be checked
-	 * acceptable.
-	 */
-	/* generate KE value if need */
-	pfsgroup = iph2->proposal->pfs_group;
-	if (pfsgroup) {
-		/* DH group settting if PFS is required. */
-		if (oakley_setdhgroup(pfsgroup, &iph2->pfsgrp) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to set DH value.\n");
-			goto end;
-		}
-		if (oakley_dh_generate(iph2->pfsgrp,
-				&iph2->dhpub, &iph2->dhpriv) < 0) {
-			goto end;
-		}
-	}
-
-	/* generate ID value */
-	if (ipsecdoi_setid2(iph2) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get ID.\n");
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "IDci:\n");
-	plogdump(LLV_DEBUG, iph2->id->v, iph2->id->l);
-	plog(LLV_DEBUG, LOCATION, NULL, "IDcr:\n");
-	plogdump(LLV_DEBUG, iph2->id_p->v, iph2->id_p->l);
-
-	/*
-	 * we do not attach IDci nor IDcr, under the following condition:
-	 * - all proposals are transport mode
-	 * - no MIP6 or proxy
-	 * - id payload suggests to encrypt all the traffic (no specific
-	 *   protocol type)
-	 */
-	id = (struct ipsecdoi_id_b *)iph2->id->v;
-	id_p = (struct ipsecdoi_id_b *)iph2->id_p->v;
-	if (id->proto_id == 0
-	 && id_p->proto_id == 0
-	 && iph2->ph1->rmconf->support_proxy == 0
-	 && ipsecdoi_transportmode(iph2->proposal)) {
-		idci = idcr = 0;
-	} else
-		idci = idcr = 1;
-
-	/* create SA;NONCE payload, and KE if need, and IDii, IDir. */
-	tlen = + sizeof(*gen) + iph2->sa->l
-		+ sizeof(*gen) + iph2->nonce->l;
-	if (pfsgroup)
-		tlen += (sizeof(*gen) + iph2->dhpub->l);
-	if (idci)
-		tlen += sizeof(*gen) + iph2->id->l;
-	if (idcr)
-		tlen += sizeof(*gen) + iph2->id_p->l;
-
-	body = vmalloc(tlen);
-	if (body == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		goto end;
-	}
-
-	p = body->v;
-
-	/* add SA payload */
-	p = set_isakmp_payload(p, iph2->sa, ISAKMP_NPTYPE_NONCE);
-
-	/* add NONCE payload */
-	if (pfsgroup)
-		np = ISAKMP_NPTYPE_KE;
-	else if (idci || idcr)
-		np = ISAKMP_NPTYPE_ID;
-	else
-		np = ISAKMP_NPTYPE_NONE;
-	p = set_isakmp_payload(p, iph2->nonce, np);
-
-	/* add KE payload if need. */
-	np = (idci || idcr) ? ISAKMP_NPTYPE_ID : ISAKMP_NPTYPE_NONE;
-	if (pfsgroup)
-		p = set_isakmp_payload(p, iph2->dhpub, np);
-
-	/* IDci */
-	np = (idcr) ? ISAKMP_NPTYPE_ID : ISAKMP_NPTYPE_NONE;
-	if (idci)
-		p = set_isakmp_payload(p, iph2->id, np);
-
-	/* IDcr */
-	if (idcr)
-		p = set_isakmp_payload(p, iph2->id_p, ISAKMP_NPTYPE_NONE);
-
-	/* generate HASH(1) */
-	hash = oakley_compute_hash1(iph2->ph1, iph2->msgid, body);
-	if (hash == NULL)
-		goto end;
-
-	/* send isakmp payload */
-	iph2->sendbuf = quick_ir1mx(iph2, body, hash);
-	if (iph2->sendbuf == NULL)
-		goto end;
-
-	/* send the packet, add to the schedule to resend */
-	iph2->retry_counter = iph2->ph1->rmconf->retry_counter;
-	if (isakmp_ph2resend(iph2) == -1)
-		goto end;
-
-	/* change status of isakmp status entry */
-	iph2->status = PHASE2ST_MSG1SENT;
-
-	error = 0;
-
-end:
-	if (body != NULL)
-		vfree(body);
-	if (hash != NULL)
-		vfree(hash);
-
-	return error;
-}
-
-/*
- * receive from responder
- * 	HDR*, HASH(2), SA, Nr [, KE ] [, IDi2, IDr2 ]
- */
-int
-quick_i2recv(iph2, msg0)
-	struct ph2handle *iph2;
-	vchar_t *msg0;
-{
-	vchar_t *msg = NULL;
-	vchar_t *hbuf = NULL;	/* for hash computing. */
-	vchar_t *pbuf = NULL;	/* for payload parsing */
-	struct isakmp_parse_t *pa;
-	struct isakmp *isakmp = (struct isakmp *)msg0->v;
-	struct isakmp_pl_hash *hash = NULL;
-	int f_id;
-	char *p;
-	int tlen;
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* validity check */
-	if (iph2->status != PHASE2ST_MSG1SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	/* decrypt packet */
-	if (!ISSET(((struct isakmp *)msg0->v)->flags, ISAKMP_FLAG_E)) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"Packet wasn't encrypted.\n");
-		goto end;
-	}
-	msg = oakley_do_decrypt(iph2->ph1, msg0, iph2->ivm->iv, iph2->ivm->ive);
-	if (msg == NULL)
-		goto end;
-
-	/* create buffer for validating HASH(2) */
-	/*
-	 * ordering rule:
-	 *	1. the first one must be HASH
-	 *	2. the second one must be SA (added in isakmp-oakley-05!)
-	 *	3. two IDs must be considered as IDci, then IDcr
-	 */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-	pa = (struct isakmp_parse_t *)pbuf->v;
-
-	/* HASH payload is fixed postion */
-	if (pa->type != ISAKMP_NPTYPE_HASH) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"received invalid next payload type %d, "
-			"expecting %d.\n",
-			pa->type, ISAKMP_NPTYPE_HASH);
-		goto end;
-	}
-	hash = (struct isakmp_pl_hash *)pa->ptr;
-	pa++;
-
-	/*
-	 * this restriction was introduced in isakmp-oakley-05.
-	 * we do not check this for backward compatibility.
-	 * TODO: command line/config file option to enable/disable this code
-	 */
-	/* HASH payload is fixed postion */
-	if (pa->type != ISAKMP_NPTYPE_SA) {
-		plog(LLV_WARNING, LOCATION, iph2->ph1->remote,
-			"received invalid next payload type %d, "
-			"expecting %d.\n",
-			pa->type, ISAKMP_NPTYPE_HASH);
-	}
-
-	/* allocate buffer for computing HASH(2) */
-	tlen = iph2->nonce->l
-		+ ntohl(isakmp->len) - sizeof(*isakmp);
-	hbuf = vmalloc(tlen);
-	if (hbuf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get hash buffer.\n");
-		goto end;
-	}
-	p = hbuf->v + iph2->nonce->l;	/* retain the space for Ni_b */
-
-	/*
-	 * parse the payloads.
-	 * copy non-HASH payloads into hbuf, so that we can validate HASH.
-	 */
-	iph2->sa_ret = NULL;
-	f_id = 0;	/* flag to use checking ID */
-	tlen = 0;	/* count payload length except of HASH payload. */
-	for (; pa->type; pa++) {
-
-		/* copy to buffer for HASH */
-		/* Don't modify the payload */
-		memcpy(p, pa->ptr, pa->len);
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_SA:
-			if (iph2->sa_ret != NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"Ignored, multiple SA "
-					"isn't supported.\n");
-				break;
-			}
-			if (isakmp_p2ph(&iph2->sa_ret, pa->ptr) < 0)
-				goto end;
-			break;
-
-		case ISAKMP_NPTYPE_NONCE:
-			if (isakmp_p2ph(&iph2->nonce_p, pa->ptr) < 0)
-				goto end;
-			break;
-
-		case ISAKMP_NPTYPE_KE:
-			if (isakmp_p2ph(&iph2->dhpub_p, pa->ptr) < 0)
-				goto end;
-			break;
-
-		case ISAKMP_NPTYPE_ID:
-		    {
-			vchar_t *vp;
-
-			/* check ID value */
-			if (f_id == 0) {
-				/* for IDci */
-				f_id = 1;
-				vp = iph2->id;
-			} else {
-				/* for IDcr */
-				vp = iph2->id_p;
-			}
-
-#ifndef ANDROID_PATCHED
-			if (memcmp(vp->v, (caddr_t)pa->ptr + sizeof(struct isakmp_gen), vp->l)) {
-
-				plog(LLV_ERROR, LOCATION, NULL,
-					"mismatched ID was returned.\n");
-				error = ISAKMP_NTYPE_ATTRIBUTES_NOT_SUPPORTED;
-				goto end;
-			}
-#endif
-		    }
-			break;
-
-		case ISAKMP_NPTYPE_N:
-			isakmp_check_notify(pa->ptr, iph2->ph1);
-			break;
-
-#ifdef ENABLE_NATT
-		case ISAKMP_NPTYPE_NATOA_DRAFT:
-		case ISAKMP_NPTYPE_NATOA_RFC:
-			/* Ignore original source/destination messages */
-			break;
-#endif
-
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-
-		p += pa->len;
-
-		/* compute true length of payload. */
-		tlen += pa->len;
-	}
-
-	/* payload existency check */
-	if (hash == NULL || iph2->sa_ret == NULL || iph2->nonce_p == NULL) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"few isakmp message received.\n");
-		goto end;
-	}
-
-	/* Fixed buffer for calculating HASH */
-	memcpy(hbuf->v, iph2->nonce->v, iph2->nonce->l);
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"HASH allocated:hbuf->l=%zu actual:tlen=%zu\n",
-		hbuf->l, tlen + iph2->nonce->l);
-	/* adjust buffer length for HASH */
-	hbuf->l = iph2->nonce->l + tlen;
-
-	/* validate HASH(2) */
-    {
-	char *r_hash;
-	vchar_t *my_hash = NULL;
-	int result;
-
-	r_hash = (char *)hash + sizeof(*hash);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH(2) received:");
-	plogdump(LLV_DEBUG, r_hash, ntohs(hash->h.len) - sizeof(*hash));
-
-	my_hash = oakley_compute_hash1(iph2->ph1, iph2->msgid, hbuf);
-	if (my_hash == NULL)
-		goto end;
-
-	result = memcmp(my_hash->v, r_hash, my_hash->l);
-	vfree(my_hash);
-
-	if (result) {
-		plog(LLV_DEBUG, LOCATION, iph2->ph1->remote,
-			"HASH(2) mismatch.\n");
-		error = ISAKMP_NTYPE_INVALID_HASH_INFORMATION;
-		goto end;
-	}
-    }
-
-	/* validity check SA payload sent from responder */
-	if (ipsecdoi_checkph2proposal(iph2) < 0) {
-		error = ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN;
-		goto end;
-	}
-
-	/* change status of isakmp status entry */
-	iph2->status = PHASE2ST_STATUS6;
-
-	error = 0;
-
-end:
-	if (hbuf)
-		vfree(hbuf);
-	if (pbuf)
-		vfree(pbuf);
-	if (msg)
-		vfree(msg);
-
-	if (error) {
-		VPTRINIT(iph2->sa_ret);
-		VPTRINIT(iph2->nonce_p);
-		VPTRINIT(iph2->dhpub_p);
-		VPTRINIT(iph2->id);
-		VPTRINIT(iph2->id_p);
-	}
-
-	return error;
-}
-
-/*
- * send to responder
- * 	HDR*, HASH(3)
- */
-int
-quick_i2send(iph2, msg0)
-	struct ph2handle *iph2;
-	vchar_t *msg0;
-{
-	vchar_t *msg = NULL;
-	vchar_t *buf = NULL;
-	vchar_t *hash = NULL;
-	char *p = NULL;
-	int tlen;
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* validity check */
-	if (iph2->status != PHASE2ST_STATUS6) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	/* generate HASH(3) */
-    {
-	vchar_t *tmp = NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH(3) generate\n");
-
-	tmp = vmalloc(iph2->nonce->l + iph2->nonce_p->l);
-	if (tmp == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get hash buffer.\n");
-		goto end;
-	}
-	memcpy(tmp->v, iph2->nonce->v, iph2->nonce->l);
-	memcpy(tmp->v + iph2->nonce->l, iph2->nonce_p->v, iph2->nonce_p->l);
-
-	hash = oakley_compute_hash3(iph2->ph1, iph2->msgid, tmp);
-	vfree(tmp);
-
-	if (hash == NULL)
-		goto end;
-    }
-
-	/* create buffer for isakmp payload */
-	tlen = sizeof(struct isakmp)
-		+ sizeof(struct isakmp_gen) + hash->l;
-	buf = vmalloc(tlen);
-	if (buf == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		goto end;
-	}
-
-	/* create isakmp header */
-	p = set_isakmp_header2(buf, iph2, ISAKMP_NPTYPE_HASH);
-	if (p == NULL)
-		goto end;
-
-	/* add HASH(3) payload */
-	p = set_isakmp_payload(p, hash, ISAKMP_NPTYPE_NONE);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(buf, iph2->ph1->local, iph2->ph1->remote, 1);
-#endif
-
-	/* encoding */
-	iph2->sendbuf = oakley_do_encrypt(iph2->ph1, buf, iph2->ivm->ive, iph2->ivm->iv);
-	if (iph2->sendbuf == NULL)
-		goto end;
-
-	/* if there is commit bit, need resending */
-	if (ISSET(iph2->flags, ISAKMP_FLAG_C)) {
-		/* send the packet, add to the schedule to resend */
-		iph2->retry_counter = iph2->ph1->rmconf->retry_counter;
-		if (isakmp_ph2resend(iph2) == -1)
-			goto end;
-	} else {
-		/* send the packet */
-		if (isakmp_send(iph2->ph1, iph2->sendbuf) < 0)
-			goto end;
-	}
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph2->ph1->remote, iph2->ph1->local,
-			iph2->sendbuf, msg0) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	/* compute both of KEYMATs */
-	if (oakley_compute_keymat(iph2, INITIATOR) < 0)
-		goto end;
-
-	iph2->status = PHASE2ST_ADDSA;
-
-	/* don't anything if local test mode. */
-	if (f_local) {
-		error = 0;
-		goto end;
-	}
-
-	/* if there is commit bit don't set up SA now. */
-	if (ISSET(iph2->flags, ISAKMP_FLAG_C)) {
-		iph2->status = PHASE2ST_COMMIT;
-		error = 0;
-		goto end;
-	}
-
-	/* Do UPDATE for initiator */
-	plog(LLV_DEBUG, LOCATION, NULL, "call pk_sendupdate\n");
-	if (pk_sendupdate(iph2) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "pfkey update failed.\n");
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "pfkey update sent.\n");
-
-	/* Do ADD for responder */
-	if (pk_sendadd(iph2) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "pfkey add failed.\n");
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "pfkey add sent.\n");
-
-	error = 0;
-
-end:
-	if (buf != NULL)
-		vfree(buf);
-	if (msg != NULL)
-		vfree(msg);
-	if (hash != NULL)
-		vfree(hash);
-
-	return error;
-}
-
-/*
- * receive from responder
- * 	HDR#*, HASH(4), notify
- */
-int
-quick_i3recv(iph2, msg0)
-	struct ph2handle *iph2;
-	vchar_t *msg0;
-{
-	vchar_t *msg = NULL;
-	vchar_t *pbuf = NULL;	/* for payload parsing */
-	struct isakmp_parse_t *pa;
-	struct isakmp_pl_hash *hash = NULL;
-	vchar_t *notify = NULL;
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* validity check */
-	if (iph2->status != PHASE2ST_COMMIT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	/* decrypt packet */
-	if (!ISSET(((struct isakmp *)msg0->v)->flags, ISAKMP_FLAG_E)) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"Packet wasn't encrypted.\n");
-		goto end;
-	}
-	msg = oakley_do_decrypt(iph2->ph1, msg0, iph2->ivm->iv, iph2->ivm->ive);
-	if (msg == NULL)
-		goto end;
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_HASH:
-			hash = (struct isakmp_pl_hash *)pa->ptr;
-			break;
-		case ISAKMP_NPTYPE_N:
-			if (notify != NULL) {
-				plog(LLV_WARNING, LOCATION, NULL,
-				    "Ignoring multiples notifications\n");
-				break;
-			}
-			isakmp_check_notify(pa->ptr, iph2->ph1);
-			notify = vmalloc(pa->len);
-			if (notify == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to get notify buffer.\n");
-				goto end;
-			}
-			memcpy(notify->v, pa->ptr, notify->l);
-			break;
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-	/* payload existency check */
-	if (hash == NULL) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"few isakmp message received.\n");
-		goto end;
-	}
-
-	/* validate HASH(4) */
-    {
-	char *r_hash;
-	vchar_t *my_hash = NULL;
-	vchar_t *tmp = NULL;
-	int result;
-
-	r_hash = (char *)hash + sizeof(*hash);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH(4) validate:");
-	plogdump(LLV_DEBUG, r_hash, ntohs(hash->h.len) - sizeof(*hash));
-
-	my_hash = oakley_compute_hash1(iph2->ph1, iph2->msgid, notify);
-	vfree(tmp);
-	if (my_hash == NULL)
-		goto end;
-
-	result = memcmp(my_hash->v, r_hash, my_hash->l);
-	vfree(my_hash);
-
-	if (result) {
-		plog(LLV_DEBUG, LOCATION, iph2->ph1->remote,
-			"HASH(4) mismatch.\n");
-		error = ISAKMP_NTYPE_INVALID_HASH_INFORMATION;
-		goto end;
-	}
-    }
-
-	iph2->status = PHASE2ST_ADDSA;
-	iph2->flags ^= ISAKMP_FLAG_C;	/* reset bit */
-
-	/* don't anything if local test mode. */
-	if (f_local) {
-		error = 0;
-		goto end;
-	}
-
-	/* Do UPDATE for initiator */
-	plog(LLV_DEBUG, LOCATION, NULL, "call pk_sendupdate\n");
-	if (pk_sendupdate(iph2) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "pfkey update failed.\n");
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "pfkey update sent.\n");
-
-	/* Do ADD for responder */
-	if (pk_sendadd(iph2) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "pfkey add failed.\n");
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "pfkey add sent.\n");
-
-	error = 0;
-
-end:
-	if (msg != NULL)
-		vfree(msg);
-	if (pbuf != NULL)
-		vfree(pbuf);
-	if (notify != NULL)
-		vfree(notify);
-
-	return error;
-}
-
-/*
- * receive from initiator
- * 	HDR*, HASH(1), SA, Ni [, KE ] [, IDi2, IDr2 ]
- */
-int
-quick_r1recv(iph2, msg0)
-	struct ph2handle *iph2;
-	vchar_t *msg0;
-{
-	vchar_t *msg = NULL;
-	vchar_t *hbuf = NULL;	/* for hash computing. */
-	vchar_t *pbuf = NULL;	/* for payload parsing */
-	struct isakmp_parse_t *pa;
-	struct isakmp *isakmp = (struct isakmp *)msg0->v;
-	struct isakmp_pl_hash *hash = NULL;
-	char *p;
-	int tlen;
-	int f_id_order;	/* for ID payload detection */
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* validity check */
-	if (iph2->status != PHASE2ST_START) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	/* decrypting */
-	if (!ISSET(((struct isakmp *)msg0->v)->flags, ISAKMP_FLAG_E)) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"Packet wasn't encrypted.\n");
-		error = ISAKMP_NTYPE_PAYLOAD_MALFORMED;
-		goto end;
-	}
-	/* decrypt packet */
-	msg = oakley_do_decrypt(iph2->ph1, msg0, iph2->ivm->iv, iph2->ivm->ive);
-	if (msg == NULL)
-		goto end;
-
-	/* create buffer for using to validate HASH(1) */
-	/*
-	 * ordering rule:
-	 *	1. the first one must be HASH
-	 *	2. the second one must be SA (added in isakmp-oakley-05!)
-	 *	3. two IDs must be considered as IDci, then IDcr
-	 */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-	pa = (struct isakmp_parse_t *)pbuf->v;
-
-	/* HASH payload is fixed postion */
-	if (pa->type != ISAKMP_NPTYPE_HASH) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"received invalid next payload type %d, "
-			"expecting %d.\n",
-			pa->type, ISAKMP_NPTYPE_HASH);
-		error = ISAKMP_NTYPE_BAD_PROPOSAL_SYNTAX;
-		goto end;
-	}
-	hash = (struct isakmp_pl_hash *)pa->ptr;
-	pa++;
-
-	/*
-	 * this restriction was introduced in isakmp-oakley-05.
-	 * we do not check this for backward compatibility.
-	 * TODO: command line/config file option to enable/disable this code
-	 */
-	/* HASH payload is fixed postion */
-	if (pa->type != ISAKMP_NPTYPE_SA) {
-		plog(LLV_WARNING, LOCATION, iph2->ph1->remote,
-			"received invalid next payload type %d, "
-			"expecting %d.\n",
-			pa->type, ISAKMP_NPTYPE_SA);
-		error = ISAKMP_NTYPE_BAD_PROPOSAL_SYNTAX;
-	}
-
-	/* allocate buffer for computing HASH(1) */
-	tlen = ntohl(isakmp->len) - sizeof(*isakmp);
-	hbuf = vmalloc(tlen);
-	if (hbuf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get hash buffer.\n");
-		goto end;
-	}
-	p = hbuf->v;
-
-	/*
-	 * parse the payloads.
-	 * copy non-HASH payloads into hbuf, so that we can validate HASH.
-	 */
-	iph2->sa = NULL;	/* we don't support multi SAs. */
-	iph2->nonce_p = NULL;
-	iph2->dhpub_p = NULL;
-	iph2->id_p = NULL;
-	iph2->id = NULL;
-	tlen = 0;	/* count payload length except of HASH payload. */
-
-	/*
-	 * IDi2 MUST be immediatelly followed by IDr2.  We allowed the
-	 * illegal case, but logged.  First ID payload is to be IDi2.
-	 * And next ID payload is to be IDr2.
-	 */
-	f_id_order = 0;
-
-	for (; pa->type; pa++) {
-
-		/* copy to buffer for HASH */
-		/* Don't modify the payload */
-		memcpy(p, pa->ptr, pa->len);
-
-		if (pa->type != ISAKMP_NPTYPE_ID)
-			f_id_order = 0;
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_SA:
-			if (iph2->sa != NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"Multi SAs isn't supported.\n");
-				goto end;
-			}
-			if (isakmp_p2ph(&iph2->sa, pa->ptr) < 0)
-				goto end;
-			break;
-
-		case ISAKMP_NPTYPE_NONCE:
-			if (isakmp_p2ph(&iph2->nonce_p, pa->ptr) < 0)
-				goto end;
-			break;
-
-		case ISAKMP_NPTYPE_KE:
-			if (isakmp_p2ph(&iph2->dhpub_p, pa->ptr) < 0)
-				goto end;
-			break;
-
-		case ISAKMP_NPTYPE_ID:
-			if (iph2->id_p == NULL) {
-				/* for IDci */
-				f_id_order++;
-
-				if (isakmp_p2ph(&iph2->id_p, pa->ptr) < 0)
-					goto end;
-
-			} else if (iph2->id == NULL) {
-				/* for IDcr */
-				if (f_id_order == 0) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"IDr2 payload is not "
-						"immediatelly followed "
-						"by IDi2. We allowed.\n");
-					/* XXX we allowed in this case. */
-				}
-
-				if (isakmp_p2ph(&iph2->id, pa->ptr) < 0)
-					goto end;
-			} else {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"received too many ID payloads.\n");
-				plogdump(LLV_ERROR, iph2->id->v, iph2->id->l);
-				error = ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-				goto end;
-			}
-			break;
-
-		case ISAKMP_NPTYPE_N:
-			isakmp_check_notify(pa->ptr, iph2->ph1);
-			break;
-
-#ifdef ENABLE_NATT
-		case ISAKMP_NPTYPE_NATOA_DRAFT:
-		case ISAKMP_NPTYPE_NATOA_RFC:
-			/* Ignore original source/destination messages */
-			break;
-#endif
-
-		default:
-			plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			error = ISAKMP_NTYPE_PAYLOAD_MALFORMED;
-			goto end;
-		}
-
-		p += pa->len;
-
-		/* compute true length of payload. */
-		tlen += pa->len;
-	}
-
-	/* payload existency check */
-	if (hash == NULL || iph2->sa == NULL || iph2->nonce_p == NULL) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"few isakmp message received.\n");
-		error = ISAKMP_NTYPE_PAYLOAD_MALFORMED;
-		goto end;
-	}
-
-	if (iph2->id_p) {
-		plog(LLV_DEBUG, LOCATION, NULL, "received IDci2:");
-		plogdump(LLV_DEBUG, iph2->id_p->v, iph2->id_p->l);
-	}
-	if (iph2->id) {
-		plog(LLV_DEBUG, LOCATION, NULL, "received IDcr2:");
-		plogdump(LLV_DEBUG, iph2->id->v, iph2->id->l);
-	}
-
-	/* adjust buffer length for HASH */
-	hbuf->l = tlen;
-
-	/* validate HASH(1) */
-    {
-	char *r_hash;
-	vchar_t *my_hash = NULL;
-	int result;
-
-	r_hash = (caddr_t)hash + sizeof(*hash);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH(1) validate:");
-	plogdump(LLV_DEBUG, r_hash, ntohs(hash->h.len) - sizeof(*hash));
-
-	my_hash = oakley_compute_hash1(iph2->ph1, iph2->msgid, hbuf);
-	if (my_hash == NULL)
-		goto end;
-
-	result = memcmp(my_hash->v, r_hash, my_hash->l);
-	vfree(my_hash);
-
-	if (result) {
-		plog(LLV_DEBUG, LOCATION, iph2->ph1->remote,
-			"HASH(1) mismatch.\n");
-		error = ISAKMP_NTYPE_INVALID_HASH_INFORMATION;
-		goto end;
-	}
-    }
-
-	/* get sainfo */
-	error = get_sainfo_r(iph2);
-	if (error) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get sainfo.\n");
-		goto end;
-	}
-
-
-	/* check the existence of ID payload and create responder's proposal */
-	error = get_proposal_r(iph2);
-	switch (error) {
-	case -2:
-		/* generate a policy template from peer's proposal */
-		if (set_proposal_from_proposal(iph2)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to generate a proposal template "
-				"from client's proposal.\n");
-			return ISAKMP_INTERNAL_ERROR;
-		}
-		/*FALLTHROUGH*/
-	case 0:
-		/* select single proposal or reject it. */
-		if (ipsecdoi_selectph2proposal(iph2) < 0) {
-			error = ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN;
-			goto end;
-		}
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get proposal for responder.\n");
-		goto end;
-	}
-
-	/* check KE and attribute of PFS */
-	if (iph2->dhpub_p != NULL && iph2->approval->pfs_group == 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no PFS is specified, but peer sends KE.\n");
-		error = ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN;
-		goto end;
-	}
-	if (iph2->dhpub_p == NULL && iph2->approval->pfs_group != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"PFS is specified, but peer doesn't sends KE.\n");
-		error = ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN;
-		goto end;
-	}
-
-	/*
-	 * save the packet from the initiator in order to resend the
-	 * responder's first packet against this packet.
-	 */
-	iph2->msg1 = vdup(msg0);
-
-	/* change status of isakmp status entry */
-	iph2->status = PHASE2ST_STATUS2;
-
-	error = 0;
-
-end:
-	if (hbuf)
-		vfree(hbuf);
-	if (msg)
-		vfree(msg);
-	if (pbuf)
-		vfree(pbuf);
-
-	if (error) {
-		VPTRINIT(iph2->sa);
-		VPTRINIT(iph2->nonce_p);
-		VPTRINIT(iph2->dhpub_p);
-		VPTRINIT(iph2->id);
-		VPTRINIT(iph2->id_p);
-	}
-
-	return error;
-}
-
-/*
- * call pfkey_getspi.
- */
-int
-quick_r1prep(iph2, msg)
-	struct ph2handle *iph2;
-	vchar_t *msg;
-{
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* validity check */
-	if (iph2->status != PHASE2ST_STATUS2) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	iph2->status = PHASE2ST_GETSPISENT;
-
-	/* send getspi message */
-	if (pk_sendgetspi(iph2) < 0)
-		goto end;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "pfkey getspi sent.\n");
-
-	iph2->sce = sched_new(lcconf->wait_ph2complete,
-		pfkey_timeover_stub, iph2);
-
-	error = 0;
-
-end:
-	return error;
-}
-
-/*
- * send to initiator
- * 	HDR*, HASH(2), SA, Nr [, KE ] [, IDi2, IDr2 ]
- */
-int
-quick_r2send(iph2, msg)
-	struct ph2handle *iph2;
-	vchar_t *msg;
-{
-	vchar_t *body = NULL;
-	vchar_t *hash = NULL;
-	struct isakmp_gen *gen;
-	char *p;
-	int tlen;
-	int error = ISAKMP_INTERNAL_ERROR;
-	int pfsgroup;
-	u_int8_t *np_p = NULL;
-
-	/* validity check */
-	if (msg != NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"msg has to be NULL in this function.\n");
-		goto end;
-	}
-	if (iph2->status != PHASE2ST_GETSPIDONE) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	/* update responders SPI */
-	if (ipsecdoi_updatespi(iph2) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "failed to update spi.\n");
-		goto end;
-	}
-
-	/* generate NONCE value */
-	iph2->nonce = eay_set_random(iph2->ph1->rmconf->nonce_size);
-	if (iph2->nonce == NULL)
-		goto end;
-
-	/* generate KE value if need */
-	pfsgroup = iph2->approval->pfs_group;
-	if (iph2->dhpub_p != NULL && pfsgroup != 0) {
-		/* DH group settting if PFS is required. */
-		if (oakley_setdhgroup(pfsgroup, &iph2->pfsgrp) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to set DH value.\n");
-			goto end;
-		}
-		/* generate DH public value */
-		if (oakley_dh_generate(iph2->pfsgrp,
-				&iph2->dhpub, &iph2->dhpriv) < 0) {
-			goto end;
-		}
-	}
-
-	/* create SA;NONCE payload, and KE and ID if need */
-	tlen = sizeof(*gen) + iph2->sa_ret->l
-		+ sizeof(*gen) + iph2->nonce->l;
-	if (iph2->dhpub_p != NULL && pfsgroup != 0)
-		tlen += (sizeof(*gen) + iph2->dhpub->l);
-	if (iph2->id_p != NULL)
-		tlen += (sizeof(*gen) + iph2->id_p->l
-			+ sizeof(*gen) + iph2->id->l);
-
-	body = vmalloc(tlen);
-	if (body == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		goto end;
-	}
-	p = body->v;
-
-	/* make SA payload */ 
-	p = set_isakmp_payload(body->v, iph2->sa_ret, ISAKMP_NPTYPE_NONCE);
-
-	/* add NONCE payload */
-	np_p = &((struct isakmp_gen *)p)->np;	/* XXX */
-	p = set_isakmp_payload(p, iph2->nonce,
-		(iph2->dhpub_p != NULL && pfsgroup != 0)
-				? ISAKMP_NPTYPE_KE
-				: (iph2->id_p != NULL
-					? ISAKMP_NPTYPE_ID
-					: ISAKMP_NPTYPE_NONE));
-
-	/* add KE payload if need. */
-	if (iph2->dhpub_p != NULL && pfsgroup != 0) {
-		np_p = &((struct isakmp_gen *)p)->np;	/* XXX */
-		p = set_isakmp_payload(p, iph2->dhpub,
-			(iph2->id_p == NULL)
-				? ISAKMP_NPTYPE_NONE
-				: ISAKMP_NPTYPE_ID);
-	}
-
-	/* add ID payloads received. */
-	if (iph2->id_p != NULL) {
-		/* IDci */
-		p = set_isakmp_payload(p, iph2->id_p, ISAKMP_NPTYPE_ID);
-		/* IDcr */
-		np_p = &((struct isakmp_gen *)p)->np;	/* XXX */
-		p = set_isakmp_payload(p, iph2->id, ISAKMP_NPTYPE_NONE);
-	}
-
-	/* add a RESPONDER-LIFETIME notify payload if needed */
-    {
-	vchar_t *data = NULL;
-	struct saprop *pp = iph2->approval;
-	struct saproto *pr;
-
-	if (pp->claim & IPSECDOI_ATTR_SA_LD_TYPE_SEC) {
-		u_int32_t v = htonl((u_int32_t)pp->lifetime);
-		data = isakmp_add_attr_l(data, IPSECDOI_ATTR_SA_LD_TYPE,
-					IPSECDOI_ATTR_SA_LD_TYPE_SEC);
-		if (!data)
-			goto end;
-		data = isakmp_add_attr_v(data, IPSECDOI_ATTR_SA_LD,
-					(caddr_t)&v, sizeof(v));
-		if (!data)
-			goto end;
-	}
-	if (pp->claim & IPSECDOI_ATTR_SA_LD_TYPE_KB) {
-		u_int32_t v = htonl((u_int32_t)pp->lifebyte);
-		data = isakmp_add_attr_l(data, IPSECDOI_ATTR_SA_LD_TYPE,
-					IPSECDOI_ATTR_SA_LD_TYPE_KB);
-		if (!data)
-			goto end;
-		data = isakmp_add_attr_v(data, IPSECDOI_ATTR_SA_LD,
-					(caddr_t)&v, sizeof(v));
-		if (!data)
-			goto end;
-	}
-
-	/*
-	 * XXX Is there only single RESPONDER-LIFETIME payload in a IKE message
-	 * in the case of SA bundle ?
-	 */
-	if (data) {
-		for (pr = pp->head; pr; pr = pr->next) {
-			body = isakmp_add_pl_n(body, &np_p,
-					ISAKMP_NTYPE_RESPONDER_LIFETIME, pr, data);
-			if (!body) {
-				vfree(data);
-				return error;	/* XXX */
-			}
-		}
-		vfree(data);
-	}
-    }
-
-	/* generate HASH(2) */
-    {
-	vchar_t *tmp;
-
-	tmp = vmalloc(iph2->nonce_p->l + body->l);
-	if (tmp == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get hash buffer.\n");
-		goto end;
-	}
-	memcpy(tmp->v, iph2->nonce_p->v, iph2->nonce_p->l);
-	memcpy(tmp->v + iph2->nonce_p->l, body->v, body->l);
-
-	hash = oakley_compute_hash1(iph2->ph1, iph2->msgid, tmp);
-	vfree(tmp);
-
-	if (hash == NULL)
-		goto end;
-    }
-
-	/* send isakmp payload */
-	iph2->sendbuf = quick_ir1mx(iph2, body, hash);
-	if (iph2->sendbuf == NULL)
-		goto end;
-
-	/* send the packet, add to the schedule to resend */
-	iph2->retry_counter = iph2->ph1->rmconf->retry_counter;
-	if (isakmp_ph2resend(iph2) == -1)
-		goto end;
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph2->ph1->remote, iph2->ph1->local, iph2->sendbuf, iph2->msg1) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	/* change status of isakmp status entry */
-	iph2->status = PHASE2ST_MSG1SENT;
-
-	error = 0;
-
-end:
-	if (body != NULL)
-		vfree(body);
-	if (hash != NULL)
-		vfree(hash);
-
-	return error;
-}
-
-/*
- * receive from initiator
- * 	HDR*, HASH(3)
- */
-int
-quick_r3recv(iph2, msg0)
-	struct ph2handle *iph2;
-	vchar_t *msg0;
-{
-	vchar_t *msg = NULL;
-	vchar_t *pbuf = NULL;	/* for payload parsing */
-	struct isakmp_parse_t *pa;
-	struct isakmp_pl_hash *hash = NULL;
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* validity check */
-	if (iph2->status != PHASE2ST_MSG1SENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	/* decrypt packet */
-	if (!ISSET(((struct isakmp *)msg0->v)->flags, ISAKMP_FLAG_E)) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"Packet wasn't encrypted.\n");
-		goto end;
-	}
-	msg = oakley_do_decrypt(iph2->ph1, msg0, iph2->ivm->iv, iph2->ivm->ive);
-	if (msg == NULL)
-		goto end;
-
-	/* validate the type of next payload */
-	pbuf = isakmp_parse(msg);
-	if (pbuf == NULL)
-		goto end;
-
-	for (pa = (struct isakmp_parse_t *)pbuf->v;
-	     pa->type != ISAKMP_NPTYPE_NONE;
-	     pa++) {
-
-		switch (pa->type) {
-		case ISAKMP_NPTYPE_HASH:
-			hash = (struct isakmp_pl_hash *)pa->ptr;
-			break;
-		case ISAKMP_NPTYPE_N:
-			isakmp_check_notify(pa->ptr, iph2->ph1);
-			break;
-		default:
-			/* don't send information, see ident_r1recv() */
-			plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-				"ignore the packet, "
-				"received unexpecting payload type %d.\n",
-				pa->type);
-			goto end;
-		}
-	}
-
-	/* payload existency check */
-	if (hash == NULL) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"few isakmp message received.\n");
-		goto end;
-	}
-
-	/* validate HASH(3) */
-	/* HASH(3) = prf(SKEYID_a, 0 | M-ID | Ni_b | Nr_b) */
-    {
-	char *r_hash;
-	vchar_t *my_hash = NULL;
-	vchar_t *tmp = NULL;
-	int result;
-
-	r_hash = (char *)hash + sizeof(*hash);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH(3) validate:");
-	plogdump(LLV_DEBUG, r_hash, ntohs(hash->h.len) - sizeof(*hash));
-
-	tmp = vmalloc(iph2->nonce_p->l + iph2->nonce->l);
-	if (tmp == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get hash buffer.\n");
-		goto end;
-	}
-	memcpy(tmp->v, iph2->nonce_p->v, iph2->nonce_p->l);
-	memcpy(tmp->v + iph2->nonce_p->l, iph2->nonce->v, iph2->nonce->l);
-
-	my_hash = oakley_compute_hash3(iph2->ph1, iph2->msgid, tmp);
-	vfree(tmp);
-	if (my_hash == NULL)
-		goto end;
-
-	result = memcmp(my_hash->v, r_hash, my_hash->l);
-	vfree(my_hash);
-
-	if (result) {
-		plog(LLV_ERROR, LOCATION, iph2->ph1->remote,
-			"HASH(3) mismatch.\n");
-		error = ISAKMP_NTYPE_INVALID_HASH_INFORMATION;
-		goto end;
-	}
-    }
-
-	/* if there is commit bit, don't set up SA now. */
-	if (ISSET(iph2->flags, ISAKMP_FLAG_C)) {
-		iph2->status = PHASE2ST_COMMIT;
-	} else
-		iph2->status = PHASE2ST_STATUS6;
-
-	error = 0;
-
-end:
-	if (pbuf != NULL)
-		vfree(pbuf);
-	if (msg != NULL)
-		vfree(msg);
-
-	return error;
-}
-
-/*
- * send to initiator
- * 	HDR#*, HASH(4), notify
- */
-int
-quick_r3send(iph2, msg0)
-	struct ph2handle *iph2;
-	vchar_t *msg0;
-{
-	vchar_t *buf = NULL;
-	vchar_t *myhash = NULL;
-	struct isakmp_pl_n *n;
-	vchar_t *notify = NULL;
-	char *p;
-	int tlen;
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* validity check */
-	if (iph2->status != PHASE2ST_COMMIT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	/* generate HASH(4) */
-	/* XXX What can I do in the case of multiple different SA */
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH(4) generate\n");
-
-	/* XXX What should I do if there are multiple SAs ? */
-	tlen = sizeof(struct isakmp_pl_n) + iph2->approval->head->spisize;
-	notify = vmalloc(tlen);
-	if (notify == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get notify buffer.\n");
-		goto end;
-	}
-	n = (struct isakmp_pl_n *)notify->v;
-	n->h.np = ISAKMP_NPTYPE_NONE;
-	n->h.len = htons(tlen);
-	n->doi = htonl(IPSEC_DOI);
-	n->proto_id = iph2->approval->head->proto_id;
-	n->spi_size = sizeof(iph2->approval->head->spisize);
-	n->type = htons(ISAKMP_NTYPE_CONNECTED);
-	memcpy(n + 1, &iph2->approval->head->spi, iph2->approval->head->spisize);
-
-	myhash = oakley_compute_hash1(iph2->ph1, iph2->msgid, notify);
-	if (myhash == NULL)
-		goto end;
-
-	/* create buffer for isakmp payload */
-	tlen = sizeof(struct isakmp)
-		+ sizeof(struct isakmp_gen) + myhash->l
-		+ notify->l;
-	buf = vmalloc(tlen);
-	if (buf == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		goto end;
-	}
-
-	/* create isakmp header */
-	p = set_isakmp_header2(buf, iph2, ISAKMP_NPTYPE_HASH);
-	if (p == NULL)
-		goto end;
-
-	/* add HASH(4) payload */
-	p = set_isakmp_payload(p, myhash, ISAKMP_NPTYPE_N);
-
-	/* add notify payload */
-	memcpy(p, notify->v, notify->l);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(buf, iph2->ph1->local, iph2->ph1->remote, 1);
-#endif
-
-	/* encoding */
-	iph2->sendbuf = oakley_do_encrypt(iph2->ph1, buf, iph2->ivm->ive, iph2->ivm->iv);
-	if (iph2->sendbuf == NULL)
-		goto end;
-
-	/* send the packet */
-	if (isakmp_send(iph2->ph1, iph2->sendbuf) < 0)
-		goto end;
-
-	/* the sending message is added to the received-list. */
-	if (add_recvdpkt(iph2->ph1->remote, iph2->ph1->local, iph2->sendbuf, msg0) == -1) {
-		plog(LLV_ERROR , LOCATION, NULL,
-			"failed to add a response packet to the tree.\n");
-		goto end;
-	}
-
-	iph2->status = PHASE2ST_COMMIT;
-
-	error = 0;
-
-end:
-	if (buf != NULL)
-		vfree(buf);
-	if (myhash != NULL)
-		vfree(myhash);
-	if (notify != NULL)
-		vfree(notify);
-
-	return error;
-}
-
-int
-tunnel_mode_prop(p)
-	struct saprop *p;
-{
-	struct saproto *pr;
-
-	for (pr = p->head; pr; pr = pr->next)
-		if (pr->encmode == IPSECDOI_ATTR_ENC_MODE_TUNNEL)
-			return 1;
-	return 0;
-}
-
-/*
- * set SA to kernel.
- */
-int
-quick_r3prep(iph2, msg0)
-	struct ph2handle *iph2;
-	vchar_t *msg0;
-{
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* validity check */
-	if (iph2->status != PHASE2ST_STATUS6) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatched %d.\n", iph2->status);
-		goto end;
-	}
-
-	/* compute both of KEYMATs */
-	if (oakley_compute_keymat(iph2, RESPONDER) < 0)
-		goto end;
-
-	iph2->status = PHASE2ST_ADDSA;
-	iph2->flags ^= ISAKMP_FLAG_C;	/* reset bit */
-
-	/* don't anything if local test mode. */
-	if (f_local) {
-		error = 0;
-		goto end;
-	}
-
-	/* Do UPDATE as responder */
-	plog(LLV_DEBUG, LOCATION, NULL, "call pk_sendupdate\n");
-	if (pk_sendupdate(iph2) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "pfkey update failed.\n");
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "pfkey update sent.\n");
-
-	/* Do ADD for responder */
-	if (pk_sendadd(iph2) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL, "pfkey add failed.\n");
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "pfkey add sent.\n");
-
-	/*
-	 * set policies into SPD if the policy is generated
-	 * from peer's policy.
-	 */
-	if (iph2->spidx_gen) {
-
-		struct policyindex *spidx;
-		struct sockaddr_storage addr;
-		u_int8_t pref;
-		struct sockaddr *src = iph2->src;
-		struct sockaddr *dst = iph2->dst;
-
-		/* make inbound policy */
-		iph2->src = dst;
-		iph2->dst = src;
-		if (pk_sendspdupdate2(iph2) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"pfkey spdupdate2(inbound) failed.\n");
-			goto end;
-		}
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"pfkey spdupdate2(inbound) sent.\n");
-
-		spidx = (struct policyindex *)iph2->spidx_gen;
-#ifdef HAVE_POLICY_FWD
-		/* make forward policy if required */
-		if (tunnel_mode_prop(iph2->approval)) {
-			spidx->dir = IPSEC_DIR_FWD;
-			if (pk_sendspdupdate2(iph2) < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"pfkey spdupdate2(forward) failed.\n");
-				goto end;
-			}
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"pfkey spdupdate2(forward) sent.\n");
-		}
-#endif
-
-		/* make outbound policy */
-		iph2->src = src;
-		iph2->dst = dst;
-		spidx->dir = IPSEC_DIR_OUTBOUND;
-		addr = spidx->src;
-		spidx->src = spidx->dst;
-		spidx->dst = addr;
-		pref = spidx->prefs;
-		spidx->prefs = spidx->prefd;
-		spidx->prefd = pref;
-
-		if (pk_sendspdupdate2(iph2) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"pfkey spdupdate2(outbound) failed.\n");
-			goto end;
-		}
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"pfkey spdupdate2(outbound) sent.\n");
-
-		/* spidx_gen is unnecessary any more */
-		delsp_bothdir((struct policyindex *)iph2->spidx_gen);
-		racoon_free(iph2->spidx_gen);
-		iph2->spidx_gen = NULL;
-		iph2->generated_spidx=1;
-	}
-
-	error = 0;
-
-end:
-	return error;
-}
-
-/*
- * create HASH, body (SA, NONCE) payload with isakmp header.
- */
-static vchar_t *
-quick_ir1mx(iph2, body, hash)
-	struct ph2handle *iph2;
-	vchar_t *body, *hash;
-{
-	struct isakmp *isakmp;
-	vchar_t *buf = NULL, *new = NULL;
-	char *p;
-	int tlen;
-	struct isakmp_gen *gen;
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* create buffer for isakmp payload */
-	tlen = sizeof(*isakmp)
-		+ sizeof(*gen) + hash->l
-		+ body->l;
-	buf = vmalloc(tlen);
-	if (buf == NULL) { 
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send.\n");
-		goto end;
-	}
-
-	/* re-set encryption flag, for serurity. */
-	iph2->flags |= ISAKMP_FLAG_E;
-
-	/* set isakmp header */
-	p = set_isakmp_header2(buf, iph2, ISAKMP_NPTYPE_HASH);
-	if (p == NULL)
-		goto end;
-
-	/* add HASH payload */
-	/* XXX is next type always SA ? */
-	p = set_isakmp_payload(p, hash, ISAKMP_NPTYPE_SA);
-
-	/* add body payload */
-	memcpy(p, body->v, body->l);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(buf, iph2->ph1->local, iph2->ph1->remote, 1);
-#endif
-
-	/* encoding */
-	new = oakley_do_encrypt(iph2->ph1, buf, iph2->ivm->ive, iph2->ivm->iv);
-	
-	if (new == NULL)
-		goto end;
-
-	vfree(buf);
-
-	buf = new;
-
-	error = 0;
-
-end:
-	if (error && buf != NULL) {
-		vfree(buf);
-		buf = NULL;
-	}
-
-	return buf;
-}
-
-/*
- * get remote's sainfo.
- * NOTE: this function is for responder.
- */
-static int
-get_sainfo_r(iph2)
-	struct ph2handle *iph2;
-{
-	vchar_t *idsrc = NULL, *iddst = NULL;
-	int prefixlen;
-	int error = ISAKMP_INTERNAL_ERROR;
-	int remoteid = 0;
-
-	if (iph2->id == NULL) {
-		switch (iph2->src->sa_family) {
-		case AF_INET:
-			prefixlen = sizeof(struct in_addr) << 3;
-			break;
-		case AF_INET6:
-			prefixlen = sizeof(struct in6_addr) << 3;
-			break;
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid family: %d\n", iph2->src->sa_family);
-			goto end;
-		}
-		idsrc = ipsecdoi_sockaddr2id(iph2->src, prefixlen,
-					IPSEC_ULPROTO_ANY);
-	} else {
-		idsrc = vdup(iph2->id);
-	}
-	if (idsrc == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to set ID for source.\n");
-		goto end;
-	}
-
-	if (iph2->id_p == NULL) {
-		switch (iph2->dst->sa_family) {
-		case AF_INET:
-			prefixlen = sizeof(struct in_addr) << 3;
-			break;
-		case AF_INET6:
-			prefixlen = sizeof(struct in6_addr) << 3;
-			break;
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid family: %d\n", iph2->dst->sa_family);
-			goto end;
-		}
-		iddst = ipsecdoi_sockaddr2id(iph2->dst, prefixlen,
-					IPSEC_ULPROTO_ANY);
-	} else {
-		iddst = vdup(iph2->id_p);
-	}
-	if (iddst == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to set ID for destination.\n");
-		goto end;
-	}
-
-	{
-		struct remoteconf *conf;
-		conf = getrmconf(iph2->dst);
-		if (conf != NULL)
-			remoteid=conf->ph1id;
-		else{
-			plog(LLV_DEBUG, LOCATION, NULL, "Warning: no valid rmconf !\n");
-			remoteid=0;
-		}
-		
-	}
-
-	iph2->sainfo = getsainfo(idsrc, iddst, iph2->ph1->id_p, remoteid);
-	if (iph2->sainfo == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get sainfo.\n");
-		goto end;
-	}
-
-#ifdef ENABLE_HYBRID
-	/* xauth group inclusion check */
-	if (iph2->sainfo->group != NULL)
-		if(group_check(iph2->ph1,&iph2->sainfo->group->v,1))
-			goto end;
-#endif
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"selected sainfo: %s\n", sainfo2str(iph2->sainfo));
-
-	error = 0;
-end:
-	if (idsrc)
-		vfree(idsrc);
-	if (iddst)
-		vfree(iddst);
-
-	return error;
-}
-
-/*
- * Copy both IP addresses in ID payloads into [src,dst]_id if both ID types
- * are IP address and same address family.
- * Then get remote's policy from SPD copied from kernel.
- * If the type of ID payload is address or subnet type, then the index is
- * made from the payload.  If there is no ID payload, or the type of ID
- * payload is NOT address type, then the index is made from the address
- * pair of phase 1.
- * NOTE: This function is only for responder.
- */
-static int
-get_proposal_r(iph2)
-	struct ph2handle *iph2;
-{
-	struct policyindex spidx;
-	struct secpolicy *sp_in, *sp_out;
-	int idi2type = 0;	/* switch whether copy IDs into id[src,dst]. */
-	int error = ISAKMP_INTERNAL_ERROR;
-
-	/* check the existence of ID payload */
-	if ((iph2->id_p != NULL && iph2->id == NULL)
-	 || (iph2->id_p == NULL && iph2->id != NULL)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Both IDs wasn't found in payload.\n");
-		return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-	}
-
-	/* make sure if id[src,dst] is null. */
-	if (iph2->src_id || iph2->dst_id) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Why do ID[src,dst] exist already.\n");
-		return ISAKMP_INTERNAL_ERROR;
-	}
-
-	memset(&spidx, 0, sizeof(spidx));
-
-#define _XIDT(d) ((struct ipsecdoi_id_b *)(d)->v)->type
-
-	/* make a spidx; a key to search SPD */
-	spidx.dir = IPSEC_DIR_INBOUND;
-	spidx.ul_proto = 0;
-
-	/*
-	 * make destination address in spidx from either ID payload
-	 * or phase 1 address into a address in spidx.
-	 */
-	if (iph2->id != NULL
-	 && (_XIDT(iph2->id) == IPSECDOI_ID_IPV4_ADDR
-	  || _XIDT(iph2->id) == IPSECDOI_ID_IPV6_ADDR
-	  || _XIDT(iph2->id) == IPSECDOI_ID_IPV4_ADDR_SUBNET
-	  || _XIDT(iph2->id) == IPSECDOI_ID_IPV6_ADDR_SUBNET)) {
-		/* get a destination address of a policy */
-		error = ipsecdoi_id2sockaddr(iph2->id,
-				(struct sockaddr *)&spidx.dst,
-				&spidx.prefd, &spidx.ul_proto);
-		if (error)
-			return error;
-
-#ifdef INET6
-		/*
-		 * get scopeid from the SA address.
-		 * note that the phase 1 source address is used as
-		 * a destination address to search for a inbound policy entry
-		 * because rcoon is responder.
-		 */
-		if (_XIDT(iph2->id) == IPSECDOI_ID_IPV6_ADDR) {
-			error = setscopeid((struct sockaddr *)&spidx.dst,
-			                    iph2->src);
-			if (error)
-				return error;
-		}
-#endif
-
-		if (_XIDT(iph2->id) == IPSECDOI_ID_IPV4_ADDR
-		 || _XIDT(iph2->id) == IPSECDOI_ID_IPV6_ADDR)
-			idi2type = _XIDT(iph2->id);
-
-	} else {
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"get a destination address of SP index "
-			"from phase1 address "
-			"due to no ID payloads found "
-			"OR because ID type is not address.\n");
-
-		/*
-		 * copy the SOURCE address of IKE into the DESTINATION address
-		 * of the key to search the SPD because the direction of policy
-		 * is inbound.
-		 */
-		memcpy(&spidx.dst, iph2->src, sysdep_sa_len(iph2->src));
-		switch (spidx.dst.ss_family) {
-		case AF_INET:
-			spidx.prefd = sizeof(struct in_addr) << 3;
-			break;
-#ifdef INET6
-		case AF_INET6:
-			spidx.prefd = sizeof(struct in6_addr) << 3;
-			break;
-#endif
-		default:
-			spidx.prefd = 0;
-			break;
-		}
-	}
-
-	/* make source address in spidx */
-	if (iph2->id_p != NULL
-	 && (_XIDT(iph2->id_p) == IPSECDOI_ID_IPV4_ADDR
-	  || _XIDT(iph2->id_p) == IPSECDOI_ID_IPV6_ADDR
-	  || _XIDT(iph2->id_p) == IPSECDOI_ID_IPV4_ADDR_SUBNET
-	  || _XIDT(iph2->id_p) == IPSECDOI_ID_IPV6_ADDR_SUBNET)) {
-		/* get a source address of inbound SA */
-		error = ipsecdoi_id2sockaddr(iph2->id_p,
-				(struct sockaddr *)&spidx.src,
-				&spidx.prefs, &spidx.ul_proto);
-		if (error)
-			return error;
-
-#ifdef INET6
-		/*
-		 * get scopeid from the SA address.
-		 * for more detail, see above of this function.
-		 */
-		if (_XIDT(iph2->id_p) == IPSECDOI_ID_IPV6_ADDR) {
-			error = setscopeid((struct sockaddr *)&spidx.src,
-			                    iph2->dst);
-			if (error)
-				return error;
-		}
-#endif
-
-		/* make id[src,dst] if both ID types are IP address and same */
-		if (_XIDT(iph2->id_p) == idi2type
-		 && spidx.dst.ss_family == spidx.src.ss_family) {
-			iph2->src_id = dupsaddr((struct sockaddr *)&spidx.dst);
-			if (iph2->src_id  == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				    "buffer allocation failed.\n");
-				return ISAKMP_INTERNAL_ERROR;
-			}
-			iph2->dst_id = dupsaddr((struct sockaddr *)&spidx.src);
-			if (iph2->dst_id  == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				    "buffer allocation failed.\n");
-				return ISAKMP_INTERNAL_ERROR;
-			}
-		}
-
-	} else {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"get a source address of SP index "
-			"from phase1 address "
-			"due to no ID payloads found "
-			"OR because ID type is not address.\n");
-
-		/* see above comment. */
-		memcpy(&spidx.src, iph2->dst, sysdep_sa_len(iph2->dst));
-		switch (spidx.src.ss_family) {
-		case AF_INET:
-			spidx.prefs = sizeof(struct in_addr) << 3;
-			break;
-#ifdef INET6
-		case AF_INET6:
-			spidx.prefs = sizeof(struct in6_addr) << 3;
-			break;
-#endif
-		default:
-			spidx.prefs = 0;
-			break;
-		}
-	}
-
-#undef _XIDT
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"get a src address from ID payload "
-		"%s prefixlen=%u ul_proto=%u\n",
-		saddr2str((struct sockaddr *)&spidx.src),
-		spidx.prefs, spidx.ul_proto);
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"get dst address from ID payload "
-		"%s prefixlen=%u ul_proto=%u\n",
-		saddr2str((struct sockaddr *)&spidx.dst),
-		spidx.prefd, spidx.ul_proto);
-
-	/*
-	 * convert the ul_proto if it is 0
-	 * because 0 in ID payload means a wild card.
-	 */
-	if (spidx.ul_proto == 0)
-		spidx.ul_proto = IPSEC_ULPROTO_ANY;
-
-#ifdef HAVE_SECCTX
-	/*
-	 * Need to use security context in spidx to ensure the correct
-	 * policy is selected. The only way to get the security context
-	 * is to look into the proposal sent by peer ahead of time.
-	 */
-	if (get_security_context(iph2->sa, &spidx)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "error occurred trying to get security context.\n");
-		return ISAKMP_INTERNAL_ERROR;
-	}
-#endif /* HAVE_SECCTX */
-
-	/* get inbound policy */
-	sp_in = getsp_r(&spidx);
-	if (sp_in == NULL) {
-		if (iph2->ph1->rmconf->gen_policy) {
-			plog(LLV_INFO, LOCATION, NULL,
-				"no policy found, "
-				"try to generate the policy : %s\n",
-				spidx2str(&spidx));
-			iph2->spidx_gen = racoon_malloc(sizeof(spidx));
-			if (!iph2->spidx_gen) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"buffer allocation failed.\n");
-				return ISAKMP_INTERNAL_ERROR;
-			}
-			memcpy(iph2->spidx_gen, &spidx, sizeof(spidx));
-			return -2;	/* special value */
-		}
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no policy found: %s\n", spidx2str(&spidx));
-		return ISAKMP_INTERNAL_ERROR;
-	}
-	/* Refresh existing generated policies
-	 */
-	if (iph2->ph1->rmconf->gen_policy) {
-		plog(LLV_INFO, LOCATION, NULL,
-			 "Update the generated policy : %s\n",
-			 spidx2str(&spidx));
-		iph2->spidx_gen = racoon_malloc(sizeof(spidx));
-		if (!iph2->spidx_gen) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				 "buffer allocation failed.\n");
-			return ISAKMP_INTERNAL_ERROR;
-		}
-		memcpy(iph2->spidx_gen, &spidx, sizeof(spidx));
-	}
-
-	/* get outbound policy */
-    {
-	struct sockaddr_storage addr;
-	u_int8_t pref;
-
-	spidx.dir = IPSEC_DIR_OUTBOUND;
-	addr = spidx.src;
-	spidx.src = spidx.dst;
-	spidx.dst = addr;
-	pref = spidx.prefs;
-	spidx.prefs = spidx.prefd;
-	spidx.prefd = pref;
-
-	sp_out = getsp_r(&spidx);
-	if (!sp_out) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"no outbound policy found: %s\n",
-			spidx2str(&spidx));
-	}
-    }
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"suitable SP found:%s\n", spidx2str(&spidx));
-
-	/*
-	 * In the responder side, the inbound policy should be using IPsec.
-	 * outbound policy is not checked currently.
-	 */
-	if (sp_in->policy != IPSEC_POLICY_IPSEC) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"policy found, but no IPsec required: %s\n",
-			spidx2str(&spidx));
-		return ISAKMP_INTERNAL_ERROR;
-	}
-
-	/* set new proposal derived from a policy into the iph2->proposal. */
-	if (set_proposal_from_policy(iph2, sp_in, sp_out) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to create saprop.\n");
-		return ISAKMP_INTERNAL_ERROR;
-	}
-
-#ifdef HAVE_SECCTX
-	if (spidx.sec_ctx.ctx_str) {
-		set_secctx_in_proposal(iph2, spidx);
-	}
-#endif /* HAVE_SECCTX */
-
-	return 0;
-}
-
diff --git a/src/racoon/isakmp_quick.h b/src/racoon/isakmp_quick.h
deleted file mode 100644
index 71eeecf..0000000
--- a/src/racoon/isakmp_quick.h
+++ /dev/null
@@ -1,50 +0,0 @@
-/*	$NetBSD: isakmp_quick.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: isakmp_quick.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ISAKMP_QUICK_H
-#define _ISAKMP_QUICK_H
-
-extern int quick_i1prep __P((struct ph2handle *, vchar_t *));
-extern int quick_i1send __P((struct ph2handle *, vchar_t *));
-extern int quick_i2recv __P((struct ph2handle *, vchar_t *));
-extern int quick_i2send __P((struct ph2handle *, vchar_t *));
-extern int quick_i3recv __P((struct ph2handle *, vchar_t *));
-
-extern int quick_r1recv __P((struct ph2handle *, vchar_t *));
-extern int quick_r1prep __P((struct ph2handle *, vchar_t *));
-extern int quick_r2send __P((struct ph2handle *, vchar_t *));
-extern int quick_r3recv __P((struct ph2handle *, vchar_t *));
-extern int quick_r3send __P((struct ph2handle *, vchar_t *));
-extern int quick_r3prep __P((struct ph2handle *, vchar_t *));
-
-#endif /* _ISAKMP_QUICK_H */
diff --git a/src/racoon/isakmp_unity.c b/src/racoon/isakmp_unity.c
deleted file mode 100644
index 7a332e3..0000000
--- a/src/racoon/isakmp_unity.c
+++ /dev/null
@@ -1,411 +0,0 @@
-/*	$NetBSD: isakmp_unity.c,v 1.7 2006/10/09 06:17:20 manu Exp $	*/
-
-/* Id: isakmp_unity.c,v 1.10 2006/07/31 04:49:23 manubsd Exp */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/queue.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <fcntl.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#include <netdb.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <ctype.h>
-#include <resolv.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "schedule.h"
-#include "debug.h"
-
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "handler.h"
-#include "isakmp_xauth.h"
-#include "isakmp_unity.h"
-#include "isakmp_cfg.h"
-#include "strnames.h"
-
-static vchar_t *isakmp_cfg_split(struct ph1handle *, 
-    struct isakmp_data *, struct unity_netentry*,int);
-
-vchar_t *
-isakmp_unity_req(iph1, attr)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-{
-	int type;
-	vchar_t *reply_attr = NULL;
-
-	if ((iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_UNITY) == 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Unity mode config request but the peer "
-		    "did not declare itself as  unity compliant\n");
-		return NULL;
-	}
-
-	type = ntohs(attr->type);
-
-	/* Handle short attributes */
-	if ((type & ISAKMP_GEN_MASK) == ISAKMP_GEN_TV) {
-		type &= ~ISAKMP_GEN_MASK;
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-		     "Short attribute %s = %d\n", 
-		     s_isakmp_cfg_type(type), ntohs(attr->lorv));
-
-		switch (type) {
-		default:
-			plog(LLV_DEBUG, LOCATION, NULL,
-			     "Ignored short attribute %s\n",
-			     s_isakmp_cfg_type(type));
-			break;
-		}
-
-		return reply_attr;
-	}
-
-	switch(type) {
-	case UNITY_BANNER: {
-#define MAXMOTD 65536
-		char buf[MAXMOTD + 1];
-		int fd;
-		char *filename = &isakmp_cfg_config.motd[0];
-		int len;
-
-		if ((fd = open(filename, O_RDONLY, 0)) == -1) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot open \"%s\"\n", filename);
-			return NULL;
-		}
-
-		if ((len = read(fd, buf, MAXMOTD)) == -1) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot read \"%s\"\n", filename);
-			close(fd);
-			return NULL;
-		}
-		close(fd);
-
-		buf[len] = '\0';
-		reply_attr = isakmp_cfg_string(iph1, attr, buf);
-
-		break;
-	}
-
-	case UNITY_PFS:
-		reply_attr = isakmp_cfg_short(iph1, attr, 
-		    isakmp_cfg_config.pfs_group);
-		break;
-
-	case UNITY_SAVE_PASSWD:
-		reply_attr = isakmp_cfg_short(iph1, attr, 
-		    isakmp_cfg_config.save_passwd);
-		break;
-
-	case UNITY_DDNS_HOSTNAME:
-		reply_attr = isakmp_cfg_copy(iph1, attr);
-		break;
-
-	case UNITY_DEF_DOMAIN:
-		reply_attr = isakmp_cfg_string(iph1, 
-		    attr, isakmp_cfg_config.default_domain);
-		break;
-
-	case UNITY_SPLIT_INCLUDE:
-		if(isakmp_cfg_config.splitnet_type == UNITY_SPLIT_INCLUDE)
-			reply_attr = isakmp_cfg_split(iph1, attr,
-			isakmp_cfg_config.splitnet_list,
-			isakmp_cfg_config.splitnet_count);
-		else
-			return NULL;
-		break;
-	case UNITY_LOCAL_LAN:
-		if(isakmp_cfg_config.splitnet_type == UNITY_LOCAL_LAN)
-			reply_attr = isakmp_cfg_split(iph1, attr,
-			isakmp_cfg_config.splitnet_list,
-			isakmp_cfg_config.splitnet_count);
-		else
-			return NULL;
-		break;
-	case UNITY_SPLITDNS_NAME:
-		reply_attr = isakmp_cfg_varlen(iph1, attr,
-				isakmp_cfg_config.splitdns_list,
-				isakmp_cfg_config.splitdns_len);
-		break;
-	case UNITY_FW_TYPE:
-	case UNITY_NATT_PORT:
-	case UNITY_BACKUP_SERVERS:
-	default:
-		plog(LLV_DEBUG, LOCATION, NULL,
-		     "Ignored attribute %s\n", s_isakmp_cfg_type(type));
-		return NULL;
-		break;
-	}
-
-	return reply_attr;
-}
-
-void
-isakmp_unity_reply(iph1, attr)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-{
-	int type = ntohs(attr->type);
-	int alen = ntohs(attr->lorv);
-
-	struct unity_network *network = (struct unity_network *)(attr + 1);
-	int index = 0;
-	int count = 0;
-
-	switch(type) {
-	case UNITY_SPLIT_INCLUDE:
-	{
-		if (alen)
-			count = alen / sizeof(struct unity_network);
-
-		for(;index < count; index++)
-			splitnet_list_add(
-				&iph1->mode_cfg->split_include,
-				&network[index],
-				&iph1->mode_cfg->include_count);
-
-		iph1->mode_cfg->flags |= ISAKMP_CFG_GOT_SPLIT_INCLUDE;
-		break;
-	}
-	case UNITY_LOCAL_LAN:
-	{
-		if (alen)
-			count = alen / sizeof(struct unity_network);
-
-		for(;index < count; index++)
-			splitnet_list_add(
-				&iph1->mode_cfg->split_local,
-				&network[index],
-				&iph1->mode_cfg->local_count);
-
-		iph1->mode_cfg->flags |= ISAKMP_CFG_GOT_SPLIT_LOCAL;
-		break;
-	}
-	case UNITY_SPLITDNS_NAME:
-	case UNITY_BANNER:
-	case UNITY_SAVE_PASSWD:
-	case UNITY_NATT_PORT:
-	case UNITY_PFS:
-	case UNITY_FW_TYPE:
-	case UNITY_BACKUP_SERVERS:
-	case UNITY_DDNS_HOSTNAME:
-	default:
-		plog(LLV_WARNING, LOCATION, NULL,
-		     "Ignored attribute %s\n",
-		     s_isakmp_cfg_type(type));
-		break;
-	}
-	return;
-}
-
-static vchar_t *
-isakmp_cfg_split(iph1, attr, netentry, count)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-	struct unity_netentry *netentry;
-	int count;
-{
-	vchar_t *buffer;
-	struct isakmp_data *new;
-	struct unity_network * network;
-	size_t len;
-	int index = 0;
-
-	char tmp1[40];
-	char tmp2[40];
-
-	len = sizeof(struct unity_network) * count;
-	if ((buffer = vmalloc(sizeof(*attr) + len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate memory\n");
-		return NULL;
-	}
-
-	new = (struct isakmp_data *)buffer->v;
-	new->type = attr->type;
-	new->lorv = htons(len);
-
-	network = (struct unity_network *)(new + 1);
-	for (; index < count; index++) {
-
-		memcpy(&network[index],
-			&netentry->network,
-			sizeof(struct unity_network));
-
-		inet_ntop(AF_INET, &netentry->network.addr4, tmp1, 40);
-		inet_ntop(AF_INET, &netentry->network.mask4, tmp2, 40);
-		plog(LLV_DEBUG, LOCATION, NULL, "splitnet: %s/%s\n", tmp1, tmp2);
-
-		netentry = netentry->next;
-	}
-
-	return buffer;
-}
-
-int  splitnet_list_add(list, network, count)
-	struct unity_netentry ** list;
-	struct unity_network * network;
-	int *count;
-{
-	struct unity_netentry * newentry;
-
-	/*
-	 * allocate new netentry and copy
-         * new splitnet network data
-	 */
-	newentry = (struct unity_netentry *)
-		racoon_malloc(sizeof(struct unity_netentry));
-	if (newentry == NULL)
-		return -1;
-
-	memcpy(&newentry->network,network,
-		sizeof(struct unity_network));
-	newentry->next = NULL;
-
-	/*
-	 * locate the last netentry in our
-	 * splitnet list and add our entry
-	 */
-	if (*list == NULL)
-		*list = newentry;
-	else {
-		struct unity_netentry * tmpentry = *list;
-		while (tmpentry->next != NULL)
-			tmpentry = tmpentry->next;
-		tmpentry->next = newentry;
-	}
-
-	(*count)++;
-
-	return 0;
-}
-
-void splitnet_list_free(list, count)
-	struct unity_netentry * list;
-	int *count;
-{
-	struct unity_netentry * netentry = list;
-	struct unity_netentry * delentry;
-
-	*count = 0;
-
-	while (netentry != NULL) {
-		delentry = netentry;
-		netentry = netentry->next;
-		racoon_free(delentry);
-	}
-}
-
-char * splitnet_list_2str(list, splitnet_ipaddr)
-	struct unity_netentry * list;
-	enum splinet_ipaddr splitnet_ipaddr;
-{
-	struct unity_netentry * netentry;
-	char tmp1[40];
-	char tmp2[40];
-	char * str;
-	int len;
-
-	/* determine string length */
-	len = 1;
-	netentry = list;
-	while (netentry != NULL) {
-
-		inet_ntop(AF_INET, &netentry->network.addr4, tmp1, 40);
-		inet_ntop(AF_INET, &netentry->network.mask4, tmp2, 40);
-		len += strlen(tmp1);
-		len += strlen(tmp2);
-		len += 2;
-
-		netentry = netentry->next;
-	}
-
-	/* allocate network list string */
-	str = racoon_malloc(len);
-	if (str == NULL)
-		return NULL;
-
-	/* create network list string */
-	len = 0;
-	netentry = list;
-	while (netentry != NULL) {
-
-		inet_ntop(AF_INET, &netentry->network.addr4, tmp1, 40);
-		inet_ntop(AF_INET, &netentry->network.mask4, tmp2, 40);
-		if (splitnet_ipaddr == CIDR) {
-			uint32_t tmp3;
-			int cidrmask;
-
-			tmp3 = ntohl(netentry->network.mask4.s_addr);
-			for (cidrmask = 0; tmp3 != 0; cidrmask++)
-				tmp3 <<= 1;
-			len += sprintf(str+len, "%s/%d ", tmp1, cidrmask);
-		} else {
-			len += sprintf(str+len, "%s/%s ", tmp1, tmp2);
-		}
-
-		netentry = netentry->next;
-	}
-
-	str[len]=0;
-
-	return str;
-}
diff --git a/src/racoon/isakmp_unity.h b/src/racoon/isakmp_unity.h
deleted file mode 100644
index f564197..0000000
--- a/src/racoon/isakmp_unity.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*	$NetBSD: isakmp_unity.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/*	$KAME$ */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus 
- * 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.
- */
-
-enum splinet_ipaddr { NETMASK, CIDR };
-
-/* ISAKMP notifies specific to the Unity vendor Id */
-/* Sent during xauth if the user types his password too slowly */
-#define ISAKMP_NTYPE_UNITY_HEARTBEAT	40500
-
-/* ISAKMP mode config attributes specific to the Unity vendor Id */
-#define UNITY_BANNER		28672
-#define UNITY_SAVE_PASSWD	28673
-#define UNITY_DEF_DOMAIN	28674
-#define UNITY_SPLITDNS_NAME	28675
-#define UNITY_SPLIT_INCLUDE	28676
-#define UNITY_NATT_PORT		28677
-#define UNITY_LOCAL_LAN		28678
-#define UNITY_PFS		28679
-#define UNITY_FW_TYPE		28680
-#define UNITY_BACKUP_SERVERS	28681
-#define UNITY_DDNS_HOSTNAME	28682
-
-/*
- * Unity adress/mask lists
- * XXX : the padding is probably there for something !
- */
-        
-struct unity_network {
-	struct in_addr addr4;
-	struct in_addr mask4;
-	char padding[6];
-} __attribute__((__packed__));
-        
-struct unity_netentry {
-	struct unity_network    network;       
-	struct unity_netentry   *next;
-};
-
-int	splitnet_list_add(struct unity_netentry **, struct unity_network *, int *);
-void	splitnet_list_free(struct unity_netentry *, int *);
-char *	splitnet_list_2str(struct unity_netentry *, enum splinet_ipaddr);
-
-vchar_t *isakmp_unity_req(struct ph1handle *, struct isakmp_data *);
-void isakmp_unity_reply(struct ph1handle *, struct isakmp_data *);
diff --git a/src/racoon/isakmp_var.h b/src/racoon/isakmp_var.h
deleted file mode 100644
index f4ef45d..0000000
--- a/src/racoon/isakmp_var.h
+++ /dev/null
@@ -1,132 +0,0 @@
-/*	$NetBSD: isakmp_var.h,v 1.6.6.1 2007/02/20 09:08:49 vanhu Exp $	*/
-
-/* Id: isakmp_var.h,v 1.12 2005/05/07 14:45:31 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _ISAKMP_VAR_H
-#define _ISAKMP_VAR_H
-
-#include "vmbuf.h"
-
-#define PORT_ISAKMP 500
-#define PORT_ISAKMP_NATT 4500
-
-#define DEFAULT_NONCE_SIZE	16
-
-typedef u_char cookie_t[8];
-typedef u_char msgid_t[4];
-
-typedef struct { /* i_cookie + r_cookie */
-	cookie_t i_ck;
-	cookie_t r_ck;
-} isakmp_index;
-
-struct isakmp_gen;
-struct sched;
-
-struct sockaddr;
-struct ph1handle;
-struct ph2handle;
-struct remoteconf;
-struct isakmp_gen;
-struct ipsecdoi_pl_id;	/* XXX */
-struct isakmp_pl_ke;	/* XXX */
-struct isakmp_pl_nonce;	/* XXX */
-
-extern int isakmp_handler __P((int));
-extern int isakmp_ph1begin_i __P((struct remoteconf *, struct sockaddr *,
-	struct sockaddr *));
-
-extern vchar_t *isakmp_parsewoh __P((int, struct isakmp_gen *, int));
-extern vchar_t *isakmp_parse __P((vchar_t *));
-
-extern int isakmp_init __P((void));
-extern const char *isakmp_pindex __P((const isakmp_index *, const u_int32_t));
-extern int isakmp_open __P((void));
-extern void isakmp_close __P((void));
-extern int isakmp_send __P((struct ph1handle *, vchar_t *));
-
-extern void isakmp_ph1resend_stub __P((void *));
-extern int isakmp_ph1resend __P((struct ph1handle *));
-extern void isakmp_ph2resend_stub __P((void *));
-extern int isakmp_ph2resend __P((struct ph2handle *));
-extern void isakmp_ph1expire_stub __P((void *));
-extern void isakmp_ph1expire __P((struct ph1handle *));
-extern void isakmp_ph1delete_stub __P((void *));
-extern void isakmp_ph1delete __P((struct ph1handle *));
-extern void isakmp_ph2expire_stub __P((void *));
-extern void isakmp_ph2expire __P((struct ph2handle *));
-extern void isakmp_ph2delete_stub __P((void *));
-extern void isakmp_ph2delete __P((struct ph2handle *));
-
-extern int isakmp_post_acquire __P((struct ph2handle *));
-extern int isakmp_post_getspi __P((struct ph2handle *));
-extern void isakmp_chkph1there_stub __P((void *));
-extern void isakmp_chkph1there __P((struct ph2handle *));
-
-extern caddr_t isakmp_set_attr_v __P((caddr_t, int, caddr_t, int));
-extern caddr_t isakmp_set_attr_l __P((caddr_t, int, u_int32_t));
-extern vchar_t *isakmp_add_attr_v __P((vchar_t *, int, caddr_t, int));
-extern vchar_t *isakmp_add_attr_l __P((vchar_t *, int, u_int32_t));
-
-extern int isakmp_newcookie __P((caddr_t, struct sockaddr *, struct sockaddr *));
-
-extern int isakmp_p2ph __P((vchar_t **, struct isakmp_gen *));
-
-extern u_int32_t isakmp_newmsgid2 __P((struct ph1handle *));
-extern caddr_t set_isakmp_header1 __P((vchar_t *, struct ph1handle *, int));
-extern caddr_t set_isakmp_header2 __P((vchar_t *, struct ph2handle *, int));
-extern caddr_t set_isakmp_payload __P((caddr_t, vchar_t *, int));
-
-extern struct payload_list *isakmp_plist_append __P((struct payload_list *plist, 
-	vchar_t *payload, int payload_type));
-extern vchar_t *isakmp_plist_set_all __P((struct payload_list **plist,
-	struct ph1handle *iph1));
-
-#ifdef HAVE_PRINT_ISAKMP_C
-extern void isakmp_printpacket __P((vchar_t *, struct sockaddr *,
-	struct sockaddr *, int));
-#endif
-
-extern int copy_ph1addresses __P(( struct ph1handle *,
-	struct remoteconf *, struct sockaddr *, struct sockaddr *));
-extern void log_ph1established __P((const struct ph1handle *));
-
-extern void script_hook __P((struct ph1handle *, int)); 
-extern int script_env_append __P((char ***, int *, char *, char *));
-extern int script_exec __P((char *, int, char * const *));
-
-void purge_remote __P((struct ph1handle *));
-void delete_spd __P((struct ph2handle *, u_int64_t));
-#ifdef INET6
-u_int32_t setscopeid __P((struct sockaddr *, struct sockaddr *));
-#endif
-#endif /* _ISAKMP_VAR_H */
diff --git a/src/racoon/isakmp_xauth.c b/src/racoon/isakmp_xauth.c
deleted file mode 100644
index 3f62587..0000000
--- a/src/racoon/isakmp_xauth.c
+++ /dev/null
@@ -1,1704 +0,0 @@
-/*	$NetBSD: isakmp_xauth.c,v 1.11.6.2 2009/04/20 13:35:36 tteras Exp $	*/
-
-/* Id: isakmp_xauth.c,v 1.38 2006/08/22 18:17:17 manubsd Exp */
-
-/*
- * Copyright (C) 2004-2005 Emmanuel Dreyfus
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/queue.h>
-
-#include <netinet/in.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <pwd.h>
-#include <grp.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#include <netdb.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <ctype.h>
-#include <resolv.h>
-
-#ifdef HAVE_SHADOW_H
-#include <shadow.h>
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "schedule.h"
-#include "debug.h"
-
-#include "crypto_openssl.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "admin.h"
-#include "privsep.h"
-#include "evt.h"
-#include "handler.h"
-#include "throttle.h"
-#include "remoteconf.h"
-#include "isakmp_inf.h"
-#include "isakmp_xauth.h"
-#include "isakmp_unity.h"
-#include "isakmp_cfg.h"
-#include "strnames.h"
-#include "ipsec_doi.h"
-#include "remoteconf.h"
-#include "localconf.h"
-
-#ifdef HAVE_LIBRADIUS
-#include <radlib.h>
-
-struct rad_handle *radius_auth_state = NULL;
-struct rad_handle *radius_acct_state = NULL;
-#endif
-
-#ifdef HAVE_LIBPAM
-#include <security/pam_appl.h>
-
-static char *PAM_usr = NULL;
-static char *PAM_pwd = NULL;
-static int PAM_conv(int, const struct pam_message **, 
-    struct pam_response **, void *);
-static struct pam_conv PAM_chat = { &PAM_conv, NULL };
-#endif
-
-#ifdef HAVE_LIBLDAP
-#include "ldap.h"
-#include <arpa/inet.h>
-struct xauth_ldap_config xauth_ldap_config;
-#endif
-
-void 
-xauth_sendreq(iph1)
-	struct ph1handle *iph1;
-{
-	vchar_t *buffer;
-	struct isakmp_pl_attr *attr;
-	struct isakmp_data *typeattr;
-	struct isakmp_data *usrattr;
-	struct isakmp_data *pwdattr;
-	struct xauth_state *xst = &iph1->mode_cfg->xauth;
-	size_t tlen;
-
-	/* Status checks */
-	if (iph1->status != PHASE1ST_ESTABLISHED) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Xauth request while phase 1 is not completed\n");
-		return;
-	}
-
-	if (xst->status != XAUTHST_NOTYET) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Xauth request whith Xauth state %d\n", xst->status);
-		return;
-	}
-
-	plog(LLV_INFO, LOCATION, NULL, "Sending Xauth request\n");
-
-	tlen = sizeof(*attr) +
-	       + sizeof(*typeattr) +
-	       + sizeof(*usrattr) +
-	       + sizeof(*pwdattr);
-	
-	if ((buffer = vmalloc(tlen)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate buffer\n");
-		return;
-	}
-	
-	attr = (struct isakmp_pl_attr *)buffer->v;
-	memset(attr, 0, tlen);
-
-	attr->h.len = htons(tlen);
-	attr->type = ISAKMP_CFG_REQUEST;
-	attr->id = htons(eay_random());
-
-	typeattr = (struct isakmp_data *)(attr + 1);
-	typeattr->type = htons(XAUTH_TYPE | ISAKMP_GEN_TV);
-	typeattr->lorv = htons(XAUTH_TYPE_GENERIC);
-
-	usrattr = (struct isakmp_data *)(typeattr + 1);
-	usrattr->type = htons(XAUTH_USER_NAME | ISAKMP_GEN_TLV);
-	usrattr->lorv = htons(0);
-
-	pwdattr = (struct isakmp_data *)(usrattr + 1);
-	pwdattr->type = htons(XAUTH_USER_PASSWORD | ISAKMP_GEN_TLV);
-	pwdattr->lorv = htons(0);
-
-	isakmp_cfg_send(iph1, buffer, 
-	    ISAKMP_NPTYPE_ATTR, ISAKMP_FLAG_E, 1);
-	
-	vfree(buffer);
-
-	xst->status = XAUTHST_REQSENT;
-
-	return;
-}
-
-int
-xauth_attr_reply(iph1, attr, id)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-	int id;
-{
-	char **outlet = NULL;
-	size_t alen = 0;
-	int type;
-	struct xauth_state *xst = &iph1->mode_cfg->xauth;
-
-	if ((iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_XAUTH) == 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Xauth reply but peer did not declare "
-		    "itself as Xauth capable\n");
-		return -1;
-	}
-
-	if (xst->status != XAUTHST_REQSENT) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Xauth reply while Xauth state is %d\n", xst->status);
-		return -1;
-	}
-
-	type = ntohs(attr->type) & ~ISAKMP_GEN_MASK;
-	switch (type) {
-	case XAUTH_TYPE:
-		switch (ntohs(attr->lorv)) {
-		case XAUTH_TYPE_GENERIC:
-			xst->authtype = XAUTH_TYPE_GENERIC;
-			break;
-		default:
-			plog(LLV_WARNING, LOCATION, NULL, 
-			    "Unexpected authentication type %d\n", 
-			    ntohs(type));
-			return -1;
-		}
-		break;
-
-	case XAUTH_USER_NAME:
-		outlet = &xst->authdata.generic.usr;
-		break;
-
-	case XAUTH_USER_PASSWORD:
-		outlet = &xst->authdata.generic.pwd; 
-		break;
-
-	default:
-		plog(LLV_WARNING, LOCATION, NULL, 
-		    "ignored Xauth attribute %d\n", type);
-		break;
-	}
-
-	if (outlet != NULL) {
-		alen = ntohs(attr->lorv);
-
-		if ((*outlet = racoon_malloc(alen + 1)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot allocate memory for Xauth Data\n");
-			return -1;
-		}
-
-		memcpy(*outlet, attr + 1, alen);
-		(*outlet)[alen] = '\0';
-		outlet = NULL;
-	}
-
-	
-	if ((xst->authdata.generic.usr != NULL) &&
-	   (xst->authdata.generic.pwd != NULL)) {
-		int port;
-		int res;
-		char *usr = xst->authdata.generic.usr;
-		char *pwd = xst->authdata.generic.pwd;
-		time_t throttle_delay = 0;
-
-#if 0	/* Real debug, don't do that at home */
-		plog(LLV_DEBUG, LOCATION, NULL, 
-		    "Got username \"%s\", password \"%s\"\n", usr, pwd);
-#endif
-		strncpy(iph1->mode_cfg->login, usr, LOGINLEN);
-		iph1->mode_cfg->login[LOGINLEN] = '\0';
-
-		res = -1;
-		if ((port = isakmp_cfg_getport(iph1)) == -1) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Port pool depleted\n");
-			goto skip_auth;
-		}	
-
-		switch (isakmp_cfg_config.authsource) {
-		case ISAKMP_CFG_AUTH_SYSTEM:
-			res = privsep_xauth_login_system(usr, pwd);
-			break;
-#ifdef HAVE_LIBRADIUS
-		case ISAKMP_CFG_AUTH_RADIUS:
-			res = xauth_login_radius(iph1, usr, pwd);
-			break;
-#endif
-#ifdef HAVE_LIBPAM
-		case ISAKMP_CFG_AUTH_PAM:
-			res = privsep_xauth_login_pam(iph1->mode_cfg->port, 
-			    iph1->remote, usr, pwd);
-			break;
-#endif
-#ifdef HAVE_LIBLDAP
-		case ISAKMP_CFG_AUTH_LDAP:
-			res = xauth_login_ldap(iph1, usr, pwd);
-			break;
-#endif
-		default:
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Unexpected authentication source\n");
-			res = -1;
-			break;
-		}
-
-		/*
-		 * Optional group authentication
-		 */
-		if (!res && (isakmp_cfg_config.groupcount))
-			res = group_check(iph1,
-				isakmp_cfg_config.grouplist,
-				isakmp_cfg_config.groupcount);
-
-		/*
-		 * On failure, throttle the connexion for the remote host
-		 * in order to make password attacks more difficult.
-		 */
-		throttle_delay = throttle_host(iph1->remote, res) - time(NULL);
-		if (throttle_delay > 0) {
-			char *str;
-
-			str = saddrwop2str(iph1->remote);
-
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Throttling in action for %s: delay %lds\n",
-			    str, (unsigned long)throttle_delay);
-			res = -1;
-		} else {
-			throttle_delay = 0;
-		}
-
-skip_auth:
-		if (throttle_delay != 0) {
-			struct xauth_reply_arg *xra;
-
-			if ((xra = racoon_malloc(sizeof(*xra))) == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "malloc failed, bypass throttling\n");
-				return xauth_reply(iph1, port, id, res);
-			}
-
-			/*
-			 * We need to store the ph1, but it might have
-			 * disapeared when xauth_reply is called, so
-			 * store the index instead.
-			 */
-			xra->index = iph1->index;
-			xra->port = port;
-			xra->id = id;
-			xra->res = res;
-			sched_new(throttle_delay, xauth_reply_stub, xra);
-		} else {
-			return xauth_reply(iph1, port, id, res);
-		}
-	}
-
-	return 0;
-}
-
-void 
-xauth_reply_stub(args)
-	void *args;
-{
-	struct xauth_reply_arg *xra = (struct xauth_reply_arg *)args;
-	struct ph1handle *iph1;
-
-	if ((iph1 = getph1byindex(&xra->index)) != NULL)
-		(void)xauth_reply(iph1, xra->port, xra->id, xra->res);
-	else
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Delayed Xauth reply: phase 1 no longer exists.\n"); 
-
-	racoon_free(xra);
-	return;
-}
-
-int
-xauth_reply(iph1, port, id, res)
-	struct ph1handle *iph1;
-	int port;
-	int id;
-#if defined(ANDROID_CHANGES)
-	int res;
-#endif
-{
-	struct xauth_state *xst = &iph1->mode_cfg->xauth;
-	char *usr = xst->authdata.generic.usr;
-
-	if (res != 0) {
-		if (port != -1)
-			isakmp_cfg_putport(iph1, port);
-
-		plog(LLV_INFO, LOCATION, NULL, 
-		    "login failed for user \"%s\"\n", usr);
-		
-		xauth_sendstatus(iph1, XAUTH_STATUS_FAIL, id);
-		xst->status = XAUTHST_NOTYET;
-
-		/* Delete Phase 1 SA */
-		if (iph1->status == PHASE1ST_ESTABLISHED)
-			isakmp_info_send_d1(iph1);
-		remph1(iph1);
-		delph1(iph1);
-
-		return -1;
-	}
-
-	xst->status = XAUTHST_OK;
-	plog(LLV_INFO, LOCATION, NULL, 
-	    "login succeeded for user \"%s\"\n", usr);
-
-	xauth_sendstatus(iph1, XAUTH_STATUS_OK, id);
-
-	return 0;
-}
-
-void
-xauth_sendstatus(iph1, status, id)
-	struct ph1handle *iph1;
-	int status;
-	int id;
-{
-	vchar_t *buffer;
-	struct isakmp_pl_attr *attr;
-	struct isakmp_data *stattr;
-	size_t tlen;
-
-	tlen = sizeof(*attr) +
-	       + sizeof(*stattr); 
-	
-	if ((buffer = vmalloc(tlen)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot allocate buffer\n");
-		return;
-	}
-	
-	attr = (struct isakmp_pl_attr *)buffer->v;
-	memset(attr, 0, tlen);
-
-	attr->h.len = htons(tlen);
-	attr->type = ISAKMP_CFG_SET;
-	attr->id = htons(id);
-
-	stattr = (struct isakmp_data *)(attr + 1);
-	stattr->type = htons(XAUTH_STATUS | ISAKMP_GEN_TV);
-	stattr->lorv = htons(status);
-
-	isakmp_cfg_send(iph1, buffer, 
-	    ISAKMP_NPTYPE_ATTR, ISAKMP_FLAG_E, 1);
-	
-	vfree(buffer);
-
-	return;	
-}
-
-#ifdef HAVE_LIBRADIUS
-int
-xauth_radius_init(void)
-{
-	/* For first time use, initialize Radius */
-	if ((isakmp_cfg_config.authsource == ISAKMP_CFG_AUTH_RADIUS) &&
-	    (radius_auth_state == NULL)) {
-		if ((radius_auth_state = rad_auth_open()) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot init libradius\n");
-			return -1;
-		}
-
-		if (rad_config(radius_auth_state, NULL) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot open librarius config file: %s\n", 
-			    rad_strerror(radius_auth_state));
-			rad_close(radius_auth_state);
-			radius_auth_state = NULL;
-			return -1;
-		}
-	}
-
-	if ((isakmp_cfg_config.accounting == ISAKMP_CFG_ACCT_RADIUS) &&
-	    (radius_acct_state == NULL)) {
-		if ((radius_acct_state = rad_acct_open()) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot init libradius\n");
-			return -1;
-		}
-
-		if (rad_config(radius_acct_state, NULL) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot open librarius config file: %s\n", 
-			    rad_strerror(radius_acct_state));
-			rad_close(radius_acct_state);
-			radius_acct_state = NULL;
-			return -1;
-		}
-	}
-
-	return 0;
-}
-
-int
-xauth_login_radius(iph1, usr, pwd)
-	struct ph1handle *iph1;
-	char *usr;
-	char *pwd;
-{
-	int res;
-	const void *data;
-	size_t len;
-	int type;
-
-	if (rad_create_request(radius_auth_state, RAD_ACCESS_REQUEST) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "rad_create_request failed: %s\n", 
-		    rad_strerror(radius_auth_state));
-		return -1;
-	}
-	
-	if (rad_put_string(radius_auth_state, RAD_USER_NAME, usr) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "rad_put_string failed: %s\n", 
-		    rad_strerror(radius_auth_state));
-		return -1;
-	}
-
-	if (rad_put_string(radius_auth_state, RAD_USER_PASSWORD, pwd) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "rad_put_string failed: %s\n", 
-		    rad_strerror(radius_auth_state));
-		return -1;
-	}
-
-	if (isakmp_cfg_radius_common(radius_auth_state, iph1->mode_cfg->port) != 0)
-		return -1;
-
-	switch (res = rad_send_request(radius_auth_state)) {
-	case RAD_ACCESS_ACCEPT:
-		while ((type = rad_get_attr(radius_auth_state, &data, &len)) != 0) {
-			switch (type) {
-			case RAD_FRAMED_IP_ADDRESS:
-				iph1->mode_cfg->addr4 = rad_cvt_addr(data);
-				iph1->mode_cfg->flags 
-				    |= ISAKMP_CFG_ADDR4_EXTERN;
-				break;
-
-			case RAD_FRAMED_IP_NETMASK:
-				iph1->mode_cfg->mask4 = rad_cvt_addr(data);
-				iph1->mode_cfg->flags 
-				    |= ISAKMP_CFG_MASK4_EXTERN;
-				break;
-
-			default:
-				plog(LLV_INFO, LOCATION, NULL,
-				    "Unexpected attribute: %d\n", type);
-				break;
-			}
-		}
-
-		return 0;
-		break;
-
-	case RAD_ACCESS_REJECT:
-		return -1;
-		break;
-
-	case -1:
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "rad_send_request failed: %s\n", 
-		    rad_strerror(radius_auth_state));
-		return -1;
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "rad_send_request returned %d\n", res);
-		return -1;
-		break;
-	}
-
-	return -1;
-}
-#endif
-
-#ifdef HAVE_LIBPAM
-static int 
-PAM_conv(msg_count, msg, rsp, dontcare)
-	int msg_count;
-	const struct pam_message **msg;
-	struct pam_response **rsp;
-	void *dontcare;
-{
-	int i;
-	int replies = 0;
-	struct pam_response *reply = NULL;
-
-	if ((reply = racoon_malloc(sizeof(*reply) * msg_count)) == NULL) 
-		return PAM_CONV_ERR;
-	bzero(reply, sizeof(*reply) * msg_count);
-
-	for (i = 0; i < msg_count; i++) {
-		switch (msg[i]->msg_style) {
-		case PAM_PROMPT_ECHO_ON:
-			/* Send the username, libpam frees resp */
-			reply[i].resp_retcode = PAM_SUCCESS;
-			if ((reply[i].resp = strdup(PAM_usr)) == NULL) {
-				plog(LLV_ERROR, LOCATION, 
-				    NULL, "strdup failed\n");
-				exit(1);
-			}
-			break;
-
-		case PAM_PROMPT_ECHO_OFF:
-			/* Send the password, libpam frees resp */
-			reply[i].resp_retcode = PAM_SUCCESS;
-			if ((reply[i].resp = strdup(PAM_pwd)) == NULL) {
-				plog(LLV_ERROR, LOCATION, 
-				    NULL, "strdup failed\n");
-				exit(1);
-			}
-			break;
-
-		case PAM_TEXT_INFO:
-		case PAM_ERROR_MSG:
-			reply[i].resp_retcode = PAM_SUCCESS;
-			reply[i].resp = NULL;
-			break;
-
-		default:
-			if (reply != NULL)
-				racoon_free(reply);
-			return PAM_CONV_ERR;
-			break;
-		}
-	}
-
-	if (reply != NULL)
-		*rsp = reply;
-
-	return PAM_SUCCESS;
-}
-
-int
-xauth_login_pam(port, raddr, usr, pwd)
-	int port;
-	struct sockaddr *raddr;
-	char *usr;
-	char *pwd;
-{
-	int error;
-	int res;
-	const void *data;
-	size_t len;
-	int type;
-	char *remote = NULL;
-	pam_handle_t *pam = NULL;
-
-	if (isakmp_cfg_config.port_pool == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "isakmp_cfg_config.port_pool == NULL\n");
-		return -1;
-	}
-
-	if ((error = pam_start("racoon", usr, 
-	    &PAM_chat, &isakmp_cfg_config.port_pool[port].pam)) != 0) {
-		if (isakmp_cfg_config.port_pool[port].pam == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, "pam_start failed\n");
-			return -1;
-		} else {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "pam_start failed: %s\n", 
-			    pam_strerror(isakmp_cfg_config.port_pool[port].pam,
-			    error));
-			goto out;
-		}
-	}
-	pam = isakmp_cfg_config.port_pool[port].pam;
-
-	if ((remote = strdup(saddrwop2str(raddr))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "cannot allocate memory: %s\n", strerror(errno)); 
-		goto out;
-	}
-	
-	if ((error = pam_set_item(pam, PAM_RHOST, remote)) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "pam_set_item failed: %s\n", 
-		    pam_strerror(pam, error));
-		goto out;
-	}
-
-	PAM_usr = usr;
-	PAM_pwd = pwd;
-	error = pam_authenticate(pam, 0);
-	PAM_usr = NULL;
-	PAM_pwd = NULL;
-	if (error != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "pam_authenticate failed: %s\n", 
-		    pam_strerror(pam, error));
-		goto out;
-	}
-
-	if ((error = pam_acct_mgmt(pam, 0)) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "pam_acct_mgmt failed: %s\n", 
-		    pam_strerror(pam, error));
-		goto out;
-	}
-
-	if ((error = pam_setcred(pam, 0)) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "pam_setcred failed: %s\n", 
-		    pam_strerror(pam, error));
-		goto out;
-	}
-
-	if (remote != NULL)
-		free(remote);
-
-	return 0;
-
-out:
-	pam_end(pam, error);
-	isakmp_cfg_config.port_pool[port].pam = NULL;
-	if (remote != NULL)
-		free(remote);
-	return -1;
-}
-#endif
-
-#ifdef HAVE_LIBLDAP
-int 
-xauth_ldap_init(void)
-{
-	int tmplen;
-	int error = -1;
-
-	xauth_ldap_config.pver = 3;
-	xauth_ldap_config.host = NULL;
-	xauth_ldap_config.port = LDAP_PORT;
-	xauth_ldap_config.base = NULL;
-	xauth_ldap_config.subtree = 0;
-	xauth_ldap_config.bind_dn = NULL;
-	xauth_ldap_config.bind_pw = NULL;
-	xauth_ldap_config.auth_type = LDAP_AUTH_SIMPLE;
-	xauth_ldap_config.attr_user = NULL;
-	xauth_ldap_config.attr_addr = NULL;
-	xauth_ldap_config.attr_mask = NULL;
-	xauth_ldap_config.attr_group = NULL;
-	xauth_ldap_config.attr_member = NULL;
-
-	/* set default host */
-	tmplen = strlen(LDAP_DFLT_HOST);
-	xauth_ldap_config.host = vmalloc(tmplen);
-	if (xauth_ldap_config.host == NULL)
-		goto out;
-	memcpy(xauth_ldap_config.host->v, LDAP_DFLT_HOST, tmplen);
-
-	/* set default user naming attribute */
-	tmplen = strlen(LDAP_DFLT_USER);
-	xauth_ldap_config.attr_user = vmalloc(tmplen);
-	if (xauth_ldap_config.attr_user == NULL)
-		goto out;	
-	memcpy(xauth_ldap_config.attr_user->v, LDAP_DFLT_USER, tmplen);
-
-	/* set default address attribute */
-	tmplen = strlen(LDAP_DFLT_ADDR);
-	xauth_ldap_config.attr_addr = vmalloc(tmplen);
-	if (xauth_ldap_config.attr_addr == NULL)
-		goto out;
-	memcpy(xauth_ldap_config.attr_addr->v, LDAP_DFLT_ADDR, tmplen);
-
-	/* set default netmask attribute */
-	tmplen = strlen(LDAP_DFLT_MASK);
-	xauth_ldap_config.attr_mask = vmalloc(tmplen);
-	if (xauth_ldap_config.attr_mask == NULL)
-		goto out;
-	memcpy(xauth_ldap_config.attr_mask->v, LDAP_DFLT_MASK, tmplen);
-
-	/* set default group naming attribute */
-	tmplen = strlen(LDAP_DFLT_GROUP);
-	xauth_ldap_config.attr_group = vmalloc(tmplen);
-	if (xauth_ldap_config.attr_group == NULL)
-		goto out;
-	memcpy(xauth_ldap_config.attr_group->v, LDAP_DFLT_GROUP, tmplen);
-
-	/* set default member attribute */
-	tmplen = strlen(LDAP_DFLT_MEMBER);
-	xauth_ldap_config.attr_member = vmalloc(tmplen);
-	if (xauth_ldap_config.attr_member == NULL)
-		goto out;
-	memcpy(xauth_ldap_config.attr_member->v, LDAP_DFLT_MEMBER, tmplen);
-
-	error = 0;
-out:
-	if (error != 0)
-		plog(LLV_ERROR, LOCATION, NULL, "cannot allocate memory\n");
-
-	return error;
-}
-
-int
-xauth_login_ldap(iph1, usr, pwd)
-	struct ph1handle *iph1;
-	char *usr;
-	char *pwd;
-{
-	int rtn = -1;
-	int res = -1;
-	LDAP *ld = NULL;
-	LDAPMessage *lr = NULL;
-	LDAPMessage *le = NULL;
-	struct berval cred;
-	struct berval **bv = NULL;
-	struct timeval timeout;
-	char *init = NULL;
-	char *filter = NULL;
-	char *atlist[3];
-	char *basedn = NULL;
-	char *userdn = NULL;
-	int tmplen = 0;
-	int ecount = 0;
-	int scope = LDAP_SCOPE_ONE;
-
-	atlist[0] = NULL;
-	atlist[1] = NULL;
-	atlist[2] = NULL;
-
-	/* build our initialization url */
-	tmplen = strlen("ldap://:") + 17;
-	tmplen += strlen(xauth_ldap_config.host->v);
-	init = racoon_malloc(tmplen);
-	if (init == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unable to alloc ldap init url\n");
-		goto ldap_end;
-	}
-	sprintf(init,"ldap://%s:%d",
-		xauth_ldap_config.host->v,
-		xauth_ldap_config.port );
-
-	/* initialize the ldap handle */
-	res = ldap_initialize(&ld, init);
-	if (res != LDAP_SUCCESS) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ldap_initialize failed: %s\n",
-			ldap_err2string(res));
-		goto ldap_end;
-	}
-
-	/* initialize the protocol version */
-	ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION,
-		&xauth_ldap_config.pver);
-
-	/*
-	 * attempt to bind to the ldap server.
-         * default to anonymous bind unless a
-	 * user dn and password has been
-	 * specified in our configuration
-         */
-	if ((xauth_ldap_config.bind_dn != NULL)&&
-	    (xauth_ldap_config.bind_pw != NULL))
-	{
-		cred.bv_val = xauth_ldap_config.bind_pw->v;
-		cred.bv_len = strlen( cred.bv_val );
-		res = ldap_sasl_bind_s(ld,
-			xauth_ldap_config.bind_dn->v, NULL, &cred,
-			NULL, NULL, NULL);
-	}
-	else
-	{
-		res = ldap_sasl_bind_s(ld,
-			NULL, NULL, NULL,
-			NULL, NULL, NULL);
-	}
-	
-	if (res!=LDAP_SUCCESS) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ldap_sasl_bind_s (search) failed: %s\n",
-			ldap_err2string(res));
-		goto ldap_end;
-	}
-
-	/* build an ldap user search filter */
-	tmplen = strlen(xauth_ldap_config.attr_user->v);
-	tmplen += 1;
-	tmplen += strlen(usr);
-	tmplen += 1;
-	filter = racoon_malloc(tmplen);
-	if (filter == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unable to alloc ldap search filter buffer\n");
-		goto ldap_end;
-	}
-	sprintf(filter, "%s=%s",
-		xauth_ldap_config.attr_user->v, usr);
-
-	/* build our return attribute list */
-	tmplen = strlen(xauth_ldap_config.attr_addr->v) + 1;
-	atlist[0] = racoon_malloc(tmplen);
-	tmplen = strlen(xauth_ldap_config.attr_mask->v) + 1;
-	atlist[1] = racoon_malloc(tmplen);
-	if ((atlist[0] == NULL)||(atlist[1] == NULL)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unable to alloc ldap attrib list buffer\n");
-		goto ldap_end;
-	}
-	strcpy(atlist[0],xauth_ldap_config.attr_addr->v);
-	strcpy(atlist[1],xauth_ldap_config.attr_mask->v);
-
-	/* attempt to locate the user dn */
-	if (xauth_ldap_config.base != NULL)
-		basedn = xauth_ldap_config.base->v;
-	if (xauth_ldap_config.subtree)
-		scope = LDAP_SCOPE_SUBTREE;
-	timeout.tv_sec = 15;
-	timeout.tv_usec = 0;
-	res = ldap_search_ext_s(ld, basedn, scope,
-		filter, atlist, 0, NULL, NULL,
-		&timeout, 2, &lr);
-	if (res != LDAP_SUCCESS) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ldap_search_ext_s failed: %s\n",
-			ldap_err2string(res));
-		goto ldap_end;
-	}
-
-	/* check the number of ldap entries returned */
-	ecount = ldap_count_entries(ld, lr);
-	if (ecount < 1) {
-		plog(LLV_WARNING, LOCATION, NULL, 
-			"no ldap results for filter \'%s\'\n", 
-			 filter);
-		goto ldap_end;
-	}
-	if (ecount > 1) {
-		plog(LLV_WARNING, LOCATION, NULL, 
-			"multiple (%i) ldap results for filter \'%s\'\n", 
-			ecount, filter);
-	}
-
-	/* obtain the dn from the first result */
-	le = ldap_first_entry(ld, lr);
-	if (le == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ldap_first_entry failed: invalid entry returned\n");
-		goto ldap_end;
-	}
-	userdn = ldap_get_dn(ld, le);
-	if (userdn == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ldap_get_dn failed: invalid string returned\n");
-		goto ldap_end;
-	}
-
-	/* cache the user dn in the xauth state */
-	iph1->mode_cfg->xauth.udn = racoon_malloc(strlen(userdn)+1);
-	strcpy(iph1->mode_cfg->xauth.udn,userdn);
-
-	/* retrieve modecfg address */
-	bv = ldap_get_values_len(ld, le, xauth_ldap_config.attr_addr->v);
-	if (bv != NULL)	{
-		char tmpaddr[16];
-		/* sanity check for address value */
-		if ((bv[0]->bv_len < 7)||(bv[0]->bv_len > 15)) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"ldap returned invalid modecfg address\n");
-			ldap_value_free_len(bv);
-			goto ldap_end;
-		}
-		memcpy(tmpaddr,bv[0]->bv_val,bv[0]->bv_len);
-		tmpaddr[bv[0]->bv_len]=0;
-		iph1->mode_cfg->addr4.s_addr = inet_addr(tmpaddr);
-		iph1->mode_cfg->flags |= ISAKMP_CFG_ADDR4_EXTERN;
-		plog(LLV_INFO, LOCATION, NULL,
-			"ldap returned modecfg address %s\n", tmpaddr);
-		ldap_value_free_len(bv);
-	}
-
-	/* retrieve modecfg netmask */
-	bv = ldap_get_values_len(ld, le, xauth_ldap_config.attr_mask->v);
-	if (bv != NULL)	{
-		char tmpmask[16];
-		/* sanity check for netmask value */
-		if ((bv[0]->bv_len < 7)||(bv[0]->bv_len > 15)) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"ldap returned invalid modecfg netmask\n");
-			ldap_value_free_len(bv);
-			goto ldap_end;
-		}
-		memcpy(tmpmask,bv[0]->bv_val,bv[0]->bv_len);
-		tmpmask[bv[0]->bv_len]=0;
-		iph1->mode_cfg->mask4.s_addr = inet_addr(tmpmask);
-		iph1->mode_cfg->flags |= ISAKMP_CFG_MASK4_EXTERN;
-		plog(LLV_INFO, LOCATION, NULL,
-			"ldap returned modecfg netmask %s\n", tmpmask);
-		ldap_value_free_len(bv);
-	}
-
-	/*
-	 * finally, use the dn and the xauth
-	 * password to check the users given
-	 * credentials by attempting to bind
-	 * to the ldap server
-	 */
-	plog(LLV_INFO, LOCATION, NULL,
-		"attempting ldap bind for dn \'%s\'\n", userdn);
-	cred.bv_val = pwd;
-	cred.bv_len = strlen( cred.bv_val );
-	res = ldap_sasl_bind_s(ld,
-		userdn, NULL, &cred,
-		NULL, NULL, NULL);
-        if(res==LDAP_SUCCESS)
-		rtn = 0;
-
-ldap_end:
-
-	/* free ldap resources */
-	if (userdn != NULL)
-		ldap_memfree(userdn);
-	if (atlist[0] != NULL)
-		racoon_free(atlist[0]);
-	if (atlist[1] != NULL)
-		racoon_free(atlist[1]);
-	if (filter != NULL)
-		racoon_free(filter);
-	if (lr != NULL)
-		ldap_msgfree(lr);
-	if (init != NULL)
-		racoon_free(init);
-
-	ldap_unbind_ext_s(ld, NULL, NULL);
-
-	return rtn;
-}
-
-int
-xauth_group_ldap(udn, grp)
-	char * udn;
-	char * grp;
-{
-	int rtn = -1;
-	int res = -1;
-	LDAP *ld = NULL;
-	LDAPMessage *lr = NULL;
-	LDAPMessage *le = NULL;
-	struct berval cred;
-	struct timeval timeout;
-	char *init = NULL;
-	char *filter = NULL;
-	char *basedn = NULL;
-	char *groupdn = NULL;
-	int tmplen = 0;
-	int ecount = 0;
-	int scope = LDAP_SCOPE_ONE;
-
-	/* build our initialization url */
-	tmplen = strlen("ldap://:") + 17;
-	tmplen += strlen(xauth_ldap_config.host->v);
-	init = racoon_malloc(tmplen);
-	if (init == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unable to alloc ldap init url\n");
-		goto ldap_group_end;
-	}
-	sprintf(init,"ldap://%s:%d",
-		xauth_ldap_config.host->v,
-		xauth_ldap_config.port );
-
-	/* initialize the ldap handle */
-	res = ldap_initialize(&ld, init);
-	if (res != LDAP_SUCCESS) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ldap_initialize failed: %s\n",
-			ldap_err2string(res));
-		goto ldap_group_end;
-	}
-
-	/* initialize the protocol version */
-	ldap_set_option(ld, LDAP_OPT_PROTOCOL_VERSION,
-		&xauth_ldap_config.pver);
-
-	/*
-	 * attempt to bind to the ldap server.
-         * default to anonymous bind unless a
-	 * user dn and password has been
-	 * specified in our configuration
-         */
-	if ((xauth_ldap_config.bind_dn != NULL)&&
-	    (xauth_ldap_config.bind_pw != NULL))
-	{
-		cred.bv_val = xauth_ldap_config.bind_pw->v;
-		cred.bv_len = strlen( cred.bv_val );
-		res = ldap_sasl_bind_s(ld,
-			xauth_ldap_config.bind_dn->v, NULL, &cred,
-			NULL, NULL, NULL);
-	}
-	else
-	{
-		res = ldap_sasl_bind_s(ld,
-			NULL, NULL, NULL,
-			NULL, NULL, NULL);
-	}
-
-	if (res!=LDAP_SUCCESS) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ldap_sasl_bind_s (search) failed: %s\n",
-			ldap_err2string(res));
-		goto ldap_group_end;
-	}
-
-	/* build an ldap group search filter */
-	tmplen = strlen("(&(=)(=))") + 1;
-	tmplen += strlen(xauth_ldap_config.attr_group->v);
-	tmplen += strlen(grp);
-	tmplen += strlen(xauth_ldap_config.attr_member->v);
-	tmplen += strlen(udn);
-	filter = racoon_malloc(tmplen);
-	if (filter == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unable to alloc ldap search filter buffer\n");
-		goto ldap_group_end;
-	}
-	sprintf(filter, "(&(%s=%s)(%s=%s))",
-		xauth_ldap_config.attr_group->v, grp,
-		xauth_ldap_config.attr_member->v, udn);
-
-	/* attempt to locate the group dn */
-	if (xauth_ldap_config.base != NULL)
-		basedn = xauth_ldap_config.base->v;
-	if (xauth_ldap_config.subtree)
-		scope = LDAP_SCOPE_SUBTREE;
-	timeout.tv_sec = 15;
-	timeout.tv_usec = 0;
-	res = ldap_search_ext_s(ld, basedn, scope,
-		filter, NULL, 0, NULL, NULL,
-		&timeout, 2, &lr);
-	if (res != LDAP_SUCCESS) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ldap_search_ext_s failed: %s\n",
-			ldap_err2string(res));
-		goto ldap_group_end;
-	}
-
-	/* check the number of ldap entries returned */
-	ecount = ldap_count_entries(ld, lr);
-	if (ecount < 1) {
-		plog(LLV_WARNING, LOCATION, NULL, 
-			"no ldap results for filter \'%s\'\n", 
-			 filter);
-		goto ldap_group_end;
-	}
-
-	/* success */
-	rtn = 0;
-
-	/* obtain the dn from the first result */
-	le = ldap_first_entry(ld, lr);
-	if (le == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ldap_first_entry failed: invalid entry returned\n");
-		goto ldap_group_end;
-	}
-	groupdn = ldap_get_dn(ld, le);
-	if (groupdn == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ldap_get_dn failed: invalid string returned\n");
-		goto ldap_group_end;
-	}
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"ldap membership group returned \'%s\'\n", groupdn);
-ldap_group_end:
-
-	/* free ldap resources */
-	if (groupdn != NULL)
-		ldap_memfree(groupdn);
-	if (filter != NULL)
-		racoon_free(filter);
-	if (lr != NULL)
-		ldap_msgfree(lr);
-	if (init != NULL)
-		racoon_free(init);
-
-	ldap_unbind_ext_s(ld, NULL, NULL);
-
-	return rtn;
-}
-
-#endif
-
-#ifndef ANDROID_PATCHED
-
-int
-xauth_login_system(usr, pwd)
-	char *usr;
-	char *pwd;
-{
-	struct passwd *pw;
-	char *cryptpwd;
-	char *syscryptpwd;
-#ifdef HAVE_SHADOW_H
-	struct spwd *spw;
-
-	if ((spw = getspnam(usr)) == NULL)
-		return -1;
-
-	syscryptpwd = spw->sp_pwdp;
-#endif
-
-	if ((pw = getpwnam(usr)) == NULL)
-		return -1;
-
-#ifndef HAVE_SHADOW_H
-	syscryptpwd = pw->pw_passwd;
-#endif
-
-	/* No root login. Ever. */
-	if (pw->pw_uid == 0)
-		return -1;
-
-	if ((cryptpwd = crypt(pwd, syscryptpwd)) == NULL)
-		return -1;
-
-	if (strcmp(cryptpwd, syscryptpwd) == 0)
-		return 0;
-
-	return -1;
-}
-
-#endif
-
-int
-xauth_group_system(usr, grp)
-	char * usr;
-	char * grp;
-{
-	struct group * gr;
-	char * member;
-	int index = 0;
-
-	gr = getgrnam(grp);
-	if (gr == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"the system group name \'%s\' is unknown\n",
-			grp);
-		return -1;
-	}
-
-	while ((member = gr->gr_mem[index++])!=NULL) {
-		if (!strcmp(member,usr)) {
-			plog(LLV_INFO, LOCATION, NULL,
-		                "membership validated\n");
-			return 0;
-		}
-	}
-
-	return -1;
-}
-
-int 
-xauth_check(iph1)
-	struct ph1handle *iph1;
-{
-	struct xauth_state *xst = &iph1->mode_cfg->xauth;
-
-	/* 
- 	 * Only the server side (edge device) really check for Xauth 
-	 * status. It does it if the chose authmethod is using Xauth.
-	 * On the client side (roadwarrior), we don't check anything.
-	 */
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-	/* The following are not yet implemented */
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-		if ((iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_XAUTH) == 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Hybrid auth negotiated but peer did not "
-			    "announced as Xauth capable\n");
-			return -1;
-		}
-
-		if (xst->status != XAUTHST_OK) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Hybrid auth negotiated but peer did not "
-			    "succeed Xauth exchange\n");
-			return -1;
-		}
-
-		return 0;
-		break;
-	default:
-		return 0;
-		break;
-	}
-
-	return 0;
-}
-
-int
-group_check(iph1, grp_list, grp_count)
-	struct ph1handle *iph1;
-	char **grp_list;
-	int grp_count;
-{
-	int res = -1;
-	int grp_index = 0;
-	char * usr = NULL;
-
-	/* check for presence of modecfg data */
-
-	if(iph1->mode_cfg == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"xauth group specified but modecfg not found\n");
-		return res;
-	}
-
-	/* loop through our group list */
-
-	for(; grp_index < grp_count; grp_index++) {
-
-		/* check for presence of xauth data */
-
-		usr = iph1->mode_cfg->xauth.authdata.generic.usr;
-
-		if(usr == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"xauth group specified but xauth not found\n");
-			return res;
-		}
-
-		/* call appropriate group validation funtion */
-
-		switch (isakmp_cfg_config.groupsource) {
-
-			case ISAKMP_CFG_GROUP_SYSTEM:
-				res = xauth_group_system(
-					usr,
-					grp_list[grp_index]);
-				break;
-
-#ifdef HAVE_LIBLDAP
-			case ISAKMP_CFG_GROUP_LDAP:
-				res = xauth_group_ldap(
-					iph1->mode_cfg->xauth.udn,
-					grp_list[grp_index]);
-				break;
-#endif
-
-			default:
-				/* we should never get here */
-				plog(LLV_ERROR, LOCATION, NULL,
-				    "Unknown group auth source\n");
-				break;
-		}
-
-		if( !res ) {
-			plog(LLV_INFO, LOCATION, NULL,
-				"user \"%s\" is a member of group \"%s\"\n",
-				usr,
-				grp_list[grp_index]);
-			break;
-		} else {
-			plog(LLV_INFO, LOCATION, NULL,
-				"user \"%s\" is not a member of group \"%s\"\n",
-				usr,
-				grp_list[grp_index]);
-		}
-	}
-
-	return res;
-}
-
-vchar_t *
-isakmp_xauth_req(iph1, attr)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-{
-	int type;
-	size_t dlen = 0;
-	int ashort = 0;
-	int value = 0;
-	vchar_t *buffer = NULL;
-	char *mraw = NULL, *mdata;
-	char *data;
-	vchar_t *usr = NULL;
-	vchar_t *pwd = NULL;
-	size_t skip = 0;
-	int freepwd = 0;
-
-	if ((iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_XAUTH) == 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Xauth mode config request but peer "
-		    "did not declare itself as Xauth capable\n");
-		return NULL;
-	}
-
-	type = ntohs(attr->type) & ~ISAKMP_GEN_MASK;
-
-	/* Sanity checks */
-	switch(type) {
-	case XAUTH_TYPE:
-		if ((ntohs(attr->type) & ISAKMP_GEN_TV) == 0) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Unexpected long XAUTH_TYPE attribute\n");
-			return NULL;
-		}
-		if (ntohs(attr->lorv) != XAUTH_TYPE_GENERIC) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Unsupported Xauth authentication %d\n", 
-			    ntohs(attr->lorv));
-			return NULL;
-		}
-		ashort = 1;
-		dlen = 0;
-		value = XAUTH_TYPE_GENERIC;
-		break;
-
-	case XAUTH_USER_NAME:
-		if (!iph1->rmconf->xauth || !iph1->rmconf->xauth->login) {
-			plog(LLV_ERROR, LOCATION, NULL, "Xauth performed "
-			    "with no login supplied\n");
-			return NULL;
-		}
-
-		dlen = iph1->rmconf->xauth->login->l - 1;
-		iph1->rmconf->xauth->state |= XAUTH_SENT_USERNAME;
-		break;
-
-#ifdef ANDROID_PATCHED
-        case XAUTH_PASSCODE:
-#endif  
-	case XAUTH_USER_PASSWORD:
-		if (!iph1->rmconf->xauth || !iph1->rmconf->xauth->login)
-			return NULL;
-
-		skip = sizeof(struct ipsecdoi_id_b);
-		usr = vmalloc(iph1->rmconf->xauth->login->l - 1 + skip);
-		if (usr == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot allocate memory\n");
-			return NULL;
-		}
-		memset(usr->v, 0, skip);
-		memcpy(usr->v + skip, 
-		    iph1->rmconf->xauth->login->v, 
-		    iph1->rmconf->xauth->login->l - 1);
-
-		if (iph1->rmconf->xauth->pass) {
-			/* A key given through racoonctl */
-			pwd = iph1->rmconf->xauth->pass;
-		} else {
-			if ((pwd = getpskbyname(usr)) == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "No password was found for login %s\n", 
-				    iph1->rmconf->xauth->login->v);
-				vfree(usr);
-				return NULL;
-			}
-			/* We have to free it before returning */
-			freepwd = 1;
-		}
-		vfree(usr);
-
-		iph1->rmconf->xauth->state |= XAUTH_SENT_PASSWORD;
-		dlen = pwd->l;
-
-		break;
-	case XAUTH_MESSAGE:
-		if ((ntohs(attr->type) & ISAKMP_GEN_TV) == 0) {
-			dlen = ntohs(attr->lorv);
-			if (dlen > 0) {
-				mraw = (char*)(attr + 1);
-				mdata = binsanitize(mraw, dlen);
-				if (mdata == NULL) {
-					plog(LLV_ERROR, LOCATION, iph1->remote,
-					    "Cannot allocate memory\n");
-					return NULL;
-				}
-				plog(LLV_NOTIFY,LOCATION, iph1->remote,
-					"XAUTH Message: '%s'.\n",
-					mdata);
-				racoon_free(mdata);
-			}
-		}
-		return NULL;
-	default:
-		plog(LLV_WARNING, LOCATION, NULL,
-		    "Ignored attribute %s\n", s_isakmp_cfg_type(type));
-		return NULL;
-		break;
-	}
-
-	if ((buffer = vmalloc(sizeof(*attr) + dlen)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "Cannot allocate memory\n");
-		goto out;
-	}
-
-	attr = (struct isakmp_data *)buffer->v;
-	if (ashort) {
-		attr->type = htons(type | ISAKMP_GEN_TV);
-		attr->lorv = htons(value);
-		goto out;
-	}
-
-	attr->type = htons(type | ISAKMP_GEN_TLV);
-	attr->lorv = htons(dlen);
-	data = (char *)(attr + 1);
-
-	switch(type) {
-	case XAUTH_USER_NAME:
-		/* 
-		 * iph1->rmconf->xauth->login->v is valid, 
-		 * we just checked it in the previous switch case 
-		 */
-		memcpy(data, iph1->rmconf->xauth->login->v, dlen);
-		break;
-#ifdef ANDROID_PATCHED
-        case XAUTH_PASSCODE:
-#endif  
-	case XAUTH_USER_PASSWORD:
-		memcpy(data, pwd->v, dlen);
-		break;
-	default:
-		break;
-	}
-
-out:
-	if (freepwd)
-		vfree(pwd);
-
-	return buffer;
-}
-
-vchar_t *
-isakmp_xauth_set(iph1, attr)
-	struct ph1handle *iph1;
-	struct isakmp_data *attr;
-{
-	int type;
-	vchar_t *buffer = NULL;
-	char *data;
-	struct xauth_state *xst;
-	size_t dlen = 0;
-	char* mraw = NULL, *mdata;
-
-	if ((iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_XAUTH) == 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Xauth mode config set but peer "
-		    "did not declare itself as Xauth capable\n");
-		return NULL;
-	}
-
-	type = ntohs(attr->type) & ~ISAKMP_GEN_MASK;
-
-	switch(type) {
-	case XAUTH_STATUS:
-		/* 
-		 * We should only receive ISAKMP mode_cfg SET XAUTH_STATUS
-		 * when running as a client (initiator).
-		 */
-		xst = &iph1->mode_cfg->xauth;
-		switch(AUTHMETHOD(iph1)) {
-		case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-		case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-		/* Not implemented ... */
-		case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-		case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-			break;
-		default:
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Unexpected XAUTH_STATUS_OK\n");
-			return NULL;
-			break;
-		}
-
-		/* If we got a failure, delete iph1 */
-		if (ntohs(attr->lorv) != XAUTH_STATUS_OK) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Xauth authentication failed\n");
-
-			EVT_PUSH(iph1->local, iph1->remote, 
-			    EVTT_XAUTH_FAILED, NULL);
-
-			iph1->mode_cfg->flags |= ISAKMP_CFG_DELETE_PH1;
-		} else {
-			EVT_PUSH(iph1->local, iph1->remote, 
-			    EVTT_XAUTH_SUCCESS, NULL);
-		}
-
-
-		/* We acknowledge it */
-		break;
-	case XAUTH_MESSAGE:
-		if ((ntohs(attr->type) & ISAKMP_GEN_TV) == 0) {
-			dlen = ntohs(attr->lorv);
-			if (dlen > 0) {
-				mraw = (char*)(attr + 1);
-				mdata = binsanitize(mraw, dlen);
-				if (mdata == NULL) {
-					plog(LLV_ERROR, LOCATION, iph1->remote,
-					    "Cannot allocate memory\n");
-					return NULL;
-				}
-				plog(LLV_NOTIFY,LOCATION, iph1->remote,
-					"XAUTH Message: '%s'.\n",
-					mdata);
-				racoon_free(mdata);
-			}
-		}
-
-	default:
-		plog(LLV_WARNING, LOCATION, NULL,
-		    "Ignored attribute %s\n", s_isakmp_cfg_type(type));
-		return NULL;
-		break;
-	}
-
-	if ((buffer = vmalloc(sizeof(*attr))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "Cannot allocate memory\n");
-		return NULL;
-	}
-
-	attr = (struct isakmp_data *)buffer->v;
-	attr->type = htons(type | ISAKMP_GEN_TV);
-	attr->lorv = htons(0);
-
-	return buffer;
-}
-
-
-void 
-xauth_rmstate(xst)
-	struct xauth_state *xst;
-{
-	switch (xst->authtype) {
-	case XAUTH_TYPE_GENERIC:
-		if (xst->authdata.generic.usr)
-			racoon_free(xst->authdata.generic.usr);
-
-		if (xst->authdata.generic.pwd)
-			racoon_free(xst->authdata.generic.pwd);
-
-		break;
-
-	case XAUTH_TYPE_CHAP:
-	case XAUTH_TYPE_OTP:
-	case XAUTH_TYPE_SKEY:
-		plog(LLV_WARNING, LOCATION, NULL, 
-		    "Unsupported authtype %d\n", xst->authtype);
-		break;
-
-	default:
-		plog(LLV_WARNING, LOCATION, NULL, 
-		    "Unexpected authtype %d\n", xst->authtype);
-		break;
-	}
-
-#ifdef HAVE_LIBLDAP
-	if (xst->udn != NULL)
-		racoon_free(xst->udn);
-#endif
-	return;
-}
-
-int
-xauth_rmconf_used(xauth_rmconf)
-	struct xauth_rmconf **xauth_rmconf;
-{
-	if (*xauth_rmconf == NULL) {
-		*xauth_rmconf = racoon_malloc(sizeof(**xauth_rmconf));
-		if (*xauth_rmconf == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "xauth_rmconf_used: malloc failed\n");
-			return -1;
-		}
-
-		(*xauth_rmconf)->login = NULL;
-		(*xauth_rmconf)->pass = NULL;
-		(*xauth_rmconf)->state = 0;
-	}
-
-	return 0;
-}
-
-void 
-xauth_rmconf_delete(xauth_rmconf)
-	struct xauth_rmconf **xauth_rmconf;
-{
-	if (*xauth_rmconf != NULL) { 
-		if ((*xauth_rmconf)->login != NULL)
-			vfree((*xauth_rmconf)->login);
-		if ((*xauth_rmconf)->pass != NULL)
-			vfree((*xauth_rmconf)->pass);
-
-		racoon_free(*xauth_rmconf);
-		*xauth_rmconf = NULL;
-	}
-
-	return;
-}
diff --git a/src/racoon/isakmp_xauth.h b/src/racoon/isakmp_xauth.h
deleted file mode 100644
index ebb5214..0000000
--- a/src/racoon/isakmp_xauth.h
+++ /dev/null
@@ -1,155 +0,0 @@
-/*	$NetBSD: isakmp_xauth.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/*	$KAME$ */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus 
- * 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.
- */
-
-#ifndef _ISAKMP_XAUTH_H
-#define _ISAKMP_XAUTH_H
-
-/* ISAKMP mode config attribute types specific to the Xauth vendor ID */
-#define	XAUTH_TYPE                16520
-#define	XAUTH_USER_NAME           16521
-#define	XAUTH_USER_PASSWORD       16522
-#define	XAUTH_PASSCODE            16523
-#define	XAUTH_MESSAGE             16524
-#define	XAUTH_CHALLENGE           16525
-#define	XAUTH_DOMAIN              16526
-#define	XAUTH_STATUS              16527
-#define	XAUTH_NEXT_PIN            16528
-#define	XAUTH_ANSWER              16529
-
-/* Types for XAUTH_TYPE */
-#define	XAUTH_TYPE_GENERIC 	0
-#define	XAUTH_TYPE_CHAP    	1
-#define	XAUTH_TYPE_OTP     	2
-#define	XAUTH_TYPE_SKEY    	3
-
-/* Values for XAUTH_STATUS */
-#define	XAUTH_STATUS_FAIL       0
-#define	XAUTH_STATUS_OK         1
-
-/* For phase 1 Xauth status */
-struct xauth_state {
-	int status; /* authentication status, used only on server side */
-	int vendorid;
-	int authtype;
-	union {
-		struct authgeneric {
-			char *usr;
-			char *pwd;
-		} generic;
-	} authdata;
-#ifdef HAVE_LIBLDAP
-	char *udn; /* ldap user dn */
-#endif
-};
-
-/* What's been sent */
-#define XAUTH_SENT_USERNAME 1
-#define XAUTH_SENT_PASSWORD 2
-#define XAUTH_SENT_EVERYTHING (XAUTH_SENT_USERNAME | XAUTH_SENT_PASSWORD)
-
-/* For rmconf Xauth data */
-struct xauth_rmconf {
-	vchar_t *login;	/* xauth login */
-	vchar_t *pass;	/* xauth password */
-	int state;      /* what's been sent */
-};
-
-/* status */
-#define XAUTHST_NOTYET	0
-#define XAUTHST_REQSENT	1
-#define XAUTHST_OK	2
-
-struct xauth_reply_arg {
-	isakmp_index index;
-	int port;
-	int id;
-	int res;
-};
-
-struct ph1handle;
-struct isakmp_data;
-void xauth_sendreq(struct ph1handle *);
-int xauth_attr_reply(struct ph1handle *, struct isakmp_data *, int);
-int xauth_login_system(char *, char *);
-void xauth_sendstatus(struct ph1handle *, int, int);
-int xauth_check(struct ph1handle *);
-int group_check(struct ph1handle *, char **, int);
-vchar_t *isakmp_xauth_req(struct ph1handle *, struct isakmp_data *);
-vchar_t *isakmp_xauth_set(struct ph1handle *, struct isakmp_data *);
-void xauth_rmstate(struct xauth_state *);
-void xauth_reply_stub(void *);
-int xauth_reply(struct ph1handle *, int, int, int);
-int xauth_rmconf_used(struct xauth_rmconf **);
-void xauth_rmconf_delete(struct xauth_rmconf **);
-
-#ifdef HAVE_LIBRADIUS
-int xauth_login_radius(struct ph1handle *, char *, char *);
-int xauth_radius_init(void);
-#endif
-
-#ifdef HAVE_LIBPAM
-int xauth_login_pam(int, struct sockaddr *, char *, char *);
-#endif
-
-#ifdef HAVE_LIBLDAP
-
-#define LDAP_DFLT_HOST		"localhost"
-#define LDAP_DFLT_USER		"cn"
-#define LDAP_DFLT_ADDR		"racoon-address"
-#define LDAP_DFLT_MASK		"racoon-netmask"
-#define LDAP_DFLT_GROUP		"cn"
-#define LDAP_DFLT_MEMBER	"member"
-
-struct xauth_ldap_config {
-	int		pver;
-	vchar_t 	*host;
-	int		port;
-	vchar_t		*base;
-	int		subtree;
-	vchar_t		*bind_dn;
-	vchar_t		*bind_pw;
-	int		auth_type;
-	vchar_t		*attr_user;
-	vchar_t		*attr_addr;
-	vchar_t		*attr_mask;
-	vchar_t		*attr_group;
-	vchar_t		*attr_member;
-};
-
-extern struct xauth_ldap_config xauth_ldap_config;
-
-int xauth_ldap_init(void);
-int xauth_login_ldap(struct ph1handle *, char *, char *);
-#endif
-
-#endif /* _ISAKMP_XAUTH_H */
diff --git a/src/racoon/kmpstat.c b/src/racoon/kmpstat.c
deleted file mode 100644
index c59e43a..0000000
--- a/src/racoon/kmpstat.c
+++ /dev/null
@@ -1,227 +0,0 @@
-/*	$NetBSD: kmpstat.c,v 1.4.6.2 2007/11/06 16:41:33 vanhu Exp $	*/
-
-/*	$KAME: kmpstat.c,v 1.33 2004/08/16 08:20:28 itojun Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <net/pfkeyv2.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#include <netdb.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <err.h>
-#include <sys/ioctl.h> 
-#include <resolv.h>
-
-#include "libpfkey.h"
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "debug.h"
-#include "sockmisc.h"
-
-#include "racoonctl.h"
-#include "admin.h"
-#include "schedule.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "isakmp_xauth.h"
-#include "isakmp_var.h"
-#include "isakmp_cfg.h"
-#include "oakley.h"
-#include "handler.h"
-#include "pfkey.h"
-#include "admin.h"
-#include "evt.h"
-#include "admin_var.h"
-#include "ipsec_doi.h"
-
-u_int32_t racoonctl_interface = RACOONCTL_INTERFACE;
-u_int32_t racoonctl_interface_major = RACOONCTL_INTERFACE_MAJOR;
-
-static int so;
-u_int32_t loglevel = 0;
-
-int
-com_init()
-{
-	struct sockaddr_un name;
-
-	memset(&name, 0, sizeof(name));
-	name.sun_family = AF_UNIX;
-	snprintf(name.sun_path, sizeof(name.sun_path),
-		"%s", adminsock_path);
-
-	so = socket(AF_UNIX, SOCK_STREAM, 0);
-	if (so < 0)
-		return -1;
-
-	if (connect(so, (struct sockaddr *)&name, sizeof(name)) < 0) {
-		(void)close(so);
-		return -1;
-	}
-
-	return 0;
-}
-
-int
-com_send(combuf)
-	vchar_t *combuf;
-{
-	int len;
-
-	if ((len = send(so, combuf->v, combuf->l, 0)) == -1) {
-		perror("send");
-		(void)close(so);
-		return -1;
-	}
-
-	return 0;
-}
-
-int
-com_recv(combufp) 
-	vchar_t **combufp;
-{
-	struct admin_com h, *com;
-	caddr_t buf;
-	int len;
-	int l = 0;
-	caddr_t p;
-
-	if (combufp == NULL)
-		return -1;
-
-	/* receive by PEEK */ 
-	if ((len = recv(so, &h, sizeof(h), MSG_PEEK)) == -1)
-		goto bad1;
-
-	/* sanity check */
-	if (len < sizeof(h))
-		goto bad1;
-
-	if (h.ac_errno) {
-		errno = h.ac_errno;
-		goto bad1;
-	}
-
-	/* allocate buffer */
-	if ((*combufp = vmalloc(h.ac_len)) == NULL)
-		goto bad1;
-
-	/* read real message */
-	p = (*combufp)->v;
-	while (l < len) {
-		if ((len = recv(so, p, h.ac_len, 0)) < 0) {
-			perror("recv");
-			goto bad2;
-		}
-		l += len;
-		p += len;
-	}
-	
-	return 0;
-
-bad2:
-	vfree(*combufp);
-bad1:
-	*combufp = NULL;
-	return -1;
-}
-
-/*
- * Dumb plog functions (used by sockmisc.c) 
- */
-void
-_plog(int pri, const char *func, struct sockaddr *sa, const char *fmt, ...)
-{
-	va_list ap;
-
-	va_start(ap, fmt);
-	vprintf(fmt, ap);
-	va_end(ap);
-}
-
-void
-plogdump(pri, data, len) 
-	int pri;
-	void *data;
-	size_t len;
-{
-	return;
-}
-
-struct sockaddr *
-get_sockaddr(family, name, port)
-	int family;
-	char *name, *port;
-{
-	struct addrinfo hint, *ai;
-	int error;
-
-	memset(&hint, 0, sizeof(hint));
-	hint.ai_family = PF_UNSPEC;
-	hint.ai_family = family;
-	hint.ai_socktype = SOCK_STREAM;
-
-	error = getaddrinfo(name, port, &hint, &ai);
-	if (error != 0) {
-		printf("%s: %s/%s\n", gai_strerror(error), name, port);
-		return NULL;
-	}
-
-	return ai->ai_addr;
-}
diff --git a/src/racoon/localconf.c b/src/racoon/localconf.c
deleted file mode 100644
index ede1d9b..0000000
--- a/src/racoon/localconf.c
+++ /dev/null
@@ -1,371 +0,0 @@
-/*	$NetBSD: localconf.c,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/*	$KAME: localconf.c,v 1.33 2001/08/09 07:32:19 sakane Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-#include <err.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "localconf.h"
-#include "algorithm.h"
-#include "admin.h"
-#include "privsep.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "ipsec_doi.h"
-#include "grabmyaddr.h"
-#include "vendorid.h"
-#include "str2val.h"
-#include "safefile.h"
-#include "admin.h"
-#include "gcmalloc.h"
-
-struct localconf *lcconf;
-
-static void setdefault __P((void));
-
-void
-initlcconf()
-{
-	lcconf = racoon_calloc(1, sizeof(*lcconf));
-	if (lcconf == NULL)
-		errx(1, "failed to allocate local conf.");
-
-	setdefault();
-
-	lcconf->racoon_conf = LC_DEFAULT_CF;
-}
-
-void
-flushlcconf()
-{
-	int i;
-
-	setdefault();
-	clear_myaddr(&lcconf->myaddrs);
-	for (i = 0; i < LC_PATHTYPE_MAX; i++) {
-		if (lcconf->pathinfo[i]) {
-			racoon_free(lcconf->pathinfo[i]);
-			lcconf->pathinfo[i] = NULL;
-		}
-	}
-	for (i = 0; i < LC_IDENTTYPE_MAX; i++) {
-		if (lcconf->ident[i])
-			vfree(lcconf->ident[i]);
-		lcconf->ident[i] = NULL;
-	}
-}
-
-static void
-setdefault()
-{
-	lcconf->uid = 0;
-	lcconf->gid = 0;
-	lcconf->chroot = NULL;
-	lcconf->autograbaddr = 1;
-	lcconf->port_isakmp = PORT_ISAKMP;
-	lcconf->port_isakmp_natt = PORT_ISAKMP_NATT;
-	lcconf->default_af = AF_INET;
-	lcconf->pad_random = LC_DEFAULT_PAD_RANDOM;
-	lcconf->pad_randomlen = LC_DEFAULT_PAD_RANDOMLEN;
-	lcconf->pad_maxsize = LC_DEFAULT_PAD_MAXSIZE;
-	lcconf->pad_strict = LC_DEFAULT_PAD_STRICT;
-	lcconf->pad_excltail = LC_DEFAULT_PAD_EXCLTAIL;
-	lcconf->retry_counter = LC_DEFAULT_RETRY_COUNTER;
-	lcconf->retry_interval = LC_DEFAULT_RETRY_INTERVAL;
-	lcconf->count_persend = LC_DEFAULT_COUNT_PERSEND;
-	lcconf->secret_size = LC_DEFAULT_SECRETSIZE;
-	lcconf->retry_checkph1 = LC_DEFAULT_RETRY_CHECKPH1;
-	lcconf->wait_ph2complete = LC_DEFAULT_WAIT_PH2COMPLETE;
-	lcconf->strict_address = FALSE;
-	lcconf->complex_bundle = TRUE; /*XXX FALSE;*/
-	lcconf->gss_id_enc = LC_GSSENC_UTF16LE; /* Windows compatibility */
-	lcconf->natt_ka_interval = LC_DEFAULT_NATT_KA_INTERVAL;
-}
-
-/*
- * get PSK by string.
- */
-vchar_t *
-getpskbyname(id0)
-	vchar_t *id0;
-{
-	char *id;
-	vchar_t *key = NULL;
-
-	id = racoon_calloc(1, 1 + id0->l - sizeof(struct ipsecdoi_id_b));
-	if (id == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get psk buffer.\n");
-		goto end;
-	}
-	memcpy(id, id0->v + sizeof(struct ipsecdoi_id_b),
-		id0->l - sizeof(struct ipsecdoi_id_b));
-	id[id0->l - sizeof(struct ipsecdoi_id_b)] = '\0';
-
-	key = privsep_getpsk(id, id0->l - sizeof(struct ipsecdoi_id_b));
-
-end:
-	if (id)
-		racoon_free(id);
-	return key;
-}
-
-/*
- * get PSK by address.
- */
-vchar_t *
-getpskbyaddr(remote)
-	struct sockaddr *remote;
-{
-	vchar_t *key = NULL;
-	char addr[NI_MAXHOST], port[NI_MAXSERV];
-
-	GETNAMEINFO(remote, addr, port);
-
-	key = privsep_getpsk(addr, strlen(addr));
-
-	return key;
-}
-
-vchar_t *
-getpsk(str, len)
-	const char *str;
-	const int len;
-{
-	FILE *fp;
-	char buf[1024];	/* XXX how is variable length ? */
-	vchar_t *key = NULL;
-	char *p, *q;
-	size_t keylen;
-	char *k = NULL;
-
-	if (safefile(lcconf->pathinfo[LC_PATHTYPE_PSK], 1) == 0)
-		fp = fopen(lcconf->pathinfo[LC_PATHTYPE_PSK], "r");
-	else
-		fp = NULL;
-	if (fp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to open pre_share_key file %s\n",
-			lcconf->pathinfo[LC_PATHTYPE_PSK]);
-		return NULL;
-	}
-
-	while (fgets(buf, sizeof(buf), fp) != NULL) {
-		/* comment line */
-		if (buf[0] == '#')
-			continue;
-
-		/* search the end of 1st string. */
-		for (p = buf; *p != '\0' && !isspace((int)*p); p++)
-			;
-		if (*p == '\0')
-			continue;	/* no 2nd parameter */
-		*p = '\0';
-		/* search the 1st of 2nd string. */
-		while (isspace((int)*++p))
-			;
-		if (*p == '\0')
-			continue;	/* no 2nd parameter */
-		p--;
-		if (strncmp(buf, str, len) == 0 && buf[len] == '\0') {
-			p++;
-			keylen = 0;
-			for (q = p; *q != '\0' && *q != '\n'; q++)
-				keylen++;
-			*q = '\0';
-
-			/* fix key if hex string */
-			if (strncmp(p, "0x", 2) == 0) {
-				k = str2val(p + 2, 16, &keylen);
-				if (k == NULL) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"failed to get psk buffer.\n");
-					goto end;
-				}
-				p = k;
-			}
-
-			key = vmalloc(keylen);
-			if (key == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to allocate key buffer.\n");
-				goto end;
-			}
-			memcpy(key->v, p, key->l);
-			if (k)
-				racoon_free(k);
-			goto end;
-		}
-	}
-
-end:
-	fclose(fp);
-	return key;
-}
-
-/*
- * get a file name of a type specified.
- */
-void
-getpathname(path, len, type, name)
-	char *path;
-	int len, type;
-	const char *name;
-{
-	snprintf(path, len, "%s%s%s", 
-		name[0] == '/' ? "" : lcconf->pathinfo[type],
-		name[0] == '/' ? "" : "/",
-		name);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "filename: %s\n", path);
-}
-
-#if 0 /* DELETEIT */
-static int lc_doi2idtype[] = {
-	-1,
-	-1,
-	LC_IDENTTYPE_FQDN,
-	LC_IDENTTYPE_USERFQDN,
-	-1,
-	-1,
-	-1,
-	-1,
-	-1,
-	LC_IDENTTYPE_CERTNAME,
-	-1,
-	LC_IDENTTYPE_KEYID,
-};
-
-/*
- * convert DOI value to idtype
- * OUT	-1   : NG
- *	other: converted.
- */
-int
-doi2idtype(idtype)
-	int idtype;
-{
-	if (ARRAYLEN(lc_doi2idtype) > idtype)
-		return lc_doi2idtype[idtype];
-	return -1;
-}
-#endif
-
-static int lc_sittype2doi[] = {
-	IPSECDOI_SIT_IDENTITY_ONLY,
-	IPSECDOI_SIT_SECRECY,
-	IPSECDOI_SIT_INTEGRITY,
-};
-
-/*
- * convert sittype to DOI value.
- * OUT	-1   : NG
- *	other: converted.
- */
-int
-sittype2doi(sittype)
-	int sittype;
-{
-	if (ARRAYLEN(lc_sittype2doi) > sittype)
-		return lc_sittype2doi[sittype];
-	return -1;
-}
-
-static int lc_doitype2doi[] = {
-	IPSEC_DOI,
-};
-
-/*
- * convert doitype to DOI value.
- * OUT	-1   : NG
- *	other: converted.
- */
-int
-doitype2doi(doitype)
-	int doitype;
-{
-	if (ARRAYLEN(lc_doitype2doi) > doitype)
-		return lc_doitype2doi[doitype];
-	return -1;
-}
-
-
-
-static void
-saverestore_params(f)
-	int f;
-{
-	static u_int16_t s_port_isakmp;
-#ifdef ENABLE_ADMINPORT
-	static u_int16_t s_port_admin;
-#endif
-
-	/* 0: save, 1: restore */
-	if (f) {
-		lcconf->port_isakmp = s_port_isakmp;
-#ifdef ENABLE_ADMINPORT
-		lcconf->port_admin = s_port_admin;
-#endif
-	} else {
-		s_port_isakmp = lcconf->port_isakmp;
-#ifdef ENABLE_ADMINPORT
-		s_port_admin = lcconf->port_admin;
-#endif
-	}
-}
-
-void
-restore_params()
-{
-	saverestore_params(1);
-}
-
-void
-save_params()
-{
-	saverestore_params(0);
-}
diff --git a/src/racoon/localconf.h b/src/racoon/localconf.h
deleted file mode 100644
index f7cf33a..0000000
--- a/src/racoon/localconf.h
+++ /dev/null
@@ -1,137 +0,0 @@
-/*	$NetBSD: localconf.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: localconf.h,v 1.13 2005/11/06 18:13:18 monas Exp */
-
-/*
- * 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.
- */
-
-#ifndef _LOCALCONF_H
-#define _LOCALCONF_H
-
-/* local configuration */
-
-#define LC_DEFAULT_CF	SYSCONFDIR "/racoon.conf"
-
-#define LC_PATHTYPE_INCLUDE	0
-#define LC_PATHTYPE_PSK		1
-#define LC_PATHTYPE_CERT	2
-#define LC_PATHTYPE_BACKUPSA	3
-#define LC_PATHTYPE_SCRIPT	4
-#define LC_PATHTYPE_PIDFILE	5
-#define LC_PATHTYPE_MAX		6
-
-#define LC_DEFAULT_PAD_MAXSIZE		20
-#define LC_DEFAULT_PAD_RANDOM		TRUE
-#define LC_DEFAULT_PAD_RANDOMLEN	FALSE
-#define LC_DEFAULT_PAD_STRICT		FALSE
-#define LC_DEFAULT_PAD_EXCLTAIL		TRUE
-#define LC_DEFAULT_RETRY_COUNTER	5
-#define LC_DEFAULT_RETRY_INTERVAL	10
-#define LC_DEFAULT_COUNT_PERSEND	1
-#define LC_DEFAULT_RETRY_CHECKPH1	30
-#define LC_DEFAULT_WAIT_PH2COMPLETE	30
-#define LC_DEFAULT_NATT_KA_INTERVAL	20
-
-#define LC_DEFAULT_SECRETSIZE	16	/* 128 bits */
-
-#define LC_IDENTTYPE_MAX	5	/* XXX */
-
-#define	LC_GSSENC_UTF16LE	0	/* GSS ID in UTF-16LE */
-#define	LC_GSSENC_LATIN1	1	/* GSS ID in ISO-Latin-1 */
-#define	LC_GSSENC_MAX		2
-
-struct localconf {
-	char *racoon_conf;		/* configuration filename */
-
-	uid_t uid;
-	gid_t gid;
-	char *chroot;			/* chroot path */
-	u_int16_t port_isakmp;		/* port for isakmp as default */
-	u_int16_t port_isakmp_natt;	/* port for NAT-T use */
-	u_int16_t port_admin;		/* port for admin */
-	int default_af;			/* default address family */
-
-	int sock_admin;
-	int sock_pfkey;
-	int rtsock;			/* routing socket */
-
-	int autograbaddr;
-	struct myaddrs *myaddrs;
-
-	char *pathinfo[LC_PATHTYPE_MAX];
-	vchar_t *ident[LC_IDENTTYPE_MAX]; /* base of Identifier payload. */
-
-	int pad_random;
-	int pad_randomlen;
-	int pad_maxsize;
-	int pad_strict;
-	int pad_excltail;
-
-	int retry_counter;		/* times to retry. */
-	int retry_interval;		/* interval each retry. */
-	int count_persend;		/* the number of packets each retry. */
-				/* above 3 values are copied into a handler. */
-
-	int retry_checkph1;
-	int wait_ph2complete;
-
-	int natt_ka_interval;		/* NAT-T keepalive interval. */
-
-	int secret_size;
-	int strict_address;		/* strictly check addresses. */
-
-	int complex_bundle;
-		/*
-		 * If we want to make a packet "IP2 AH ESP IP1 ULP",
-		 * the SPD in KAME expresses AH transport + ESP tunnel.
-		 * So racoon sent the proposal contained such the order.
-		 * But lots of implementation interprets AH tunnel + ESP
-		 * tunnel in this case.  racoon has changed the format,
-		 * usually uses this format.  If the option, 'complex_bundle'
-		 * is enable, racoon uses old format.
-		 */
-
-	int gss_id_enc;			/* GSS ID encoding to use */
-};
-
-extern struct localconf *lcconf;
-
-extern void initlcconf __P((void));
-extern void flushlcconf __P((void));
-extern vchar_t *getpskbyname __P((vchar_t *));
-extern vchar_t *getpskbyaddr __P((struct sockaddr *));
-extern void getpathname __P((char *, int, int, const char *));
-extern int sittype2doi __P((int));
-extern int doitype2doi __P((int));
-extern vchar_t *getpsk __P((const char *, const int)); 
-
-extern void restore_params __P((void));
-extern void save_params __P((void));
-
-#endif /* _LOCALCONF_H */
diff --git a/src/racoon/logger.c b/src/racoon/logger.c
deleted file mode 100644
index 06991cc..0000000
--- a/src/racoon/logger.c
+++ /dev/null
@@ -1,262 +0,0 @@
-/*	$NetBSD: logger.c,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/*	$KAME: logger.c,v 1.9 2002/09/03 14:37:03 itojun Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#ifdef HAVE_STDARG_H
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-
-#include "logger.h"
-#include "var.h"
-#include "gcmalloc.h"
-
-struct log *
-log_open(siz, fname)
-	size_t siz;
-	char *fname;
-{
-	struct log *p;
-
-	p = (struct log *)racoon_malloc(sizeof(*p));
-	if (p == NULL)
-		return NULL;
-	memset(p, 0, sizeof(*p));
-
-	p->buf = (char **)racoon_malloc(sizeof(char *) * siz);
-	if (p->buf == NULL) {
-		racoon_free(p);
-		return NULL;
-	}
-	memset(p->buf, 0, sizeof(char *) * siz);
-
-	p->tbuf = (time_t *)racoon_malloc(sizeof(time_t *) * siz);
-	if (p->tbuf == NULL) {
-		racoon_free(p->buf);
-		racoon_free(p);
-		return NULL;
-	}
-	memset(p->tbuf, 0, sizeof(time_t *) * siz);
-
-	p->siz = siz;
-	if (fname)
-		p->fname = racoon_strdup(fname);
-
-	return p;
-}
-
-/*
- * append string to ring buffer.
- * string must be \n-terminated (since we add timestamps).
- * even if not, we'll add \n to avoid formatting mistake (see log_close()).
- */
-void
-log_add(p, str)
-	struct log *p;
-	char *str;
-{
-	/* syslog if p->fname == NULL? */
-	if (p->buf[p->head])
-		racoon_free(p->buf[p->head]);
-	p->buf[p->head] = racoon_strdup(str);
-	p->tbuf[p->head] = time(NULL);
-	p->head++;
-	p->head %= p->siz;
-}
-
-/*
- * write out string to the log file, as is.
- * \n-termination is up to the caller.  if you don't add \n, the file
- * format may be broken.
- */
-int
-log_print(p, str)
-	struct log *p;
-	char *str;
-{
-	FILE *fp;
-
-	if (p->fname == NULL)
-		return -1;	/*XXX syslog?*/
-	fp = fopen(p->fname, "a");
-	if (fp == NULL)
-		return -1;
-	fprintf(fp, "%s", str);
-	fclose(fp);
-
-	return 0;
-}
-
-int
-log_vprint(struct log *p, const char *fmt, ...)
-{
-	va_list ap;
-
-	FILE *fp;
-
-	if (p->fname == NULL)
-		return -1;	/*XXX syslog?*/
-	fp = fopen(p->fname, "a");
-	if (fp == NULL)
-		return -1;
-	va_start(ap, fmt);
-	vfprintf(fp, fmt, ap);
-	va_end(ap);
-
-	fclose(fp);
-
-	return 0;
-}
-
-int
-log_vaprint(struct log *p, const char *fmt, va_list ap)
-{
-	FILE *fp;
-
-	if (p->fname == NULL)
-		return -1;	/*XXX syslog?*/
-	fp = fopen(p->fname, "a");
-	if (fp == NULL)
-		return -1;
-	vfprintf(fp, fmt, ap);
-	fclose(fp);
-
-	return 0;
-}
-
-/*
- * write out content of ring buffer, and reclaim the log structure
- */
-int
-log_close(p)
-	struct log *p;
-{
-	FILE *fp;
-	int i, j;
-	char ts[256];
-	struct tm *tm;
-
-	if (p->fname == NULL)
-		goto nowrite;
-	fp = fopen(p->fname, "a");
-	if (fp == NULL)
-		goto nowrite;
-
-	for (i = 0; i < p->siz; i++) {
-		j = (p->head + i) % p->siz;
-		if (p->buf[j]) {
-			tm = localtime(&p->tbuf[j]);
-			strftime(ts, sizeof(ts), "%B %d %T", tm);
-			fprintf(fp, "%s: %s\n", ts, p->buf[j]);
-			if (*(p->buf[j] + strlen(p->buf[j]) - 1) != '\n')
-				fprintf(fp, "\n");
-		}
-	}
-	fclose(fp);
-
-nowrite:
-	log_free(p);
-	return 0;
-}
-
-void
-log_free(p)
-	struct log *p;
-{
-	int i;
-
-	for (i = 0; i < p->siz; i++)
-		racoon_free(p->buf[i]);
-	racoon_free(p->buf);
-	racoon_free(p->tbuf);
-	if (p->fname)
-		racoon_free(p->fname);
-	racoon_free(p);
-}
-
-#ifdef TEST
-struct log *l;
-
-void
-vatest(const char *fmt, ...)
-{
-	va_list ap;
-	va_start(ap, fmt);
-	log_vaprint(l, fmt, ap);
-	va_end(ap);
-}
-
-int
-main(argc, argv)
-	int argc;
-	char **argv;
-{
-	int i;
-
-	l = log_open(30, "/tmp/hoge");
-	if (l == NULL)
-		errx(1, "hoge");
-
-	for (i = 0; i < 50; i++) {
-		log_add(l, "foo");
-		log_add(l, "baa");
-		log_add(l, "baz");
-	}
-	log_print(l, "hoge\n");
-	log_vprint(l, "hoge %s\n", "this is test");
-	vatest("%s %s\n", "this is", "vprint test");
-	abort();
-	log_free(l);
-}
-
-#endif
-
diff --git a/src/racoon/logger.h b/src/racoon/logger.h
deleted file mode 100644
index 3fd3e94..0000000
--- a/src/racoon/logger.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*	$NetBSD: logger.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: logger.h,v 1.3 2004/06/11 16:00:16 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _LOGGER_H
-#define _LOGGER_H
-
-struct log {
-	int head;
-	int siz;
-	char **buf;
-	time_t *tbuf;
-	char *fname;
-};
-
-extern struct log *log_open __P((size_t, char *));
-extern void log_add __P((struct log *, char *));
-extern int log_print __P((struct log *, char *));
-extern int log_vprint __P((struct log *, const char *, ...));
-extern int log_vaprint __P((struct log *, const char *, va_list));
-extern int log_close __P((struct log *));
-extern void log_free __P((struct log *));
-
-#endif /* _LOGGER_H */
diff --git a/src/racoon/main.c b/src/racoon/main.c
deleted file mode 100644
index 094026e..0000000
--- a/src/racoon/main.c
+++ /dev/null
@@ -1,398 +0,0 @@
-/*	$NetBSD: main.c,v 1.6.6.2 2008/11/27 15:25:26 vanhu Exp $	*/
-
-/* Id: main.c,v 1.25 2006/06/20 20:31:34 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/stat.h>
-
-#include <netinet/in.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <limits.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <paths.h>
-#include <err.h>
-
-/*
- * If we're using a debugging malloc library, this may define our
- * wrapper stubs.
- */
-#define	RACOON_MAIN_PROGRAM
-#include "gcmalloc.h"
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "cfparse_proto.h"
-#include "isakmp_var.h"
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#include "isakmp.h"
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h"
-#endif
-#include "remoteconf.h"
-#include "localconf.h"
-#include "session.h"
-#include "oakley.h"
-#include "pfkey.h"
-#include "policy.h"
-#include "crypto_openssl.h"
-#include "backupsa.h"
-#include "vendorid.h"
-
-#include "package_version.h"
-
-int f_local = 0;	/* local test mode.  behave like a wall. */
-int vflag = 1;		/* for print-isakmp.c */
-static int loading_sa = 0;	/* install sa when racoon boots up. */
-static int dump_config = 0;	/* dump parsed config file. */
-
-#ifdef TOP_PACKAGE
-static char version[] = "@(#)" TOP_PACKAGE_STRING " (" TOP_PACKAGE_URL ")";
-#else /* TOP_PACKAGE */
-static char version[] = "@(#) racoon / IPsec-tools";
-#endif /* TOP_PACKAGE */
-
-int main __P((int, char **));
-static void usage __P((void));
-static void parse __P((int, char **));
-#if 0
-static void cleanup_pidfile __P((void));
-#endif
-
-void
-usage()
-{
-	printf("usage: racoon [-BdFv%s] %s[-f (file)] [-l (file)] [-p (port)]\n",
-#ifdef INET6
-		"46",
-#else
-		"",
-#endif
-#ifdef ENABLE_ADMINPORT
-		"[-a (port)] "
-#else
-		""
-#endif
-		);
-	printf("   -B: install SA to the kernel from the file "
-		"specified by the configuration file.\n");
-	printf("   -d: debug level, more -d will generate more debug message.\n");
-	printf("   -C: dump parsed config file.\n");
-	printf("   -L: include location in debug messages\n");
-	printf("   -F: run in foreground, do not become daemon.\n");
-	printf("   -v: be more verbose\n");
-#ifdef INET6
-	printf("   -4: IPv4 mode.\n");
-	printf("   -6: IPv6 mode.\n");
-#endif
-#ifdef ENABLE_ADMINPORT
-	printf("   -a: port number for admin port.\n");
-#endif
-	printf("   -f: pathname for configuration file.\n");
-	printf("   -l: pathname for log file.\n");
-	printf("   -p: port number for isakmp (default: %d).\n", PORT_ISAKMP);
-	printf("   -P: port number for NAT-T (default: %d).\n", PORT_ISAKMP_NATT);
-	exit(1);
-}
-
-int
-main(ac, av)
-	int ac;
-	char **av;
-{
-	int error;
-
-	if (geteuid() != 0) {
-		errx(1, "must be root to invoke this program.");
-		/* NOTREACHED*/
-	}
-
-	/*
-	 * 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.
-	 */
-	umask(077);
-	if (umask(077) != 077) {
-		errx(1, "could not set umask");
-		/* NOTREACHED*/
-	}
-
-#ifdef DEBUG_RECORD_MALLOCATION
-	DRM_init();
-#endif
-
-#ifdef HAVE_SECCTX
-	init_avc();
-#endif
-	eay_init();
-	initlcconf();
-	initrmconf();
-	oakley_dhinit();
-	compute_vendorids();
-
-	parse(ac, av);
-
-	ploginit();
-
-	plog(LLV_INFO, LOCATION, NULL, "%s\n", version);
-	plog(LLV_INFO, LOCATION, NULL, "@(#)"
-	    "This product linked %s (http://www.openssl.org/)"
-	    "\n", eay_version());
-	plog(LLV_INFO, LOCATION, NULL, "Reading configuration from \"%s\"\n", 
-	    lcconf->racoon_conf);
-
-	if (pfkey_init() < 0) {
-		errx(1, "something error happened "
-			"while pfkey initializing.");
-		/* NOTREACHED*/
-	}
-
-#ifdef ENABLE_HYBRID
-	if (isakmp_cfg_init(ISAKMP_CFG_INIT_COLD))
-		errx(1, "could not initialize ISAKMP mode config structures");
-#endif
-
-#ifdef HAVE_LIBLDAP
-	if (xauth_ldap_init() != 0)
-		errx(1, "could not initialize libldap");
-#endif
-
-	/*
-	 * in order to prefer the parameters by command line,
-	 * saving some parameters before parsing configuration file.
-	 */
-	save_params();
-	error = cfparse();
-	if (error != 0)
-		errx(1, "failed to parse configuration file.");
-	restore_params();
-
-#ifdef ENABLE_HYBRID
-	if(isakmp_cfg_config.network4 && isakmp_cfg_config.pool_size == 0)
-		if ((error = isakmp_cfg_resize_pool(ISAKMP_CFG_MAX_CNX)) != 0)
-			return error;
-#endif
-
-	if (dump_config)
-		dumprmconf ();
-
-#ifdef HAVE_LIBRADIUS
-	if (xauth_radius_init() != 0) {
-		errx(1, "could not initialize libradius");
-		/* NOTREACHED*/
-	}
-#endif
-
-	/*
-	 * install SAs from the specified file.  If the file is not specified
-	 * by the configuration file, racoon will exit.
-	 */
-	if (loading_sa && !f_local) {
-		if (backupsa_from_file() != 0)
-			errx(1, "something error happened "
-				"SA recovering.");
-	}
-
-	if (f_foreground)
-		close(0);
-	else {
-		if (daemon(0, 0) < 0) {
-			errx(1, "failed to be daemon. (%s)",
-				strerror(errno));
-		}
-#ifndef __linux__
-		/*
-		 * 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..
-		 */
-		if (setlogin("") < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"cannot clear logname: %s\n", strerror(errno));
-			/* no big deal if it fails.. */
-		}
-#endif
-		if (!f_local) {
-#if 0
-			if (atexit(cleanup_pidfile) < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"cannot register pidfile cleanup");
-			}
-#endif
-		}
-	}
-
-	session();
-
-	exit(0);
-}
-
-#if 0
-static void
-cleanup_pidfile()
-{
-	pid_t p = getpid();
-
-	/* if it's not child process, clean everything */
-	if (racoon_pid == p) {
-		const char *pid_file = _PATH_VARRUN "racoon.pid";
-
-		(void) unlink(pid_file);
-	}
-}
-#endif
-
-static void
-parse(ac, av)
-	int ac;
-	char **av;
-{
-	extern char *optarg;
-	extern int optind;
-	int c;
-#ifdef YYDEBUG
-	extern int yydebug;
-#endif
-
-	pname = strrchr(*av, '/');
-	if (pname)
-		pname++;
-	else
-		pname = *av;
-
-	while ((c = getopt(ac, av, "dLFp:P:a:f:l:vZBC"
-#ifdef YYDEBUG
-			"y"
-#endif
-#ifdef INET6
-			"46"
-#endif
-			)) != -1) {
-		switch (c) {
-		case 'd':
-			loglevel++;
-			break;
-		case 'L':
-			print_location = 1;
-			break;
-		case 'F':
-			printf("Foreground mode.\n");
-			f_foreground = 1;
-			break;
-		case 'p':
-			lcconf->port_isakmp = atoi(optarg);
-			break;
-		case 'P':
-			lcconf->port_isakmp_natt = atoi(optarg);
-			break;
-		case 'a':
-#ifdef ENABLE_ADMINPORT
-			lcconf->port_admin = atoi(optarg);
-			break;
-#else
-			fprintf(stderr, "%s: the option is disabled "
-			    "in the configuration\n", pname);
-			exit(1);
-#endif
-		case 'f':
-			lcconf->racoon_conf = optarg;
-			break;
-		case 'l':
-			plogset(optarg);
-			break;
-		case 'v':
-			vflag++;
-			break;
-		case 'Z':
-			/*
-			 * 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.
-			 */
-			printf("Local test mode.\n");
-			f_local = 1;
-			break;
-#ifdef YYDEBUG
-		case 'y':
-			yydebug = 1;
-			break;
-#endif
-#ifdef INET6
-		case '4':
-			lcconf->default_af = AF_INET;
-			break;
-		case '6':
-			lcconf->default_af = AF_INET6;
-			break;
-#endif
-		case 'B':
-			loading_sa++;
-			break;
-		case 'C':
-			dump_config++;
-			break;
-		default:
-			usage();
-			/* NOTREACHED */
-		}
-	}
-	ac -= optind;
-	av += optind;
-
-	if (ac != 0) {
-		usage();
-		/* NOTREACHED */
-	}
-
-	return;
-}
diff --git a/src/racoon/misc.c b/src/racoon/misc.c
deleted file mode 100644
index 18a4f19..0000000
--- a/src/racoon/misc.c
+++ /dev/null
@@ -1,171 +0,0 @@
-/*	$NetBSD: misc.c,v 1.4.6.1 2008/07/15 00:55:48 mgrooms Exp $	*/
-
-/*	$KAME: misc.c,v 1.23 2001/08/16 14:37:29 itojun Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/stat.h>
-#include <sys/time.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <syslog.h>
-#include <ctype.h>
-
-#include "var.h"
-#include "misc.h"
-#include "debug.h"
-
-#if 0
-static int bindump __P((void *, size_t));
-
-static int
-bindump(buf0, len)
-        void *buf0;
-        size_t len;
-{
-	unsigned char *buf = (unsigned char *)buf0;
-	size_t i;
-
-	for (i = 0; i < len; i++) {
-		if ((buf[i] & 0x80) || !isprint(buf[i]))
-			printf("\\x%x", buf[i]);
-		else
-			printf("%c", buf[i]);
-	}
-	printf("\n");
-
-	return 0;
-}
-#endif
-
-int
-racoon_hexdump(buf0, len)
-	const void *buf0;
-	size_t len;
-{
-	const unsigned char *buf = buf0;
-	size_t i;
-
-	for (i = 0; i < len; i++) {
-		if (i != 0 && i % 32 == 0)
-			printf("\n");
-		if (i % 4 == 0)
-			printf(" ");
-		printf("%02x", buf[i]);
-	}
-	printf("\n");
-
-	return 0;
-}
-
-char *
-bit2str(n, bl)
-	int n, bl;
-{
-#define MAXBITLEN 128
-	static char b[MAXBITLEN + 1];
-	int i;
-
-	if (bl > MAXBITLEN)
-		return "Failed to convert.";	/* NG */
-	memset(b, '0', bl);
-	b[bl] = '\0';
-
-	for (i = 0; i < bl; i++) {
-		if (n & (1 << i))
-			b[bl - 1 - i] = '1';
-	}
-
-	return b;
-}
-
-const char *
-debug_location(file, line, func)
-	const char *file;
-	int line;
-	const char *func;
-{
-	static char buf[1024];
-	const char *p;
-
-	/* truncate pathname */
-	p = strrchr(file, '/');
-	if (p)
-		p++;
-	else
-		p = file;
-
-	if (func)
-		snprintf(buf, sizeof(buf), "%s:%d:%s()", p, line, func);
-	else
-		snprintf(buf, sizeof(buf), "%s:%d", p, line);
-
-	return buf;
-}
-
-/*
- * get file size.
- * -1: error occured.
- */
-int
-getfsize(path)
-	char *path;
-{
-        struct stat st;
-
-        if (stat(path, &st) != 0)
-                return -1;
-        else
-                return st.st_size;
-}
-
-/*
- * calculate the difference between two times.
- * t1: start
- * t2: end
- */
-double
-timedelta(t1, t2)
-	struct timeval *t1, *t2;
-{
-	if (t2->tv_usec >= t1->tv_usec)
-		return t2->tv_sec - t1->tv_sec +
-			(double)(t2->tv_usec - t1->tv_usec) / 1000000;
-
-	return t2->tv_sec - t1->tv_sec - 1 +
-		(double)(1000000 + t2->tv_usec - t1->tv_usec) / 1000000;
-}
diff --git a/src/racoon/misc.h b/src/racoon/misc.h
deleted file mode 100644
index 4979802..0000000
--- a/src/racoon/misc.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*	$NetBSD: misc.h,v 1.4.6.1 2008/07/15 00:55:48 mgrooms Exp $	*/
-
-/* Id: misc.h,v 1.9 2006/04/06 14:00:06 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _MISC_H
-#define _MISC_H
-
-#define BIT2STR(b) bit2str(b, sizeof(b)<<3)
-
-#ifdef HAVE_FUNC_MACRO
-#define LOCATION        debug_location(__FILE__, __LINE__, __func__)
-#else
-#define LOCATION        debug_location(__FILE__, __LINE__, NULL)
-#endif
-
-extern int racoon_hexdump __P((const void *, size_t));
-extern char *bit2str __P((int, int));
-extern void *get_newbuf __P((void *, size_t));
-extern const char *debug_location __P((const char *, int, const char *));
-extern int getfsize __P((char *));
-struct timeval;
-extern double timedelta __P((struct timeval *, struct timeval *));
-char *strdup __P((const char *));
-
-#if defined(__APPLE__) && defined(__MACH__)
-#define RACOON_TAILQ_FOREACH_REVERSE(var, head, headname ,field)	\
-  TAILQ_FOREACH_REVERSE(var, head, field, headname)
-#else
-#define RACOON_TAILQ_FOREACH_REVERSE(var, head, headname ,field)	\
-    TAILQ_FOREACH_REVERSE(var, head, headname, field)
-#endif
-
-#ifndef HAVE_STRLCPY
-#define strlcpy(d,s,l) (strncpy(d,s,l), (d)[(l)-1] = '\0')
-#endif
-
-#ifndef HAVE_STRLCAT
-#define strlcat(d,s,l) strncat(d,s,(l)-strlen(d)-1)
-#endif
-
-#define STRDUP_FATAL(x) if (x == NULL) {			\
-	plog(LLV_ERROR, LOCATION, NULL, "strdup failed\n");	\
-	exit(1);						\
-}
-
-#include "libpfkey.h"
-
-#endif /* _MISC_H */
diff --git a/src/racoon/missing/crypto/rijndael/boxes-fst.dat b/src/racoon/missing/crypto/rijndael/boxes-fst.dat
deleted file mode 100644
index 28d15d3..0000000
--- a/src/racoon/missing/crypto/rijndael/boxes-fst.dat
+++ /dev/null
@@ -1,957 +0,0 @@
-/*	$KAME: boxes-fst.dat,v 1.1.1.1 2001/08/08 09:56:27 sakane Exp $	*/
-
-const word8 S[256] = {
- 99, 124, 119, 123, 242, 107, 111, 197,  48,   1, 103,  43, 254, 215, 171, 118, 
-202, 130, 201, 125, 250,  89,  71, 240, 173, 212, 162, 175, 156, 164, 114, 192, 
-183, 253, 147,  38,  54,  63, 247, 204,  52, 165, 229, 241, 113, 216,  49,  21, 
-  4, 199,  35, 195,  24, 150,   5, 154,   7,  18, 128, 226, 235,  39, 178, 117, 
-  9, 131,  44,  26,  27, 110,  90, 160,  82,  59, 214, 179,  41, 227,  47, 132, 
- 83, 209,   0, 237,  32, 252, 177,  91, 106, 203, 190,  57,  74,  76,  88, 207, 
-208, 239, 170, 251,  67,  77,  51, 133,  69, 249,   2, 127,  80,  60, 159, 168, 
- 81, 163,  64, 143, 146, 157,  56, 245, 188, 182, 218,  33,  16, 255, 243, 210, 
-205,  12,  19, 236,  95, 151,  68,  23, 196, 167, 126,  61, 100,  93,  25, 115, 
- 96, 129,  79, 220,  34,  42, 144, 136,  70, 238, 184,  20, 222,  94,  11, 219, 
-224,  50,  58,  10,  73,   6,  36,  92, 194, 211, 172,  98, 145, 149, 228, 121, 
-231, 200,  55, 109, 141, 213,  78, 169, 108,  86, 244, 234, 101, 122, 174,   8, 
-186, 120,  37,  46,  28, 166, 180, 198, 232, 221, 116,  31,  75, 189, 139, 138, 
-112,  62, 181, 102,  72,   3, 246,  14,  97,  53,  87, 185, 134, 193,  29, 158, 
-225, 248, 152,  17, 105, 217, 142, 148, 155,  30, 135, 233, 206,  85,  40, 223, 
-140, 161, 137,  13, 191, 230,  66, 104,  65, 153,  45,  15, 176,  84, 187,  22
-};
-
-#ifdef INTERMEDIATE_VALUE_KAT
-static const word8 Si[256] = {
- 82,   9, 106, 213,  48,  54, 165,  56, 191,  64, 163, 158, 129, 243, 215, 251, 
-124, 227,  57, 130, 155,  47, 255, 135,  52, 142,  67,  68, 196, 222, 233, 203, 
- 84, 123, 148,  50, 166, 194,  35,  61, 238,  76, 149,  11,  66, 250, 195,  78, 
-  8,  46, 161, 102,  40, 217,  36, 178, 118,  91, 162,  73, 109, 139, 209,  37, 
-114, 248, 246, 100, 134, 104, 152,  22, 212, 164,  92, 204,  93, 101, 182, 146, 
-108, 112,  72,  80, 253, 237, 185, 218,  94,  21,  70,  87, 167, 141, 157, 132, 
-144, 216, 171,   0, 140, 188, 211,  10, 247, 228,  88,   5, 184, 179,  69,   6, 
-208,  44,  30, 143, 202,  63,  15,   2, 193, 175, 189,   3,   1,  19, 138, 107, 
- 58, 145,  17,  65,  79, 103, 220, 234, 151, 242, 207, 206, 240, 180, 230, 115, 
-150, 172, 116,  34, 231, 173,  53, 133, 226, 249,  55, 232,  28, 117, 223, 110, 
- 71, 241,  26, 113,  29,  41, 197, 137, 111, 183,  98,  14, 170,  24, 190,  27, 
-252,  86,  62,  75, 198, 210, 121,  32, 154, 219, 192, 254, 120, 205,  90, 244, 
- 31, 221, 168,  51, 136,   7, 199,  49, 177,  18,  16,  89,  39, 128, 236,  95, 
- 96,  81, 127, 169,  25, 181,  74,  13,  45, 229, 122, 159, 147, 201, 156, 239, 
-160, 224,  59,  77, 174,  42, 245, 176, 200, 235, 187,  60, 131,  83, 153,  97, 
- 23,  43,   4, 126, 186, 119, 214,  38, 225, 105,  20,  99,  85,  33,  12, 125
-};
-#endif /* INTERMEDIATE_VALUE_KAT */
-
-union xtab {
-	word32	xt32[256];
-	word8	xt8[256][4];
-};
-
-static const union xtab xT1 = {
-	.xt8 = {
-{0xc6,0x63,0x63,0xa5}, {0xf8,0x7c,0x7c,0x84}, {0xee,0x77,0x77,0x99}, {0xf6,0x7b,0x7b,0x8d},
-{0xff,0xf2,0xf2,0x0d}, {0xd6,0x6b,0x6b,0xbd}, {0xde,0x6f,0x6f,0xb1}, {0x91,0xc5,0xc5,0x54},
-{0x60,0x30,0x30,0x50}, {0x02,0x01,0x01,0x03}, {0xce,0x67,0x67,0xa9}, {0x56,0x2b,0x2b,0x7d},
-{0xe7,0xfe,0xfe,0x19}, {0xb5,0xd7,0xd7,0x62}, {0x4d,0xab,0xab,0xe6}, {0xec,0x76,0x76,0x9a},
-{0x8f,0xca,0xca,0x45}, {0x1f,0x82,0x82,0x9d}, {0x89,0xc9,0xc9,0x40}, {0xfa,0x7d,0x7d,0x87},
-{0xef,0xfa,0xfa,0x15}, {0xb2,0x59,0x59,0xeb}, {0x8e,0x47,0x47,0xc9}, {0xfb,0xf0,0xf0,0x0b},
-{0x41,0xad,0xad,0xec}, {0xb3,0xd4,0xd4,0x67}, {0x5f,0xa2,0xa2,0xfd}, {0x45,0xaf,0xaf,0xea},
-{0x23,0x9c,0x9c,0xbf}, {0x53,0xa4,0xa4,0xf7}, {0xe4,0x72,0x72,0x96}, {0x9b,0xc0,0xc0,0x5b},
-{0x75,0xb7,0xb7,0xc2}, {0xe1,0xfd,0xfd,0x1c}, {0x3d,0x93,0x93,0xae}, {0x4c,0x26,0x26,0x6a},
-{0x6c,0x36,0x36,0x5a}, {0x7e,0x3f,0x3f,0x41}, {0xf5,0xf7,0xf7,0x02}, {0x83,0xcc,0xcc,0x4f},
-{0x68,0x34,0x34,0x5c}, {0x51,0xa5,0xa5,0xf4}, {0xd1,0xe5,0xe5,0x34}, {0xf9,0xf1,0xf1,0x08},
-{0xe2,0x71,0x71,0x93}, {0xab,0xd8,0xd8,0x73}, {0x62,0x31,0x31,0x53}, {0x2a,0x15,0x15,0x3f},
-{0x08,0x04,0x04,0x0c}, {0x95,0xc7,0xc7,0x52}, {0x46,0x23,0x23,0x65}, {0x9d,0xc3,0xc3,0x5e},
-{0x30,0x18,0x18,0x28}, {0x37,0x96,0x96,0xa1}, {0x0a,0x05,0x05,0x0f}, {0x2f,0x9a,0x9a,0xb5},
-{0x0e,0x07,0x07,0x09}, {0x24,0x12,0x12,0x36}, {0x1b,0x80,0x80,0x9b}, {0xdf,0xe2,0xe2,0x3d},
-{0xcd,0xeb,0xeb,0x26}, {0x4e,0x27,0x27,0x69}, {0x7f,0xb2,0xb2,0xcd}, {0xea,0x75,0x75,0x9f},
-{0x12,0x09,0x09,0x1b}, {0x1d,0x83,0x83,0x9e}, {0x58,0x2c,0x2c,0x74}, {0x34,0x1a,0x1a,0x2e},
-{0x36,0x1b,0x1b,0x2d}, {0xdc,0x6e,0x6e,0xb2}, {0xb4,0x5a,0x5a,0xee}, {0x5b,0xa0,0xa0,0xfb},
-{0xa4,0x52,0x52,0xf6}, {0x76,0x3b,0x3b,0x4d}, {0xb7,0xd6,0xd6,0x61}, {0x7d,0xb3,0xb3,0xce},
-{0x52,0x29,0x29,0x7b}, {0xdd,0xe3,0xe3,0x3e}, {0x5e,0x2f,0x2f,0x71}, {0x13,0x84,0x84,0x97},
-{0xa6,0x53,0x53,0xf5}, {0xb9,0xd1,0xd1,0x68}, {0x00,0x00,0x00,0x00}, {0xc1,0xed,0xed,0x2c},
-{0x40,0x20,0x20,0x60}, {0xe3,0xfc,0xfc,0x1f}, {0x79,0xb1,0xb1,0xc8}, {0xb6,0x5b,0x5b,0xed},
-{0xd4,0x6a,0x6a,0xbe}, {0x8d,0xcb,0xcb,0x46}, {0x67,0xbe,0xbe,0xd9}, {0x72,0x39,0x39,0x4b},
-{0x94,0x4a,0x4a,0xde}, {0x98,0x4c,0x4c,0xd4}, {0xb0,0x58,0x58,0xe8}, {0x85,0xcf,0xcf,0x4a},
-{0xbb,0xd0,0xd0,0x6b}, {0xc5,0xef,0xef,0x2a}, {0x4f,0xaa,0xaa,0xe5}, {0xed,0xfb,0xfb,0x16},
-{0x86,0x43,0x43,0xc5}, {0x9a,0x4d,0x4d,0xd7}, {0x66,0x33,0x33,0x55}, {0x11,0x85,0x85,0x94},
-{0x8a,0x45,0x45,0xcf}, {0xe9,0xf9,0xf9,0x10}, {0x04,0x02,0x02,0x06}, {0xfe,0x7f,0x7f,0x81},
-{0xa0,0x50,0x50,0xf0}, {0x78,0x3c,0x3c,0x44}, {0x25,0x9f,0x9f,0xba}, {0x4b,0xa8,0xa8,0xe3},
-{0xa2,0x51,0x51,0xf3}, {0x5d,0xa3,0xa3,0xfe}, {0x80,0x40,0x40,0xc0}, {0x05,0x8f,0x8f,0x8a},
-{0x3f,0x92,0x92,0xad}, {0x21,0x9d,0x9d,0xbc}, {0x70,0x38,0x38,0x48}, {0xf1,0xf5,0xf5,0x04},
-{0x63,0xbc,0xbc,0xdf}, {0x77,0xb6,0xb6,0xc1}, {0xaf,0xda,0xda,0x75}, {0x42,0x21,0x21,0x63},
-{0x20,0x10,0x10,0x30}, {0xe5,0xff,0xff,0x1a}, {0xfd,0xf3,0xf3,0x0e}, {0xbf,0xd2,0xd2,0x6d},
-{0x81,0xcd,0xcd,0x4c}, {0x18,0x0c,0x0c,0x14}, {0x26,0x13,0x13,0x35}, {0xc3,0xec,0xec,0x2f},
-{0xbe,0x5f,0x5f,0xe1}, {0x35,0x97,0x97,0xa2}, {0x88,0x44,0x44,0xcc}, {0x2e,0x17,0x17,0x39},
-{0x93,0xc4,0xc4,0x57}, {0x55,0xa7,0xa7,0xf2}, {0xfc,0x7e,0x7e,0x82}, {0x7a,0x3d,0x3d,0x47},
-{0xc8,0x64,0x64,0xac}, {0xba,0x5d,0x5d,0xe7}, {0x32,0x19,0x19,0x2b}, {0xe6,0x73,0x73,0x95},
-{0xc0,0x60,0x60,0xa0}, {0x19,0x81,0x81,0x98}, {0x9e,0x4f,0x4f,0xd1}, {0xa3,0xdc,0xdc,0x7f},
-{0x44,0x22,0x22,0x66}, {0x54,0x2a,0x2a,0x7e}, {0x3b,0x90,0x90,0xab}, {0x0b,0x88,0x88,0x83},
-{0x8c,0x46,0x46,0xca}, {0xc7,0xee,0xee,0x29}, {0x6b,0xb8,0xb8,0xd3}, {0x28,0x14,0x14,0x3c},
-{0xa7,0xde,0xde,0x79}, {0xbc,0x5e,0x5e,0xe2}, {0x16,0x0b,0x0b,0x1d}, {0xad,0xdb,0xdb,0x76},
-{0xdb,0xe0,0xe0,0x3b}, {0x64,0x32,0x32,0x56}, {0x74,0x3a,0x3a,0x4e}, {0x14,0x0a,0x0a,0x1e},
-{0x92,0x49,0x49,0xdb}, {0x0c,0x06,0x06,0x0a}, {0x48,0x24,0x24,0x6c}, {0xb8,0x5c,0x5c,0xe4},
-{0x9f,0xc2,0xc2,0x5d}, {0xbd,0xd3,0xd3,0x6e}, {0x43,0xac,0xac,0xef}, {0xc4,0x62,0x62,0xa6},
-{0x39,0x91,0x91,0xa8}, {0x31,0x95,0x95,0xa4}, {0xd3,0xe4,0xe4,0x37}, {0xf2,0x79,0x79,0x8b},
-{0xd5,0xe7,0xe7,0x32}, {0x8b,0xc8,0xc8,0x43}, {0x6e,0x37,0x37,0x59}, {0xda,0x6d,0x6d,0xb7},
-{0x01,0x8d,0x8d,0x8c}, {0xb1,0xd5,0xd5,0x64}, {0x9c,0x4e,0x4e,0xd2}, {0x49,0xa9,0xa9,0xe0},
-{0xd8,0x6c,0x6c,0xb4}, {0xac,0x56,0x56,0xfa}, {0xf3,0xf4,0xf4,0x07}, {0xcf,0xea,0xea,0x25},
-{0xca,0x65,0x65,0xaf}, {0xf4,0x7a,0x7a,0x8e}, {0x47,0xae,0xae,0xe9}, {0x10,0x08,0x08,0x18},
-{0x6f,0xba,0xba,0xd5}, {0xf0,0x78,0x78,0x88}, {0x4a,0x25,0x25,0x6f}, {0x5c,0x2e,0x2e,0x72},
-{0x38,0x1c,0x1c,0x24}, {0x57,0xa6,0xa6,0xf1}, {0x73,0xb4,0xb4,0xc7}, {0x97,0xc6,0xc6,0x51},
-{0xcb,0xe8,0xe8,0x23}, {0xa1,0xdd,0xdd,0x7c}, {0xe8,0x74,0x74,0x9c}, {0x3e,0x1f,0x1f,0x21},
-{0x96,0x4b,0x4b,0xdd}, {0x61,0xbd,0xbd,0xdc}, {0x0d,0x8b,0x8b,0x86}, {0x0f,0x8a,0x8a,0x85},
-{0xe0,0x70,0x70,0x90}, {0x7c,0x3e,0x3e,0x42}, {0x71,0xb5,0xb5,0xc4}, {0xcc,0x66,0x66,0xaa},
-{0x90,0x48,0x48,0xd8}, {0x06,0x03,0x03,0x05}, {0xf7,0xf6,0xf6,0x01}, {0x1c,0x0e,0x0e,0x12},
-{0xc2,0x61,0x61,0xa3}, {0x6a,0x35,0x35,0x5f}, {0xae,0x57,0x57,0xf9}, {0x69,0xb9,0xb9,0xd0},
-{0x17,0x86,0x86,0x91}, {0x99,0xc1,0xc1,0x58}, {0x3a,0x1d,0x1d,0x27}, {0x27,0x9e,0x9e,0xb9},
-{0xd9,0xe1,0xe1,0x38}, {0xeb,0xf8,0xf8,0x13}, {0x2b,0x98,0x98,0xb3}, {0x22,0x11,0x11,0x33},
-{0xd2,0x69,0x69,0xbb}, {0xa9,0xd9,0xd9,0x70}, {0x07,0x8e,0x8e,0x89}, {0x33,0x94,0x94,0xa7},
-{0x2d,0x9b,0x9b,0xb6}, {0x3c,0x1e,0x1e,0x22}, {0x15,0x87,0x87,0x92}, {0xc9,0xe9,0xe9,0x20},
-{0x87,0xce,0xce,0x49}, {0xaa,0x55,0x55,0xff}, {0x50,0x28,0x28,0x78}, {0xa5,0xdf,0xdf,0x7a},
-{0x03,0x8c,0x8c,0x8f}, {0x59,0xa1,0xa1,0xf8}, {0x09,0x89,0x89,0x80}, {0x1a,0x0d,0x0d,0x17},
-{0x65,0xbf,0xbf,0xda}, {0xd7,0xe6,0xe6,0x31}, {0x84,0x42,0x42,0xc6}, {0xd0,0x68,0x68,0xb8},
-{0x82,0x41,0x41,0xc3}, {0x29,0x99,0x99,0xb0}, {0x5a,0x2d,0x2d,0x77}, {0x1e,0x0f,0x0f,0x11},
-{0x7b,0xb0,0xb0,0xcb}, {0xa8,0x54,0x54,0xfc}, {0x6d,0xbb,0xbb,0xd6}, {0x2c,0x16,0x16,0x3a}
-	}
-};
-#define	T1	xT1.xt8
-
-static const union xtab xT2 = {
-	.xt8 = {
-{0xa5,0xc6,0x63,0x63}, {0x84,0xf8,0x7c,0x7c}, {0x99,0xee,0x77,0x77}, {0x8d,0xf6,0x7b,0x7b},
-{0x0d,0xff,0xf2,0xf2}, {0xbd,0xd6,0x6b,0x6b}, {0xb1,0xde,0x6f,0x6f}, {0x54,0x91,0xc5,0xc5},
-{0x50,0x60,0x30,0x30}, {0x03,0x02,0x01,0x01}, {0xa9,0xce,0x67,0x67}, {0x7d,0x56,0x2b,0x2b},
-{0x19,0xe7,0xfe,0xfe}, {0x62,0xb5,0xd7,0xd7}, {0xe6,0x4d,0xab,0xab}, {0x9a,0xec,0x76,0x76},
-{0x45,0x8f,0xca,0xca}, {0x9d,0x1f,0x82,0x82}, {0x40,0x89,0xc9,0xc9}, {0x87,0xfa,0x7d,0x7d},
-{0x15,0xef,0xfa,0xfa}, {0xeb,0xb2,0x59,0x59}, {0xc9,0x8e,0x47,0x47}, {0x0b,0xfb,0xf0,0xf0},
-{0xec,0x41,0xad,0xad}, {0x67,0xb3,0xd4,0xd4}, {0xfd,0x5f,0xa2,0xa2}, {0xea,0x45,0xaf,0xaf},
-{0xbf,0x23,0x9c,0x9c}, {0xf7,0x53,0xa4,0xa4}, {0x96,0xe4,0x72,0x72}, {0x5b,0x9b,0xc0,0xc0},
-{0xc2,0x75,0xb7,0xb7}, {0x1c,0xe1,0xfd,0xfd}, {0xae,0x3d,0x93,0x93}, {0x6a,0x4c,0x26,0x26},
-{0x5a,0x6c,0x36,0x36}, {0x41,0x7e,0x3f,0x3f}, {0x02,0xf5,0xf7,0xf7}, {0x4f,0x83,0xcc,0xcc},
-{0x5c,0x68,0x34,0x34}, {0xf4,0x51,0xa5,0xa5}, {0x34,0xd1,0xe5,0xe5}, {0x08,0xf9,0xf1,0xf1},
-{0x93,0xe2,0x71,0x71}, {0x73,0xab,0xd8,0xd8}, {0x53,0x62,0x31,0x31}, {0x3f,0x2a,0x15,0x15},
-{0x0c,0x08,0x04,0x04}, {0x52,0x95,0xc7,0xc7}, {0x65,0x46,0x23,0x23}, {0x5e,0x9d,0xc3,0xc3},
-{0x28,0x30,0x18,0x18}, {0xa1,0x37,0x96,0x96}, {0x0f,0x0a,0x05,0x05}, {0xb5,0x2f,0x9a,0x9a},
-{0x09,0x0e,0x07,0x07}, {0x36,0x24,0x12,0x12}, {0x9b,0x1b,0x80,0x80}, {0x3d,0xdf,0xe2,0xe2},
-{0x26,0xcd,0xeb,0xeb}, {0x69,0x4e,0x27,0x27}, {0xcd,0x7f,0xb2,0xb2}, {0x9f,0xea,0x75,0x75},
-{0x1b,0x12,0x09,0x09}, {0x9e,0x1d,0x83,0x83}, {0x74,0x58,0x2c,0x2c}, {0x2e,0x34,0x1a,0x1a},
-{0x2d,0x36,0x1b,0x1b}, {0xb2,0xdc,0x6e,0x6e}, {0xee,0xb4,0x5a,0x5a}, {0xfb,0x5b,0xa0,0xa0},
-{0xf6,0xa4,0x52,0x52}, {0x4d,0x76,0x3b,0x3b}, {0x61,0xb7,0xd6,0xd6}, {0xce,0x7d,0xb3,0xb3},
-{0x7b,0x52,0x29,0x29}, {0x3e,0xdd,0xe3,0xe3}, {0x71,0x5e,0x2f,0x2f}, {0x97,0x13,0x84,0x84},
-{0xf5,0xa6,0x53,0x53}, {0x68,0xb9,0xd1,0xd1}, {0x00,0x00,0x00,0x00}, {0x2c,0xc1,0xed,0xed},
-{0x60,0x40,0x20,0x20}, {0x1f,0xe3,0xfc,0xfc}, {0xc8,0x79,0xb1,0xb1}, {0xed,0xb6,0x5b,0x5b},
-{0xbe,0xd4,0x6a,0x6a}, {0x46,0x8d,0xcb,0xcb}, {0xd9,0x67,0xbe,0xbe}, {0x4b,0x72,0x39,0x39},
-{0xde,0x94,0x4a,0x4a}, {0xd4,0x98,0x4c,0x4c}, {0xe8,0xb0,0x58,0x58}, {0x4a,0x85,0xcf,0xcf},
-{0x6b,0xbb,0xd0,0xd0}, {0x2a,0xc5,0xef,0xef}, {0xe5,0x4f,0xaa,0xaa}, {0x16,0xed,0xfb,0xfb},
-{0xc5,0x86,0x43,0x43}, {0xd7,0x9a,0x4d,0x4d}, {0x55,0x66,0x33,0x33}, {0x94,0x11,0x85,0x85},
-{0xcf,0x8a,0x45,0x45}, {0x10,0xe9,0xf9,0xf9}, {0x06,0x04,0x02,0x02}, {0x81,0xfe,0x7f,0x7f},
-{0xf0,0xa0,0x50,0x50}, {0x44,0x78,0x3c,0x3c}, {0xba,0x25,0x9f,0x9f}, {0xe3,0x4b,0xa8,0xa8},
-{0xf3,0xa2,0x51,0x51}, {0xfe,0x5d,0xa3,0xa3}, {0xc0,0x80,0x40,0x40}, {0x8a,0x05,0x8f,0x8f},
-{0xad,0x3f,0x92,0x92}, {0xbc,0x21,0x9d,0x9d}, {0x48,0x70,0x38,0x38}, {0x04,0xf1,0xf5,0xf5},
-{0xdf,0x63,0xbc,0xbc}, {0xc1,0x77,0xb6,0xb6}, {0x75,0xaf,0xda,0xda}, {0x63,0x42,0x21,0x21},
-{0x30,0x20,0x10,0x10}, {0x1a,0xe5,0xff,0xff}, {0x0e,0xfd,0xf3,0xf3}, {0x6d,0xbf,0xd2,0xd2},
-{0x4c,0x81,0xcd,0xcd}, {0x14,0x18,0x0c,0x0c}, {0x35,0x26,0x13,0x13}, {0x2f,0xc3,0xec,0xec},
-{0xe1,0xbe,0x5f,0x5f}, {0xa2,0x35,0x97,0x97}, {0xcc,0x88,0x44,0x44}, {0x39,0x2e,0x17,0x17},
-{0x57,0x93,0xc4,0xc4}, {0xf2,0x55,0xa7,0xa7}, {0x82,0xfc,0x7e,0x7e}, {0x47,0x7a,0x3d,0x3d},
-{0xac,0xc8,0x64,0x64}, {0xe7,0xba,0x5d,0x5d}, {0x2b,0x32,0x19,0x19}, {0x95,0xe6,0x73,0x73},
-{0xa0,0xc0,0x60,0x60}, {0x98,0x19,0x81,0x81}, {0xd1,0x9e,0x4f,0x4f}, {0x7f,0xa3,0xdc,0xdc},
-{0x66,0x44,0x22,0x22}, {0x7e,0x54,0x2a,0x2a}, {0xab,0x3b,0x90,0x90}, {0x83,0x0b,0x88,0x88},
-{0xca,0x8c,0x46,0x46}, {0x29,0xc7,0xee,0xee}, {0xd3,0x6b,0xb8,0xb8}, {0x3c,0x28,0x14,0x14},
-{0x79,0xa7,0xde,0xde}, {0xe2,0xbc,0x5e,0x5e}, {0x1d,0x16,0x0b,0x0b}, {0x76,0xad,0xdb,0xdb},
-{0x3b,0xdb,0xe0,0xe0}, {0x56,0x64,0x32,0x32}, {0x4e,0x74,0x3a,0x3a}, {0x1e,0x14,0x0a,0x0a},
-{0xdb,0x92,0x49,0x49}, {0x0a,0x0c,0x06,0x06}, {0x6c,0x48,0x24,0x24}, {0xe4,0xb8,0x5c,0x5c},
-{0x5d,0x9f,0xc2,0xc2}, {0x6e,0xbd,0xd3,0xd3}, {0xef,0x43,0xac,0xac}, {0xa6,0xc4,0x62,0x62},
-{0xa8,0x39,0x91,0x91}, {0xa4,0x31,0x95,0x95}, {0x37,0xd3,0xe4,0xe4}, {0x8b,0xf2,0x79,0x79},
-{0x32,0xd5,0xe7,0xe7}, {0x43,0x8b,0xc8,0xc8}, {0x59,0x6e,0x37,0x37}, {0xb7,0xda,0x6d,0x6d},
-{0x8c,0x01,0x8d,0x8d}, {0x64,0xb1,0xd5,0xd5}, {0xd2,0x9c,0x4e,0x4e}, {0xe0,0x49,0xa9,0xa9},
-{0xb4,0xd8,0x6c,0x6c}, {0xfa,0xac,0x56,0x56}, {0x07,0xf3,0xf4,0xf4}, {0x25,0xcf,0xea,0xea},
-{0xaf,0xca,0x65,0x65}, {0x8e,0xf4,0x7a,0x7a}, {0xe9,0x47,0xae,0xae}, {0x18,0x10,0x08,0x08},
-{0xd5,0x6f,0xba,0xba}, {0x88,0xf0,0x78,0x78}, {0x6f,0x4a,0x25,0x25}, {0x72,0x5c,0x2e,0x2e},
-{0x24,0x38,0x1c,0x1c}, {0xf1,0x57,0xa6,0xa6}, {0xc7,0x73,0xb4,0xb4}, {0x51,0x97,0xc6,0xc6},
-{0x23,0xcb,0xe8,0xe8}, {0x7c,0xa1,0xdd,0xdd}, {0x9c,0xe8,0x74,0x74}, {0x21,0x3e,0x1f,0x1f},
-{0xdd,0x96,0x4b,0x4b}, {0xdc,0x61,0xbd,0xbd}, {0x86,0x0d,0x8b,0x8b}, {0x85,0x0f,0x8a,0x8a},
-{0x90,0xe0,0x70,0x70}, {0x42,0x7c,0x3e,0x3e}, {0xc4,0x71,0xb5,0xb5}, {0xaa,0xcc,0x66,0x66},
-{0xd8,0x90,0x48,0x48}, {0x05,0x06,0x03,0x03}, {0x01,0xf7,0xf6,0xf6}, {0x12,0x1c,0x0e,0x0e},
-{0xa3,0xc2,0x61,0x61}, {0x5f,0x6a,0x35,0x35}, {0xf9,0xae,0x57,0x57}, {0xd0,0x69,0xb9,0xb9},
-{0x91,0x17,0x86,0x86}, {0x58,0x99,0xc1,0xc1}, {0x27,0x3a,0x1d,0x1d}, {0xb9,0x27,0x9e,0x9e},
-{0x38,0xd9,0xe1,0xe1}, {0x13,0xeb,0xf8,0xf8}, {0xb3,0x2b,0x98,0x98}, {0x33,0x22,0x11,0x11},
-{0xbb,0xd2,0x69,0x69}, {0x70,0xa9,0xd9,0xd9}, {0x89,0x07,0x8e,0x8e}, {0xa7,0x33,0x94,0x94},
-{0xb6,0x2d,0x9b,0x9b}, {0x22,0x3c,0x1e,0x1e}, {0x92,0x15,0x87,0x87}, {0x20,0xc9,0xe9,0xe9},
-{0x49,0x87,0xce,0xce}, {0xff,0xaa,0x55,0x55}, {0x78,0x50,0x28,0x28}, {0x7a,0xa5,0xdf,0xdf},
-{0x8f,0x03,0x8c,0x8c}, {0xf8,0x59,0xa1,0xa1}, {0x80,0x09,0x89,0x89}, {0x17,0x1a,0x0d,0x0d},
-{0xda,0x65,0xbf,0xbf}, {0x31,0xd7,0xe6,0xe6}, {0xc6,0x84,0x42,0x42}, {0xb8,0xd0,0x68,0x68},
-{0xc3,0x82,0x41,0x41}, {0xb0,0x29,0x99,0x99}, {0x77,0x5a,0x2d,0x2d}, {0x11,0x1e,0x0f,0x0f},
-{0xcb,0x7b,0xb0,0xb0}, {0xfc,0xa8,0x54,0x54}, {0xd6,0x6d,0xbb,0xbb}, {0x3a,0x2c,0x16,0x16}
-	}
-};
-#define	T2	xT2.xt8
-
-static const union xtab xT3 = {
-	.xt8 = {
-{0x63,0xa5,0xc6,0x63}, {0x7c,0x84,0xf8,0x7c}, {0x77,0x99,0xee,0x77}, {0x7b,0x8d,0xf6,0x7b},
-{0xf2,0x0d,0xff,0xf2}, {0x6b,0xbd,0xd6,0x6b}, {0x6f,0xb1,0xde,0x6f}, {0xc5,0x54,0x91,0xc5},
-{0x30,0x50,0x60,0x30}, {0x01,0x03,0x02,0x01}, {0x67,0xa9,0xce,0x67}, {0x2b,0x7d,0x56,0x2b},
-{0xfe,0x19,0xe7,0xfe}, {0xd7,0x62,0xb5,0xd7}, {0xab,0xe6,0x4d,0xab}, {0x76,0x9a,0xec,0x76},
-{0xca,0x45,0x8f,0xca}, {0x82,0x9d,0x1f,0x82}, {0xc9,0x40,0x89,0xc9}, {0x7d,0x87,0xfa,0x7d},
-{0xfa,0x15,0xef,0xfa}, {0x59,0xeb,0xb2,0x59}, {0x47,0xc9,0x8e,0x47}, {0xf0,0x0b,0xfb,0xf0},
-{0xad,0xec,0x41,0xad}, {0xd4,0x67,0xb3,0xd4}, {0xa2,0xfd,0x5f,0xa2}, {0xaf,0xea,0x45,0xaf},
-{0x9c,0xbf,0x23,0x9c}, {0xa4,0xf7,0x53,0xa4}, {0x72,0x96,0xe4,0x72}, {0xc0,0x5b,0x9b,0xc0},
-{0xb7,0xc2,0x75,0xb7}, {0xfd,0x1c,0xe1,0xfd}, {0x93,0xae,0x3d,0x93}, {0x26,0x6a,0x4c,0x26},
-{0x36,0x5a,0x6c,0x36}, {0x3f,0x41,0x7e,0x3f}, {0xf7,0x02,0xf5,0xf7}, {0xcc,0x4f,0x83,0xcc},
-{0x34,0x5c,0x68,0x34}, {0xa5,0xf4,0x51,0xa5}, {0xe5,0x34,0xd1,0xe5}, {0xf1,0x08,0xf9,0xf1},
-{0x71,0x93,0xe2,0x71}, {0xd8,0x73,0xab,0xd8}, {0x31,0x53,0x62,0x31}, {0x15,0x3f,0x2a,0x15},
-{0x04,0x0c,0x08,0x04}, {0xc7,0x52,0x95,0xc7}, {0x23,0x65,0x46,0x23}, {0xc3,0x5e,0x9d,0xc3},
-{0x18,0x28,0x30,0x18}, {0x96,0xa1,0x37,0x96}, {0x05,0x0f,0x0a,0x05}, {0x9a,0xb5,0x2f,0x9a},
-{0x07,0x09,0x0e,0x07}, {0x12,0x36,0x24,0x12}, {0x80,0x9b,0x1b,0x80}, {0xe2,0x3d,0xdf,0xe2},
-{0xeb,0x26,0xcd,0xeb}, {0x27,0x69,0x4e,0x27}, {0xb2,0xcd,0x7f,0xb2}, {0x75,0x9f,0xea,0x75},
-{0x09,0x1b,0x12,0x09}, {0x83,0x9e,0x1d,0x83}, {0x2c,0x74,0x58,0x2c}, {0x1a,0x2e,0x34,0x1a},
-{0x1b,0x2d,0x36,0x1b}, {0x6e,0xb2,0xdc,0x6e}, {0x5a,0xee,0xb4,0x5a}, {0xa0,0xfb,0x5b,0xa0},
-{0x52,0xf6,0xa4,0x52}, {0x3b,0x4d,0x76,0x3b}, {0xd6,0x61,0xb7,0xd6}, {0xb3,0xce,0x7d,0xb3},
-{0x29,0x7b,0x52,0x29}, {0xe3,0x3e,0xdd,0xe3}, {0x2f,0x71,0x5e,0x2f}, {0x84,0x97,0x13,0x84},
-{0x53,0xf5,0xa6,0x53}, {0xd1,0x68,0xb9,0xd1}, {0x00,0x00,0x00,0x00}, {0xed,0x2c,0xc1,0xed},
-{0x20,0x60,0x40,0x20}, {0xfc,0x1f,0xe3,0xfc}, {0xb1,0xc8,0x79,0xb1}, {0x5b,0xed,0xb6,0x5b},
-{0x6a,0xbe,0xd4,0x6a}, {0xcb,0x46,0x8d,0xcb}, {0xbe,0xd9,0x67,0xbe}, {0x39,0x4b,0x72,0x39},
-{0x4a,0xde,0x94,0x4a}, {0x4c,0xd4,0x98,0x4c}, {0x58,0xe8,0xb0,0x58}, {0xcf,0x4a,0x85,0xcf},
-{0xd0,0x6b,0xbb,0xd0}, {0xef,0x2a,0xc5,0xef}, {0xaa,0xe5,0x4f,0xaa}, {0xfb,0x16,0xed,0xfb},
-{0x43,0xc5,0x86,0x43}, {0x4d,0xd7,0x9a,0x4d}, {0x33,0x55,0x66,0x33}, {0x85,0x94,0x11,0x85},
-{0x45,0xcf,0x8a,0x45}, {0xf9,0x10,0xe9,0xf9}, {0x02,0x06,0x04,0x02}, {0x7f,0x81,0xfe,0x7f},
-{0x50,0xf0,0xa0,0x50}, {0x3c,0x44,0x78,0x3c}, {0x9f,0xba,0x25,0x9f}, {0xa8,0xe3,0x4b,0xa8},
-{0x51,0xf3,0xa2,0x51}, {0xa3,0xfe,0x5d,0xa3}, {0x40,0xc0,0x80,0x40}, {0x8f,0x8a,0x05,0x8f},
-{0x92,0xad,0x3f,0x92}, {0x9d,0xbc,0x21,0x9d}, {0x38,0x48,0x70,0x38}, {0xf5,0x04,0xf1,0xf5},
-{0xbc,0xdf,0x63,0xbc}, {0xb6,0xc1,0x77,0xb6}, {0xda,0x75,0xaf,0xda}, {0x21,0x63,0x42,0x21},
-{0x10,0x30,0x20,0x10}, {0xff,0x1a,0xe5,0xff}, {0xf3,0x0e,0xfd,0xf3}, {0xd2,0x6d,0xbf,0xd2},
-{0xcd,0x4c,0x81,0xcd}, {0x0c,0x14,0x18,0x0c}, {0x13,0x35,0x26,0x13}, {0xec,0x2f,0xc3,0xec},
-{0x5f,0xe1,0xbe,0x5f}, {0x97,0xa2,0x35,0x97}, {0x44,0xcc,0x88,0x44}, {0x17,0x39,0x2e,0x17},
-{0xc4,0x57,0x93,0xc4}, {0xa7,0xf2,0x55,0xa7}, {0x7e,0x82,0xfc,0x7e}, {0x3d,0x47,0x7a,0x3d},
-{0x64,0xac,0xc8,0x64}, {0x5d,0xe7,0xba,0x5d}, {0x19,0x2b,0x32,0x19}, {0x73,0x95,0xe6,0x73},
-{0x60,0xa0,0xc0,0x60}, {0x81,0x98,0x19,0x81}, {0x4f,0xd1,0x9e,0x4f}, {0xdc,0x7f,0xa3,0xdc},
-{0x22,0x66,0x44,0x22}, {0x2a,0x7e,0x54,0x2a}, {0x90,0xab,0x3b,0x90}, {0x88,0x83,0x0b,0x88},
-{0x46,0xca,0x8c,0x46}, {0xee,0x29,0xc7,0xee}, {0xb8,0xd3,0x6b,0xb8}, {0x14,0x3c,0x28,0x14},
-{0xde,0x79,0xa7,0xde}, {0x5e,0xe2,0xbc,0x5e}, {0x0b,0x1d,0x16,0x0b}, {0xdb,0x76,0xad,0xdb},
-{0xe0,0x3b,0xdb,0xe0}, {0x32,0x56,0x64,0x32}, {0x3a,0x4e,0x74,0x3a}, {0x0a,0x1e,0x14,0x0a},
-{0x49,0xdb,0x92,0x49}, {0x06,0x0a,0x0c,0x06}, {0x24,0x6c,0x48,0x24}, {0x5c,0xe4,0xb8,0x5c},
-{0xc2,0x5d,0x9f,0xc2}, {0xd3,0x6e,0xbd,0xd3}, {0xac,0xef,0x43,0xac}, {0x62,0xa6,0xc4,0x62},
-{0x91,0xa8,0x39,0x91}, {0x95,0xa4,0x31,0x95}, {0xe4,0x37,0xd3,0xe4}, {0x79,0x8b,0xf2,0x79},
-{0xe7,0x32,0xd5,0xe7}, {0xc8,0x43,0x8b,0xc8}, {0x37,0x59,0x6e,0x37}, {0x6d,0xb7,0xda,0x6d},
-{0x8d,0x8c,0x01,0x8d}, {0xd5,0x64,0xb1,0xd5}, {0x4e,0xd2,0x9c,0x4e}, {0xa9,0xe0,0x49,0xa9},
-{0x6c,0xb4,0xd8,0x6c}, {0x56,0xfa,0xac,0x56}, {0xf4,0x07,0xf3,0xf4}, {0xea,0x25,0xcf,0xea},
-{0x65,0xaf,0xca,0x65}, {0x7a,0x8e,0xf4,0x7a}, {0xae,0xe9,0x47,0xae}, {0x08,0x18,0x10,0x08},
-{0xba,0xd5,0x6f,0xba}, {0x78,0x88,0xf0,0x78}, {0x25,0x6f,0x4a,0x25}, {0x2e,0x72,0x5c,0x2e},
-{0x1c,0x24,0x38,0x1c}, {0xa6,0xf1,0x57,0xa6}, {0xb4,0xc7,0x73,0xb4}, {0xc6,0x51,0x97,0xc6},
-{0xe8,0x23,0xcb,0xe8}, {0xdd,0x7c,0xa1,0xdd}, {0x74,0x9c,0xe8,0x74}, {0x1f,0x21,0x3e,0x1f},
-{0x4b,0xdd,0x96,0x4b}, {0xbd,0xdc,0x61,0xbd}, {0x8b,0x86,0x0d,0x8b}, {0x8a,0x85,0x0f,0x8a},
-{0x70,0x90,0xe0,0x70}, {0x3e,0x42,0x7c,0x3e}, {0xb5,0xc4,0x71,0xb5}, {0x66,0xaa,0xcc,0x66},
-{0x48,0xd8,0x90,0x48}, {0x03,0x05,0x06,0x03}, {0xf6,0x01,0xf7,0xf6}, {0x0e,0x12,0x1c,0x0e},
-{0x61,0xa3,0xc2,0x61}, {0x35,0x5f,0x6a,0x35}, {0x57,0xf9,0xae,0x57}, {0xb9,0xd0,0x69,0xb9},
-{0x86,0x91,0x17,0x86}, {0xc1,0x58,0x99,0xc1}, {0x1d,0x27,0x3a,0x1d}, {0x9e,0xb9,0x27,0x9e},
-{0xe1,0x38,0xd9,0xe1}, {0xf8,0x13,0xeb,0xf8}, {0x98,0xb3,0x2b,0x98}, {0x11,0x33,0x22,0x11},
-{0x69,0xbb,0xd2,0x69}, {0xd9,0x70,0xa9,0xd9}, {0x8e,0x89,0x07,0x8e}, {0x94,0xa7,0x33,0x94},
-{0x9b,0xb6,0x2d,0x9b}, {0x1e,0x22,0x3c,0x1e}, {0x87,0x92,0x15,0x87}, {0xe9,0x20,0xc9,0xe9},
-{0xce,0x49,0x87,0xce}, {0x55,0xff,0xaa,0x55}, {0x28,0x78,0x50,0x28}, {0xdf,0x7a,0xa5,0xdf},
-{0x8c,0x8f,0x03,0x8c}, {0xa1,0xf8,0x59,0xa1}, {0x89,0x80,0x09,0x89}, {0x0d,0x17,0x1a,0x0d},
-{0xbf,0xda,0x65,0xbf}, {0xe6,0x31,0xd7,0xe6}, {0x42,0xc6,0x84,0x42}, {0x68,0xb8,0xd0,0x68},
-{0x41,0xc3,0x82,0x41}, {0x99,0xb0,0x29,0x99}, {0x2d,0x77,0x5a,0x2d}, {0x0f,0x11,0x1e,0x0f},
-{0xb0,0xcb,0x7b,0xb0}, {0x54,0xfc,0xa8,0x54}, {0xbb,0xd6,0x6d,0xbb}, {0x16,0x3a,0x2c,0x16}
-	}
-};
-#define	T3	xT3.xt8
-
-static const union xtab xT4 = {
-	.xt8 = {
-{0x63,0x63,0xa5,0xc6}, {0x7c,0x7c,0x84,0xf8}, {0x77,0x77,0x99,0xee}, {0x7b,0x7b,0x8d,0xf6},
-{0xf2,0xf2,0x0d,0xff}, {0x6b,0x6b,0xbd,0xd6}, {0x6f,0x6f,0xb1,0xde}, {0xc5,0xc5,0x54,0x91},
-{0x30,0x30,0x50,0x60}, {0x01,0x01,0x03,0x02}, {0x67,0x67,0xa9,0xce}, {0x2b,0x2b,0x7d,0x56},
-{0xfe,0xfe,0x19,0xe7}, {0xd7,0xd7,0x62,0xb5}, {0xab,0xab,0xe6,0x4d}, {0x76,0x76,0x9a,0xec},
-{0xca,0xca,0x45,0x8f}, {0x82,0x82,0x9d,0x1f}, {0xc9,0xc9,0x40,0x89}, {0x7d,0x7d,0x87,0xfa},
-{0xfa,0xfa,0x15,0xef}, {0x59,0x59,0xeb,0xb2}, {0x47,0x47,0xc9,0x8e}, {0xf0,0xf0,0x0b,0xfb},
-{0xad,0xad,0xec,0x41}, {0xd4,0xd4,0x67,0xb3}, {0xa2,0xa2,0xfd,0x5f}, {0xaf,0xaf,0xea,0x45},
-{0x9c,0x9c,0xbf,0x23}, {0xa4,0xa4,0xf7,0x53}, {0x72,0x72,0x96,0xe4}, {0xc0,0xc0,0x5b,0x9b},
-{0xb7,0xb7,0xc2,0x75}, {0xfd,0xfd,0x1c,0xe1}, {0x93,0x93,0xae,0x3d}, {0x26,0x26,0x6a,0x4c},
-{0x36,0x36,0x5a,0x6c}, {0x3f,0x3f,0x41,0x7e}, {0xf7,0xf7,0x02,0xf5}, {0xcc,0xcc,0x4f,0x83},
-{0x34,0x34,0x5c,0x68}, {0xa5,0xa5,0xf4,0x51}, {0xe5,0xe5,0x34,0xd1}, {0xf1,0xf1,0x08,0xf9},
-{0x71,0x71,0x93,0xe2}, {0xd8,0xd8,0x73,0xab}, {0x31,0x31,0x53,0x62}, {0x15,0x15,0x3f,0x2a},
-{0x04,0x04,0x0c,0x08}, {0xc7,0xc7,0x52,0x95}, {0x23,0x23,0x65,0x46}, {0xc3,0xc3,0x5e,0x9d},
-{0x18,0x18,0x28,0x30}, {0x96,0x96,0xa1,0x37}, {0x05,0x05,0x0f,0x0a}, {0x9a,0x9a,0xb5,0x2f},
-{0x07,0x07,0x09,0x0e}, {0x12,0x12,0x36,0x24}, {0x80,0x80,0x9b,0x1b}, {0xe2,0xe2,0x3d,0xdf},
-{0xeb,0xeb,0x26,0xcd}, {0x27,0x27,0x69,0x4e}, {0xb2,0xb2,0xcd,0x7f}, {0x75,0x75,0x9f,0xea},
-{0x09,0x09,0x1b,0x12}, {0x83,0x83,0x9e,0x1d}, {0x2c,0x2c,0x74,0x58}, {0x1a,0x1a,0x2e,0x34},
-{0x1b,0x1b,0x2d,0x36}, {0x6e,0x6e,0xb2,0xdc}, {0x5a,0x5a,0xee,0xb4}, {0xa0,0xa0,0xfb,0x5b},
-{0x52,0x52,0xf6,0xa4}, {0x3b,0x3b,0x4d,0x76}, {0xd6,0xd6,0x61,0xb7}, {0xb3,0xb3,0xce,0x7d},
-{0x29,0x29,0x7b,0x52}, {0xe3,0xe3,0x3e,0xdd}, {0x2f,0x2f,0x71,0x5e}, {0x84,0x84,0x97,0x13},
-{0x53,0x53,0xf5,0xa6}, {0xd1,0xd1,0x68,0xb9}, {0x00,0x00,0x00,0x00}, {0xed,0xed,0x2c,0xc1},
-{0x20,0x20,0x60,0x40}, {0xfc,0xfc,0x1f,0xe3}, {0xb1,0xb1,0xc8,0x79}, {0x5b,0x5b,0xed,0xb6},
-{0x6a,0x6a,0xbe,0xd4}, {0xcb,0xcb,0x46,0x8d}, {0xbe,0xbe,0xd9,0x67}, {0x39,0x39,0x4b,0x72},
-{0x4a,0x4a,0xde,0x94}, {0x4c,0x4c,0xd4,0x98}, {0x58,0x58,0xe8,0xb0}, {0xcf,0xcf,0x4a,0x85},
-{0xd0,0xd0,0x6b,0xbb}, {0xef,0xef,0x2a,0xc5}, {0xaa,0xaa,0xe5,0x4f}, {0xfb,0xfb,0x16,0xed},
-{0x43,0x43,0xc5,0x86}, {0x4d,0x4d,0xd7,0x9a}, {0x33,0x33,0x55,0x66}, {0x85,0x85,0x94,0x11},
-{0x45,0x45,0xcf,0x8a}, {0xf9,0xf9,0x10,0xe9}, {0x02,0x02,0x06,0x04}, {0x7f,0x7f,0x81,0xfe},
-{0x50,0x50,0xf0,0xa0}, {0x3c,0x3c,0x44,0x78}, {0x9f,0x9f,0xba,0x25}, {0xa8,0xa8,0xe3,0x4b},
-{0x51,0x51,0xf3,0xa2}, {0xa3,0xa3,0xfe,0x5d}, {0x40,0x40,0xc0,0x80}, {0x8f,0x8f,0x8a,0x05},
-{0x92,0x92,0xad,0x3f}, {0x9d,0x9d,0xbc,0x21}, {0x38,0x38,0x48,0x70}, {0xf5,0xf5,0x04,0xf1},
-{0xbc,0xbc,0xdf,0x63}, {0xb6,0xb6,0xc1,0x77}, {0xda,0xda,0x75,0xaf}, {0x21,0x21,0x63,0x42},
-{0x10,0x10,0x30,0x20}, {0xff,0xff,0x1a,0xe5}, {0xf3,0xf3,0x0e,0xfd}, {0xd2,0xd2,0x6d,0xbf},
-{0xcd,0xcd,0x4c,0x81}, {0x0c,0x0c,0x14,0x18}, {0x13,0x13,0x35,0x26}, {0xec,0xec,0x2f,0xc3},
-{0x5f,0x5f,0xe1,0xbe}, {0x97,0x97,0xa2,0x35}, {0x44,0x44,0xcc,0x88}, {0x17,0x17,0x39,0x2e},
-{0xc4,0xc4,0x57,0x93}, {0xa7,0xa7,0xf2,0x55}, {0x7e,0x7e,0x82,0xfc}, {0x3d,0x3d,0x47,0x7a},
-{0x64,0x64,0xac,0xc8}, {0x5d,0x5d,0xe7,0xba}, {0x19,0x19,0x2b,0x32}, {0x73,0x73,0x95,0xe6},
-{0x60,0x60,0xa0,0xc0}, {0x81,0x81,0x98,0x19}, {0x4f,0x4f,0xd1,0x9e}, {0xdc,0xdc,0x7f,0xa3},
-{0x22,0x22,0x66,0x44}, {0x2a,0x2a,0x7e,0x54}, {0x90,0x90,0xab,0x3b}, {0x88,0x88,0x83,0x0b},
-{0x46,0x46,0xca,0x8c}, {0xee,0xee,0x29,0xc7}, {0xb8,0xb8,0xd3,0x6b}, {0x14,0x14,0x3c,0x28},
-{0xde,0xde,0x79,0xa7}, {0x5e,0x5e,0xe2,0xbc}, {0x0b,0x0b,0x1d,0x16}, {0xdb,0xdb,0x76,0xad},
-{0xe0,0xe0,0x3b,0xdb}, {0x32,0x32,0x56,0x64}, {0x3a,0x3a,0x4e,0x74}, {0x0a,0x0a,0x1e,0x14},
-{0x49,0x49,0xdb,0x92}, {0x06,0x06,0x0a,0x0c}, {0x24,0x24,0x6c,0x48}, {0x5c,0x5c,0xe4,0xb8},
-{0xc2,0xc2,0x5d,0x9f}, {0xd3,0xd3,0x6e,0xbd}, {0xac,0xac,0xef,0x43}, {0x62,0x62,0xa6,0xc4},
-{0x91,0x91,0xa8,0x39}, {0x95,0x95,0xa4,0x31}, {0xe4,0xe4,0x37,0xd3}, {0x79,0x79,0x8b,0xf2},
-{0xe7,0xe7,0x32,0xd5}, {0xc8,0xc8,0x43,0x8b}, {0x37,0x37,0x59,0x6e}, {0x6d,0x6d,0xb7,0xda},
-{0x8d,0x8d,0x8c,0x01}, {0xd5,0xd5,0x64,0xb1}, {0x4e,0x4e,0xd2,0x9c}, {0xa9,0xa9,0xe0,0x49},
-{0x6c,0x6c,0xb4,0xd8}, {0x56,0x56,0xfa,0xac}, {0xf4,0xf4,0x07,0xf3}, {0xea,0xea,0x25,0xcf},
-{0x65,0x65,0xaf,0xca}, {0x7a,0x7a,0x8e,0xf4}, {0xae,0xae,0xe9,0x47}, {0x08,0x08,0x18,0x10},
-{0xba,0xba,0xd5,0x6f}, {0x78,0x78,0x88,0xf0}, {0x25,0x25,0x6f,0x4a}, {0x2e,0x2e,0x72,0x5c},
-{0x1c,0x1c,0x24,0x38}, {0xa6,0xa6,0xf1,0x57}, {0xb4,0xb4,0xc7,0x73}, {0xc6,0xc6,0x51,0x97},
-{0xe8,0xe8,0x23,0xcb}, {0xdd,0xdd,0x7c,0xa1}, {0x74,0x74,0x9c,0xe8}, {0x1f,0x1f,0x21,0x3e},
-{0x4b,0x4b,0xdd,0x96}, {0xbd,0xbd,0xdc,0x61}, {0x8b,0x8b,0x86,0x0d}, {0x8a,0x8a,0x85,0x0f},
-{0x70,0x70,0x90,0xe0}, {0x3e,0x3e,0x42,0x7c}, {0xb5,0xb5,0xc4,0x71}, {0x66,0x66,0xaa,0xcc},
-{0x48,0x48,0xd8,0x90}, {0x03,0x03,0x05,0x06}, {0xf6,0xf6,0x01,0xf7}, {0x0e,0x0e,0x12,0x1c},
-{0x61,0x61,0xa3,0xc2}, {0x35,0x35,0x5f,0x6a}, {0x57,0x57,0xf9,0xae}, {0xb9,0xb9,0xd0,0x69},
-{0x86,0x86,0x91,0x17}, {0xc1,0xc1,0x58,0x99}, {0x1d,0x1d,0x27,0x3a}, {0x9e,0x9e,0xb9,0x27},
-{0xe1,0xe1,0x38,0xd9}, {0xf8,0xf8,0x13,0xeb}, {0x98,0x98,0xb3,0x2b}, {0x11,0x11,0x33,0x22},
-{0x69,0x69,0xbb,0xd2}, {0xd9,0xd9,0x70,0xa9}, {0x8e,0x8e,0x89,0x07}, {0x94,0x94,0xa7,0x33},
-{0x9b,0x9b,0xb6,0x2d}, {0x1e,0x1e,0x22,0x3c}, {0x87,0x87,0x92,0x15}, {0xe9,0xe9,0x20,0xc9},
-{0xce,0xce,0x49,0x87}, {0x55,0x55,0xff,0xaa}, {0x28,0x28,0x78,0x50}, {0xdf,0xdf,0x7a,0xa5},
-{0x8c,0x8c,0x8f,0x03}, {0xa1,0xa1,0xf8,0x59}, {0x89,0x89,0x80,0x09}, {0x0d,0x0d,0x17,0x1a},
-{0xbf,0xbf,0xda,0x65}, {0xe6,0xe6,0x31,0xd7}, {0x42,0x42,0xc6,0x84}, {0x68,0x68,0xb8,0xd0},
-{0x41,0x41,0xc3,0x82}, {0x99,0x99,0xb0,0x29}, {0x2d,0x2d,0x77,0x5a}, {0x0f,0x0f,0x11,0x1e},
-{0xb0,0xb0,0xcb,0x7b}, {0x54,0x54,0xfc,0xa8}, {0xbb,0xbb,0xd6,0x6d}, {0x16,0x16,0x3a,0x2c}
-	}
-};
-#define	T4	xT4.xt8
-
-static const union xtab xT5 = {
-	.xt8 = {
-{0x51,0xf4,0xa7,0x50}, {0x7e,0x41,0x65,0x53}, {0x1a,0x17,0xa4,0xc3}, {0x3a,0x27,0x5e,0x96},
-{0x3b,0xab,0x6b,0xcb}, {0x1f,0x9d,0x45,0xf1}, {0xac,0xfa,0x58,0xab}, {0x4b,0xe3,0x03,0x93},
-{0x20,0x30,0xfa,0x55}, {0xad,0x76,0x6d,0xf6}, {0x88,0xcc,0x76,0x91}, {0xf5,0x02,0x4c,0x25},
-{0x4f,0xe5,0xd7,0xfc}, {0xc5,0x2a,0xcb,0xd7}, {0x26,0x35,0x44,0x80}, {0xb5,0x62,0xa3,0x8f},
-{0xde,0xb1,0x5a,0x49}, {0x25,0xba,0x1b,0x67}, {0x45,0xea,0x0e,0x98}, {0x5d,0xfe,0xc0,0xe1},
-{0xc3,0x2f,0x75,0x02}, {0x81,0x4c,0xf0,0x12}, {0x8d,0x46,0x97,0xa3}, {0x6b,0xd3,0xf9,0xc6},
-{0x03,0x8f,0x5f,0xe7}, {0x15,0x92,0x9c,0x95}, {0xbf,0x6d,0x7a,0xeb}, {0x95,0x52,0x59,0xda},
-{0xd4,0xbe,0x83,0x2d}, {0x58,0x74,0x21,0xd3}, {0x49,0xe0,0x69,0x29}, {0x8e,0xc9,0xc8,0x44},
-{0x75,0xc2,0x89,0x6a}, {0xf4,0x8e,0x79,0x78}, {0x99,0x58,0x3e,0x6b}, {0x27,0xb9,0x71,0xdd},
-{0xbe,0xe1,0x4f,0xb6}, {0xf0,0x88,0xad,0x17}, {0xc9,0x20,0xac,0x66}, {0x7d,0xce,0x3a,0xb4},
-{0x63,0xdf,0x4a,0x18}, {0xe5,0x1a,0x31,0x82}, {0x97,0x51,0x33,0x60}, {0x62,0x53,0x7f,0x45},
-{0xb1,0x64,0x77,0xe0}, {0xbb,0x6b,0xae,0x84}, {0xfe,0x81,0xa0,0x1c}, {0xf9,0x08,0x2b,0x94},
-{0x70,0x48,0x68,0x58}, {0x8f,0x45,0xfd,0x19}, {0x94,0xde,0x6c,0x87}, {0x52,0x7b,0xf8,0xb7},
-{0xab,0x73,0xd3,0x23}, {0x72,0x4b,0x02,0xe2}, {0xe3,0x1f,0x8f,0x57}, {0x66,0x55,0xab,0x2a},
-{0xb2,0xeb,0x28,0x07}, {0x2f,0xb5,0xc2,0x03}, {0x86,0xc5,0x7b,0x9a}, {0xd3,0x37,0x08,0xa5},
-{0x30,0x28,0x87,0xf2}, {0x23,0xbf,0xa5,0xb2}, {0x02,0x03,0x6a,0xba}, {0xed,0x16,0x82,0x5c},
-{0x8a,0xcf,0x1c,0x2b}, {0xa7,0x79,0xb4,0x92}, {0xf3,0x07,0xf2,0xf0}, {0x4e,0x69,0xe2,0xa1},
-{0x65,0xda,0xf4,0xcd}, {0x06,0x05,0xbe,0xd5}, {0xd1,0x34,0x62,0x1f}, {0xc4,0xa6,0xfe,0x8a},
-{0x34,0x2e,0x53,0x9d}, {0xa2,0xf3,0x55,0xa0}, {0x05,0x8a,0xe1,0x32}, {0xa4,0xf6,0xeb,0x75},
-{0x0b,0x83,0xec,0x39}, {0x40,0x60,0xef,0xaa}, {0x5e,0x71,0x9f,0x06}, {0xbd,0x6e,0x10,0x51},
-{0x3e,0x21,0x8a,0xf9}, {0x96,0xdd,0x06,0x3d}, {0xdd,0x3e,0x05,0xae}, {0x4d,0xe6,0xbd,0x46},
-{0x91,0x54,0x8d,0xb5}, {0x71,0xc4,0x5d,0x05}, {0x04,0x06,0xd4,0x6f}, {0x60,0x50,0x15,0xff},
-{0x19,0x98,0xfb,0x24}, {0xd6,0xbd,0xe9,0x97}, {0x89,0x40,0x43,0xcc}, {0x67,0xd9,0x9e,0x77},
-{0xb0,0xe8,0x42,0xbd}, {0x07,0x89,0x8b,0x88}, {0xe7,0x19,0x5b,0x38}, {0x79,0xc8,0xee,0xdb},
-{0xa1,0x7c,0x0a,0x47}, {0x7c,0x42,0x0f,0xe9}, {0xf8,0x84,0x1e,0xc9}, {0x00,0x00,0x00,0x00},
-{0x09,0x80,0x86,0x83}, {0x32,0x2b,0xed,0x48}, {0x1e,0x11,0x70,0xac}, {0x6c,0x5a,0x72,0x4e},
-{0xfd,0x0e,0xff,0xfb}, {0x0f,0x85,0x38,0x56}, {0x3d,0xae,0xd5,0x1e}, {0x36,0x2d,0x39,0x27},
-{0x0a,0x0f,0xd9,0x64}, {0x68,0x5c,0xa6,0x21}, {0x9b,0x5b,0x54,0xd1}, {0x24,0x36,0x2e,0x3a},
-{0x0c,0x0a,0x67,0xb1}, {0x93,0x57,0xe7,0x0f}, {0xb4,0xee,0x96,0xd2}, {0x1b,0x9b,0x91,0x9e},
-{0x80,0xc0,0xc5,0x4f}, {0x61,0xdc,0x20,0xa2}, {0x5a,0x77,0x4b,0x69}, {0x1c,0x12,0x1a,0x16},
-{0xe2,0x93,0xba,0x0a}, {0xc0,0xa0,0x2a,0xe5}, {0x3c,0x22,0xe0,0x43}, {0x12,0x1b,0x17,0x1d},
-{0x0e,0x09,0x0d,0x0b}, {0xf2,0x8b,0xc7,0xad}, {0x2d,0xb6,0xa8,0xb9}, {0x14,0x1e,0xa9,0xc8},
-{0x57,0xf1,0x19,0x85}, {0xaf,0x75,0x07,0x4c}, {0xee,0x99,0xdd,0xbb}, {0xa3,0x7f,0x60,0xfd},
-{0xf7,0x01,0x26,0x9f}, {0x5c,0x72,0xf5,0xbc}, {0x44,0x66,0x3b,0xc5}, {0x5b,0xfb,0x7e,0x34},
-{0x8b,0x43,0x29,0x76}, {0xcb,0x23,0xc6,0xdc}, {0xb6,0xed,0xfc,0x68}, {0xb8,0xe4,0xf1,0x63},
-{0xd7,0x31,0xdc,0xca}, {0x42,0x63,0x85,0x10}, {0x13,0x97,0x22,0x40}, {0x84,0xc6,0x11,0x20},
-{0x85,0x4a,0x24,0x7d}, {0xd2,0xbb,0x3d,0xf8}, {0xae,0xf9,0x32,0x11}, {0xc7,0x29,0xa1,0x6d},
-{0x1d,0x9e,0x2f,0x4b}, {0xdc,0xb2,0x30,0xf3}, {0x0d,0x86,0x52,0xec}, {0x77,0xc1,0xe3,0xd0},
-{0x2b,0xb3,0x16,0x6c}, {0xa9,0x70,0xb9,0x99}, {0x11,0x94,0x48,0xfa}, {0x47,0xe9,0x64,0x22},
-{0xa8,0xfc,0x8c,0xc4}, {0xa0,0xf0,0x3f,0x1a}, {0x56,0x7d,0x2c,0xd8}, {0x22,0x33,0x90,0xef},
-{0x87,0x49,0x4e,0xc7}, {0xd9,0x38,0xd1,0xc1}, {0x8c,0xca,0xa2,0xfe}, {0x98,0xd4,0x0b,0x36},
-{0xa6,0xf5,0x81,0xcf}, {0xa5,0x7a,0xde,0x28}, {0xda,0xb7,0x8e,0x26}, {0x3f,0xad,0xbf,0xa4},
-{0x2c,0x3a,0x9d,0xe4}, {0x50,0x78,0x92,0x0d}, {0x6a,0x5f,0xcc,0x9b}, {0x54,0x7e,0x46,0x62},
-{0xf6,0x8d,0x13,0xc2}, {0x90,0xd8,0xb8,0xe8}, {0x2e,0x39,0xf7,0x5e}, {0x82,0xc3,0xaf,0xf5},
-{0x9f,0x5d,0x80,0xbe}, {0x69,0xd0,0x93,0x7c}, {0x6f,0xd5,0x2d,0xa9}, {0xcf,0x25,0x12,0xb3},
-{0xc8,0xac,0x99,0x3b}, {0x10,0x18,0x7d,0xa7}, {0xe8,0x9c,0x63,0x6e}, {0xdb,0x3b,0xbb,0x7b},
-{0xcd,0x26,0x78,0x09}, {0x6e,0x59,0x18,0xf4}, {0xec,0x9a,0xb7,0x01}, {0x83,0x4f,0x9a,0xa8},
-{0xe6,0x95,0x6e,0x65}, {0xaa,0xff,0xe6,0x7e}, {0x21,0xbc,0xcf,0x08}, {0xef,0x15,0xe8,0xe6},
-{0xba,0xe7,0x9b,0xd9}, {0x4a,0x6f,0x36,0xce}, {0xea,0x9f,0x09,0xd4}, {0x29,0xb0,0x7c,0xd6},
-{0x31,0xa4,0xb2,0xaf}, {0x2a,0x3f,0x23,0x31}, {0xc6,0xa5,0x94,0x30}, {0x35,0xa2,0x66,0xc0},
-{0x74,0x4e,0xbc,0x37}, {0xfc,0x82,0xca,0xa6}, {0xe0,0x90,0xd0,0xb0}, {0x33,0xa7,0xd8,0x15},
-{0xf1,0x04,0x98,0x4a}, {0x41,0xec,0xda,0xf7}, {0x7f,0xcd,0x50,0x0e}, {0x17,0x91,0xf6,0x2f},
-{0x76,0x4d,0xd6,0x8d}, {0x43,0xef,0xb0,0x4d}, {0xcc,0xaa,0x4d,0x54}, {0xe4,0x96,0x04,0xdf},
-{0x9e,0xd1,0xb5,0xe3}, {0x4c,0x6a,0x88,0x1b}, {0xc1,0x2c,0x1f,0xb8}, {0x46,0x65,0x51,0x7f},
-{0x9d,0x5e,0xea,0x04}, {0x01,0x8c,0x35,0x5d}, {0xfa,0x87,0x74,0x73}, {0xfb,0x0b,0x41,0x2e},
-{0xb3,0x67,0x1d,0x5a}, {0x92,0xdb,0xd2,0x52}, {0xe9,0x10,0x56,0x33}, {0x6d,0xd6,0x47,0x13},
-{0x9a,0xd7,0x61,0x8c}, {0x37,0xa1,0x0c,0x7a}, {0x59,0xf8,0x14,0x8e}, {0xeb,0x13,0x3c,0x89},
-{0xce,0xa9,0x27,0xee}, {0xb7,0x61,0xc9,0x35}, {0xe1,0x1c,0xe5,0xed}, {0x7a,0x47,0xb1,0x3c},
-{0x9c,0xd2,0xdf,0x59}, {0x55,0xf2,0x73,0x3f}, {0x18,0x14,0xce,0x79}, {0x73,0xc7,0x37,0xbf},
-{0x53,0xf7,0xcd,0xea}, {0x5f,0xfd,0xaa,0x5b}, {0xdf,0x3d,0x6f,0x14}, {0x78,0x44,0xdb,0x86},
-{0xca,0xaf,0xf3,0x81}, {0xb9,0x68,0xc4,0x3e}, {0x38,0x24,0x34,0x2c}, {0xc2,0xa3,0x40,0x5f},
-{0x16,0x1d,0xc3,0x72}, {0xbc,0xe2,0x25,0x0c}, {0x28,0x3c,0x49,0x8b}, {0xff,0x0d,0x95,0x41},
-{0x39,0xa8,0x01,0x71}, {0x08,0x0c,0xb3,0xde}, {0xd8,0xb4,0xe4,0x9c}, {0x64,0x56,0xc1,0x90},
-{0x7b,0xcb,0x84,0x61}, {0xd5,0x32,0xb6,0x70}, {0x48,0x6c,0x5c,0x74}, {0xd0,0xb8,0x57,0x42}
-	}
-};
-#define	T5	xT5.xt8
-
-static const union xtab xT6 = {
-	.xt8 = {
-{0x50,0x51,0xf4,0xa7}, {0x53,0x7e,0x41,0x65}, {0xc3,0x1a,0x17,0xa4}, {0x96,0x3a,0x27,0x5e},
-{0xcb,0x3b,0xab,0x6b}, {0xf1,0x1f,0x9d,0x45}, {0xab,0xac,0xfa,0x58}, {0x93,0x4b,0xe3,0x03},
-{0x55,0x20,0x30,0xfa}, {0xf6,0xad,0x76,0x6d}, {0x91,0x88,0xcc,0x76}, {0x25,0xf5,0x02,0x4c},
-{0xfc,0x4f,0xe5,0xd7}, {0xd7,0xc5,0x2a,0xcb}, {0x80,0x26,0x35,0x44}, {0x8f,0xb5,0x62,0xa3},
-{0x49,0xde,0xb1,0x5a}, {0x67,0x25,0xba,0x1b}, {0x98,0x45,0xea,0x0e}, {0xe1,0x5d,0xfe,0xc0},
-{0x02,0xc3,0x2f,0x75}, {0x12,0x81,0x4c,0xf0}, {0xa3,0x8d,0x46,0x97}, {0xc6,0x6b,0xd3,0xf9},
-{0xe7,0x03,0x8f,0x5f}, {0x95,0x15,0x92,0x9c}, {0xeb,0xbf,0x6d,0x7a}, {0xda,0x95,0x52,0x59},
-{0x2d,0xd4,0xbe,0x83}, {0xd3,0x58,0x74,0x21}, {0x29,0x49,0xe0,0x69}, {0x44,0x8e,0xc9,0xc8},
-{0x6a,0x75,0xc2,0x89}, {0x78,0xf4,0x8e,0x79}, {0x6b,0x99,0x58,0x3e}, {0xdd,0x27,0xb9,0x71},
-{0xb6,0xbe,0xe1,0x4f}, {0x17,0xf0,0x88,0xad}, {0x66,0xc9,0x20,0xac}, {0xb4,0x7d,0xce,0x3a},
-{0x18,0x63,0xdf,0x4a}, {0x82,0xe5,0x1a,0x31}, {0x60,0x97,0x51,0x33}, {0x45,0x62,0x53,0x7f},
-{0xe0,0xb1,0x64,0x77}, {0x84,0xbb,0x6b,0xae}, {0x1c,0xfe,0x81,0xa0}, {0x94,0xf9,0x08,0x2b},
-{0x58,0x70,0x48,0x68}, {0x19,0x8f,0x45,0xfd}, {0x87,0x94,0xde,0x6c}, {0xb7,0x52,0x7b,0xf8},
-{0x23,0xab,0x73,0xd3}, {0xe2,0x72,0x4b,0x02}, {0x57,0xe3,0x1f,0x8f}, {0x2a,0x66,0x55,0xab},
-{0x07,0xb2,0xeb,0x28}, {0x03,0x2f,0xb5,0xc2}, {0x9a,0x86,0xc5,0x7b}, {0xa5,0xd3,0x37,0x08},
-{0xf2,0x30,0x28,0x87}, {0xb2,0x23,0xbf,0xa5}, {0xba,0x02,0x03,0x6a}, {0x5c,0xed,0x16,0x82},
-{0x2b,0x8a,0xcf,0x1c}, {0x92,0xa7,0x79,0xb4}, {0xf0,0xf3,0x07,0xf2}, {0xa1,0x4e,0x69,0xe2},
-{0xcd,0x65,0xda,0xf4}, {0xd5,0x06,0x05,0xbe}, {0x1f,0xd1,0x34,0x62}, {0x8a,0xc4,0xa6,0xfe},
-{0x9d,0x34,0x2e,0x53}, {0xa0,0xa2,0xf3,0x55}, {0x32,0x05,0x8a,0xe1}, {0x75,0xa4,0xf6,0xeb},
-{0x39,0x0b,0x83,0xec}, {0xaa,0x40,0x60,0xef}, {0x06,0x5e,0x71,0x9f}, {0x51,0xbd,0x6e,0x10},
-{0xf9,0x3e,0x21,0x8a}, {0x3d,0x96,0xdd,0x06}, {0xae,0xdd,0x3e,0x05}, {0x46,0x4d,0xe6,0xbd},
-{0xb5,0x91,0x54,0x8d}, {0x05,0x71,0xc4,0x5d}, {0x6f,0x04,0x06,0xd4}, {0xff,0x60,0x50,0x15},
-{0x24,0x19,0x98,0xfb}, {0x97,0xd6,0xbd,0xe9}, {0xcc,0x89,0x40,0x43}, {0x77,0x67,0xd9,0x9e},
-{0xbd,0xb0,0xe8,0x42}, {0x88,0x07,0x89,0x8b}, {0x38,0xe7,0x19,0x5b}, {0xdb,0x79,0xc8,0xee},
-{0x47,0xa1,0x7c,0x0a}, {0xe9,0x7c,0x42,0x0f}, {0xc9,0xf8,0x84,0x1e}, {0x00,0x00,0x00,0x00},
-{0x83,0x09,0x80,0x86}, {0x48,0x32,0x2b,0xed}, {0xac,0x1e,0x11,0x70}, {0x4e,0x6c,0x5a,0x72},
-{0xfb,0xfd,0x0e,0xff}, {0x56,0x0f,0x85,0x38}, {0x1e,0x3d,0xae,0xd5}, {0x27,0x36,0x2d,0x39},
-{0x64,0x0a,0x0f,0xd9}, {0x21,0x68,0x5c,0xa6}, {0xd1,0x9b,0x5b,0x54}, {0x3a,0x24,0x36,0x2e},
-{0xb1,0x0c,0x0a,0x67}, {0x0f,0x93,0x57,0xe7}, {0xd2,0xb4,0xee,0x96}, {0x9e,0x1b,0x9b,0x91},
-{0x4f,0x80,0xc0,0xc5}, {0xa2,0x61,0xdc,0x20}, {0x69,0x5a,0x77,0x4b}, {0x16,0x1c,0x12,0x1a},
-{0x0a,0xe2,0x93,0xba}, {0xe5,0xc0,0xa0,0x2a}, {0x43,0x3c,0x22,0xe0}, {0x1d,0x12,0x1b,0x17},
-{0x0b,0x0e,0x09,0x0d}, {0xad,0xf2,0x8b,0xc7}, {0xb9,0x2d,0xb6,0xa8}, {0xc8,0x14,0x1e,0xa9},
-{0x85,0x57,0xf1,0x19}, {0x4c,0xaf,0x75,0x07}, {0xbb,0xee,0x99,0xdd}, {0xfd,0xa3,0x7f,0x60},
-{0x9f,0xf7,0x01,0x26}, {0xbc,0x5c,0x72,0xf5}, {0xc5,0x44,0x66,0x3b}, {0x34,0x5b,0xfb,0x7e},
-{0x76,0x8b,0x43,0x29}, {0xdc,0xcb,0x23,0xc6}, {0x68,0xb6,0xed,0xfc}, {0x63,0xb8,0xe4,0xf1},
-{0xca,0xd7,0x31,0xdc}, {0x10,0x42,0x63,0x85}, {0x40,0x13,0x97,0x22}, {0x20,0x84,0xc6,0x11},
-{0x7d,0x85,0x4a,0x24}, {0xf8,0xd2,0xbb,0x3d}, {0x11,0xae,0xf9,0x32}, {0x6d,0xc7,0x29,0xa1},
-{0x4b,0x1d,0x9e,0x2f}, {0xf3,0xdc,0xb2,0x30}, {0xec,0x0d,0x86,0x52}, {0xd0,0x77,0xc1,0xe3},
-{0x6c,0x2b,0xb3,0x16}, {0x99,0xa9,0x70,0xb9}, {0xfa,0x11,0x94,0x48}, {0x22,0x47,0xe9,0x64},
-{0xc4,0xa8,0xfc,0x8c}, {0x1a,0xa0,0xf0,0x3f}, {0xd8,0x56,0x7d,0x2c}, {0xef,0x22,0x33,0x90},
-{0xc7,0x87,0x49,0x4e}, {0xc1,0xd9,0x38,0xd1}, {0xfe,0x8c,0xca,0xa2}, {0x36,0x98,0xd4,0x0b},
-{0xcf,0xa6,0xf5,0x81}, {0x28,0xa5,0x7a,0xde}, {0x26,0xda,0xb7,0x8e}, {0xa4,0x3f,0xad,0xbf},
-{0xe4,0x2c,0x3a,0x9d}, {0x0d,0x50,0x78,0x92}, {0x9b,0x6a,0x5f,0xcc}, {0x62,0x54,0x7e,0x46},
-{0xc2,0xf6,0x8d,0x13}, {0xe8,0x90,0xd8,0xb8}, {0x5e,0x2e,0x39,0xf7}, {0xf5,0x82,0xc3,0xaf},
-{0xbe,0x9f,0x5d,0x80}, {0x7c,0x69,0xd0,0x93}, {0xa9,0x6f,0xd5,0x2d}, {0xb3,0xcf,0x25,0x12},
-{0x3b,0xc8,0xac,0x99}, {0xa7,0x10,0x18,0x7d}, {0x6e,0xe8,0x9c,0x63}, {0x7b,0xdb,0x3b,0xbb},
-{0x09,0xcd,0x26,0x78}, {0xf4,0x6e,0x59,0x18}, {0x01,0xec,0x9a,0xb7}, {0xa8,0x83,0x4f,0x9a},
-{0x65,0xe6,0x95,0x6e}, {0x7e,0xaa,0xff,0xe6}, {0x08,0x21,0xbc,0xcf}, {0xe6,0xef,0x15,0xe8},
-{0xd9,0xba,0xe7,0x9b}, {0xce,0x4a,0x6f,0x36}, {0xd4,0xea,0x9f,0x09}, {0xd6,0x29,0xb0,0x7c},
-{0xaf,0x31,0xa4,0xb2}, {0x31,0x2a,0x3f,0x23}, {0x30,0xc6,0xa5,0x94}, {0xc0,0x35,0xa2,0x66},
-{0x37,0x74,0x4e,0xbc}, {0xa6,0xfc,0x82,0xca}, {0xb0,0xe0,0x90,0xd0}, {0x15,0x33,0xa7,0xd8},
-{0x4a,0xf1,0x04,0x98}, {0xf7,0x41,0xec,0xda}, {0x0e,0x7f,0xcd,0x50}, {0x2f,0x17,0x91,0xf6},
-{0x8d,0x76,0x4d,0xd6}, {0x4d,0x43,0xef,0xb0}, {0x54,0xcc,0xaa,0x4d}, {0xdf,0xe4,0x96,0x04},
-{0xe3,0x9e,0xd1,0xb5}, {0x1b,0x4c,0x6a,0x88}, {0xb8,0xc1,0x2c,0x1f}, {0x7f,0x46,0x65,0x51},
-{0x04,0x9d,0x5e,0xea}, {0x5d,0x01,0x8c,0x35}, {0x73,0xfa,0x87,0x74}, {0x2e,0xfb,0x0b,0x41},
-{0x5a,0xb3,0x67,0x1d}, {0x52,0x92,0xdb,0xd2}, {0x33,0xe9,0x10,0x56}, {0x13,0x6d,0xd6,0x47},
-{0x8c,0x9a,0xd7,0x61}, {0x7a,0x37,0xa1,0x0c}, {0x8e,0x59,0xf8,0x14}, {0x89,0xeb,0x13,0x3c},
-{0xee,0xce,0xa9,0x27}, {0x35,0xb7,0x61,0xc9}, {0xed,0xe1,0x1c,0xe5}, {0x3c,0x7a,0x47,0xb1},
-{0x59,0x9c,0xd2,0xdf}, {0x3f,0x55,0xf2,0x73}, {0x79,0x18,0x14,0xce}, {0xbf,0x73,0xc7,0x37},
-{0xea,0x53,0xf7,0xcd}, {0x5b,0x5f,0xfd,0xaa}, {0x14,0xdf,0x3d,0x6f}, {0x86,0x78,0x44,0xdb},
-{0x81,0xca,0xaf,0xf3}, {0x3e,0xb9,0x68,0xc4}, {0x2c,0x38,0x24,0x34}, {0x5f,0xc2,0xa3,0x40},
-{0x72,0x16,0x1d,0xc3}, {0x0c,0xbc,0xe2,0x25}, {0x8b,0x28,0x3c,0x49}, {0x41,0xff,0x0d,0x95},
-{0x71,0x39,0xa8,0x01}, {0xde,0x08,0x0c,0xb3}, {0x9c,0xd8,0xb4,0xe4}, {0x90,0x64,0x56,0xc1},
-{0x61,0x7b,0xcb,0x84}, {0x70,0xd5,0x32,0xb6}, {0x74,0x48,0x6c,0x5c}, {0x42,0xd0,0xb8,0x57}
-	}
-};
-#define	T6	xT6.xt8
-
-static const union xtab xT7 = {
-	.xt8 = {
-{0xa7,0x50,0x51,0xf4}, {0x65,0x53,0x7e,0x41}, {0xa4,0xc3,0x1a,0x17}, {0x5e,0x96,0x3a,0x27},
-{0x6b,0xcb,0x3b,0xab}, {0x45,0xf1,0x1f,0x9d}, {0x58,0xab,0xac,0xfa}, {0x03,0x93,0x4b,0xe3},
-{0xfa,0x55,0x20,0x30}, {0x6d,0xf6,0xad,0x76}, {0x76,0x91,0x88,0xcc}, {0x4c,0x25,0xf5,0x02},
-{0xd7,0xfc,0x4f,0xe5}, {0xcb,0xd7,0xc5,0x2a}, {0x44,0x80,0x26,0x35}, {0xa3,0x8f,0xb5,0x62},
-{0x5a,0x49,0xde,0xb1}, {0x1b,0x67,0x25,0xba}, {0x0e,0x98,0x45,0xea}, {0xc0,0xe1,0x5d,0xfe},
-{0x75,0x02,0xc3,0x2f}, {0xf0,0x12,0x81,0x4c}, {0x97,0xa3,0x8d,0x46}, {0xf9,0xc6,0x6b,0xd3},
-{0x5f,0xe7,0x03,0x8f}, {0x9c,0x95,0x15,0x92}, {0x7a,0xeb,0xbf,0x6d}, {0x59,0xda,0x95,0x52},
-{0x83,0x2d,0xd4,0xbe}, {0x21,0xd3,0x58,0x74}, {0x69,0x29,0x49,0xe0}, {0xc8,0x44,0x8e,0xc9},
-{0x89,0x6a,0x75,0xc2}, {0x79,0x78,0xf4,0x8e}, {0x3e,0x6b,0x99,0x58}, {0x71,0xdd,0x27,0xb9},
-{0x4f,0xb6,0xbe,0xe1}, {0xad,0x17,0xf0,0x88}, {0xac,0x66,0xc9,0x20}, {0x3a,0xb4,0x7d,0xce},
-{0x4a,0x18,0x63,0xdf}, {0x31,0x82,0xe5,0x1a}, {0x33,0x60,0x97,0x51}, {0x7f,0x45,0x62,0x53},
-{0x77,0xe0,0xb1,0x64}, {0xae,0x84,0xbb,0x6b}, {0xa0,0x1c,0xfe,0x81}, {0x2b,0x94,0xf9,0x08},
-{0x68,0x58,0x70,0x48}, {0xfd,0x19,0x8f,0x45}, {0x6c,0x87,0x94,0xde}, {0xf8,0xb7,0x52,0x7b},
-{0xd3,0x23,0xab,0x73}, {0x02,0xe2,0x72,0x4b}, {0x8f,0x57,0xe3,0x1f}, {0xab,0x2a,0x66,0x55},
-{0x28,0x07,0xb2,0xeb}, {0xc2,0x03,0x2f,0xb5}, {0x7b,0x9a,0x86,0xc5}, {0x08,0xa5,0xd3,0x37},
-{0x87,0xf2,0x30,0x28}, {0xa5,0xb2,0x23,0xbf}, {0x6a,0xba,0x02,0x03}, {0x82,0x5c,0xed,0x16},
-{0x1c,0x2b,0x8a,0xcf}, {0xb4,0x92,0xa7,0x79}, {0xf2,0xf0,0xf3,0x07}, {0xe2,0xa1,0x4e,0x69},
-{0xf4,0xcd,0x65,0xda}, {0xbe,0xd5,0x06,0x05}, {0x62,0x1f,0xd1,0x34}, {0xfe,0x8a,0xc4,0xa6},
-{0x53,0x9d,0x34,0x2e}, {0x55,0xa0,0xa2,0xf3}, {0xe1,0x32,0x05,0x8a}, {0xeb,0x75,0xa4,0xf6},
-{0xec,0x39,0x0b,0x83}, {0xef,0xaa,0x40,0x60}, {0x9f,0x06,0x5e,0x71}, {0x10,0x51,0xbd,0x6e},
-{0x8a,0xf9,0x3e,0x21}, {0x06,0x3d,0x96,0xdd}, {0x05,0xae,0xdd,0x3e}, {0xbd,0x46,0x4d,0xe6},
-{0x8d,0xb5,0x91,0x54}, {0x5d,0x05,0x71,0xc4}, {0xd4,0x6f,0x04,0x06}, {0x15,0xff,0x60,0x50},
-{0xfb,0x24,0x19,0x98}, {0xe9,0x97,0xd6,0xbd}, {0x43,0xcc,0x89,0x40}, {0x9e,0x77,0x67,0xd9},
-{0x42,0xbd,0xb0,0xe8}, {0x8b,0x88,0x07,0x89}, {0x5b,0x38,0xe7,0x19}, {0xee,0xdb,0x79,0xc8},
-{0x0a,0x47,0xa1,0x7c}, {0x0f,0xe9,0x7c,0x42}, {0x1e,0xc9,0xf8,0x84}, {0x00,0x00,0x00,0x00},
-{0x86,0x83,0x09,0x80}, {0xed,0x48,0x32,0x2b}, {0x70,0xac,0x1e,0x11}, {0x72,0x4e,0x6c,0x5a},
-{0xff,0xfb,0xfd,0x0e}, {0x38,0x56,0x0f,0x85}, {0xd5,0x1e,0x3d,0xae}, {0x39,0x27,0x36,0x2d},
-{0xd9,0x64,0x0a,0x0f}, {0xa6,0x21,0x68,0x5c}, {0x54,0xd1,0x9b,0x5b}, {0x2e,0x3a,0x24,0x36},
-{0x67,0xb1,0x0c,0x0a}, {0xe7,0x0f,0x93,0x57}, {0x96,0xd2,0xb4,0xee}, {0x91,0x9e,0x1b,0x9b},
-{0xc5,0x4f,0x80,0xc0}, {0x20,0xa2,0x61,0xdc}, {0x4b,0x69,0x5a,0x77}, {0x1a,0x16,0x1c,0x12},
-{0xba,0x0a,0xe2,0x93}, {0x2a,0xe5,0xc0,0xa0}, {0xe0,0x43,0x3c,0x22}, {0x17,0x1d,0x12,0x1b},
-{0x0d,0x0b,0x0e,0x09}, {0xc7,0xad,0xf2,0x8b}, {0xa8,0xb9,0x2d,0xb6}, {0xa9,0xc8,0x14,0x1e},
-{0x19,0x85,0x57,0xf1}, {0x07,0x4c,0xaf,0x75}, {0xdd,0xbb,0xee,0x99}, {0x60,0xfd,0xa3,0x7f},
-{0x26,0x9f,0xf7,0x01}, {0xf5,0xbc,0x5c,0x72}, {0x3b,0xc5,0x44,0x66}, {0x7e,0x34,0x5b,0xfb},
-{0x29,0x76,0x8b,0x43}, {0xc6,0xdc,0xcb,0x23}, {0xfc,0x68,0xb6,0xed}, {0xf1,0x63,0xb8,0xe4},
-{0xdc,0xca,0xd7,0x31}, {0x85,0x10,0x42,0x63}, {0x22,0x40,0x13,0x97}, {0x11,0x20,0x84,0xc6},
-{0x24,0x7d,0x85,0x4a}, {0x3d,0xf8,0xd2,0xbb}, {0x32,0x11,0xae,0xf9}, {0xa1,0x6d,0xc7,0x29},
-{0x2f,0x4b,0x1d,0x9e}, {0x30,0xf3,0xdc,0xb2}, {0x52,0xec,0x0d,0x86}, {0xe3,0xd0,0x77,0xc1},
-{0x16,0x6c,0x2b,0xb3}, {0xb9,0x99,0xa9,0x70}, {0x48,0xfa,0x11,0x94}, {0x64,0x22,0x47,0xe9},
-{0x8c,0xc4,0xa8,0xfc}, {0x3f,0x1a,0xa0,0xf0}, {0x2c,0xd8,0x56,0x7d}, {0x90,0xef,0x22,0x33},
-{0x4e,0xc7,0x87,0x49}, {0xd1,0xc1,0xd9,0x38}, {0xa2,0xfe,0x8c,0xca}, {0x0b,0x36,0x98,0xd4},
-{0x81,0xcf,0xa6,0xf5}, {0xde,0x28,0xa5,0x7a}, {0x8e,0x26,0xda,0xb7}, {0xbf,0xa4,0x3f,0xad},
-{0x9d,0xe4,0x2c,0x3a}, {0x92,0x0d,0x50,0x78}, {0xcc,0x9b,0x6a,0x5f}, {0x46,0x62,0x54,0x7e},
-{0x13,0xc2,0xf6,0x8d}, {0xb8,0xe8,0x90,0xd8}, {0xf7,0x5e,0x2e,0x39}, {0xaf,0xf5,0x82,0xc3},
-{0x80,0xbe,0x9f,0x5d}, {0x93,0x7c,0x69,0xd0}, {0x2d,0xa9,0x6f,0xd5}, {0x12,0xb3,0xcf,0x25},
-{0x99,0x3b,0xc8,0xac}, {0x7d,0xa7,0x10,0x18}, {0x63,0x6e,0xe8,0x9c}, {0xbb,0x7b,0xdb,0x3b},
-{0x78,0x09,0xcd,0x26}, {0x18,0xf4,0x6e,0x59}, {0xb7,0x01,0xec,0x9a}, {0x9a,0xa8,0x83,0x4f},
-{0x6e,0x65,0xe6,0x95}, {0xe6,0x7e,0xaa,0xff}, {0xcf,0x08,0x21,0xbc}, {0xe8,0xe6,0xef,0x15},
-{0x9b,0xd9,0xba,0xe7}, {0x36,0xce,0x4a,0x6f}, {0x09,0xd4,0xea,0x9f}, {0x7c,0xd6,0x29,0xb0},
-{0xb2,0xaf,0x31,0xa4}, {0x23,0x31,0x2a,0x3f}, {0x94,0x30,0xc6,0xa5}, {0x66,0xc0,0x35,0xa2},
-{0xbc,0x37,0x74,0x4e}, {0xca,0xa6,0xfc,0x82}, {0xd0,0xb0,0xe0,0x90}, {0xd8,0x15,0x33,0xa7},
-{0x98,0x4a,0xf1,0x04}, {0xda,0xf7,0x41,0xec}, {0x50,0x0e,0x7f,0xcd}, {0xf6,0x2f,0x17,0x91},
-{0xd6,0x8d,0x76,0x4d}, {0xb0,0x4d,0x43,0xef}, {0x4d,0x54,0xcc,0xaa}, {0x04,0xdf,0xe4,0x96},
-{0xb5,0xe3,0x9e,0xd1}, {0x88,0x1b,0x4c,0x6a}, {0x1f,0xb8,0xc1,0x2c}, {0x51,0x7f,0x46,0x65},
-{0xea,0x04,0x9d,0x5e}, {0x35,0x5d,0x01,0x8c}, {0x74,0x73,0xfa,0x87}, {0x41,0x2e,0xfb,0x0b},
-{0x1d,0x5a,0xb3,0x67}, {0xd2,0x52,0x92,0xdb}, {0x56,0x33,0xe9,0x10}, {0x47,0x13,0x6d,0xd6},
-{0x61,0x8c,0x9a,0xd7}, {0x0c,0x7a,0x37,0xa1}, {0x14,0x8e,0x59,0xf8}, {0x3c,0x89,0xeb,0x13},
-{0x27,0xee,0xce,0xa9}, {0xc9,0x35,0xb7,0x61}, {0xe5,0xed,0xe1,0x1c}, {0xb1,0x3c,0x7a,0x47},
-{0xdf,0x59,0x9c,0xd2}, {0x73,0x3f,0x55,0xf2}, {0xce,0x79,0x18,0x14}, {0x37,0xbf,0x73,0xc7},
-{0xcd,0xea,0x53,0xf7}, {0xaa,0x5b,0x5f,0xfd}, {0x6f,0x14,0xdf,0x3d}, {0xdb,0x86,0x78,0x44},
-{0xf3,0x81,0xca,0xaf}, {0xc4,0x3e,0xb9,0x68}, {0x34,0x2c,0x38,0x24}, {0x40,0x5f,0xc2,0xa3},
-{0xc3,0x72,0x16,0x1d}, {0x25,0x0c,0xbc,0xe2}, {0x49,0x8b,0x28,0x3c}, {0x95,0x41,0xff,0x0d},
-{0x01,0x71,0x39,0xa8}, {0xb3,0xde,0x08,0x0c}, {0xe4,0x9c,0xd8,0xb4}, {0xc1,0x90,0x64,0x56},
-{0x84,0x61,0x7b,0xcb}, {0xb6,0x70,0xd5,0x32}, {0x5c,0x74,0x48,0x6c}, {0x57,0x42,0xd0,0xb8}
-	}
-};
-#define	T7	xT7.xt8
-
-static const union xtab xT8 = {
-	.xt8 = {
-{0xf4,0xa7,0x50,0x51}, {0x41,0x65,0x53,0x7e}, {0x17,0xa4,0xc3,0x1a}, {0x27,0x5e,0x96,0x3a},
-{0xab,0x6b,0xcb,0x3b}, {0x9d,0x45,0xf1,0x1f}, {0xfa,0x58,0xab,0xac}, {0xe3,0x03,0x93,0x4b},
-{0x30,0xfa,0x55,0x20}, {0x76,0x6d,0xf6,0xad}, {0xcc,0x76,0x91,0x88}, {0x02,0x4c,0x25,0xf5},
-{0xe5,0xd7,0xfc,0x4f}, {0x2a,0xcb,0xd7,0xc5}, {0x35,0x44,0x80,0x26}, {0x62,0xa3,0x8f,0xb5},
-{0xb1,0x5a,0x49,0xde}, {0xba,0x1b,0x67,0x25}, {0xea,0x0e,0x98,0x45}, {0xfe,0xc0,0xe1,0x5d},
-{0x2f,0x75,0x02,0xc3}, {0x4c,0xf0,0x12,0x81}, {0x46,0x97,0xa3,0x8d}, {0xd3,0xf9,0xc6,0x6b},
-{0x8f,0x5f,0xe7,0x03}, {0x92,0x9c,0x95,0x15}, {0x6d,0x7a,0xeb,0xbf}, {0x52,0x59,0xda,0x95},
-{0xbe,0x83,0x2d,0xd4}, {0x74,0x21,0xd3,0x58}, {0xe0,0x69,0x29,0x49}, {0xc9,0xc8,0x44,0x8e},
-{0xc2,0x89,0x6a,0x75}, {0x8e,0x79,0x78,0xf4}, {0x58,0x3e,0x6b,0x99}, {0xb9,0x71,0xdd,0x27},
-{0xe1,0x4f,0xb6,0xbe}, {0x88,0xad,0x17,0xf0}, {0x20,0xac,0x66,0xc9}, {0xce,0x3a,0xb4,0x7d},
-{0xdf,0x4a,0x18,0x63}, {0x1a,0x31,0x82,0xe5}, {0x51,0x33,0x60,0x97}, {0x53,0x7f,0x45,0x62},
-{0x64,0x77,0xe0,0xb1}, {0x6b,0xae,0x84,0xbb}, {0x81,0xa0,0x1c,0xfe}, {0x08,0x2b,0x94,0xf9},
-{0x48,0x68,0x58,0x70}, {0x45,0xfd,0x19,0x8f}, {0xde,0x6c,0x87,0x94}, {0x7b,0xf8,0xb7,0x52},
-{0x73,0xd3,0x23,0xab}, {0x4b,0x02,0xe2,0x72}, {0x1f,0x8f,0x57,0xe3}, {0x55,0xab,0x2a,0x66},
-{0xeb,0x28,0x07,0xb2}, {0xb5,0xc2,0x03,0x2f}, {0xc5,0x7b,0x9a,0x86}, {0x37,0x08,0xa5,0xd3},
-{0x28,0x87,0xf2,0x30}, {0xbf,0xa5,0xb2,0x23}, {0x03,0x6a,0xba,0x02}, {0x16,0x82,0x5c,0xed},
-{0xcf,0x1c,0x2b,0x8a}, {0x79,0xb4,0x92,0xa7}, {0x07,0xf2,0xf0,0xf3}, {0x69,0xe2,0xa1,0x4e},
-{0xda,0xf4,0xcd,0x65}, {0x05,0xbe,0xd5,0x06}, {0x34,0x62,0x1f,0xd1}, {0xa6,0xfe,0x8a,0xc4},
-{0x2e,0x53,0x9d,0x34}, {0xf3,0x55,0xa0,0xa2}, {0x8a,0xe1,0x32,0x05}, {0xf6,0xeb,0x75,0xa4},
-{0x83,0xec,0x39,0x0b}, {0x60,0xef,0xaa,0x40}, {0x71,0x9f,0x06,0x5e}, {0x6e,0x10,0x51,0xbd},
-{0x21,0x8a,0xf9,0x3e}, {0xdd,0x06,0x3d,0x96}, {0x3e,0x05,0xae,0xdd}, {0xe6,0xbd,0x46,0x4d},
-{0x54,0x8d,0xb5,0x91}, {0xc4,0x5d,0x05,0x71}, {0x06,0xd4,0x6f,0x04}, {0x50,0x15,0xff,0x60},
-{0x98,0xfb,0x24,0x19}, {0xbd,0xe9,0x97,0xd6}, {0x40,0x43,0xcc,0x89}, {0xd9,0x9e,0x77,0x67},
-{0xe8,0x42,0xbd,0xb0}, {0x89,0x8b,0x88,0x07}, {0x19,0x5b,0x38,0xe7}, {0xc8,0xee,0xdb,0x79},
-{0x7c,0x0a,0x47,0xa1}, {0x42,0x0f,0xe9,0x7c}, {0x84,0x1e,0xc9,0xf8}, {0x00,0x00,0x00,0x00},
-{0x80,0x86,0x83,0x09}, {0x2b,0xed,0x48,0x32}, {0x11,0x70,0xac,0x1e}, {0x5a,0x72,0x4e,0x6c},
-{0x0e,0xff,0xfb,0xfd}, {0x85,0x38,0x56,0x0f}, {0xae,0xd5,0x1e,0x3d}, {0x2d,0x39,0x27,0x36},
-{0x0f,0xd9,0x64,0x0a}, {0x5c,0xa6,0x21,0x68}, {0x5b,0x54,0xd1,0x9b}, {0x36,0x2e,0x3a,0x24},
-{0x0a,0x67,0xb1,0x0c}, {0x57,0xe7,0x0f,0x93}, {0xee,0x96,0xd2,0xb4}, {0x9b,0x91,0x9e,0x1b},
-{0xc0,0xc5,0x4f,0x80}, {0xdc,0x20,0xa2,0x61}, {0x77,0x4b,0x69,0x5a}, {0x12,0x1a,0x16,0x1c},
-{0x93,0xba,0x0a,0xe2}, {0xa0,0x2a,0xe5,0xc0}, {0x22,0xe0,0x43,0x3c}, {0x1b,0x17,0x1d,0x12},
-{0x09,0x0d,0x0b,0x0e}, {0x8b,0xc7,0xad,0xf2}, {0xb6,0xa8,0xb9,0x2d}, {0x1e,0xa9,0xc8,0x14},
-{0xf1,0x19,0x85,0x57}, {0x75,0x07,0x4c,0xaf}, {0x99,0xdd,0xbb,0xee}, {0x7f,0x60,0xfd,0xa3},
-{0x01,0x26,0x9f,0xf7}, {0x72,0xf5,0xbc,0x5c}, {0x66,0x3b,0xc5,0x44}, {0xfb,0x7e,0x34,0x5b},
-{0x43,0x29,0x76,0x8b}, {0x23,0xc6,0xdc,0xcb}, {0xed,0xfc,0x68,0xb6}, {0xe4,0xf1,0x63,0xb8},
-{0x31,0xdc,0xca,0xd7}, {0x63,0x85,0x10,0x42}, {0x97,0x22,0x40,0x13}, {0xc6,0x11,0x20,0x84},
-{0x4a,0x24,0x7d,0x85}, {0xbb,0x3d,0xf8,0xd2}, {0xf9,0x32,0x11,0xae}, {0x29,0xa1,0x6d,0xc7},
-{0x9e,0x2f,0x4b,0x1d}, {0xb2,0x30,0xf3,0xdc}, {0x86,0x52,0xec,0x0d}, {0xc1,0xe3,0xd0,0x77},
-{0xb3,0x16,0x6c,0x2b}, {0x70,0xb9,0x99,0xa9}, {0x94,0x48,0xfa,0x11}, {0xe9,0x64,0x22,0x47},
-{0xfc,0x8c,0xc4,0xa8}, {0xf0,0x3f,0x1a,0xa0}, {0x7d,0x2c,0xd8,0x56}, {0x33,0x90,0xef,0x22},
-{0x49,0x4e,0xc7,0x87}, {0x38,0xd1,0xc1,0xd9}, {0xca,0xa2,0xfe,0x8c}, {0xd4,0x0b,0x36,0x98},
-{0xf5,0x81,0xcf,0xa6}, {0x7a,0xde,0x28,0xa5}, {0xb7,0x8e,0x26,0xda}, {0xad,0xbf,0xa4,0x3f},
-{0x3a,0x9d,0xe4,0x2c}, {0x78,0x92,0x0d,0x50}, {0x5f,0xcc,0x9b,0x6a}, {0x7e,0x46,0x62,0x54},
-{0x8d,0x13,0xc2,0xf6}, {0xd8,0xb8,0xe8,0x90}, {0x39,0xf7,0x5e,0x2e}, {0xc3,0xaf,0xf5,0x82},
-{0x5d,0x80,0xbe,0x9f}, {0xd0,0x93,0x7c,0x69}, {0xd5,0x2d,0xa9,0x6f}, {0x25,0x12,0xb3,0xcf},
-{0xac,0x99,0x3b,0xc8}, {0x18,0x7d,0xa7,0x10}, {0x9c,0x63,0x6e,0xe8}, {0x3b,0xbb,0x7b,0xdb},
-{0x26,0x78,0x09,0xcd}, {0x59,0x18,0xf4,0x6e}, {0x9a,0xb7,0x01,0xec}, {0x4f,0x9a,0xa8,0x83},
-{0x95,0x6e,0x65,0xe6}, {0xff,0xe6,0x7e,0xaa}, {0xbc,0xcf,0x08,0x21}, {0x15,0xe8,0xe6,0xef},
-{0xe7,0x9b,0xd9,0xba}, {0x6f,0x36,0xce,0x4a}, {0x9f,0x09,0xd4,0xea}, {0xb0,0x7c,0xd6,0x29},
-{0xa4,0xb2,0xaf,0x31}, {0x3f,0x23,0x31,0x2a}, {0xa5,0x94,0x30,0xc6}, {0xa2,0x66,0xc0,0x35},
-{0x4e,0xbc,0x37,0x74}, {0x82,0xca,0xa6,0xfc}, {0x90,0xd0,0xb0,0xe0}, {0xa7,0xd8,0x15,0x33},
-{0x04,0x98,0x4a,0xf1}, {0xec,0xda,0xf7,0x41}, {0xcd,0x50,0x0e,0x7f}, {0x91,0xf6,0x2f,0x17},
-{0x4d,0xd6,0x8d,0x76}, {0xef,0xb0,0x4d,0x43}, {0xaa,0x4d,0x54,0xcc}, {0x96,0x04,0xdf,0xe4},
-{0xd1,0xb5,0xe3,0x9e}, {0x6a,0x88,0x1b,0x4c}, {0x2c,0x1f,0xb8,0xc1}, {0x65,0x51,0x7f,0x46},
-{0x5e,0xea,0x04,0x9d}, {0x8c,0x35,0x5d,0x01}, {0x87,0x74,0x73,0xfa}, {0x0b,0x41,0x2e,0xfb},
-{0x67,0x1d,0x5a,0xb3}, {0xdb,0xd2,0x52,0x92}, {0x10,0x56,0x33,0xe9}, {0xd6,0x47,0x13,0x6d},
-{0xd7,0x61,0x8c,0x9a}, {0xa1,0x0c,0x7a,0x37}, {0xf8,0x14,0x8e,0x59}, {0x13,0x3c,0x89,0xeb},
-{0xa9,0x27,0xee,0xce}, {0x61,0xc9,0x35,0xb7}, {0x1c,0xe5,0xed,0xe1}, {0x47,0xb1,0x3c,0x7a},
-{0xd2,0xdf,0x59,0x9c}, {0xf2,0x73,0x3f,0x55}, {0x14,0xce,0x79,0x18}, {0xc7,0x37,0xbf,0x73},
-{0xf7,0xcd,0xea,0x53}, {0xfd,0xaa,0x5b,0x5f}, {0x3d,0x6f,0x14,0xdf}, {0x44,0xdb,0x86,0x78},
-{0xaf,0xf3,0x81,0xca}, {0x68,0xc4,0x3e,0xb9}, {0x24,0x34,0x2c,0x38}, {0xa3,0x40,0x5f,0xc2},
-{0x1d,0xc3,0x72,0x16}, {0xe2,0x25,0x0c,0xbc}, {0x3c,0x49,0x8b,0x28}, {0x0d,0x95,0x41,0xff},
-{0xa8,0x01,0x71,0x39}, {0x0c,0xb3,0xde,0x08}, {0xb4,0xe4,0x9c,0xd8}, {0x56,0xc1,0x90,0x64},
-{0xcb,0x84,0x61,0x7b}, {0x32,0xb6,0x70,0xd5}, {0x6c,0x5c,0x74,0x48}, {0xb8,0x57,0x42,0xd0}
-	}
-};
-#define	T8	xT8.xt8
-
-static const word8 S5[256] = {
-0x52,0x09,0x6a,0xd5,
-0x30,0x36,0xa5,0x38,
-0xbf,0x40,0xa3,0x9e,
-0x81,0xf3,0xd7,0xfb,
-0x7c,0xe3,0x39,0x82,
-0x9b,0x2f,0xff,0x87,
-0x34,0x8e,0x43,0x44,
-0xc4,0xde,0xe9,0xcb,
-0x54,0x7b,0x94,0x32,
-0xa6,0xc2,0x23,0x3d,
-0xee,0x4c,0x95,0x0b,
-0x42,0xfa,0xc3,0x4e,
-0x08,0x2e,0xa1,0x66,
-0x28,0xd9,0x24,0xb2,
-0x76,0x5b,0xa2,0x49,
-0x6d,0x8b,0xd1,0x25,
-0x72,0xf8,0xf6,0x64,
-0x86,0x68,0x98,0x16,
-0xd4,0xa4,0x5c,0xcc,
-0x5d,0x65,0xb6,0x92,
-0x6c,0x70,0x48,0x50,
-0xfd,0xed,0xb9,0xda,
-0x5e,0x15,0x46,0x57,
-0xa7,0x8d,0x9d,0x84,
-0x90,0xd8,0xab,0x00,
-0x8c,0xbc,0xd3,0x0a,
-0xf7,0xe4,0x58,0x05,
-0xb8,0xb3,0x45,0x06,
-0xd0,0x2c,0x1e,0x8f,
-0xca,0x3f,0x0f,0x02,
-0xc1,0xaf,0xbd,0x03,
-0x01,0x13,0x8a,0x6b,
-0x3a,0x91,0x11,0x41,
-0x4f,0x67,0xdc,0xea,
-0x97,0xf2,0xcf,0xce,
-0xf0,0xb4,0xe6,0x73,
-0x96,0xac,0x74,0x22,
-0xe7,0xad,0x35,0x85,
-0xe2,0xf9,0x37,0xe8,
-0x1c,0x75,0xdf,0x6e,
-0x47,0xf1,0x1a,0x71,
-0x1d,0x29,0xc5,0x89,
-0x6f,0xb7,0x62,0x0e,
-0xaa,0x18,0xbe,0x1b,
-0xfc,0x56,0x3e,0x4b,
-0xc6,0xd2,0x79,0x20,
-0x9a,0xdb,0xc0,0xfe,
-0x78,0xcd,0x5a,0xf4,
-0x1f,0xdd,0xa8,0x33,
-0x88,0x07,0xc7,0x31,
-0xb1,0x12,0x10,0x59,
-0x27,0x80,0xec,0x5f,
-0x60,0x51,0x7f,0xa9,
-0x19,0xb5,0x4a,0x0d,
-0x2d,0xe5,0x7a,0x9f,
-0x93,0xc9,0x9c,0xef,
-0xa0,0xe0,0x3b,0x4d,
-0xae,0x2a,0xf5,0xb0,
-0xc8,0xeb,0xbb,0x3c,
-0x83,0x53,0x99,0x61,
-0x17,0x2b,0x04,0x7e,
-0xba,0x77,0xd6,0x26,
-0xe1,0x69,0x14,0x63,
-0x55,0x21,0x0c,0x7d
-};
-
-static const union xtab xU1 = {
-	.xt8 = {
-{0x00,0x00,0x00,0x00}, {0x0e,0x09,0x0d,0x0b}, {0x1c,0x12,0x1a,0x16}, {0x12,0x1b,0x17,0x1d},
-{0x38,0x24,0x34,0x2c}, {0x36,0x2d,0x39,0x27}, {0x24,0x36,0x2e,0x3a}, {0x2a,0x3f,0x23,0x31},
-{0x70,0x48,0x68,0x58}, {0x7e,0x41,0x65,0x53}, {0x6c,0x5a,0x72,0x4e}, {0x62,0x53,0x7f,0x45},
-{0x48,0x6c,0x5c,0x74}, {0x46,0x65,0x51,0x7f}, {0x54,0x7e,0x46,0x62}, {0x5a,0x77,0x4b,0x69},
-{0xe0,0x90,0xd0,0xb0}, {0xee,0x99,0xdd,0xbb}, {0xfc,0x82,0xca,0xa6}, {0xf2,0x8b,0xc7,0xad},
-{0xd8,0xb4,0xe4,0x9c}, {0xd6,0xbd,0xe9,0x97}, {0xc4,0xa6,0xfe,0x8a}, {0xca,0xaf,0xf3,0x81},
-{0x90,0xd8,0xb8,0xe8}, {0x9e,0xd1,0xb5,0xe3}, {0x8c,0xca,0xa2,0xfe}, {0x82,0xc3,0xaf,0xf5},
-{0xa8,0xfc,0x8c,0xc4}, {0xa6,0xf5,0x81,0xcf}, {0xb4,0xee,0x96,0xd2}, {0xba,0xe7,0x9b,0xd9},
-{0xdb,0x3b,0xbb,0x7b}, {0xd5,0x32,0xb6,0x70}, {0xc7,0x29,0xa1,0x6d}, {0xc9,0x20,0xac,0x66},
-{0xe3,0x1f,0x8f,0x57}, {0xed,0x16,0x82,0x5c}, {0xff,0x0d,0x95,0x41}, {0xf1,0x04,0x98,0x4a},
-{0xab,0x73,0xd3,0x23}, {0xa5,0x7a,0xde,0x28}, {0xb7,0x61,0xc9,0x35}, {0xb9,0x68,0xc4,0x3e},
-{0x93,0x57,0xe7,0x0f}, {0x9d,0x5e,0xea,0x04}, {0x8f,0x45,0xfd,0x19}, {0x81,0x4c,0xf0,0x12},
-{0x3b,0xab,0x6b,0xcb}, {0x35,0xa2,0x66,0xc0}, {0x27,0xb9,0x71,0xdd}, {0x29,0xb0,0x7c,0xd6},
-{0x03,0x8f,0x5f,0xe7}, {0x0d,0x86,0x52,0xec}, {0x1f,0x9d,0x45,0xf1}, {0x11,0x94,0x48,0xfa},
-{0x4b,0xe3,0x03,0x93}, {0x45,0xea,0x0e,0x98}, {0x57,0xf1,0x19,0x85}, {0x59,0xf8,0x14,0x8e},
-{0x73,0xc7,0x37,0xbf}, {0x7d,0xce,0x3a,0xb4}, {0x6f,0xd5,0x2d,0xa9}, {0x61,0xdc,0x20,0xa2},
-{0xad,0x76,0x6d,0xf6}, {0xa3,0x7f,0x60,0xfd}, {0xb1,0x64,0x77,0xe0}, {0xbf,0x6d,0x7a,0xeb},
-{0x95,0x52,0x59,0xda}, {0x9b,0x5b,0x54,0xd1}, {0x89,0x40,0x43,0xcc}, {0x87,0x49,0x4e,0xc7},
-{0xdd,0x3e,0x05,0xae}, {0xd3,0x37,0x08,0xa5}, {0xc1,0x2c,0x1f,0xb8}, {0xcf,0x25,0x12,0xb3},
-{0xe5,0x1a,0x31,0x82}, {0xeb,0x13,0x3c,0x89}, {0xf9,0x08,0x2b,0x94}, {0xf7,0x01,0x26,0x9f},
-{0x4d,0xe6,0xbd,0x46}, {0x43,0xef,0xb0,0x4d}, {0x51,0xf4,0xa7,0x50}, {0x5f,0xfd,0xaa,0x5b},
-{0x75,0xc2,0x89,0x6a}, {0x7b,0xcb,0x84,0x61}, {0x69,0xd0,0x93,0x7c}, {0x67,0xd9,0x9e,0x77},
-{0x3d,0xae,0xd5,0x1e}, {0x33,0xa7,0xd8,0x15}, {0x21,0xbc,0xcf,0x08}, {0x2f,0xb5,0xc2,0x03},
-{0x05,0x8a,0xe1,0x32}, {0x0b,0x83,0xec,0x39}, {0x19,0x98,0xfb,0x24}, {0x17,0x91,0xf6,0x2f},
-{0x76,0x4d,0xd6,0x8d}, {0x78,0x44,0xdb,0x86}, {0x6a,0x5f,0xcc,0x9b}, {0x64,0x56,0xc1,0x90},
-{0x4e,0x69,0xe2,0xa1}, {0x40,0x60,0xef,0xaa}, {0x52,0x7b,0xf8,0xb7}, {0x5c,0x72,0xf5,0xbc},
-{0x06,0x05,0xbe,0xd5}, {0x08,0x0c,0xb3,0xde}, {0x1a,0x17,0xa4,0xc3}, {0x14,0x1e,0xa9,0xc8},
-{0x3e,0x21,0x8a,0xf9}, {0x30,0x28,0x87,0xf2}, {0x22,0x33,0x90,0xef}, {0x2c,0x3a,0x9d,0xe4},
-{0x96,0xdd,0x06,0x3d}, {0x98,0xd4,0x0b,0x36}, {0x8a,0xcf,0x1c,0x2b}, {0x84,0xc6,0x11,0x20},
-{0xae,0xf9,0x32,0x11}, {0xa0,0xf0,0x3f,0x1a}, {0xb2,0xeb,0x28,0x07}, {0xbc,0xe2,0x25,0x0c},
-{0xe6,0x95,0x6e,0x65}, {0xe8,0x9c,0x63,0x6e}, {0xfa,0x87,0x74,0x73}, {0xf4,0x8e,0x79,0x78},
-{0xde,0xb1,0x5a,0x49}, {0xd0,0xb8,0x57,0x42}, {0xc2,0xa3,0x40,0x5f}, {0xcc,0xaa,0x4d,0x54},
-{0x41,0xec,0xda,0xf7}, {0x4f,0xe5,0xd7,0xfc}, {0x5d,0xfe,0xc0,0xe1}, {0x53,0xf7,0xcd,0xea},
-{0x79,0xc8,0xee,0xdb}, {0x77,0xc1,0xe3,0xd0}, {0x65,0xda,0xf4,0xcd}, {0x6b,0xd3,0xf9,0xc6},
-{0x31,0xa4,0xb2,0xaf}, {0x3f,0xad,0xbf,0xa4}, {0x2d,0xb6,0xa8,0xb9}, {0x23,0xbf,0xa5,0xb2},
-{0x09,0x80,0x86,0x83}, {0x07,0x89,0x8b,0x88}, {0x15,0x92,0x9c,0x95}, {0x1b,0x9b,0x91,0x9e},
-{0xa1,0x7c,0x0a,0x47}, {0xaf,0x75,0x07,0x4c}, {0xbd,0x6e,0x10,0x51}, {0xb3,0x67,0x1d,0x5a},
-{0x99,0x58,0x3e,0x6b}, {0x97,0x51,0x33,0x60}, {0x85,0x4a,0x24,0x7d}, {0x8b,0x43,0x29,0x76},
-{0xd1,0x34,0x62,0x1f}, {0xdf,0x3d,0x6f,0x14}, {0xcd,0x26,0x78,0x09}, {0xc3,0x2f,0x75,0x02},
-{0xe9,0x10,0x56,0x33}, {0xe7,0x19,0x5b,0x38}, {0xf5,0x02,0x4c,0x25}, {0xfb,0x0b,0x41,0x2e},
-{0x9a,0xd7,0x61,0x8c}, {0x94,0xde,0x6c,0x87}, {0x86,0xc5,0x7b,0x9a}, {0x88,0xcc,0x76,0x91},
-{0xa2,0xf3,0x55,0xa0}, {0xac,0xfa,0x58,0xab}, {0xbe,0xe1,0x4f,0xb6}, {0xb0,0xe8,0x42,0xbd},
-{0xea,0x9f,0x09,0xd4}, {0xe4,0x96,0x04,0xdf}, {0xf6,0x8d,0x13,0xc2}, {0xf8,0x84,0x1e,0xc9},
-{0xd2,0xbb,0x3d,0xf8}, {0xdc,0xb2,0x30,0xf3}, {0xce,0xa9,0x27,0xee}, {0xc0,0xa0,0x2a,0xe5},
-{0x7a,0x47,0xb1,0x3c}, {0x74,0x4e,0xbc,0x37}, {0x66,0x55,0xab,0x2a}, {0x68,0x5c,0xa6,0x21},
-{0x42,0x63,0x85,0x10}, {0x4c,0x6a,0x88,0x1b}, {0x5e,0x71,0x9f,0x06}, {0x50,0x78,0x92,0x0d},
-{0x0a,0x0f,0xd9,0x64}, {0x04,0x06,0xd4,0x6f}, {0x16,0x1d,0xc3,0x72}, {0x18,0x14,0xce,0x79},
-{0x32,0x2b,0xed,0x48}, {0x3c,0x22,0xe0,0x43}, {0x2e,0x39,0xf7,0x5e}, {0x20,0x30,0xfa,0x55},
-{0xec,0x9a,0xb7,0x01}, {0xe2,0x93,0xba,0x0a}, {0xf0,0x88,0xad,0x17}, {0xfe,0x81,0xa0,0x1c},
-{0xd4,0xbe,0x83,0x2d}, {0xda,0xb7,0x8e,0x26}, {0xc8,0xac,0x99,0x3b}, {0xc6,0xa5,0x94,0x30},
-{0x9c,0xd2,0xdf,0x59}, {0x92,0xdb,0xd2,0x52}, {0x80,0xc0,0xc5,0x4f}, {0x8e,0xc9,0xc8,0x44},
-{0xa4,0xf6,0xeb,0x75}, {0xaa,0xff,0xe6,0x7e}, {0xb8,0xe4,0xf1,0x63}, {0xb6,0xed,0xfc,0x68},
-{0x0c,0x0a,0x67,0xb1}, {0x02,0x03,0x6a,0xba}, {0x10,0x18,0x7d,0xa7}, {0x1e,0x11,0x70,0xac},
-{0x34,0x2e,0x53,0x9d}, {0x3a,0x27,0x5e,0x96}, {0x28,0x3c,0x49,0x8b}, {0x26,0x35,0x44,0x80},
-{0x7c,0x42,0x0f,0xe9}, {0x72,0x4b,0x02,0xe2}, {0x60,0x50,0x15,0xff}, {0x6e,0x59,0x18,0xf4},
-{0x44,0x66,0x3b,0xc5}, {0x4a,0x6f,0x36,0xce}, {0x58,0x74,0x21,0xd3}, {0x56,0x7d,0x2c,0xd8},
-{0x37,0xa1,0x0c,0x7a}, {0x39,0xa8,0x01,0x71}, {0x2b,0xb3,0x16,0x6c}, {0x25,0xba,0x1b,0x67},
-{0x0f,0x85,0x38,0x56}, {0x01,0x8c,0x35,0x5d}, {0x13,0x97,0x22,0x40}, {0x1d,0x9e,0x2f,0x4b},
-{0x47,0xe9,0x64,0x22}, {0x49,0xe0,0x69,0x29}, {0x5b,0xfb,0x7e,0x34}, {0x55,0xf2,0x73,0x3f},
-{0x7f,0xcd,0x50,0x0e}, {0x71,0xc4,0x5d,0x05}, {0x63,0xdf,0x4a,0x18}, {0x6d,0xd6,0x47,0x13},
-{0xd7,0x31,0xdc,0xca}, {0xd9,0x38,0xd1,0xc1}, {0xcb,0x23,0xc6,0xdc}, {0xc5,0x2a,0xcb,0xd7},
-{0xef,0x15,0xe8,0xe6}, {0xe1,0x1c,0xe5,0xed}, {0xf3,0x07,0xf2,0xf0}, {0xfd,0x0e,0xff,0xfb},
-{0xa7,0x79,0xb4,0x92}, {0xa9,0x70,0xb9,0x99}, {0xbb,0x6b,0xae,0x84}, {0xb5,0x62,0xa3,0x8f},
-{0x9f,0x5d,0x80,0xbe}, {0x91,0x54,0x8d,0xb5}, {0x83,0x4f,0x9a,0xa8}, {0x8d,0x46,0x97,0xa3}
-	}
-};
-#define	U1	xU1.xt8
-
-static const union xtab xU2 = {
-	.xt8 = {
-{0x00,0x00,0x00,0x00}, {0x0b,0x0e,0x09,0x0d}, {0x16,0x1c,0x12,0x1a}, {0x1d,0x12,0x1b,0x17},
-{0x2c,0x38,0x24,0x34}, {0x27,0x36,0x2d,0x39}, {0x3a,0x24,0x36,0x2e}, {0x31,0x2a,0x3f,0x23},
-{0x58,0x70,0x48,0x68}, {0x53,0x7e,0x41,0x65}, {0x4e,0x6c,0x5a,0x72}, {0x45,0x62,0x53,0x7f},
-{0x74,0x48,0x6c,0x5c}, {0x7f,0x46,0x65,0x51}, {0x62,0x54,0x7e,0x46}, {0x69,0x5a,0x77,0x4b},
-{0xb0,0xe0,0x90,0xd0}, {0xbb,0xee,0x99,0xdd}, {0xa6,0xfc,0x82,0xca}, {0xad,0xf2,0x8b,0xc7},
-{0x9c,0xd8,0xb4,0xe4}, {0x97,0xd6,0xbd,0xe9}, {0x8a,0xc4,0xa6,0xfe}, {0x81,0xca,0xaf,0xf3},
-{0xe8,0x90,0xd8,0xb8}, {0xe3,0x9e,0xd1,0xb5}, {0xfe,0x8c,0xca,0xa2}, {0xf5,0x82,0xc3,0xaf},
-{0xc4,0xa8,0xfc,0x8c}, {0xcf,0xa6,0xf5,0x81}, {0xd2,0xb4,0xee,0x96}, {0xd9,0xba,0xe7,0x9b},
-{0x7b,0xdb,0x3b,0xbb}, {0x70,0xd5,0x32,0xb6}, {0x6d,0xc7,0x29,0xa1}, {0x66,0xc9,0x20,0xac},
-{0x57,0xe3,0x1f,0x8f}, {0x5c,0xed,0x16,0x82}, {0x41,0xff,0x0d,0x95}, {0x4a,0xf1,0x04,0x98},
-{0x23,0xab,0x73,0xd3}, {0x28,0xa5,0x7a,0xde}, {0x35,0xb7,0x61,0xc9}, {0x3e,0xb9,0x68,0xc4},
-{0x0f,0x93,0x57,0xe7}, {0x04,0x9d,0x5e,0xea}, {0x19,0x8f,0x45,0xfd}, {0x12,0x81,0x4c,0xf0},
-{0xcb,0x3b,0xab,0x6b}, {0xc0,0x35,0xa2,0x66}, {0xdd,0x27,0xb9,0x71}, {0xd6,0x29,0xb0,0x7c},
-{0xe7,0x03,0x8f,0x5f}, {0xec,0x0d,0x86,0x52}, {0xf1,0x1f,0x9d,0x45}, {0xfa,0x11,0x94,0x48},
-{0x93,0x4b,0xe3,0x03}, {0x98,0x45,0xea,0x0e}, {0x85,0x57,0xf1,0x19}, {0x8e,0x59,0xf8,0x14},
-{0xbf,0x73,0xc7,0x37}, {0xb4,0x7d,0xce,0x3a}, {0xa9,0x6f,0xd5,0x2d}, {0xa2,0x61,0xdc,0x20},
-{0xf6,0xad,0x76,0x6d}, {0xfd,0xa3,0x7f,0x60}, {0xe0,0xb1,0x64,0x77}, {0xeb,0xbf,0x6d,0x7a},
-{0xda,0x95,0x52,0x59}, {0xd1,0x9b,0x5b,0x54}, {0xcc,0x89,0x40,0x43}, {0xc7,0x87,0x49,0x4e},
-{0xae,0xdd,0x3e,0x05}, {0xa5,0xd3,0x37,0x08}, {0xb8,0xc1,0x2c,0x1f}, {0xb3,0xcf,0x25,0x12},
-{0x82,0xe5,0x1a,0x31}, {0x89,0xeb,0x13,0x3c}, {0x94,0xf9,0x08,0x2b}, {0x9f,0xf7,0x01,0x26},
-{0x46,0x4d,0xe6,0xbd}, {0x4d,0x43,0xef,0xb0}, {0x50,0x51,0xf4,0xa7}, {0x5b,0x5f,0xfd,0xaa},
-{0x6a,0x75,0xc2,0x89}, {0x61,0x7b,0xcb,0x84}, {0x7c,0x69,0xd0,0x93}, {0x77,0x67,0xd9,0x9e},
-{0x1e,0x3d,0xae,0xd5}, {0x15,0x33,0xa7,0xd8}, {0x08,0x21,0xbc,0xcf}, {0x03,0x2f,0xb5,0xc2},
-{0x32,0x05,0x8a,0xe1}, {0x39,0x0b,0x83,0xec}, {0x24,0x19,0x98,0xfb}, {0x2f,0x17,0x91,0xf6},
-{0x8d,0x76,0x4d,0xd6}, {0x86,0x78,0x44,0xdb}, {0x9b,0x6a,0x5f,0xcc}, {0x90,0x64,0x56,0xc1},
-{0xa1,0x4e,0x69,0xe2}, {0xaa,0x40,0x60,0xef}, {0xb7,0x52,0x7b,0xf8}, {0xbc,0x5c,0x72,0xf5},
-{0xd5,0x06,0x05,0xbe}, {0xde,0x08,0x0c,0xb3}, {0xc3,0x1a,0x17,0xa4}, {0xc8,0x14,0x1e,0xa9},
-{0xf9,0x3e,0x21,0x8a}, {0xf2,0x30,0x28,0x87}, {0xef,0x22,0x33,0x90}, {0xe4,0x2c,0x3a,0x9d},
-{0x3d,0x96,0xdd,0x06}, {0x36,0x98,0xd4,0x0b}, {0x2b,0x8a,0xcf,0x1c}, {0x20,0x84,0xc6,0x11},
-{0x11,0xae,0xf9,0x32}, {0x1a,0xa0,0xf0,0x3f}, {0x07,0xb2,0xeb,0x28}, {0x0c,0xbc,0xe2,0x25},
-{0x65,0xe6,0x95,0x6e}, {0x6e,0xe8,0x9c,0x63}, {0x73,0xfa,0x87,0x74}, {0x78,0xf4,0x8e,0x79},
-{0x49,0xde,0xb1,0x5a}, {0x42,0xd0,0xb8,0x57}, {0x5f,0xc2,0xa3,0x40}, {0x54,0xcc,0xaa,0x4d},
-{0xf7,0x41,0xec,0xda}, {0xfc,0x4f,0xe5,0xd7}, {0xe1,0x5d,0xfe,0xc0}, {0xea,0x53,0xf7,0xcd},
-{0xdb,0x79,0xc8,0xee}, {0xd0,0x77,0xc1,0xe3}, {0xcd,0x65,0xda,0xf4}, {0xc6,0x6b,0xd3,0xf9},
-{0xaf,0x31,0xa4,0xb2}, {0xa4,0x3f,0xad,0xbf}, {0xb9,0x2d,0xb6,0xa8}, {0xb2,0x23,0xbf,0xa5},
-{0x83,0x09,0x80,0x86}, {0x88,0x07,0x89,0x8b}, {0x95,0x15,0x92,0x9c}, {0x9e,0x1b,0x9b,0x91},
-{0x47,0xa1,0x7c,0x0a}, {0x4c,0xaf,0x75,0x07}, {0x51,0xbd,0x6e,0x10}, {0x5a,0xb3,0x67,0x1d},
-{0x6b,0x99,0x58,0x3e}, {0x60,0x97,0x51,0x33}, {0x7d,0x85,0x4a,0x24}, {0x76,0x8b,0x43,0x29},
-{0x1f,0xd1,0x34,0x62}, {0x14,0xdf,0x3d,0x6f}, {0x09,0xcd,0x26,0x78}, {0x02,0xc3,0x2f,0x75},
-{0x33,0xe9,0x10,0x56}, {0x38,0xe7,0x19,0x5b}, {0x25,0xf5,0x02,0x4c}, {0x2e,0xfb,0x0b,0x41},
-{0x8c,0x9a,0xd7,0x61}, {0x87,0x94,0xde,0x6c}, {0x9a,0x86,0xc5,0x7b}, {0x91,0x88,0xcc,0x76},
-{0xa0,0xa2,0xf3,0x55}, {0xab,0xac,0xfa,0x58}, {0xb6,0xbe,0xe1,0x4f}, {0xbd,0xb0,0xe8,0x42},
-{0xd4,0xea,0x9f,0x09}, {0xdf,0xe4,0x96,0x04}, {0xc2,0xf6,0x8d,0x13}, {0xc9,0xf8,0x84,0x1e},
-{0xf8,0xd2,0xbb,0x3d}, {0xf3,0xdc,0xb2,0x30}, {0xee,0xce,0xa9,0x27}, {0xe5,0xc0,0xa0,0x2a},
-{0x3c,0x7a,0x47,0xb1}, {0x37,0x74,0x4e,0xbc}, {0x2a,0x66,0x55,0xab}, {0x21,0x68,0x5c,0xa6},
-{0x10,0x42,0x63,0x85}, {0x1b,0x4c,0x6a,0x88}, {0x06,0x5e,0x71,0x9f}, {0x0d,0x50,0x78,0x92},
-{0x64,0x0a,0x0f,0xd9}, {0x6f,0x04,0x06,0xd4}, {0x72,0x16,0x1d,0xc3}, {0x79,0x18,0x14,0xce},
-{0x48,0x32,0x2b,0xed}, {0x43,0x3c,0x22,0xe0}, {0x5e,0x2e,0x39,0xf7}, {0x55,0x20,0x30,0xfa},
-{0x01,0xec,0x9a,0xb7}, {0x0a,0xe2,0x93,0xba}, {0x17,0xf0,0x88,0xad}, {0x1c,0xfe,0x81,0xa0},
-{0x2d,0xd4,0xbe,0x83}, {0x26,0xda,0xb7,0x8e}, {0x3b,0xc8,0xac,0x99}, {0x30,0xc6,0xa5,0x94},
-{0x59,0x9c,0xd2,0xdf}, {0x52,0x92,0xdb,0xd2}, {0x4f,0x80,0xc0,0xc5}, {0x44,0x8e,0xc9,0xc8},
-{0x75,0xa4,0xf6,0xeb}, {0x7e,0xaa,0xff,0xe6}, {0x63,0xb8,0xe4,0xf1}, {0x68,0xb6,0xed,0xfc},
-{0xb1,0x0c,0x0a,0x67}, {0xba,0x02,0x03,0x6a}, {0xa7,0x10,0x18,0x7d}, {0xac,0x1e,0x11,0x70},
-{0x9d,0x34,0x2e,0x53}, {0x96,0x3a,0x27,0x5e}, {0x8b,0x28,0x3c,0x49}, {0x80,0x26,0x35,0x44},
-{0xe9,0x7c,0x42,0x0f}, {0xe2,0x72,0x4b,0x02}, {0xff,0x60,0x50,0x15}, {0xf4,0x6e,0x59,0x18},
-{0xc5,0x44,0x66,0x3b}, {0xce,0x4a,0x6f,0x36}, {0xd3,0x58,0x74,0x21}, {0xd8,0x56,0x7d,0x2c},
-{0x7a,0x37,0xa1,0x0c}, {0x71,0x39,0xa8,0x01}, {0x6c,0x2b,0xb3,0x16}, {0x67,0x25,0xba,0x1b},
-{0x56,0x0f,0x85,0x38}, {0x5d,0x01,0x8c,0x35}, {0x40,0x13,0x97,0x22}, {0x4b,0x1d,0x9e,0x2f},
-{0x22,0x47,0xe9,0x64}, {0x29,0x49,0xe0,0x69}, {0x34,0x5b,0xfb,0x7e}, {0x3f,0x55,0xf2,0x73},
-{0x0e,0x7f,0xcd,0x50}, {0x05,0x71,0xc4,0x5d}, {0x18,0x63,0xdf,0x4a}, {0x13,0x6d,0xd6,0x47},
-{0xca,0xd7,0x31,0xdc}, {0xc1,0xd9,0x38,0xd1}, {0xdc,0xcb,0x23,0xc6}, {0xd7,0xc5,0x2a,0xcb},
-{0xe6,0xef,0x15,0xe8}, {0xed,0xe1,0x1c,0xe5}, {0xf0,0xf3,0x07,0xf2}, {0xfb,0xfd,0x0e,0xff},
-{0x92,0xa7,0x79,0xb4}, {0x99,0xa9,0x70,0xb9}, {0x84,0xbb,0x6b,0xae}, {0x8f,0xb5,0x62,0xa3},
-{0xbe,0x9f,0x5d,0x80}, {0xb5,0x91,0x54,0x8d}, {0xa8,0x83,0x4f,0x9a}, {0xa3,0x8d,0x46,0x97}
-	}
-};
-#define	U2	xU2.xt8
-
-static const union xtab xU3 = {
-	.xt8 = {
-{0x00,0x00,0x00,0x00}, {0x0d,0x0b,0x0e,0x09}, {0x1a,0x16,0x1c,0x12}, {0x17,0x1d,0x12,0x1b},
-{0x34,0x2c,0x38,0x24}, {0x39,0x27,0x36,0x2d}, {0x2e,0x3a,0x24,0x36}, {0x23,0x31,0x2a,0x3f},
-{0x68,0x58,0x70,0x48}, {0x65,0x53,0x7e,0x41}, {0x72,0x4e,0x6c,0x5a}, {0x7f,0x45,0x62,0x53},
-{0x5c,0x74,0x48,0x6c}, {0x51,0x7f,0x46,0x65}, {0x46,0x62,0x54,0x7e}, {0x4b,0x69,0x5a,0x77},
-{0xd0,0xb0,0xe0,0x90}, {0xdd,0xbb,0xee,0x99}, {0xca,0xa6,0xfc,0x82}, {0xc7,0xad,0xf2,0x8b},
-{0xe4,0x9c,0xd8,0xb4}, {0xe9,0x97,0xd6,0xbd}, {0xfe,0x8a,0xc4,0xa6}, {0xf3,0x81,0xca,0xaf},
-{0xb8,0xe8,0x90,0xd8}, {0xb5,0xe3,0x9e,0xd1}, {0xa2,0xfe,0x8c,0xca}, {0xaf,0xf5,0x82,0xc3},
-{0x8c,0xc4,0xa8,0xfc}, {0x81,0xcf,0xa6,0xf5}, {0x96,0xd2,0xb4,0xee}, {0x9b,0xd9,0xba,0xe7},
-{0xbb,0x7b,0xdb,0x3b}, {0xb6,0x70,0xd5,0x32}, {0xa1,0x6d,0xc7,0x29}, {0xac,0x66,0xc9,0x20},
-{0x8f,0x57,0xe3,0x1f}, {0x82,0x5c,0xed,0x16}, {0x95,0x41,0xff,0x0d}, {0x98,0x4a,0xf1,0x04},
-{0xd3,0x23,0xab,0x73}, {0xde,0x28,0xa5,0x7a}, {0xc9,0x35,0xb7,0x61}, {0xc4,0x3e,0xb9,0x68},
-{0xe7,0x0f,0x93,0x57}, {0xea,0x04,0x9d,0x5e}, {0xfd,0x19,0x8f,0x45}, {0xf0,0x12,0x81,0x4c},
-{0x6b,0xcb,0x3b,0xab}, {0x66,0xc0,0x35,0xa2}, {0x71,0xdd,0x27,0xb9}, {0x7c,0xd6,0x29,0xb0},
-{0x5f,0xe7,0x03,0x8f}, {0x52,0xec,0x0d,0x86}, {0x45,0xf1,0x1f,0x9d}, {0x48,0xfa,0x11,0x94},
-{0x03,0x93,0x4b,0xe3}, {0x0e,0x98,0x45,0xea}, {0x19,0x85,0x57,0xf1}, {0x14,0x8e,0x59,0xf8},
-{0x37,0xbf,0x73,0xc7}, {0x3a,0xb4,0x7d,0xce}, {0x2d,0xa9,0x6f,0xd5}, {0x20,0xa2,0x61,0xdc},
-{0x6d,0xf6,0xad,0x76}, {0x60,0xfd,0xa3,0x7f}, {0x77,0xe0,0xb1,0x64}, {0x7a,0xeb,0xbf,0x6d},
-{0x59,0xda,0x95,0x52}, {0x54,0xd1,0x9b,0x5b}, {0x43,0xcc,0x89,0x40}, {0x4e,0xc7,0x87,0x49},
-{0x05,0xae,0xdd,0x3e}, {0x08,0xa5,0xd3,0x37}, {0x1f,0xb8,0xc1,0x2c}, {0x12,0xb3,0xcf,0x25},
-{0x31,0x82,0xe5,0x1a}, {0x3c,0x89,0xeb,0x13}, {0x2b,0x94,0xf9,0x08}, {0x26,0x9f,0xf7,0x01},
-{0xbd,0x46,0x4d,0xe6}, {0xb0,0x4d,0x43,0xef}, {0xa7,0x50,0x51,0xf4}, {0xaa,0x5b,0x5f,0xfd},
-{0x89,0x6a,0x75,0xc2}, {0x84,0x61,0x7b,0xcb}, {0x93,0x7c,0x69,0xd0}, {0x9e,0x77,0x67,0xd9},
-{0xd5,0x1e,0x3d,0xae}, {0xd8,0x15,0x33,0xa7}, {0xcf,0x08,0x21,0xbc}, {0xc2,0x03,0x2f,0xb5},
-{0xe1,0x32,0x05,0x8a}, {0xec,0x39,0x0b,0x83}, {0xfb,0x24,0x19,0x98}, {0xf6,0x2f,0x17,0x91},
-{0xd6,0x8d,0x76,0x4d}, {0xdb,0x86,0x78,0x44}, {0xcc,0x9b,0x6a,0x5f}, {0xc1,0x90,0x64,0x56},
-{0xe2,0xa1,0x4e,0x69}, {0xef,0xaa,0x40,0x60}, {0xf8,0xb7,0x52,0x7b}, {0xf5,0xbc,0x5c,0x72},
-{0xbe,0xd5,0x06,0x05}, {0xb3,0xde,0x08,0x0c}, {0xa4,0xc3,0x1a,0x17}, {0xa9,0xc8,0x14,0x1e},
-{0x8a,0xf9,0x3e,0x21}, {0x87,0xf2,0x30,0x28}, {0x90,0xef,0x22,0x33}, {0x9d,0xe4,0x2c,0x3a},
-{0x06,0x3d,0x96,0xdd}, {0x0b,0x36,0x98,0xd4}, {0x1c,0x2b,0x8a,0xcf}, {0x11,0x20,0x84,0xc6},
-{0x32,0x11,0xae,0xf9}, {0x3f,0x1a,0xa0,0xf0}, {0x28,0x07,0xb2,0xeb}, {0x25,0x0c,0xbc,0xe2},
-{0x6e,0x65,0xe6,0x95}, {0x63,0x6e,0xe8,0x9c}, {0x74,0x73,0xfa,0x87}, {0x79,0x78,0xf4,0x8e},
-{0x5a,0x49,0xde,0xb1}, {0x57,0x42,0xd0,0xb8}, {0x40,0x5f,0xc2,0xa3}, {0x4d,0x54,0xcc,0xaa},
-{0xda,0xf7,0x41,0xec}, {0xd7,0xfc,0x4f,0xe5}, {0xc0,0xe1,0x5d,0xfe}, {0xcd,0xea,0x53,0xf7},
-{0xee,0xdb,0x79,0xc8}, {0xe3,0xd0,0x77,0xc1}, {0xf4,0xcd,0x65,0xda}, {0xf9,0xc6,0x6b,0xd3},
-{0xb2,0xaf,0x31,0xa4}, {0xbf,0xa4,0x3f,0xad}, {0xa8,0xb9,0x2d,0xb6}, {0xa5,0xb2,0x23,0xbf},
-{0x86,0x83,0x09,0x80}, {0x8b,0x88,0x07,0x89}, {0x9c,0x95,0x15,0x92}, {0x91,0x9e,0x1b,0x9b},
-{0x0a,0x47,0xa1,0x7c}, {0x07,0x4c,0xaf,0x75}, {0x10,0x51,0xbd,0x6e}, {0x1d,0x5a,0xb3,0x67},
-{0x3e,0x6b,0x99,0x58}, {0x33,0x60,0x97,0x51}, {0x24,0x7d,0x85,0x4a}, {0x29,0x76,0x8b,0x43},
-{0x62,0x1f,0xd1,0x34}, {0x6f,0x14,0xdf,0x3d}, {0x78,0x09,0xcd,0x26}, {0x75,0x02,0xc3,0x2f},
-{0x56,0x33,0xe9,0x10}, {0x5b,0x38,0xe7,0x19}, {0x4c,0x25,0xf5,0x02}, {0x41,0x2e,0xfb,0x0b},
-{0x61,0x8c,0x9a,0xd7}, {0x6c,0x87,0x94,0xde}, {0x7b,0x9a,0x86,0xc5}, {0x76,0x91,0x88,0xcc},
-{0x55,0xa0,0xa2,0xf3}, {0x58,0xab,0xac,0xfa}, {0x4f,0xb6,0xbe,0xe1}, {0x42,0xbd,0xb0,0xe8},
-{0x09,0xd4,0xea,0x9f}, {0x04,0xdf,0xe4,0x96}, {0x13,0xc2,0xf6,0x8d}, {0x1e,0xc9,0xf8,0x84},
-{0x3d,0xf8,0xd2,0xbb}, {0x30,0xf3,0xdc,0xb2}, {0x27,0xee,0xce,0xa9}, {0x2a,0xe5,0xc0,0xa0},
-{0xb1,0x3c,0x7a,0x47}, {0xbc,0x37,0x74,0x4e}, {0xab,0x2a,0x66,0x55}, {0xa6,0x21,0x68,0x5c},
-{0x85,0x10,0x42,0x63}, {0x88,0x1b,0x4c,0x6a}, {0x9f,0x06,0x5e,0x71}, {0x92,0x0d,0x50,0x78},
-{0xd9,0x64,0x0a,0x0f}, {0xd4,0x6f,0x04,0x06}, {0xc3,0x72,0x16,0x1d}, {0xce,0x79,0x18,0x14},
-{0xed,0x48,0x32,0x2b}, {0xe0,0x43,0x3c,0x22}, {0xf7,0x5e,0x2e,0x39}, {0xfa,0x55,0x20,0x30},
-{0xb7,0x01,0xec,0x9a}, {0xba,0x0a,0xe2,0x93}, {0xad,0x17,0xf0,0x88}, {0xa0,0x1c,0xfe,0x81},
-{0x83,0x2d,0xd4,0xbe}, {0x8e,0x26,0xda,0xb7}, {0x99,0x3b,0xc8,0xac}, {0x94,0x30,0xc6,0xa5},
-{0xdf,0x59,0x9c,0xd2}, {0xd2,0x52,0x92,0xdb}, {0xc5,0x4f,0x80,0xc0}, {0xc8,0x44,0x8e,0xc9},
-{0xeb,0x75,0xa4,0xf6}, {0xe6,0x7e,0xaa,0xff}, {0xf1,0x63,0xb8,0xe4}, {0xfc,0x68,0xb6,0xed},
-{0x67,0xb1,0x0c,0x0a}, {0x6a,0xba,0x02,0x03}, {0x7d,0xa7,0x10,0x18}, {0x70,0xac,0x1e,0x11},
-{0x53,0x9d,0x34,0x2e}, {0x5e,0x96,0x3a,0x27}, {0x49,0x8b,0x28,0x3c}, {0x44,0x80,0x26,0x35},
-{0x0f,0xe9,0x7c,0x42}, {0x02,0xe2,0x72,0x4b}, {0x15,0xff,0x60,0x50}, {0x18,0xf4,0x6e,0x59},
-{0x3b,0xc5,0x44,0x66}, {0x36,0xce,0x4a,0x6f}, {0x21,0xd3,0x58,0x74}, {0x2c,0xd8,0x56,0x7d},
-{0x0c,0x7a,0x37,0xa1}, {0x01,0x71,0x39,0xa8}, {0x16,0x6c,0x2b,0xb3}, {0x1b,0x67,0x25,0xba},
-{0x38,0x56,0x0f,0x85}, {0x35,0x5d,0x01,0x8c}, {0x22,0x40,0x13,0x97}, {0x2f,0x4b,0x1d,0x9e},
-{0x64,0x22,0x47,0xe9}, {0x69,0x29,0x49,0xe0}, {0x7e,0x34,0x5b,0xfb}, {0x73,0x3f,0x55,0xf2},
-{0x50,0x0e,0x7f,0xcd}, {0x5d,0x05,0x71,0xc4}, {0x4a,0x18,0x63,0xdf}, {0x47,0x13,0x6d,0xd6},
-{0xdc,0xca,0xd7,0x31}, {0xd1,0xc1,0xd9,0x38}, {0xc6,0xdc,0xcb,0x23}, {0xcb,0xd7,0xc5,0x2a},
-{0xe8,0xe6,0xef,0x15}, {0xe5,0xed,0xe1,0x1c}, {0xf2,0xf0,0xf3,0x07}, {0xff,0xfb,0xfd,0x0e},
-{0xb4,0x92,0xa7,0x79}, {0xb9,0x99,0xa9,0x70}, {0xae,0x84,0xbb,0x6b}, {0xa3,0x8f,0xb5,0x62},
-{0x80,0xbe,0x9f,0x5d}, {0x8d,0xb5,0x91,0x54}, {0x9a,0xa8,0x83,0x4f}, {0x97,0xa3,0x8d,0x46}
-	}
-};
-#define	U3	xU3.xt8
-
-static const union xtab xU4 = {
-	.xt8 = {
-{0x00,0x00,0x00,0x00}, {0x09,0x0d,0x0b,0x0e}, {0x12,0x1a,0x16,0x1c}, {0x1b,0x17,0x1d,0x12},
-{0x24,0x34,0x2c,0x38}, {0x2d,0x39,0x27,0x36}, {0x36,0x2e,0x3a,0x24}, {0x3f,0x23,0x31,0x2a},
-{0x48,0x68,0x58,0x70}, {0x41,0x65,0x53,0x7e}, {0x5a,0x72,0x4e,0x6c}, {0x53,0x7f,0x45,0x62},
-{0x6c,0x5c,0x74,0x48}, {0x65,0x51,0x7f,0x46}, {0x7e,0x46,0x62,0x54}, {0x77,0x4b,0x69,0x5a},
-{0x90,0xd0,0xb0,0xe0}, {0x99,0xdd,0xbb,0xee}, {0x82,0xca,0xa6,0xfc}, {0x8b,0xc7,0xad,0xf2},
-{0xb4,0xe4,0x9c,0xd8}, {0xbd,0xe9,0x97,0xd6}, {0xa6,0xfe,0x8a,0xc4}, {0xaf,0xf3,0x81,0xca},
-{0xd8,0xb8,0xe8,0x90}, {0xd1,0xb5,0xe3,0x9e}, {0xca,0xa2,0xfe,0x8c}, {0xc3,0xaf,0xf5,0x82},
-{0xfc,0x8c,0xc4,0xa8}, {0xf5,0x81,0xcf,0xa6}, {0xee,0x96,0xd2,0xb4}, {0xe7,0x9b,0xd9,0xba},
-{0x3b,0xbb,0x7b,0xdb}, {0x32,0xb6,0x70,0xd5}, {0x29,0xa1,0x6d,0xc7}, {0x20,0xac,0x66,0xc9},
-{0x1f,0x8f,0x57,0xe3}, {0x16,0x82,0x5c,0xed}, {0x0d,0x95,0x41,0xff}, {0x04,0x98,0x4a,0xf1},
-{0x73,0xd3,0x23,0xab}, {0x7a,0xde,0x28,0xa5}, {0x61,0xc9,0x35,0xb7}, {0x68,0xc4,0x3e,0xb9},
-{0x57,0xe7,0x0f,0x93}, {0x5e,0xea,0x04,0x9d}, {0x45,0xfd,0x19,0x8f}, {0x4c,0xf0,0x12,0x81},
-{0xab,0x6b,0xcb,0x3b}, {0xa2,0x66,0xc0,0x35}, {0xb9,0x71,0xdd,0x27}, {0xb0,0x7c,0xd6,0x29},
-{0x8f,0x5f,0xe7,0x03}, {0x86,0x52,0xec,0x0d}, {0x9d,0x45,0xf1,0x1f}, {0x94,0x48,0xfa,0x11},
-{0xe3,0x03,0x93,0x4b}, {0xea,0x0e,0x98,0x45}, {0xf1,0x19,0x85,0x57}, {0xf8,0x14,0x8e,0x59},
-{0xc7,0x37,0xbf,0x73}, {0xce,0x3a,0xb4,0x7d}, {0xd5,0x2d,0xa9,0x6f}, {0xdc,0x20,0xa2,0x61},
-{0x76,0x6d,0xf6,0xad}, {0x7f,0x60,0xfd,0xa3}, {0x64,0x77,0xe0,0xb1}, {0x6d,0x7a,0xeb,0xbf},
-{0x52,0x59,0xda,0x95}, {0x5b,0x54,0xd1,0x9b}, {0x40,0x43,0xcc,0x89}, {0x49,0x4e,0xc7,0x87},
-{0x3e,0x05,0xae,0xdd}, {0x37,0x08,0xa5,0xd3}, {0x2c,0x1f,0xb8,0xc1}, {0x25,0x12,0xb3,0xcf},
-{0x1a,0x31,0x82,0xe5}, {0x13,0x3c,0x89,0xeb}, {0x08,0x2b,0x94,0xf9}, {0x01,0x26,0x9f,0xf7},
-{0xe6,0xbd,0x46,0x4d}, {0xef,0xb0,0x4d,0x43}, {0xf4,0xa7,0x50,0x51}, {0xfd,0xaa,0x5b,0x5f},
-{0xc2,0x89,0x6a,0x75}, {0xcb,0x84,0x61,0x7b}, {0xd0,0x93,0x7c,0x69}, {0xd9,0x9e,0x77,0x67},
-{0xae,0xd5,0x1e,0x3d}, {0xa7,0xd8,0x15,0x33}, {0xbc,0xcf,0x08,0x21}, {0xb5,0xc2,0x03,0x2f},
-{0x8a,0xe1,0x32,0x05}, {0x83,0xec,0x39,0x0b}, {0x98,0xfb,0x24,0x19}, {0x91,0xf6,0x2f,0x17},
-{0x4d,0xd6,0x8d,0x76}, {0x44,0xdb,0x86,0x78}, {0x5f,0xcc,0x9b,0x6a}, {0x56,0xc1,0x90,0x64},
-{0x69,0xe2,0xa1,0x4e}, {0x60,0xef,0xaa,0x40}, {0x7b,0xf8,0xb7,0x52}, {0x72,0xf5,0xbc,0x5c},
-{0x05,0xbe,0xd5,0x06}, {0x0c,0xb3,0xde,0x08}, {0x17,0xa4,0xc3,0x1a}, {0x1e,0xa9,0xc8,0x14},
-{0x21,0x8a,0xf9,0x3e}, {0x28,0x87,0xf2,0x30}, {0x33,0x90,0xef,0x22}, {0x3a,0x9d,0xe4,0x2c},
-{0xdd,0x06,0x3d,0x96}, {0xd4,0x0b,0x36,0x98}, {0xcf,0x1c,0x2b,0x8a}, {0xc6,0x11,0x20,0x84},
-{0xf9,0x32,0x11,0xae}, {0xf0,0x3f,0x1a,0xa0}, {0xeb,0x28,0x07,0xb2}, {0xe2,0x25,0x0c,0xbc},
-{0x95,0x6e,0x65,0xe6}, {0x9c,0x63,0x6e,0xe8}, {0x87,0x74,0x73,0xfa}, {0x8e,0x79,0x78,0xf4},
-{0xb1,0x5a,0x49,0xde}, {0xb8,0x57,0x42,0xd0}, {0xa3,0x40,0x5f,0xc2}, {0xaa,0x4d,0x54,0xcc},
-{0xec,0xda,0xf7,0x41}, {0xe5,0xd7,0xfc,0x4f}, {0xfe,0xc0,0xe1,0x5d}, {0xf7,0xcd,0xea,0x53},
-{0xc8,0xee,0xdb,0x79}, {0xc1,0xe3,0xd0,0x77}, {0xda,0xf4,0xcd,0x65}, {0xd3,0xf9,0xc6,0x6b},
-{0xa4,0xb2,0xaf,0x31}, {0xad,0xbf,0xa4,0x3f}, {0xb6,0xa8,0xb9,0x2d}, {0xbf,0xa5,0xb2,0x23},
-{0x80,0x86,0x83,0x09}, {0x89,0x8b,0x88,0x07}, {0x92,0x9c,0x95,0x15}, {0x9b,0x91,0x9e,0x1b},
-{0x7c,0x0a,0x47,0xa1}, {0x75,0x07,0x4c,0xaf}, {0x6e,0x10,0x51,0xbd}, {0x67,0x1d,0x5a,0xb3},
-{0x58,0x3e,0x6b,0x99}, {0x51,0x33,0x60,0x97}, {0x4a,0x24,0x7d,0x85}, {0x43,0x29,0x76,0x8b},
-{0x34,0x62,0x1f,0xd1}, {0x3d,0x6f,0x14,0xdf}, {0x26,0x78,0x09,0xcd}, {0x2f,0x75,0x02,0xc3},
-{0x10,0x56,0x33,0xe9}, {0x19,0x5b,0x38,0xe7}, {0x02,0x4c,0x25,0xf5}, {0x0b,0x41,0x2e,0xfb},
-{0xd7,0x61,0x8c,0x9a}, {0xde,0x6c,0x87,0x94}, {0xc5,0x7b,0x9a,0x86}, {0xcc,0x76,0x91,0x88},
-{0xf3,0x55,0xa0,0xa2}, {0xfa,0x58,0xab,0xac}, {0xe1,0x4f,0xb6,0xbe}, {0xe8,0x42,0xbd,0xb0},
-{0x9f,0x09,0xd4,0xea}, {0x96,0x04,0xdf,0xe4}, {0x8d,0x13,0xc2,0xf6}, {0x84,0x1e,0xc9,0xf8},
-{0xbb,0x3d,0xf8,0xd2}, {0xb2,0x30,0xf3,0xdc}, {0xa9,0x27,0xee,0xce}, {0xa0,0x2a,0xe5,0xc0},
-{0x47,0xb1,0x3c,0x7a}, {0x4e,0xbc,0x37,0x74}, {0x55,0xab,0x2a,0x66}, {0x5c,0xa6,0x21,0x68},
-{0x63,0x85,0x10,0x42}, {0x6a,0x88,0x1b,0x4c}, {0x71,0x9f,0x06,0x5e}, {0x78,0x92,0x0d,0x50},
-{0x0f,0xd9,0x64,0x0a}, {0x06,0xd4,0x6f,0x04}, {0x1d,0xc3,0x72,0x16}, {0x14,0xce,0x79,0x18},
-{0x2b,0xed,0x48,0x32}, {0x22,0xe0,0x43,0x3c}, {0x39,0xf7,0x5e,0x2e}, {0x30,0xfa,0x55,0x20},
-{0x9a,0xb7,0x01,0xec}, {0x93,0xba,0x0a,0xe2}, {0x88,0xad,0x17,0xf0}, {0x81,0xa0,0x1c,0xfe},
-{0xbe,0x83,0x2d,0xd4}, {0xb7,0x8e,0x26,0xda}, {0xac,0x99,0x3b,0xc8}, {0xa5,0x94,0x30,0xc6},
-{0xd2,0xdf,0x59,0x9c}, {0xdb,0xd2,0x52,0x92}, {0xc0,0xc5,0x4f,0x80}, {0xc9,0xc8,0x44,0x8e},
-{0xf6,0xeb,0x75,0xa4}, {0xff,0xe6,0x7e,0xaa}, {0xe4,0xf1,0x63,0xb8}, {0xed,0xfc,0x68,0xb6},
-{0x0a,0x67,0xb1,0x0c}, {0x03,0x6a,0xba,0x02}, {0x18,0x7d,0xa7,0x10}, {0x11,0x70,0xac,0x1e},
-{0x2e,0x53,0x9d,0x34}, {0x27,0x5e,0x96,0x3a}, {0x3c,0x49,0x8b,0x28}, {0x35,0x44,0x80,0x26},
-{0x42,0x0f,0xe9,0x7c}, {0x4b,0x02,0xe2,0x72}, {0x50,0x15,0xff,0x60}, {0x59,0x18,0xf4,0x6e},
-{0x66,0x3b,0xc5,0x44}, {0x6f,0x36,0xce,0x4a}, {0x74,0x21,0xd3,0x58}, {0x7d,0x2c,0xd8,0x56},
-{0xa1,0x0c,0x7a,0x37}, {0xa8,0x01,0x71,0x39}, {0xb3,0x16,0x6c,0x2b}, {0xba,0x1b,0x67,0x25},
-{0x85,0x38,0x56,0x0f}, {0x8c,0x35,0x5d,0x01}, {0x97,0x22,0x40,0x13}, {0x9e,0x2f,0x4b,0x1d},
-{0xe9,0x64,0x22,0x47}, {0xe0,0x69,0x29,0x49}, {0xfb,0x7e,0x34,0x5b}, {0xf2,0x73,0x3f,0x55},
-{0xcd,0x50,0x0e,0x7f}, {0xc4,0x5d,0x05,0x71}, {0xdf,0x4a,0x18,0x63}, {0xd6,0x47,0x13,0x6d},
-{0x31,0xdc,0xca,0xd7}, {0x38,0xd1,0xc1,0xd9}, {0x23,0xc6,0xdc,0xcb}, {0x2a,0xcb,0xd7,0xc5},
-{0x15,0xe8,0xe6,0xef}, {0x1c,0xe5,0xed,0xe1}, {0x07,0xf2,0xf0,0xf3}, {0x0e,0xff,0xfb,0xfd},
-{0x79,0xb4,0x92,0xa7}, {0x70,0xb9,0x99,0xa9}, {0x6b,0xae,0x84,0xbb}, {0x62,0xa3,0x8f,0xb5},
-{0x5d,0x80,0xbe,0x9f}, {0x54,0x8d,0xb5,0x91}, {0x4f,0x9a,0xa8,0x83}, {0x46,0x97,0xa3,0x8d}
-	}
-};
-#define	U4	xU4.xt8
-
-static const word32 rcon[30] = { 
-  0x01,0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91
-};
diff --git a/src/racoon/missing/crypto/rijndael/rijndael-alg-fst.c b/src/racoon/missing/crypto/rijndael/rijndael-alg-fst.c
deleted file mode 100644
index 7e48d44..0000000
--- a/src/racoon/missing/crypto/rijndael/rijndael-alg-fst.c
+++ /dev/null
@@ -1,496 +0,0 @@
-/*	$NetBSD: rijndael-alg-fst.c,v 1.4 2006/09/09 16:22:36 manu Exp $	*/
-
-/*	$KAME: rijndael-alg-fst.c,v 1.1.1.1 2001/08/08 09:56:23 sakane Exp $	*/
-
-/*
- * rijndael-alg-fst.c   v2.3   April '2000
- *
- * Optimised ANSI C code
- *
- * authors: v1.0: Antoon Bosselaers
- *          v2.0: Vincent Rijmen
- *          v2.3: Paulo Barreto
- *
- * This code is placed in the public domain.
- */
-
-#include "config.h"
-
-#include <sys/cdefs.h>
-#include <sys/types.h>
-#ifdef _KERNEL
-#include <sys/systm.h>
-#else
-#include <string.h>
-#endif
-#include <crypto/rijndael/rijndael-alg-fst.h>
-#include <crypto/rijndael/rijndael_local.h>
-
-#include <crypto/rijndael/boxes-fst.dat>
-
-#include <err.h>
-#define bcopy(a, b, c) memcpy((b), (a), (c))
-#define bzero(a, b) memset((a), 0, (b))
-#define panic(a) err(1, (a))
-
-int rijndaelKeySched(word8 k[MAXKC][4], word8 W[MAXROUNDS+1][4][4], int ROUNDS) {
-	/* Calculate the necessary round keys
-	 * The number of calculations depends on keyBits and blockBits
-	 */ 
-	int j, r, t, rconpointer = 0;
-	union {
-		word8	x8[MAXKC][4];
-		word32	x32[MAXKC];
-	} xtk;
-#define	tk	xtk.x8
-	int KC = ROUNDS - 6;
-
-	for (j = KC-1; j >= 0; j--) {
-		*((word32*)tk[j]) = *((word32*)k[j]);
-	}
-	r = 0;
-	t = 0;
-	/* copy values into round key array */
-	for (j = 0; (j < KC) && (r < ROUNDS + 1); ) {
-		for (; (j < KC) && (t < 4); j++, t++) {
-			*((word32*)W[r][t]) = *((word32*)tk[j]);
-		}
-		if (t == 4) {
-			r++;
-			t = 0;
-		}
-	}
-		
-	while (r < ROUNDS + 1) { /* while not enough round key material calculated */
-		/* calculate new values */
-		tk[0][0] ^= S[tk[KC-1][1]];
-		tk[0][1] ^= S[tk[KC-1][2]];
-		tk[0][2] ^= S[tk[KC-1][3]];
-		tk[0][3] ^= S[tk[KC-1][0]];
-		tk[0][0] ^= rcon[rconpointer++];
-
-		if (KC != 8) {
-			for (j = 1; j < KC; j++) {
-				*((word32*)tk[j]) ^= *((word32*)tk[j-1]);
-			}
-		} else {
-			for (j = 1; j < KC/2; j++) {
-				*((word32*)tk[j]) ^= *((word32*)tk[j-1]);
-			}
-			tk[KC/2][0] ^= S[tk[KC/2 - 1][0]];
-			tk[KC/2][1] ^= S[tk[KC/2 - 1][1]];
-			tk[KC/2][2] ^= S[tk[KC/2 - 1][2]];
-			tk[KC/2][3] ^= S[tk[KC/2 - 1][3]];
-			for (j = KC/2 + 1; j < KC; j++) {
-				*((word32*)tk[j]) ^= *((word32*)tk[j-1]);
-			}
-		}
-		/* copy values into round key array */
-		for (j = 0; (j < KC) && (r < ROUNDS + 1); ) {
-			for (; (j < KC) && (t < 4); j++, t++) {
-				*((word32*)W[r][t]) = *((word32*)tk[j]);
-			}
-			if (t == 4) {
-				r++;
-				t = 0;
-			}
-		}
-	}		
-	return 0;
-#undef tk
-}
-
-int rijndaelKeyEncToDec(word8 W[MAXROUNDS+1][4][4], int ROUNDS) {
-	int r;
-	word8 *w;
-
-	for (r = 1; r < ROUNDS; r++) {
-		w = W[r][0];
-		*((word32*)w) =
-			  *((const word32*)U1[w[0]])
-			^ *((const word32*)U2[w[1]])
-			^ *((const word32*)U3[w[2]])
-			^ *((const word32*)U4[w[3]]);
-
-		w = W[r][1];
-		*((word32*)w) =
-			  *((const word32*)U1[w[0]])
-			^ *((const word32*)U2[w[1]])
-			^ *((const word32*)U3[w[2]])
-			^ *((const word32*)U4[w[3]]);
-
-		w = W[r][2];
-		*((word32*)w) =
-			  *((const word32*)U1[w[0]])
-			^ *((const word32*)U2[w[1]])
-			^ *((const word32*)U3[w[2]])
-			^ *((const word32*)U4[w[3]]);
-
-		w = W[r][3];
-		*((word32*)w) =
-			  *((const word32*)U1[w[0]])
-			^ *((const word32*)U2[w[1]])
-			^ *((const word32*)U3[w[2]])
-			^ *((const word32*)U4[w[3]]);
-	}
-	return 0;
-}	
-
-/**
- * Encrypt a single block. 
- */
-int rijndaelEncrypt(word8 in[16], word8 out[16], word8 rk[MAXROUNDS+1][4][4], int ROUNDS) {
-	int r;
-	union {
-		word8	x8[16];
-		word32	x32[4];
-	} xa, xb;
-#define	a	xa.x8
-#define	b	xb.x8
-	union {
-		word8	x8[4][4];
-		word32	x32[4];
-	} xtemp;
-#define	temp	xtemp.x8
-
-    memcpy(a, in, sizeof a);
-
-    *((word32*)temp[0]) = *((word32*)(a   )) ^ *((word32*)rk[0][0]);
-    *((word32*)temp[1]) = *((word32*)(a+ 4)) ^ *((word32*)rk[0][1]);
-    *((word32*)temp[2]) = *((word32*)(a+ 8)) ^ *((word32*)rk[0][2]);
-    *((word32*)temp[3]) = *((word32*)(a+12)) ^ *((word32*)rk[0][3]);
-    *((word32*)(b    )) = *((const word32*)T1[temp[0][0]])
-					^ *((const word32*)T2[temp[1][1]])
-					^ *((const word32*)T3[temp[2][2]]) 
-					^ *((const word32*)T4[temp[3][3]]);
-    *((word32*)(b + 4)) = *((const word32*)T1[temp[1][0]])
-					^ *((const word32*)T2[temp[2][1]])
-					^ *((const word32*)T3[temp[3][2]]) 
-					^ *((const word32*)T4[temp[0][3]]);
-    *((word32*)(b + 8)) = *((const word32*)T1[temp[2][0]])
-					^ *((const word32*)T2[temp[3][1]])
-					^ *((const word32*)T3[temp[0][2]]) 
-					^ *((const word32*)T4[temp[1][3]]);
-    *((word32*)(b +12)) = *((const word32*)T1[temp[3][0]])
-					^ *((const word32*)T2[temp[0][1]])
-					^ *((const word32*)T3[temp[1][2]]) 
-					^ *((const word32*)T4[temp[2][3]]);
-	for (r = 1; r < ROUNDS-1; r++) {
-		*((word32*)temp[0]) = *((word32*)(b   )) ^ *((word32*)rk[r][0]);
-		*((word32*)temp[1]) = *((word32*)(b+ 4)) ^ *((word32*)rk[r][1]);
-		*((word32*)temp[2]) = *((word32*)(b+ 8)) ^ *((word32*)rk[r][2]);
-		*((word32*)temp[3]) = *((word32*)(b+12)) ^ *((word32*)rk[r][3]);
-
-		*((word32*)(b    )) = *((const word32*)T1[temp[0][0]])
-					^ *((const word32*)T2[temp[1][1]])
-					^ *((const word32*)T3[temp[2][2]]) 
-					^ *((const word32*)T4[temp[3][3]]);
-		*((word32*)(b + 4)) = *((const word32*)T1[temp[1][0]])
-					^ *((const word32*)T2[temp[2][1]])
-					^ *((const word32*)T3[temp[3][2]]) 
-					^ *((const word32*)T4[temp[0][3]]);
-		*((word32*)(b + 8)) = *((const word32*)T1[temp[2][0]])
-					^ *((const word32*)T2[temp[3][1]])
-					^ *((const word32*)T3[temp[0][2]]) 
-					^ *((const word32*)T4[temp[1][3]]);
-		*((word32*)(b +12)) = *((const word32*)T1[temp[3][0]])
-					^ *((const word32*)T2[temp[0][1]])
-					^ *((const word32*)T3[temp[1][2]]) 
-					^ *((const word32*)T4[temp[2][3]]);
-	}
-	/* last round is special */   
-	*((word32*)temp[0]) = *((word32*)(b   )) ^ *((word32*)rk[ROUNDS-1][0]);
-	*((word32*)temp[1]) = *((word32*)(b+ 4)) ^ *((word32*)rk[ROUNDS-1][1]);
-	*((word32*)temp[2]) = *((word32*)(b+ 8)) ^ *((word32*)rk[ROUNDS-1][2]);
-	*((word32*)temp[3]) = *((word32*)(b+12)) ^ *((word32*)rk[ROUNDS-1][3]);
-	b[ 0] = T1[temp[0][0]][1];
-	b[ 1] = T1[temp[1][1]][1];
-	b[ 2] = T1[temp[2][2]][1];
-	b[ 3] = T1[temp[3][3]][1];
-	b[ 4] = T1[temp[1][0]][1];
-	b[ 5] = T1[temp[2][1]][1];
-	b[ 6] = T1[temp[3][2]][1];
-	b[ 7] = T1[temp[0][3]][1];
-	b[ 8] = T1[temp[2][0]][1];
-	b[ 9] = T1[temp[3][1]][1];
-	b[10] = T1[temp[0][2]][1];
-	b[11] = T1[temp[1][3]][1];
-	b[12] = T1[temp[3][0]][1];
-	b[13] = T1[temp[0][1]][1];
-	b[14] = T1[temp[1][2]][1];
-	b[15] = T1[temp[2][3]][1];
-	*((word32*)(b   )) ^= *((word32*)rk[ROUNDS][0]);
-	*((word32*)(b+ 4)) ^= *((word32*)rk[ROUNDS][1]);
-	*((word32*)(b+ 8)) ^= *((word32*)rk[ROUNDS][2]);
-	*((word32*)(b+12)) ^= *((word32*)rk[ROUNDS][3]);
-
-	memcpy(out, b, sizeof b /* XXX out */);
-
-	return 0;
-#undef a
-#undef b
-#undef temp
-}
-
-#ifdef INTERMEDIATE_VALUE_KAT
-/**
- * Encrypt only a certain number of rounds.
- * Only used in the Intermediate Value Known Answer Test.
- */
-int rijndaelEncryptRound(word8 a[4][4], word8 rk[MAXROUNDS+1][4][4], int ROUNDS, int rounds) {
-	int r;
-	word8 temp[4][4];
-
-	/* make number of rounds sane */
-	if (rounds > ROUNDS) {
-		rounds = ROUNDS;
-	}
-
-	*((word32*)a[0]) = *((word32*)a[0]) ^ *((word32*)rk[0][0]);
-	*((word32*)a[1]) = *((word32*)a[1]) ^ *((word32*)rk[0][1]);
-	*((word32*)a[2]) = *((word32*)a[2]) ^ *((word32*)rk[0][2]);
-	*((word32*)a[3]) = *((word32*)a[3]) ^ *((word32*)rk[0][3]);
-
-	for (r = 1; (r <= rounds) && (r < ROUNDS); r++) {
-		*((word32*)temp[0]) = *((const word32*)T1[a[0][0]])
-					   ^ *((const word32*)T2[a[1][1]])
-					   ^ *((const word32*)T3[a[2][2]]) 
-					   ^ *((const word32*)T4[a[3][3]]);
-		*((word32*)temp[1]) = *((const word32*)T1[a[1][0]])
-					   ^ *((const word32*)T2[a[2][1]])
-					   ^ *((const word32*)T3[a[3][2]]) 
-					   ^ *((const word32*)T4[a[0][3]]);
-		*((word32*)temp[2]) = *((const word32*)T1[a[2][0]])
-					   ^ *((const word32*)T2[a[3][1]])
-					   ^ *((const word32*)T3[a[0][2]]) 
-					   ^ *((const word32*)T4[a[1][3]]);
-		*((word32*)temp[3]) = *((const word32*)T1[a[3][0]])
-					   ^ *((const word32*)T2[a[0][1]])
-					   ^ *((const word32*)T3[a[1][2]]) 
-					   ^ *((const word32*)T4[a[2][3]]);
-		*((word32*)a[0]) = *((word32*)temp[0]) ^ *((word32*)rk[r][0]);
-		*((word32*)a[1]) = *((word32*)temp[1]) ^ *((word32*)rk[r][1]);
-		*((word32*)a[2]) = *((word32*)temp[2]) ^ *((word32*)rk[r][2]);
-		*((word32*)a[3]) = *((word32*)temp[3]) ^ *((word32*)rk[r][3]);
-	}
-	if (rounds == ROUNDS) {
-	   	/* last round is special */   
-	   	temp[0][0] = T1[a[0][0]][1];
-	   	temp[0][1] = T1[a[1][1]][1];
-	   	temp[0][2] = T1[a[2][2]][1]; 
-	   	temp[0][3] = T1[a[3][3]][1];
-	   	temp[1][0] = T1[a[1][0]][1];
-	   	temp[1][1] = T1[a[2][1]][1];
-	   	temp[1][2] = T1[a[3][2]][1]; 
-	   	temp[1][3] = T1[a[0][3]][1];
-	   	temp[2][0] = T1[a[2][0]][1];
-	   	temp[2][1] = T1[a[3][1]][1];
-	   	temp[2][2] = T1[a[0][2]][1]; 
-	   	temp[2][3] = T1[a[1][3]][1];
-	   	temp[3][0] = T1[a[3][0]][1];
-	   	temp[3][1] = T1[a[0][1]][1];
-	   	temp[3][2] = T1[a[1][2]][1]; 
-	   	temp[3][3] = T1[a[2][3]][1];
-		*((word32*)a[0]) = *((word32*)temp[0]) ^ *((word32*)rk[ROUNDS][0]);
-		*((word32*)a[1]) = *((word32*)temp[1]) ^ *((word32*)rk[ROUNDS][1]);
-		*((word32*)a[2]) = *((word32*)temp[2]) ^ *((word32*)rk[ROUNDS][2]);
-		*((word32*)a[3]) = *((word32*)temp[3]) ^ *((word32*)rk[ROUNDS][3]);
-	}
-
-	return 0;
-}   
-#endif /* INTERMEDIATE_VALUE_KAT */
-
-/**
- * Decrypt a single block.
- */
-int rijndaelDecrypt(word8 in[16], word8 out[16], word8 rk[MAXROUNDS+1][4][4], int ROUNDS) {
-	int r;
-	union {
-		word8	x8[16];
-		word32	x32[4];
-	} xa, xb;
-#define	a	xa.x8
-#define	b	xb.x8
-	union {
-		word8	x8[4][4];
-		word32	x32[4];
-	} xtemp;
-#define	temp	xtemp.x8
-	
-    memcpy(a, in, sizeof a);
-
-    *((word32*)temp[0]) = *((word32*)(a   )) ^ *((word32*)rk[ROUNDS][0]);
-    *((word32*)temp[1]) = *((word32*)(a+ 4)) ^ *((word32*)rk[ROUNDS][1]);
-    *((word32*)temp[2]) = *((word32*)(a+ 8)) ^ *((word32*)rk[ROUNDS][2]);
-    *((word32*)temp[3]) = *((word32*)(a+12)) ^ *((word32*)rk[ROUNDS][3]);
-
-    *((word32*)(b   )) = *((const word32*)T5[temp[0][0]])
-           ^ *((const word32*)T6[temp[3][1]])
-           ^ *((const word32*)T7[temp[2][2]]) 
-           ^ *((const word32*)T8[temp[1][3]]);
-	*((word32*)(b+ 4)) = *((const word32*)T5[temp[1][0]])
-           ^ *((const word32*)T6[temp[0][1]])
-           ^ *((const word32*)T7[temp[3][2]]) 
-           ^ *((const word32*)T8[temp[2][3]]);
-	*((word32*)(b+ 8)) = *((const word32*)T5[temp[2][0]])
-           ^ *((const word32*)T6[temp[1][1]])
-           ^ *((const word32*)T7[temp[0][2]]) 
-           ^ *((const word32*)T8[temp[3][3]]);
-	*((word32*)(b+12)) = *((const word32*)T5[temp[3][0]])
-           ^ *((const word32*)T6[temp[2][1]])
-           ^ *((const word32*)T7[temp[1][2]]) 
-           ^ *((const word32*)T8[temp[0][3]]);
-	for (r = ROUNDS-1; r > 1; r--) {
-		*((word32*)temp[0]) = *((word32*)(b   )) ^ *((word32*)rk[r][0]);
-		*((word32*)temp[1]) = *((word32*)(b+ 4)) ^ *((word32*)rk[r][1]);
-		*((word32*)temp[2]) = *((word32*)(b+ 8)) ^ *((word32*)rk[r][2]);
-		*((word32*)temp[3]) = *((word32*)(b+12)) ^ *((word32*)rk[r][3]);
-		*((word32*)(b   )) = *((const word32*)T5[temp[0][0]])
-		   ^ *((const word32*)T6[temp[3][1]])
-		   ^ *((const word32*)T7[temp[2][2]]) 
-		   ^ *((const word32*)T8[temp[1][3]]);
-		*((word32*)(b+ 4)) = *((const word32*)T5[temp[1][0]])
-		   ^ *((const word32*)T6[temp[0][1]])
-		   ^ *((const word32*)T7[temp[3][2]]) 
-		   ^ *((const word32*)T8[temp[2][3]]);
-		*((word32*)(b+ 8)) = *((const word32*)T5[temp[2][0]])
-		   ^ *((const word32*)T6[temp[1][1]])
-		   ^ *((const word32*)T7[temp[0][2]]) 
-		   ^ *((const word32*)T8[temp[3][3]]);
-		*((word32*)(b+12)) = *((const word32*)T5[temp[3][0]])
-		   ^ *((const word32*)T6[temp[2][1]])
-		   ^ *((const word32*)T7[temp[1][2]]) 
-		   ^ *((const word32*)T8[temp[0][3]]);
-	}
-	/* last round is special */   
-	*((word32*)temp[0]) = *((word32*)(b   )) ^ *((word32*)rk[1][0]);
-	*((word32*)temp[1]) = *((word32*)(b+ 4)) ^ *((word32*)rk[1][1]);
-	*((word32*)temp[2]) = *((word32*)(b+ 8)) ^ *((word32*)rk[1][2]);
-	*((word32*)temp[3]) = *((word32*)(b+12)) ^ *((word32*)rk[1][3]);
-	b[ 0] = S5[temp[0][0]];
-	b[ 1] = S5[temp[3][1]];
-	b[ 2] = S5[temp[2][2]];
-	b[ 3] = S5[temp[1][3]];
-	b[ 4] = S5[temp[1][0]];
-	b[ 5] = S5[temp[0][1]];
-	b[ 6] = S5[temp[3][2]];
-	b[ 7] = S5[temp[2][3]];
-	b[ 8] = S5[temp[2][0]];
-	b[ 9] = S5[temp[1][1]];
-	b[10] = S5[temp[0][2]];
-	b[11] = S5[temp[3][3]];
-	b[12] = S5[temp[3][0]];
-	b[13] = S5[temp[2][1]];
-	b[14] = S5[temp[1][2]];
-	b[15] = S5[temp[0][3]];
-	*((word32*)(b   )) ^= *((word32*)rk[0][0]);
-	*((word32*)(b+ 4)) ^= *((word32*)rk[0][1]);
-	*((word32*)(b+ 8)) ^= *((word32*)rk[0][2]);
-	*((word32*)(b+12)) ^= *((word32*)rk[0][3]);
-
-	memcpy(out, b, sizeof b /* XXX out */);
-
-	return 0;
-#undef a
-#undef b
-#undef temp
-}
-
-
-#ifdef INTERMEDIATE_VALUE_KAT
-/**
- * Decrypt only a certain number of rounds.
- * Only used in the Intermediate Value Known Answer Test.
- * Operations rearranged such that the intermediate values
- * of decryption correspond with the intermediate values
- * of encryption.
- */
-int rijndaelDecryptRound(word8 a[4][4], word8 rk[MAXROUNDS+1][4][4], int ROUNDS, int rounds) {
-	int r, i;
-	word8 temp[4], shift;
-
-	/* make number of rounds sane */
-	if (rounds > ROUNDS) {
-		rounds = ROUNDS;
-	}
-    /* first round is special: */
-	*(word32 *)a[0] ^= *(word32 *)rk[ROUNDS][0];
-	*(word32 *)a[1] ^= *(word32 *)rk[ROUNDS][1];
-	*(word32 *)a[2] ^= *(word32 *)rk[ROUNDS][2];
-	*(word32 *)a[3] ^= *(word32 *)rk[ROUNDS][3];
-	for (i = 0; i < 4; i++) {
-		a[i][0] = Si[a[i][0]];
-		a[i][1] = Si[a[i][1]];
-		a[i][2] = Si[a[i][2]];
-		a[i][3] = Si[a[i][3]];
-	}
-	for (i = 1; i < 4; i++) {
-		shift = (4 - i) & 3;
-		temp[0] = a[(0 + shift) & 3][i];
-		temp[1] = a[(1 + shift) & 3][i];
-		temp[2] = a[(2 + shift) & 3][i];
-		temp[3] = a[(3 + shift) & 3][i];
-		a[0][i] = temp[0];
-		a[1][i] = temp[1];
-		a[2][i] = temp[2];
-		a[3][i] = temp[3];
-	}
-	/* ROUNDS-1 ordinary rounds */
-	for (r = ROUNDS-1; r > rounds; r--) {
-		*(word32 *)a[0] ^= *(word32 *)rk[r][0];
-		*(word32 *)a[1] ^= *(word32 *)rk[r][1];
-		*(word32 *)a[2] ^= *(word32 *)rk[r][2];
-		*(word32 *)a[3] ^= *(word32 *)rk[r][3];
-
-		*((word32*)a[0]) =
-			  *((const word32*)U1[a[0][0]])
-			^ *((const word32*)U2[a[0][1]])
-			^ *((const word32*)U3[a[0][2]])
-			^ *((const word32*)U4[a[0][3]]);
-
-		*((word32*)a[1]) =
-			  *((const word32*)U1[a[1][0]])
-			^ *((const word32*)U2[a[1][1]])
-			^ *((const word32*)U3[a[1][2]])
-			^ *((const word32*)U4[a[1][3]]);
-
-		*((word32*)a[2]) =
-			  *((const word32*)U1[a[2][0]])
-			^ *((const word32*)U2[a[2][1]])
-			^ *((const word32*)U3[a[2][2]])
-			^ *((const word32*)U4[a[2][3]]);
-
-		*((word32*)a[3]) =
-			  *((const word32*)U1[a[3][0]])
-			^ *((const word32*)U2[a[3][1]])
-			^ *((const word32*)U3[a[3][2]])
-			^ *((const word32*)U4[a[3][3]]);
-		for (i = 0; i < 4; i++) {
-			a[i][0] = Si[a[i][0]];
-			a[i][1] = Si[a[i][1]];
-			a[i][2] = Si[a[i][2]];
-			a[i][3] = Si[a[i][3]];
-		}
-		for (i = 1; i < 4; i++) {
-			shift = (4 - i) & 3;
-			temp[0] = a[(0 + shift) & 3][i];
-			temp[1] = a[(1 + shift) & 3][i];
-			temp[2] = a[(2 + shift) & 3][i];
-			temp[3] = a[(3 + shift) & 3][i];
-			a[0][i] = temp[0];
-			a[1][i] = temp[1];
-			a[2][i] = temp[2];
-			a[3][i] = temp[3];
-		}
-	}
-	if (rounds == 0) {
-		/* End with the extra key addition */	
-		*(word32 *)a[0] ^= *(word32 *)rk[0][0];
-		*(word32 *)a[1] ^= *(word32 *)rk[0][1];
-		*(word32 *)a[2] ^= *(word32 *)rk[0][2];
-		*(word32 *)a[3] ^= *(word32 *)rk[0][3];
-	}    
-	return 0;
-}
-#endif /* INTERMEDIATE_VALUE_KAT */
diff --git a/src/racoon/missing/crypto/rijndael/rijndael-alg-fst.h b/src/racoon/missing/crypto/rijndael/rijndael-alg-fst.h
deleted file mode 100644
index 4afeca1..0000000
--- a/src/racoon/missing/crypto/rijndael/rijndael-alg-fst.h
+++ /dev/null
@@ -1,35 +0,0 @@
-/*	$NetBSD: rijndael-alg-fst.h,v 1.4 2006/09/09 16:22:36 manu Exp $	*/
-
-/*	$KAME: rijndael-alg-fst.h,v 1.1.1.1 2001/08/08 09:56:23 sakane Exp $	*/
-
-/*
- * rijndael-alg-fst.h   v2.3   April '2000
- *
- * Optimised ANSI C code
- *
- * #define INTERMEDIATE_VALUE_KAT to generate the Intermediate Value Known Answer Test.
- */
-
-#ifndef __RIJNDAEL_ALG_FST_H
-#define __RIJNDAEL_ALG_FST_H
-
-#define RIJNDAEL_MAXKC			(256/32)
-#define RIJNDAEL_MAXROUNDS		14
-
-int rijndaelKeySched(u_int8_t k[RIJNDAEL_MAXKC][4], u_int8_t rk[RIJNDAEL_MAXROUNDS+1][4][4], int ROUNDS);
-
-int rijndaelKeyEncToDec(u_int8_t W[RIJNDAEL_MAXROUNDS+1][4][4], int ROUNDS);
-
-int rijndaelEncrypt(u_int8_t a[16], u_int8_t b[16], u_int8_t rk[RIJNDAEL_MAXROUNDS+1][4][4], int ROUNDS);
-
-#ifdef INTERMEDIATE_VALUE_KAT
-int rijndaelEncryptRound(u_int8_t a[4][4], u_int8_t rk[RIJNDAEL_MAXROUNDS+1][4][4], int ROUNDS, int rounds);
-#endif /* INTERMEDIATE_VALUE_KAT */
-
-int rijndaelDecrypt(u_int8_t a[16], u_int8_t b[16], u_int8_t rk[RIJNDAEL_MAXROUNDS+1][4][4], int ROUNDS);
-
-#ifdef INTERMEDIATE_VALUE_KAT
-int rijndaelDecryptRound(u_int8_t a[4][4], u_int8_t rk[RIJNDAEL_MAXROUNDS+1][4][4], int ROUNDS, int rounds);
-#endif /* INTERMEDIATE_VALUE_KAT */
-
-#endif /* __RIJNDAEL_ALG_FST_H */
diff --git a/src/racoon/missing/crypto/rijndael/rijndael-api-fst.c b/src/racoon/missing/crypto/rijndael/rijndael-api-fst.c
deleted file mode 100644
index 9b6f5fe..0000000
--- a/src/racoon/missing/crypto/rijndael/rijndael-api-fst.c
+++ /dev/null
@@ -1,494 +0,0 @@
-/*	$NetBSD: rijndael-api-fst.c,v 1.4 2006/09/09 16:22:36 manu Exp $	*/
-
-/*	$KAME: rijndael-api-fst.c,v 1.8 2002/11/18 23:32:54 itojun Exp $	*/
-
-/*
- * rijndael-api-fst.c   v2.3   April '2000
- *
- * Optimised ANSI C code
- *
- * authors: v1.0: Antoon Bosselaers
- *          v2.0: Vincent Rijmen
- *          v2.1: Vincent Rijmen
- *          v2.2: Vincent Rijmen
- *          v2.3: Paulo Barreto
- *          v2.4: Vincent Rijmen
- *
- * This code is placed in the public domain.
- */
-
-#include "config.h"
-
-#include <sys/param.h>
-#include <sys/types.h>
-#ifdef _KERNEL
-#include <sys/time.h>
-#include <sys/systm.h>
-#else
-#include <string.h>
-#endif
-#include <crypto/rijndael/rijndael-alg-fst.h>
-#include <crypto/rijndael/rijndael-api-fst.h>
-#include <crypto/rijndael/rijndael_local.h>
-
-#include <err.h>
-#define bcopy(a, b, c) memcpy(b, a, c)
-#define bzero(a, b) memset(a, 0, b)
-#define panic(a) err(1, (a))
-
-int rijndael_makeKey(keyInstance *key, BYTE direction, int keyLen, char *keyMaterial) {
-	word8 k[MAXKC][4];
-	int i;
-	char *keyMat;
-	
-	if (key == NULL) {
-		return BAD_KEY_INSTANCE;
-	}
-
-	if ((direction == DIR_ENCRYPT) || (direction == DIR_DECRYPT)) {
-		key->direction = direction;
-	} else {
-		return BAD_KEY_DIR;
-	}
-
-	if ((keyLen == 128) || (keyLen == 192) || (keyLen == 256)) { 
-		key->keyLen = keyLen;
-	} else {
-		return BAD_KEY_MAT;
-	}
-
-	if (keyMaterial != NULL) {
-		bcopy(keyMaterial, key->keyMaterial, keyLen/8);
-	}
-
-	key->ROUNDS = keyLen/32 + 6;
-
-	/* initialize key schedule: */
-	keyMat = key->keyMaterial;
-	for (i = 0; i < key->keyLen/8; i++) {
-		k[i >> 2][i & 3] = (word8)keyMat[i]; 
-	}
-	rijndaelKeySched(k, key->keySched, key->ROUNDS);
-	if (direction == DIR_DECRYPT) {
-		rijndaelKeyEncToDec(key->keySched, key->ROUNDS);
-	}
-
-	return TRUE;
-}
-
-int rijndael_cipherInit(cipherInstance *cipher, BYTE mode, char *IV) {
-	if ((mode == MODE_ECB) || (mode == MODE_CBC) || (mode == MODE_CFB1)) {
-		cipher->mode = mode;
-	} else {
-		return BAD_CIPHER_MODE;
-	}
-	if (IV != NULL) {
-		bcopy(IV, cipher->IV, MAX_IV_SIZE);
-	} else {
-		bzero(cipher->IV, MAX_IV_SIZE);
-	}
-	return TRUE;
-}
-
-int rijndael_blockEncrypt(cipherInstance *cipher, keyInstance *key,
-		BYTE *input, int inputLen, BYTE *outBuffer) {
-	int i, k, numBlocks;
-	word8 block[16], iv[4][4];
-
-	if (cipher == NULL ||
-		key == NULL ||
-		key->direction == DIR_DECRYPT) {
-		return BAD_CIPHER_STATE;
-	}
-	if (input == NULL || inputLen <= 0) {
-		return 0; /* nothing to do */
-	}
-
-	numBlocks = inputLen/128;
-	
-	switch (cipher->mode) {
-	case MODE_ECB: 
-		for (i = numBlocks; i > 0; i--) {
-			rijndaelEncrypt(input, outBuffer, key->keySched, key->ROUNDS);
-			input += 16;
-			outBuffer += 16;
-		}
-		break;
-		
-	case MODE_CBC:
-#if 1 /*STRICT_ALIGN*/
-		bcopy(cipher->IV, block, 16);
-		bcopy(input, iv, 16);
-		((word32*)block)[0] ^= ((word32*)iv)[0];
-		((word32*)block)[1] ^= ((word32*)iv)[1];
-		((word32*)block)[2] ^= ((word32*)iv)[2];
-		((word32*)block)[3] ^= ((word32*)iv)[3];
-#else
-		((word32*)block)[0] = ((word32*)cipher->IV)[0] ^ ((word32*)input)[0];
-		((word32*)block)[1] = ((word32*)cipher->IV)[1] ^ ((word32*)input)[1];
-		((word32*)block)[2] = ((word32*)cipher->IV)[2] ^ ((word32*)input)[2];
-		((word32*)block)[3] = ((word32*)cipher->IV)[3] ^ ((word32*)input)[3];
-#endif
-		rijndaelEncrypt(block, outBuffer, key->keySched, key->ROUNDS);
-		input += 16;
-		for (i = numBlocks - 1; i > 0; i--) {
-#if 1 /*STRICT_ALIGN*/
-			bcopy(outBuffer, block, 16);
-			bcopy(input, iv, 16);
-			((word32*)block)[0] ^= ((word32*)iv)[0];
-			((word32*)block)[1] ^= ((word32*)iv)[1];
-			((word32*)block)[2] ^= ((word32*)iv)[2];
-			((word32*)block)[3] ^= ((word32*)iv)[3];
-#else
-			((word32*)block)[0] = ((word32*)outBuffer)[0] ^ ((word32*)input)[0];
-			((word32*)block)[1] = ((word32*)outBuffer)[1] ^ ((word32*)input)[1];
-			((word32*)block)[2] = ((word32*)outBuffer)[2] ^ ((word32*)input)[2];
-			((word32*)block)[3] = ((word32*)outBuffer)[3] ^ ((word32*)input)[3];
-#endif
-			outBuffer += 16;
-			rijndaelEncrypt(block, outBuffer, key->keySched, key->ROUNDS);
-			input += 16;
-		}
-		break;
-	
-	case MODE_CFB1:
-#if 1 /*STRICT_ALIGN*/
-		bcopy(cipher->IV, iv, 16); 
-#else  /* !STRICT_ALIGN */
-		*((word32*)iv[0]) = *((word32*)(cipher->IV   ));
-		*((word32*)iv[1]) = *((word32*)(cipher->IV+ 4));
-		*((word32*)iv[2]) = *((word32*)(cipher->IV+ 8));
-		*((word32*)iv[3]) = *((word32*)(cipher->IV+12));
-#endif /* ?STRICT_ALIGN */
-		for (i = numBlocks; i > 0; i--) {
-			for (k = 0; k < 128; k++) {
-				*((word32*) block    ) = *((word32*)iv[0]);
-				*((word32*)(block+ 4)) = *((word32*)iv[1]);
-				*((word32*)(block+ 8)) = *((word32*)iv[2]);
-				*((word32*)(block+12)) = *((word32*)iv[3]);
-				rijndaelEncrypt(block, block, key->keySched, key->ROUNDS);
-				outBuffer[k/8] ^= (block[0] & 0x80) >> (k & 7);
-				iv[0][0] = (iv[0][0] << 1) | (iv[0][1] >> 7);
-				iv[0][1] = (iv[0][1] << 1) | (iv[0][2] >> 7);
-				iv[0][2] = (iv[0][2] << 1) | (iv[0][3] >> 7);
-				iv[0][3] = (iv[0][3] << 1) | (iv[1][0] >> 7);
-				iv[1][0] = (iv[1][0] << 1) | (iv[1][1] >> 7);
-				iv[1][1] = (iv[1][1] << 1) | (iv[1][2] >> 7);
-				iv[1][2] = (iv[1][2] << 1) | (iv[1][3] >> 7);
-				iv[1][3] = (iv[1][3] << 1) | (iv[2][0] >> 7);
-				iv[2][0] = (iv[2][0] << 1) | (iv[2][1] >> 7);
-				iv[2][1] = (iv[2][1] << 1) | (iv[2][2] >> 7);
-				iv[2][2] = (iv[2][2] << 1) | (iv[2][3] >> 7);
-				iv[2][3] = (iv[2][3] << 1) | (iv[3][0] >> 7);
-				iv[3][0] = (iv[3][0] << 1) | (iv[3][1] >> 7);
-				iv[3][1] = (iv[3][1] << 1) | (iv[3][2] >> 7);
-				iv[3][2] = (iv[3][2] << 1) | (iv[3][3] >> 7);
-				iv[3][3] = (iv[3][3] << 1) | ((outBuffer[k/8] >> (7-(k&7))) & 1);
-			}
-		}
-		break;
-	
-	default:
-		return BAD_CIPHER_STATE;
-	}
-	
-	return 128*numBlocks;
-}
-
-/**
- * Encrypt data partitioned in octets, using RFC 2040-like padding.
- *
- * @param   input           data to be encrypted (octet sequence)
- * @param   inputOctets		input length in octets (not bits)
- * @param   outBuffer       encrypted output data
- *
- * @return	length in octets (not bits) of the encrypted output buffer.
- */
-int rijndael_padEncrypt(cipherInstance *cipher, keyInstance *key,
-		BYTE *input, int inputOctets, BYTE *outBuffer) {
-	int i, numBlocks, padLen;
-	word8 block[16], *iv, *cp;
-
-	if (cipher == NULL ||
-		key == NULL ||
-		key->direction == DIR_DECRYPT) {
-		return BAD_CIPHER_STATE;
-	}
-	if (input == NULL || inputOctets <= 0) {
-		return 0; /* nothing to do */
-	}
-
-	numBlocks = inputOctets/16;
-
-	switch (cipher->mode) {
-	case MODE_ECB: 
-		for (i = numBlocks; i > 0; i--) {
-			rijndaelEncrypt(input, outBuffer, key->keySched, key->ROUNDS);
-			input += 16;
-			outBuffer += 16;
-		}
-		padLen = 16 - (inputOctets - 16*numBlocks);
-		if (padLen <= 0 || padLen > 16)
-			panic("rijndael_padEncrypt(ECB)");
-		bcopy(input, block, 16 - padLen);
-		for (cp = block + 16 - padLen; cp < block + 16; cp++)
-			*cp = padLen;
-		rijndaelEncrypt(block, outBuffer, key->keySched, key->ROUNDS);
-		break;
-
-	case MODE_CBC:
-		iv = cipher->IV;
-		for (i = numBlocks; i > 0; i--) {
-			((word32*)block)[0] = ((word32*)input)[0] ^ ((word32*)iv)[0];
-			((word32*)block)[1] = ((word32*)input)[1] ^ ((word32*)iv)[1];
-			((word32*)block)[2] = ((word32*)input)[2] ^ ((word32*)iv)[2];
-			((word32*)block)[3] = ((word32*)input)[3] ^ ((word32*)iv)[3];
-			rijndaelEncrypt(block, outBuffer, key->keySched, key->ROUNDS);
-			iv = outBuffer;
-			input += 16;
-			outBuffer += 16;
-		}
-		padLen = 16 - (inputOctets - 16*numBlocks);
-		if (padLen <= 0 || padLen > 16)
-			panic("rijndael_padEncrypt(CBC)");
-		for (i = 0; i < 16 - padLen; i++) {
-			block[i] = input[i] ^ iv[i];
-		}
-		for (i = 16 - padLen; i < 16; i++) {
-			block[i] = (BYTE)padLen ^ iv[i];
-		}
-		rijndaelEncrypt(block, outBuffer, key->keySched, key->ROUNDS);
-		break;
-
-	default:
-		return BAD_CIPHER_STATE;
-	}
-
-	return 16*(numBlocks + 1);
-}
-
-int rijndael_blockDecrypt(cipherInstance *cipher, keyInstance *key,
-		BYTE *input, int inputLen, BYTE *outBuffer) {
-	int i, k, numBlocks;
-	word8 block[16], iv[4][4];
-
-	if (cipher == NULL ||
-		key == NULL ||
-		(cipher->mode != MODE_CFB1 && key->direction == DIR_ENCRYPT)) {
-		return BAD_CIPHER_STATE;
-	}
-	if (input == NULL || inputLen <= 0) {
-		return 0; /* nothing to do */
-	}
-
-	numBlocks = inputLen/128;
-
-	switch (cipher->mode) {
-	case MODE_ECB: 
-		for (i = numBlocks; i > 0; i--) { 
-			rijndaelDecrypt(input, outBuffer, key->keySched, key->ROUNDS);
-			input += 16;
-			outBuffer += 16;
-		}
-		break;
-		
-	case MODE_CBC:
-#if 1 /*STRICT_ALIGN */
-		bcopy(cipher->IV, iv, 16); 
-#else
-		*((word32*)iv[0]) = *((word32*)(cipher->IV   ));
-		*((word32*)iv[1]) = *((word32*)(cipher->IV+ 4));
-		*((word32*)iv[2]) = *((word32*)(cipher->IV+ 8));
-		*((word32*)iv[3]) = *((word32*)(cipher->IV+12));
-#endif
-		for (i = numBlocks; i > 0; i--) {
-			rijndaelDecrypt(input, block, key->keySched, key->ROUNDS);
-			((word32*)block)[0] ^= *((word32*)iv[0]);
-			((word32*)block)[1] ^= *((word32*)iv[1]);
-			((word32*)block)[2] ^= *((word32*)iv[2]);
-			((word32*)block)[3] ^= *((word32*)iv[3]);
-#if 1 /*STRICT_ALIGN*/
-			bcopy(input, iv, 16);
-			bcopy(block, outBuffer, 16);
-#else
-			*((word32*)iv[0]) = ((word32*)input)[0]; ((word32*)outBuffer)[0] = ((word32*)block)[0];
-			*((word32*)iv[1]) = ((word32*)input)[1]; ((word32*)outBuffer)[1] = ((word32*)block)[1];
-			*((word32*)iv[2]) = ((word32*)input)[2]; ((word32*)outBuffer)[2] = ((word32*)block)[2];
-			*((word32*)iv[3]) = ((word32*)input)[3]; ((word32*)outBuffer)[3] = ((word32*)block)[3];
-#endif
-			input += 16;
-			outBuffer += 16;
-		}
-		break;
-	
-	case MODE_CFB1:
-#if 1 /*STRICT_ALIGN */
-		bcopy(cipher->IV, iv, 16); 
-#else
-		*((word32*)iv[0]) = *((word32*)(cipher->IV));
-		*((word32*)iv[1]) = *((word32*)(cipher->IV+ 4));
-		*((word32*)iv[2]) = *((word32*)(cipher->IV+ 8));
-		*((word32*)iv[3]) = *((word32*)(cipher->IV+12));
-#endif
-		for (i = numBlocks; i > 0; i--) {
-			for (k = 0; k < 128; k++) {
-				*((word32*) block    ) = *((word32*)iv[0]);
-				*((word32*)(block+ 4)) = *((word32*)iv[1]);
-				*((word32*)(block+ 8)) = *((word32*)iv[2]);
-				*((word32*)(block+12)) = *((word32*)iv[3]);
-				rijndaelEncrypt(block, block, key->keySched, key->ROUNDS);
-				iv[0][0] = (iv[0][0] << 1) | (iv[0][1] >> 7);
-				iv[0][1] = (iv[0][1] << 1) | (iv[0][2] >> 7);
-				iv[0][2] = (iv[0][2] << 1) | (iv[0][3] >> 7);
-				iv[0][3] = (iv[0][3] << 1) | (iv[1][0] >> 7);
-				iv[1][0] = (iv[1][0] << 1) | (iv[1][1] >> 7);
-				iv[1][1] = (iv[1][1] << 1) | (iv[1][2] >> 7);
-				iv[1][2] = (iv[1][2] << 1) | (iv[1][3] >> 7);
-				iv[1][3] = (iv[1][3] << 1) | (iv[2][0] >> 7);
-				iv[2][0] = (iv[2][0] << 1) | (iv[2][1] >> 7);
-				iv[2][1] = (iv[2][1] << 1) | (iv[2][2] >> 7);
-				iv[2][2] = (iv[2][2] << 1) | (iv[2][3] >> 7);
-				iv[2][3] = (iv[2][3] << 1) | (iv[3][0] >> 7);
-				iv[3][0] = (iv[3][0] << 1) | (iv[3][1] >> 7);
-				iv[3][1] = (iv[3][1] << 1) | (iv[3][2] >> 7);
-				iv[3][2] = (iv[3][2] << 1) | (iv[3][3] >> 7);
-				iv[3][3] = (iv[3][3] << 1) | ((input[k/8] >> (7-(k&7))) & 1);
-				outBuffer[k/8] ^= (block[0] & 0x80) >> (k & 7);
-			}
-		}
-		break;
-
-	default:
-		return BAD_CIPHER_STATE;
-	}
-	
-	return 128*numBlocks;
-}
-
-int rijndael_padDecrypt(cipherInstance *cipher, keyInstance *key,
-		BYTE *input, int inputOctets, BYTE *outBuffer) {
-	int i, numBlocks, padLen;
-	word8 block[16];
-	word32 iv[4];
-
-	if (cipher == NULL ||
-		key == NULL ||
-		key->direction == DIR_ENCRYPT) {
-		return BAD_CIPHER_STATE;
-	}
-	if (input == NULL || inputOctets <= 0) {
-		return 0; /* nothing to do */
-	}
-	if (inputOctets % 16 != 0) {
-		return BAD_DATA;
-	}
-
-	numBlocks = inputOctets/16;
-
-	switch (cipher->mode) {
-	case MODE_ECB:
-		/* all blocks but last */
-		for (i = numBlocks - 1; i > 0; i--) { 
-			rijndaelDecrypt(input, outBuffer, key->keySched, key->ROUNDS);
-			input += 16;
-			outBuffer += 16;
-		}
-		/* last block */
-		rijndaelDecrypt(input, block, key->keySched, key->ROUNDS);
-		padLen = block[15];
-		if (padLen >= 16) {
-			return BAD_DATA;
-		}
-		for (i = 16 - padLen; i < 16; i++) {
-			if (block[i] != padLen) {
-				return BAD_DATA;
-			}
-		}
-		bcopy(block, outBuffer, 16 - padLen);
-		break;
-		
-	case MODE_CBC:
-		bcopy(cipher->IV, iv, 16);
-		/* all blocks but last */
-		for (i = numBlocks - 1; i > 0; i--) {
-			rijndaelDecrypt(input, block, key->keySched, key->ROUNDS);
-			((word32*)block)[0] ^= iv[0];
-			((word32*)block)[1] ^= iv[1];
-			((word32*)block)[2] ^= iv[2];
-			((word32*)block)[3] ^= iv[3];
-			bcopy(input, iv, 16);
-			bcopy(block, outBuffer, 16);
-			input += 16;
-			outBuffer += 16;
-		}
-		/* last block */
-		rijndaelDecrypt(input, block, key->keySched, key->ROUNDS);
-		((word32*)block)[0] ^= iv[0];
-		((word32*)block)[1] ^= iv[1];
-		((word32*)block)[2] ^= iv[2];
-		((word32*)block)[3] ^= iv[3];
-		padLen = block[15];
-		if (padLen <= 0 || padLen > 16) {
-			return BAD_DATA;
-		}
-		for (i = 16 - padLen; i < 16; i++) {
-			if (block[i] != padLen) {
-				return BAD_DATA;
-			}
-		}
-		bcopy(block, outBuffer, 16 - padLen);
-		break;
-	
-	default:
-		return BAD_CIPHER_STATE;
-	}
-	
-	return 16*numBlocks - padLen;
-}
-
-#ifdef INTERMEDIATE_VALUE_KAT
-/**
- *	cipherUpdateRounds:
- *
- *	Encrypts/Decrypts exactly one full block a specified number of rounds.
- *	Only used in the Intermediate Value Known Answer Test.	
- *
- *	Returns:
- *		TRUE - on success
- *		BAD_CIPHER_STATE - cipher in bad state (e.g., not initialized)
- */
-int rijndael_cipherUpdateRounds(cipherInstance *cipher, keyInstance *key,
-		BYTE *input, int inputLen, BYTE *outBuffer, int rounds) {
-	int j;
-	word8 block[4][4];
-
-	if (cipher == NULL || key == NULL) {
-		return BAD_CIPHER_STATE;
-	}
-
-	for (j = 3; j >= 0; j--) {
-		/* parse input stream into rectangular array */
-  		*((word32*)block[j]) = *((word32*)(input+4*j));
-	}
-
-	switch (key->direction) {
-	case DIR_ENCRYPT:
-		rijndaelEncryptRound(block, key->keySched, key->ROUNDS, rounds);
-		break;
-		
-	case DIR_DECRYPT:
-		rijndaelDecryptRound(block, key->keySched, key->ROUNDS, rounds);
-		break;
-		
-	default:
-		return BAD_KEY_DIR;
-	} 
-
-	for (j = 3; j >= 0; j--) {
-		/* parse rectangular array into output ciphertext bytes */
-		*((word32*)(outBuffer+4*j)) = *((word32*)block[j]);
-	}
-	
-	return TRUE;
-}
-#endif /* INTERMEDIATE_VALUE_KAT */
diff --git a/src/racoon/missing/crypto/rijndael/rijndael-api-fst.h b/src/racoon/missing/crypto/rijndael/rijndael-api-fst.h
deleted file mode 100644
index 1d76a21..0000000
--- a/src/racoon/missing/crypto/rijndael/rijndael-api-fst.h
+++ /dev/null
@@ -1,105 +0,0 @@
-/*	$NetBSD: rijndael-api-fst.h,v 1.4 2006/09/09 16:22:36 manu Exp $	*/
-
-/*	$KAME: rijndael-api-fst.h,v 1.1.1.1 2001/08/08 09:56:27 sakane Exp $	*/
-
-/*
- * rijndael-api-fst.h   v2.3   April '2000
- *
- * Optimised ANSI C code
- *
- * #define INTERMEDIATE_VALUE_KAT to generate the Intermediate Value Known Answer Test.
- */
-
-#ifndef __RIJNDAEL_API_FST_H
-#define __RIJNDAEL_API_FST_H
-
-#include <crypto/rijndael/rijndael-alg-fst.h>
-
-/*  Defines:
-	Add any additional defines you need
-*/
-
-#define     DIR_ENCRYPT           0 /*  Are we encrpyting?  */
-#define     DIR_DECRYPT           1 /*  Are we decrpyting?  */
-#define     MODE_ECB              1 /*  Are we ciphering in ECB mode?   */
-#define     MODE_CBC              2 /*  Are we ciphering in CBC mode?   */
-#define     MODE_CFB1             3 /*  Are we ciphering in 1-bit CFB mode? */
-#define     TRUE                  1
-#define     FALSE                 0
-#define     BITSPERBLOCK        128 /* Default number of bits in a cipher block */
-
-/*  Error Codes - CHANGE POSSIBLE: inclusion of additional error codes  */
-#define     BAD_KEY_DIR          -1 /*  Key direction is invalid, e.g., unknown value */
-#define     BAD_KEY_MAT          -2 /*  Key material not of correct length */
-#define     BAD_KEY_INSTANCE     -3 /*  Key passed is not valid */
-#define     BAD_CIPHER_MODE      -4 /*  Params struct passed to cipherInit invalid */
-#define     BAD_CIPHER_STATE     -5 /*  Cipher in wrong state (e.g., not initialized) */
-#define     BAD_BLOCK_LENGTH     -6
-#define     BAD_CIPHER_INSTANCE  -7
-#define     BAD_DATA             -8 /*  Data contents are invalid, e.g., invalid padding */
-#define     BAD_OTHER            -9 /*  Unknown error */
-
-/*  CHANGE POSSIBLE:  inclusion of algorithm specific defines  */
-#define     MAX_KEY_SIZE         64 /* # of ASCII char's needed to represent a key */
-#define     MAX_IV_SIZE          16 /* # bytes needed to represent an IV  */
-
-/*  Typedefs:
-
-	Typedef'ed data storage elements.  Add any algorithm specific 
-parameters at the bottom of the structs as appropriate.
-*/
-
-/*  The structure for key information */
-typedef struct {
-    u_int8_t  direction;            /* Key used for encrypting or decrypting? */
-    int   keyLen;                   /* Length of the key  */
-    char  keyMaterial[MAX_KEY_SIZE+1];  /* Raw key data in ASCII, e.g., user input or KAT values */
-        /*  The following parameters are algorithm dependent, replace or add as necessary  */
-	int   ROUNDS;                   /* key-length-dependent number of rounds */
-    int   blockLen;                 /* block length */
-    union {
-    	u_int8_t xkS8[RIJNDAEL_MAXROUNDS+1][4][4];	/* key schedule		*/
-    	u_int32_t xkS32[RIJNDAEL_MAXROUNDS+1][4];	/* key schedule		*/
-    } xKeySched;
-#define	keySched	xKeySched.xkS8
-} keyInstance;
-
-/*  The structure for cipher information */
-typedef struct {                    /* changed order of the components */
-    u_int8_t mode;                  /* MODE_ECB, MODE_CBC, or MODE_CFB1 */
-    u_int8_t IV[MAX_IV_SIZE];       /* A possible Initialization Vector for ciphering */
-        /*  Add any algorithm specific parameters needed here  */
-    int   blockLen;                 /* Sample: Handles non-128 bit block sizes (if available) */
-} cipherInstance;
-
-/*  Function prototypes  */
-/*  CHANGED: nothing
-	TODO: implement the following extensions to setup 192-bit and 256-bit block lengths:
-        makeKeyEx():    parameter blockLen added
-                        -- this parameter is absolutely necessary if you want to
-                        setup the round keys in a variable block length setting 
-	    cipherInitEx(): parameter blockLen added (for obvious reasons)		
- */
-
-int rijndael_makeKey(keyInstance *key, u_int8_t direction, int keyLen, char *keyMaterial);
-
-int rijndael_cipherInit(cipherInstance *cipher, u_int8_t mode, char *IV);
-
-int rijndael_blockEncrypt(cipherInstance *cipher, keyInstance *key,
-        u_int8_t *input, int inputLen, u_int8_t *outBuffer);
-
-int rijndael_padEncrypt(cipherInstance *cipher, keyInstance *key,
-		u_int8_t *input, int inputOctets, u_int8_t *outBuffer);
-
-int rijndael_blockDecrypt(cipherInstance *cipher, keyInstance *key,
-        u_int8_t *input, int inputLen, u_int8_t *outBuffer);
-
-int rijndael_padDecrypt(cipherInstance *cipher, keyInstance *key,
-		u_int8_t *input, int inputOctets, u_int8_t *outBuffer);
-
-#ifdef INTERMEDIATE_VALUE_KAT
-int rijndael_cipherUpdateRounds(cipherInstance *cipher, keyInstance *key,
-        u_int8_t *input, int inputLen, u_int8_t *outBuffer, int Rounds);
-#endif /* INTERMEDIATE_VALUE_KAT */
-
-#endif /*  __RIJNDAEL_API_FST_H */
diff --git a/src/racoon/missing/crypto/rijndael/rijndael.h b/src/racoon/missing/crypto/rijndael/rijndael.h
deleted file mode 100644
index 59c3077..0000000
--- a/src/racoon/missing/crypto/rijndael/rijndael.h
+++ /dev/null
@@ -1,5 +0,0 @@
-/*	$NetBSD: rijndael.h,v 1.4 2006/09/09 16:22:36 manu Exp $	*/
-
-/*	$KAME: rijndael.h,v 1.1.1.1 2001/08/08 09:56:27 sakane Exp $	*/
-
-#include <crypto/rijndael/rijndael-api-fst.h>
diff --git a/src/racoon/missing/crypto/rijndael/rijndael_local.h b/src/racoon/missing/crypto/rijndael/rijndael_local.h
deleted file mode 100644
index e446378..0000000
--- a/src/racoon/missing/crypto/rijndael/rijndael_local.h
+++ /dev/null
@@ -1,12 +0,0 @@
-/*	$NetBSD: rijndael_local.h,v 1.4 2006/09/09 16:22:36 manu Exp $	*/
-
-/*	$KAME: rijndael_local.h,v 1.1.1.1 2001/08/08 09:56:27 sakane Exp $	*/
-
-/* the file should not be used from outside */
-typedef u_int8_t		BYTE;
-typedef u_int8_t		word8;	
-typedef u_int16_t		word16;	
-typedef u_int32_t		word32;
-
-#define MAXKC		RIJNDAEL_MAXKC
-#define MAXROUNDS	RIJNDAEL_MAXROUNDS
diff --git a/src/racoon/missing/crypto/sha2/sha2.c b/src/racoon/missing/crypto/sha2/sha2.c
deleted file mode 100644
index cfde829..0000000
--- a/src/racoon/missing/crypto/sha2/sha2.c
+++ /dev/null
@@ -1,1201 +0,0 @@
-/*	$NetBSD: sha2.c,v 1.4 2006/09/09 16:22:36 manu Exp $	*/
-
-/* Id: sha2.c,v 1.6 2004/09/21 14:35:25 ludvigm Exp */
-
-/*
- * sha2.c
- *
- * Version 1.0.0beta1
- *
- * Written by Aaron D. Gifford <me@aarongifford.com>
- *
- * Copyright 2000 Aaron D. Gifford.  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 copyright holder nor the names of contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``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 AUTHOR(S) OR CONTRIBUTOR(S) 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.
- *
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/time.h>
-#ifndef __linux__
-#include <machine/endian.h>
-#endif
-#include <crypto/sha2/sha2.h>
-#include <openssl/evp.h>
-
-/* get openssl/ssleay version number */
-#include <openssl/opensslv.h>
-
-#include <err.h>
-#include <string.h>
-#define bcopy(a, b, c) memcpy((b), (a), (c))
-#define bzero(a, b) memset((a), 0, (b))
-#define panic(a) err(1, (a))
-
-#if OPENSSL_VERSION_NUMBER >= 0x00907000L
-#define HAVE_EVP_097
-#endif
-
-/*
- * ASSERT NOTE:
- * Some sanity checking code is included using assert().  On my FreeBSD
- * system, this additional code can be removed by compiling with NDEBUG
- * defined.  Check your own systems manpage on assert() to see how to
- * compile WITHOUT the sanity checking code on your system.
- *
- * UNROLLED TRANSFORM LOOP NOTE:
- * You can define SHA2_UNROLL_TRANSFORM to use the unrolled transform
- * loop version for the hash transform rounds (defined using macros
- * later in this file).  Either define on the command line, for example:
- *
- *   cc -DSHA2_UNROLL_TRANSFORM -o sha2 sha2.c sha2prog.c
- *
- * or define below:
- *
- *   #define SHA2_UNROLL_TRANSFORM
- *
- */
-
-#define assert(x)
-
-
-/*** SHA-256/384/512 Machine Architecture Definitions *****************/
-/*
- * BYTE_ORDER NOTE:
- *
- * Please make sure that your system defines BYTE_ORDER.  If your
- * architecture is little-endian, make sure it also defines
- * LITTLE_ENDIAN and that the two (BYTE_ORDER and LITTLE_ENDIAN) are
- * equivilent.
- *
- * If your system does not define the above, then you can do so by
- * hand like this:
- *
- *   #define LITTLE_ENDIAN 1234
- *   #define BIG_ENDIAN    4321
- *
- * And for little-endian machines, add:
- *
- *   #define BYTE_ORDER LITTLE_ENDIAN 
- *
- * Or for big-endian machines:
- *
- *   #define BYTE_ORDER BIG_ENDIAN
- *
- * The FreeBSD machine this was written on defines BYTE_ORDER
- * appropriately by including <sys/types.h> (which in turn includes
- * <machine/endian.h> where the appropriate definitions are actually
- * made).
- */
-#if !defined(BYTE_ORDER) || (BYTE_ORDER != LITTLE_ENDIAN && BYTE_ORDER != BIG_ENDIAN)
-#error Define BYTE_ORDER to be equal to either LITTLE_ENDIAN or BIG_ENDIAN
-#endif
-
-/*
- * Define the followingsha2_* types to types of the correct length on
- * the native archtecture.   Most BSD systems and Linux define u_intXX_t
- * types.  Machines with very recent ANSI C headers, can use the
- * uintXX_t definintions from inttypes.h by defining SHA2_USE_INTTYPES_H
- * during compile or in the sha.h header file.
- *
- * Machines that support neither u_intXX_t nor inttypes.h's uintXX_t
- * will need to define these three typedefs below (and the appropriate
- * ones in sha.h too) by hand according to their system architecture.
- *
- * Thank you, Jun-ichiro itojun Hagino, for suggesting using u_intXX_t
- * types and pointing out recent ANSI C support for uintXX_t in inttypes.h.
- */
-#if 0 /*def SHA2_USE_INTTYPES_H*/
-
-typedef uint8_t  sha2_byte;	/* Exactly 1 byte */
-typedef uint32_t sha2_word32;	/* Exactly 4 bytes */
-typedef uint64_t sha2_word64;	/* Exactly 8 bytes */
-
-#else /* SHA2_USE_INTTYPES_H */
-
-typedef u_int8_t  sha2_byte;	/* Exactly 1 byte */
-typedef u_int32_t sha2_word32;	/* Exactly 4 bytes */
-typedef u_int64_t sha2_word64;	/* Exactly 8 bytes */
-
-#endif /* SHA2_USE_INTTYPES_H */
-
-
-/*** SHA-256/384/512 Various Length Definitions ***********************/
-/* NOTE: Most of these are in sha2.h */
-#define SHA256_SHORT_BLOCK_LENGTH	(SHA256_BLOCK_LENGTH - 8)
-#define SHA384_SHORT_BLOCK_LENGTH	(SHA384_BLOCK_LENGTH - 16)
-#define SHA512_SHORT_BLOCK_LENGTH	(SHA512_BLOCK_LENGTH - 16)
-
-
-/*** ENDIAN REVERSAL MACROS *******************************************/
-#if BYTE_ORDER == LITTLE_ENDIAN
-#define REVERSE32(w,x)	{ \
-	sha2_word32 tmp = (w); \
-	tmp = (tmp >> 16) | (tmp << 16); \
-	(x) = ((tmp & 0xff00ff00UL) >> 8) | ((tmp & 0x00ff00ffUL) << 8); \
-}
-#define REVERSE64(w,x)	{ \
-	sha2_word64 tmp = (w); \
-	tmp = (tmp >> 32) | (tmp << 32); \
-	tmp = ((tmp & 0xff00ff00ff00ff00ULL) >> 8) | \
-	      ((tmp & 0x00ff00ff00ff00ffULL) << 8); \
-	(x) = ((tmp & 0xffff0000ffff0000ULL) >> 16) | \
-	      ((tmp & 0x0000ffff0000ffffULL) << 16); \
-}
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-/*
- * Macro for incrementally adding the unsigned 64-bit integer n to the
- * unsigned 128-bit integer (represented using a two-element array of
- * 64-bit words):
- */
-#define ADDINC128(w,n)	{ \
-	(w)[0] += (sha2_word64)(n); \
-	if ((w)[0] < (n)) { \
-		(w)[1]++; \
-	} \
-}
-
-/*** THE SIX LOGICAL FUNCTIONS ****************************************/
-/*
- * Bit shifting and rotation (used by the six SHA-XYZ logical functions:
- *
- *   NOTE:  The naming of R and S appears backwards here (R is a SHIFT and
- *   S is a ROTATION) because the SHA-256/384/512 description document
- *   (see http://csrc.nist.gov/cryptval/shs/sha256-384-512.pdf) uses this
- *   same "backwards" definition.
- */
-/* Shift-right (used in SHA-256, SHA-384, and SHA-512): */
-#define R(b,x) 		((x) >> (b))
-/* 32-bit Rotate-right (used in SHA-256): */
-#define S32(b,x)	(((x) >> (b)) | ((x) << (32 - (b))))
-/* 64-bit Rotate-right (used in SHA-384 and SHA-512): */
-#define S64(b,x)	(((x) >> (b)) | ((x) << (64 - (b))))
-
-/* Two of six logical functions used in SHA-256, SHA-384, and SHA-512: */
-#define Ch(x,y,z)	(((x) & (y)) ^ ((~(x)) & (z)))
-#define Maj(x,y,z)	(((x) & (y)) ^ ((x) & (z)) ^ ((y) & (z)))
-
-/* Four of six logical functions used in SHA-256: */
-#define Sigma0_256(x)	(S32(2,  (x)) ^ S32(13, (x)) ^ S32(22, (x)))
-#define Sigma1_256(x)	(S32(6,  (x)) ^ S32(11, (x)) ^ S32(25, (x)))
-#define sigma0_256(x)	(S32(7,  (x)) ^ S32(18, (x)) ^ R(3 ,   (x)))
-#define sigma1_256(x)	(S32(17, (x)) ^ S32(19, (x)) ^ R(10,   (x)))
-
-/* Four of six logical functions used in SHA-384 and SHA-512: */
-#define Sigma0_512(x)	(S64(28, (x)) ^ S64(34, (x)) ^ S64(39, (x)))
-#define Sigma1_512(x)	(S64(14, (x)) ^ S64(18, (x)) ^ S64(41, (x)))
-#define sigma0_512(x)	(S64( 1, (x)) ^ S64( 8, (x)) ^ R( 7,   (x)))
-#define sigma1_512(x)	(S64(19, (x)) ^ S64(61, (x)) ^ R( 6,   (x)))
-
-/*** INTERNAL FUNCTION PROTOTYPES *************************************/
-/* NOTE: These should not be accessed directly from outside this
- * library -- they are intended for private internal visibility/use
- * only.
- */
-void SHA512_Last(SHA512_CTX*);
-void SHA256_Transform(SHA256_CTX*, const sha2_word32*);
-void SHA512_Transform(SHA512_CTX*, const sha2_word64*);
-
-
-/*** SHA-XYZ INITIAL HASH VALUES AND CONSTANTS ************************/
-/* Hash constant words K for SHA-256: */
-const static sha2_word32 K256[64] = {
-	0x428a2f98UL, 0x71374491UL, 0xb5c0fbcfUL, 0xe9b5dba5UL,
-	0x3956c25bUL, 0x59f111f1UL, 0x923f82a4UL, 0xab1c5ed5UL,
-	0xd807aa98UL, 0x12835b01UL, 0x243185beUL, 0x550c7dc3UL,
-	0x72be5d74UL, 0x80deb1feUL, 0x9bdc06a7UL, 0xc19bf174UL,
-	0xe49b69c1UL, 0xefbe4786UL, 0x0fc19dc6UL, 0x240ca1ccUL,
-	0x2de92c6fUL, 0x4a7484aaUL, 0x5cb0a9dcUL, 0x76f988daUL,
-	0x983e5152UL, 0xa831c66dUL, 0xb00327c8UL, 0xbf597fc7UL,
-	0xc6e00bf3UL, 0xd5a79147UL, 0x06ca6351UL, 0x14292967UL,
-	0x27b70a85UL, 0x2e1b2138UL, 0x4d2c6dfcUL, 0x53380d13UL,
-	0x650a7354UL, 0x766a0abbUL, 0x81c2c92eUL, 0x92722c85UL,
-	0xa2bfe8a1UL, 0xa81a664bUL, 0xc24b8b70UL, 0xc76c51a3UL,
-	0xd192e819UL, 0xd6990624UL, 0xf40e3585UL, 0x106aa070UL,
-	0x19a4c116UL, 0x1e376c08UL, 0x2748774cUL, 0x34b0bcb5UL,
-	0x391c0cb3UL, 0x4ed8aa4aUL, 0x5b9cca4fUL, 0x682e6ff3UL,
-	0x748f82eeUL, 0x78a5636fUL, 0x84c87814UL, 0x8cc70208UL,
-	0x90befffaUL, 0xa4506cebUL, 0xbef9a3f7UL, 0xc67178f2UL
-};
-
-/* Initial hash value H for SHA-256: */
-const static sha2_word32 sha256_initial_hash_value[8] = {
-	0x6a09e667UL,
-	0xbb67ae85UL,
-	0x3c6ef372UL,
-	0xa54ff53aUL,
-	0x510e527fUL,
-	0x9b05688cUL,
-	0x1f83d9abUL,
-	0x5be0cd19UL
-};
-
-/* Hash constant words K for SHA-384 and SHA-512: */
-const static sha2_word64 K512[80] = {
-	0x428a2f98d728ae22ULL, 0x7137449123ef65cdULL,
-	0xb5c0fbcfec4d3b2fULL, 0xe9b5dba58189dbbcULL,
-	0x3956c25bf348b538ULL, 0x59f111f1b605d019ULL,
-	0x923f82a4af194f9bULL, 0xab1c5ed5da6d8118ULL,
-	0xd807aa98a3030242ULL, 0x12835b0145706fbeULL,
-	0x243185be4ee4b28cULL, 0x550c7dc3d5ffb4e2ULL,
-	0x72be5d74f27b896fULL, 0x80deb1fe3b1696b1ULL,
-	0x9bdc06a725c71235ULL, 0xc19bf174cf692694ULL,
-	0xe49b69c19ef14ad2ULL, 0xefbe4786384f25e3ULL,
-	0x0fc19dc68b8cd5b5ULL, 0x240ca1cc77ac9c65ULL,
-	0x2de92c6f592b0275ULL, 0x4a7484aa6ea6e483ULL,
-	0x5cb0a9dcbd41fbd4ULL, 0x76f988da831153b5ULL,
-	0x983e5152ee66dfabULL, 0xa831c66d2db43210ULL,
-	0xb00327c898fb213fULL, 0xbf597fc7beef0ee4ULL,
-	0xc6e00bf33da88fc2ULL, 0xd5a79147930aa725ULL,
-	0x06ca6351e003826fULL, 0x142929670a0e6e70ULL,
-	0x27b70a8546d22ffcULL, 0x2e1b21385c26c926ULL,
-	0x4d2c6dfc5ac42aedULL, 0x53380d139d95b3dfULL,
-	0x650a73548baf63deULL, 0x766a0abb3c77b2a8ULL,
-	0x81c2c92e47edaee6ULL, 0x92722c851482353bULL,
-	0xa2bfe8a14cf10364ULL, 0xa81a664bbc423001ULL,
-	0xc24b8b70d0f89791ULL, 0xc76c51a30654be30ULL,
-	0xd192e819d6ef5218ULL, 0xd69906245565a910ULL,
-	0xf40e35855771202aULL, 0x106aa07032bbd1b8ULL,
-	0x19a4c116b8d2d0c8ULL, 0x1e376c085141ab53ULL,
-	0x2748774cdf8eeb99ULL, 0x34b0bcb5e19b48a8ULL,
-	0x391c0cb3c5c95a63ULL, 0x4ed8aa4ae3418acbULL,
-	0x5b9cca4f7763e373ULL, 0x682e6ff3d6b2b8a3ULL,
-	0x748f82ee5defb2fcULL, 0x78a5636f43172f60ULL,
-	0x84c87814a1f0ab72ULL, 0x8cc702081a6439ecULL,
-	0x90befffa23631e28ULL, 0xa4506cebde82bde9ULL,
-	0xbef9a3f7b2c67915ULL, 0xc67178f2e372532bULL,
-	0xca273eceea26619cULL, 0xd186b8c721c0c207ULL,
-	0xeada7dd6cde0eb1eULL, 0xf57d4f7fee6ed178ULL,
-	0x06f067aa72176fbaULL, 0x0a637dc5a2c898a6ULL,
-	0x113f9804bef90daeULL, 0x1b710b35131c471bULL,
-	0x28db77f523047d84ULL, 0x32caab7b40c72493ULL,
-	0x3c9ebe0a15c9bebcULL, 0x431d67c49c100d4cULL,
-	0x4cc5d4becb3e42b6ULL, 0x597f299cfc657e2aULL,
-	0x5fcb6fab3ad6faecULL, 0x6c44198c4a475817ULL
-};
-
-/* Initial hash value H for SHA-384 */
-const static sha2_word64 sha384_initial_hash_value[8] = {
-	0xcbbb9d5dc1059ed8ULL,
-	0x629a292a367cd507ULL,
-	0x9159015a3070dd17ULL,
-	0x152fecd8f70e5939ULL,
-	0x67332667ffc00b31ULL,
-	0x8eb44a8768581511ULL,
-	0xdb0c2e0d64f98fa7ULL,
-	0x47b5481dbefa4fa4ULL
-};
-
-/* Initial hash value H for SHA-512 */
-const static sha2_word64 sha512_initial_hash_value[8] = {
-	0x6a09e667f3bcc908ULL,
-	0xbb67ae8584caa73bULL,
-	0x3c6ef372fe94f82bULL,
-	0xa54ff53a5f1d36f1ULL,
-	0x510e527fade682d1ULL,
-	0x9b05688c2b3e6c1fULL,
-	0x1f83d9abfb41bd6bULL,
-	0x5be0cd19137e2179ULL
-};
-
-/*
- * Constant used by SHA256/384/512_End() functions for converting the
- * digest to a readable hexadecimal character string:
- */
-static const char *sha2_hex_digits = "0123456789abcdef";
-
-
-/*** SHA-256: *********************************************************/
-void SHA256_Init(SHA256_CTX* context) {
-	if (context == (SHA256_CTX*)0) {
-		return;
-	}
-	bcopy(sha256_initial_hash_value, context->state, SHA256_DIGEST_LENGTH);
-	bzero(context->buffer, SHA256_BLOCK_LENGTH);
-	context->bitcount = 0;
-}
-
-#ifdef SHA2_UNROLL_TRANSFORM
-
-/* Unrolled SHA-256 round macros: */
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-
-#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h)	\
-	REVERSE32(*data++, W256[j]); \
-	T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
-             K256[j] + W256[j]; \
-	(d) += T1; \
-	(h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
-	j++
-
-
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND256_0_TO_15(a,b,c,d,e,f,g,h)	\
-	T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + \
-	     K256[j] + (W256[j] = *data++); \
-	(d) += T1; \
-	(h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
-	j++
-
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND256(a,b,c,d,e,f,g,h)	\
-	s0 = W256[(j+1)&0x0f]; \
-	s0 = sigma0_256(s0); \
-	s1 = W256[(j+14)&0x0f]; \
-	s1 = sigma1_256(s1); \
-	T1 = (h) + Sigma1_256(e) + Ch((e), (f), (g)) + K256[j] + \
-	     (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0); \
-	(d) += T1; \
-	(h) = T1 + Sigma0_256(a) + Maj((a), (b), (c)); \
-	j++
-
-void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {
-	sha2_word32	a, b, c, d, e, f, g, h, s0, s1;
-	sha2_word32	T1, *W256;
-	int		j;
-
-	W256 = (sha2_word32*)context->buffer;
-
-	/* Initialize registers with the prev. intermediate value */
-	a = context->state[0];
-	b = context->state[1];
-	c = context->state[2];
-	d = context->state[3];
-	e = context->state[4];
-	f = context->state[5];
-	g = context->state[6];
-	h = context->state[7];
-
-	j = 0;
-	do {
-		/* Rounds 0 to 15 (unrolled): */
-		ROUND256_0_TO_15(a,b,c,d,e,f,g,h);
-		ROUND256_0_TO_15(h,a,b,c,d,e,f,g);
-		ROUND256_0_TO_15(g,h,a,b,c,d,e,f);
-		ROUND256_0_TO_15(f,g,h,a,b,c,d,e);
-		ROUND256_0_TO_15(e,f,g,h,a,b,c,d);
-		ROUND256_0_TO_15(d,e,f,g,h,a,b,c);
-		ROUND256_0_TO_15(c,d,e,f,g,h,a,b);
-		ROUND256_0_TO_15(b,c,d,e,f,g,h,a);
-	} while (j < 16);
-
-	/* Now for the remaining rounds to 64: */
-	do {
-		ROUND256(a,b,c,d,e,f,g,h);
-		ROUND256(h,a,b,c,d,e,f,g);
-		ROUND256(g,h,a,b,c,d,e,f);
-		ROUND256(f,g,h,a,b,c,d,e);
-		ROUND256(e,f,g,h,a,b,c,d);
-		ROUND256(d,e,f,g,h,a,b,c);
-		ROUND256(c,d,e,f,g,h,a,b);
-		ROUND256(b,c,d,e,f,g,h,a);
-	} while (j < 64);
-
-	/* Compute the current intermediate hash value */
-	context->state[0] += a;
-	context->state[1] += b;
-	context->state[2] += c;
-	context->state[3] += d;
-	context->state[4] += e;
-	context->state[5] += f;
-	context->state[6] += g;
-	context->state[7] += h;
-
-	/* Clean up */
-	a = b = c = d = e = f = g = h = T1 = 0;
-}
-
-#else /* SHA2_UNROLL_TRANSFORM */
-
-void SHA256_Transform(SHA256_CTX* context, const sha2_word32* data) {
-	sha2_word32	a, b, c, d, e, f, g, h, s0, s1;
-	sha2_word32	T1, T2, *W256;
-	int		j;
-
-	W256 = (sha2_word32*)context->buffer;
-
-	/* Initialize registers with the prev. intermediate value */
-	a = context->state[0];
-	b = context->state[1];
-	c = context->state[2];
-	d = context->state[3];
-	e = context->state[4];
-	f = context->state[5];
-	g = context->state[6];
-	h = context->state[7];
-
-	j = 0;
-	do {
-#if BYTE_ORDER == LITTLE_ENDIAN
-		/* Copy data while converting to host byte order */
-		REVERSE32(*data++,W256[j]);
-		/* Apply the SHA-256 compression function to update a..h */
-		T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + W256[j];
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-		/* Apply the SHA-256 compression function to update a..h with copy */
-		T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + (W256[j] = *data++);
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-		T2 = Sigma0_256(a) + Maj(a, b, c);
-		h = g;
-		g = f;
-		f = e;
-		e = d + T1;
-		d = c;
-		c = b;
-		b = a;
-		a = T1 + T2;
-
-		j++;
-	} while (j < 16);
-
-	do {
-		/* Part of the message block expansion: */
-		s0 = W256[(j+1)&0x0f];
-		s0 = sigma0_256(s0);
-		s1 = W256[(j+14)&0x0f];	
-		s1 = sigma1_256(s1);
-
-		/* Apply the SHA-256 compression function to update a..h */
-		T1 = h + Sigma1_256(e) + Ch(e, f, g) + K256[j] + 
-		     (W256[j&0x0f] += s1 + W256[(j+9)&0x0f] + s0);
-		T2 = Sigma0_256(a) + Maj(a, b, c);
-		h = g;
-		g = f;
-		f = e;
-		e = d + T1;
-		d = c;
-		c = b;
-		b = a;
-		a = T1 + T2;
-
-		j++;
-	} while (j < 64);
-
-	/* Compute the current intermediate hash value */
-	context->state[0] += a;
-	context->state[1] += b;
-	context->state[2] += c;
-	context->state[3] += d;
-	context->state[4] += e;
-	context->state[5] += f;
-	context->state[6] += g;
-	context->state[7] += h;
-
-	/* Clean up */
-	a = b = c = d = e = f = g = h = T1 = T2 = 0;
-}
-
-#endif /* SHA2_UNROLL_TRANSFORM */
-
-void SHA256_Update(SHA256_CTX* context, const sha2_byte *data, size_t len) {
-	unsigned int	freespace, usedspace;
-
-	if (len == 0) {
-		/* Calling with no data is valid - we do nothing */
-		return;
-	}
-
-	/* Sanity check: */
-	assert(context != (SHA256_CTX*)0 && data != (sha2_byte*)0);
-
-	usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
-	if (usedspace > 0) {
-		/* Calculate how much free space is available in the buffer */
-		freespace = SHA256_BLOCK_LENGTH - usedspace;
-
-		if (len >= freespace) {
-			/* Fill the buffer completely and process it */
-			bcopy(data, &context->buffer[usedspace], freespace);
-			context->bitcount += freespace << 3;
-			len -= freespace;
-			data += freespace;
-			SHA256_Transform(context, (sha2_word32*)context->buffer);
-		} else {
-			/* The buffer is not yet full */
-			bcopy(data, &context->buffer[usedspace], len);
-			context->bitcount += len << 3;
-			/* Clean up: */
-			usedspace = freespace = 0;
-			return;
-		}
-	}
-	while (len >= SHA256_BLOCK_LENGTH) {
-		/* Process as many complete blocks as we can */
-		SHA256_Transform(context, (const sha2_word32*)data);
-		context->bitcount += SHA256_BLOCK_LENGTH << 3;
-		len -= SHA256_BLOCK_LENGTH;
-		data += SHA256_BLOCK_LENGTH;
-	}
-	if (len > 0) {
-		/* There's left-overs, so save 'em */
-		bcopy(data, context->buffer, len);
-		context->bitcount += len << 3;
-	}
-	/* Clean up: */
-	usedspace = freespace = 0;
-}
-
-void SHA256_Final(sha2_byte digest[], SHA256_CTX* context) {
-	sha2_word32	*d = (sha2_word32*)digest;
-	unsigned int	usedspace;
-
-	/* Sanity check: */
-	assert(context != (SHA256_CTX*)0);
-
-	/* If no digest buffer is passed, we don't bother doing this: */
-	if (digest != (sha2_byte*)0) {
-		usedspace = (context->bitcount >> 3) % SHA256_BLOCK_LENGTH;
-#if BYTE_ORDER == LITTLE_ENDIAN
-		/* Convert FROM host byte order */
-		REVERSE64(context->bitcount,context->bitcount);
-#endif
-		if (usedspace > 0) {
-			/* Begin padding with a 1 bit: */
-			context->buffer[usedspace++] = 0x80;
-
-			if (usedspace <= SHA256_SHORT_BLOCK_LENGTH) {
-				/* Set-up for the last transform: */
-				bzero(&context->buffer[usedspace], SHA256_SHORT_BLOCK_LENGTH - usedspace);
-			} else {
-				if (usedspace < SHA256_BLOCK_LENGTH) {
-					bzero(&context->buffer[usedspace], SHA256_BLOCK_LENGTH - usedspace);
-				}
-				/* Do second-to-last transform: */
-				SHA256_Transform(context, (sha2_word32*)context->buffer);
-
-				/* And set-up for the last transform: */
-				bzero(context->buffer, SHA256_SHORT_BLOCK_LENGTH);
-			}
-		} else {
-			/* Set-up for the last transform: */
-			bzero(context->buffer, SHA256_SHORT_BLOCK_LENGTH);
-
-			/* Begin padding with a 1 bit: */
-			*context->buffer = 0x80;
-		}
-		/* Set the bit count: */
-		*(sha2_word64*)&context->buffer[SHA256_SHORT_BLOCK_LENGTH] = context->bitcount;
-
-		/* Final transform: */
-		SHA256_Transform(context, (sha2_word32*)context->buffer);
-
-#if BYTE_ORDER == LITTLE_ENDIAN
-		{
-			/* Convert TO host byte order */
-			int	j;
-			for (j = 0; j < 8; j++) {
-				REVERSE32(context->state[j],context->state[j]);
-				*d++ = context->state[j];
-			}
-		}
-#else
-		bcopy(context->state, d, SHA256_DIGEST_LENGTH);
-#endif
-	}
-
-	/* Clean up state data: */
-	bzero(context, sizeof(*context));
-	usedspace = 0;
-}
-
-char *SHA256_End(SHA256_CTX* context, char buffer[]) {
-	sha2_byte	digest[SHA256_DIGEST_LENGTH], *d = digest;
-	int		i;
-
-	/* Sanity check: */
-	assert(context != (SHA256_CTX*)0);
-
-	if (buffer != (char*)0) {
-		SHA256_Final(digest, context);
-
-		for (i = 0; i < SHA256_DIGEST_LENGTH; i++) {
-			*buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
-			*buffer++ = sha2_hex_digits[*d & 0x0f];
-			d++;
-		}
-		*buffer = (char)0;
-	} else {
-		bzero(context, sizeof(*context));
-	}
-	bzero(digest, SHA256_DIGEST_LENGTH);
-	return buffer;
-}
-
-char* SHA256_Data(const sha2_byte* data, size_t len, char digest[SHA256_DIGEST_STRING_LENGTH]) {
-	SHA256_CTX	context;
-
-	SHA256_Init(&context);
-	SHA256_Update(&context, data, len);
-	return SHA256_End(&context, digest);
-}
-
-
-/*** SHA-512: *********************************************************/
-void SHA512_Init(SHA512_CTX* context) {
-	if (context == (SHA512_CTX*)0) {
-		return;
-	}
-	bcopy(sha512_initial_hash_value, context->state, SHA512_DIGEST_LENGTH);
-	bzero(context->buffer, SHA512_BLOCK_LENGTH);
-	context->bitcount[0] = context->bitcount[1] =  0;
-}
-
-#ifdef SHA2_UNROLL_TRANSFORM
-
-/* Unrolled SHA-512 round macros: */
-#if BYTE_ORDER == LITTLE_ENDIAN
-
-#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h)	\
-	REVERSE64(*data++, W512[j]); \
-	T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
-             K512[j] + W512[j]; \
-	(d) += T1, \
-	(h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)), \
-	j++
-
-
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND512_0_TO_15(a,b,c,d,e,f,g,h)	\
-	T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + \
-             K512[j] + (W512[j] = *data++); \
-	(d) += T1; \
-	(h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
-	j++
-
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-
-#define ROUND512(a,b,c,d,e,f,g,h)	\
-	s0 = W512[(j+1)&0x0f]; \
-	s0 = sigma0_512(s0); \
-	s1 = W512[(j+14)&0x0f]; \
-	s1 = sigma1_512(s1); \
-	T1 = (h) + Sigma1_512(e) + Ch((e), (f), (g)) + K512[j] + \
-             (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0); \
-	(d) += T1; \
-	(h) = T1 + Sigma0_512(a) + Maj((a), (b), (c)); \
-	j++
-
-void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {
-	sha2_word64	a, b, c, d, e, f, g, h, s0, s1;
-	sha2_word64	T1, *W512 = (sha2_word64*)context->buffer;
-	int		j;
-
-	/* Initialize registers with the prev. intermediate value */
-	a = context->state[0];
-	b = context->state[1];
-	c = context->state[2];
-	d = context->state[3];
-	e = context->state[4];
-	f = context->state[5];
-	g = context->state[6];
-	h = context->state[7];
-
-	j = 0;
-	do {
-		ROUND512_0_TO_15(a,b,c,d,e,f,g,h);
-		ROUND512_0_TO_15(h,a,b,c,d,e,f,g);
-		ROUND512_0_TO_15(g,h,a,b,c,d,e,f);
-		ROUND512_0_TO_15(f,g,h,a,b,c,d,e);
-		ROUND512_0_TO_15(e,f,g,h,a,b,c,d);
-		ROUND512_0_TO_15(d,e,f,g,h,a,b,c);
-		ROUND512_0_TO_15(c,d,e,f,g,h,a,b);
-		ROUND512_0_TO_15(b,c,d,e,f,g,h,a);
-	} while (j < 16);
-
-	/* Now for the remaining rounds up to 79: */
-	do {
-		ROUND512(a,b,c,d,e,f,g,h);
-		ROUND512(h,a,b,c,d,e,f,g);
-		ROUND512(g,h,a,b,c,d,e,f);
-		ROUND512(f,g,h,a,b,c,d,e);
-		ROUND512(e,f,g,h,a,b,c,d);
-		ROUND512(d,e,f,g,h,a,b,c);
-		ROUND512(c,d,e,f,g,h,a,b);
-		ROUND512(b,c,d,e,f,g,h,a);
-	} while (j < 80);
-
-	/* Compute the current intermediate hash value */
-	context->state[0] += a;
-	context->state[1] += b;
-	context->state[2] += c;
-	context->state[3] += d;
-	context->state[4] += e;
-	context->state[5] += f;
-	context->state[6] += g;
-	context->state[7] += h;
-
-	/* Clean up */
-	a = b = c = d = e = f = g = h = T1 = 0;
-}
-
-#else /* SHA2_UNROLL_TRANSFORM */
-
-void SHA512_Transform(SHA512_CTX* context, const sha2_word64* data) {
-	sha2_word64	a, b, c, d, e, f, g, h, s0, s1;
-	sha2_word64	T1, T2, *W512 = (sha2_word64*)context->buffer;
-	int		j;
-
-	/* Initialize registers with the prev. intermediate value */
-	a = context->state[0];
-	b = context->state[1];
-	c = context->state[2];
-	d = context->state[3];
-	e = context->state[4];
-	f = context->state[5];
-	g = context->state[6];
-	h = context->state[7];
-
-	j = 0;
-	do {
-#if BYTE_ORDER == LITTLE_ENDIAN
-		/* Convert TO host byte order */
-		REVERSE64(*data++, W512[j]);
-		/* Apply the SHA-512 compression function to update a..h */
-		T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + W512[j];
-#else /* BYTE_ORDER == LITTLE_ENDIAN */
-		/* Apply the SHA-512 compression function to update a..h with copy */
-		T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] + (W512[j] = *data++);
-#endif /* BYTE_ORDER == LITTLE_ENDIAN */
-		T2 = Sigma0_512(a) + Maj(a, b, c);
-		h = g;
-		g = f;
-		f = e;
-		e = d + T1;
-		d = c;
-		c = b;
-		b = a;
-		a = T1 + T2;
-
-		j++;
-	} while (j < 16);
-
-	do {
-		/* Part of the message block expansion: */
-		s0 = W512[(j+1)&0x0f];
-		s0 = sigma0_512(s0);
-		s1 = W512[(j+14)&0x0f];
-		s1 =  sigma1_512(s1);
-
-		/* Apply the SHA-512 compression function to update a..h */
-		T1 = h + Sigma1_512(e) + Ch(e, f, g) + K512[j] +
-		     (W512[j&0x0f] += s1 + W512[(j+9)&0x0f] + s0);
-		T2 = Sigma0_512(a) + Maj(a, b, c);
-		h = g;
-		g = f;
-		f = e;
-		e = d + T1;
-		d = c;
-		c = b;
-		b = a;
-		a = T1 + T2;
-
-		j++;
-	} while (j < 80);
-
-	/* Compute the current intermediate hash value */
-	context->state[0] += a;
-	context->state[1] += b;
-	context->state[2] += c;
-	context->state[3] += d;
-	context->state[4] += e;
-	context->state[5] += f;
-	context->state[6] += g;
-	context->state[7] += h;
-
-	/* Clean up */
-	a = b = c = d = e = f = g = h = T1 = T2 = 0;
-}
-
-#endif /* SHA2_UNROLL_TRANSFORM */
-
-void SHA512_Update(SHA512_CTX* context, const sha2_byte *data, size_t len) {
-	unsigned int	freespace, usedspace;
-
-	if (len == 0) {
-		/* Calling with no data is valid - we do nothing */
-		return;
-	}
-
-	/* Sanity check: */
-	assert(context != (SHA512_CTX*)0 && data != (sha2_byte*)0);
-
-	usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
-	if (usedspace > 0) {
-		/* Calculate how much free space is available in the buffer */
-		freespace = SHA512_BLOCK_LENGTH - usedspace;
-
-		if (len >= freespace) {
-			/* Fill the buffer completely and process it */
-			bcopy(data, &context->buffer[usedspace], freespace);
-			ADDINC128(context->bitcount, freespace << 3);
-			len -= freespace;
-			data += freespace;
-			SHA512_Transform(context, (sha2_word64*)context->buffer);
-		} else {
-			/* The buffer is not yet full */
-			bcopy(data, &context->buffer[usedspace], len);
-			ADDINC128(context->bitcount, len << 3);
-			/* Clean up: */
-			usedspace = freespace = 0;
-			return;
-		}
-	}
-	while (len >= SHA512_BLOCK_LENGTH) {
-		/* Process as many complete blocks as we can */
-		SHA512_Transform(context, (const sha2_word64*)data);
-		ADDINC128(context->bitcount, SHA512_BLOCK_LENGTH << 3);
-		len -= SHA512_BLOCK_LENGTH;
-		data += SHA512_BLOCK_LENGTH;
-	}
-	if (len > 0) {
-		/* There's left-overs, so save 'em */
-		bcopy(data, context->buffer, len);
-		ADDINC128(context->bitcount, len << 3);
-	}
-	/* Clean up: */
-	usedspace = freespace = 0;
-}
-
-void SHA512_Last(SHA512_CTX* context) {
-	unsigned int	usedspace;
-
-	usedspace = (context->bitcount[0] >> 3) % SHA512_BLOCK_LENGTH;
-#if BYTE_ORDER == LITTLE_ENDIAN
-	/* Convert FROM host byte order */
-	REVERSE64(context->bitcount[0],context->bitcount[0]);
-	REVERSE64(context->bitcount[1],context->bitcount[1]);
-#endif
-	if (usedspace > 0) {
-		/* Begin padding with a 1 bit: */
-		context->buffer[usedspace++] = 0x80;
-
-		if (usedspace <= SHA512_SHORT_BLOCK_LENGTH) {
-			/* Set-up for the last transform: */
-			bzero(&context->buffer[usedspace], SHA512_SHORT_BLOCK_LENGTH - usedspace);
-		} else {
-			if (usedspace < SHA512_BLOCK_LENGTH) {
-				bzero(&context->buffer[usedspace], SHA512_BLOCK_LENGTH - usedspace);
-			}
-			/* Do second-to-last transform: */
-			SHA512_Transform(context, (sha2_word64*)context->buffer);
-
-			/* And set-up for the last transform: */
-			bzero(context->buffer, SHA512_BLOCK_LENGTH - 2);
-		}
-	} else {
-		/* Prepare for final transform: */
-		bzero(context->buffer, SHA512_SHORT_BLOCK_LENGTH);
-
-		/* Begin padding with a 1 bit: */
-		*context->buffer = 0x80;
-	}
-	/* Store the length of input data (in bits): */
-	*(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH] = context->bitcount[1];
-	*(sha2_word64*)&context->buffer[SHA512_SHORT_BLOCK_LENGTH+8] = context->bitcount[0];
-
-	/* Final transform: */
-	SHA512_Transform(context, (sha2_word64*)context->buffer);
-}
-
-void SHA512_Final(sha2_byte digest[], SHA512_CTX* context) {
-	sha2_word64	*d = (sha2_word64*)digest;
-
-	/* Sanity check: */
-	assert(context != (SHA512_CTX*)0);
-
-	/* If no digest buffer is passed, we don't bother doing this: */
-	if (digest != (sha2_byte*)0) {
-		SHA512_Last(context);
-
-		/* Save the hash data for output: */
-#if BYTE_ORDER == LITTLE_ENDIAN
-		{
-			/* Convert TO host byte order */
-			int	j;
-			for (j = 0; j < 8; j++) {
-				REVERSE64(context->state[j],context->state[j]);
-				*d++ = context->state[j];
-			}
-		}
-#else
-		bcopy(context->state, d, SHA512_DIGEST_LENGTH);
-#endif
-	}
-
-	/* Zero out state data */
-	bzero(context, sizeof(*context));
-}
-
-char *SHA512_End(SHA512_CTX* context, char buffer[]) {
-	sha2_byte	digest[SHA512_DIGEST_LENGTH], *d = digest;
-	int		i;
-
-	/* Sanity check: */
-	assert(context != (SHA512_CTX*)0);
-
-	if (buffer != (char*)0) {
-		SHA512_Final(digest, context);
-
-		for (i = 0; i < SHA512_DIGEST_LENGTH; i++) {
-			*buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
-			*buffer++ = sha2_hex_digits[*d & 0x0f];
-			d++;
-		}
-		*buffer = (char)0;
-	} else {
-		bzero(context, sizeof(*context));
-	}
-	bzero(digest, SHA512_DIGEST_LENGTH);
-	return buffer;
-}
-
-char* SHA512_Data(const sha2_byte* data, size_t len, char digest[SHA512_DIGEST_STRING_LENGTH]) {
-	SHA512_CTX	context;
-
-	SHA512_Init(&context);
-	SHA512_Update(&context, data, len);
-	return SHA512_End(&context, digest);
-}
-
-
-/*** SHA-384: *********************************************************/
-void SHA384_Init(SHA384_CTX* context) {
-	if (context == (SHA384_CTX*)0) {
-		return;
-	}
-	bcopy(sha384_initial_hash_value, context->state, SHA512_DIGEST_LENGTH);
-	bzero(context->buffer, SHA384_BLOCK_LENGTH);
-	context->bitcount[0] = context->bitcount[1] = 0;
-}
-
-void SHA384_Update(SHA384_CTX* context, const sha2_byte* data, size_t len) {
-	SHA512_Update((SHA512_CTX*)context, data, len);
-}
-
-void SHA384_Final(sha2_byte digest[], SHA384_CTX* context) {
-	sha2_word64	*d = (sha2_word64*)digest;
-
-	/* Sanity check: */
-	assert(context != (SHA384_CTX*)0);
-
-	/* If no digest buffer is passed, we don't bother doing this: */
-	if (digest != (sha2_byte*)0) {
-		SHA512_Last((SHA512_CTX*)context);
-
-		/* Save the hash data for output: */
-#if BYTE_ORDER == LITTLE_ENDIAN
-		{
-			/* Convert TO host byte order */
-			int	j;
-			for (j = 0; j < 6; j++) {
-				REVERSE64(context->state[j],context->state[j]);
-				*d++ = context->state[j];
-			}
-		}
-#else
-		bcopy(context->state, d, SHA384_DIGEST_LENGTH);
-#endif
-	}
-
-	/* Zero out state data */
-	bzero(context, sizeof(*context));
-}
-
-char *SHA384_End(SHA384_CTX* context, char buffer[]) {
-	sha2_byte	digest[SHA384_DIGEST_LENGTH], *d = digest;
-	int		i;
-
-	/* Sanity check: */
-	assert(context != (SHA384_CTX*)0);
-
-	if (buffer != (char*)0) {
-		SHA384_Final(digest, context);
-
-		for (i = 0; i < SHA384_DIGEST_LENGTH; i++) {
-			*buffer++ = sha2_hex_digits[(*d & 0xf0) >> 4];
-			*buffer++ = sha2_hex_digits[*d & 0x0f];
-			d++;
-		}
-		*buffer = (char)0;
-	} else {
-		bzero(context, sizeof(*context));
-	}
-	bzero(digest, SHA384_DIGEST_LENGTH);
-	return buffer;
-}
-
-char* SHA384_Data(const sha2_byte* data, size_t len, char digest[SHA384_DIGEST_STRING_LENGTH]) {
-	SHA384_CTX	context;
-
-	SHA384_Init(&context);
-	SHA384_Update(&context, data, len);
-	return SHA384_End(&context, digest);
-}
-
-/*glue*/
-#ifdef HAVE_EVP_097
-
-/* SHA256 */
-#define data(ctx) ((SHA256_CTX *)(ctx)->md_data)
-static int sha256_init(EVP_MD_CTX *ctx)
-{
-  SHA256_Init(data(ctx));
-  return 1;
-}
-static int sha256_update(EVP_MD_CTX *ctx, const void *data, unsigned long count)
-{
-  SHA256_Update(data(ctx), data, count);
-  return 1;
-}
-static int sha256_final(EVP_MD_CTX *ctx, unsigned char *md)
-{
-  SHA256_Final(md, data(ctx));
-  return 1;
-}
-#undef data
-
-/* SHA384 */
-#define data(ctx) ((SHA384_CTX *)(ctx)->md_data)
-static int sha384_init(EVP_MD_CTX *ctx)
-{
-  SHA384_Init(data(ctx));
-  return 1;
-}
-static int sha384_update(EVP_MD_CTX *ctx, const void *data, unsigned long count)
-{
-  SHA384_Update(data(ctx), data, count);
-  return 1;
-}
-static int sha384_final(EVP_MD_CTX *ctx, unsigned char *md)
-{
-  SHA384_Final(md, data(ctx));
-  return 1;
-}
-#undef data
-
-/* SHA512 */
-#define data(ctx) ((SHA512_CTX *)(ctx)->md_data)
-static int sha512_init(EVP_MD_CTX *ctx)
-{
-  SHA512_Init(data(ctx));
-  return 1;
-}
-static int sha512_update(EVP_MD_CTX *ctx, const void *data, unsigned long count)
-{
-  SHA512_Update(data(ctx), data, count);
-  return 1;
-}
-static int sha512_final(EVP_MD_CTX *ctx, unsigned char *md)
-{
-  SHA512_Final(md, data(ctx));
-  return 1;
-}
-#undef data
-#endif
-
-static struct env_md_st sha2_256_md = {
-	0, /*NID_sha1*/
-	0, /*NID_sha1WithRSAEncryption*/
-	SHA256_DIGEST_LENGTH,
-#ifdef HAVE_EVP_097
-	0,			/* flags */
-	sha256_init,
-	sha256_update,
-	sha256_final,
-	NULL,			/* copy */
-	NULL,			/* cleanup */
-#else
-	SHA256_Init,
-	SHA256_Update,
-	SHA256_Final,
-#endif
-	NULL, NULL, {0, 0, 0, 0},
-	SHA256_BLOCK_LENGTH,
-	sizeof(struct env_md_st *) + sizeof(SHA256_CTX),
-};
-
-struct env_md_st *EVP_sha2_256(void)
-{
-	return(&sha2_256_md);
-}
-
-static struct env_md_st sha2_384_md = {
-	0, /*NID_sha1*/
-	0, /*NID_sha1WithRSAEncryption*/
-	SHA384_DIGEST_LENGTH,
-#ifdef HAVE_EVP_097
-	0,			/* flags */
-	sha384_init,
-	sha384_update,
-	sha384_final,
-	NULL,			/* copy */
-	NULL,			/* cleanup */
-#else
-	SHA384_Init,
-	SHA384_Update,
-	SHA384_Final,
-#endif
-	NULL, NULL, {0, 0, 0, 0},
-	SHA384_BLOCK_LENGTH,
-	sizeof(struct env_md_st *) + sizeof(SHA384_CTX),
-};
-
-struct env_md_st *EVP_sha2_384(void)
-{
-	return(&sha2_384_md);
-}
-
-static struct env_md_st sha2_512_md = {
-	0, /*NID_sha1*/
-	0, /*NID_sha1WithRSAEncryption*/
-	SHA512_DIGEST_LENGTH,
-#ifdef HAVE_EVP_097
-	0,			/* flags */
-	sha512_init,
-	sha512_update,
-	sha512_final,
-	NULL,			/* copy */
-	NULL,			/* cleanup */
-#else
-	SHA512_Init,
-	SHA512_Update,
-	SHA512_Final,
-#endif
-	NULL, NULL, {0, 0, 0, 0}, /*EVP_PKEY_RSA_method*/
-	SHA512_BLOCK_LENGTH,
-	sizeof(struct env_md_st *) + sizeof(SHA512_CTX),
-};
-
-struct env_md_st *EVP_sha2_512(void)
-{
-	return(&sha2_512_md);
-}
diff --git a/src/racoon/missing/crypto/sha2/sha2.h b/src/racoon/missing/crypto/sha2/sha2.h
deleted file mode 100644
index 42bcc2a..0000000
--- a/src/racoon/missing/crypto/sha2/sha2.h
+++ /dev/null
@@ -1,161 +0,0 @@
-/*	$NetBSD: sha2.h,v 1.4 2006/09/09 16:22:36 manu Exp $	*/
-
-/*	$KAME: sha2.h,v 1.2 2001/08/08 22:09:27 sakane Exp $	*/
-
-/*
- * sha2.h
- *
- * Version 1.0.0beta1
- *
- * Written by Aaron D. Gifford <me@aarongifford.com>
- *
- * Copyright 2000 Aaron D. Gifford.  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 copyright holder nor the names of contributors
- *    may be used to endorse or promote products derived from this software
- *    without specific prior written permission.
- * 
- * THIS SOFTWARE IS PROVIDED BY THE AUTHOR(S) AND CONTRIBUTOR(S) ``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 AUTHOR(S) OR CONTRIBUTOR(S) 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.
- *
- */
-
-#ifndef __SHA2_H__
-#define __SHA2_H__
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
-/*** SHA-256/384/512 Various Length Definitions ***********************/
-#define SHA256_BLOCK_LENGTH		64
-#define SHA256_DIGEST_LENGTH		32
-#define SHA256_DIGEST_STRING_LENGTH	(SHA256_DIGEST_LENGTH * 2 + 1)
-#define SHA384_BLOCK_LENGTH		128
-#define SHA384_DIGEST_LENGTH		48
-#define SHA384_DIGEST_STRING_LENGTH	(SHA384_DIGEST_LENGTH * 2 + 1)
-#define SHA512_BLOCK_LENGTH		128
-#define SHA512_DIGEST_LENGTH		64
-#define SHA512_DIGEST_STRING_LENGTH	(SHA512_DIGEST_LENGTH * 2 + 1)
-
-
-/*** SHA-256/384/512 Context Structures *******************************/
-/* NOTE: If your architecture does not define either u_intXX_t types or
- * uintXX_t (from inttypes.h), you may need to define things by hand
- * for your system:
- */
-#if 0
-typedef unsigned char u_int8_t;		/* 1-byte  (8-bits)  */
-typedef unsigned int u_int32_t;		/* 4-bytes (32-bits) */
-typedef unsigned long long u_int64_t;	/* 8-bytes (64-bits) */
-#endif
-
-#ifndef HAVE_SHA2_IN_SHA_H
-/*
- * Most BSD systems already define u_intXX_t types, as does Linux.
- * Some systems, however, like Compaq's Tru64 Unix instead can use
- * uintXX_t types defined by very recent ANSI C standards and included
- * in the file:
- *
- *   #include <inttypes.h>
- *
- * If you choose to use <inttypes.h> then please define: 
- *
- *   #define SHA2_USE_INTTYPES_H
- *
- * Or on the command line during compile:
- *
- *   cc -DSHA2_USE_INTTYPES_H ...
- */
-#if 0 /*def SHA2_USE_INTTYPES_H*/
-
-typedef struct _SHA256_CTX {
-	uint32_t	state[8];
-	uint64_t	bitcount;
-	uint8_t	buffer[SHA256_BLOCK_LENGTH];
-} SHA256_CTX;
-typedef struct _SHA512_CTX {
-	uint64_t	state[8];
-	uint64_t	bitcount[2];
-	uint8_t	buffer[SHA512_BLOCK_LENGTH];
-} SHA512_CTX;
-
-#else /* SHA2_USE_INTTYPES_H */
-
-typedef struct _SHA256_CTX {
-	u_int32_t	state[8];
-	u_int64_t	bitcount;
-	u_int8_t	buffer[SHA256_BLOCK_LENGTH];
-} SHA256_CTX;
-typedef struct _SHA512_CTX {
-	u_int64_t	state[8];
-	u_int64_t	bitcount[2];
-	u_int8_t	buffer[SHA512_BLOCK_LENGTH];
-} SHA512_CTX;
-
-#endif /* SHA2_USE_INTTYPES_H */
-#endif /* HAVE_SHA2_IN_SHA_H */
-
-typedef SHA512_CTX SHA384_CTX;
-
-
-/*** SHA-256/384/512 Function Prototypes ******************************/
-
-#ifndef HAVE_SHA2_IN_SHA_H
-void SHA256_Init __P((SHA256_CTX *));
-void SHA256_Update __P((SHA256_CTX*, const u_int8_t*, size_t));
-void SHA256_Final __P((u_int8_t[SHA256_DIGEST_LENGTH], SHA256_CTX*));
-#endif /* HAVE_SHA2_IN_SHA_H */
-char* SHA256_End __P((SHA256_CTX*, char[SHA256_DIGEST_STRING_LENGTH]));
-char* SHA256_Data __P((const u_int8_t*, size_t, char[SHA256_DIGEST_STRING_LENGTH]));
-
-#ifndef HAVE_SHA2_IN_SHA_H
-void SHA384_Init __P((SHA384_CTX*));
-void SHA384_Update __P((SHA384_CTX*, const u_int8_t*, size_t));
-void SHA384_Final __P((u_int8_t[SHA384_DIGEST_LENGTH], SHA384_CTX*));
-#endif /* HAVE_SHA2_IN_SHA_H */
-char* SHA384_End __P((SHA384_CTX*, char[SHA384_DIGEST_STRING_LENGTH]));
-char* SHA384_Data __P((const u_int8_t*, size_t, char[SHA384_DIGEST_STRING_LENGTH]));
-
-#ifndef HAVE_SHA2_IN_SHA_H
-void SHA512_Init __P((SHA512_CTX*));
-void SHA512_Update __P((SHA512_CTX*, const u_int8_t*, size_t));
-void SHA512_Final __P((u_int8_t[SHA512_DIGEST_LENGTH], SHA512_CTX*));
-#endif /* HAVE_SHA2_IN_SHA_H */
-char* SHA512_End __P((SHA512_CTX*, char[SHA512_DIGEST_STRING_LENGTH]));
-char* SHA512_Data __P((const u_int8_t*, size_t, char[SHA512_DIGEST_STRING_LENGTH]));
-
-struct env_md_st *EVP_sha2_256 __P((void));
-struct env_md_st *EVP_sha2_384 __P((void));
-struct env_md_st *EVP_sha2_512 __P((void));
-
-#ifdef HAVE_SHA2_IN_SHA_H
-#define EVP_sha2_256 EVP_sha256
-#define EVP_sha2_384 EVP_sha384
-#define EVP_sha2_512 EVP_sha512
-#endif
-
-#ifdef	__cplusplus
-}
-#endif /* __cplusplus */
-
-#endif /* __SHA2_H__ */
-
diff --git a/src/racoon/nattraversal.c b/src/racoon/nattraversal.c
deleted file mode 100644
index 9fd4bcd..0000000
--- a/src/racoon/nattraversal.c
+++ /dev/null
@@ -1,528 +0,0 @@
-/*	$NetBSD: nattraversal.c,v 1.6.6.2 2009/05/18 17:01:07 tteras Exp $	*/
-
-/*
- * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
- * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#ifdef __linux__
-#include <linux/udp.h>
-#endif
-#if defined(__NetBSD__) || defined (__FreeBSD__)
-#include <netinet/udp.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "localconf.h"
-#include "remoteconf.h"
-#include "sockmisc.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "oakley.h"
-#include "ipsec_doi.h"
-#include "vendorid.h"
-#include "handler.h"
-#include "crypto_openssl.h"
-#include "schedule.h"
-#include "nattraversal.h"
-#include "grabmyaddr.h"
-
-struct natt_ka_addrs {
-  struct sockaddr	*src;
-  struct sockaddr	*dst;
-  unsigned		in_use;
-
-  TAILQ_ENTRY(natt_ka_addrs) chain;
-};
-
-static TAILQ_HEAD(_natt_ka_addrs, natt_ka_addrs) ka_tree;
-
-/*
- * check if the given vid is NAT-T.
- */
-int
-natt_vendorid (int vid)
-{
-  return (
-#ifdef ENABLE_NATT_00
-	  vid == VENDORID_NATT_00 ||
-#endif
-#ifdef ENABLE_NATT_01
-	  vid == VENDORID_NATT_01 ||
-#endif
-#ifdef ENABLE_NATT_02
-	  vid == VENDORID_NATT_02 ||
-	  vid == VENDORID_NATT_02_N ||
-#endif
-#ifdef ENABLE_NATT_03
-	  vid == VENDORID_NATT_03 ||
-#endif
-#ifdef ENABLE_NATT_04
-	  vid == VENDORID_NATT_04 ||
-#endif
-#ifdef ENABLE_NATT_05
-	  vid == VENDORID_NATT_05 ||
-#endif
-#ifdef ENABLE_NATT_06
-	  vid == VENDORID_NATT_06 ||
-#endif
-#ifdef ENABLE_NATT_07
-	  vid == VENDORID_NATT_07 ||
-#endif
-#ifdef ENABLE_NATT_08
-	  vid == VENDORID_NATT_08 ||
-#endif
-	  /* Always enable NATT RFC if ENABLE_NATT
-	   */
-	  vid == VENDORID_NATT_RFC);
-}
-
-vchar_t *
-natt_hash_addr (struct ph1handle *iph1, struct sockaddr *addr)
-{
-  vchar_t *natd;
-  vchar_t *buf;
-  char *ptr;
-  void *addr_ptr, *addr_port;
-  size_t buf_size, addr_size;
-
-  plog (LLV_INFO, LOCATION, addr, "Hashing %s with algo #%d %s\n",
-	saddr2str(addr), iph1->approval->hashtype, 
-	(iph1->rmconf->nat_traversal == NATT_FORCE)?"(NAT-T forced)":"");
-  
-  if (addr->sa_family == AF_INET) {
-    addr_size = sizeof (struct in_addr);	/* IPv4 address */
-    addr_ptr = &((struct sockaddr_in *)addr)->sin_addr;
-    addr_port = &((struct sockaddr_in *)addr)->sin_port;
-  }
-  else if (addr->sa_family == AF_INET6) {
-    addr_size = sizeof (struct in6_addr);	/* IPv6 address */
-    addr_ptr = &((struct sockaddr_in6 *)addr)->sin6_addr;
-    addr_port = &((struct sockaddr_in6 *)addr)->sin6_port;
-  }
-  else {
-    plog (LLV_ERROR, LOCATION, addr, "Unsupported address family #0x%x\n", addr->sa_family);
-    return NULL;
-  }
-
-  buf_size = 2 * sizeof (cookie_t);	/* CKY-I + CKY+R */
-  buf_size += addr_size + 2;	/* Address + Port */
-  
-  if ((buf = vmalloc (buf_size)) == NULL)
-    return NULL;
-
-  ptr = buf->v;
-  
-  /* Copy-in CKY-I */
-  memcpy (ptr, iph1->index.i_ck, sizeof (cookie_t));
-  ptr += sizeof (cookie_t);
-  
-  /* Copy-in CKY-I */
-  memcpy (ptr, iph1->index.r_ck, sizeof (cookie_t));
-  ptr += sizeof (cookie_t);
-  
-  /* Copy-in Address (or zeroes if NATT_FORCE) */
-  if (iph1->rmconf->nat_traversal == NATT_FORCE)
-    memset (ptr, 0, addr_size);
-  else
-    memcpy (ptr, addr_ptr, addr_size);
-  ptr += addr_size;
-
-  /* Copy-in Port number */
-  memcpy (ptr, addr_port, 2);
-
-  natd = oakley_hash (buf, iph1);
-  vfree(buf);
-
-  return natd;
-}
-
-int 
-natt_compare_addr_hash (struct ph1handle *iph1, vchar_t *natd_received,
-			int natd_seq)
-{
-  vchar_t *natd_computed;
-  u_int32_t flag;
-  int verified = 0;
-
-  if (iph1->rmconf->nat_traversal == NATT_FORCE)
-    return verified;
-
-  if (natd_seq == 0) {
-    natd_computed = natt_hash_addr (iph1, iph1->local);
-    flag = NAT_DETECTED_ME;
-  }
-  else {
-    natd_computed = natt_hash_addr (iph1, iph1->remote);
-    flag = NAT_DETECTED_PEER;
-  }
-
-  if (natd_computed == NULL) {
-	plog(LLV_ERROR, LOCATION, NULL, "natd_computed allocation failed\n");
-	return verified; /* XXX should abort */
-  }
-
-  if (natd_received->l == natd_computed->l &&
-      memcmp (natd_received->v, natd_computed->v, natd_received->l) == 0) {
-    iph1->natt_flags &= ~flag;
-    verified = 1;
-  }
-
-  vfree (natd_computed);
-
-  return verified;
-}
-
-int
-natt_udp_encap (int encmode)
-{
-  return (encmode == IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_RFC || 
-	  encmode == IPSECDOI_ATTR_ENC_MODE_UDPTRNS_RFC ||
-	  encmode == IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_DRAFT ||
-	  encmode == IPSECDOI_ATTR_ENC_MODE_UDPTRNS_DRAFT);
-}
-
-int
-natt_fill_options (struct ph1natt_options *opts, int version)
-{
-  if (! opts)
-    return -1;
-
-  opts->version = version;
-
-  switch (version) {
-    case VENDORID_NATT_00:
-    case VENDORID_NATT_01:
-      opts->float_port = 0; /* No port floating for those drafts */
-      opts->payload_nat_d = ISAKMP_NPTYPE_NATD_DRAFT;
-      opts->payload_nat_oa = ISAKMP_NPTYPE_NATOA_DRAFT;
-      opts->mode_udp_tunnel = IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_DRAFT;
-      opts->mode_udp_transport = IPSECDOI_ATTR_ENC_MODE_UDPTRNS_DRAFT;
-      opts->encaps_type = UDP_ENCAP_ESPINUDP_NON_IKE;
-		break;
-
-    case VENDORID_NATT_02:
-    case VENDORID_NATT_02_N:
-    case VENDORID_NATT_03:
-      opts->float_port = lcconf->port_isakmp_natt;
-      opts->payload_nat_d = ISAKMP_NPTYPE_NATD_DRAFT;
-      opts->payload_nat_oa = ISAKMP_NPTYPE_NATOA_DRAFT;
-      opts->mode_udp_tunnel = IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_DRAFT;
-      opts->mode_udp_transport = IPSECDOI_ATTR_ENC_MODE_UDPTRNS_DRAFT;
-      opts->encaps_type = UDP_ENCAP_ESPINUDP;
-      break;
-    case VENDORID_NATT_04:
-    case VENDORID_NATT_05:
-    case VENDORID_NATT_06:
-    case VENDORID_NATT_07:
-    case VENDORID_NATT_08:
-      opts->float_port = lcconf->port_isakmp_natt;
-      opts->payload_nat_d = ISAKMP_NPTYPE_NATD_BADDRAFT;
-      opts->payload_nat_oa = ISAKMP_NPTYPE_NATOA_BADDRAFT;
-      opts->mode_udp_tunnel = IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_RFC;
-      opts->mode_udp_transport = IPSECDOI_ATTR_ENC_MODE_UDPTRNS_RFC;
-      opts->encaps_type = UDP_ENCAP_ESPINUDP;
-      break;
-    case VENDORID_NATT_RFC:
-      opts->float_port = lcconf->port_isakmp_natt;
-      opts->payload_nat_d = ISAKMP_NPTYPE_NATD_RFC;
-      opts->payload_nat_oa = ISAKMP_NPTYPE_NATOA_RFC;
-      opts->mode_udp_tunnel = IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_RFC;
-      opts->mode_udp_transport = IPSECDOI_ATTR_ENC_MODE_UDPTRNS_RFC;
-      opts->encaps_type = UDP_ENCAP_ESPINUDP;
-	  break;
-    default:
-      plog(LLV_ERROR, LOCATION, NULL, 
-	   "unsupported NAT-T version: %s\n",
-	   vid_string_by_id(version));
-      return -1;
-  }
- 
-  opts->mode_udp_diff = opts->mode_udp_tunnel - IPSECDOI_ATTR_ENC_MODE_TUNNEL;
-
-  return 0;
-}
-
-void
-natt_float_ports (struct ph1handle *iph1)
-{
-	if (! (iph1->natt_flags & NAT_DETECTED) )
-		return;
-	if (! iph1->natt_options->float_port){
-		/* Drafts 00 / 01, just schedule keepalive */
-		natt_keepalive_add_ph1 (iph1);
-		return;
-	}
-	
-	set_port (iph1->local, iph1->natt_options->float_port);
-	set_port (iph1->remote, iph1->natt_options->float_port);
-	iph1->natt_flags |= NAT_PORTS_CHANGED | NAT_ADD_NON_ESP_MARKER;
-	
-	natt_keepalive_add_ph1 (iph1);
-}
-
-void
-natt_handle_vendorid (struct ph1handle *iph1, int vid_numeric)
-{
-  if (! iph1->natt_options)
-    iph1->natt_options = racoon_calloc (1, sizeof (*iph1->natt_options));
-
-  if (! iph1->natt_options) {
-    plog (LLV_ERROR, LOCATION, NULL,
-	  "Allocating memory for natt_options failed!\n");
-    return;
-  }
-  
-  if (iph1->natt_options->version < vid_numeric)
-    if (natt_fill_options (iph1->natt_options, vid_numeric) == 0)
-      iph1->natt_flags |= NAT_ANNOUNCED;
-}
-
-static void
-natt_keepalive_delete (struct natt_ka_addrs *ka)
-{
-  TAILQ_REMOVE (&ka_tree, ka, chain);
-  racoon_free (ka->src);
-  racoon_free (ka->dst);
-  racoon_free (ka);
-}
-
-/* NAT keepalive functions */
-static void
-natt_keepalive_send (void *param)
-{
-  struct natt_ka_addrs	*ka, *next = NULL;
-  char keepalive_packet[] = { 0xff };
-  size_t len;
-  int s;
-
-  for (ka = TAILQ_FIRST(&ka_tree); ka; ka = next) {
-    next = TAILQ_NEXT(ka, chain);
-    
-    s = getsockmyaddr(ka->src);
-    if (s == -1) {
-      natt_keepalive_delete(ka);
-      continue;
-    }
-    plog (LLV_DEBUG, LOCATION, NULL, "KA: %s\n", 
-	  saddr2str_fromto("%s->%s", ka->src, ka->dst));
-    len = sendfromto(s, keepalive_packet, sizeof (keepalive_packet),
-		     ka->src, ka->dst, 1);
-    if (len == -1)
-      plog(LLV_ERROR, LOCATION, NULL, "KA: sendfromto failed: %s\n",
-	   strerror (errno));
-  }
-  
-  sched_new (lcconf->natt_ka_interval, natt_keepalive_send, NULL);
-}
-
-void
-natt_keepalive_init (void)
-{
-  TAILQ_INIT(&ka_tree);
-
-  /* To disable sending KAs set natt_ka_interval=0 */
-  if (lcconf->natt_ka_interval > 0)
-    sched_new (lcconf->natt_ka_interval, natt_keepalive_send, NULL);
-}
-
-int
-natt_keepalive_add (struct sockaddr *src, struct sockaddr *dst)
-{
-  struct natt_ka_addrs *ka = NULL, *new_addr;
-  
-  TAILQ_FOREACH (ka, &ka_tree, chain) {
-    if (cmpsaddrstrict(ka->src, src) == 0 && 
-	cmpsaddrstrict(ka->dst, dst) == 0) {
-      ka->in_use++;
-      plog (LLV_INFO, LOCATION, NULL, "KA found: %s (in_use=%u)\n",
-	    saddr2str_fromto("%s->%s", src, dst), ka->in_use);
-      return 0;
-    }
-  }
-
-  plog (LLV_INFO, LOCATION, NULL, "KA list add: %s\n", saddr2str_fromto("%s->%s", src, dst));
-
-  new_addr = (struct natt_ka_addrs *)racoon_malloc(sizeof(*new_addr));
-  if (! new_addr) {
-    plog (LLV_ERROR, LOCATION, NULL, "Can't allocate new KA list item\n");
-    return -1;
-  }
-
-  if ((new_addr->src = dupsaddr(src)) == NULL) {
-	racoon_free(new_addr);
-    	plog (LLV_ERROR, LOCATION, NULL, "Can't allocate new KA list item\n");
-	return -1;
-  }
-  if ((new_addr->dst = dupsaddr(dst)) == NULL) {
-	racoon_free(new_addr);
-    	plog (LLV_ERROR, LOCATION, NULL, "Can't allocate new KA list item\n");
-	return -1;
-  }
-  new_addr->in_use = 1;
-  TAILQ_INSERT_TAIL(&ka_tree, new_addr, chain);
-
-  return 0;
-}
-
-int
-natt_keepalive_add_ph1 (struct ph1handle *iph1)
-{
-  int ret = 0;
-  
-  /* Should only the NATed host send keepalives?
-     If yes, add '(iph1->natt_flags & NAT_DETECTED_ME)'
-     to the following condition. */
-  if (iph1->natt_flags & NAT_DETECTED &&
-      ! (iph1->natt_flags & NAT_KA_QUEUED)) {
-    ret = natt_keepalive_add (iph1->local, iph1->remote);
-    if (ret == 0)
-      iph1->natt_flags |= NAT_KA_QUEUED;
-  }
-
-  return ret;
-}
-
-void
-natt_keepalive_remove (struct sockaddr *src, struct sockaddr *dst)
-{
-  struct natt_ka_addrs *ka, *next = NULL;
-
-  plog (LLV_INFO, LOCATION, NULL, "KA remove: %s\n", saddr2str_fromto("%s->%s", src, dst));
-
-  for (ka = TAILQ_FIRST(&ka_tree); ka; ka = next) {
-    next = TAILQ_NEXT(ka, chain);
- 
-    plog (LLV_DEBUG, LOCATION, NULL, "KA tree dump: %s (in_use=%u)\n",
-	  saddr2str_fromto("%s->%s", src, dst), ka->in_use);
-
-    if (cmpsaddrstrict(ka->src, src) == 0 && 
-	cmpsaddrstrict(ka->dst, dst) == 0 &&
-	-- ka->in_use <= 0) {
-
-      plog (LLV_DEBUG, LOCATION, NULL, "KA removing this one...\n");
-
-      natt_keepalive_delete (ka);
-      /* Should we break here? Every pair of addresses should 
-         be inserted only once, but who knows :-) Lets traverse 
-	 the whole list... */
-    }
-  }
-}
-
-static struct remoteconf *
-natt_enabled_in_rmconf_stub (struct remoteconf *rmconf, void *data)
-{
-  return (rmconf->nat_traversal ? rmconf : NULL);
-}
-
-int
-natt_enabled_in_rmconf ()
-{
-  return foreachrmconf (natt_enabled_in_rmconf_stub, NULL) != NULL;
-}
-
-
-struct payload_list *
-isakmp_plist_append_natt_vids (struct payload_list *plist, vchar_t *vid_natt[MAX_NATT_VID_COUNT]){
-	int i, vid_natt_i = 0;
-
-	if(vid_natt == NULL)
-		return NULL;
-
-	for (i = 0; i < MAX_NATT_VID_COUNT; i++)
-		vid_natt[i]=NULL;
-	
-	/* Puts the olders VIDs last, as some implementations may choose the first
-	 * NATT VID given
-	 */
-
-	/* Always set RFC VID
-	 */
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_RFC)) != NULL)
-		vid_natt_i++;
-#ifdef ENABLE_NATT_08
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_08)) != NULL)
-		vid_natt_i++;
-#endif
-#ifdef ENABLE_NATT_07
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_07)) != NULL)
-		vid_natt_i++;
-#endif
-#ifdef ENABLE_NATT_06
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_06)) != NULL)
-		vid_natt_i++;
-#endif
-#ifdef ENABLE_NATT_05
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_05)) != NULL)
-		vid_natt_i++;
-#endif
-#ifdef ENABLE_NATT_04
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_04)) != NULL)
-		vid_natt_i++;
-#endif
-#ifdef ENABLE_NATT_03
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_03)) != NULL)
-		vid_natt_i++;
-#endif
-#ifdef ENABLE_NATT_02
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_02)) != NULL)
-		vid_natt_i++;
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_02_N)) != NULL)
-		vid_natt_i++;
-#endif
-#ifdef ENABLE_NATT_01
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_01)) != NULL)
-		vid_natt_i++;
-#endif
-#ifdef ENABLE_NATT_00
-	if ((vid_natt[vid_natt_i] = set_vendorid(VENDORID_NATT_00)) != NULL)
-		vid_natt_i++;
-#endif
-	/* set VID payload for NAT-T */
-	for (i = 0; i < vid_natt_i; i++)
-		plist = isakmp_plist_append(plist, vid_natt[i], ISAKMP_NPTYPE_VID);
-	
-	return plist;
-}
diff --git a/src/racoon/nattraversal.h b/src/racoon/nattraversal.h
deleted file mode 100644
index cec5815..0000000
--- a/src/racoon/nattraversal.h
+++ /dev/null
@@ -1,99 +0,0 @@
-/*	$NetBSD: nattraversal.h,v 1.6 2006/09/09 16:22:09 manu Exp $	*/
-
-/*
- * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
- * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
- * 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.
- */
-
-#ifndef _NATTRAVERSAL_H
-#define _NATTRAVERSAL_H
-
-#include "vendorid.h"
-
-#define	NAT_ANNOUNCED		(1L<<0)
-#define	NAT_DETECTED_ME		(1L<<1)
-#define	NAT_DETECTED_PEER	(1L<<2)
-#define	NAT_PORTS_CHANGED	(1L<<3)
-#define	NAT_KA_QUEUED		(1L<<4)
-#define	NAT_ADD_NON_ESP_MARKER	(1L<<5)
-
-#define	NATT_AVAILABLE(ph1)	((iph1)->natt_flags & NAT_ANNOUNCED)
-
-#define	NAT_DETECTED	(NAT_DETECTED_ME | NAT_DETECTED_PEER)
-
-#define	NON_ESP_MARKER_LEN	sizeof(u_int32_t)
-#define	NON_ESP_MARKER_USE(iph1)	((iph1)->natt_flags & NAT_ADD_NON_ESP_MARKER)
-
-/* These are the values from parsing "remote {}" 
-   block of the config file. */
-#define NATT_OFF	FLASE	/* = 0 */
-#define NATT_ON		TRUE	/* = 1 */
-#define NATT_FORCE	2
-
-struct ph1natt_options {
-  int		version;
-  u_int16_t	float_port;
-  u_int16_t	mode_udp_tunnel;
-  u_int16_t	mode_udp_transport;
-  u_int16_t	encaps_type; /* ESPINUDP / ESPINUDP_NON_IKE */
-  u_int16_t	mode_udp_diff;
-  u_int16_t	payload_nat_d;
-  u_int16_t	payload_nat_oa;
-};
-
-struct ph2natt {
-  u_int8_t	type;
-  u_int16_t	sport;
-  u_int16_t	dport;
-  struct sockaddr	*oa;
-  u_int16_t	frag;
-};
-
-int natt_vendorid (int vid);
-vchar_t *natt_hash_addr (struct ph1handle *iph1, struct sockaddr *addr);
-int natt_compare_addr_hash (struct ph1handle *iph1, vchar_t *natd_received, int natd_seq);
-int natt_udp_encap (int encmode);
-int natt_fill_options (struct ph1natt_options *opts, int version);
-void natt_float_ports (struct ph1handle *iph1);
-void natt_handle_vendorid (struct ph1handle *iph1, int vid_numeric);
-
-
-struct payload_list *
-isakmp_plist_append_natt_vids (struct payload_list *plist, vchar_t *vid_natt[MAX_NATT_VID_COUNT]);
-
-
-/* NAT keepalive functions */
-void natt_keepalive_init (void);
-int natt_keepalive_add (struct sockaddr *src, struct sockaddr *dst);
-int natt_keepalive_add_ph1 (struct ph1handle *iph1);
-void natt_keepalive_remove (struct sockaddr *src, struct sockaddr *dst);
-
-/* Walk through all rmconfigs and tell if NAT-T is enabled in at least one. */
-int natt_enabled_in_rmconf (void);
-
-#endif /* _NATTRAVERSAL_H */
diff --git a/src/racoon/netdb_dnssec.h b/src/racoon/netdb_dnssec.h
deleted file mode 100644
index a11209d..0000000
--- a/src/racoon/netdb_dnssec.h
+++ /dev/null
@@ -1,74 +0,0 @@
-/*	$NetBSD: netdb_dnssec.h,v 1.4 2006/09/09 16:22:09 manu Exp $	*/
-
-/* Id: netdb_dnssec.h,v 1.3 2004/06/11 16:00:17 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _NETDB_DNSSEC_H
-#define _NETDB_DNSSEC_H
-
-#ifndef T_CERT
-#define T_CERT	37		/* defined by RFC2538 section 2 */
-#endif
-
-/* RFC2538 section 2.1 */
-#define DNSSEC_TYPE_PKIX	1
-#define DNSSEC_TYPE_SPKI	2
-#define DNSSEC_TYPE_PGP		3
-#define DNSSEC_TYPE_URI		4
-#define DNSSEC_TYPE_OID		5
-
-/* RFC2535 section 3.2 */
-#define DNSSEC_ALG_RSAMD5	1
-#define DNSSEC_ALG_DH		2
-#define DNSSEC_ALG_DSA		3
-#define DNSSEC_ALG_ECC		4
-#define DNSSEC_ALG_PRIVATEDNS	5
-#define DNSSEC_ALG_PRIVATEOID	6
-
-/*
- * Structures returned by network data base library.  All addresses are
- * supplied in host order, and returned in network order (suitable for
- * use in system calls).
- */
-struct certinfo {
-	int ci_type;			/* certificate type */
-	int ci_keytag;			/* keytag */
-	int ci_algorithm;		/* algorithm */
-	int ci_flags;			/* currently, 1:valid or 0:uncertain */
-	size_t ci_certlen;		/* length of certificate */
-	char *ci_cert;			/* certificate */
-	struct certinfo *ci_next;	/* next structure */
-};
-
-extern void freecertinfo __P((struct certinfo *));
-extern int getcertsbyname __P((char *, struct certinfo **));
-
-#endif /* _NETDB_DNSSEC_H */
diff --git a/src/racoon/oakley.c b/src/racoon/oakley.c
deleted file mode 100644
index 5b6ad46..0000000
--- a/src/racoon/oakley.c
+++ /dev/null
@@ -1,3429 +0,0 @@
-/*	$NetBSD: oakley.c,v 1.9.6.4 2009/08/13 09:18:45 vanhu Exp $	*/
-
-/* Id: oakley.c,v 1.32 2006/05/26 12:19:46 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>	/* XXX for subjectaltname */
-#include <netinet/in.h>	/* XXX for subjectaltname */
-
-#include <openssl/x509.h>
-#include <openssl/err.h>
-
-#if !defined(OPENSSL_IS_BORINGSSL)
-#include <openssl/engine.h>
-#include <openssl/pkcs7.h>
-#else
-#include <openssl/bytestring.h>
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "str2val.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "isakmp_var.h"
-#include "isakmp.h"
-#ifdef ENABLE_HYBRID
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h" 
-#endif                
-#include "oakley.h"
-#include "admin.h"
-#include "privsep.h"
-#include "localconf.h"
-#include "remoteconf.h"
-#include "policy.h"
-#include "handler.h"
-#include "ipsec_doi.h"
-#include "algorithm.h"
-#include "dhgroup.h"
-#include "sainfo.h"
-#include "proposal.h"
-#include "crypto_openssl.h"
-#include "dnssec.h"
-#include "sockmisc.h"
-#include "strnames.h"
-#include "gcmalloc.h"
-#include "rsalist.h"
-
-#ifdef HAVE_GSSAPI
-#include "gssapi.h"
-#endif
-
-#define OUTBOUND_SA	0
-#define INBOUND_SA	1
-
-#define INITDHVAL(a, s, d, t)                                                  \
-do {                                                                           \
-	vchar_t buf;                                                           \
-	buf.v = str2val((s), 16, &buf.l);                                      \
-	memset(&a, 0, sizeof(struct dhgroup));                                 \
-	a.type = (t);                                                          \
-	a.prime = vdup(&buf);                                                  \
-	a.gen1 = 2;                                                            \
-	a.gen2 = 0;                                                            \
-	racoon_free(buf.v);                                                    \
-} while(0);
-
-struct dhgroup dh_modp768;
-struct dhgroup dh_modp1024;
-struct dhgroup dh_modp1536;
-struct dhgroup dh_modp2048;
-struct dhgroup dh_modp3072;
-struct dhgroup dh_modp4096;
-struct dhgroup dh_modp6144;
-struct dhgroup dh_modp8192;
-
-
-static int oakley_check_dh_pub __P((vchar_t *, vchar_t **));
-static int oakley_compute_keymat_x __P((struct ph2handle *, int, int));
-static int get_cert_fromlocal __P((struct ph1handle *, int));
-static int get_plainrsa_fromlocal __P((struct ph1handle *, int));
-static int oakley_check_certid __P((struct ph1handle *iph1));
-static int check_typeofcertname __P((int, int));
-static cert_t *save_certbuf __P((struct isakmp_gen *));
-static cert_t *save_certx509 __P((X509 *));
-static int oakley_padlen __P((int, int));
-
-int
-oakley_get_defaultlifetime()
-{
-	return OAKLEY_ATTR_SA_LD_SEC_DEFAULT;
-}
-
-int
-oakley_dhinit()
-{
-	/* set DH MODP */
-	INITDHVAL(dh_modp768, OAKLEY_PRIME_MODP768,
-		OAKLEY_ATTR_GRP_DESC_MODP768, OAKLEY_ATTR_GRP_TYPE_MODP);
-	INITDHVAL(dh_modp1024, OAKLEY_PRIME_MODP1024,
-		OAKLEY_ATTR_GRP_DESC_MODP1024, OAKLEY_ATTR_GRP_TYPE_MODP);
-	INITDHVAL(dh_modp1536, OAKLEY_PRIME_MODP1536,
-		OAKLEY_ATTR_GRP_DESC_MODP1536, OAKLEY_ATTR_GRP_TYPE_MODP);
-	INITDHVAL(dh_modp2048, OAKLEY_PRIME_MODP2048,
-		OAKLEY_ATTR_GRP_DESC_MODP2048, OAKLEY_ATTR_GRP_TYPE_MODP);
-	INITDHVAL(dh_modp3072, OAKLEY_PRIME_MODP3072,
-		OAKLEY_ATTR_GRP_DESC_MODP3072, OAKLEY_ATTR_GRP_TYPE_MODP);
-	INITDHVAL(dh_modp4096, OAKLEY_PRIME_MODP4096,
-		OAKLEY_ATTR_GRP_DESC_MODP4096, OAKLEY_ATTR_GRP_TYPE_MODP);
-	INITDHVAL(dh_modp6144, OAKLEY_PRIME_MODP6144,
-		OAKLEY_ATTR_GRP_DESC_MODP6144, OAKLEY_ATTR_GRP_TYPE_MODP);
-	INITDHVAL(dh_modp8192, OAKLEY_PRIME_MODP8192,
-		OAKLEY_ATTR_GRP_DESC_MODP8192, OAKLEY_ATTR_GRP_TYPE_MODP);
-
-	return 0;
-}
-
-void
-oakley_dhgrp_free(dhgrp)
-	struct dhgroup *dhgrp;
-{
-	if (dhgrp->prime)
-		vfree(dhgrp->prime);
-	if (dhgrp->curve_a)
-		vfree(dhgrp->curve_a);
-	if (dhgrp->curve_b)
-		vfree(dhgrp->curve_b);
-	if (dhgrp->order)
-		vfree(dhgrp->order);
-	racoon_free(dhgrp);
-}
-
-/*
- * RFC2409 5
- * The length of the Diffie-Hellman public value MUST be equal to the
- * length of the prime modulus over which the exponentiation was
- * performed, prepending zero bits to the value if necessary.
- */
-static int
-oakley_check_dh_pub(prime, pub0)
-	vchar_t *prime, **pub0;
-{
-	vchar_t *tmp;
-	vchar_t *pub = *pub0;
-
-	if (prime->l == pub->l)
-		return 0;
-
-	if (prime->l < pub->l) {
-		/* what should i do ? */
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid public information was generated.\n");
-		return -1;
-	}
-
-	/* prime->l > pub->l */
-	tmp = vmalloc(prime->l);
-	if (tmp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get DH buffer.\n");
-		return -1;
-	}
-	memcpy(tmp->v + prime->l - pub->l, pub->v, pub->l);
-
-	vfree(*pub0);
-	*pub0 = tmp;
-
-	return 0;
-}
-
-/*
- * compute sharing secret of DH
- * IN:	*dh, *pub, *priv, *pub_p
- * OUT: **gxy
- */
-int
-oakley_dh_compute(dh, pub, priv, pub_p, gxy)
-	const struct dhgroup *dh;
-	vchar_t *pub, *priv, *pub_p, **gxy;
-{
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-	if ((*gxy = vmalloc(dh->prime->l)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get DH buffer.\n");
-		return -1;
-	}
-
-#ifdef ENABLE_STATS
-	gettimeofday(&start, NULL);
-#endif
-	switch (dh->type) {
-	case OAKLEY_ATTR_GRP_TYPE_MODP:
-		if (eay_dh_compute(dh->prime, dh->gen1, pub, priv, pub_p, gxy) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to compute dh value.\n");
-			return -1;
-		}
-		break;
-	case OAKLEY_ATTR_GRP_TYPE_ECP:
-	case OAKLEY_ATTR_GRP_TYPE_EC2N:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"dh type %d isn't supported.\n", dh->type);
-		return -1;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid dh type %d.\n", dh->type);
-		return -1;
-	}
-
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s%zu): %8.6f", __func__,
-		s_attr_isakmp_group(dh->type), dh->prime->l << 3,
-		timedelta(&start, &end));
-#endif
-
-	plog(LLV_DEBUG, LOCATION, NULL, "compute DH's shared.\n");
-	plogdump(LLV_DEBUG, (*gxy)->v, (*gxy)->l);
-
-	return 0;
-}
-
-/*
- * generate values of DH
- * IN:	*dh
- * OUT: **pub, **priv
- */
-int
-oakley_dh_generate(dh, pub, priv)
-	const struct dhgroup *dh;
-	vchar_t **pub, **priv;
-{
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-	gettimeofday(&start, NULL);
-#endif
-	switch (dh->type) {
-	case OAKLEY_ATTR_GRP_TYPE_MODP:
-		if (eay_dh_generate(dh->prime, dh->gen1, dh->gen2, pub, priv) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to compute dh value.\n");
-			return -1;
-		}
-		break;
-
-	case OAKLEY_ATTR_GRP_TYPE_ECP:
-	case OAKLEY_ATTR_GRP_TYPE_EC2N:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"dh type %d isn't supported.\n", dh->type);
-		return -1;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid dh type %d.\n", dh->type);
-		return -1;
-	}
-
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s%zu): %8.6f", __func__,
-		s_attr_isakmp_group(dh->type), dh->prime->l << 3,
-		timedelta(&start, &end));
-#endif
-
-	if (oakley_check_dh_pub(dh->prime, pub) != 0)
-		return -1;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "compute DH's private.\n");
-	plogdump(LLV_DEBUG, (*priv)->v, (*priv)->l);
-	plog(LLV_DEBUG, LOCATION, NULL, "compute DH's public.\n");
-	plogdump(LLV_DEBUG, (*pub)->v, (*pub)->l);
-
-	return 0;
-}
-
-/*
- * copy pre-defined dhgroup values.
- */
-int
-oakley_setdhgroup(group, dhgrp)
-	int group;
-	struct dhgroup **dhgrp;
-{
-	struct dhgroup *g;
-
-	*dhgrp = NULL;	/* just make sure, initialize */
-
-	g = alg_oakley_dhdef_group(group);
-	if (g == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid DH parameter grp=%d.\n", group);
-		return -1;
-	}
-
-	if (!g->type || !g->prime || !g->gen1) {
-		/* unsuported */
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unsupported DH parameters grp=%d.\n", group);
-		return -1;
-	}
-
-	*dhgrp = racoon_calloc(1, sizeof(struct dhgroup));
-	if (*dhgrp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get DH buffer.\n");
-		return 0;
-	}
-
-	/* set defined dh vlaues */
-	memcpy(*dhgrp, g, sizeof(*g));
-	(*dhgrp)->prime = vdup(g->prime);
-
-	return 0;
-}
-
-/*
- * PRF
- *
- * NOTE: we do not support prf with different input/output bitwidth,
- * so we do not implement RFC2409 Appendix B (DOORAK-MAC example) in
- * oakley_compute_keymat().  If you add support for such prf function,
- * modify oakley_compute_keymat() accordingly.
- */
-vchar_t *
-oakley_prf(key, buf, iph1)
-	vchar_t *key, *buf;
-	struct ph1handle *iph1;
-{
-	vchar_t *res = NULL;
-	int type;
-
-	if (iph1->approval == NULL) {
-		/*
-		 * it's before negotiating hash algorithm.
-		 * We use md5 as default.
-		 */
-		type = OAKLEY_ATTR_HASH_ALG_MD5;
-	} else
-		type = iph1->approval->hashtype;
-
-	res = alg_oakley_hmacdef_one(type, key, buf);
-	if (res == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid hmac algorithm %d.\n", type);
-		return NULL;
-	}
-
-	return res;
-}
-
-/*
- * hash
- */
-vchar_t *
-oakley_hash(buf, iph1)
-	vchar_t *buf;
-	struct ph1handle *iph1;
-{
-	vchar_t *res = NULL;
-	int type;
-
-	if (iph1->approval == NULL) {
-		/*
-		 * it's before negotiating hash algorithm.
-		 * We use md5 as default.
-		 */
-		type = OAKLEY_ATTR_HASH_ALG_MD5;
-	} else
-		type = iph1->approval->hashtype;
-
-	res = alg_oakley_hashdef_one(type, buf);
-	if (res == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid hash algoriym %d.\n", type);
-		return NULL;
-	}
-
-	return res;
-}
-
-/*
- * compute KEYMAT
- *   see seciton 5.5 Phase 2 - Quick Mode in isakmp-oakley-05.
- */
-int
-oakley_compute_keymat(iph2, side)
-	struct ph2handle *iph2;
-	int side;
-{
-	int error = -1;
-
-	/* compute sharing secret of DH when PFS */
-	if (iph2->approval->pfs_group && iph2->dhpub_p) {
-		if (oakley_dh_compute(iph2->pfsgrp, iph2->dhpub,
-				iph2->dhpriv, iph2->dhpub_p, &iph2->dhgxy) < 0)
-			goto end;
-	}
-
-	/* compute keymat */
-	if (oakley_compute_keymat_x(iph2, side, INBOUND_SA) < 0
-	 || oakley_compute_keymat_x(iph2, side, OUTBOUND_SA) < 0)
-		goto end;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "KEYMAT computed.\n");
-
-	error = 0;
-
-end:
-	return error;
-}
-
-/*
- * compute KEYMAT.
- * KEYMAT = prf(SKEYID_d, protocol | SPI | Ni_b | Nr_b).
- * If PFS is desired and KE payloads were exchanged,
- *   KEYMAT = prf(SKEYID_d, g(qm)^xy | protocol | SPI | Ni_b | Nr_b)
- *
- * NOTE: we do not support prf with different input/output bitwidth,
- * so we do not implement RFC2409 Appendix B (DOORAK-MAC example).
- */
-static int
-oakley_compute_keymat_x(iph2, side, sa_dir)
-	struct ph2handle *iph2;
-	int side;
-	int sa_dir;
-{
-	vchar_t *buf = NULL, *res = NULL, *bp;
-	char *p;
-	int len;
-	int error = -1;
-	int pfs = 0;
-	int dupkeymat;	/* generate K[1-dupkeymat] */
-	struct saproto *pr;
-	struct satrns *tr;
-	int encklen, authklen, l;
-
-	pfs = ((iph2->approval->pfs_group && iph2->dhgxy) ? 1 : 0);
-	
-	len = pfs ? iph2->dhgxy->l : 0;
-	len += (1
-		+ sizeof(u_int32_t)	/* XXX SPI size */
-		+ iph2->nonce->l
-		+ iph2->nonce_p->l);
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get keymat buffer.\n");
-		goto end;
-	}
-
-	for (pr = iph2->approval->head; pr != NULL; pr = pr->next) {
-		p = buf->v;
-
-		/* if PFS */
-		if (pfs) {
-			memcpy(p, iph2->dhgxy->v, iph2->dhgxy->l);
-			p += iph2->dhgxy->l;
-		}
-
-		p[0] = pr->proto_id;
-		p += 1;
-
-		memcpy(p, (sa_dir == INBOUND_SA ? &pr->spi : &pr->spi_p),
-			sizeof(pr->spi));
-		p += sizeof(pr->spi);
-
-		bp = (side == INITIATOR ? iph2->nonce : iph2->nonce_p);
-		memcpy(p, bp->v, bp->l);
-		p += bp->l;
-
-		bp = (side == INITIATOR ? iph2->nonce_p : iph2->nonce);
-		memcpy(p, bp->v, bp->l);
-		p += bp->l;
-
-		/* compute IV */
-		plog(LLV_DEBUG, LOCATION, NULL, "KEYMAT compute with\n");
-		plogdump(LLV_DEBUG, buf->v, buf->l);
-
-		/* res = K1 */
-		res = oakley_prf(iph2->ph1->skeyid_d, buf, iph2->ph1);
-		if (res == NULL)
-			goto end;
-
-		/* compute key length needed */
-		encklen = authklen = 0;
-		switch (pr->proto_id) {
-		case IPSECDOI_PROTO_IPSEC_ESP:
-			for (tr = pr->head; tr; tr = tr->next) {
-				l = alg_ipsec_encdef_keylen(tr->trns_id,
-				    tr->encklen);
-				if (l > encklen)
-					encklen = l;
-
-				l = alg_ipsec_hmacdef_hashlen(tr->authtype);
-				if (l > authklen)
-					authklen = l;
-			}
-			break;
-		case IPSECDOI_PROTO_IPSEC_AH:
-			for (tr = pr->head; tr; tr = tr->next) {
-				l = alg_ipsec_hmacdef_hashlen(tr->trns_id);
-				if (l > authklen)
-					authklen = l;
-			}
-			break;
-		default:
-			break;
-		}
-		plog(LLV_DEBUG, LOCATION, NULL, "encklen=%d authklen=%d\n",
-			encklen, authklen);
-
-		dupkeymat = (encklen + authklen) / 8 / res->l;
-		dupkeymat += 2;	/* safety mergin */
-		if (dupkeymat < 3)
-			dupkeymat = 3;
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"generating %zu bits of key (dupkeymat=%d)\n",
-			dupkeymat * 8 * res->l, dupkeymat);
-		if (0 < --dupkeymat) {
-			vchar_t *prev = res;	/* K(n-1) */
-			vchar_t *seed = NULL;	/* seed for Kn */
-			size_t l;
-
-			/*
-			 * generating long key (isakmp-oakley-08 5.5)
-			 *   KEYMAT = K1 | K2 | K3 | ...
-			 * where
-			 *   src = [ g(qm)^xy | ] protocol | SPI | Ni_b | Nr_b
-			 *   K1 = prf(SKEYID_d, src)
-			 *   K2 = prf(SKEYID_d, K1 | src)
-			 *   K3 = prf(SKEYID_d, K2 | src)
-			 *   Kn = prf(SKEYID_d, K(n-1) | src)
-			 */
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"generating K1...K%d for KEYMAT.\n",
-				dupkeymat + 1);
-
-			seed = vmalloc(prev->l + buf->l);
-			if (seed == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to get keymat buffer.\n");
-				if (prev && prev != res)
-					vfree(prev);
-				goto end;
-			}
-
-			while (dupkeymat--) {
-				vchar_t *this = NULL;	/* Kn */
-				int update_prev;
-
-				memcpy(seed->v, prev->v, prev->l);
-				memcpy(seed->v + prev->l, buf->v, buf->l);
-				this = oakley_prf(iph2->ph1->skeyid_d, seed,
-							iph2->ph1);
-				if (!this) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"oakley_prf memory overflow\n");
-					if (prev && prev != res)
-						vfree(prev);
-					vfree(this);
-					vfree(seed);
-					goto end;
-				}
-
-				update_prev = (prev && prev == res) ? 1 : 0;
-
-				l = res->l;
-				res = vrealloc(res, l + this->l);
-
-				if (update_prev)
-					prev = res;
-
-				if (res == NULL) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"failed to get keymat buffer.\n");
-					if (prev && prev != res)
-						vfree(prev);
-					vfree(this);
-					vfree(seed);
-					goto end;
-				}
-				memcpy(res->v + l, this->v, this->l);
-
-				if (prev && prev != res)
-					vfree(prev);
-				prev = this;
-				this = NULL;
-			}
-
-			if (prev && prev != res)
-				vfree(prev);
-			vfree(seed);
-		}
-
-		plogdump(LLV_DEBUG, res->v, res->l);
-
-		if (sa_dir == INBOUND_SA)
-			pr->keymat = res;
-		else
-			pr->keymat_p = res;
-		res = NULL;
-	}
-
-	error = 0;
-
-end:
-	if (error) {
-		for (pr = iph2->approval->head; pr != NULL; pr = pr->next) {
-			if (pr->keymat) {
-				vfree(pr->keymat);
-				pr->keymat = NULL;
-			}
-			if (pr->keymat_p) {
-				vfree(pr->keymat_p);
-				pr->keymat_p = NULL;
-			}
-		}
-	}
-
-	if (buf != NULL)
-		vfree(buf);
-	if (res)
-		vfree(res);
-
-	return error;
-}
-
-#if notyet
-/*
- * NOTE: Must terminate by NULL.
- */
-vchar_t *
-oakley_compute_hashx(struct ph1handle *iph1, ...)
-{
-	vchar_t *buf, *res;
-	vchar_t *s;
-	caddr_t p;
-	int len;
-
-	va_list ap;
-
-	/* get buffer length */
-	va_start(ap, iph1);
-	len = 0;
-        while ((s = va_arg(ap, vchar_t *)) != NULL) {
-		len += s->l
-        }
-	va_end(ap);
-
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get hash buffer\n");
-		return NULL;
-	}
-
-	/* set buffer */
-	va_start(ap, iph1);
-	p = buf->v;
-        while ((s = va_arg(ap, char *)) != NULL) {
-		memcpy(p, s->v, s->l);
-		p += s->l;
-	}
-	va_end(ap);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH with: \n");
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-	/* compute HASH */
-	res = oakley_prf(iph1->skeyid_a, buf, iph1);
-	vfree(buf);
-	if (res == NULL)
-		return NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH computed:\n");
-	plogdump(LLV_DEBUG, res->v, res->l);
-
-	return res;
-}
-#endif
-
-/*
- * compute HASH(3) prf(SKEYID_a, 0 | M-ID | Ni_b | Nr_b)
- *   see seciton 5.5 Phase 2 - Quick Mode in isakmp-oakley-05.
- */
-vchar_t *
-oakley_compute_hash3(iph1, msgid, body)
-	struct ph1handle *iph1;
-	u_int32_t msgid;
-	vchar_t *body;
-{
-	vchar_t *buf = 0, *res = 0;
-	int len;
-	int error = -1;
-
-	/* create buffer */
-	len = 1 + sizeof(u_int32_t) + body->l;
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"failed to get hash buffer\n");
-		goto end;
-	}
-
-	buf->v[0] = 0;
-
-	memcpy(buf->v + 1, (char *)&msgid, sizeof(msgid));
-
-	memcpy(buf->v + 1 + sizeof(u_int32_t), body->v, body->l);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH with: \n");
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-	/* compute HASH */
-	res = oakley_prf(iph1->skeyid_a, buf, iph1);
-	if (res == NULL)
-		goto end;
-
-	error = 0;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH computed:\n");
-	plogdump(LLV_DEBUG, res->v, res->l);
-
-end:
-	if (buf != NULL)
-		vfree(buf);
-	return res;
-}
-
-/*
- * compute HASH type of prf(SKEYID_a, M-ID | buffer)
- *	e.g.
- *	for quick mode HASH(1):
- *		prf(SKEYID_a, M-ID | SA | Ni [ | KE ] [ | IDci | IDcr ])
- *	for quick mode HASH(2):
- *		prf(SKEYID_a, M-ID | Ni_b | SA | Nr [ | KE ] [ | IDci | IDcr ])
- *	for Informational exchange:
- *		prf(SKEYID_a, M-ID | N/D)
- */
-vchar_t *
-oakley_compute_hash1(iph1, msgid, body)
-	struct ph1handle *iph1;
-	u_int32_t msgid;
-	vchar_t *body;
-{
-	vchar_t *buf = NULL, *res = NULL;
-	char *p;
-	int len;
-	int error = -1;
-
-	/* create buffer */
-	len = sizeof(u_int32_t) + body->l;
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"failed to get hash buffer\n");
-		goto end;
-	}
-
-	p = buf->v;
-
-	memcpy(buf->v, (char *)&msgid, sizeof(msgid));
-	p += sizeof(u_int32_t);
-
-	memcpy(p, body->v, body->l);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH with:\n");
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-	/* compute HASH */
-	res = oakley_prf(iph1->skeyid_a, buf, iph1);
-	if (res == NULL)
-		goto end;
-
-	error = 0;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH computed:\n");
-	plogdump(LLV_DEBUG, res->v, res->l);
-
-end:
-	if (buf != NULL)
-		vfree(buf);
-	return res;
-}
-
-/*
- * compute phase1 HASH
- * main/aggressive
- *   I-digest = prf(SKEYID, g^i | g^r | CKY-I | CKY-R | SAi_b | ID_i1_b)
- *   R-digest = prf(SKEYID, g^r | g^i | CKY-R | CKY-I | SAi_b | ID_r1_b)
- * for gssapi, also include all GSS tokens, and call gss_wrap on the result
- */
-vchar_t *
-oakley_ph1hash_common(iph1, sw)
-	struct ph1handle *iph1;
-	int sw;
-{
-	vchar_t *buf = NULL, *res = NULL, *bp;
-	char *p, *bp2;
-	int len, bl;
-	int error = -1;
-#ifdef HAVE_GSSAPI
-	vchar_t *gsstokens = NULL;
-#endif
-
-	/* create buffer */
-	len = iph1->dhpub->l
-		+ iph1->dhpub_p->l
-		+ sizeof(cookie_t) * 2
-		+ iph1->sa->l
-		+ (sw == GENERATE ? iph1->id->l : iph1->id_p->l);
-
-#ifdef HAVE_GSSAPI
-	if (AUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB) {
-		if (iph1->gi_i != NULL && iph1->gi_r != NULL) {
-			bp = (sw == GENERATE ? iph1->gi_i : iph1->gi_r);
-			len += bp->l;
-		}
-		if (sw == GENERATE)
-			gssapi_get_itokens(iph1, &gsstokens);
-		else
-			gssapi_get_rtokens(iph1, &gsstokens);
-		if (gsstokens == NULL)
-			return NULL;
-		len += gsstokens->l;
-	}
-#endif
-
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get hash buffer\n");
-		goto end;
-	}
-
-	p = buf->v;
-
-	bp = (sw == GENERATE ? iph1->dhpub : iph1->dhpub_p);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	bp = (sw == GENERATE ? iph1->dhpub_p : iph1->dhpub);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	if (iph1->side == INITIATOR)
-		bp2 = (sw == GENERATE ?
-		      (char *)&iph1->index.i_ck : (char *)&iph1->index.r_ck);
-	else
-		bp2 = (sw == GENERATE ?
-		      (char *)&iph1->index.r_ck : (char *)&iph1->index.i_ck);
-	bl = sizeof(cookie_t);
-	memcpy(p, bp2, bl);
-	p += bl;
-
-	if (iph1->side == INITIATOR)
-		bp2 = (sw == GENERATE ?
-		      (char *)&iph1->index.r_ck : (char *)&iph1->index.i_ck);
-	else
-		bp2 = (sw == GENERATE ?
-		      (char *)&iph1->index.i_ck : (char *)&iph1->index.r_ck);
-	bl = sizeof(cookie_t);
-	memcpy(p, bp2, bl);
-	p += bl;
-
-	bp = iph1->sa;
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	bp = (sw == GENERATE ? iph1->id : iph1->id_p);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-#ifdef HAVE_GSSAPI
-	if (AUTHMETHOD(iph1) == OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB) {
-		if (iph1->gi_i != NULL && iph1->gi_r != NULL) {
-			bp = (sw == GENERATE ? iph1->gi_i : iph1->gi_r);
-			memcpy(p, bp->v, bp->l);
-			p += bp->l;
-		}
-		memcpy(p, gsstokens->v, gsstokens->l);
-		p += gsstokens->l;
-	}
-#endif
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH with:\n");
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-	/* compute HASH */
-	res = oakley_prf(iph1->skeyid, buf, iph1);
-	if (res == NULL)
-		goto end;
-
-	error = 0;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH (%s) computed:\n",
-		iph1->side == INITIATOR ? "init" : "resp");
-	plogdump(LLV_DEBUG, res->v, res->l);
-
-end:
-	if (buf != NULL)
-		vfree(buf);
-#ifdef HAVE_GSSAPI
-	if (gsstokens != NULL)
-		vfree(gsstokens);
-#endif
-	return res;
-}
-
-/*
- * compute HASH_I on base mode.
- * base:psk,rsa
- *   HASH_I = prf(SKEYID, g^xi | CKY-I | CKY-R | SAi_b | IDii_b)
- * base:sig
- *   HASH_I = prf(hash(Ni_b | Nr_b), g^xi | CKY-I | CKY-R | SAi_b | IDii_b)
- */
-vchar_t *
-oakley_ph1hash_base_i(iph1, sw)
-	struct ph1handle *iph1;
-	int sw;
-{
-	vchar_t *buf = NULL, *res = NULL, *bp;
-	vchar_t *hashkey = NULL;
-	vchar_t *hash = NULL;	/* for signature mode */
-	char *p;
-	int len;
-	int error = -1;
-
-	/* sanity check */
-	if (iph1->etype != ISAKMP_ETYPE_BASE) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid etype for this hash function\n");
-		return NULL;
-	}
-
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-	case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-#endif
-		if (iph1->skeyid == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, "no SKEYID found.\n");
-			return NULL;
-		}
-		hashkey = iph1->skeyid;
-		break;
-
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef HAVE_GSSAPI
-	case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-#endif
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-#endif
-		/* make hash for seed */
-		len = iph1->nonce->l + iph1->nonce_p->l;
-		buf = vmalloc(len);
-		if (buf == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get hash buffer\n");
-			goto end;
-		}
-		p = buf->v;
-
-		bp = (sw == GENERATE ? iph1->nonce_p : iph1->nonce);
-		memcpy(p, bp->v, bp->l);
-		p += bp->l;
-
-		bp = (sw == GENERATE ? iph1->nonce : iph1->nonce_p);
-		memcpy(p, bp->v, bp->l);
-		p += bp->l;
-
-		hash = oakley_hash(buf, iph1);
-		if (hash == NULL)
-			goto end;
-		vfree(buf);
-		buf = NULL;
-
-		hashkey = hash;
-		break;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"not supported authentication method %d\n",
-			iph1->approval->authmethod);
-		return NULL;
-
-	}
-
-	len = (sw == GENERATE ? iph1->dhpub->l : iph1->dhpub_p->l)
-		+ sizeof(cookie_t) * 2
-		+ iph1->sa->l
-		+ (sw == GENERATE ? iph1->id->l : iph1->id_p->l);
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get hash buffer\n");
-		goto end;
-	}
-	p = buf->v;
-
-	bp = (sw == GENERATE ? iph1->dhpub : iph1->dhpub_p);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	memcpy(p, &iph1->index.i_ck, sizeof(cookie_t));
-	p += sizeof(cookie_t);
-	memcpy(p, &iph1->index.r_ck, sizeof(cookie_t));
-	p += sizeof(cookie_t);
-
-	memcpy(p, iph1->sa->v, iph1->sa->l);
-	p += iph1->sa->l;
-
-	bp = (sw == GENERATE ? iph1->id : iph1->id_p);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH_I with:\n");
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-	/* compute HASH */
-	res = oakley_prf(hashkey, buf, iph1);
-	if (res == NULL)
-		goto end;
-
-	error = 0;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH_I computed:\n");
-	plogdump(LLV_DEBUG, res->v, res->l);
-
-end:
-	if (hash != NULL)
-		vfree(hash);
-	if (buf != NULL)
-		vfree(buf);
-	return res;
-}
-
-/*
- * compute HASH_R on base mode for signature method.
- * base:
- * HASH_R = prf(hash(Ni_b | Nr_b), g^xi | g^xr | CKY-I | CKY-R | SAi_b | IDii_b)
- */
-vchar_t *
-oakley_ph1hash_base_r(iph1, sw)
-	struct ph1handle *iph1;
-	int sw;
-{
-	vchar_t *buf = NULL, *res = NULL, *bp;
-	vchar_t *hash = NULL;
-	char *p;
-	int len;
-	int error = -1;
-
-	/* sanity check */
-	if (iph1->etype != ISAKMP_ETYPE_BASE) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid etype for this hash function\n");
-		return NULL;
-	}
-
-	switch(AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-	case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-#endif
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"not supported authentication method %d\n",
-			iph1->approval->authmethod);
-		return NULL;
-		break;
-	}
-
-	/* make hash for seed */
-	len = iph1->nonce->l + iph1->nonce_p->l;
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get hash buffer\n");
-		goto end;
-	}
-	p = buf->v;
-
-	bp = (sw == GENERATE ? iph1->nonce_p : iph1->nonce);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	bp = (sw == GENERATE ? iph1->nonce : iph1->nonce_p);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	hash = oakley_hash(buf, iph1);
-	if (hash == NULL)
-		goto end;
-	vfree(buf);
-	buf = NULL;
-
-	/* make really hash */
-	len = (sw == GENERATE ? iph1->dhpub_p->l : iph1->dhpub->l)
-		+ (sw == GENERATE ? iph1->dhpub->l : iph1->dhpub_p->l)
-		+ sizeof(cookie_t) * 2
-		+ iph1->sa->l
-		+ (sw == GENERATE ? iph1->id_p->l : iph1->id->l);
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get hash buffer\n");
-		goto end;
-	}
-	p = buf->v;
-
-
-	bp = (sw == GENERATE ? iph1->dhpub_p : iph1->dhpub);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	bp = (sw == GENERATE ? iph1->dhpub : iph1->dhpub_p);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	memcpy(p, &iph1->index.i_ck, sizeof(cookie_t));
-	p += sizeof(cookie_t);
-	memcpy(p, &iph1->index.r_ck, sizeof(cookie_t));
-	p += sizeof(cookie_t);
-
-	memcpy(p, iph1->sa->v, iph1->sa->l);
-	p += iph1->sa->l;
-
-	bp = (sw == GENERATE ? iph1->id_p : iph1->id);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH_R with:\n");
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-	/* compute HASH */
-	res = oakley_prf(hash, buf, iph1);
-	if (res == NULL)
-		goto end;
-
-	error = 0;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "HASH_R computed:\n");
-	plogdump(LLV_DEBUG, res->v, res->l);
-
-end:
-	if (buf != NULL)
-		vfree(buf);
-	if (hash)
-		vfree(hash);
-	return res;
-}
-
-/*
- * compute each authentication method in phase 1.
- * OUT:
- *	0:	OK
- *	-1:	error
- *	other:	error to be reply with notification.
- *	        the value is notification type.
- */
-int
-oakley_validate_auth(iph1)
-	struct ph1handle *iph1;
-{
-	vchar_t *my_hash = NULL;
-	int result;
-#ifdef HAVE_GSSAPI
-	vchar_t *gsshash = NULL;
-#endif
-#ifdef ENABLE_STATS
-	struct timeval start, end;
-#endif
-
-#ifdef ENABLE_STATS
-	gettimeofday(&start, NULL);
-#endif
-
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-#ifdef ENABLE_HYBRID
-	case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-#endif
-		/* validate HASH */
-	    {
-		char *r_hash;
-
-		if (iph1->id_p == NULL || iph1->pl_hash == NULL) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"few isakmp message received.\n");
-			return ISAKMP_NTYPE_PAYLOAD_MALFORMED;
-		}
-#ifdef ENABLE_HYBRID
-		if (AUTHMETHOD(iph1) == FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I &&
-		    ((iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_XAUTH) == 0))
-		{
-			plog(LLV_ERROR, LOCATION, NULL, "No SIG was passed, "
-			    "hybrid auth is enabled, "
-			    "but peer is no Xauth compliant\n");
-			return ISAKMP_NTYPE_SITUATION_NOT_SUPPORTED;
-			break;
-		}
-#endif
-		r_hash = (caddr_t)(iph1->pl_hash + 1);
-
-		plog(LLV_DEBUG, LOCATION, NULL, "HASH received:\n");
-		plogdump(LLV_DEBUG, r_hash,
-			ntohs(iph1->pl_hash->h.len) - sizeof(*iph1->pl_hash));
-
-		switch (iph1->etype) {
-		case ISAKMP_ETYPE_IDENT:
-		case ISAKMP_ETYPE_AGG:
-			my_hash = oakley_ph1hash_common(iph1, VALIDATE);
-			break;
-		case ISAKMP_ETYPE_BASE:
-			if (iph1->side == INITIATOR)
-				my_hash = oakley_ph1hash_common(iph1, VALIDATE);
-			else
-				my_hash = oakley_ph1hash_base_i(iph1, VALIDATE);
-			break;
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid etype %d\n", iph1->etype);
-			return ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE;
-		}
-		if (my_hash == NULL)
-			return ISAKMP_INTERNAL_ERROR;
-
-		result = memcmp(my_hash->v, r_hash, my_hash->l);
-		vfree(my_hash);
-
-		if (result) {
-			plog(LLV_ERROR, LOCATION, NULL, "HASH mismatched\n");
-			return ISAKMP_NTYPE_INVALID_HASH_INFORMATION;
-		}
-
-		plog(LLV_DEBUG, LOCATION, NULL, "HASH for PSK validated.\n");
-	    }
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-#endif
-	    {
-		int error = 0;
-		int certtype = 0;
-
-		/* validation */
-		if (iph1->id_p == NULL) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"no ID payload was passed.\n");
-			return ISAKMP_NTYPE_PAYLOAD_MALFORMED;
-		}
-		if (iph1->sig_p == NULL) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"no SIG payload was passed.\n");
-			return ISAKMP_NTYPE_PAYLOAD_MALFORMED;
-		}
-
-		plog(LLV_DEBUG, LOCATION, NULL, "SIGN passed:\n");
-		plogdump(LLV_DEBUG, iph1->sig_p->v, iph1->sig_p->l);
-
-		/* get peer's cert */
-		switch (iph1->rmconf->getcert_method) {
-		case ISAKMP_GETCERT_PAYLOAD:
-			if (iph1->cert_p == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"no peer's CERT payload found.\n");
-				return ISAKMP_INTERNAL_ERROR;
-			}
-			break;
-		case ISAKMP_GETCERT_LOCALFILE:
-			switch (iph1->rmconf->certtype) {
-				case ISAKMP_CERT_X509SIGN:
-					if (iph1->rmconf->peerscertfile == NULL) {
-						plog(LLV_ERROR, LOCATION, NULL,
-							"no peer's CERT file found.\n");
-						return ISAKMP_INTERNAL_ERROR;
-					}
-
-					/* don't use cached cert */
-					if (iph1->cert_p != NULL) {
-						oakley_delcert(iph1->cert_p);
-						iph1->cert_p = NULL;
-					}
-
-					error = get_cert_fromlocal(iph1, 0);
-#ifdef ANDROID_PATCHED
-					if (!error)
-						break;
-				default:
-					return ISAKMP_INTERNAL_ERROR;
-#else
-					break;
-
-				case ISAKMP_CERT_PLAINRSA:
-					error = get_plainrsa_fromlocal(iph1, 0);
-					break;
-			}
-			if (error)
-				return ISAKMP_INTERNAL_ERROR;
-			break;
-		case ISAKMP_GETCERT_DNS:
-			if (iph1->rmconf->peerscertfile != NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"why peer's CERT file is defined "
-					"though getcert method is dns ?\n");
-				return ISAKMP_INTERNAL_ERROR;
-			}
-
-			/* don't use cached cert */
-			if (iph1->cert_p != NULL) {
-				oakley_delcert(iph1->cert_p);
-				iph1->cert_p = NULL;
-			}
-
-			iph1->cert_p = dnssec_getcert(iph1->id_p);
-			if (iph1->cert_p == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"no CERT RR found.\n");
-				return ISAKMP_INTERNAL_ERROR;
-#endif
-			}
-			break;
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid getcert_mothod: %d\n",
-				iph1->rmconf->getcert_method);
-			return ISAKMP_INTERNAL_ERROR;
-		}
-
-		/* compare ID payload and certificate name */
-		if (iph1->rmconf->verify_cert &&
-		    (error = oakley_check_certid(iph1)) != 0)
-			return error;
-
-		/* verify certificate */
-		if (iph1->rmconf->verify_cert
-		 && iph1->rmconf->getcert_method == ISAKMP_GETCERT_PAYLOAD) {
-			certtype = iph1->rmconf->certtype;
-#ifdef ENABLE_HYBRID
-			switch (AUTHMETHOD(iph1)) {
-			case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-			case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-				certtype = iph1->cert_p->type;
-				break;
-			default:
-				break;
-			}
-#endif
-			switch (certtype) {
-			case ISAKMP_CERT_X509SIGN: {
-				char path[MAXPATHLEN];
-				char *ca;
-
-				if (iph1->rmconf->cacertfile != NULL) {
-					getpathname(path, sizeof(path), 
-					    LC_PATHTYPE_CERT, 
-					    iph1->rmconf->cacertfile);
-					ca = path;
-				} else {
-					ca = NULL;
-				}
-
-				error = eay_check_x509cert(&iph1->cert_p->cert,
-					lcconf->pathinfo[LC_PATHTYPE_CERT], 
-					ca, 0);
-				break;
-			}
-			
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"no supported certtype %d\n", certtype);
-				return ISAKMP_INTERNAL_ERROR;
-			}
-			if (error != 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"the peer's certificate is not verified.\n");
-				return ISAKMP_NTYPE_INVALID_CERT_AUTHORITY;
-			}
-		}
-	
-		/* Generate a warning if verify_cert == 0
-		 */
-		if (iph1->rmconf->verify_cert){
-			plog(LLV_DEBUG, LOCATION, NULL, "CERT validated\n");
-		}else{
-			plog(LLV_WARNING, LOCATION, NULL,
-				"CERT validation disabled by configuration\n");
-		}
-
-		/* compute hash */
-		switch (iph1->etype) {
-		case ISAKMP_ETYPE_IDENT:
-		case ISAKMP_ETYPE_AGG:
-			my_hash = oakley_ph1hash_common(iph1, VALIDATE);
-			break;
-		case ISAKMP_ETYPE_BASE:
-			if (iph1->side == INITIATOR)
-				my_hash = oakley_ph1hash_base_r(iph1, VALIDATE);
-			else
-				my_hash = oakley_ph1hash_base_i(iph1, VALIDATE);
-			break;
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid etype %d\n", iph1->etype);
-			return ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE;
-		}
-		if (my_hash == NULL)
-			return ISAKMP_INTERNAL_ERROR;
-
-
-		certtype = iph1->rmconf->certtype;
-#ifdef ENABLE_HYBRID
-		switch (AUTHMETHOD(iph1)) {
-		case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-		case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-			certtype = iph1->cert_p->type;
-			break;
-		default:
-			break;
-		}
-#endif
-		/* check signature */
-		switch (certtype) {
-		case ISAKMP_CERT_X509SIGN:
-		case ISAKMP_CERT_DNS:
-			error = eay_check_x509sign(my_hash,
-					iph1->sig_p,
-					&iph1->cert_p->cert);
-			break;
-#ifndef ANDROID_PATCHED
-		case ISAKMP_CERT_PLAINRSA:
-			iph1->rsa_p = rsa_try_check_rsasign(my_hash,
-					iph1->sig_p, iph1->rsa_candidates);
-			error = iph1->rsa_p ? 0 : -1;
-
-			break;
-#endif
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"no supported certtype %d\n",
-				certtype);
-			vfree(my_hash);
-			return ISAKMP_INTERNAL_ERROR;
-		}
-
-		vfree(my_hash);
-		if (error != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"Invalid SIG.\n");
-			return ISAKMP_NTYPE_INVALID_SIGNATURE;
-		}
-		plog(LLV_DEBUG, LOCATION, NULL, "SIG authenticated\n");
-	    }
-		break;
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-	    {
-		if ((iph1->mode_cfg->flags & ISAKMP_CFG_VENDORID_XAUTH) == 0) {
-			plog(LLV_ERROR, LOCATION, NULL, "No SIG was passed, "
-			    "hybrid auth is enabled, "
-			    "but peer is no Xauth compliant\n");
-			return ISAKMP_NTYPE_SITUATION_NOT_SUPPORTED;
-			break;
-		}
-		plog(LLV_INFO, LOCATION, NULL, "No SIG was passed, "
-		    "but hybrid auth is enabled\n");
-
-		return 0;
-		break;
-	    }
-#endif
-#ifdef HAVE_GSSAPI
-	case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-		/* check if we're not into XAUTH_PSKEY_I instead */
-#ifdef ENABLE_HYBRID
-		if (iph1->rmconf->xauth)
-			break;
-#endif
-		switch (iph1->etype) {
-		case ISAKMP_ETYPE_IDENT:
-		case ISAKMP_ETYPE_AGG:
-			my_hash = oakley_ph1hash_common(iph1, VALIDATE);
-			break;
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid etype %d\n", iph1->etype);
-			return ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE;
-		}
-
-		if (my_hash == NULL) {
-			if (gssapi_more_tokens(iph1))
-				return ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE;
-			else
-				return ISAKMP_NTYPE_INVALID_HASH_INFORMATION;
-		}
-
-		gsshash = gssapi_unwraphash(iph1);
-		if (gsshash == NULL) {
-			vfree(my_hash);
-			return ISAKMP_NTYPE_INVALID_HASH_INFORMATION;
-		}
-
-		result = memcmp(my_hash->v, gsshash->v, my_hash->l);
-		vfree(my_hash);
-		vfree(gsshash);
-
-		if (result) {
-			plog(LLV_ERROR, LOCATION, NULL, "HASH mismatched\n");
-			return ISAKMP_NTYPE_INVALID_HASH_INFORMATION;
-		}
-		plog(LLV_DEBUG, LOCATION, NULL, "hash compared OK\n");
-		break;
-#endif
-	case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-#endif
-		if (iph1->id_p == NULL || iph1->pl_hash == NULL) {
-			plog(LLV_ERROR, LOCATION, iph1->remote,
-				"few isakmp message received.\n");
-			return ISAKMP_NTYPE_PAYLOAD_MALFORMED;
-		}
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"not supported authmethod type %s\n",
-			s_oakley_attr_method(iph1->approval->authmethod));
-		return ISAKMP_INTERNAL_ERROR;
-	default:
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"invalid authmethod %d why ?\n",
-			iph1->approval->authmethod);
-		return ISAKMP_INTERNAL_ERROR;
-	}
-#ifdef ENABLE_STATS
-	gettimeofday(&end, NULL);
-	syslog(LOG_NOTICE, "%s(%s): %8.6f", __func__,
-		s_oakley_attr_method(iph1->approval->authmethod),
-		timedelta(&start, &end));
-#endif
-
-	return 0;
-}
-
-/* get my certificate
- * NOTE: include certificate type.
- */
-int
-oakley_getmycert(iph1)
-	struct ph1handle *iph1;
-{
-	switch (iph1->rmconf->certtype) {
-		case ISAKMP_CERT_X509SIGN:
-			if (iph1->cert)
-				return 0;
-			return get_cert_fromlocal(iph1, 1);
-
-#ifndef ANDROID_PATCHED
-		case ISAKMP_CERT_PLAINRSA:
-			if (iph1->rsa)
-				return 0;
-			return get_plainrsa_fromlocal(iph1, 1);
-#endif
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "Unknown certtype #%d\n",
-			     iph1->rmconf->certtype);
-			return -1;
-	}
-
-}
-
-/*
- * get a CERT from local file.
- * IN:
- *	my != 0 my cert.
- *	my == 0 peer's cert.
- */
-static int
-get_cert_fromlocal(iph1, my)
-	struct ph1handle *iph1;
-	int my;
-{
-	char path[MAXPATHLEN];
-	vchar_t *cert = NULL;
-	cert_t **certpl;
-	char *certfile;
-	int error = -1;
-
-	if (my) {
-		certfile = iph1->rmconf->mycertfile;
-		certpl = &iph1->cert;
-	} else {
-		certfile = iph1->rmconf->peerscertfile;
-		certpl = &iph1->cert_p;
-	}
-	if (!certfile) {
-		plog(LLV_ERROR, LOCATION, NULL, "no CERT defined.\n");
-		return 0;
-	}
-
-	switch (iph1->rmconf->certtype) {
-	case ISAKMP_CERT_X509SIGN:
-	case ISAKMP_CERT_DNS:
-		/* make public file name */
-		getpathname(path, sizeof(path), LC_PATHTYPE_CERT, certfile);
-		cert = eay_get_x509cert(path);
-		if (cert) {
-			char *p = NULL;
-			p = eay_get_x509text(cert);
-			plog(LLV_DEBUG, LOCATION, NULL, "%s", p ? p : "\n");
-			racoon_free(p);
-		};
-		break;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"not supported certtype %d\n",
-			iph1->rmconf->certtype);
-		goto end;
-	}
-
-	if (!cert) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get %s CERT.\n",
-			my ? "my" : "peers");
-		goto end;
-	}
-
-	*certpl = oakley_newcert();
-	if (!*certpl) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get cert buffer.\n");
-		goto end;
-	}
-	(*certpl)->pl = vmalloc(cert->l + 1);
-	if ((*certpl)->pl == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get cert buffer\n");
-		oakley_delcert(*certpl);
-		*certpl = NULL;
-		goto end;
-	}
-	memcpy((*certpl)->pl->v + 1, cert->v, cert->l);
-	(*certpl)->pl->v[0] = iph1->rmconf->certtype;
-	(*certpl)->type = iph1->rmconf->certtype;
-	(*certpl)->cert.v = (*certpl)->pl->v + 1;
-	(*certpl)->cert.l = (*certpl)->pl->l - 1;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "created CERT payload:\n");
-	plogdump(LLV_DEBUG, (*certpl)->pl->v, (*certpl)->pl->l);
-
-	error = 0;
-
-end:
-	if (cert != NULL)
-		vfree(cert);
-
-	return error;
-}
-
-#ifndef ANDROID_PATCHED
-static int
-get_plainrsa_fromlocal(iph1, my)
-	struct ph1handle *iph1;
-	int my;
-{
-	char path[MAXPATHLEN];
-	vchar_t *cert = NULL;
-	char *certfile;
-	int error = -1;
-
-	iph1->rsa_candidates = rsa_lookup_keys(iph1, my);
-	if (!iph1->rsa_candidates || 
-	    rsa_list_count(iph1->rsa_candidates) == 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"%s RSA key not found for %s\n",
-			my ? "Private" : "Public",
-			saddr2str_fromto("%s <-> %s", 
-			iph1->local, iph1->remote));
-		goto end;
-	}
-
-	if (my && rsa_list_count(iph1->rsa_candidates) > 1) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"More than one (=%lu) private "
-			"PlainRSA key found for %s\n",
-			rsa_list_count(iph1->rsa_candidates),
-			saddr2str_fromto("%s <-> %s", 
-			iph1->local, iph1->remote));
-		plog(LLV_WARNING, LOCATION, NULL,
-			"This may have unpredictable results, "
-			"i.e. wrong key could be used!\n");
-		plog(LLV_WARNING, LOCATION, NULL,
-			"Consider using only one single private "
-			"key for all peers...\n");
-	}
-	if (my) {
-		iph1->rsa = ((struct rsa_key *)
-		    genlist_next(iph1->rsa_candidates, NULL))->rsa;
-
-		genlist_free(iph1->rsa_candidates, NULL);
-		iph1->rsa_candidates = NULL;
-
-		if (iph1->rsa == NULL)
-			goto end;
-	}
-
-	error = 0;
-
-end:
-	return error;
-}
-#endif
-
-#ifdef ANDROID_CHANGES
-
-#if defined(OPENSSL_IS_BORINGSSL)
-/* EVP_PKEY_from_keystore is from system/security/keystore-engine. */
-extern EVP_PKEY* EVP_PKEY_from_keystore(const char *key_id);
-#endif
-
-static vchar_t* keystore_sign(vchar_t* src, const char* path) {
-	vchar_t* sig = NULL;
-	EVP_PKEY *evp = NULL;
-
-#if !defined(OPENSSL_IS_BORINGSSL)
-	ENGINE *engine = ENGINE_by_id("keystore");
-	if (!engine) {
-		return NULL;
-	}
-	if (!ENGINE_init(engine)) {
-		ENGINE_free(engine);
-		return NULL;
-	}
-#endif
-
-	const char *key_id;
-	if (sscanf(path, pname, &key_id) != 1) {
-		do_plog(LLV_ERROR, "couldn't read private key info\n");
-		goto out;
-	}
-
-#if !defined(OPENSSL_IS_BORINGSSL)
-	evp = ENGINE_load_private_key(engine, key_id, NULL, NULL);
-#else
-	evp = EVP_PKEY_from_keystore(key_id);
-#endif
-	if (!evp) {
-		do_plog(LLV_ERROR, "couldn't retrieve private key");
-		ERR_remove_thread_state(NULL);
-		goto out;
-	}
-
-	if (EVP_PKEY_id(evp) == EVP_PKEY_RSA) {
-		sig = eay_rsa_sign(src, EVP_PKEY_get0_RSA(evp));
-	}
-
-out:
-	if (evp) {
-		EVP_PKEY_free(evp);
-	}
-
-#if !defined(OPENSSL_IS_BORINGSSL)
-	ENGINE_finish(engine);
-	ENGINE_free(engine);
-#endif
-
-	return sig;
-}
-#endif
-
-/* get signature */
-int
-oakley_getsign(iph1)
-	struct ph1handle *iph1;
-{
-	char path[MAXPATHLEN];
-	vchar_t *privkey = NULL;
-	int error = -1;
-
-	switch (iph1->rmconf->certtype) {
-	case ISAKMP_CERT_X509SIGN:
-	case ISAKMP_CERT_DNS:
-		if (iph1->rmconf->myprivfile == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL, "no cert defined.\n");
-			goto end;
-		}
-
-		/* make private file name */
-		getpathname(path, sizeof(path),
-			LC_PATHTYPE_CERT,
-			iph1->rmconf->myprivfile);
-#ifdef ANDROID_CHANGES
-		iph1->sig = keystore_sign(iph1->hash, path);
-#else
-		privkey = privsep_eay_get_pkcs1privkey(path);
-		if (privkey == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get private key.\n");
-			goto end;
-		}
-		plog(LLV_DEBUG2, LOCATION, NULL, "private key:\n");
-		plogdump(LLV_DEBUG2, privkey->v, privkey->l);
-
-		iph1->sig = eay_get_x509sign(iph1->hash, privkey);
-#endif
-		break;
-#ifndef ANDROID_PATCHED
-	case ISAKMP_CERT_PLAINRSA:
-		iph1->sig = eay_get_rsasign(iph1->hash, iph1->rsa);
-		break;
-#endif
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "Unknown certtype #%d\n",
-		     iph1->rmconf->certtype);
-		goto end;
-	}
-
-	if (iph1->sig == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "failed to sign.\n");
-		goto end;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "SIGN computed:\n");
-	plogdump(LLV_DEBUG, iph1->sig->v, iph1->sig->l);
-
-	error = 0;
-
-end:
-	if (privkey != NULL)
-		vfree(privkey);
-
-	return error;
-}
-
-/*
- * compare certificate name and ID value.
- */
-static int
-oakley_check_certid(iph1)
-	struct ph1handle *iph1;
-{
-	struct ipsecdoi_id_b *id_b;
-	vchar_t *name = NULL;
-	char *altname = NULL;
-	int idlen, type;
-	int error;
-
-	if (iph1->id_p == NULL || iph1->cert_p == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "no ID nor CERT found.\n");
-		return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-	}
-
-	id_b = (struct ipsecdoi_id_b *)iph1->id_p->v;
-	idlen = iph1->id_p->l - sizeof(*id_b);
-
-	switch (id_b->type) {
-	case IPSECDOI_ID_DER_ASN1_DN:
-		name = eay_get_x509asn1subjectname(&iph1->cert_p->cert);
-		if (!name) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get subjectName\n");
-			return ISAKMP_NTYPE_INVALID_CERTIFICATE;
-		}
-		if (idlen != name->l) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"Invalid ID length in phase 1.\n");
-			vfree(name);
-			return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-		}
-		error = memcmp(id_b + 1, name->v, idlen);
-		vfree(name);
-		if (error != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"ID mismatched with ASN1 SubjectName.\n");
-			plogdump(LLV_DEBUG, id_b + 1, idlen);
-			plogdump(LLV_DEBUG, name->v, idlen);
-			return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-		}
-		return 0;
-	case IPSECDOI_ID_IPV4_ADDR:
-	case IPSECDOI_ID_IPV6_ADDR:
-	{
-		/*
-		 * converting to binary from string because openssl return
-		 * a string even if object is a binary.
-		 * XXX fix it !  access by ASN.1 directly without.
-		 */
-		struct addrinfo hints, *res;
-		caddr_t a = NULL;
-		int pos;
-
-		for (pos = 1; ; pos++) {
-			if (eay_get_x509subjectaltname(&iph1->cert_p->cert,
-					&altname, &type, pos) !=0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to get subjectAltName\n");
-				return ISAKMP_NTYPE_INVALID_CERTIFICATE;
-			}
-
-			/* it's the end condition of the loop. */
-			if (!altname) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"no proper subjectAltName.\n");
-				return ISAKMP_NTYPE_INVALID_CERTIFICATE;
-			}
-
-			if (check_typeofcertname(id_b->type, type) == 0)
-				break;
-
-			/* next name */
-			racoon_free(altname);
-			altname = NULL;
-		}
-		memset(&hints, 0, sizeof(hints));
-		hints.ai_family = PF_UNSPEC;
-		hints.ai_socktype = SOCK_RAW;
-		hints.ai_flags = AI_NUMERICHOST;
-		error = getaddrinfo(altname, NULL, &hints, &res);
-		if (error != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"no proper subjectAltName.\n");
-			racoon_free(altname);
-			return ISAKMP_NTYPE_INVALID_CERTIFICATE;
-		}
-		switch (res->ai_family) {
-		case AF_INET:
-			a = (caddr_t)&((struct sockaddr_in *)res->ai_addr)->sin_addr.s_addr;
-			break;
-#ifdef INET6
-		case AF_INET6:
-			a = (caddr_t)&((struct sockaddr_in6 *)res->ai_addr)->sin6_addr.s6_addr;
-			break;
-#endif
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-				"family not supported: %d.\n", res->ai_family);
-			racoon_free(altname);
-			freeaddrinfo(res);
-			return ISAKMP_NTYPE_INVALID_CERTIFICATE;
-		}
-		error = memcmp(id_b + 1, a, idlen);
-		freeaddrinfo(res);
-		vfree(name);
-		if (error != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"ID mismatched with subjectAltName.\n");
-			plogdump(LLV_DEBUG, id_b + 1, idlen);
-			plogdump(LLV_DEBUG, a, idlen);
-			return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-		}
-		return 0;
-	}
-	case IPSECDOI_ID_FQDN:
-	case IPSECDOI_ID_USER_FQDN:
-	{
-		int pos;
-
-		for (pos = 1; ; pos++) {
-			if (eay_get_x509subjectaltname(&iph1->cert_p->cert,
-					&altname, &type, pos) != 0){
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to get subjectAltName\n");
-				return ISAKMP_NTYPE_INVALID_CERTIFICATE;
-			}
-
-			/* it's the end condition of the loop. */
-			if (!altname) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"no proper subjectAltName.\n");
-				return ISAKMP_NTYPE_INVALID_CERTIFICATE;
-			}
-
-			if (check_typeofcertname(id_b->type, type) == 0)
-				break;
-
-			/* next name */
-			racoon_free(altname);
-			altname = NULL;
-		}
-		if (idlen != strlen(altname)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"Invalid ID length in phase 1.\n");
-			racoon_free(altname);
-			return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-		}
-		if (check_typeofcertname(id_b->type, type) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"ID type mismatched. ID: %s CERT: %s.\n",
-				s_ipsecdoi_ident(id_b->type),
-				s_ipsecdoi_ident(type));
-			racoon_free(altname);
-			return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-		}
-		error = memcmp(id_b + 1, altname, idlen);
-		if (error) {
-			plog(LLV_ERROR, LOCATION, NULL, "ID mismatched.\n");
-			plogdump(LLV_DEBUG, id_b + 1, idlen);
-			plogdump(LLV_DEBUG, altname, idlen);
-			racoon_free(altname);
-			return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-		}
-		racoon_free(altname);
-		return 0;
-	}
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Inpropper ID type passed: %s.\n",
-			s_ipsecdoi_ident(id_b->type));
-		return ISAKMP_NTYPE_INVALID_ID_INFORMATION;
-	}
-	/*NOTREACHED*/
-}
-
-static int
-check_typeofcertname(doi, genid)
-	int doi, genid;
-{
-	switch (doi) {
-	case IPSECDOI_ID_IPV4_ADDR:
-	case IPSECDOI_ID_IPV4_ADDR_SUBNET:
-	case IPSECDOI_ID_IPV6_ADDR:
-	case IPSECDOI_ID_IPV6_ADDR_SUBNET:
-	case IPSECDOI_ID_IPV4_ADDR_RANGE:
-	case IPSECDOI_ID_IPV6_ADDR_RANGE:
-		if (genid != GENT_IPADD)
-			return -1;
-		return 0;
-	case IPSECDOI_ID_FQDN:
-		if (genid != GENT_DNS)
-			return -1;
-		return 0;
-	case IPSECDOI_ID_USER_FQDN:
-		if (genid != GENT_EMAIL)
-			return -1;
-		return 0;
-	case IPSECDOI_ID_DER_ASN1_DN: /* should not be passed to this function*/
-	case IPSECDOI_ID_DER_ASN1_GN:
-	case IPSECDOI_ID_KEY_ID:
-	default:
-		return -1;
-	}
-	/*NOTREACHED*/
-}
-
-/*
- * save certificate including certificate type.
- */
-int
-oakley_savecert(iph1, gen)
-	struct ph1handle *iph1;
-	struct isakmp_gen *gen;
-{
-	cert_t **c;
-	u_int8_t type;
-	STACK_OF(X509) *certs=NULL;
-#if !defined(OPENSSL_IS_BORINGSSL)
-	PKCS7 *p7;
-#endif
-
-	type = *(u_int8_t *)(gen + 1) & 0xff;
-
-	switch (type) {
-	case ISAKMP_CERT_DNS:
-		plog(LLV_WARNING, LOCATION, NULL,
-			"CERT payload is unnecessary in DNSSEC. "
-			"ignore this CERT payload.\n");
-		return 0;
-	case ISAKMP_CERT_PKCS7:
-	case ISAKMP_CERT_PGP:
-	case ISAKMP_CERT_X509SIGN:
-	case ISAKMP_CERT_KERBEROS:
-	case ISAKMP_CERT_SPKI:
-		c = &iph1->cert_p;
-		break;
-	case ISAKMP_CERT_CRL:
-		c = &iph1->crl_p;
-		break;
-	case ISAKMP_CERT_X509KE:
-	case ISAKMP_CERT_X509ATTR:
-	case ISAKMP_CERT_ARL:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"No supported such CERT type %d\n", type);
-		return -1;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid CERT type %d\n", type);
-		return -1;
-	}
-
-	/* XXX choice the 1th cert, ignore after the cert. */ 
-	/* XXX should be processed. */
-	if (*c) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"ignore 2nd CERT payload.\n");
-		return 0;
-	}
-
-	if (type == ISAKMP_CERT_PKCS7) {
-		u_char *bp;
-#if defined(OPENSSL_IS_BORINGSSL)
-		size_t i;
-		STACK_OF(X509) *certs = sk_X509_new_null();
-		CBS cbs;
-#else
-		int i;
-#endif
-
-		/* Skip the header */
-		bp = (u_char *)(gen + 1);
-		/* And the first byte is the certificate type, 
-		 * we know that already
-		 */
-		bp++;
-#if defined(OPENSSL_IS_BORINGSSL)
-		CBS_init(&cbs, bp, ntohs(gen->len) - sizeof(*gen) - 1);
-		if (!PKCS7_get_certificates(certs, &cbs)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "Failed to parse PKCS#7 CERT.\n");
-			sk_X509_pop_free(certs, X509_free);
-			return -1;
-		}
-
-		if (sk_X509_num(certs) == 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "CERT PKCS#7 bundle contains no certs.\n");
-			sk_X509_pop_free(certs, X509_free);
-			return -1;
-		}
-#else
-		p7 = d2i_PKCS7(NULL, (void *)&bp,
-		    ntohs(gen->len) - sizeof(*gen) - 1);
-
-		if (!p7) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "Failed to parse PKCS#7 CERT.\n");
-			return -1;
-		}
-
-		/* Copied this from the openssl pkcs7 application;
-		 * there"s little by way of documentation for any of
-		 * it. I can only presume it"s correct.
-		 */
-		
-		i = OBJ_obj2nid(p7->type);
-		switch (i) {
-		case NID_pkcs7_signed:
-			certs=p7->d.sign->cert;
-			break;
-		case NID_pkcs7_signedAndEnveloped:
-			certs=p7->d.signed_and_enveloped->cert;
-			break;
-		default:
-			 break;
-		}
-
-		if (!certs) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "CERT PKCS#7 bundle contains no certs.\n");
-			PKCS7_free(p7);
-			return -1;
-		}
-#endif
-
-		for (i = 0; i < sk_X509_num(certs); i++) {
-			int len;
-			u_char *bp;
-			X509 *cert = sk_X509_value(certs,i);
-
-			plog(LLV_DEBUG, LOCATION, NULL, 
-			     "Trying PKCS#7 cert %d.\n", i);
-
-			/* We'll just try each cert in turn */
-			*c = save_certx509(cert);
-
-			if (!*c) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				     "Failed to get CERT buffer.\n");
-				continue;
-			}
-
-			/* Ignore cert if it doesn't match identity
-			 * XXX If verify cert is disabled, we still just take
-			 * the first certificate....
-			 */
-			if(iph1->rmconf->verify_cert &&
-			   oakley_check_certid(iph1)) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-				     "Discarding CERT: does not match ID.\n");
-				oakley_delcert((*c));
-				*c = NULL;
-				continue;
-			}
-
-			{
-				char *p = eay_get_x509text(&(*c)->cert);
-				plog(LLV_DEBUG, LOCATION, NULL, "CERT saved:\n");
-				plogdump(LLV_DEBUG, (*c)->cert.v, (*c)->cert.l);
-				plog(LLV_DEBUG, LOCATION, NULL, "%s", 
-				     p ? p : "\n");
-				racoon_free(p);
-			}
-			break;
-		}
-
-#if defined(OPENSSL_IS_BORINGSSL)
-		sk_X509_pop_free(certs, X509_free);
-#else
-		PKCS7_free(p7);
-#endif
-
-	} else {
-		*c = save_certbuf(gen);
-		if (!*c) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "Failed to get CERT buffer.\n");
-			return -1;
-		}
-
-		switch ((*c)->type) {
-		case ISAKMP_CERT_DNS:
-			plog(LLV_WARNING, LOCATION, NULL,
-			     "CERT payload is unnecessary in DNSSEC. "
-			     "ignore it.\n");
-			return 0;
-		case ISAKMP_CERT_PGP:
-		case ISAKMP_CERT_X509SIGN:
-		case ISAKMP_CERT_KERBEROS:
-		case ISAKMP_CERT_SPKI:
-			/* Ignore cert if it doesn't match identity
-			 * XXX If verify cert is disabled, we still just take
-			 * the first certificate....
-			 */
-			if(iph1->rmconf->verify_cert &&
-			   oakley_check_certid(iph1)){
-				plog(LLV_DEBUG, LOCATION, NULL,
-				     "Discarding CERT: does not match ID.\n");
-				oakley_delcert((*c));
-				*c = NULL;
-				return 0;
-			}
-
-			{
-				char *p = eay_get_x509text(&(*c)->cert);
-				plog(LLV_DEBUG, LOCATION, NULL, "CERT saved:\n");
-				plogdump(LLV_DEBUG, (*c)->cert.v, (*c)->cert.l);
-				plog(LLV_DEBUG, LOCATION, NULL, "%s", p ? p : "\n");
-				racoon_free(p);
-			}
-			break;
-		case ISAKMP_CERT_CRL:
-			plog(LLV_DEBUG, LOCATION, NULL, "CRL saved:\n");
-			plogdump(LLV_DEBUG, (*c)->cert.v, (*c)->cert.l);
-			break;
-		case ISAKMP_CERT_X509KE:
-		case ISAKMP_CERT_X509ATTR:
-		case ISAKMP_CERT_ARL:
-		default:
-			/* XXX */
-			oakley_delcert((*c));
-			*c = NULL;
-			return 0;
-		}
-	}
-	
-	return 0;
-}
-
-/*
- * save certificate including certificate type.
- */
-int
-oakley_savecr(iph1, gen)
-	struct ph1handle *iph1;
-	struct isakmp_gen *gen;
-{
-	cert_t **c;
-	u_int8_t type;
-
-	type = *(u_int8_t *)(gen + 1) & 0xff;
-
-	switch (type) {
-	case ISAKMP_CERT_DNS:
-		plog(LLV_WARNING, LOCATION, NULL,
-			"CERT payload is unnecessary in DNSSEC\n");
-		/*FALLTHRU*/
-	case ISAKMP_CERT_PKCS7:
-	case ISAKMP_CERT_PGP:
-	case ISAKMP_CERT_X509SIGN:
-	case ISAKMP_CERT_KERBEROS:
-	case ISAKMP_CERT_SPKI:
-		c = &iph1->cr_p;
-		break;
-	case ISAKMP_CERT_X509KE:
-	case ISAKMP_CERT_X509ATTR:
-	case ISAKMP_CERT_ARL:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"No supported such CR type %d\n", type);
-		return -1;
-	case ISAKMP_CERT_CRL:
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid CR type %d\n", type);
-		return -1;
-	}
-
-	*c = save_certbuf(gen);
-	if (!*c) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Failed to get CR buffer.\n");
-		return -1;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "CR saved:\n");
-	plogdump(LLV_DEBUG, (*c)->cert.v, (*c)->cert.l);
-
-	return 0;
-}
-
-static cert_t *
-save_certbuf(gen)
-	struct isakmp_gen *gen;
-{
-	cert_t *new;
-
-	if(ntohs(gen->len) <= sizeof(*gen)){
-		plog(LLV_ERROR, LOCATION, NULL,
-			 "Len is too small !!.\n");
-		return NULL;
-	}
-
-	new = oakley_newcert();
-	if (!new) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Failed to get CERT buffer.\n");
-		return NULL;
-	}
-
-	new->pl = vmalloc(ntohs(gen->len) - sizeof(*gen));
-	if (new->pl == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Failed to copy CERT from packet.\n");
-		oakley_delcert(new);
-		new = NULL;
-		return NULL;
-	}
-	memcpy(new->pl->v, gen + 1, new->pl->l);
-	new->type = new->pl->v[0] & 0xff;
-	new->cert.v = new->pl->v + 1;
-	new->cert.l = new->pl->l - 1;
-
-	return new;
-}
-
-static cert_t *
-save_certx509(cert)
-	X509 *cert;
-{
-	cert_t *new;
-        int len;
-        u_char *bp;
-
-	new = oakley_newcert();
-	if (!new) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Failed to get CERT buffer.\n");
-		return NULL;
-	}
-
-        len = i2d_X509(cert, NULL);
-	new->pl = vmalloc(len);
-	if (new->pl == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Failed to copy CERT from packet.\n");
-		oakley_delcert(new);
-		new = NULL;
-		return NULL;
-	}
-        bp = (u_char *) new->pl->v;
-        len = i2d_X509(cert, &bp);
-	new->type = ISAKMP_CERT_X509SIGN;
-	new->cert.v = new->pl->v;
-	new->cert.l = new->pl->l;
-
-	return new;
-}
-
-/*
- * get my CR.
- * NOTE: No Certificate Authority field is included to CR payload at the
- * moment. Becuase any certificate authority are accepted without any check.
- * The section 3.10 in RFC2408 says that this field SHOULD not be included,
- * if there is no specific certificate authority requested.
- */
-vchar_t *
-oakley_getcr(iph1)
-	struct ph1handle *iph1;
-{
-	vchar_t *buf;
-
-	buf = vmalloc(1);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get cr buffer\n");
-		return NULL;
-	}
-	if(iph1->rmconf->certtype == ISAKMP_CERT_NONE) {
-		buf->v[0] = iph1->rmconf->cacerttype;
-		plog(LLV_DEBUG, LOCATION, NULL, "create my CR: NONE, using %s instead\n",
-		s_isakmp_certtype(iph1->rmconf->cacerttype));
-	} else {
-		buf->v[0] = iph1->rmconf->certtype;
-		plog(LLV_DEBUG, LOCATION, NULL, "create my CR: %s\n",
-		s_isakmp_certtype(iph1->rmconf->certtype));
-	}
-	if (buf->l > 1) {
-		plogdump(LLV_DEBUG, buf->v, buf->l);
-	}
-
-	return buf;
-}
-
-/*
- * check peer's CR.
- */
-int
-oakley_checkcr(iph1)
-	struct ph1handle *iph1;
-{
-	if (iph1->cr_p == NULL)
-		return 0;
-
-	plog(LLV_DEBUG, LOCATION, iph1->remote,
-		"peer transmitted CR: %s\n",
-		s_isakmp_certtype(iph1->cr_p->type));
-
-	if (iph1->cr_p->type != iph1->rmconf->certtype) {
-		plog(LLV_ERROR, LOCATION, iph1->remote,
-			"such a cert type isn't supported: %d\n",
-			(char)iph1->cr_p->type);
-		return -1;
-	}
-
-	return 0;
-}
-
-/*
- * check to need CR payload.
- */
-int
-oakley_needcr(type)
-	int type;
-{
-	switch (type) {
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-#endif
-		return 1;
-	default:
-		return 0;
-	}
-	/*NOTREACHED*/
-}
-
-/*
- * compute SKEYID
- * see seciton 5. Exchanges in RFC 2409
- * psk: SKEYID = prf(pre-shared-key, Ni_b | Nr_b)
- * sig: SKEYID = prf(Ni_b | Nr_b, g^ir)
- * enc: SKEYID = prf(H(Ni_b | Nr_b), CKY-I | CKY-R)
- */
-int
-oakley_skeyid(iph1)
-	struct ph1handle *iph1;
-{
-	vchar_t *buf = NULL, *bp;
-	char *p;
-	int len;
-	int error = -1;
-	
-	/* SKEYID */
-	switch (AUTHMETHOD(iph1)) {
-	case OAKLEY_ATTR_AUTH_METHOD_PSKEY:
-#ifdef ENABLE_HYBRID
-	case FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R:
-#endif
-		if (iph1->etype != ISAKMP_ETYPE_IDENT) {
-			iph1->authstr = getpskbyname(iph1->id_p);
-			if (iph1->authstr == NULL) {
-				if (iph1->rmconf->verify_identifier) {
-					plog(LLV_ERROR, LOCATION, iph1->remote,
-						"couldn't find the pskey.\n");
-					goto end;
-				}
-				plog(LLV_NOTIFY, LOCATION, iph1->remote,
-					"couldn't find the proper pskey, "
-					"try to get one by the peer's address.\n");
-			}
-		}
-		if (iph1->authstr == NULL) {
-			/*
-			 * If the exchange type is the main mode or if it's
-			 * failed to get the psk by ID, racoon try to get
-			 * the psk by remote IP address.
-			 * It may be nonsense.
-			 */
-			iph1->authstr = getpskbyaddr(iph1->remote);
-			if (iph1->authstr == NULL) {
-				plog(LLV_ERROR, LOCATION, iph1->remote,
-					"couldn't find the pskey for %s.\n",
-					saddrwop2str(iph1->remote));
-				goto end;
-			}
-		}
-		plog(LLV_DEBUG, LOCATION, NULL, "the psk found.\n");
-		/* should be secret PSK */
-		plog(LLV_DEBUG2, LOCATION, NULL, "psk: ");
-		plogdump(LLV_DEBUG2, iph1->authstr->v, iph1->authstr->l);
-
-		len = iph1->nonce->l + iph1->nonce_p->l;
-		buf = vmalloc(len);
-		if (buf == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get skeyid buffer\n");
-			goto end;
-		}
-		p = buf->v;
-
-		bp = (iph1->side == INITIATOR ? iph1->nonce : iph1->nonce_p);
-		plog(LLV_DEBUG, LOCATION, NULL, "nonce 1: ");
-		plogdump(LLV_DEBUG, bp->v, bp->l);
-		memcpy(p, bp->v, bp->l);
-		p += bp->l;
-
-		bp = (iph1->side == INITIATOR ? iph1->nonce_p : iph1->nonce);
-		plog(LLV_DEBUG, LOCATION, NULL, "nonce 2: ");
-		plogdump(LLV_DEBUG, bp->v, bp->l);
-		memcpy(p, bp->v, bp->l);
-		p += bp->l;
-
-		iph1->skeyid = oakley_prf(iph1->authstr, buf, iph1);
-		if (iph1->skeyid == NULL)
-			goto end;
-		break;
-
-	case OAKLEY_ATTR_AUTH_METHOD_DSSSIG:
-	case OAKLEY_ATTR_AUTH_METHOD_RSASIG:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R:
-	case OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R:
-#endif
-#ifdef HAVE_GSSAPI
-	case OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB:
-#endif
-		len = iph1->nonce->l + iph1->nonce_p->l;
-		buf = vmalloc(len);
-		if (buf == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get nonce buffer\n");
-			goto end;
-		}
-		p = buf->v;
-
-		bp = (iph1->side == INITIATOR ? iph1->nonce : iph1->nonce_p);
-		plog(LLV_DEBUG, LOCATION, NULL, "nonce1: ");
-		plogdump(LLV_DEBUG, bp->v, bp->l);
-		memcpy(p, bp->v, bp->l);
-		p += bp->l;
-
-		bp = (iph1->side == INITIATOR ? iph1->nonce_p : iph1->nonce);
-		plog(LLV_DEBUG, LOCATION, NULL, "nonce2: ");
-		plogdump(LLV_DEBUG, bp->v, bp->l);
-		memcpy(p, bp->v, bp->l);
-		p += bp->l;
-
-		iph1->skeyid = oakley_prf(buf, iph1->dhgxy, iph1);
-		if (iph1->skeyid == NULL)
-			goto end;
-		break;
-	case OAKLEY_ATTR_AUTH_METHOD_RSAENC:
-	case OAKLEY_ATTR_AUTH_METHOD_RSAREV:
-#ifdef ENABLE_HYBRID
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I:
-	case OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R:
-#endif
-		plog(LLV_WARNING, LOCATION, NULL,
-			"not supported authentication method %s\n",
-			s_oakley_attr_method(iph1->approval->authmethod));
-		goto end;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid authentication method %d\n",
-			iph1->approval->authmethod);
-		goto end;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "SKEYID computed:\n");
-	plogdump(LLV_DEBUG, iph1->skeyid->v, iph1->skeyid->l);
-
-	error = 0;
-
-end:
-	if (buf != NULL)
-		vfree(buf);
-	return error;
-}
-
-/*
- * compute SKEYID_[dae]
- * see seciton 5. Exchanges in RFC 2409
- * SKEYID_d = prf(SKEYID, g^ir | CKY-I | CKY-R | 0)
- * SKEYID_a = prf(SKEYID, SKEYID_d | g^ir | CKY-I | CKY-R | 1)
- * SKEYID_e = prf(SKEYID, SKEYID_a | g^ir | CKY-I | CKY-R | 2)
- */
-int
-oakley_skeyid_dae(iph1)
-	struct ph1handle *iph1;
-{
-	vchar_t *buf = NULL;
-	char *p;
-	int len;
-	int error = -1;
-
-	if (iph1->skeyid == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "no SKEYID found.\n");
-		goto end;
-	}
-
-	/* SKEYID D */
-	/* SKEYID_d = prf(SKEYID, g^xy | CKY-I | CKY-R | 0) */
-	len = iph1->dhgxy->l + sizeof(cookie_t) * 2 + 1;
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get skeyid buffer\n");
-		goto end;
-	}
-	p = buf->v;
-
-	memcpy(p, iph1->dhgxy->v, iph1->dhgxy->l);
-	p += iph1->dhgxy->l;
-	memcpy(p, (caddr_t)&iph1->index.i_ck, sizeof(cookie_t));
-	p += sizeof(cookie_t);
-	memcpy(p, (caddr_t)&iph1->index.r_ck, sizeof(cookie_t));
-	p += sizeof(cookie_t);
-	*p = 0;
-	iph1->skeyid_d = oakley_prf(iph1->skeyid, buf, iph1);
-	if (iph1->skeyid_d == NULL)
-		goto end;
-
-	vfree(buf);
-	buf = NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "SKEYID_d computed:\n");
-	plogdump(LLV_DEBUG, iph1->skeyid_d->v, iph1->skeyid_d->l);
-
-	/* SKEYID A */
-	/* SKEYID_a = prf(SKEYID, SKEYID_d | g^xy | CKY-I | CKY-R | 1) */
-	len = iph1->skeyid_d->l + iph1->dhgxy->l + sizeof(cookie_t) * 2 + 1;
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get skeyid buffer\n");
-		goto end;
-	}
-	p = buf->v;
-	memcpy(p, iph1->skeyid_d->v, iph1->skeyid_d->l);
-	p += iph1->skeyid_d->l;
-	memcpy(p, iph1->dhgxy->v, iph1->dhgxy->l);
-	p += iph1->dhgxy->l;
-	memcpy(p, (caddr_t)&iph1->index.i_ck, sizeof(cookie_t));
-	p += sizeof(cookie_t);
-	memcpy(p, (caddr_t)&iph1->index.r_ck, sizeof(cookie_t));
-	p += sizeof(cookie_t);
-	*p = 1;
-	iph1->skeyid_a = oakley_prf(iph1->skeyid, buf, iph1);
-	if (iph1->skeyid_a == NULL)
-		goto end;
-
-	vfree(buf);
-	buf = NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "SKEYID_a computed:\n");
-	plogdump(LLV_DEBUG, iph1->skeyid_a->v, iph1->skeyid_a->l);
-
-	/* SKEYID E */
-	/* SKEYID_e = prf(SKEYID, SKEYID_a | g^xy | CKY-I | CKY-R | 2) */
-	len = iph1->skeyid_a->l + iph1->dhgxy->l + sizeof(cookie_t) * 2 + 1;
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get skeyid buffer\n");
-		goto end;
-	}
-	p = buf->v;
-	memcpy(p, iph1->skeyid_a->v, iph1->skeyid_a->l);
-	p += iph1->skeyid_a->l;
-	memcpy(p, iph1->dhgxy->v, iph1->dhgxy->l);
-	p += iph1->dhgxy->l;
-	memcpy(p, (caddr_t)&iph1->index.i_ck, sizeof(cookie_t));
-	p += sizeof(cookie_t);
-	memcpy(p, (caddr_t)&iph1->index.r_ck, sizeof(cookie_t));
-	p += sizeof(cookie_t);
-	*p = 2;
-	iph1->skeyid_e = oakley_prf(iph1->skeyid, buf, iph1);
-	if (iph1->skeyid_e == NULL)
-		goto end;
-
-	vfree(buf);
-	buf = NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "SKEYID_e computed:\n");
-	plogdump(LLV_DEBUG, iph1->skeyid_e->v, iph1->skeyid_e->l);
-
-	error = 0;
-
-end:
-	if (buf != NULL)
-		vfree(buf);
-	return error;
-}
-
-/*
- * compute final encryption key.
- * see Appendix B.
- */
-int
-oakley_compute_enckey(iph1)
-	struct ph1handle *iph1;
-{
-	u_int keylen, prflen;
-	int error = -1;
-
-	/* RFC2409 p39 */
-	keylen = alg_oakley_encdef_keylen(iph1->approval->enctype,
-					iph1->approval->encklen);
-	if (keylen == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid encryption algoritym %d, "
-			"or invalid key length %d.\n",
-			iph1->approval->enctype,
-			iph1->approval->encklen);
-		goto end;
-	}
-	iph1->key = vmalloc(keylen >> 3);
-	if (iph1->key == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get key buffer\n");
-		goto end;
-	}
-
-	/* set prf length */
-	prflen = alg_oakley_hashdef_hashlen(iph1->approval->hashtype);
-	if (prflen == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid hash type %d.\n", iph1->approval->hashtype);
-		goto end;
-	}
-
-	/* see isakmp-oakley-08 5.3. */
-	if (iph1->key->l <= iph1->skeyid_e->l) {
-		/*
-		 * if length(Ka) <= length(SKEYID_e)
-		 *	Ka = first length(K) bit of SKEYID_e
-		 */
-		memcpy(iph1->key->v, iph1->skeyid_e->v, iph1->key->l);
-	} else {
-		vchar_t *buf = NULL, *res = NULL;
-		u_char *p, *ep;
-		int cplen;
-		int subkey;
-
-		/*
-		 * otherwise,
-		 *	Ka = K1 | K2 | K3
-		 * where
-		 *	K1 = prf(SKEYID_e, 0)
-		 *	K2 = prf(SKEYID_e, K1)
-		 *	K3 = prf(SKEYID_e, K2)
-		 */
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"len(SKEYID_e) < len(Ka) (%zu < %zu), "
-			"generating long key (Ka = K1 | K2 | ...)\n",
-			iph1->skeyid_e->l, iph1->key->l);
-
-		if ((buf = vmalloc(prflen >> 3)) == 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get key buffer\n");
-			goto end;
-		}
-		p = (u_char *)iph1->key->v;
-		ep = p + iph1->key->l;
-
-		subkey = 1;
-		while (p < ep) {
-			if (p == (u_char *)iph1->key->v) {
-				/* just for computing K1 */
-				buf->v[0] = 0;
-				buf->l = 1;
-			}
-			res = oakley_prf(iph1->skeyid_e, buf, iph1);
-			if (res == NULL) {
-				vfree(buf);
-				goto end;
-			}
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"compute intermediate encryption key K%d\n",
-				subkey);
-			plogdump(LLV_DEBUG, buf->v, buf->l);
-			plogdump(LLV_DEBUG, res->v, res->l);
-
-			cplen = (res->l < ep - p) ? res->l : ep - p;
-			memcpy(p, res->v, cplen);
-			p += cplen;
-
-			buf->l = prflen >> 3;	/* to cancel K1 speciality */
-			if (res->l != buf->l) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"internal error: res->l=%zu buf->l=%zu\n",
-					res->l, buf->l);
-				vfree(res);
-				vfree(buf);
-				goto end;
-			}
-			memcpy(buf->v, res->v, res->l);
-			vfree(res);
-			subkey++;
-		}
-
-		vfree(buf);
-	}
-
-	/*
-	 * don't check any weak key or not.
-	 * draft-ietf-ipsec-ike-01.txt Appendix B.
-	 * draft-ietf-ipsec-ciph-aes-cbc-00.txt Section 2.3.
-	 */
-#if 0
-	/* weakkey check */
-	if (iph1->approval->enctype > ARRAYLEN(oakley_encdef)
-	 || oakley_encdef[iph1->approval->enctype].weakkey == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"encryption algoritym %d isn't supported.\n",
-			iph1->approval->enctype);
-		goto end;
-	}
-	if ((oakley_encdef[iph1->approval->enctype].weakkey)(iph1->key)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"weakkey was generated.\n");
-		goto end;
-	}
-#endif
-
-	plog(LLV_DEBUG, LOCATION, NULL, "final encryption key computed:\n");
-	plogdump(LLV_DEBUG, iph1->key->v, iph1->key->l);
-
-	error = 0;
-
-end:
-	return error;
-}
-
-/* allocated new buffer for CERT */
-cert_t *
-oakley_newcert()
-{
-	cert_t *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get cert's buffer\n");
-		return NULL;
-	}
-
-	new->pl = NULL;
-
-	return new;
-}
-
-/* delete buffer for CERT */
-void
-oakley_delcert(cert)
-	cert_t *cert;
-{
-	if (!cert)
-		return;
-	if (cert->pl)
-		VPTRINIT(cert->pl);
-	racoon_free(cert);
-}
-
-/*
- * compute IV and set to ph1handle
- *	IV = hash(g^xi | g^xr)
- * see 4.1 Phase 1 state in draft-ietf-ipsec-ike.
- */
-int
-oakley_newiv(iph1)
-	struct ph1handle *iph1;
-{
-	struct isakmp_ivm *newivm = NULL;
-	vchar_t *buf = NULL, *bp;
-	char *p;
-	int len;
-
-	/* create buffer */
-	len = iph1->dhpub->l + iph1->dhpub_p->l;
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get iv buffer\n");
-		return -1;
-	}
-
-	p = buf->v;
-
-	bp = (iph1->side == INITIATOR ? iph1->dhpub : iph1->dhpub_p);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	bp = (iph1->side == INITIATOR ? iph1->dhpub_p : iph1->dhpub);
-	memcpy(p, bp->v, bp->l);
-	p += bp->l;
-
-	/* allocate IVm */
-	newivm = racoon_calloc(1, sizeof(struct isakmp_ivm));
-	if (newivm == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get iv buffer\n");
-		vfree(buf);
-		return -1;
-	}
-
-	/* compute IV */
-	newivm->iv = oakley_hash(buf, iph1);
-	if (newivm->iv == NULL) {
-		vfree(buf);
-		oakley_delivm(newivm);
-		return -1;
-	}
-
-	/* adjust length of iv */
-	newivm->iv->l = alg_oakley_encdef_blocklen(iph1->approval->enctype);
-	if (newivm->iv->l == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid encryption algoriym %d.\n",
-			iph1->approval->enctype);
-		vfree(buf);
-		oakley_delivm(newivm);
-		return -1;
-	}
-
-	/* create buffer to save iv */
-	if ((newivm->ive = vdup(newivm->iv)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"vdup (%s)\n", strerror(errno));
-		vfree(buf);
-		oakley_delivm(newivm);
-		return -1;
-	}
-
-	vfree(buf);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "IV computed:\n");
-	plogdump(LLV_DEBUG, newivm->iv->v, newivm->iv->l);
-
-	iph1->ivm = newivm;
-
-	return 0;
-}
-
-/*
- * compute IV for the payload after phase 1.
- * It's not limited for phase 2.
- * if pahse 1 was encrypted.
- *	IV = hash(last CBC block of Phase 1 | M-ID)
- * if phase 1 was not encrypted.
- *	IV = hash(phase 1 IV | M-ID)
- * see 4.2 Phase 2 state in draft-ietf-ipsec-ike.
- */
-struct isakmp_ivm *
-oakley_newiv2(iph1, msgid)
-	struct ph1handle *iph1;
-	u_int32_t msgid;
-{
-	struct isakmp_ivm *newivm = NULL;
-	vchar_t *buf = NULL;
-	char *p;
-	int len;
-	int error = -1;
-
-	/* create buffer */
-	len = iph1->ivm->iv->l + sizeof(msgid_t);
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get iv buffer\n");
-		goto end;
-	}
-
-	p = buf->v;
-
-	memcpy(p, iph1->ivm->iv->v, iph1->ivm->iv->l);
-	p += iph1->ivm->iv->l;
-
-	memcpy(p, &msgid, sizeof(msgid));
-
-	plog(LLV_DEBUG, LOCATION, NULL, "compute IV for phase2\n");
-	plog(LLV_DEBUG, LOCATION, NULL, "phase1 last IV:\n");
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-	/* allocate IVm */
-	newivm = racoon_calloc(1, sizeof(struct isakmp_ivm));
-	if (newivm == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get iv buffer\n");
-		goto end;
-	}
-
-	/* compute IV */
-	if ((newivm->iv = oakley_hash(buf, iph1)) == NULL)
-		goto end;
-
-	/* adjust length of iv */
-	newivm->iv->l = alg_oakley_encdef_blocklen(iph1->approval->enctype);
-	if (newivm->iv->l == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid encryption algoriym %d.\n",
-			iph1->approval->enctype);
-		goto end;
-	}
-
-	/* create buffer to save new iv */
-	if ((newivm->ive = vdup(newivm->iv)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "vdup (%s)\n", strerror(errno));
-		goto end;
-	}
-
-	error = 0;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "phase2 IV computed:\n");
-	plogdump(LLV_DEBUG, newivm->iv->v, newivm->iv->l);
-
-end:
-	if (error && newivm != NULL){
-		oakley_delivm(newivm);
-		newivm=NULL;
-	}
-	if (buf != NULL)
-		vfree(buf);
-	return newivm;
-}
-
-void
-oakley_delivm(ivm)
-	struct isakmp_ivm *ivm;
-{
-	if (ivm == NULL)
-		return;
-
-	if (ivm->iv != NULL)
-		vfree(ivm->iv);
-	if (ivm->ive != NULL)
-		vfree(ivm->ive);
-	racoon_free(ivm);
-	plog(LLV_DEBUG, LOCATION, NULL, "IV freed\n");
-
-	return;
-}
-
-/*
- * decrypt packet.
- *   save new iv and old iv.
- */
-vchar_t *
-oakley_do_decrypt(iph1, msg, ivdp, ivep)
-	struct ph1handle *iph1;
-	vchar_t *msg, *ivdp, *ivep;
-{
-	vchar_t *buf = NULL, *new = NULL;
-	char *pl;
-	int len;
-	u_int8_t padlen;
-	int blen;
-	int error = -1;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "begin decryption.\n");
-
-	blen = alg_oakley_encdef_blocklen(iph1->approval->enctype);
-	if (blen == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid encryption algoriym %d.\n",
-			iph1->approval->enctype);
-		goto end;
-	}
-
-	/* save IV for next, but not sync. */
-	memset(ivep->v, 0, ivep->l);
-	memcpy(ivep->v, (caddr_t)&msg->v[msg->l - blen], blen);
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"IV was saved for next processing:\n");
-	plogdump(LLV_DEBUG, ivep->v, ivep->l);
-
-	pl = msg->v + sizeof(struct isakmp);
-
-	len = msg->l - sizeof(struct isakmp);
-
-	/* create buffer */
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to decrypt.\n");
-		goto end;
-	}
-	memcpy(buf->v, pl, len);
-
-	/* do decrypt */
-	new = alg_oakley_encdef_decrypt(iph1->approval->enctype,
-					buf, iph1->key, ivdp);
-	if (new == NULL || new->v == NULL || new->l == 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"decryption %d failed.\n", iph1->approval->enctype);
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "with key:\n");
-	plogdump(LLV_DEBUG, iph1->key->v, iph1->key->l);
-
-	vfree(buf);
-	buf = NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "decrypted payload by IV:\n");
-	plogdump(LLV_DEBUG, ivdp->v, ivdp->l);
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"decrypted payload, but not trimed.\n");
-	plogdump(LLV_DEBUG, new->v, new->l);
-
-	/* get padding length */
-	if (lcconf->pad_excltail)
-		padlen = new->v[new->l - 1] + 1;
-	else
-		padlen = new->v[new->l - 1];
-	plog(LLV_DEBUG, LOCATION, NULL, "padding len=%u\n", padlen);
-
-	/* trim padding */
-	if (lcconf->pad_strict) {
-		if (padlen > new->l) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalied padding len=%u, buflen=%zu.\n",
-				padlen, new->l);
-			plogdump(LLV_ERROR, new->v, new->l);
-			goto end;
-		}
-		new->l -= padlen;
-		plog(LLV_DEBUG, LOCATION, NULL, "trimmed padding\n");
-	} else {
-		plog(LLV_DEBUG, LOCATION, NULL, "skip to trim padding.\n");
-	}
-
-	/* create new buffer */
-	len = sizeof(struct isakmp) + new->l;
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to decrypt.\n");
-		goto end;
-	}
-	memcpy(buf->v, msg->v, sizeof(struct isakmp));
-	memcpy(buf->v + sizeof(struct isakmp), new->v, new->l);
-	((struct isakmp *)buf->v)->len = htonl(buf->l);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "decrypted.\n");
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-#ifdef HAVE_PRINT_ISAKMP_C
-	isakmp_printpacket(buf, iph1->remote, iph1->local, 1);
-#endif
-
-	error = 0;
-
-end:
-	if (error && buf != NULL) {
-		vfree(buf);
-		buf = NULL;
-	}
-	if (new != NULL)
-		vfree(new);
-
-	return buf;
-}
-
-/*
- * encrypt packet.
- */
-vchar_t *
-oakley_do_encrypt(iph1, msg, ivep, ivp)
-	struct ph1handle *iph1;
-	vchar_t *msg, *ivep, *ivp;
-{
-	vchar_t *buf = 0, *new = 0;
-	char *pl;
-	int len;
-	u_int padlen;
-	int blen;
-	int error = -1;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "begin encryption.\n");
-
-	/* set cbc block length */
-	blen = alg_oakley_encdef_blocklen(iph1->approval->enctype);
-	if (blen == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid encryption algoriym %d.\n",
-			iph1->approval->enctype);
-		goto end;
-	}
-
-	pl = msg->v + sizeof(struct isakmp);
-	len = msg->l - sizeof(struct isakmp);
-
-	/* add padding */
-	padlen = oakley_padlen(len, blen);
-	plog(LLV_DEBUG, LOCATION, NULL, "pad length = %u\n", padlen);
-
-	/* create buffer */
-	buf = vmalloc(len + padlen);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to encrypt.\n");
-		goto end;
-	}
-        if (padlen) {
-                int i;
-		char *p = &buf->v[len];
-		if (lcconf->pad_random) {
-			for (i = 0; i < padlen; i++)
-				*p++ = eay_random() & 0xff;
-		}
-        }
-        memcpy(buf->v, pl, len);
-
-	/* make pad into tail */
-	if (lcconf->pad_excltail)
-		buf->v[len + padlen - 1] = padlen - 1;
-	else
-		buf->v[len + padlen - 1] = padlen;
-
-	plogdump(LLV_DEBUG, buf->v, buf->l);
-
-	/* do encrypt */
-	new = alg_oakley_encdef_encrypt(iph1->approval->enctype,
-					buf, iph1->key, ivep);
-	if (new == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"encryption %d failed.\n", iph1->approval->enctype);
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "with key:\n");
-	plogdump(LLV_DEBUG, iph1->key->v, iph1->key->l);
-
-	vfree(buf);
-	buf = NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "encrypted payload by IV:\n");
-	plogdump(LLV_DEBUG, ivep->v, ivep->l);
-
-	/* save IV for next */
-	memset(ivp->v, 0, ivp->l);
-	memcpy(ivp->v, (caddr_t)&new->v[new->l - blen], blen);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "save IV for next:\n");
-	plogdump(LLV_DEBUG, ivp->v, ivp->l);
-
-	/* create new buffer */
-	len = sizeof(struct isakmp) + new->l;
-	buf = vmalloc(len);
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to encrypt.\n");
-		goto end;
-	}
-	memcpy(buf->v, msg->v, sizeof(struct isakmp));
-	memcpy(buf->v + sizeof(struct isakmp), new->v, new->l);
-	((struct isakmp *)buf->v)->len = htonl(buf->l);
-
-	error = 0;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "encrypted.\n");
-
-end:
-	if (error && buf != NULL) {
-		vfree(buf);
-		buf = NULL;
-	}
-	if (new != NULL)
-		vfree(new);
-
-	return buf;
-}
-
-/* culculate padding length */
-static int
-oakley_padlen(len, base)
-	int len, base;
-{
-	int padlen;
-
-	padlen = base - len % base;
-
-	if (lcconf->pad_randomlen)
-		padlen += ((eay_random() % (lcconf->pad_maxsize + 1) + 1) *
-		    base);
-
-	return padlen;
-}
-
diff --git a/src/racoon/oakley.h b/src/racoon/oakley.h
deleted file mode 100644
index a8dbbd2..0000000
--- a/src/racoon/oakley.h
+++ /dev/null
@@ -1,243 +0,0 @@
-/*	$NetBSD: oakley.h,v 1.5 2006/10/06 12:02:27 manu Exp $	*/
-
-/* Id: oakley.h,v 1.13 2005/05/30 20:12:43 fredsen Exp */
-
-/*
- * 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.
- */
-
-#ifndef _OAKLEY_H
-#define _OAKLEY_H
-
-#include "vmbuf.h"
-
-/* refer to RFC 2409 */
-
-/* Attribute Classes */
-#define OAKLEY_ATTR_ENC_ALG		1 /* B */
-#define   OAKLEY_ATTR_ENC_ALG_DES		1
-#define   OAKLEY_ATTR_ENC_ALG_IDEA		2
-#define   OAKLEY_ATTR_ENC_ALG_BLOWFISH		3
-#define   OAKLEY_ATTR_ENC_ALG_RC5		4
-#define   OAKLEY_ATTR_ENC_ALG_3DES		5
-#define   OAKLEY_ATTR_ENC_ALG_CAST		6
-#define   OAKLEY_ATTR_ENC_ALG_AES		7
-#define   OAKLEY_ATTR_ENC_ALG_CAMELLIA		8	
-					/*	65001 - 65535 Private Use */
-#define OAKLEY_ATTR_HASH_ALG		2 /* B */
-#define   OAKLEY_ATTR_HASH_ALG_MD5		1
-#define   OAKLEY_ATTR_HASH_ALG_SHA		2
-#define   OAKLEY_ATTR_HASH_ALG_TIGER		3
-#if defined(WITH_SHA2)
-#define   OAKLEY_ATTR_HASH_ALG_SHA2_256		4
-#define   OAKLEY_ATTR_HASH_ALG_SHA2_384		5
-#define   OAKLEY_ATTR_HASH_ALG_SHA2_512		6
-#endif
-					/*	65001 - 65535 Private Use */
-#define OAKLEY_ATTR_AUTH_METHOD		3 /* B */
-#define   OAKLEY_ATTR_AUTH_METHOD_PSKEY		1
-#define   OAKLEY_ATTR_AUTH_METHOD_DSSSIG	2
-#define   OAKLEY_ATTR_AUTH_METHOD_RSASIG	3
-#define   OAKLEY_ATTR_AUTH_METHOD_RSAENC	4
-#define   OAKLEY_ATTR_AUTH_METHOD_RSAREV	5
-#define   OAKLEY_ATTR_AUTH_METHOD_EGENC		6
-#define   OAKLEY_ATTR_AUTH_METHOD_EGREV		7
-	/* Hybrid Auth */
-#ifdef ENABLE_HYBRID    
-#define   OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I	64221
-#define	  OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R	64222
-#define   OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I	64223
-#define   OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R	64224
-
-					/*	65001 - 65535 Private Use */
-
-        /* Plain Xauth */
-#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I	65001
-#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R	65002
-#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_I	65003
-#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_DSSSIG_R	65004
-#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I	65005
-#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R	65006
-#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_I	65007
-#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAENC_R	65008
-#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_I	65009
-#define OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSAREV_R	65010
-#endif
-
-					/*	65500 -> still private
-					 * to avoid clash with GSSAPI_KRB below 
-					 */
-#define FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I	65500
-
-
-	/*
-	 * The following are valid when the Vendor ID is one of
-	 * the following:
-	 *
-	 *	MD5("A GSS-API Authentication Method for IKE")
-	 *	MD5("GSSAPI") (recognized by Windows 2000)
-	 *	MD5("MS NT5 ISAKMPOAKLEY") (sent by Windows 2000)
-	 */
-#define   OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB	65001
-#define OAKLEY_ATTR_GRP_DESC		4 /* B */
-#define   OAKLEY_ATTR_GRP_DESC_MODP768		1
-#define   OAKLEY_ATTR_GRP_DESC_MODP1024		2
-#define   OAKLEY_ATTR_GRP_DESC_EC2N155		3
-#define   OAKLEY_ATTR_GRP_DESC_EC2N185		4
-#define   OAKLEY_ATTR_GRP_DESC_MODP1536		5
-#define   OAKLEY_ATTR_GRP_DESC_MODP2048		14
-#define   OAKLEY_ATTR_GRP_DESC_MODP3072		15
-#define   OAKLEY_ATTR_GRP_DESC_MODP4096		16
-#define   OAKLEY_ATTR_GRP_DESC_MODP6144		17
-#define   OAKLEY_ATTR_GRP_DESC_MODP8192		18
-					/*	32768 - 65535 Private Use */
-#define OAKLEY_ATTR_GRP_TYPE		5 /* B */
-#define   OAKLEY_ATTR_GRP_TYPE_MODP		1
-#define   OAKLEY_ATTR_GRP_TYPE_ECP		2
-#define   OAKLEY_ATTR_GRP_TYPE_EC2N		3
-					/*	65001 - 65535 Private Use */
-#define OAKLEY_ATTR_GRP_PI		6 /* V */
-#define OAKLEY_ATTR_GRP_GEN_ONE		7 /* V */
-#define OAKLEY_ATTR_GRP_GEN_TWO		8 /* V */
-#define OAKLEY_ATTR_GRP_CURVE_A		9 /* V */
-#define OAKLEY_ATTR_GRP_CURVE_B		10 /* V */
-#define OAKLEY_ATTR_SA_LD_TYPE		11 /* B */
-#define   OAKLEY_ATTR_SA_LD_TYPE_DEFAULT	1
-#define   OAKLEY_ATTR_SA_LD_TYPE_SEC		1
-#define   OAKLEY_ATTR_SA_LD_TYPE_KB		2
-#define   OAKLEY_ATTR_SA_LD_TYPE_MAX		3
-					/*	65001 - 65535 Private Use */
-#define OAKLEY_ATTR_SA_LD		12 /* V */
-#define   OAKLEY_ATTR_SA_LD_SEC_DEFAULT		28800 /* 8 hours */
-#define OAKLEY_ATTR_PRF			13 /* B */
-#define OAKLEY_ATTR_KEY_LEN		14 /* B */
-#define OAKLEY_ATTR_FIELD_SIZE		15 /* B */
-#define OAKLEY_ATTR_GRP_ORDER		16 /* V */
-#define OAKLEY_ATTR_BLOCK_SIZE		17 /* B */
-				/*	16384 - 32767 Private Use */
-
-	/*
-	 * The following are valid when the Vendor ID is one of
-	 * the following:
-	 *
-	 *	MD5("A GSS-API Authentication Method for IKE")
-	 *	MD5("GSSAPI") (recognized by Windows 2000)
-	 *	MD5("MS NT5 ISAKMPOAKLEY") (sent by Windows 2000)
-	 */
-#define OAKLEY_ATTR_GSS_ID		16384
-
-#define MAXPADLWORD	20
-
-struct dhgroup {
-	int type;
-	vchar_t *prime;
-	int gen1;
-	int gen2;
-	vchar_t *curve_a;
-	vchar_t *curve_b;
-	vchar_t *order;
-};
-
-/* certificate holder */
-typedef struct cert_t_tag {
-	u_int8_t type;		/* type of CERT, must be same to pl->v[0]*/
-	vchar_t cert;		/* pointer to the CERT */
-	vchar_t *pl;		/* CERT payload minus isakmp general header */
-} cert_t;
-
-struct ph1handle;
-struct ph2handle;
-struct isakmp_ivm;
-
-extern int oakley_get_defaultlifetime __P((void));
-
-extern int oakley_dhinit __P((void));
-extern void oakley_dhgrp_free __P((struct dhgroup *));
-extern int oakley_dh_compute __P((const struct dhgroup *,
-	vchar_t *, vchar_t *, vchar_t *, vchar_t **));
-extern int oakley_dh_generate __P((const struct dhgroup *,
-	vchar_t **, vchar_t **));
-extern int oakley_setdhgroup __P((int, struct dhgroup **));
-
-extern vchar_t *oakley_prf __P((vchar_t *, vchar_t *, struct ph1handle *));
-extern vchar_t *oakley_hash __P((vchar_t *, struct ph1handle *));
-
-extern int oakley_compute_keymat __P((struct ph2handle *, int));
-
-#if notyet
-extern vchar_t *oakley_compute_hashx __P((void));
-#endif
-extern vchar_t *oakley_compute_hash3 __P((struct ph1handle *,
-	u_int32_t, vchar_t *));
-extern vchar_t *oakley_compute_hash1 __P((struct ph1handle *,
-	u_int32_t, vchar_t *));
-extern vchar_t *oakley_ph1hash_common __P((struct ph1handle *, int));
-extern vchar_t *oakley_ph1hash_base_i __P((struct ph1handle *, int));
-extern vchar_t *oakley_ph1hash_base_r __P((struct ph1handle *, int));
-
-extern int oakley_validate_auth __P((struct ph1handle *));
-extern int oakley_getmycert __P((struct ph1handle *));
-extern int oakley_getsign __P((struct ph1handle *));
-extern vchar_t *oakley_getcr __P((struct ph1handle *));
-extern int oakley_checkcr __P((struct ph1handle *));
-extern int oakley_needcr __P((int));
-struct isakmp_gen;
-extern int oakley_savecert __P((struct ph1handle *, struct isakmp_gen *));
-extern int oakley_savecr __P((struct ph1handle *, struct isakmp_gen *));
-
-extern int oakley_skeyid __P((struct ph1handle *));
-extern int oakley_skeyid_dae __P((struct ph1handle *));
-
-extern int oakley_compute_enckey __P((struct ph1handle *));
-extern cert_t *oakley_newcert __P((void));
-extern void oakley_delcert __P((cert_t *));
-extern int oakley_newiv __P((struct ph1handle *));
-extern struct isakmp_ivm *oakley_newiv2 __P((struct ph1handle *, u_int32_t));
-extern void oakley_delivm __P((struct isakmp_ivm *));
-extern vchar_t *oakley_do_decrypt __P((struct ph1handle *,
-	vchar_t *, vchar_t *, vchar_t *));
-extern vchar_t *oakley_do_encrypt __P((struct ph1handle *,
-	vchar_t *, vchar_t *, vchar_t *));
-
-#ifdef ENABLE_HYBRID
-#define AUTHMETHOD(iph1)						     \
-    (((iph1)->rmconf->xauth &&						     \
-    (iph1)->approval->authmethod == OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I) ? \
-	FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I : (iph1)->approval->authmethod)
-#define RMAUTHMETHOD(iph1)						     \
-    (((iph1)->rmconf->xauth &&						     \
-    (iph1)->rmconf->proposal->authmethod ==                                  \
-	OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I) ?                             \
-	FICTIVE_AUTH_METHOD_XAUTH_PSKEY_I :                                  \
-	(iph1)->rmconf->proposal->authmethod)
-#else
-#define AUTHMETHOD(iph1) (iph1)->approval->authmethod
-#define RMAUTHMETHOD(iph1) (iph1)->rmconf->proposal->authmethod
-#endif /* ENABLE_HYBRID */
-
-#endif /* _OAKLEY_H */
diff --git a/src/racoon/pfkey.c b/src/racoon/pfkey.c
deleted file mode 100644
index e73acc8..0000000
--- a/src/racoon/pfkey.c
+++ /dev/null
@@ -1,3157 +0,0 @@
-/*	$NetBSD: pfkey.c,v 1.18.4.5 2008/03/05 22:14:24 mgrooms Exp $	*/
-
-/* $Id: pfkey.c,v 1.18.4.5 2008/03/05 22:14:24 mgrooms Exp $ */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <stdlib.h>
-#include <string.h>
-#include <stdio.h>
-#include <netdb.h>
-#include <errno.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <netdb.h>
-#include <netinet/in.h>
-#include <arpa/inet.h>
-
-#ifdef ENABLE_NATT
-# ifdef __linux__
-#  include <linux/udp.h>
-# endif
-# if defined(__NetBSD__) || defined(__FreeBSD__) ||	\
-  (defined(__APPLE__) && defined(__MACH__))
-#  include <netinet/udp.h>
-# endif
-#endif
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/queue.h>
-#ifndef ANDROID_CHANGES
-#include <sys/sysctl.h>
-#endif
-
-#include <net/route.h>
-#include <net/pfkeyv2.h>
-
-#include <netinet/in.h>
-#include PATH_IPSEC_H
-#include <fcntl.h>
-
-#include "libpfkey.h"
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "debug.h"
-
-#include "schedule.h"
-#include "localconf.h"
-#include "remoteconf.h"
-#include "handler.h"
-#include "policy.h"
-#include "proposal.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "isakmp_inf.h"
-#include "ipsec_doi.h"
-#include "oakley.h"
-#include "pfkey.h"
-#include "algorithm.h"
-#include "sainfo.h"
-#include "admin.h"
-#include "privsep.h"
-#include "strnames.h"
-#include "backupsa.h"
-#include "gcmalloc.h"
-#include "nattraversal.h"
-#include "crypto_openssl.h"
-#include "grabmyaddr.h"
-
-#if defined(SADB_X_EALG_RIJNDAELCBC) && !defined(SADB_X_EALG_AESCBC)
-#define SADB_X_EALG_AESCBC  SADB_X_EALG_RIJNDAELCBC
-#endif
-
-/* prototype */
-static u_int ipsecdoi2pfkey_aalg __P((u_int));
-static u_int ipsecdoi2pfkey_ealg __P((u_int));
-static u_int ipsecdoi2pfkey_calg __P((u_int));
-static u_int ipsecdoi2pfkey_alg __P((u_int, u_int));
-static u_int keylen_aalg __P((u_int));
-static u_int keylen_ealg __P((u_int, int));
-
-static int pk_recvgetspi __P((caddr_t *));
-static int pk_recvupdate __P((caddr_t *));
-static int pk_recvadd __P((caddr_t *));
-static int pk_recvdelete __P((caddr_t *));
-static int pk_recvacquire __P((caddr_t *));
-static int pk_recvexpire __P((caddr_t *));
-static int pk_recvflush __P((caddr_t *));
-static int getsadbpolicy __P((caddr_t *, int *, int, struct ph2handle *));
-static int pk_recvspdupdate __P((caddr_t *));
-static int pk_recvspdadd __P((caddr_t *));
-static int pk_recvspddelete __P((caddr_t *));
-static int pk_recvspdexpire __P((caddr_t *));
-static int pk_recvspdget __P((caddr_t *));
-static int pk_recvspddump __P((caddr_t *));
-static int pk_recvspdflush __P((caddr_t *));
-static struct sadb_msg *pk_recv __P((int, int *));
-
-static int (*pkrecvf[]) __P((caddr_t *)) = {
-NULL,
-pk_recvgetspi,
-pk_recvupdate,
-pk_recvadd,
-pk_recvdelete,
-NULL,	/* SADB_GET */
-pk_recvacquire,
-NULL,	/* SABD_REGISTER */
-pk_recvexpire,
-pk_recvflush,
-NULL,	/* SADB_DUMP */
-NULL,	/* SADB_X_PROMISC */
-NULL,	/* SADB_X_PCHANGE */
-pk_recvspdupdate,
-pk_recvspdadd,
-pk_recvspddelete,
-pk_recvspdget,
-NULL,	/* SADB_X_SPDACQUIRE */
-pk_recvspddump,
-pk_recvspdflush,
-NULL,	/* SADB_X_SPDSETIDX */
-pk_recvspdexpire,
-NULL,	/* SADB_X_SPDDELETE2 */
-NULL,	/* SADB_X_NAT_T_NEW_MAPPING */
-NULL,	/* SADB_X_MIGRATE */
-#if (SADB_MAX > 24)
-#error "SADB extra message?"
-#endif
-};
-
-static int addnewsp __P((caddr_t *));
-
-/* cope with old kame headers - ugly */
-#ifndef SADB_X_AALG_MD5
-#define SADB_X_AALG_MD5		SADB_AALG_MD5	
-#endif
-#ifndef SADB_X_AALG_SHA
-#define SADB_X_AALG_SHA		SADB_AALG_SHA
-#endif
-#ifndef SADB_X_AALG_NULL
-#define SADB_X_AALG_NULL	SADB_AALG_NULL
-#endif
-
-#ifndef SADB_X_EALG_BLOWFISHCBC
-#define SADB_X_EALG_BLOWFISHCBC	SADB_EALG_BLOWFISHCBC
-#endif
-#ifndef SADB_X_EALG_CAST128CBC
-#define SADB_X_EALG_CAST128CBC	SADB_EALG_CAST128CBC
-#endif
-#ifndef SADB_X_EALG_RC5CBC
-#ifdef SADB_EALG_RC5CBC
-#define SADB_X_EALG_RC5CBC	SADB_EALG_RC5CBC
-#endif
-#endif
-
-/*
- * PF_KEY packet handler
- *	0: success
- *	-1: fail
- */
-int
-pfkey_handler()
-{
-	struct sadb_msg *msg;
-	int len;
-	caddr_t mhp[SADB_EXT_MAX + 1];
-	int error = -1;
-
-	/* receive pfkey message. */
-	len = 0;
-	msg = (struct sadb_msg *)pk_recv(lcconf->sock_pfkey, &len);
-	if (msg == NULL) {
-		if (len < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to recv from pfkey (%s)\n",
-				strerror(errno));
-			goto end;
-		} else {
-			/* short message - msg not ready */
-			return 0;
-		}
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "get pfkey %s message\n",
-		s_pfkey_type(msg->sadb_msg_type));
-	plogdump(LLV_DEBUG2, msg, msg->sadb_msg_len << 3);
-
-	/* validity check */
-	if (msg->sadb_msg_errno) {
-		int pri;
-
-		/* when SPD is empty, treat the state as no error. */
-		if (msg->sadb_msg_type == SADB_X_SPDDUMP &&
-		    msg->sadb_msg_errno == ENOENT)
-			pri = LLV_DEBUG;
-		else
-			pri = LLV_ERROR;
-
-		plog(pri, LOCATION, NULL,
-			"pfkey %s failed: %s\n",
-			s_pfkey_type(msg->sadb_msg_type),
-			strerror(msg->sadb_msg_errno));
-
-		goto end;
-	}
-
-	/* check pfkey message. */
-	if (pfkey_align(msg, mhp)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"libipsec failed pfkey align (%s)\n",
-			ipsec_strerror());
-		goto end;
-	}
-	if (pfkey_check(mhp)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"libipsec failed pfkey check (%s)\n",
-			ipsec_strerror());
-		goto end;
-	}
-	msg = (struct sadb_msg *)mhp[0];
-
-	/* safety check */
-	if (msg->sadb_msg_type >= ARRAYLEN(pkrecvf)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unknown PF_KEY message type=%u\n",
-			msg->sadb_msg_type);
-		goto end;
-	}
-
-	if (pkrecvf[msg->sadb_msg_type] == NULL) {
-		plog(LLV_INFO, LOCATION, NULL,
-			"unsupported PF_KEY message %s\n",
-			s_pfkey_type(msg->sadb_msg_type));
-		goto end;
-	}
-
-	if ((pkrecvf[msg->sadb_msg_type])(mhp) < 0)
-		goto end;
-
-	error = 0;
-end:
-	if (msg)
-		racoon_free(msg);
-	return(error);
-}
-
-/*
- * dump SADB
- */
-vchar_t *
-pfkey_dump_sadb(satype)
-	int satype;
-{
-	int s = -1;
-	vchar_t *buf = NULL;
-	pid_t pid = getpid();
-	struct sadb_msg *msg = NULL;
-	size_t bl, ml;
-	int len;
-
-	if ((s = privsep_pfkey_open()) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"libipsec failed pfkey open: %s\n",
-			ipsec_strerror());
-		return NULL;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL, "call pfkey_send_dump\n");
-	if (pfkey_send_dump(s, satype) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"libipsec failed dump: %s\n", ipsec_strerror());
-		goto fail;
-	}
-
-	while (1) {
-		if (msg)
-			racoon_free(msg);
-		msg = pk_recv(s, &len);
-		if (msg == NULL) {
-			if (len < 0)
-				goto done;
-			else
-				continue;
-		}
-
-		if (msg->sadb_msg_type != SADB_DUMP || msg->sadb_msg_pid != pid)
-		{
-		    plog(LLV_DEBUG, LOCATION, NULL,
-			 "discarding non-sadb dump msg %p, our pid=%i\n", msg, pid);
-		    plog(LLV_DEBUG, LOCATION, NULL,
-			 "type %i, pid %i\n", msg->sadb_msg_type, msg->sadb_msg_pid);
-		    continue;
-		}
-		
-
-		ml = msg->sadb_msg_len << 3;
-		bl = buf ? buf->l : 0;
-		buf = vrealloc(buf, bl + ml);
-		if (buf == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to reallocate buffer to dump.\n");
-			goto fail;
-		}
-		memcpy(buf->v + bl, msg, ml);
-
-		if (msg->sadb_msg_seq == 0)
-			break;
-	}
-	goto done;
-
-fail:
-	if (buf)
-		vfree(buf);
-	buf = NULL;
-done:
-	if (msg)
-		racoon_free(msg);
-	if (s >= 0)
-		privsep_pfkey_close(s);
-	return buf;
-}
-
-#ifdef ENABLE_ADMINPORT
-/*
- * flush SADB
- */
-void
-pfkey_flush_sadb(proto)
-	u_int proto;
-{
-	int satype;
-
-	/* convert to SADB_SATYPE */
-	if ((satype = admin2pfkey_proto(proto)) < 0)
-		return;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "call pfkey_send_flush\n");
-	if (pfkey_send_flush(lcconf->sock_pfkey, satype) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"libipsec failed send flush (%s)\n", ipsec_strerror());
-		return;
-	}
-
-	return;
-}
-#endif
-
-/*
- * These are the SATYPEs that we manage.  We register to get
- * PF_KEY messages related to these SATYPEs, and we also use
- * this list to determine which SATYPEs to delete SAs for when
- * we receive an INITIAL-CONTACT.
- */
-const struct pfkey_satype pfkey_satypes[] = {
-	{ SADB_SATYPE_AH,	"AH" },
-	{ SADB_SATYPE_ESP,	"ESP" },
-	{ SADB_X_SATYPE_IPCOMP,	"IPCOMP" },
-};
-const int pfkey_nsatypes =
-    sizeof(pfkey_satypes) / sizeof(pfkey_satypes[0]);
-
-/*
- * PF_KEY initialization
- */
-int
-pfkey_init()
-{
-	int i, reg_fail;
-
-	if ((lcconf->sock_pfkey = privsep_pfkey_open()) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"libipsec failed pfkey open (%s)\n", ipsec_strerror());
-		return -1;
-	}
-	if (fcntl(lcconf->sock_pfkey, F_SETFL, O_NONBLOCK) == -1)
-		plog(LLV_WARNING, LOCATION, NULL,
-		    "failed to set the pfkey socket to NONBLOCK\n");
-
-	for (i = 0, reg_fail = 0; i < pfkey_nsatypes; i++) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-		    "call pfkey_send_register for %s\n",
-		    pfkey_satypes[i].ps_name);
-		if (pfkey_send_register(lcconf->sock_pfkey,
-					pfkey_satypes[i].ps_satype) < 0 ||
-		    pfkey_recv_register(lcconf->sock_pfkey) < 0) {
-			plog(LLV_WARNING, LOCATION, NULL,
-			    "failed to register %s (%s)\n",
-			    pfkey_satypes[i].ps_name,
-			    ipsec_strerror());
-			reg_fail++;
-		}
-	}
-
-	if (reg_fail == pfkey_nsatypes) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to regist any protocol.\n");
-		pfkey_close(lcconf->sock_pfkey);
-		return -1;
-	}
-
-	initsp();
-
-	if (pfkey_send_spddump(lcconf->sock_pfkey) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"libipsec sending spddump failed: %s\n",
-			ipsec_strerror());
-		pfkey_close(lcconf->sock_pfkey);
-		return -1;
-	}
-#if 0
-	if (pfkey_promisc_toggle(1) < 0) {
-		pfkey_close(lcconf->sock_pfkey);
-		return -1;
-	}
-#endif
-	return 0;
-}
-
-/* %%% for conversion */
-/* IPSECDOI_ATTR_AUTH -> SADB_AALG */
-static u_int
-ipsecdoi2pfkey_aalg(hashtype)
-	u_int hashtype;
-{
-	switch (hashtype) {
-	case IPSECDOI_ATTR_AUTH_HMAC_MD5:
-		return SADB_AALG_MD5HMAC;
-	case IPSECDOI_ATTR_AUTH_HMAC_SHA1:
-		return SADB_AALG_SHA1HMAC;
-	case IPSECDOI_ATTR_AUTH_HMAC_SHA2_256:
-#if (defined SADB_X_AALG_SHA2_256) && !defined(SADB_X_AALG_SHA2_256HMAC)
-		return SADB_X_AALG_SHA2_256;
-#else
-		return SADB_X_AALG_SHA2_256HMAC;
-#endif
-	case IPSECDOI_ATTR_AUTH_HMAC_SHA2_384:
-#if (defined SADB_X_AALG_SHA2_384) && !defined(SADB_X_AALG_SHA2_384HMAC)
-		return SADB_X_AALG_SHA2_384;
-#else
-		return SADB_X_AALG_SHA2_384HMAC;
-#endif
-	case IPSECDOI_ATTR_AUTH_HMAC_SHA2_512:
-#if (defined SADB_X_AALG_SHA2_512) && !defined(SADB_X_AALG_SHA2_512HMAC)
-		return SADB_X_AALG_SHA2_512;
-#else
-		return SADB_X_AALG_SHA2_512HMAC;
-#endif
-	case IPSECDOI_ATTR_AUTH_KPDK:		/* need special care */
-		return SADB_AALG_NONE;
-
-	/* not supported */
-	case IPSECDOI_ATTR_AUTH_DES_MAC:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Not supported hash type: %u\n", hashtype);
-		return ~0;
-
-	case 0: /* reserved */
-	default:
-		return SADB_AALG_NONE;
-
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid hash type: %u\n", hashtype);
-		return ~0;
-	}
-	/*NOTREACHED*/
-}
-
-/* IPSECDOI_ESP -> SADB_EALG */
-static u_int
-ipsecdoi2pfkey_ealg(t_id)
-	u_int t_id;
-{
-	switch (t_id) {
-	case IPSECDOI_ESP_DES_IV64:		/* sa_flags |= SADB_X_EXT_OLD */
-		return SADB_EALG_DESCBC;
-	case IPSECDOI_ESP_DES:
-		return SADB_EALG_DESCBC;
-	case IPSECDOI_ESP_3DES:
-		return SADB_EALG_3DESCBC;
-#ifdef SADB_X_EALG_RC5CBC
-	case IPSECDOI_ESP_RC5:
-		return SADB_X_EALG_RC5CBC;
-#endif
-	case IPSECDOI_ESP_CAST:
-		return SADB_X_EALG_CAST128CBC;
-	case IPSECDOI_ESP_BLOWFISH:
-		return SADB_X_EALG_BLOWFISHCBC;
-	case IPSECDOI_ESP_DES_IV32:	/* flags |= (SADB_X_EXT_OLD|
-							SADB_X_EXT_IV4B)*/
-		return SADB_EALG_DESCBC;
-	case IPSECDOI_ESP_NULL:
-		return SADB_EALG_NULL;
-#ifdef SADB_X_EALG_AESCBC
-	case IPSECDOI_ESP_AES:
-		return SADB_X_EALG_AESCBC;
-#endif
-#ifdef SADB_X_EALG_TWOFISHCBC
-	case IPSECDOI_ESP_TWOFISH:
-		return SADB_X_EALG_TWOFISHCBC;
-#endif
-#ifdef SADB_X_EALG_CAMELLIACBC
-	case IPSECDOI_ESP_CAMELLIA:
-		return SADB_X_EALG_CAMELLIACBC;
-#endif
-
-	/* not supported */
-	case IPSECDOI_ESP_3IDEA:
-	case IPSECDOI_ESP_IDEA:
-	case IPSECDOI_ESP_RC4:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Not supported transform: %u\n", t_id);
-		return ~0;
-
-	case 0: /* reserved */
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid transform id: %u\n", t_id);
-		return ~0;
-	}
-	/*NOTREACHED*/
-}
-
-/* IPCOMP -> SADB_CALG */
-static u_int
-ipsecdoi2pfkey_calg(t_id)
-	u_int t_id;
-{
-	switch (t_id) {
-	case IPSECDOI_IPCOMP_OUI:
-		return SADB_X_CALG_OUI;
-	case IPSECDOI_IPCOMP_DEFLATE:
-		return SADB_X_CALG_DEFLATE;
-	case IPSECDOI_IPCOMP_LZS:
-		return SADB_X_CALG_LZS;
-
-	case 0: /* reserved */
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid transform id: %u\n", t_id);
-		return ~0;
-	}
-	/*NOTREACHED*/
-}
-
-/* IPSECDOI_PROTO -> SADB_SATYPE */
-u_int
-ipsecdoi2pfkey_proto(proto)
-	u_int proto;
-{
-	switch (proto) {
-	case IPSECDOI_PROTO_IPSEC_AH:
-		return SADB_SATYPE_AH;
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		return SADB_SATYPE_ESP;
-	case IPSECDOI_PROTO_IPCOMP:
-		return SADB_X_SATYPE_IPCOMP;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid ipsec_doi proto: %u\n", proto);
-		return ~0;
-	}
-	/*NOTREACHED*/
-}
-
-static u_int
-ipsecdoi2pfkey_alg(algclass, type)
-	u_int algclass, type;
-{
-	switch (algclass) {
-	case IPSECDOI_ATTR_AUTH:
-		return ipsecdoi2pfkey_aalg(type);
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		return ipsecdoi2pfkey_ealg(type);
-	case IPSECDOI_PROTO_IPCOMP:
-		return ipsecdoi2pfkey_calg(type);
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid ipsec_doi algclass: %u\n", algclass);
-		return ~0;
-	}
-	/*NOTREACHED*/
-}
-
-/* SADB_SATYPE -> IPSECDOI_PROTO */
-u_int
-pfkey2ipsecdoi_proto(satype)
-	u_int satype;
-{
-	switch (satype) {
-	case SADB_SATYPE_AH:
-		return IPSECDOI_PROTO_IPSEC_AH;
-	case SADB_SATYPE_ESP:
-		return IPSECDOI_PROTO_IPSEC_ESP;
-	case SADB_X_SATYPE_IPCOMP:
-		return IPSECDOI_PROTO_IPCOMP;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid pfkey proto: %u\n", satype);
-		return ~0;
-	}
-	/*NOTREACHED*/
-}
-
-/* IPSECDOI_ATTR_ENC_MODE -> IPSEC_MODE */
-u_int
-ipsecdoi2pfkey_mode(mode)
-	u_int mode;
-{
-	switch (mode) {
-	case IPSECDOI_ATTR_ENC_MODE_TUNNEL:
-#ifdef ENABLE_NATT
-	case IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_RFC:
-	case IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_DRAFT:
-#endif
-		return IPSEC_MODE_TUNNEL;
-	case IPSECDOI_ATTR_ENC_MODE_TRNS:
-#ifdef ENABLE_NATT
-	case IPSECDOI_ATTR_ENC_MODE_UDPTRNS_RFC:
-	case IPSECDOI_ATTR_ENC_MODE_UDPTRNS_DRAFT:
-#endif
-		return IPSEC_MODE_TRANSPORT;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL, "Invalid mode type: %u\n", mode);
-		return ~0;
-	}
-	/*NOTREACHED*/
-}
-
-/* IPSECDOI_ATTR_ENC_MODE -> IPSEC_MODE */
-u_int
-pfkey2ipsecdoi_mode(mode)
-	u_int mode;
-{
-	switch (mode) {
-	case IPSEC_MODE_TUNNEL:
-		return IPSECDOI_ATTR_ENC_MODE_TUNNEL;
-	case IPSEC_MODE_TRANSPORT:
-		return IPSECDOI_ATTR_ENC_MODE_TRNS;
-	case IPSEC_MODE_ANY:
-		return IPSECDOI_ATTR_ENC_MODE_ANY;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL, "Invalid mode type: %u\n", mode);
-		return ~0;
-	}
-	/*NOTREACHED*/
-}
-
-/* default key length for encryption algorithm */
-static u_int
-keylen_aalg(hashtype)
-	u_int hashtype;
-{
-	int res;
-
-	if (hashtype == 0)
-		return SADB_AALG_NONE;
-
-	res = alg_ipsec_hmacdef_hashlen(hashtype);
-	if (res == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid hmac algorithm %u.\n", hashtype);
-		return ~0;
-	}
-	return res;
-}
-
-/* default key length for encryption algorithm */
-static u_int
-keylen_ealg(enctype, encklen)
-	u_int enctype;
-	int encklen;
-{
-	int res;
-
-	res = alg_ipsec_encdef_keylen(enctype, encklen);
-	if (res == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid encryption algorithm %u.\n", enctype);
-		return ~0;
-	}
-	return res;
-}
-
-int
-pfkey_convertfromipsecdoi(proto_id, t_id, hashtype,
-		e_type, e_keylen, a_type, a_keylen, flags)
-	u_int proto_id;
-	u_int t_id;
-	u_int hashtype;
-	u_int *e_type;
-	u_int *e_keylen;
-	u_int *a_type;
-	u_int *a_keylen;
-	u_int *flags;
-{
-	*flags = 0;
-	switch (proto_id) {
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		if ((*e_type = ipsecdoi2pfkey_ealg(t_id)) == ~0)
-			goto bad;
-		if ((*e_keylen = keylen_ealg(t_id, *e_keylen)) == ~0)
-			goto bad;
-		*e_keylen >>= 3;
-
-		if ((*a_type = ipsecdoi2pfkey_aalg(hashtype)) == ~0)
-			goto bad;
-		if ((*a_keylen = keylen_aalg(hashtype)) == ~0)
-			goto bad;
-		*a_keylen >>= 3;
-
-		if (*e_type == SADB_EALG_NONE) {
-			plog(LLV_ERROR, LOCATION, NULL, "no ESP algorithm.\n");
-			goto bad;
-		}
-		break;
-
-	case IPSECDOI_PROTO_IPSEC_AH:
-		if ((*a_type = ipsecdoi2pfkey_aalg(hashtype)) == ~0)
-			goto bad;
-		if ((*a_keylen = keylen_aalg(hashtype)) == ~0)
-			goto bad;
-		*a_keylen >>= 3;
-
-		if (t_id == IPSECDOI_ATTR_AUTH_HMAC_MD5 
-		 && hashtype == IPSECDOI_ATTR_AUTH_KPDK) {
-			/* AH_MD5 + Auth(KPDK) = RFC1826 keyed-MD5 */
-			*a_type = SADB_X_AALG_MD5;
-			*flags |= SADB_X_EXT_OLD;
-		}
-		*e_type = SADB_EALG_NONE;
-		*e_keylen = 0;
-		if (*a_type == SADB_AALG_NONE) {
-			plog(LLV_ERROR, LOCATION, NULL, "no AH algorithm.\n");
-			goto bad;
-		}
-		break;
-
-	case IPSECDOI_PROTO_IPCOMP:
-		if ((*e_type = ipsecdoi2pfkey_calg(t_id)) == ~0)
-			goto bad;
-		*e_keylen = 0;
-
-		*flags = SADB_X_EXT_RAWCPI;
-
-		*a_type = SADB_AALG_NONE;
-		*a_keylen = 0;
-		if (*e_type == SADB_X_CALG_NONE) {
-			plog(LLV_ERROR, LOCATION, NULL, "no IPCOMP algorithm.\n");
-			goto bad;
-		}
-		break;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL, "unknown IPsec protocol.\n");
-		goto bad;
-	}
-
-	return 0;
-
-    bad:
-	errno = EINVAL;
-	return -1;
-}
-
-/* called from scheduler */
-void
-pfkey_timeover_stub(p)
-	void *p;
-{
-
-	pfkey_timeover((struct ph2handle *)p);
-}
-
-void
-pfkey_timeover(iph2)
-	struct ph2handle *iph2;
-{
-	plog(LLV_ERROR, LOCATION, NULL,
-		"%s give up to get IPsec-SA due to time up to wait.\n",
-		saddrwop2str(iph2->dst));
-	SCHED_KILL(iph2->sce);
-
-	/* If initiator side, send error to kernel by SADB_ACQUIRE. */
-	if (iph2->side == INITIATOR)
-		pk_sendeacquire(iph2);
-
-	unbindph12(iph2);
-	remph2(iph2);
-	delph2(iph2);
-
-	return;
-}
-
-/*%%%*/
-/* send getspi message per ipsec protocol per remote address */
-/*
- * the local address and remote address in ph1handle are dealed
- * with destination address and source address respectively.
- * Because SPI is decided by responder.
- */
-int
-pk_sendgetspi(iph2)
-	struct ph2handle *iph2;
-{
-	struct sockaddr *src = NULL, *dst = NULL;
-	u_int satype, mode;
-	struct saprop *pp;
-	struct saproto *pr;
-	u_int32_t minspi, maxspi;
-	int proxy = 0;
-
-	if (iph2->side == INITIATOR) {
-		pp = iph2->proposal;
-		proxy = iph2->ph1->rmconf->support_proxy;
-	} else {
-		pp = iph2->approval;
-		if (iph2->sainfo && iph2->sainfo->id_i)
-			proxy = 1;
-	}
-
-	/* for mobile IPv6 */
-	if (proxy && iph2->src_id && iph2->dst_id &&
-	    ipsecdoi_transportmode(pp)) {
-		src = iph2->src_id;
-		dst = iph2->dst_id;
-	} else {
-		src = iph2->src;
-		dst = iph2->dst;
-	}
-
-	for (pr = pp->head; pr != NULL; pr = pr->next) {
-
-		/* validity check */
-		satype = ipsecdoi2pfkey_proto(pr->proto_id);
-		if (satype == ~0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid proto_id %d\n", pr->proto_id);
-			return -1;
-		}
-		/* this works around a bug in Linux kernel where it allocates 4 byte
-		   spi's for IPCOMP */
-		else if (satype == SADB_X_SATYPE_IPCOMP) {
-			minspi = 0x100;
-			maxspi = 0xffff;
-		}
-		else {
-			minspi = 0;
-			maxspi = 0;
-		}
-		mode = ipsecdoi2pfkey_mode(pr->encmode);
-		if (mode == ~0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid encmode %d\n", pr->encmode);
-			return -1;
-		}
-
-#ifdef ENABLE_NATT
-		/* XXX should we do a copy of src/dst for each pr ?
-		 */
-		if (! pr->udp_encap) {
-			/* Remove port information, that SA doesn't use it */
-			set_port(src, 0);
-			set_port(dst, 0);
-		}
-#endif
-		plog(LLV_DEBUG, LOCATION, NULL, "call pfkey_send_getspi\n");
-		if (pfkey_send_getspi(
-				lcconf->sock_pfkey,
-				satype,
-				mode,
-				dst,			/* src of SA */
-				src,			/* dst of SA */
-				minspi, maxspi,
-				pr->reqid_in, iph2->seq) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"ipseclib failed send getspi (%s)\n",
-				ipsec_strerror());
-			return -1;
-		}
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"pfkey GETSPI sent: %s\n",
-			sadbsecas2str(dst, src, satype, 0, mode));
-	}
-
-	return 0;
-}
-
-/*
- * receive GETSPI from kernel.
- */
-static int
-pk_recvgetspi(mhp) 
-	caddr_t *mhp;
-{
-	struct sadb_msg *msg;
-	struct sadb_sa *sa;
-	struct ph2handle *iph2;
-	struct sockaddr *dst;
-	int proto_id;
-	int allspiok, notfound;
-	struct saprop *pp;
-	struct saproto *pr;
-
-	/* validity check */
-	if (mhp[SADB_EXT_SA] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb getspi message passed.\n");
-		return -1;
-	}
-	msg = (struct sadb_msg *)mhp[0];
-	sa = (struct sadb_sa *)mhp[SADB_EXT_SA];
-	dst = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]); /* note SA dir */
-
-	/* the message has to be processed or not ? */
-	if (msg->sadb_msg_pid != getpid()) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"%s message is not interesting "
-			"because pid %d is not mine.\n",
-			s_pfkey_type(msg->sadb_msg_type),
-			msg->sadb_msg_pid);
-		return -1;
-	}
-
-	iph2 = getph2byseq(msg->sadb_msg_seq);
-	if (iph2 == NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"seq %d of %s message not interesting.\n",
-			msg->sadb_msg_seq,
-			s_pfkey_type(msg->sadb_msg_type));
-		return -1;
-	}
-
-	if (iph2->status != PHASE2ST_GETSPISENT) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatch (db:%d msg:%d)\n",
-			iph2->status, PHASE2ST_GETSPISENT);
-		return -1;
-	}
-
-	/* set SPI, and check to get all spi whether or not */
-	allspiok = 1;
-	notfound = 1;
-	proto_id = pfkey2ipsecdoi_proto(msg->sadb_msg_satype);
-	pp = iph2->side == INITIATOR ? iph2->proposal : iph2->approval;
-
-	for (pr = pp->head; pr != NULL; pr = pr->next) {
-		if (pr->proto_id == proto_id && pr->spi == 0) {
-			pr->spi = sa->sadb_sa_spi;
-			notfound = 0;
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"pfkey GETSPI succeeded: %s\n",
-				sadbsecas2str(iph2->dst, iph2->src,
-				    msg->sadb_msg_satype,
-				    sa->sadb_sa_spi,
-				    ipsecdoi2pfkey_mode(pr->encmode)));
-		}
-		if (pr->spi == 0)
-			allspiok = 0;	/* not get all spi */
-	}
-
-	if (notfound) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"get spi for unknown address %s\n",
-			saddrwop2str(iph2->dst));
-		return -1;
-	}
-
-	if (allspiok) {
-		/* update status */
-		iph2->status = PHASE2ST_GETSPIDONE;
-		if (isakmp_post_getspi(iph2) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to start post getspi.\n");
-			unbindph12(iph2);
-			remph2(iph2);
-			delph2(iph2);
-			iph2 = NULL;
-			return -1;
-		}
-	}
-
-	return 0;
-}
-
-/*
- * set inbound SA
- */
-int
-pk_sendupdate(iph2)
-	struct ph2handle *iph2;
-{
-	struct saproto *pr;
-	struct pfkey_send_sa_args sa_args;
-	int proxy = 0;
-
-	/* sanity check */
-	if (iph2->approval == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no approvaled SAs found.\n");
-	}
-
-	if (iph2->side == INITIATOR)
-		proxy = iph2->ph1->rmconf->support_proxy;
-	else if (iph2->sainfo && iph2->sainfo->id_i)
-		proxy = 1;
-
-	/* fill in some needed for pfkey_send_update2 */
-	memset (&sa_args, 0, sizeof (sa_args));
-	sa_args.so = lcconf->sock_pfkey;
-	sa_args.l_addtime = iph2->approval->lifetime;
-	sa_args.seq = iph2->seq; 
-	sa_args.wsize = 4;
-
-	/* for mobile IPv6 */
-	if (proxy && iph2->src_id && iph2->dst_id &&
-	    ipsecdoi_transportmode(iph2->approval)) {
-		sa_args.dst = iph2->src_id;
-		sa_args.src = iph2->dst_id;
-	} else {
-		sa_args.dst = iph2->src;
-		sa_args.src = iph2->dst;
-	}
-
-	for (pr = iph2->approval->head; pr != NULL; pr = pr->next) {
-		/* validity check */
-		sa_args.satype = ipsecdoi2pfkey_proto(pr->proto_id);
-		if (sa_args.satype == ~0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid proto_id %d\n", pr->proto_id);
-			return -1;
-		}
-		else if (sa_args.satype == SADB_X_SATYPE_IPCOMP) {
-			/* IPCOMP has no replay window */
-			sa_args.wsize = 0;
-		}
-#ifdef ENABLE_SAMODE_UNSPECIFIED
-		sa_args.mode = IPSEC_MODE_ANY;
-#else
-		sa_args.mode = ipsecdoi2pfkey_mode(pr->encmode);
-		if (sa_args.mode == ~0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid encmode %d\n", pr->encmode);
-			return -1;
-		}
-#endif
-		/* set algorithm type and key length */
-		sa_args.e_keylen = pr->head->encklen;
-		if (pfkey_convertfromipsecdoi(
-				pr->proto_id,
-				pr->head->trns_id,
-				pr->head->authtype,
-				&sa_args.e_type, &sa_args.e_keylen,
-				&sa_args.a_type, &sa_args.a_keylen, 
-				&sa_args.flags) < 0)
-			return -1;
-
-#if 0
-		sa_args.l_bytes = iph2->approval->lifebyte * 1024,
-#else
-		sa_args.l_bytes = 0;
-#endif
-
-#ifdef HAVE_SECCTX
-		if (*iph2->approval->sctx.ctx_str) {
-			sa_args.ctxdoi = iph2->approval->sctx.ctx_doi;
-			sa_args.ctxalg = iph2->approval->sctx.ctx_alg;
-			sa_args.ctxstrlen = iph2->approval->sctx.ctx_strlen;
-			sa_args.ctxstr = iph2->approval->sctx.ctx_str;
-		}
-#endif /* HAVE_SECCTX */
-
-#ifdef ENABLE_NATT
-		if (pr->udp_encap) {
-			sa_args.l_natt_type = iph2->ph1->natt_options->encaps_type;
-			sa_args.l_natt_sport = extract_port (iph2->ph1->remote);
-			sa_args.l_natt_dport = extract_port (iph2->ph1->local);
-			sa_args.l_natt_oa = NULL;  // FIXME: Here comes OA!!!
-#ifdef SADB_X_EXT_NAT_T_FRAG
-			sa_args.l_natt_frag = iph2->ph1->rmconf->esp_frag;
-#endif
-		} else {
-			/* Remove port information, that SA doesn't use it */
-			set_port(sa_args.src, 0);
-			set_port(sa_args.dst, 0);
-		}
-
-#endif
-		/* more info to fill in */
-		sa_args.spi = pr->spi;
-		sa_args.reqid = pr->reqid_in;
-		sa_args.keymat = pr->keymat->v;
-
-		plog(LLV_DEBUG, LOCATION, NULL, "call pfkey_send_update2\n");
-		if (pfkey_send_update2(&sa_args) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"libipsec failed send update (%s)\n",
-				ipsec_strerror());
-			return -1;
-		}
-
-#ifndef ANDROID_PATCHED
-		if (!lcconf->pathinfo[LC_PATHTYPE_BACKUPSA])
-			continue;
-
-		/*
-		 * It maybe good idea to call backupsa_to_file() after
-		 * racoon will receive the sadb_update messages.
-		 * But it is impossible because there is not key in the
-		 * information from the kernel.
-		 */
-		
-		/* change some things before backing up */
-		sa_args.wsize = 4;
-		sa_args.l_bytes = iph2->approval->lifebyte * 1024;
-		
-		if (backupsa_to_file(&sa_args) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"backuped SA failed: %s\n",
-				sadbsecas2str(sa_args.src, sa_args.dst,
-				sa_args.satype, sa_args.spi, sa_args.mode));
-		}
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"backuped SA: %s\n",
-			sadbsecas2str(sa_args.src, sa_args.dst,
-			sa_args.satype, sa_args.spi, sa_args.mode));
-#endif
-	}
-
-	return 0;
-}
-
-static int
-pk_recvupdate(mhp)
-	caddr_t *mhp;
-{
-	struct sadb_msg *msg;
-	struct sadb_sa *sa;
-	struct sockaddr *src, *dst;
-	struct ph2handle *iph2;
-	u_int proto_id, encmode, sa_mode;
-	int incomplete = 0;
-	struct saproto *pr;
-
-	/* ignore this message because of local test mode. */
-	if (f_local)
-		return 0;
-
-	/* sanity check */
-	if (mhp[0] == NULL
-	 || mhp[SADB_EXT_SA] == NULL
-	 || mhp[SADB_EXT_ADDRESS_SRC] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb update message passed.\n");
-		return -1;
-	}
-	msg = (struct sadb_msg *)mhp[0];
-	src = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]);
-	dst = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_DST]);
-	sa = (struct sadb_sa *)mhp[SADB_EXT_SA];
-
-	sa_mode = mhp[SADB_X_EXT_SA2] == NULL
-		? IPSEC_MODE_ANY
-		: ((struct sadb_x_sa2 *)mhp[SADB_X_EXT_SA2])->sadb_x_sa2_mode;
-
-	/* the message has to be processed or not ? */
-	if (msg->sadb_msg_pid != getpid()) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"%s message is not interesting "
-			"because pid %d is not mine.\n",
-			s_pfkey_type(msg->sadb_msg_type),
-			msg->sadb_msg_pid);
-		return -1;
-	}
-
-	iph2 = getph2byseq(msg->sadb_msg_seq);
-	if (iph2 == NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"seq %d of %s message not interesting.\n",
-			msg->sadb_msg_seq,
-			s_pfkey_type(msg->sadb_msg_type));
-		return -1;
-	}
-
-	if (iph2->status != PHASE2ST_ADDSA) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"status mismatch (db:%d msg:%d)\n",
-			iph2->status, PHASE2ST_ADDSA);
-		return -1;
-	}
-
-	/* check to complete all keys ? */
-	for (pr = iph2->approval->head; pr != NULL; pr = pr->next) {
-		proto_id = pfkey2ipsecdoi_proto(msg->sadb_msg_satype);
-		if (proto_id == ~0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid proto_id %d\n", msg->sadb_msg_satype);
-			return -1;
-		}
-		encmode = pfkey2ipsecdoi_mode(sa_mode);
-		if (encmode == ~0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid encmode %d\n", sa_mode);
-			return -1;
-		}
-
-		if (pr->proto_id == proto_id
-		 && pr->spi == sa->sadb_sa_spi) {
-			pr->ok = 1;
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"pfkey UPDATE succeeded: %s\n",
-				sadbsecas2str(iph2->dst, iph2->src,
-				    msg->sadb_msg_satype,
-				    sa->sadb_sa_spi,
-				    sa_mode));
-
-			plog(LLV_INFO, LOCATION, NULL,
-				"IPsec-SA established: %s\n",
-				sadbsecas2str(iph2->dst, iph2->src,
-					msg->sadb_msg_satype, sa->sadb_sa_spi,
-					sa_mode));
-		}
-
-		if (pr->ok == 0)
-			incomplete = 1;
-	}
-
-	if (incomplete)
-		return 0;
-
-	/* turn off the timer for calling pfkey_timeover() */
-	SCHED_KILL(iph2->sce);
-	
-	/* update status */
-	iph2->status = PHASE2ST_ESTABLISHED;
-
-#ifdef ENABLE_STATS
-	gettimeofday(&iph2->end, NULL);
-	syslog(LOG_NOTICE, "%s(%s): %8.6f",
-		"phase2", "quick", timedelta(&iph2->start, &iph2->end));
-#endif
-
-	/* count up */
-	iph2->ph1->ph2cnt++;
-
-	/* turn off schedule */
-	SCHED_KILL(iph2->scr);
-
-	/* Force the update of ph2's ports, as there is at least one
-	 * situation where they'll mismatch with ph1's values
-	 */
-
-#ifdef ENABLE_NATT
-	set_port(iph2->src, extract_port(iph2->ph1->local));
-	set_port(iph2->dst, extract_port(iph2->ph1->remote));
-#endif
-
-	/*
-	 * since we are going to reuse the phase2 handler, we need to
-	 * remain it and refresh all the references between ph1 and ph2 to use.
-	 */
-	unbindph12(iph2);
-
-	iph2->sce = sched_new(iph2->approval->lifetime,
-	    isakmp_ph2expire_stub, iph2);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-	return 0;
-}
-
-/*
- * set outbound SA
- */
-int
-pk_sendadd(iph2)
-	struct ph2handle *iph2;
-{
-	struct saproto *pr;
-	int proxy = 0;
-	struct pfkey_send_sa_args sa_args;
-
-	/* sanity check */
-	if (iph2->approval == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no approvaled SAs found.\n");
-		return -1;
-	}
-
-	if (iph2->side == INITIATOR)
-		proxy = iph2->ph1->rmconf->support_proxy;
-	else if (iph2->sainfo && iph2->sainfo->id_i)
-		proxy = 1;
-
-	/* fill in some needed for pfkey_send_update2 */
-	memset (&sa_args, 0, sizeof (sa_args));
-	sa_args.so = lcconf->sock_pfkey;
-	sa_args.l_addtime = iph2->approval->lifetime;
-	sa_args.seq = iph2->seq;
-	sa_args.wsize = 4;
-
-	/* for mobile IPv6 */
-	if (proxy && iph2->src_id && iph2->dst_id &&
-	    ipsecdoi_transportmode(iph2->approval)) {
-		sa_args.src = iph2->src_id;
-		sa_args.dst = iph2->dst_id;
-	} else {
-		sa_args.src = iph2->src;
-		sa_args.dst = iph2->dst;
-	}
-
-	for (pr = iph2->approval->head; pr != NULL; pr = pr->next) {
-		/* validity check */
-		sa_args.satype = ipsecdoi2pfkey_proto(pr->proto_id);
-		if (sa_args.satype == ~0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid proto_id %d\n", pr->proto_id);
-			return -1;
-		}
-		else if (sa_args.satype == SADB_X_SATYPE_IPCOMP) {
-			/* no replay window for IPCOMP */
-			sa_args.wsize = 0;
-		}
-#ifdef ENABLE_SAMODE_UNSPECIFIED
-		sa_args.mode = IPSEC_MODE_ANY;
-#else
-		sa_args.mode = ipsecdoi2pfkey_mode(pr->encmode);
-		if (sa_args.mode == ~0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid encmode %d\n", pr->encmode);
-			return -1;
-		}
-#endif
-
-		/* set algorithm type and key length */
-		sa_args.e_keylen = pr->head->encklen;
-		if (pfkey_convertfromipsecdoi(
-				pr->proto_id,
-				pr->head->trns_id,
-				pr->head->authtype,
-				&sa_args.e_type, &sa_args.e_keylen,
-				&sa_args.a_type, &sa_args.a_keylen, 
-				&sa_args.flags) < 0)
-			return -1;
-
-#if 0
-		sa_args.l_bytes = iph2->approval->lifebyte * 1024,
-#else
-		sa_args.l_bytes = 0;
-#endif
-
-#ifdef HAVE_SECCTX
-		if (*iph2->approval->sctx.ctx_str) {
-			sa_args.ctxdoi = iph2->approval->sctx.ctx_doi;
-			sa_args.ctxalg = iph2->approval->sctx.ctx_alg;
-			sa_args.ctxstrlen = iph2->approval->sctx.ctx_strlen;
-			sa_args.ctxstr = iph2->approval->sctx.ctx_str;
-		}
-#endif /* HAVE_SECCTX */
-
-#ifdef ENABLE_NATT
-		plog(LLV_DEBUG, LOCATION, NULL, "call pfkey_send_add2 "
-		    "(NAT flavor)\n");
-
-		if (pr->udp_encap) {
-			sa_args.l_natt_type = UDP_ENCAP_ESPINUDP;
-			sa_args.l_natt_sport = extract_port(iph2->ph1->local);
-			sa_args.l_natt_dport = extract_port(iph2->ph1->remote);
-			sa_args.l_natt_oa = NULL; // FIXME: Here comes OA!!!
-#ifdef SADB_X_EXT_NAT_T_FRAG
-			sa_args.l_natt_frag = iph2->ph1->rmconf->esp_frag;
-#endif
-		} else {
-			/* Remove port information, that SA doesn't use it */
-			set_port(sa_args.src, 0);
-			set_port(sa_args.dst, 0);
-		}
-
-#else
-		/* Remove port information, it is not used without NAT-T */
-		set_port(sa_args.src, 0);
-		set_port(sa_args.dst, 0);
-#endif
-
-		/* more info to fill in */
-		sa_args.spi = pr->spi_p;
-		sa_args.reqid = pr->reqid_out;
-		sa_args.keymat = pr->keymat_p->v;
-
-		plog(LLV_DEBUG, LOCATION, NULL, "call pfkey_send_add2\n");
-		if (pfkey_send_add2(&sa_args) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"libipsec failed send add (%s)\n",
-				ipsec_strerror());
-			return -1;
-		}
-
-#ifndef ANDROID_PATCHED
-		if (!lcconf->pathinfo[LC_PATHTYPE_BACKUPSA])
-			continue;
-
-		/*
-		 * It maybe good idea to call backupsa_to_file() after
-		 * racoon will receive the sadb_update messages.
-		 * But it is impossible because there is not key in the
-		 * information from the kernel.
-		 */
-		if (backupsa_to_file(&sa_args) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"backuped SA failed: %s\n",
-				sadbsecas2str(sa_args.src, sa_args.dst,
-				sa_args.satype, sa_args.spi, sa_args.mode));
-		}
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"backuped SA: %s\n",
-			sadbsecas2str(sa_args.src, sa_args.dst,
-			sa_args.satype, sa_args.spi, sa_args.mode));
-#endif
-	}
-	return 0;
-}
-
-static int
-pk_recvadd(mhp)
-	caddr_t *mhp;
-{
-	struct sadb_msg *msg;
-	struct sadb_sa *sa;
-	struct sockaddr *src, *dst;
-	struct ph2handle *iph2;
-	u_int sa_mode;
-
-	/* ignore this message because of local test mode. */
-	if (f_local)
-		return 0;
-
-	/* sanity check */
-	if (mhp[0] == NULL
-	 || mhp[SADB_EXT_SA] == NULL
-	 || mhp[SADB_EXT_ADDRESS_SRC] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb add message passed.\n");
-		return -1;
-	}
-	msg = (struct sadb_msg *)mhp[0];
-	src = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]);
-	dst = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_DST]);
-	sa = (struct sadb_sa *)mhp[SADB_EXT_SA];
-
-	sa_mode = mhp[SADB_X_EXT_SA2] == NULL
-		? IPSEC_MODE_ANY
-		: ((struct sadb_x_sa2 *)mhp[SADB_X_EXT_SA2])->sadb_x_sa2_mode;
-
-	/* the message has to be processed or not ? */
-	if (msg->sadb_msg_pid != getpid()) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"%s message is not interesting "
-			"because pid %d is not mine.\n",
-			s_pfkey_type(msg->sadb_msg_type),
-			msg->sadb_msg_pid);
-		return -1;
-	}
-
-	iph2 = getph2byseq(msg->sadb_msg_seq);
-	if (iph2 == NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"seq %d of %s message not interesting.\n",
-			msg->sadb_msg_seq,
-			s_pfkey_type(msg->sadb_msg_type));
-		return -1;
-	}
-
-	/*
-	 * NOTE don't update any status of phase2 handle
-	 * because they must be updated by SADB_UPDATE message
-	 */
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"IPsec-SA established: %s\n",
-		sadbsecas2str(iph2->src, iph2->dst,
-			msg->sadb_msg_satype, sa->sadb_sa_spi, sa_mode));
-
-	plog(LLV_DEBUG, LOCATION, NULL, "===\n");
-	return 0;
-}
-
-static int
-pk_recvexpire(mhp)
-	caddr_t *mhp;
-{
-	struct sadb_msg *msg;
-	struct sadb_sa *sa;
-	struct sockaddr *src, *dst;
-	struct ph2handle *iph2;
-	u_int proto_id, sa_mode;
-
-	/* sanity check */
-	if (mhp[0] == NULL
-	 || mhp[SADB_EXT_SA] == NULL
-	 || mhp[SADB_EXT_ADDRESS_SRC] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL
-	 || (mhp[SADB_EXT_LIFETIME_HARD] != NULL
-	  && mhp[SADB_EXT_LIFETIME_SOFT] != NULL)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb expire message passed.\n");
-		return -1;
-	}
-	msg = (struct sadb_msg *)mhp[0];
-	sa = (struct sadb_sa *)mhp[SADB_EXT_SA];
-	src = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]);
-	dst = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_DST]);
-
-	sa_mode = mhp[SADB_X_EXT_SA2] == NULL
-		? IPSEC_MODE_ANY
-		: ((struct sadb_x_sa2 *)mhp[SADB_X_EXT_SA2])->sadb_x_sa2_mode;
-
-	proto_id = pfkey2ipsecdoi_proto(msg->sadb_msg_satype);
-	if (proto_id == ~0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid proto_id %d\n", msg->sadb_msg_satype);
-		return -1;
-	}
-
-	plog(LLV_INFO, LOCATION, NULL,
-		"IPsec-SA expired: %s\n",
-		sadbsecas2str(src, dst,
-			msg->sadb_msg_satype, sa->sadb_sa_spi, sa_mode));
-
-	iph2 = getph2bysaidx(src, dst, proto_id, sa->sadb_sa_spi);
-	if (iph2 == NULL) {
-		/*
-		 * Ignore it because two expire messages are come up.
-		 * phase2 handler has been deleted already when 2nd message
-		 * is received.
-		 */
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"no such a SA found: %s\n",
-			sadbsecas2str(src, dst,
-			    msg->sadb_msg_satype, sa->sadb_sa_spi,
-			    sa_mode));
-		return 0;
-	}
-	if (iph2->status != PHASE2ST_ESTABLISHED) {
-		/*
-		 * If the status is not equal to PHASE2ST_ESTABLISHED,
-		 * racoon ignores this expire message.  There are two reason.
-		 * One is that the phase 2 probably starts because there is
-		 * a potential that racoon receives the acquire message
-		 * without receiving a expire message.  Another is that racoon
-		 * may receive the multiple expire messages from the kernel.
-		 */
-		plog(LLV_WARNING, LOCATION, NULL,
-			"the expire message is received "
-			"but the handler has not been established.\n");
-		return 0;
-	}
-
-	/* turn off the timer for calling isakmp_ph2expire() */ 
-	SCHED_KILL(iph2->sce);
-
-	iph2->status = PHASE2ST_EXPIRED;
-
-	/* INITIATOR, begin phase 2 exchange. */
-	/* allocate buffer for status management of pfkey message */
-	if (iph2->side == INITIATOR) {
-
-		initph2(iph2);
-
-		/* update status for re-use */
-		iph2->status = PHASE2ST_STATUS2;
-
-		/* start isakmp initiation by using ident exchange */
-		if (isakmp_post_acquire(iph2) < 0) {
-			plog(LLV_ERROR, LOCATION, iph2->dst,
-				"failed to begin ipsec sa "
-				"re-negotication.\n");
-			unbindph12(iph2);
-			remph2(iph2);
-			delph2(iph2);
-			return -1;
-		}
-
-		return 0;
-		/*NOTREACHED*/
-	}
-
-	/* If not received SADB_EXPIRE, INITIATOR delete ph2handle. */
-	/* RESPONDER always delete ph2handle, keep silent.  RESPONDER doesn't
-	 * manage IPsec SA, so delete the list */
-	unbindph12(iph2);
-	remph2(iph2);
-	delph2(iph2);
-
-	return 0;
-}
-
-static int
-pk_recvacquire(mhp)
-	caddr_t *mhp;
-{
-	struct sadb_msg *msg;
-	struct sadb_x_policy *xpl;
-	struct secpolicy *sp_out = NULL, *sp_in = NULL;
-#define MAXNESTEDSA	5	/* XXX */
-	struct ph2handle *iph2[MAXNESTEDSA];
-	struct sockaddr *src, *dst;
-	int n;	/* # of phase 2 handler */
-	int remoteid=0;
-#ifdef HAVE_SECCTX
-	struct sadb_x_sec_ctx *m_sec_ctx;
-#endif /* HAVE_SECCTX */
-	struct policyindex spidx;
-
-
-	/* ignore this message because of local test mode. */
-	if (f_local)
-		return 0;
-
-	/* sanity check */
-	if (mhp[0] == NULL
-	 || mhp[SADB_EXT_ADDRESS_SRC] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL
-	 || mhp[SADB_X_EXT_POLICY] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb acquire message passed.\n");
-		return -1;
-	}
-	msg = (struct sadb_msg *)mhp[0];
-	xpl = (struct sadb_x_policy *)mhp[SADB_X_EXT_POLICY];
-	src = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]);
-	dst = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_DST]);
-
-#ifdef HAVE_SECCTX
-	m_sec_ctx = (struct sadb_x_sec_ctx *)mhp[SADB_X_EXT_SEC_CTX];
-
-	if (m_sec_ctx != NULL) {
-		plog(LLV_INFO, LOCATION, NULL, "security context doi: %u\n",
-		     m_sec_ctx->sadb_x_ctx_doi);
-		plog(LLV_INFO, LOCATION, NULL, 
-		     "security context algorithm: %u\n",
-		     m_sec_ctx->sadb_x_ctx_alg);
-		plog(LLV_INFO, LOCATION, NULL, "security context length: %u\n",
-		     m_sec_ctx->sadb_x_ctx_len);
-		plog(LLV_INFO, LOCATION, NULL, "security context: %s\n",
-		     ((char *)m_sec_ctx + sizeof(struct sadb_x_sec_ctx)));
-	}
-#endif /* HAVE_SECCTX */
-
-	/* ignore if type is not IPSEC_POLICY_IPSEC */
-	if (xpl->sadb_x_policy_type != IPSEC_POLICY_IPSEC) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"ignore ACQUIRE message. type is not IPsec.\n");
-		return 0;
-	}
-
-	/* ignore it if src is multicast address */
-    {
-	struct sockaddr *sa = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_DST]);
-
-	if ((sa->sa_family == AF_INET
-	  && IN_MULTICAST(ntohl(((struct sockaddr_in *)sa)->sin_addr.s_addr)))
-#ifdef INET6
-	 || (sa->sa_family == AF_INET6
-	  && IN6_IS_ADDR_MULTICAST(&((struct sockaddr_in6 *)sa)->sin6_addr))
-#endif
-	) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"ignore due to multicast address: %s.\n",
-			saddrwop2str(sa));
-		return 0;
-	}
-    }
-   	
-    	/* ignore, if we do not listen on source address */
-	{
-		/* reasons behind:
-		 * - if we'll contact peer from address we do not listen -
-		 *   we will be unable to complete negotiation;
-		 * - if we'll negotiate using address we're listening -
-		 *   remote peer will send packets to address different
-		 *   than one in the policy, so kernel will drop them;
-		 * => therefore this acquire is not for us! --Aidas
-		 */
-		struct sockaddr *sa = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]);
-		struct myaddrs *p;
-		int do_listen = 0;
-		for (p = lcconf->myaddrs; p; p = p->next) {
-			if (!cmpsaddrwop(p->addr, sa)) {
-				do_listen = 1;
-				break;
-			}
-		}
-
-		if (!do_listen) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"ignore because do not listen on source address : %s.\n",
-				saddrwop2str(sa));
-			return 0;
-		}
-	}
-
-	/*
-	 * If there is a phase 2 handler against the policy identifier in
-	 * the acquire message, and if
-	 *    1. its state is less than PHASE2ST_ESTABLISHED, then racoon
-	 *       should ignore such a acquire message because the phase 2
-	 *       is just negotiating.
-	 *    2. its state is equal to PHASE2ST_ESTABLISHED, then racoon
-	 *       has to prcesss such a acquire message because racoon may
-	 *       lost the expire message.
-	 */
-	iph2[0] = getph2byid(src, dst, xpl->sadb_x_policy_id);
-	if (iph2[0] != NULL) {
-		if (iph2[0]->status < PHASE2ST_ESTABLISHED) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"ignore the acquire because ph2 found\n");
-			return -1;
-		}
-		if (iph2[0]->status == PHASE2ST_EXPIRED)
-			iph2[0] = NULL;
-		/*FALLTHROUGH*/
-	}
-
-	/* search for proper policyindex */
-	sp_out = getspbyspid(xpl->sadb_x_policy_id);
-	if (sp_out == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "no policy found: id:%d.\n",
-			xpl->sadb_x_policy_id);
-		return -1;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"suitable outbound SP found: %s.\n", spidx2str(&sp_out->spidx));
-
-	/* get inbound policy */
-    {
-
-	memset(&spidx, 0, sizeof(spidx));
-	spidx.dir = IPSEC_DIR_INBOUND;
-	memcpy(&spidx.src, &sp_out->spidx.dst, sizeof(spidx.src));
-	memcpy(&spidx.dst, &sp_out->spidx.src, sizeof(spidx.dst));
-	spidx.prefs = sp_out->spidx.prefd;
-	spidx.prefd = sp_out->spidx.prefs;
-	spidx.ul_proto = sp_out->spidx.ul_proto;
-
-#ifdef HAVE_SECCTX
-	if (m_sec_ctx) {
-		spidx.sec_ctx.ctx_doi = m_sec_ctx->sadb_x_ctx_doi;
-		spidx.sec_ctx.ctx_alg = m_sec_ctx->sadb_x_ctx_alg;
-		spidx.sec_ctx.ctx_strlen = m_sec_ctx->sadb_x_ctx_len;
-		memcpy(spidx.sec_ctx.ctx_str,
-		      ((char *)m_sec_ctx + sizeof(struct sadb_x_sec_ctx)),
-		      spidx.sec_ctx.ctx_strlen);
-	}
-#endif /* HAVE_SECCTX */
-
-	sp_in = getsp(&spidx);
-	if (sp_in) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"suitable inbound SP found: %s.\n",
-			spidx2str(&sp_in->spidx));
-	} else {
-		plog(LLV_NOTIFY, LOCATION, NULL,
-			"no in-bound policy found: %s\n",
-			spidx2str(&spidx));
-	}
-    }
-
-	memset(iph2, 0, MAXNESTEDSA);
-
-	n = 0;
-
-	/* allocate a phase 2 */
-	iph2[n] = newph2();
-	if (iph2[n] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate phase2 entry.\n");
-		return -1;
-	}
-	iph2[n]->side = INITIATOR;
-	iph2[n]->spid = xpl->sadb_x_policy_id;
-	iph2[n]->satype = msg->sadb_msg_satype;
-	iph2[n]->seq = msg->sadb_msg_seq;
-	iph2[n]->status = PHASE2ST_STATUS2;
-
-	/* set end addresses of SA */
-	iph2[n]->dst = dupsaddr(PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_DST]));
-	if (iph2[n]->dst == NULL) {
-		delph2(iph2[n]);
-		return -1;
-	}
-	iph2[n]->src = dupsaddr(PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]));
-	if (iph2[n]->src == NULL) {
-		delph2(iph2[n]);
-		return -1;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"new acquire %s\n", spidx2str(&sp_out->spidx));
-
-	/* get sainfo */
-    {
-	vchar_t *idsrc, *iddst;
-
-	idsrc = ipsecdoi_sockaddr2id((struct sockaddr *)&sp_out->spidx.src,
-				sp_out->spidx.prefs, sp_out->spidx.ul_proto);
-	if (idsrc == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get ID for %s\n",
-			spidx2str(&sp_out->spidx));
-		delph2(iph2[n]);
-		return -1;
-	}
-	iddst = ipsecdoi_sockaddr2id((struct sockaddr *)&sp_out->spidx.dst,
-				sp_out->spidx.prefd, sp_out->spidx.ul_proto);
-	if (iddst == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get ID for %s\n",
-			spidx2str(&sp_out->spidx));
-		vfree(idsrc);
-		delph2(iph2[n]);
-		return -1;
-	}
-	{
-		struct remoteconf *conf;
-		conf = getrmconf(iph2[n]->dst);
-		if (conf != NULL)
-			remoteid=conf->ph1id;
-		else{
-			plog(LLV_DEBUG, LOCATION, NULL, "Warning: no valid rmconf !\n");
-			remoteid=0;
-		}
-	}
-	iph2[n]->sainfo = getsainfo(idsrc, iddst, NULL, remoteid);
-	vfree(idsrc);
-	vfree(iddst);
-	if (iph2[n]->sainfo == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get sainfo.\n");
-		delph2(iph2[n]);
-		return -1;
-		/* XXX should use the algorithm list from register message */
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"selected sainfo: %s\n", sainfo2str(iph2[n]->sainfo));
-    }
-
-	if (set_proposal_from_policy(iph2[n], sp_out, sp_in) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to create saprop.\n");
-		delph2(iph2[n]);
-		return -1;
-	}
-#ifdef HAVE_SECCTX
-	if (m_sec_ctx) {
-		set_secctx_in_proposal(iph2[n], spidx);
-	}
-#endif /* HAVE_SECCTX */
-
-	insph2(iph2[n]);
-
-	/* start isakmp initiation by using ident exchange */
-	/* XXX should be looped if there are multiple phase 2 handler. */
-	if (isakmp_post_acquire(iph2[n]) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to begin ipsec sa negotication.\n");
-		goto err;
-	}
-
-	return 0;
-
-err:
-	while (n >= 0) {
-		unbindph12(iph2[n]);
-		remph2(iph2[n]);
-		delph2(iph2[n]);
-		iph2[n] = NULL;
-		n--;
-	}
-	return -1;
-}
-
-static int
-pk_recvdelete(mhp)
-	caddr_t *mhp;
-{
-	struct sadb_msg *msg;
-	struct sadb_sa *sa;
-	struct sockaddr *src, *dst;
-	struct ph2handle *iph2 = NULL;
-	u_int proto_id;
-
-	/* ignore this message because of local test mode. */
-	if (f_local)
-		return 0;
-
-	/* sanity check */
-	if (mhp[0] == NULL
-	 || mhp[SADB_EXT_SA] == NULL
-	 || mhp[SADB_EXT_ADDRESS_SRC] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb delete message passed.\n");
-		return -1;
-	}
-	msg = (struct sadb_msg *)mhp[0];
-	sa = (struct sadb_sa *)mhp[SADB_EXT_SA];
-	src = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_SRC]);
-	dst = PFKEY_ADDR_SADDR(mhp[SADB_EXT_ADDRESS_DST]);
-
-	/* the message has to be processed or not ? */
-	if (msg->sadb_msg_pid == getpid()) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"%s message is not interesting "
-			"because the message was originated by me.\n",
-			s_pfkey_type(msg->sadb_msg_type));
-		return -1;
-	}
-
-	proto_id = pfkey2ipsecdoi_proto(msg->sadb_msg_satype);
-	if (proto_id == ~0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid proto_id %d\n", msg->sadb_msg_satype);
-		return -1;
-	}
-
-	iph2 = getph2bysaidx(src, dst, proto_id, sa->sadb_sa_spi);
-	if (iph2 == NULL) {
-		/* ignore */
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no iph2 found: %s\n",
-			sadbsecas2str(src, dst, msg->sadb_msg_satype,
-				sa->sadb_sa_spi, IPSEC_MODE_ANY));
-		return 0;
-	}
-
-	plog(LLV_ERROR, LOCATION, NULL,
-		"pfkey DELETE received: %s\n",
-		sadbsecas2str(iph2->src, iph2->dst,
-			msg->sadb_msg_satype, sa->sadb_sa_spi, IPSEC_MODE_ANY));
-
-	/* send delete information */
-	if (iph2->status == PHASE2ST_ESTABLISHED)
-		isakmp_info_send_d2(iph2);
-
-	unbindph12(iph2);
-	remph2(iph2);
-	delph2(iph2);
-
-	return 0;
-}
-
-static int
-pk_recvflush(mhp)
-	caddr_t *mhp;
-{
-	/* ignore this message because of local test mode. */
-	if (f_local)
-		return 0;
-
-	/* sanity check */
-	if (mhp[0] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb flush message passed.\n");
-		return -1;
-	}
-
-	flushph2();
-
-	return 0;
-}
-
-static int
-getsadbpolicy(policy0, policylen0, type, iph2)
-	caddr_t *policy0;
-	int *policylen0, type;
-	struct ph2handle *iph2;
-{
-	struct policyindex *spidx = (struct policyindex *)iph2->spidx_gen;
-	struct sadb_x_policy *xpl;
-	struct sadb_x_ipsecrequest *xisr;
-	struct saproto *pr;
-	struct saproto **pr_rlist;
-	int rlist_len = 0;
-	caddr_t policy, p;
-	int policylen;
-	int xisrlen;
-	u_int satype, mode;
-	int len = 0;
-#ifdef HAVE_SECCTX
-	int ctxlen = 0;
-#endif /* HAVE_SECCTX */
-
-
-	/* get policy buffer size */
-	policylen = sizeof(struct sadb_x_policy);
-	if (type != SADB_X_SPDDELETE) {
-		for (pr = iph2->approval->head; pr; pr = pr->next) {
-			xisrlen = sizeof(*xisr);
-			if (pr->encmode == IPSECDOI_ATTR_ENC_MODE_TUNNEL) {
-				xisrlen += (sysdep_sa_len(iph2->src)
-				          + sysdep_sa_len(iph2->dst));
-			}
-
-			policylen += PFKEY_ALIGN8(xisrlen);
-		}
-	}
-
-#ifdef HAVE_SECCTX
-	if (*spidx->sec_ctx.ctx_str) {
-		ctxlen = sizeof(struct sadb_x_sec_ctx)
-				+ PFKEY_ALIGN8(spidx->sec_ctx.ctx_strlen);
-		policylen += ctxlen;
-	}
-#endif /* HAVE_SECCTX */
-
-	/* make policy structure */
-	policy = racoon_malloc(policylen);
-	memset((void*)policy, 0xcd, policylen);
-	if (!policy) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"buffer allocation failed.\n");
-		return -1;
-	}
-
-	xpl = (struct sadb_x_policy *)policy;
-	xpl->sadb_x_policy_len = PFKEY_UNIT64(policylen);
-	xpl->sadb_x_policy_exttype = SADB_X_EXT_POLICY;
-	xpl->sadb_x_policy_type = IPSEC_POLICY_IPSEC;
-	xpl->sadb_x_policy_dir = spidx->dir;
-	xpl->sadb_x_policy_id = 0;
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-	xpl->sadb_x_policy_priority = PRIORITY_DEFAULT;
-#endif
-	len++;
-
-#ifdef HAVE_SECCTX
-	if (*spidx->sec_ctx.ctx_str) {
-		struct sadb_x_sec_ctx *p;
-
-		p = (struct sadb_x_sec_ctx *)(xpl + len);
-		memset(p, 0, ctxlen);
-		p->sadb_x_sec_len = PFKEY_UNIT64(ctxlen);
-		p->sadb_x_sec_exttype = SADB_X_EXT_SEC_CTX;
-		p->sadb_x_ctx_len = spidx->sec_ctx.ctx_strlen;
-		p->sadb_x_ctx_doi = spidx->sec_ctx.ctx_doi;
-		p->sadb_x_ctx_alg = spidx->sec_ctx.ctx_alg;
- 
-		memcpy(p + 1,spidx->sec_ctx.ctx_str,spidx->sec_ctx.ctx_strlen);
-		len += ctxlen;
-	}
-#endif /* HAVE_SECCTX */
-
-	/* no need to append policy information any more if type is SPDDELETE */
-	if (type == SADB_X_SPDDELETE)
-		goto end;
-
-	xisr = (struct sadb_x_ipsecrequest *)(xpl + len);
-
-	/* The order of things is reversed for use in add policy messages */
-	for (pr = iph2->approval->head; pr; pr = pr->next) rlist_len++;
-	pr_rlist = racoon_malloc((rlist_len+1)*sizeof(struct saproto*));
-	if (!pr_rlist) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"buffer allocation failed.\n");
-		return -1;
-	}
-	pr_rlist[rlist_len--] = NULL;
-	for (pr = iph2->approval->head; pr; pr = pr->next) pr_rlist[rlist_len--] = pr;
-	rlist_len = 0;
-
-	for (pr = pr_rlist[rlist_len++]; pr; pr = pr_rlist[rlist_len++]) {
-
-		satype = doi2ipproto(pr->proto_id);
-		if (satype == ~0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid proto_id %d\n", pr->proto_id);
-			goto err;
-		}
-		mode = ipsecdoi2pfkey_mode(pr->encmode);
-		if (mode == ~0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid encmode %d\n", pr->encmode);
-			goto err;
-		}
-
-		/* 
-		 * the policy level cannot be unique because the policy
-		 * is defined later than SA, so req_id cannot be bound to SA.
-		 */
-		xisr->sadb_x_ipsecrequest_proto = satype;
-		xisr->sadb_x_ipsecrequest_mode = mode;
-		if(iph2->proposal->head->reqid_in > 0){
-			xisr->sadb_x_ipsecrequest_level = IPSEC_LEVEL_UNIQUE;
-			xisr->sadb_x_ipsecrequest_reqid = iph2->proposal->head->reqid_in;
-		}else{
-			xisr->sadb_x_ipsecrequest_level = IPSEC_LEVEL_REQUIRE;
-			xisr->sadb_x_ipsecrequest_reqid = 0;
-		}
-		p = (caddr_t)(xisr + 1);
-
-		xisrlen = sizeof(*xisr);
-
-		if (pr->encmode == IPSECDOI_ATTR_ENC_MODE_TUNNEL) {
-			int src_len, dst_len;
-
-			src_len = sysdep_sa_len(iph2->src);
-			dst_len = sysdep_sa_len(iph2->dst);
-			xisrlen += src_len + dst_len;
-
-			memcpy(p, iph2->src, src_len);
-			p += src_len;
-
-			memcpy(p, iph2->dst, dst_len);
-			p += dst_len;
-		}
-
-		xisr->sadb_x_ipsecrequest_len = PFKEY_ALIGN8(xisrlen);
-		xisr = (struct sadb_x_ipsecrequest *)p;
-		
-	}
-	racoon_free(pr_rlist);
-
-end:
-	*policy0 = policy;
-	*policylen0 = policylen;
-
-	return 0;
-
-err:
-	if (policy)
-		racoon_free(policy);
-	if (pr_rlist) racoon_free(pr_rlist);
-
-	return -1;
-}
-
-int
-pk_sendspdupdate2(iph2)
-	struct ph2handle *iph2;
-{
-	struct policyindex *spidx = (struct policyindex *)iph2->spidx_gen;
-	caddr_t policy = NULL;
-	int policylen = 0;
-	u_int64_t ltime, vtime;
-
-	ltime = iph2->approval->lifetime;
-	vtime = 0;
-
-	if (getsadbpolicy(&policy, &policylen, SADB_X_SPDUPDATE, iph2)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"getting sadb policy failed.\n");
-		return -1;
-	}
-
-	if (pfkey_send_spdupdate2(
-			lcconf->sock_pfkey,
-			(struct sockaddr *)&spidx->src,
-			spidx->prefs,
-			(struct sockaddr *)&spidx->dst,
-			spidx->prefd,
-			spidx->ul_proto,
-			ltime, vtime,
-			policy, policylen, 0) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"libipsec failed send spdupdate2 (%s)\n",
-			ipsec_strerror());
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "call pfkey_send_spdupdate2\n");
-
-end:
-	if (policy)
-		racoon_free(policy);
-
-	return 0;
-}
-
-static int
-pk_recvspdupdate(mhp)
-	caddr_t *mhp;
-{
-	struct sadb_address *saddr, *daddr;
-	struct sadb_x_policy *xpl;
- 	struct sadb_lifetime *lt;
-	struct policyindex spidx;
-	struct secpolicy *sp;
- 	u_int64_t created;
-
-	/* sanity check */
-	if (mhp[0] == NULL
-	 || mhp[SADB_EXT_ADDRESS_SRC] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL
-	 || mhp[SADB_X_EXT_POLICY] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb spdupdate message passed.\n");
-		return -1;
-	}
-	saddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_SRC];
-	daddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_DST];
-	xpl = (struct sadb_x_policy *)mhp[SADB_X_EXT_POLICY];
-	lt = (struct sadb_lifetime*)mhp[SADB_EXT_LIFETIME_HARD];
-	if(lt != NULL)
-		created = lt->sadb_lifetime_addtime;
-	else
-		created = 0;
-
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			xpl->sadb_x_policy_priority,
-			created,
-			&spidx);
-#else
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			created,
-			&spidx);
-#endif
-
-#ifdef HAVE_SECCTX
-	if (mhp[SADB_X_EXT_SEC_CTX] != NULL) {
-		struct sadb_x_sec_ctx *ctx;
-
-		ctx = (struct sadb_x_sec_ctx *)mhp[SADB_X_EXT_SEC_CTX];
-		spidx.sec_ctx.ctx_alg = ctx->sadb_x_ctx_alg;
-		spidx.sec_ctx.ctx_doi = ctx->sadb_x_ctx_doi;
-		spidx.sec_ctx.ctx_strlen = ctx->sadb_x_ctx_len;
-		memcpy(spidx.sec_ctx.ctx_str, ctx + 1, ctx->sadb_x_ctx_len);
-	}
-#endif /* HAVE_SECCTX */
-
-	sp = getsp(&spidx);
-	if (sp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"such policy does not already exist: \"%s\"\n",
-			spidx2str(&spidx));
-	} else {
-		remsp(sp);
-		delsp(sp);
-	}
-
-	if (addnewsp(mhp) < 0)
-		return -1;
-
-	return 0;
-}
-
-/*
- * this function has to be used by responder side.
- */
-int
-pk_sendspdadd2(iph2)
-	struct ph2handle *iph2;
-{
-	struct policyindex *spidx = (struct policyindex *)iph2->spidx_gen;
-	caddr_t policy = NULL;
-	int policylen = 0;
-	u_int64_t ltime, vtime;
-
-	ltime = iph2->approval->lifetime;
-	vtime = 0;
-
-	if (getsadbpolicy(&policy, &policylen, SADB_X_SPDADD, iph2)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"getting sadb policy failed.\n");
-		return -1;
-	}
-
-	if (pfkey_send_spdadd2(
-			lcconf->sock_pfkey,
-			(struct sockaddr *)&spidx->src,
-			spidx->prefs,
-			(struct sockaddr *)&spidx->dst,
-			spidx->prefd,
-			spidx->ul_proto,
-			ltime, vtime,
-			policy, policylen, 0) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"libipsec failed send spdadd2 (%s)\n",
-			ipsec_strerror());
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "call pfkey_send_spdadd2\n");
-
-end:
-	if (policy)
-		racoon_free(policy);
-
-	return 0;
-}
-
-static int
-pk_recvspdadd(mhp)
-	caddr_t *mhp;
-{
-	struct sadb_address *saddr, *daddr;
-	struct sadb_x_policy *xpl;
-	struct sadb_lifetime *lt;
-	struct policyindex spidx;
-	struct secpolicy *sp;
-	u_int64_t created;
-
-	/* sanity check */
-	if (mhp[0] == NULL
-	 || mhp[SADB_EXT_ADDRESS_SRC] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL
-	 || mhp[SADB_X_EXT_POLICY] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb spdadd message passed.\n");
-		return -1;
-	}
-	saddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_SRC];
-	daddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_DST];
-	xpl = (struct sadb_x_policy *)mhp[SADB_X_EXT_POLICY];
-	lt = (struct sadb_lifetime*)mhp[SADB_EXT_LIFETIME_HARD];
-	if(lt != NULL)
-		created = lt->sadb_lifetime_addtime;
-	else
-		created = 0;
-
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			xpl->sadb_x_policy_priority,
-			created,
-			&spidx);
-#else
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			created,
-			&spidx);
-#endif
-
-#ifdef HAVE_SECCTX
-	if (mhp[SADB_X_EXT_SEC_CTX] != NULL) {
-		struct sadb_x_sec_ctx *ctx;
-
-		ctx = (struct sadb_x_sec_ctx *)mhp[SADB_X_EXT_SEC_CTX];
-		spidx.sec_ctx.ctx_alg = ctx->sadb_x_ctx_alg;
-		spidx.sec_ctx.ctx_doi = ctx->sadb_x_ctx_doi;
-		spidx.sec_ctx.ctx_strlen = ctx->sadb_x_ctx_len;
-		memcpy(spidx.sec_ctx.ctx_str, ctx + 1, ctx->sadb_x_ctx_len);
-	}
-#endif /* HAVE_SECCTX */
-
-	sp = getsp(&spidx);
-	if (sp != NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"such policy already exists. "
-			"anyway replace it: %s\n",
-			spidx2str(&spidx));
-		remsp(sp);
-		delsp(sp);
-	}
-
-	if (addnewsp(mhp) < 0)
-		return -1;
-
-	return 0;
-}
-
-/*
- * this function has to be used by responder side.
- */
-int
-pk_sendspddelete(iph2)
-	struct ph2handle *iph2;
-{
-	struct policyindex *spidx = (struct policyindex *)iph2->spidx_gen;
-	caddr_t policy = NULL;
-	int policylen;
-
-	if (getsadbpolicy(&policy, &policylen, SADB_X_SPDDELETE, iph2)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"getting sadb policy failed.\n");
-		return -1;
-	}
-
-	if (pfkey_send_spddelete(
-			lcconf->sock_pfkey,
-			(struct sockaddr *)&spidx->src,
-			spidx->prefs,
-			(struct sockaddr *)&spidx->dst,
-			spidx->prefd,
-			spidx->ul_proto,
-			policy, policylen, 0) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"libipsec failed send spddelete (%s)\n",
-			ipsec_strerror());
-		goto end;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, "call pfkey_send_spddelete\n");
-
-end:
-	if (policy)
-		racoon_free(policy);
-
-	return 0;
-}
-
-static int
-pk_recvspddelete(mhp)
-	caddr_t *mhp;
-{
-	struct sadb_address *saddr, *daddr;
-	struct sadb_x_policy *xpl;
-	struct sadb_lifetime *lt;
-	struct policyindex spidx;
-	struct secpolicy *sp;
-	u_int64_t created;
-
-	/* sanity check */
-	if (mhp[0] == NULL
-	 || mhp[SADB_EXT_ADDRESS_SRC] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL
-	 || mhp[SADB_X_EXT_POLICY] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb spddelete message passed.\n");
-		return -1;
-	}
-	saddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_SRC];
-	daddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_DST];
-	xpl = (struct sadb_x_policy *)mhp[SADB_X_EXT_POLICY];
-	lt = (struct sadb_lifetime*)mhp[SADB_EXT_LIFETIME_HARD];
-	if(lt != NULL)
-		created = lt->sadb_lifetime_addtime;
-	else
-		created = 0;
-
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			xpl->sadb_x_policy_priority,
-			created,
-			&spidx);
-#else
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			created,
-			&spidx);
-#endif
-
-#ifdef HAVE_SECCTX
-	if (mhp[SADB_X_EXT_SEC_CTX] != NULL) {
-		struct sadb_x_sec_ctx *ctx;
-
-		ctx = (struct sadb_x_sec_ctx *)mhp[SADB_X_EXT_SEC_CTX];
-		spidx.sec_ctx.ctx_alg = ctx->sadb_x_ctx_alg;
-		spidx.sec_ctx.ctx_doi = ctx->sadb_x_ctx_doi;
-		spidx.sec_ctx.ctx_strlen = ctx->sadb_x_ctx_len;
-		memcpy(spidx.sec_ctx.ctx_str, ctx + 1, ctx->sadb_x_ctx_len);
-	}
-#endif /* HAVE_SECCTX */
-
-	sp = getsp(&spidx);
-	if (sp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no policy found: %s\n",
-			spidx2str(&spidx));
-		return -1;
-	}
-
-	remsp(sp);
-	delsp(sp);
-
-	return 0;
-}
-
-static int
-pk_recvspdexpire(mhp)
-	caddr_t *mhp;
-{
-	struct sadb_address *saddr, *daddr;
-	struct sadb_x_policy *xpl;
-	struct sadb_lifetime *lt;
-	struct policyindex spidx;
-	struct secpolicy *sp;
-	u_int64_t created;
-
-	/* sanity check */
-	if (mhp[0] == NULL
-	 || mhp[SADB_EXT_ADDRESS_SRC] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL
-	 || mhp[SADB_X_EXT_POLICY] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb spdexpire message passed.\n");
-		return -1;
-	}
-	saddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_SRC];
-	daddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_DST];
-	xpl = (struct sadb_x_policy *)mhp[SADB_X_EXT_POLICY];
-	lt = (struct sadb_lifetime*)mhp[SADB_EXT_LIFETIME_HARD];
-	if(lt != NULL)
-		created = lt->sadb_lifetime_addtime;
-	else
-		created = 0;
-
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			xpl->sadb_x_policy_priority,
-			created,
-			&spidx);
-#else
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			created,
-			&spidx);
-#endif
-
-#ifdef HAVE_SECCTX
-	if (mhp[SADB_X_EXT_SEC_CTX] != NULL) {
-		struct sadb_x_sec_ctx *ctx;
-
-		ctx = (struct sadb_x_sec_ctx *)mhp[SADB_X_EXT_SEC_CTX];
-		spidx.sec_ctx.ctx_alg = ctx->sadb_x_ctx_alg;
-		spidx.sec_ctx.ctx_doi = ctx->sadb_x_ctx_doi;
-		spidx.sec_ctx.ctx_strlen = ctx->sadb_x_ctx_len;
-		memcpy(spidx.sec_ctx.ctx_str, ctx + 1, ctx->sadb_x_ctx_len);
-	}
-#endif /* HAVE_SECCTX */
-
-	sp = getsp(&spidx);
-	if (sp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"no policy found: %s\n",
-			spidx2str(&spidx));
-		return -1;
-	}
-
-	remsp(sp);
-	delsp(sp);
-
-	return 0;
-}
-
-static int
-pk_recvspdget(mhp)
-	caddr_t *mhp;
-{
-	/* sanity check */
-	if (mhp[0] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb spdget message passed.\n");
-		return -1;
-	}
-
-	return 0;
-}
-
-static int
-pk_recvspddump(mhp)
-	caddr_t *mhp;
-{
-	struct sadb_msg *msg;
-	struct sadb_address *saddr, *daddr;
-	struct sadb_x_policy *xpl;
-	struct sadb_lifetime *lt;
-	struct policyindex spidx;
-	struct secpolicy *sp;
-	u_int64_t created;
-
-	/* sanity check */
-	if (mhp[0] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb spddump message passed.\n");
-		return -1;
-	}
-	msg = (struct sadb_msg *)mhp[0];
-
-	saddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_SRC];
-	daddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_DST];
-	xpl = (struct sadb_x_policy *)mhp[SADB_X_EXT_POLICY];
-	lt = (struct sadb_lifetime*)mhp[SADB_EXT_LIFETIME_HARD];
-	if(lt != NULL)
-		created = lt->sadb_lifetime_addtime;
-	else
-		created = 0;
-
-	if (saddr == NULL || daddr == NULL || xpl == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb spddump message passed.\n");
-		return -1;
-	}
-
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			xpl->sadb_x_policy_priority,
-			created,
-			&spidx);
-#else
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			created,
-			&spidx);
-#endif
-
-#ifdef HAVE_SECCTX
-	if (mhp[SADB_X_EXT_SEC_CTX] != NULL) {
-		struct sadb_x_sec_ctx *ctx;
-
-		ctx = (struct sadb_x_sec_ctx *)mhp[SADB_X_EXT_SEC_CTX];
-		spidx.sec_ctx.ctx_alg = ctx->sadb_x_ctx_alg;
-		spidx.sec_ctx.ctx_doi = ctx->sadb_x_ctx_doi;
-		spidx.sec_ctx.ctx_strlen = ctx->sadb_x_ctx_len;
-		memcpy(spidx.sec_ctx.ctx_str, ctx + 1, ctx->sadb_x_ctx_len);
-	}
-#endif /* HAVE_SECCTX */
-
-	sp = getsp(&spidx);
-	if (sp != NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"such policy already exists. "
-			"anyway replace it: %s\n",
-			spidx2str(&spidx));
-		remsp(sp);
-		delsp(sp);
-	}
-
-	if (addnewsp(mhp) < 0)
-		return -1;
-
-	return 0;
-}
-
-static int
-pk_recvspdflush(mhp)
-	caddr_t *mhp;
-{
-	/* sanity check */
-	if (mhp[0] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb spdflush message passed.\n");
-		return -1;
-	}
-
-	flushsp();
-
-	return 0;
-}
-
-#ifndef ANDROID_PATCHED
-
-/*
- * send error against acquire message to kenrel.
- */
-int
-pk_sendeacquire(iph2)
-	struct ph2handle *iph2;
-{
-	struct sadb_msg *newmsg;
-	int len;
-
-	len = sizeof(struct sadb_msg);
-	newmsg = racoon_calloc(1, len);
-	if (newmsg == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get buffer to send acquire.\n");
-		return -1;
-	}
-
-	memset(newmsg, 0, len);
-	newmsg->sadb_msg_version = PF_KEY_V2;
-	newmsg->sadb_msg_type = SADB_ACQUIRE;
-	newmsg->sadb_msg_errno = ENOENT;	/* XXX */
-	newmsg->sadb_msg_satype = iph2->satype;
-	newmsg->sadb_msg_len = PFKEY_UNIT64(len);
-	newmsg->sadb_msg_reserved = 0;
-	newmsg->sadb_msg_seq = iph2->seq;
-	newmsg->sadb_msg_pid = (u_int32_t)getpid();
-
-	/* send message */
-	len = pfkey_send(lcconf->sock_pfkey, newmsg, len);
-
-	racoon_free(newmsg);
-
-	return 0;
-}
-
-#else
-
-int pk_sendeacquire(struct ph2handle *iph2)
-{
-	exit(1);
-}
-
-#endif
-
-/*
- * check if the algorithm is supported or not.
- * OUT	 0: ok
- *	-1: ng
- */
-int
-pk_checkalg(class, calg, keylen)
-	int class, calg, keylen;
-{
-	int sup, error;
-	u_int alg;
-	struct sadb_alg alg0;
-
-	switch (algclass2doi(class)) {
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		sup = SADB_EXT_SUPPORTED_ENCRYPT;
-		break;
-	case IPSECDOI_ATTR_AUTH:
-		sup = SADB_EXT_SUPPORTED_AUTH;
-		break;
-	case IPSECDOI_PROTO_IPCOMP:
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"compression algorithm can not be checked "
-			"because sadb message doesn't support it.\n");
-		return 0;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid algorithm class.\n");
-		return -1;
-	}
-	alg = ipsecdoi2pfkey_alg(algclass2doi(class), algtype2doi(class, calg));
-	if (alg == ~0)
-		return -1;
-
-	if (keylen == 0) {
-		if (ipsec_get_keylen(sup, alg, &alg0)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"%s.\n", ipsec_strerror());
-			return -1;
-		}
-		keylen = alg0.sadb_alg_minbits;
-	}
-
-	error = ipsec_check_keylen(sup, alg, keylen);
-	if (error)
-		plog(LLV_ERROR, LOCATION, NULL,
-			"%s.\n", ipsec_strerror());
-
-	return error;
-}
-
-/*
- * differences with pfkey_recv() in libipsec/pfkey.c:
- * - never performs busy wait loop.
- * - returns NULL and set *lenp to negative on fatal failures
- * - returns NULL and set *lenp to non-negative on non-fatal failures
- * - returns non-NULL on success
- */
-static struct sadb_msg *
-pk_recv(so, lenp)
-	int so;
-	int *lenp;
-{
-	struct sadb_msg buf, *newmsg;
-	int reallen;
-	int retry = 0;
-
-	*lenp = -1;
-	do
-	{
-	    plog(LLV_DEBUG, LOCATION, NULL, "pk_recv: retry[%d] recv() \n", retry );
-	    *lenp = recv(so, (caddr_t)&buf, sizeof(buf), MSG_PEEK | MSG_DONTWAIT);
-	    retry++;
-	}
-	while (*lenp < 0 && errno == EAGAIN && retry < 3);
-
-	if (*lenp < 0)
-		return NULL;	/*fatal*/
-
-	else if (*lenp < sizeof(buf))
-		return NULL;
-
-	reallen = PFKEY_UNUNIT64(buf.sadb_msg_len);
-	if ((newmsg = racoon_calloc(1, reallen)) == NULL)
-		return NULL;
-
-	*lenp = recv(so, (caddr_t)newmsg, reallen, MSG_PEEK);
-	if (*lenp < 0) {
-		racoon_free(newmsg);
-		return NULL;	/*fatal*/
-	} else if (*lenp != reallen) {
-		racoon_free(newmsg);
-		return NULL;
-	}
-
-	*lenp = recv(so, (caddr_t)newmsg, reallen, 0);
-	if (*lenp < 0) {
-		racoon_free(newmsg);
-		return NULL;	/*fatal*/
-	} else if (*lenp != reallen) {
-		racoon_free(newmsg);
-		return NULL;
-	}
-
-	return newmsg;
-}
-
-/* see handler.h */
-u_int32_t
-pk_getseq()
-{
-	return eay_random();
-}
-
-static int
-addnewsp(mhp)
-	caddr_t *mhp;
-{
-	struct secpolicy *new = NULL;
-	struct sadb_address *saddr, *daddr;
-	struct sadb_x_policy *xpl;
-	struct sadb_lifetime *lt;
-	u_int64_t created;
-
-	/* sanity check */
-	if (mhp[SADB_EXT_ADDRESS_SRC] == NULL
-	 || mhp[SADB_EXT_ADDRESS_DST] == NULL
-	 || mhp[SADB_X_EXT_POLICY] == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"inappropriate sadb spd management message passed.\n");
-		goto bad;
-	}
-
-	saddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_SRC];
-	daddr = (struct sadb_address *)mhp[SADB_EXT_ADDRESS_DST];
-	xpl = (struct sadb_x_policy *)mhp[SADB_X_EXT_POLICY];
-	lt = (struct sadb_lifetime*)mhp[SADB_EXT_LIFETIME_HARD];
-	if(lt != NULL)
-		created = lt->sadb_lifetime_addtime;
-	else
-		created = 0;
-	lt = (struct sadb_lifetime*)mhp[SADB_EXT_LIFETIME_HARD];
-	if(lt != NULL)
-		created = lt->sadb_lifetime_addtime;
-	else
-		created = 0;
-
-#ifdef __linux__
-	/* bsd skips over per-socket policies because there will be no
-	 * src and dst extensions in spddump messages. On Linux the only
-	 * way to achieve the same is check for policy id.
-	 */
-	if (xpl->sadb_x_policy_id % 8 >= 3) return 0;
-#endif
-
-	new = newsp();
-	if (new == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer\n");
-		goto bad;
-	}
-
-	new->spidx.dir = xpl->sadb_x_policy_dir;
-	new->id = xpl->sadb_x_policy_id;
-	new->policy = xpl->sadb_x_policy_type;
-	new->req = NULL;
-
-	/* check policy */
-	switch (xpl->sadb_x_policy_type) {
-	case IPSEC_POLICY_DISCARD:
-	case IPSEC_POLICY_NONE:
-	case IPSEC_POLICY_ENTRUST:
-	case IPSEC_POLICY_BYPASS:
-		break;
-
-	case IPSEC_POLICY_IPSEC:
-	    {
-		int tlen;
-		struct sadb_x_ipsecrequest *xisr;
-		struct ipsecrequest **p_isr = &new->req;
-
-		/* validity check */
-		if (PFKEY_EXTLEN(xpl) < sizeof(*xpl)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid msg length.\n");
-			goto bad;
-		}
-
-		tlen = PFKEY_EXTLEN(xpl) - sizeof(*xpl);
-		xisr = (struct sadb_x_ipsecrequest *)(xpl + 1);
-
-		while (tlen > 0) {
-
-			/* length check */
-			if (xisr->sadb_x_ipsecrequest_len < sizeof(*xisr)) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid msg length.\n");
-				goto bad;
-			}
-
-			/* allocate request buffer */
-			*p_isr = newipsecreq();
-			if (*p_isr == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to get new ipsecreq.\n");
-				goto bad;
-			}
-
-			/* set values */
-			(*p_isr)->next = NULL;
-
-			switch (xisr->sadb_x_ipsecrequest_proto) {
-			case IPPROTO_ESP:
-			case IPPROTO_AH:
-			case IPPROTO_IPCOMP:
-				break;
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid proto type: %u\n",
-					xisr->sadb_x_ipsecrequest_proto);
-				goto bad;
-			}
-			(*p_isr)->saidx.proto = xisr->sadb_x_ipsecrequest_proto;
-
-			switch (xisr->sadb_x_ipsecrequest_mode) {
-			case IPSEC_MODE_TRANSPORT:
-			case IPSEC_MODE_TUNNEL:
-				break;
-			case IPSEC_MODE_ANY:
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid mode: %u\n",
-					xisr->sadb_x_ipsecrequest_mode);
-				goto bad;
-			}
-			(*p_isr)->saidx.mode = xisr->sadb_x_ipsecrequest_mode;
-
-			switch (xisr->sadb_x_ipsecrequest_level) {
-			case IPSEC_LEVEL_DEFAULT:
-			case IPSEC_LEVEL_USE:
-			case IPSEC_LEVEL_REQUIRE:
-				break;
-			case IPSEC_LEVEL_UNIQUE:
-				(*p_isr)->saidx.reqid =
-					xisr->sadb_x_ipsecrequest_reqid;
-				break;
-
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"invalid level: %u\n",
-					xisr->sadb_x_ipsecrequest_level);
-				goto bad;
-			}
-			(*p_isr)->level = xisr->sadb_x_ipsecrequest_level;
-
-			/* set IP addresses if there */
-			if (xisr->sadb_x_ipsecrequest_len > sizeof(*xisr)) {
-				struct sockaddr *paddr;
-
-				paddr = (struct sockaddr *)(xisr + 1);
-				bcopy(paddr, &(*p_isr)->saidx.src,
-					sysdep_sa_len(paddr));
-
-				paddr = (struct sockaddr *)((caddr_t)paddr
-							+ sysdep_sa_len(paddr));
-				bcopy(paddr, &(*p_isr)->saidx.dst,
-					sysdep_sa_len(paddr));
-			}
-
-			(*p_isr)->sp = new;
-
-			/* initialization for the next. */
-			p_isr = &(*p_isr)->next;
-			tlen -= xisr->sadb_x_ipsecrequest_len;
-
-			/* validity check */
-			if (tlen < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"becoming tlen < 0\n");
-			}
-
-			xisr = (struct sadb_x_ipsecrequest *)((caddr_t)xisr
-			                 + xisr->sadb_x_ipsecrequest_len);
-		}
-	    }
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid policy type.\n");
-		goto bad;
-	}
-
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			xpl->sadb_x_policy_priority,
-			created,
-			&new->spidx);
-#else
-	KEY_SETSECSPIDX(xpl->sadb_x_policy_dir,
-			saddr + 1,
-			daddr + 1,
-			saddr->sadb_address_prefixlen,
-			daddr->sadb_address_prefixlen,
-			saddr->sadb_address_proto,
-			created,
-			&new->spidx);
-#endif
-
-#ifdef HAVE_SECCTX
-	if (mhp[SADB_X_EXT_SEC_CTX] != NULL) {
-		struct sadb_x_sec_ctx *ctx;
-
-		ctx = (struct sadb_x_sec_ctx *)mhp[SADB_X_EXT_SEC_CTX];
-		new->spidx.sec_ctx.ctx_alg = ctx->sadb_x_ctx_alg;
-		new->spidx.sec_ctx.ctx_doi = ctx->sadb_x_ctx_doi;
-		new->spidx.sec_ctx.ctx_strlen = ctx->sadb_x_ctx_len;
-		memcpy(new->spidx.sec_ctx.ctx_str,ctx + 1,ctx->sadb_x_ctx_len);
-	}
-#endif /* HAVE_SECCTX */
-
-	inssp(new);
-
-	return 0;
-bad:
-	if (new != NULL) {
-		if (new->req != NULL)
-			racoon_free(new->req);
-		racoon_free(new);
-	}
-	return -1;
-}
-
-/* proto/mode/src->dst spi */
-const char *
-sadbsecas2str(src, dst, proto, spi, mode)
-	struct sockaddr *src, *dst;
-	int proto;
-	u_int32_t spi;
-	int mode;
-{
-	static char buf[256];
-	u_int doi_proto, doi_mode = 0;
-	char *p;
-	int blen, i;
-
-	doi_proto = pfkey2ipsecdoi_proto(proto);
-	if (doi_proto == ~0)
-		return NULL;
-	if (mode) {
-		doi_mode = pfkey2ipsecdoi_mode(mode);
-		if (doi_mode == ~0)
-			return NULL;
-	}
-
-	blen = sizeof(buf) - 1;
-	p = buf;
-
-	i = snprintf(p, blen, "%s%s%s ",
-		s_ipsecdoi_proto(doi_proto),
-		mode ? "/" : "",
-		mode ? s_ipsecdoi_encmode(doi_mode) : "");
-	if (i < 0 || i >= blen)
-		return NULL;
-	p += i;
-	blen -= i;
-
-	i = snprintf(p, blen, "%s->", saddr2str(src));
-	if (i < 0 || i >= blen)
-		return NULL;
-	p += i;
-	blen -= i;
-
-	i = snprintf(p, blen, "%s ", saddr2str(dst));
-	if (i < 0 || i >= blen)
-		return NULL;
-	p += i;
-	blen -= i;
-
-	if (spi) {
-		snprintf(p, blen, "spi=%lu(0x%lx)", (unsigned long)ntohl(spi),
-		    (unsigned long)ntohl(spi));
-	}
-
-	return buf;
-}
diff --git a/src/racoon/pfkey.h b/src/racoon/pfkey.h
deleted file mode 100644
index 547f94a..0000000
--- a/src/racoon/pfkey.h
+++ /dev/null
@@ -1,77 +0,0 @@
-/*	$NetBSD: pfkey.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: pfkey.h,v 1.3 2004/06/11 16:00:17 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _PFKEY_H
-#define _PFKEY_H
-
-struct pfkey_satype {
-	u_int8_t	ps_satype;
-	const char	*ps_name;
-};
-
-extern const struct pfkey_satype pfkey_satypes[];
-extern const int pfkey_nsatypes;
-
-extern int pfkey_handler __P((void));
-extern vchar_t *pfkey_dump_sadb __P((int));
-extern void pfkey_flush_sadb __P((u_int));
-extern int pfkey_init __P((void));
-
-extern struct pfkey_st *pfkey_getpst __P((caddr_t *, int, int));
-
-extern int pk_checkalg __P((int, int, int));
-
-struct ph2handle;
-extern int pk_sendgetspi __P((struct ph2handle *));
-extern int pk_sendupdate __P((struct ph2handle *));
-extern int pk_sendadd __P((struct ph2handle *));
-extern int pk_sendeacquire __P((struct ph2handle *));
-extern int pk_sendspdupdate2 __P((struct ph2handle *));
-extern int pk_sendspdadd2 __P((struct ph2handle *));
-extern int pk_sendspddelete __P((struct ph2handle *));
-
-extern void pfkey_timeover_stub __P((void *));
-extern void pfkey_timeover __P((struct ph2handle *));
-
-extern u_int pfkey2ipsecdoi_proto __P((u_int));
-extern u_int ipsecdoi2pfkey_proto __P((u_int));
-extern u_int pfkey2ipsecdoi_mode __P((u_int));
-extern u_int ipsecdoi2pfkey_mode __P((u_int));
-
-extern int pfkey_convertfromipsecdoi __P(( u_int, u_int, u_int,
-	u_int *, u_int *, u_int *, u_int *, u_int *));
-extern u_int32_t pk_getseq __P((void));
-extern const char *sadbsecas2str
-	__P((struct sockaddr *, struct sockaddr *, int, u_int32_t, int));
-
-#endif /* _PFKEY_H */
diff --git a/src/racoon/plainrsa-gen.8 b/src/racoon/plainrsa-gen.8
deleted file mode 100644
index 377de2d..0000000
--- a/src/racoon/plainrsa-gen.8
+++ /dev/null
@@ -1,138 +0,0 @@
-.\"	$NetBSD: plainrsa-gen.8,v 1.13 2006/09/19 18:54:39 wiz Exp $
-.\"
-.\" Id: plainrsa-gen.8,v 1.4 2005/04/18 11:07:55 manubsd Exp
-.\"
-.\" Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
-.\" Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
-.\" 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.
-.\"
-.Dd June 14, 2004
-.Dt PLAINRSA-GEN 8
-.Os
-.\"
-.Sh NAME
-.Nm plainrsa-gen
-.Nd generator for Plain RSA keys
-.\"
-.Sh SYNOPSIS
-.Nm plainrsa-gen
-.Bk -words
-.Op Fl b Ar bits
-.Op Fl e Ar pubexp
-.Op Fl f Ar outfile
-.Op Fl h
-.Ek
-.\"
-.Sh DESCRIPTION
-.Nm
-can be used to generate
-.Li Plain RSA keys
-for authentication purposes.
-Using
-.Li Plain RSA keys
-is optional.
-Other possibilities are
-.Li Pre-shared keys
-or
-.Li X.509 certificates .
-.\"
-.Bl -tag -width Ds
-.It Fl b Ar bits
-bit length of the key.
-Default is
-.Li 1024 ,
-recommended length is
-.Li 2048
-or even
-.Li 4096
-bits.
-Note that generating longer keys takes longer time.
-.It Fl e Ar pubexp
-value of RSA public exponent.
-Default is
-.Li 0x3 .
-Don't change this unless you really know what you are doing!
-.It Fl f Ar outfile
-.Ar outfile
-instead of
-.Li stdout .
-If the file already exists it won't be overwritten.
-You wouldn't like to lose your private key by accident, would you?
-.El
-.\"
-.Sh OUTPUT FILE FORMAT
-This is the secret
-.Li private key
-that should
-.Ic never
-leave your computer:
-.Bd -literal
-: RSA	{
-	# RSA 1024 bits
-	# pubkey=0sAQOrWlcwbAIdNSMhDt...
-	Modulus: 0xab5a57306c021d3523...
-	PublicExponent: 0x03
-	PrivateExponent: 0x723c3a2048...
-	Prime1: 0xd309b30e6adf9d85c01...
-	Prime2: 0xcfdc2a8aa5b2b3c90e3...
-	Exponent1: 0x8cb122099c9513ae...
-	Exponent2: 0x8a92c7071921cd30...
-	Coefficient: 0x722751305eafe9...
-  }
-.Ed
-.Pp
-The line
-.Li pubkey=0sAQOrW...
-of the
-.Li private key
-contains a
-.Li public key
-that should be stored in the other peer's configuration in this format:
-.Bd -literal
-: PUB 0sAQOrWlcwbAIdNSMhDt...
-.Ed
-.\"
-.Pp
-You can also specify
-.Li from
-and
-.Li to
-addresses for which the key is valid:
-.Bd -literal
-0.0.0.0/0 10.20.30.0/24 : PUB 0sAQOrWlcwbAIdNSMhDt...
-.Ed
-.\"
-.Sh SEE ALSO
-.Xr racoon.conf 5 ,
-.Xr racoon 8
-.\"
-.Sh HISTORY
-.Nm
-was written by
-.An Michal Ludvig Aq michal@logix.cz
-and first appeared in
-.Ic ipsec-tools 0.4 .
diff --git a/src/racoon/plainrsa-gen.c b/src/racoon/plainrsa-gen.c
deleted file mode 100644
index 1bd5f67..0000000
--- a/src/racoon/plainrsa-gen.c
+++ /dev/null
@@ -1,208 +0,0 @@
-/*	$NetBSD: plainrsa-gen.c,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: plainrsa-gen.c,v 1.6 2005/04/21 09:08:40 monas Exp */
-/*
- * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
- * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
- * 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.
- */
-
-/* This file contains a generator for FreeS/WAN-style ipsec.secrets RSA keys. */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <unistd.h>
-
-#include <openssl/bio.h>
-#include <openssl/bn.h>
-#include <openssl/err.h>
-#include <openssl/objects.h>
-#include <openssl/rsa.h>
-#include <openssl/evp.h>
-#ifdef HAVE_OPENSSL_ENGINE_H
-#include <openssl/engine.h>
-#endif
-
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "crypto_openssl.h"
-
-#include "package_version.h"
-
-void
-usage (char *argv0)
-{
-	fprintf(stderr, "Plain RSA key generator, part of %s\n", TOP_PACKAGE_STRING);
-	fprintf(stderr, "By Michal Ludvig (http://www.logix.cz/michal)\n");
-	fprintf(stderr, "\n");
-	fprintf(stderr, "Usage: %s [options]\n", argv0);
-	fprintf(stderr, "\n");
-	fprintf(stderr, "  -b bits       Generate <bits> long RSA key (default=1024)\n");
-	fprintf(stderr, "  -e pubexp     Public exponent to use (default=0x3)\n");
-	fprintf(stderr, "  -f filename   Filename to store the key to (default=stdout)\n");
-	fprintf(stderr, "  -h            Help\n");
-	fprintf(stderr, "\n");
-	fprintf(stderr, "Report bugs to <ipsec-tools-devel@lists.sourceforge.net>\n");
-	exit(1);
-}
-
-/*
- * See RFC 2065, section 3.5 for details about the output format.
- */
-vchar_t *
-mix_b64_pubkey(RSA *key)
-{
-	char *binbuf;
-	long binlen, ret;
-	vchar_t *res;
-	
-	binlen = 1 + BN_num_bytes(key->e) + BN_num_bytes(key->n);
-	binbuf = malloc(binlen);
-	memset(binbuf, 0, binlen);
-	binbuf[0] = BN_bn2bin(key->e, (unsigned char *) &binbuf[1]);
-	ret = BN_bn2bin(key->n, (unsigned char *) (&binbuf[binbuf[0] + 1]));
-	if (1 + binbuf[0] + ret != binlen) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "Pubkey generation failed. This is really strange...\n");
-		return NULL;
-	}
-
-	return base64_encode(binbuf, binlen);
-}
-
-char *
-lowercase(char *input)
-{
-	char *ptr = input;
-	while (*ptr) {
-		if (*ptr >= 'A' && *ptr <= 'F')
-			*ptr -= 'A' - 'a';
-		*ptr++;
-	}
-
-	return input;
-}
-
-int
-gen_rsa_key(FILE *fp, size_t bits, unsigned long exp)
-{
-	RSA *key;
-	vchar_t *pubkey64 = NULL;
-
-	key = RSA_generate_key(bits, exp, NULL, NULL);
-	if (!key) {
-		fprintf(stderr, "RSA_generate_key(): %s\n", eay_strerror());
-		return -1;
-	}
-	
-	pubkey64 = mix_b64_pubkey(key);
-	if (!pubkey64) {
-		fprintf(stderr, "mix_b64_pubkey(): %s\n", eay_strerror());
-		return -1;
-	}
-	
-	fprintf(fp, "# : PUB 0s%s\n", pubkey64->v);
-	fprintf(fp, ": RSA\t{\n");
-	fprintf(fp, "\t# RSA %zu bits\n", bits);
-	fprintf(fp, "\t# pubkey=0s%s\n", pubkey64->v);
-	fprintf(fp, "\tModulus: 0x%s\n", lowercase(BN_bn2hex(key->n)));
-	fprintf(fp, "\tPublicExponent: 0x%s\n", lowercase(BN_bn2hex(key->e)));
-	fprintf(fp, "\tPrivateExponent: 0x%s\n", lowercase(BN_bn2hex(key->d)));
-	fprintf(fp, "\tPrime1: 0x%s\n", lowercase(BN_bn2hex(key->p)));
-	fprintf(fp, "\tPrime2: 0x%s\n", lowercase(BN_bn2hex(key->q)));
-	fprintf(fp, "\tExponent1: 0x%s\n", lowercase(BN_bn2hex(key->dmp1)));
-	fprintf(fp, "\tExponent2: 0x%s\n", lowercase(BN_bn2hex(key->dmq1)));
-	fprintf(fp, "\tCoefficient: 0x%s\n", lowercase(BN_bn2hex(key->iqmp)));
-	fprintf(fp, "  }\n");
-
-	vfree(pubkey64);
-
-	return 0;
-}
-
-int
-main (int argc, char *argv[])
-{
-	FILE *fp = stdout;
-	size_t bits = 1024;
-	unsigned int pubexp = 0x3;
-	struct stat st;
-	extern char *optarg;
-	extern int optind;
-	int c;
-	char *fname = NULL;
-
-	while ((c = getopt(argc, argv, "e:b:f:h")) != -1)
-		switch (c) {
-			case 'e':
-				if (strncmp(optarg, "0x", 2) == 0)
-					sscanf(optarg, "0x%x", &pubexp);
-				else
-					pubexp = atoi(optarg);
-				break;
-			case 'b':
-				bits = atoi(optarg);
-				break;
-			case 'f':
-				fname = optarg;
-				break;
-			case 'h':
-			default:
-				usage(argv[0]);
-		}
-
-	if (fname) {
-		if (stat(fname, &st) >= 0) {
-			fprintf(stderr, "%s: file exists! Please use a different name.\n", fname);
-			exit(1);
-		}
-
-		umask(0077);
-		fp = fopen(fname, "w");
-		if (fp == NULL) {
-			fprintf(stderr, "%s: %s\n", fname, strerror(errno));
-			exit(1);
-		}
-	}
-
-	ploginit();
-	eay_init();
-
-	gen_rsa_key(fp, bits, pubexp);
-
-	fclose(fp);
-
-	return 0;
-}
diff --git a/src/racoon/plog.c b/src/racoon/plog.c
deleted file mode 100644
index 008260d..0000000
--- a/src/racoon/plog.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/*	$NetBSD: plog.c,v 1.4.6.2 2009/04/20 13:35:36 tteras Exp $	*/
-
-/* Id: plog.c,v 1.11 2006/06/20 09:57:31 vanhu Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#ifdef HAVE_STDARG_H
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#include <ctype.h>
-#include <err.h>
-
-#include "var.h"
-#include "misc.h"
-#include "plog.h"
-#include "logger.h"
-#include "debug.h"
-#include "gcmalloc.h"
-
-#ifndef VA_COPY
-# define VA_COPY(dst,src) memcpy(&(dst), &(src), sizeof(va_list))
-#endif
-
-char *pname = NULL;
-u_int32_t loglevel = LLV_BASE;
-int f_foreground = 0;
-
-int print_location = 0;
-
-static struct log *logp = NULL;
-static char *logfile = NULL;
-
-static char *plog_common __P((int, const char *, const char *));
-
-static struct plogtags {
-	char *name;
-	int priority;
-} ptab[] = {
-	{ "(not defined)",	0, },
-	{ "ERROR",		LOG_INFO, },
-	{ "WARNING",		LOG_INFO, },
-	{ "NOTIFY",		LOG_INFO, },
-	{ "INFO",		LOG_INFO, },
-	{ "DEBUG",		LOG_DEBUG, },
-	{ "DEBUG2",		LOG_DEBUG, },
-};
-
-static char *
-plog_common(pri, fmt, func)
-	int pri;
-	const char *fmt, *func;
-{
-	static char buf[800];	/* XXX shoule be allocated every time ? */
-	char *p;
-	int reslen, len;
-
-	p = buf;
-	reslen = sizeof(buf);
-
-	if (logfile || f_foreground) {
-		time_t t;
-		struct tm *tm;
-
-		t = time(0);
-		tm = localtime(&t);
-		len = strftime(p, reslen, "%Y-%m-%d %T: ", tm);
-		p += len;
-		reslen -= len;
-	}
-
-	if (pri < ARRAYLEN(ptab)) {
-		len = snprintf(p, reslen, "%s: ", ptab[pri].name);
-		if (len >= 0 && len < reslen) {
-			p += len;
-			reslen -= len;
-		} else
-			*p = '\0';
-	}
-
-	if (print_location)
-		snprintf(p, reslen, "%s: %s", func, fmt);
-	else
-		snprintf(p, reslen, "%s", fmt);
-#ifdef BROKEN_PRINTF
-	while ((p = strstr(buf,"%z")) != NULL)
-		p[1] = 'l';
-#endif
-
-	return buf;
-}
-
-void
-_plog(int pri, const char *func, struct sockaddr *sa, const char *fmt, ...)
-{
-	va_list ap;
-
-	va_start(ap, fmt);
-	plogv(pri, func, sa, fmt, ap);
-	va_end(ap);
-}
-
-void
-plogv(int pri, const char *func, struct sockaddr *sa,
-	const char *fmt, va_list ap)
-{
-	char *newfmt;
-	va_list ap_bak;
-
-	if (pri > loglevel)
-		return;
-
-	newfmt = plog_common(pri, fmt, func);
-
-	VA_COPY(ap_bak, ap);
-	
-	if (f_foreground)
-		vprintf(newfmt, ap);
-
-	if (logfile)
-		log_vaprint(logp, newfmt, ap_bak);
-	else {
-		if (pri < ARRAYLEN(ptab))
-			vsyslog(ptab[pri].priority, newfmt, ap_bak);
-		else
-			vsyslog(LOG_ALERT, newfmt, ap_bak);
-	}
-}
-
-void
-plogdump(pri, data, len)
-	int pri;
-	void *data;
-	size_t len;
-{
-	caddr_t buf;
-	size_t buflen;
-	int i, j;
-
-	if (pri > loglevel)
-		return;
-
-	/*
-	 * 2 words a bytes + 1 space 4 bytes + 1 newline 32 bytes
-	 * + 2 newline + '\0'
-	 */
-	buflen = (len * 2) + (len / 4) + (len / 32) + 3;
-	buf = racoon_malloc(buflen);
-
-	i = 0;
-	j = 0;
-	while (j < len) {
-		if (j % 32 == 0)
-			buf[i++] = '\n';
-		else
-		if (j % 4 == 0)
-			buf[i++] = ' ';
-		snprintf(&buf[i], buflen - i, "%02x",
-			((unsigned char *)data)[j] & 0xff);
-		i += 2;
-		j++;
-	}
-	if (buflen - i >= 2) {
-		buf[i++] = '\n';
-		buf[i] = '\0';
-	}
-	plog(pri, LOCATION, NULL, "%s", buf);
-
-	racoon_free(buf);
-}
-
-void
-ploginit()
-{
-	if (logfile) {
-		logp = log_open(250, logfile);
-		if (logp == NULL)
-			errx(1, "ERROR: failed to open log file %s.", logfile);
-		return;
-	}
-
-        openlog(pname, LOG_NDELAY, LOG_DAEMON);
-}
-
-void
-plogset(file)
-	char *file;
-{
-	if (logfile != NULL)
-		racoon_free(logfile);
-	logfile = racoon_strdup(file);
-	STRDUP_FATAL(logfile);
-}
-
-/*
-   Returns a printable string from (possibly) binary data ;
-   concatenates all unprintable chars to one space.
-   XXX Maybe the printable chars range is too large...
- */
-char*
-binsanitize(binstr, n)
-	char *binstr;
-	size_t n;
-{
-	int p,q;
-	char* d;
-
-	d = racoon_malloc(n + 1);
-	for (p = 0, q = 0; p < n; p++) {
-		if (isgraph((int)binstr[p])) {
-			d[q++] = binstr[p];
-		} else {
-			if (q && d[q - 1] != ' ')
-				d[q++] = ' ';
-		}
-	}
-	d[q++] = '\0';
-
-	return d;
-}
-	
diff --git a/src/racoon/plog.h b/src/racoon/plog.h
deleted file mode 100644
index b8cb027..0000000
--- a/src/racoon/plog.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/*	$NetBSD: plog.h,v 1.4.6.1 2007/11/06 16:41:27 vanhu Exp $	*/
-
-/* Id: plog.h,v 1.7 2006/06/20 09:57:31 vanhu Exp */
-
-/*
- * 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.
- */
-
-#ifndef _PLOG_H
-#define _PLOG_H
-
-#ifdef ANDROID_PATCHED
-
-#define LLV_ERROR   0
-#define LLV_WARNING 1
-#define LLV_NOTIFY  2
-#define LLV_INFO    3
-#define LLV_DEBUG   4
-#define LLV_DEBUG2  5
-
-#define loglevel LLV_DEBUG2
-
-#define plog(level, location, address, ...)                 \
-    do {                                                    \
-        if ((level) >= LLV_ERROR && (level) <= LLV_INFO) {  \
-            do_plog((level), __VA_ARGS__);                  \
-        }                                                   \
-    } while (0)
-
-#define plogdump(...)
-
-extern void do_plog(int level, char *format, ...);
-extern char *binsanitize(char *binary, size_t size);
-extern char *pname;
-
-#else
-
-#ifdef HAVE_STDARG_H
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-#include <syslog.h>
-
-/*
- * INFO: begin negotiation, SA establishment/deletion/expiration.
- * NOTIFY: just notifiable.
- * WARNING: not error strictly.
- * ERROR: system call error. also invalid parameter/format.
- * DEBUG1: debugging informatioin.
- * DEBUG2: too more verbose. e.g. parsing config.
- */
-#define LLV_ERROR	1
-#define LLV_WARNING	2
-#define LLV_NOTIFY	3
-#define LLV_INFO	4
-#define LLV_DEBUG	5
-#define LLV_DEBUG2	6
- 
-#define LLV_BASE	LLV_INFO /* by default log less than this value. */
-
-extern char *pname;
-extern u_int32_t loglevel;
-extern int f_foreground;
-extern int print_location;
-
-struct sockaddr;
-#define plog(pri, ...) \
-	do { \
-		if ((pri) <= loglevel) \
-			_plog((pri), __VA_ARGS__); \
-	} while (0)
-extern void _plog __P((int, const char *, struct sockaddr *, const char *, ...))
-	__attribute__ ((__format__ (__printf__, 4, 5)));
-extern void plogv __P((int, const char *, struct sockaddr *,
-	const char *, va_list));
-extern void plogdump __P((int, void *, size_t));
-extern void ploginit __P((void));
-extern void plogset __P((char *));
-
-extern char* binsanitize __P((char*, size_t));
-
-#endif
-
-#endif /* _PLOG_H */
diff --git a/src/racoon/policy.c b/src/racoon/policy.c
deleted file mode 100644
index 29a6818..0000000
--- a/src/racoon/policy.c
+++ /dev/null
@@ -1,488 +0,0 @@
-/*	$NetBSD: policy.c,v 1.6.4.1 2007/08/01 11:52:21 vanhu Exp $	*/
-
-/*	$KAME: policy.c,v 1.46 2001/11/16 04:08:10 sakane Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/queue.h>
-
-#include <netinet/in.h>
-#include PATH_IPSEC_H
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "debug.h"
-
-#include "policy.h"
-#include "localconf.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "oakley.h"
-#include "handler.h"
-#include "strnames.h"
-#include "gcmalloc.h"
-
-static TAILQ_HEAD(_sptree, secpolicy) sptree;
-
-/* perform exact match against security policy table. */
-struct secpolicy *
-getsp(spidx)
-	struct policyindex *spidx;
-{
-	struct secpolicy *p;
-
-	for (p = TAILQ_FIRST(&sptree); p; p = TAILQ_NEXT(p, chain)) {
-		if (!cmpspidxstrict(spidx, &p->spidx))
-			return p;
-	}
-
-	return NULL;
-}
-
-/*
- * perform non-exact match against security policy table, only if this is
- * transport mode SA negotiation.  for example, 0.0.0.0/0 -> 0.0.0.0/0
- * entry in policy.txt can be returned when we're negotiating transport
- * mode SA.  this is how the kernel works.
- */
-#if 1
-struct secpolicy *
-getsp_r(spidx)
-	struct policyindex *spidx;
-{
-	struct secpolicy *p;
-
-	for (p = TAILQ_FIRST(&sptree); p; p = TAILQ_NEXT(p, chain)) {
-		if (!cmpspidxwild(spidx, &p->spidx))
-			return p;
-	}
-
-	return NULL;
-}
-#else
-struct secpolicy *
-getsp_r(spidx, iph2)
-	struct policyindex *spidx;
-	struct ph2handle *iph2;
-{
-	struct secpolicy *p;
-	u_int8_t prefixlen;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "checking for transport mode\n");
-
-	if (spidx->src.ss_family != spidx->dst.ss_family) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"address family mismatch, src:%d dst:%d\n",
-				spidx->src.ss_family,
-				spidx->dst.ss_family);
-		return NULL;
-	}
-	switch (spidx->src.ss_family) {
-	case AF_INET:
-		prefixlen = sizeof(struct in_addr) << 3;
-		break;
-#ifdef INET6
-	case AF_INET6:
-		prefixlen = sizeof(struct in6_addr) << 3;
-		break;
-#endif
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid family: %d\n", spidx->src.ss_family);
-		return NULL;
-	}
-
-	/* is it transport mode SA negotiation? */
-	plog(LLV_DEBUG, LOCATION, NULL, "src1: %s\n",
-		saddr2str(iph2->src));
-	plog(LLV_DEBUG, LOCATION, NULL, "src2: %s\n",
-		saddr2str((struct sockaddr *)&spidx->src));
-	if (cmpsaddrwop(iph2->src, (struct sockaddr *)&spidx->src)
-	 || spidx->prefs != prefixlen)
-		return NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "dst1: %s\n",
-		saddr2str(iph2->dst));
-	plog(LLV_DEBUG, LOCATION, NULL, "dst2: %s\n",
-		saddr2str((struct sockaddr *)&spidx->dst));
-	if (cmpsaddrwop(iph2->dst, (struct sockaddr *)&spidx->dst)
-	 || spidx->prefd != prefixlen)
-		return NULL;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "looks to be transport mode\n");
-
-	for (p = TAILQ_FIRST(&sptree); p; p = TAILQ_NEXT(p, chain)) {
-		if (!cmpspidx_wild(spidx, &p->spidx))
-			return p;
-	}
-
-	return NULL;
-}
-#endif
-
-struct secpolicy *
-getspbyspid(spid)
-	u_int32_t spid;
-{
-	struct secpolicy *p;
-
-	for (p = TAILQ_FIRST(&sptree); p; p = TAILQ_NEXT(p, chain)) {
-		if (p->id == spid)
-			return p;
-	}
-
-	return NULL;
-}
-
-/*
- * compare policyindex.
- * a: subject b: db
- * OUT:	0:	equal
- *	1:	not equal
- */
-int
-cmpspidxstrict(a, b)
-	struct policyindex *a, *b;
-{
-	plog(LLV_DEBUG, LOCATION, NULL, "sub:%p: %s\n", a, spidx2str(a));
-	plog(LLV_DEBUG, LOCATION, NULL, "db :%p: %s\n", b, spidx2str(b));
-
-	/* XXX don't check direction now, but it's to be checked carefully. */
-	if (a->dir != b->dir
-	 || a->prefs != b->prefs
-	 || a->prefd != b->prefd
-	 || a->ul_proto != b->ul_proto)
-		return 1;
-
-	if (cmpsaddrstrict((struct sockaddr *)&a->src,
-			   (struct sockaddr *)&b->src))
-		return 1;
-	if (cmpsaddrstrict((struct sockaddr *)&a->dst,
-			   (struct sockaddr *)&b->dst))
-		return 1;
-
-#ifdef HAVE_SECCTX
-	if (a->sec_ctx.ctx_alg != b->sec_ctx.ctx_alg
-	    || a->sec_ctx.ctx_doi != b->sec_ctx.ctx_doi
-	    || !within_range(a->sec_ctx.ctx_str, b->sec_ctx.ctx_str))
-		return 1;
-#endif
-	return 0;
-}
-
-/*
- * compare policyindex, with wildcard address/protocol match.
- * a: subject b: db, can contain wildcard things.
- * OUT:	0:	equal
- *	1:	not equal
- */
-int
-cmpspidxwild(a, b)
-	struct policyindex *a, *b;
-{
-	struct sockaddr_storage sa1, sa2;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "sub:%p: %s\n", a, spidx2str(a));
-	plog(LLV_DEBUG, LOCATION, NULL, "db: %p: %s\n", b, spidx2str(b));
-
-	if (!(b->dir == IPSEC_DIR_ANY || a->dir == b->dir))
-		return 1;
-
-	if (!(a->ul_proto == IPSEC_ULPROTO_ANY ||
-	      b->ul_proto == IPSEC_ULPROTO_ANY ||
-	      a->ul_proto == b->ul_proto))
-		return 1;
-
-	if (a->src.ss_family != b->src.ss_family)
-		return 1;
-	if (a->dst.ss_family != b->dst.ss_family)
-		return 1;
-
-#ifndef __linux__
-	/* compare src address */
-	if (sizeof(sa1) < a->src.ss_len || sizeof(sa2) < b->src.ss_len) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unexpected error: "
-			"src.ss_len:%d dst.ss_len:%d\n",
-			a->src.ss_len, b->src.ss_len);
-		return 1;
-	}
-#endif
-	mask_sockaddr((struct sockaddr *)&sa1, (struct sockaddr *)&a->src,
-		b->prefs);
-	mask_sockaddr((struct sockaddr *)&sa2, (struct sockaddr *)&b->src,
-		b->prefs);
-	plog(LLV_DEBUG, LOCATION, NULL, "%p masked with /%d: %s\n",
-		a, b->prefs, saddr2str((struct sockaddr *)&sa1));
-	plog(LLV_DEBUG, LOCATION, NULL, "%p masked with /%d: %s\n",
-		b, b->prefs, saddr2str((struct sockaddr *)&sa2));
-	if (cmpsaddrwild((struct sockaddr *)&sa1, (struct sockaddr *)&sa2))
-		return 1;
-
-#ifndef __linux__
-	/* compare dst address */
-	if (sizeof(sa1) < a->dst.ss_len || sizeof(sa2) < b->dst.ss_len) {
-		plog(LLV_ERROR, LOCATION, NULL, "unexpected error\n");
-		exit(1);
-	}
-#endif
-	mask_sockaddr((struct sockaddr *)&sa1, (struct sockaddr *)&a->dst,
-		b->prefd);
-	mask_sockaddr((struct sockaddr *)&sa2, (struct sockaddr *)&b->dst,
-		b->prefd);
-	plog(LLV_DEBUG, LOCATION, NULL, "%p masked with /%d: %s\n",
-		a, b->prefd, saddr2str((struct sockaddr *)&sa1));
-	plog(LLV_DEBUG, LOCATION, NULL, "%p masked with /%d: %s\n",
-		b, b->prefd, saddr2str((struct sockaddr *)&sa2));
-	if (cmpsaddrwild((struct sockaddr *)&sa1, (struct sockaddr *)&sa2))
-		return 1;
-
-#ifdef HAVE_SECCTX
-	if (a->sec_ctx.ctx_alg != b->sec_ctx.ctx_alg
-	    || a->sec_ctx.ctx_doi != b->sec_ctx.ctx_doi
-	    || !within_range(a->sec_ctx.ctx_str, b->sec_ctx.ctx_str))
-		return 1;
-#endif
-	return 0;
-}
-
-struct secpolicy *
-newsp()
-{
-	struct secpolicy *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-
-	return new;
-}
-
-void
-delsp(sp)
-	struct secpolicy *sp;
-{
-	struct ipsecrequest *req = NULL, *next;
-
-	for (req = sp->req; req; req = next) {
-		next = req->next;
-		racoon_free(req);
-	}
-	
-	racoon_free(sp);
-}
-
-void
-delsp_bothdir(spidx0)
-	struct policyindex *spidx0;
-{
-	struct policyindex spidx;
-	struct secpolicy *sp;
-	struct sockaddr_storage src, dst;
-	u_int8_t prefs, prefd;
-
-	memcpy(&spidx, spidx0, sizeof(spidx));
-	switch (spidx.dir) {
-	case IPSEC_DIR_INBOUND:
-#ifdef HAVE_POLICY_FWD
-	case IPSEC_DIR_FWD:
-#endif
-		src   = spidx.src;
-		dst   = spidx.dst;
-		prefs = spidx.prefs;
-		prefd = spidx.prefd;
-		break;
-	case IPSEC_DIR_OUTBOUND:
-		src   = spidx.dst;
-		dst   = spidx.src;
-		prefs = spidx.prefd;
-		prefd = spidx.prefs;
-		break;
-	default:
-		return;
-	}
-
-	spidx.src   = src;
-	spidx.dst   = dst;
-	spidx.prefs = prefs;
-	spidx.prefd = prefd;
-	spidx.dir   = IPSEC_DIR_INBOUND;
-
-	sp = getsp(&spidx);
-	if (sp) {
-		remsp(sp);
-		delsp(sp);
-	}
-
-#ifdef HAVE_POLICY_FWD
-	spidx.dir   = IPSEC_DIR_FWD;
-
-	sp = getsp(&spidx);
-	if (sp) {
-		remsp(sp);
-		delsp(sp);
-	}
-#endif
-
-	spidx.src   = dst;
-	spidx.dst   = src;
-	spidx.prefs = prefd;
-	spidx.prefd = prefs;
-	spidx.dir   = IPSEC_DIR_OUTBOUND;
-
-	sp = getsp(&spidx);
-	if (sp) {
-		remsp(sp);
-		delsp(sp);
-	}
-}
-
-void
-inssp(new)
-	struct secpolicy *new;
-{
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-	struct secpolicy *p;
-
-	TAILQ_FOREACH(p, &sptree, chain) {
-		if (new->spidx.priority < p->spidx.priority) {
-			TAILQ_INSERT_BEFORE(p, new, chain);
-			return;
-		}
-	}
-	if (p == NULL)
-#endif
-		TAILQ_INSERT_TAIL(&sptree, new, chain);
-
-	return;
-}
-
-void
-remsp(sp)
-	struct secpolicy *sp;
-{
-	TAILQ_REMOVE(&sptree, sp, chain);
-}
-
-void
-flushsp()
-{
-	struct secpolicy *p, *next;
-
-	for (p = TAILQ_FIRST(&sptree); p; p = next) {
-		next = TAILQ_NEXT(p, chain);
-		remsp(p);
-		delsp(p);
-	}
-}
-
-void
-initsp()
-{
-	TAILQ_INIT(&sptree);
-}
-
-struct ipsecrequest *
-newipsecreq()
-{
-	struct ipsecrequest *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-
-	return new;
-}
-
-const char *
-spidx2str(spidx)
-	const struct policyindex *spidx;
-{
-	/* addr/pref[port] addr/pref[port] ul dir act */
-	static char buf[256];
-	char *p, *a, *b;
-	int blen, i;
-
-	blen = sizeof(buf) - 1;
-	p = buf;
-
-	a = saddr2str((const struct sockaddr *)&spidx->src);
-	for (b = a; *b != '\0'; b++)
-		if (*b == '[') {
-			*b = '\0';
-			b++;
-			break;
-		}
-	i = snprintf(p, blen, "%s/%d[%s ", a, spidx->prefs, b);
-	if (i < 0 || i >= blen)
-		return NULL;
-	p += i;
-	blen -= i;
-
-	a = saddr2str((const struct sockaddr *)&spidx->dst);
-	for (b = a; *b != '\0'; b++)
-		if (*b == '[') {
-			*b = '\0';
-			b++;
-			break;
-		}
-	i = snprintf(p, blen, "%s/%d[%s ", a, spidx->prefd, b);
-	if (i < 0 || i >= blen)
-		return NULL;
-	p += i;
-	blen -= i;
-
-	i = snprintf(p, blen, "proto=%s dir=%s",
-		s_proto(spidx->ul_proto), s_direction(spidx->dir));
-
-#ifdef HAVE_SECCTX
-	if (spidx->sec_ctx.ctx_strlen) {
-		p += i;
-		blen -= i;
-		snprintf(p, blen, " sec_ctx:doi=%d,alg=%d,len=%d,str=%s",
-			 spidx->sec_ctx.ctx_doi, spidx->sec_ctx.ctx_alg,
-			 spidx->sec_ctx.ctx_strlen, spidx->sec_ctx.ctx_str);
-	}
-#endif
-	return buf;
-}
diff --git a/src/racoon/policy.h b/src/racoon/policy.h
deleted file mode 100644
index 8c47451..0000000
--- a/src/racoon/policy.h
+++ /dev/null
@@ -1,163 +0,0 @@
-/*	$NetBSD: policy.h,v 1.5.4.2 2007/06/07 20:34:19 manu Exp $	*/
-
-/* Id: policy.h,v 1.5 2004/06/11 16:00:17 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _POLICY_H
-#define _POLICY_H
-
-#include <sys/queue.h>
-
-
-#ifdef HAVE_SECCTX
-#define MAX_CTXSTR_SIZE 50
-struct security_ctx {
-	u_int8_t ctx_doi;       /* Security Context DOI */
-	u_int8_t ctx_alg;       /* Security Context Algorithm */
-	u_int16_t ctx_strlen;   /* Security Context stringlength
-				 * (includes terminating NULL)
-				 */
-	char ctx_str[MAX_CTXSTR_SIZE];  /* Security Context string */
-};
-#endif
-
-/* refs. ipsec.h */
-/*
- * Security Policy Index
- * NOTE: Ensure to be same address family and upper layer protocol.
- * NOTE: ul_proto, port number, uid, gid:
- *	ANY: reserved for waldcard.
- *	0 to (~0 - 1): is one of the number of each value.
- */
-struct policyindex {
-	u_int8_t dir;			/* direction of packet flow, see blow */
-	struct sockaddr_storage src;	/* IP src address for SP */
-	struct sockaddr_storage dst;	/* IP dst address for SP */
-	u_int8_t prefs;			/* prefix length in bits for src */
-	u_int8_t prefd;			/* prefix length in bits for dst */
-	u_int16_t ul_proto;		/* upper layer Protocol */
-	u_int32_t priority;		/* priority for the policy */
- 	u_int64_t created;		/* Used for generated SPD entries deletion */
-#ifdef HAVE_SECCTX
-	struct security_ctx sec_ctx;    /* Security Context */
-#endif
-};
-
-/* Security Policy Data Base */
-struct secpolicy {
-	TAILQ_ENTRY(secpolicy) chain;
-
-	struct policyindex spidx;	/* selector */
-	u_int32_t id;			/* It's unique number on the system. */
-
-	u_int policy;		/* DISCARD, NONE or IPSEC, see keyv2.h */
-	struct ipsecrequest *req;
-				/* pointer to the ipsec request tree, */
-				/* if policy == IPSEC else this value == NULL.*/
-};
-
-/* Security Assocciation Index */
-/* NOTE: Ensure to be same address family */
-struct secasindex {
-	struct sockaddr_storage src;	/* srouce address for SA */
-	struct sockaddr_storage dst;	/* destination address for SA */
-	u_int16_t proto;		/* IPPROTO_ESP or IPPROTO_AH */
-	u_int8_t mode;			/* mode of protocol, see ipsec.h */
-	u_int32_t reqid;		/* reqid id who owned this SA */
-					/* see IPSEC_MANUAL_REQID_MAX. */
-};
-
-/* Request for IPsec */
-struct ipsecrequest {
-	struct ipsecrequest *next;
-				/* pointer to next structure */
-				/* If NULL, it means the end of chain. */
-
-	struct secasindex saidx;/* hint for search proper SA */
-				/* if __ss_len == 0 then no address specified.*/
-	u_int level;		/* IPsec level defined below. */
-
-	struct secpolicy *sp;	/* back pointer to SP */
-};
-
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-#define KEY_SETSECSPIDX(_dir, s, d, ps, pd, ulp, _priority, _created, idx)              \
-do {                                                                         \
-	memset((idx), 0, sizeof(struct policyindex));                        \
-	(idx)->dir = (_dir);                                                 \
-	(idx)->prefs = (ps);                                                 \
-	(idx)->prefd = (pd);                                                 \
-	(idx)->ul_proto = (ulp);                                             \
-	(idx)->priority = (_priority);                                        \
-	(idx)->created = (_created);                                        \
-	memcpy(&(idx)->src, (s), sysdep_sa_len((struct sockaddr *)(s)));          \
-	memcpy(&(idx)->dst, (d), sysdep_sa_len((struct sockaddr *)(d)));          \
-} while (0)
-#else
-#define KEY_SETSECSPIDX(_dir, s, d, ps, pd, ulp, _created, idx)              \
-do {                                                                         \
-	memset((idx), 0, sizeof(struct policyindex));                        \
-	(idx)->dir = (_dir);                                                 \
-	(idx)->prefs = (ps);                                                 \
-	(idx)->prefd = (pd);                                                 \
-	(idx)->ul_proto = (ulp);                                             \
-	(idx)->created = (_created);                                        \
-	memcpy(&(idx)->src, (s), sysdep_sa_len((struct sockaddr *)(s)));          \
-	memcpy(&(idx)->dst, (d), sysdep_sa_len((struct sockaddr *)(d)));          \
-} while (0)
-#endif
-
-struct ph2handle;
-struct policyindex;
-extern struct secpolicy *getsp __P((struct policyindex *));
-extern struct secpolicy *getsp_r __P((struct policyindex *));
-struct secpolicy *getspbyspid __P((u_int32_t));
-extern int cmpspidxstrict __P((struct policyindex *, struct policyindex *));
-extern int cmpspidxwild __P((struct policyindex *, struct policyindex *));
-extern struct secpolicy *newsp __P((void));
-extern void delsp __P((struct secpolicy *));
-extern void delsp_bothdir __P((struct policyindex *));
-extern void inssp __P((struct secpolicy *));
-extern void remsp __P((struct secpolicy *));
-extern void flushsp __P((void));
-extern void initsp __P((void));
-extern struct ipsecrequest *newipsecreq __P((void));
-
-extern const char *spidx2str __P((const struct policyindex *));
-#ifdef HAVE_SECCTX
-#include <selinux/selinux.h>
-extern int get_security_context __P((vchar_t *, struct policyindex *));
-extern void init_avc __P((void));
-extern int within_range __P((security_context_t, security_context_t));
-extern void set_secctx_in_proposal __P((struct ph2handle *, struct policyindex));
-#endif
-
-#endif /* _POLICY_H */
diff --git a/src/racoon/privsep.c b/src/racoon/privsep.c
deleted file mode 100644
index 9e60b89..0000000
--- a/src/racoon/privsep.c
+++ /dev/null
@@ -1,1339 +0,0 @@
-/*	$NetBSD: privsep.c,v 1.6 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: privsep.c,v 1.15 2005/08/08 11:23:44 vanhu Exp */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus
- * 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.
- */
-
-#include "config.h"
-
-#include <unistd.h>
-#include <string.h>
-#ifdef __NetBSD__
-#include <stdlib.h>	/* for setproctitle */
-#endif
-#include <errno.h>
-#include <signal.h>
-#include <pwd.h>
-
-#include <sys/socket.h>
-#include <sys/param.h>
-
-#include "gcmalloc.h"
-#include "vmbuf.h"
-#include "misc.h"
-#include "plog.h"
-#include "var.h"
-#include "libpfkey.h"
-
-#include "crypto_openssl.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#ifdef ENABLE_HYBRID
-#include "resolv.h"
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h"
-#endif
-#include "localconf.h"
-#include "remoteconf.h"
-#include "admin.h"
-#include "sockmisc.h"
-#include "privsep.h"
-
-static int privsep_sock[2] = { -1, -1 };
-
-static int privsep_recv(int, struct privsep_com_msg **, size_t *);
-static int privsep_send(int, struct privsep_com_msg *, size_t);
-static int safety_check(struct privsep_com_msg *, int i);
-static int port_check(int);
-static int unsafe_env(char *const *);
-static int unknown_name(int);
-static int unsafe_path(char *, int);
-
-static int
-privsep_send(sock, buf, len)
-	int sock;
-	struct privsep_com_msg *buf;
-	size_t len;
-{
-	if (buf == NULL)
-		return 0;
-
-	if (sendto(sock, (char *)buf, len, 0, NULL, 0) == -1) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "privsep_send failed: %s\n", 
-		    strerror(errno));
-		return -1;
-	}
-
-	racoon_free((char *)buf);
-
-	return 0;
-}
-
-
-static int
-privsep_recv(sock, bufp, lenp)
-	int sock;
-	struct privsep_com_msg **bufp;
-	size_t *lenp;
-{
-	struct admin_com com;
-	struct admin_com *combuf;
-	size_t len;
-
-	*bufp = NULL;
-	*lenp = 0;
-
-	/* Get the header */
-	while ((len = recvfrom(sock, (char *)&com, 
-	    sizeof(com), MSG_PEEK, NULL, NULL)) == -1) {
-		if (errno == EINTR)
-			continue;
-
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "privsep_recv failed: %s\n",
-		    strerror(errno));
-		return -1;
-	}
-	
-	/* Check for short packets */
-	if (len < sizeof(com)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "corrupted privsep message (short header)\n");
-		return -1;
-	}
-
-	/* Allocate buffer for the whole message */
-	if ((combuf = (struct admin_com *)racoon_malloc(com.ac_len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "failed to allocate memory: %s\n", strerror(errno));
-		return -1;
-	}
-
-	/* Get the whole buffer */
-	while ((len = recvfrom(sock, (char *)combuf, 
-	    com.ac_len, 0, NULL, NULL)) == -1) {
-		if (errno == EINTR)
-			continue;
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "failed to recv privsep command: %s\n", 
-		    strerror(errno));
-		return -1;
-	}
-
-	/* We expect len to match */
-	if (len != com.ac_len) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "corrupted privsep message (short packet)\n");
-		return -1;
-	}
-
-	*bufp = (struct privsep_com_msg *)combuf;
-	*lenp = len;
-
-	return 0;
-}
-
-int
-privsep_init(void)
-{
-	int i;
-	pid_t child_pid;
-
-	/* If running as root, we don't use the privsep code path */
-	if (lcconf->uid == 0)
-		return 0;
-
-	/* 
-	 * When running privsep, certificate and script paths 
-	 * are mandatory, as they enable us to check path safety
-	 * in the privilegied instance
-	 */
-	if ((lcconf->pathinfo[LC_PATHTYPE_CERT] == NULL) ||
-	    (lcconf->pathinfo[LC_PATHTYPE_SCRIPT] == NULL)) {
-		plog(LLV_ERROR, LOCATION, NULL, "privilege separation "
-		   "require path cert and path script in the config file\n");
-		return -1;
-	}
-
-	if (socketpair(PF_LOCAL, SOCK_DGRAM, 0, privsep_sock) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate privsep_sock: %s\n", strerror(errno));
-		return -1;
-	}
-
-	switch (child_pid = fork()) {
-	case -1:
-		plog(LLV_ERROR, LOCATION, NULL, "Cannot fork privsep: %s\n", 
-		    strerror(errno));
-		return -1;
-		break;
-
-	case 0: /* Child: drop privileges */
-		if (lcconf->chroot != NULL) {
-			if (chdir(lcconf->chroot) != 0) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "Cannot chdir(%s): %s\n", lcconf->chroot, 
-				    strerror(errno));
-				return -1;
-			}
-			if (chroot(lcconf->chroot) != 0) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "Cannot chroot(%s): %s\n", lcconf->chroot, 
-				    strerror(errno));
-				return -1;
-			}
-		}
-
-		if (setgid(lcconf->gid) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot setgid(%d): %s\n", lcconf->gid,
-			    strerror(errno));
-			return -1;
-		}
-
-		if (setegid(lcconf->gid) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot setegid(%d): %s\n", lcconf->gid,
-			    strerror(errno));
-			return -1;
-		}
-
-		if (setuid(lcconf->uid) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot setuid(%d): %s\n", lcconf->uid,
-			    strerror(errno));
-			return -1;
-		}
-
-		if (seteuid(lcconf->uid) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			    "Cannot seteuid(%d): %s\n", lcconf->uid,
-			    strerror(errno));
-			return -1;
-		}
-
-		return 0;
-		break;
-
-	default: /* Parent: privilegied process */
-		break;
-	}
-
-	/* 
-	 * Close everything except the socketpair, 
-	 * and stdout if running in the forground.
-	 */
-	for (i = sysconf(_SC_OPEN_MAX); i > 0; i--) {
-		if (i == privsep_sock[0])
-			continue;
-		if (i == privsep_sock[1])
-			continue;
-		if ((f_foreground) && (i == 1))
-			continue;
-		(void)close(i);
-	}
-
-	/* Above trickery closed the log file, reopen it */
-	ploginit();
-
-	plog(LLV_INFO, LOCATION, NULL, 
-	    "racoon privilegied process running with PID %d\n", getpid());
-
-#ifdef __NetBSD__
-	setproctitle("[priv]");
-#endif
-	
-	/* 
-	 * Don't catch any signal 
-	 * This duplicate session:signals[], which is static...
-	 */
-	signal(SIGHUP, SIG_DFL);
-	signal(SIGINT, SIG_DFL);
-	signal(SIGTERM, SIG_DFL);
-	signal(SIGUSR1, SIG_DFL);
-	signal(SIGUSR2, SIG_DFL);
-	signal(SIGCHLD, SIG_DFL);
-
-	while (1) {
-		size_t len;
-		struct privsep_com_msg *combuf;
-		struct privsep_com_msg *reply;
-		char *data;
-		size_t *buflen;
-		size_t totallen;
-		char *bufs[PRIVSEP_NBUF_MAX];
-		int i;
-
-		if (privsep_recv(privsep_sock[0], &combuf, &len) != 0)
-			goto out;
-
-		/* Safety checks and gather the data */
-		if (len < sizeof(*combuf)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "corrupted privsep message (short buflen)\n");
-			goto out;
-		}
-
-		data = (char *)(combuf + 1);
-		totallen = sizeof(*combuf);
-		for (i = 0; i < PRIVSEP_NBUF_MAX; i++) {
-			bufs[i] = (char *)data;
-			data += combuf->bufs.buflen[i];
-			totallen += combuf->bufs.buflen[i];
-		}
-
-		if (totallen > len) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "corrupted privsep message (bufs too big)\n");
-			goto out;
-		}
-	
-		/* Prepare the reply buffer */
-		if ((reply = racoon_malloc(sizeof(*reply))) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Cannot allocate reply buffer: %s\n", 
-			    strerror(errno));
-			goto out;
-		}
-		bzero(reply, sizeof(*reply));
-		reply->hdr.ac_cmd = combuf->hdr.ac_cmd;
-		reply->hdr.ac_len = sizeof(*reply);
-
-		switch(combuf->hdr.ac_cmd) {
-		/* 
-		 * XXX Improvement: instead of returning the key, 
-		 * stuff eay_get_pkcs1privkey and eay_get_x509sign
-		 * together and sign the hash in the privilegied 
-		 * instance? 
-		 * pro: the key remains inaccessible to unpriv
-		 * con: a compromised unpriv racoon can still sign anything
-		 */
-		case PRIVSEP_EAY_GET_PKCS1PRIVKEY: {
-			vchar_t *privkey;
-
-			/* Make sure the string is NULL terminated */
-			if (safety_check(combuf, 0) != 0)
-				break;
-			bufs[0][combuf->bufs.buflen[0] - 1] = '\0';
-
-			if (unsafe_path(bufs[0], LC_PATHTYPE_CERT) != 0) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "privsep_eay_get_pkcs1privkey: "
-				    "unsafe cert \"%s\"\n", bufs[0]);
-			}
-
-			plog(LLV_DEBUG, LOCATION, NULL, 
-			    "eay_get_pkcs1privkey(\"%s\")\n", bufs[0]);
-
-			if ((privkey = eay_get_pkcs1privkey(bufs[0])) == NULL){
-				reply->hdr.ac_errno = errno;
-				break;
-			}
-
-			reply->bufs.buflen[0] = privkey->l;
-			reply->hdr.ac_len = sizeof(*reply) + privkey->l;
-			reply = racoon_realloc(reply, reply->hdr.ac_len);
-			if (reply == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				    "Cannot allocate reply buffer: %s\n", 
-				    strerror(errno));
-				goto out;
-			}
-
-			memcpy(reply + 1, privkey->v, privkey->l);
-			vfree(privkey);
-			break;
-		}
-		
-		case PRIVSEP_SCRIPT_EXEC: {
-			char *script;
-			int name;
-			char **envp = NULL;
-			int envc = 0;
-			int count = 0;
-			int i;
-
-			/*
-			 * First count the bufs, and make sure strings
-			 * are NULL terminated. 
-			 *
-			 * We expect: script, name, envp[], void
-			 */ 
-			if (safety_check(combuf, 0) != 0)
-				break;
-			bufs[0][combuf->bufs.buflen[0] - 1] = '\0';
-			count++;	/* script */
-
-			count++;	/* name */
-
-			for (; count < PRIVSEP_NBUF_MAX; count++) {
-				if (combuf->bufs.buflen[count] == 0)
-					break;
-				bufs[count]
-				    [combuf->bufs.buflen[count] - 1] = '\0';
-				envc++;
-			}
-
-			/* count a void buf and perform safety check */
-			count++;
-			if (count >= PRIVSEP_NBUF_MAX) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "privsep_script_exec: too many args\n");
-				goto out;
-			}
-
-
-			/* 
-			 * Allocate the arrays for envp 
-			 */
-			envp = racoon_malloc((envc + 1) * sizeof(char *));
-			if (envp == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "cannot allocate memory: %s\n",
-				    strerror(errno));
-				goto out;
-			}
-			bzero(envp, (envc + 1) * sizeof(char *));
-
-	
-			/*
-			 * Populate script, name and envp 
-			 */
-			count = 0;
-			script = bufs[count++];
-
-			if (combuf->bufs.buflen[count] != sizeof(name)) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "privsep_script_exec: corrupted message\n");
-				goto out;
-			}
-			memcpy((char *)&name, bufs[count++], sizeof(name));
-
-			for (i = 0; combuf->bufs.buflen[count]; count++)
-				envp[i++] = bufs[count];
-
-			count++;		/* void */
-
-			plog(LLV_DEBUG, LOCATION, NULL, 
-			    "script_exec(\"%s\", %d, %p)\n", 
-			    script, name, envp);
-
-			/* 
-			 * Check env for dangerous variables
-			 * Check script path and name
-			 * Perform fork and execve
-			 */
-			if ((unsafe_env(envp) == 0) &&
-			    (unknown_name(name) == 0) &&
-			    (unsafe_path(script, LC_PATHTYPE_SCRIPT) == 0))
-				(void)script_exec(script, name, envp);
-			else
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "privsep_script_exec: "
-				    "unsafe script \"%s\"\n", script);
-
-			racoon_free(envp);
-			break;
-		}
-
-		case PRIVSEP_GETPSK: {
-			vchar_t *psk;
-			int keylen;
-
-			/* Make sure the string is NULL terminated */
-			if (safety_check(combuf, 0) != 0)
-				break;
-			bufs[0][combuf->bufs.buflen[0] - 1] = '\0';
-
-			if (combuf->bufs.buflen[1] != sizeof(keylen)) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "privsep_getpsk: corrupted message\n");
-				goto out;
-			}
-			memcpy(&keylen, bufs[1], sizeof(keylen));
-
-			plog(LLV_DEBUG, LOCATION, NULL, 
-			    "getpsk(\"%s\", %d)\n", bufs[0], keylen);
-
-			if ((psk = getpsk(bufs[0], keylen)) == NULL) {
-				reply->hdr.ac_errno = errno;
-				break;
-			}
-
-			reply->bufs.buflen[0] = psk->l;
-			reply->hdr.ac_len = sizeof(*reply) + psk->l;
-			reply = racoon_realloc(reply, reply->hdr.ac_len); 
-			if (reply == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				    "Cannot allocate reply buffer: %s\n", 
-				    strerror(errno));
-				goto out;
-			}
-
-			memcpy(reply + 1, psk->v, psk->l);
-			vfree(psk);
-			break;
-		}
-
-#ifdef ENABLE_HYBRID
-		case PRIVSEP_ACCOUNTING_SYSTEM: {
-			int pool_size;
-			int port;
-			int inout;
-			struct sockaddr *raddr;
-
-			if (safety_check(combuf, 0) != 0)
-				break;
-			if (safety_check(combuf, 1) != 0)
-				break;
-			if (safety_check(combuf, 2) != 0)
-				break;
-			if (safety_check(combuf, 3) != 0)
-				break;
-
-			memcpy(&port, bufs[0], sizeof(port));
-			raddr = (struct sockaddr *)bufs[1];
-
-			bufs[2][combuf->bufs.buflen[2] - 1] = '\0';
-			memcpy(&inout, bufs[3], sizeof(port));
-
-			if (port_check(port) != 0)
-				break;
-
-			plog(LLV_DEBUG, LOCATION, NULL, 
-			    "accounting_system(%d, %s, %s)\n", 
-			    port, saddr2str(raddr), bufs[2]); 
-
-			errno = 0;
-			if (isakmp_cfg_accounting_system(port, 
-			    raddr, bufs[2], inout) != 0) {
-				if (errno == 0)
-					reply->hdr.ac_errno = EINVAL;
-				else
-					reply->hdr.ac_errno = errno;
-			}
-			break;
-		}
-		case PRIVSEP_XAUTH_LOGIN_SYSTEM: {
-			if (safety_check(combuf, 0) != 0)
-				break;
-			bufs[0][combuf->bufs.buflen[0] - 1] = '\0';
-
-			if (safety_check(combuf, 1) != 0)
-				break;
-			bufs[1][combuf->bufs.buflen[1] - 1] = '\0';
-
-			plog(LLV_DEBUG, LOCATION, NULL, 
-			    "xauth_login_system(\"%s\", <password>)\n", 
-			    bufs[0]);
-
-			errno = 0;
-			if (xauth_login_system(bufs[0], bufs[1]) != 0) {
-				if (errno == 0)
-					reply->hdr.ac_errno = EINVAL;
-				else
-					reply->hdr.ac_errno = errno;
-			}
-			break;
-		}
-#ifdef HAVE_LIBPAM
-		case PRIVSEP_ACCOUNTING_PAM: {
-			int port;
-			int inout;
-			int pool_size;
-
-			if (safety_check(combuf, 0) != 0)
-				break;
-			if (safety_check(combuf, 1) != 0)
-				break;
-			if (safety_check(combuf, 2) != 0)
-				break;
-
-			memcpy(&port, bufs[0], sizeof(port));
-			memcpy(&inout, bufs[1], sizeof(inout));
-			memcpy(&pool_size, bufs[2], sizeof(pool_size));
-
-			if (pool_size != isakmp_cfg_config.pool_size)
-				if (isakmp_cfg_resize_pool(pool_size) != 0)
-					break;
-
-			if (port_check(port) != 0)
-				break;
-
-			plog(LLV_DEBUG, LOCATION, NULL, 
-			    "isakmp_cfg_accounting_pam(%d, %d)\n", 
-			    port, inout); 
-
-			errno = 0;
-			if (isakmp_cfg_accounting_pam(port, inout) != 0) {
-				if (errno == 0)
-					reply->hdr.ac_errno = EINVAL;
-				else
-					reply->hdr.ac_errno = errno;
-			}
-			break;
-		}
-
-		case PRIVSEP_XAUTH_LOGIN_PAM: {
-			int port;
-			int pool_size;
-			struct sockaddr *raddr;
-
-			if (safety_check(combuf, 0) != 0)
-				break;
-			if (safety_check(combuf, 1) != 0)
-				break;
-			if (safety_check(combuf, 2) != 0)
-				break;
-			if (safety_check(combuf, 3) != 0)
-				break;
-			if (safety_check(combuf, 4) != 0)
-				break;
-
-			memcpy(&port, bufs[0], sizeof(port));
-			memcpy(&pool_size, bufs[1], sizeof(pool_size));
-			raddr = (struct sockaddr *)bufs[2];
-			
-			bufs[3][combuf->bufs.buflen[3] - 1] = '\0';
-			bufs[4][combuf->bufs.buflen[4] - 1] = '\0';
-
-			if (pool_size != isakmp_cfg_config.pool_size)
-				if (isakmp_cfg_resize_pool(pool_size) != 0)
-					break;
-
-			if (port_check(port) != 0)
-				break;
-
-			plog(LLV_DEBUG, LOCATION, NULL, 
-			    "xauth_login_pam(%d, %s, \"%s\", <password>)\n", 
-			    port, saddr2str(raddr), bufs[3]); 
-
-			errno = 0;
-			if (xauth_login_pam(port, 
-			    raddr, bufs[3], bufs[4]) != 0) {
-				if (errno == 0)
-					reply->hdr.ac_errno = EINVAL;
-				else
-					reply->hdr.ac_errno = errno;
-			}
-			break;
-		}
-
-		case PRIVSEP_CLEANUP_PAM: {
-			int port;
-			int pool_size;
-
-			if (safety_check(combuf, 0) != 0)
-				break;
-			if (safety_check(combuf, 1) != 0)
-				break;
-
-			memcpy(&port, bufs[0], sizeof(port));
-			memcpy(&pool_size, bufs[1], sizeof(pool_size));
-
-			if (pool_size != isakmp_cfg_config.pool_size)
-				if (isakmp_cfg_resize_pool(pool_size) != 0)
-					break;
-
-			if (port_check(port) != 0)
-				break;
-
-			plog(LLV_DEBUG, LOCATION, NULL, 
-			    "cleanup_pam(%d)\n", port);
-
-			cleanup_pam(port);
-			reply->hdr.ac_errno = 0;
-
-			break;
-		}
-#endif /* HAVE_LIBPAM */
-#endif /* ENABLE_HYBRID */
-
-		default:
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "unexpected privsep command %d\n", 
-			    combuf->hdr.ac_cmd);
-			goto out;
-			break;
-		}
-
-		/* This frees reply */
-		if (privsep_send(privsep_sock[0], 
-		    reply, reply->hdr.ac_len) != 0)
-			goto out;
-
-		racoon_free(combuf);
-	}
-
-out:
-	plog(LLV_INFO, LOCATION, NULL, "privsep exit\n");
-	_exit(0);
-}
-
-
-vchar_t *
-privsep_eay_get_pkcs1privkey(path) 
-	char *path;
-{
-	vchar_t *privkey;
-	struct privsep_com_msg *msg;
-	size_t len;
-
-	if (geteuid() == 0)
-		return eay_get_pkcs1privkey(path);
-
-	len = sizeof(*msg) + strlen(path) + 1;
-	if ((msg = racoon_malloc(len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		return NULL;
-	}
-	bzero(msg, len);
-	msg->hdr.ac_cmd = PRIVSEP_EAY_GET_PKCS1PRIVKEY;
-	msg->hdr.ac_len = len;
-	msg->bufs.buflen[0] = len - sizeof(*msg);
-	memcpy(msg + 1, path, msg->bufs.buflen[0]);
-
-	if (privsep_send(privsep_sock[1], msg, len) != 0)
-		return NULL;
-
-	if (privsep_recv(privsep_sock[1], &msg, &len) != 0)
-		return NULL;
-
-	if (msg->hdr.ac_errno != 0) {
-		errno = msg->hdr.ac_errno;
-		goto out;
-	}
-
-	if ((privkey = vmalloc(len - sizeof(*msg))) == NULL)
-		goto out;
-
-	memcpy(privkey->v, msg + 1, privkey->l);
-	racoon_free(msg);
-	return privkey;
-
-out:
-	racoon_free(msg);
-	return NULL;
-}
-
-/*
- * No prigilege separation trick here, we just open PFKEY before
- * dropping root privs and we remember it later.
- */
-static int  pfkey_socket = -1;
-int
-privsep_pfkey_open(void)
-{
-	int ps;
-
-	if (pfkey_socket != -1)
-		return pfkey_socket;
-
-	ps = pfkey_open();
-	if (ps != -1)
-		pfkey_socket = ps;
-
-	return ps;
-}
-
-/*
- * Consequence of the above trickery: don't 
- * really close PFKEY as we never re-open it.
- */
-void
-privsep_pfkey_close(ps)
-	int ps;
-{
-	return;
-}
-
-int
-privsep_script_exec(script, name, envp)
-	char *script;
-	int name;
-	char *const envp[];
-{
-	int count = 0;
-	char *const *c;
-	char *data;
-	size_t len;
-	struct privsep_com_msg *msg;
-
-	if (geteuid() == 0)
-		return script_exec(script, name, envp);
-
-	if ((msg = racoon_malloc(sizeof(*msg))) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		return -1;
-	}
-
-	bzero(msg, sizeof(*msg));
-	msg->hdr.ac_cmd = PRIVSEP_SCRIPT_EXEC;
-	msg->hdr.ac_len = sizeof(*msg);
-
-	/*
-	 * We send: 
-	 * script, name, envp[0], ... envp[N], void
-	 */
-
-	/*
-	 * Safety check on the counts: PRIVSEP_NBUF_MAX max
-	 */
-	count = 0;
-	count++;					/* script */
-	count++;					/* name */
-	for (c = envp; *c; c++)				/* envp */
-		count++;
-	count++;					/* void */
-
-	if (count > PRIVSEP_NBUF_MAX) {
-		plog(LLV_ERROR, LOCATION, NULL, "Unexpected error: "
-		    "privsep_script_exec count > PRIVSEP_NBUF_MAX\n");
-		racoon_free(msg);
-		return -1;
-	}
-
-
-	/*
-	 * Compute the length
-	 */
-	count = 0;
-	msg->bufs.buflen[count] = strlen(script) + 1;	/* script */
-	msg->hdr.ac_len += msg->bufs.buflen[count++];
-
-	msg->bufs.buflen[count] = sizeof(name);		/* name */
-	msg->hdr.ac_len += msg->bufs.buflen[count++];
-
-	for (c = envp; *c; c++) {			/* envp */
-		msg->bufs.buflen[count] = strlen(*c) + 1;
-		msg->hdr.ac_len += msg->bufs.buflen[count++];
-	}
-
-	msg->bufs.buflen[count] = 0; 			/* void */
-	msg->hdr.ac_len += msg->bufs.buflen[count++];
-
-	if ((msg = racoon_realloc(msg, msg->hdr.ac_len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		return -1;
-	}
-	
-	/*
-	 * Now copy the data
-	 */
-	data = (char *)(msg + 1);
-	count = 0;
-
-	memcpy(data, (char *)script, msg->bufs.buflen[count]);	/* script */
-	data += msg->bufs.buflen[count++];
-
-	memcpy(data, (char *)&name, msg->bufs.buflen[count]);	/* name */
-	data += msg->bufs.buflen[count++];
-
-	for (c = envp; *c; c++) {				/* envp */
-		memcpy(data, *c, msg->bufs.buflen[count]); 
-		data += msg->bufs.buflen[count++];
-	}
-
-	count++;						/* void */
-
-	/*
-	 * And send it!
-	 */
-	if (privsep_send(privsep_sock[1], msg, msg->hdr.ac_len) != 0)
-		return -1;
-
-	if (privsep_recv(privsep_sock[1], &msg, &len) != 0)
-		return -1;
-
-	if (msg->hdr.ac_errno != 0) {
-		errno = msg->hdr.ac_errno;
-		racoon_free(msg);
-		return -1;
-	}
-
-	racoon_free(msg);
-	return 0;
-}
-
-vchar_t *
-privsep_getpsk(str, keylen)
-	const char *str;
-	int keylen;
-{
-	vchar_t *psk;
-	struct privsep_com_msg *msg;
-	size_t len;
-	int *keylenp;
-	char *data;
-
-	if (geteuid() == 0)
-		return getpsk(str, keylen);
-
-	len = sizeof(*msg) + strlen(str) + 1 + sizeof(keylen);
-	if ((msg = racoon_malloc(len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		return NULL;
-	}
-	bzero(msg, len);
-	msg->hdr.ac_cmd = PRIVSEP_GETPSK;
-	msg->hdr.ac_len = len;
-
-	data = (char *)(msg + 1);
-	msg->bufs.buflen[0] = strlen(str) + 1;
-	memcpy(data, str, msg->bufs.buflen[0]);
-
-	data += msg->bufs.buflen[0];
-	msg->bufs.buflen[1] = sizeof(keylen);
-	memcpy(data, &keylen, sizeof(keylen));
-
-	if (privsep_send(privsep_sock[1], msg, len) != 0)
-		return NULL;
-
-	if (privsep_recv(privsep_sock[1], &msg, &len) != 0)
-		return NULL;
-
-	if (msg->hdr.ac_errno != 0) {
-		errno = msg->hdr.ac_errno;
-		goto out;
-	}
-
-	if ((psk = vmalloc(len - sizeof(*msg))) == NULL)
-		goto out;
-
-	memcpy(psk->v, msg + 1, psk->l);
-	racoon_free(msg);
-	return psk;
-
-out:
-	racoon_free(msg);
-	return NULL;
-}
-
-#ifdef ENABLE_HYBRID
-int
-privsep_xauth_login_system(usr, pwd)
-	char *usr;
-	char *pwd;
-{
-	struct privsep_com_msg *msg;
-	size_t len;
-	char *data;
-
-	if (geteuid() == 0)
-		return xauth_login_system(usr, pwd);
-
-	len = sizeof(*msg) + strlen(usr) + 1 + strlen(pwd) + 1;
-	if ((msg = racoon_malloc(len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		return -1;
-	}
-	bzero(msg, len);
-	msg->hdr.ac_cmd = PRIVSEP_XAUTH_LOGIN_SYSTEM;
-	msg->hdr.ac_len = len;
-
-	data = (char *)(msg + 1);
-	msg->bufs.buflen[0] = strlen(usr) + 1;
-	memcpy(data, usr, msg->bufs.buflen[0]);
-	data += msg->bufs.buflen[0];
-
-	msg->bufs.buflen[1] = strlen(pwd) + 1;
-	memcpy(data, pwd, msg->bufs.buflen[1]);
-	
-	if (privsep_send(privsep_sock[1], msg, len) != 0)
-		return -1;
-
-	if (privsep_recv(privsep_sock[1], &msg, &len) != 0)
-		return -1;
-
-	if (msg->hdr.ac_errno != 0) {
-		racoon_free(msg);
-		return -1;
-	}
-
-	racoon_free(msg);
-	return 0;
-}
-
-int 
-privsep_accounting_system(port, raddr, usr, inout)
-	int port;
-	struct sockaddr *raddr;
-	char *usr;
-	int inout;
-{
-	struct privsep_com_msg *msg;
-	size_t len;
-	char *data;
-	int result;
-
-	if (geteuid() == 0)
-		return isakmp_cfg_accounting_system(port, raddr,
-						    usr, inout);
-
-	len = sizeof(*msg) 
-	    + sizeof(port)
-	    + sysdep_sa_len(raddr) 
-	    + strlen(usr) + 1
-	    + sizeof(inout);
-
-	if ((msg = racoon_malloc(len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		return -1;
-	}
-	bzero(msg, len);
-	msg->hdr.ac_cmd = PRIVSEP_ACCOUNTING_SYSTEM;
-	msg->hdr.ac_len = len;
-	msg->bufs.buflen[0] = sizeof(port);
-	msg->bufs.buflen[1] = sysdep_sa_len(raddr);
-	msg->bufs.buflen[2] = strlen(usr) + 1;
-	msg->bufs.buflen[3] = sizeof(inout);
-
-	data = (char *)(msg + 1);
-	memcpy(data, &port, msg->bufs.buflen[0]);
-
-	data += msg->bufs.buflen[0];
-	memcpy(data, raddr, msg->bufs.buflen[1]);
-
-	data += msg->bufs.buflen[1];
-	memcpy(data, usr, msg->bufs.buflen[2]);
-
-	data += msg->bufs.buflen[2];
-	memcpy(data, &inout, msg->bufs.buflen[3]);
-
-	if (privsep_send(privsep_sock[1], msg, len) != 0)
-		return -1;
-
-	if (privsep_recv(privsep_sock[1], &msg, &len) != 0)
-		return -1;
-
-	if (msg->hdr.ac_errno != 0) {
-		errno = msg->hdr.ac_errno;
-		goto out;
-	}
-
-	racoon_free(msg);
-	return 0;
-
-out:
-	racoon_free(msg);
-	return -1;
-}
-
-static int
-port_check(port)
-	int port;
-{
-	if ((port < 0) || (port >= isakmp_cfg_config.pool_size)) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "privsep: port %d outside of allowed range [0,%zu]\n",
-		    port, isakmp_cfg_config.pool_size - 1);
-		return -1;
-	}
-
-	return 0;
-}
-#endif
-
-static int 
-safety_check(msg, index)
-	struct privsep_com_msg *msg;
-	int index;
-{
-	if (index >= PRIVSEP_NBUF_MAX) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "privsep: Corrupted message, too many buffers\n");
-		return -1;
-	}
-		
-	if (msg->bufs.buflen[index] == 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "privsep: Corrupted message, unexpected void buffer\n");
-		return -1;
-	}
-
-	return 0;
-}
-
-/*
- * Filter unsafe environement variables
- */
-static int
-unsafe_env(envp)
-	char *const *envp;
-{
-	char *const *e;
-	char *const *be;
-	char *const bad_env[] = { "PATH=", "LD_LIBRARY_PATH=", "IFS=", NULL };
-
-	for (e = envp; *e; e++) {
-		for (be = bad_env; *be; be++) {
-			if (strncmp(*e, *be, strlen(*be)) == 0) {
-				goto found;
-			}
-		}
-	}
-
-	return 0;
-found:
-	plog(LLV_ERROR, LOCATION, NULL, 
-	    "privsep_script_exec: unsafe environement variable\n");
-	return -1;
-}
-
-/*
- * Check path safety
- */
-static int 
-unsafe_path(script, pathtype)
-	char *script;
-	int pathtype;
-{
-	char *path;
-	char rpath[MAXPATHLEN + 1];
-	size_t len;
-
-	if (script == NULL) 
-		return -1;
-
-	path = lcconf->pathinfo[pathtype];
-
-	/* No path was given for scripts: skip the check */
-	if (path == NULL)
-		return 0;
-
-	if (realpath(script, rpath) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "script path \"%s\" is invalid\n", script);
-		return -1;
-	}
-
-	len = strlen(path);
-	if (strncmp(path, rpath, len) != 0)
-		return -1;
-
-	return 0;
-}
-
-static int 
-unknown_name(name)
-	int name;
-{
-	if ((name < 0) || (name > SCRIPT_MAX)) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "privsep_script_exec: unsafe name index\n");
-		return -1;
-	}
-
-	return 0;
-}
-
-#ifdef HAVE_LIBPAM
-int 
-privsep_accounting_pam(port, inout)
-	int port;
-	int inout;
-{
-	struct privsep_com_msg *msg;
-	size_t len;
-	int *port_data;
-	int *inout_data;
-	int *pool_size_data;
-	int result;
-
-	if (geteuid() == 0)
-		return isakmp_cfg_accounting_pam(port, inout);
-
-	len = sizeof(*msg) 
-	    + sizeof(port) 
-	    + sizeof(inout)
-	    + sizeof(isakmp_cfg_config.pool_size);
-
-	if ((msg = racoon_malloc(len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		return -1;
-	}
-	bzero(msg, len);
-	msg->hdr.ac_cmd = PRIVSEP_ACCOUNTING_PAM;
-	msg->hdr.ac_len = len;
-	msg->bufs.buflen[0] = sizeof(port);
-	msg->bufs.buflen[1] = sizeof(inout);
-	msg->bufs.buflen[2] = sizeof(isakmp_cfg_config.pool_size);
-
-	port_data = (int *)(msg + 1);
-	inout_data = (int *)(port_data + 1);
-	pool_size_data = (int *)(inout_data + 1);
-
-	*port_data = port;
-	*inout_data = inout;
-	*pool_size_data = isakmp_cfg_config.pool_size;
-
-	if (privsep_send(privsep_sock[1], msg, len) != 0)
-		return -1;
-
-	if (privsep_recv(privsep_sock[1], &msg, &len) != 0)
-		return -1;
-
-	if (msg->hdr.ac_errno != 0) {
-		errno = msg->hdr.ac_errno;
-		goto out;
-	}
-
-	racoon_free(msg);
-	return 0;
-
-out:
-	racoon_free(msg);
-	return -1;
-}
-
-int 
-privsep_xauth_login_pam(port, raddr, usr, pwd)
-	int port;
-	struct sockaddr *raddr;
-	char *usr;
-	char *pwd;
-{
-	struct privsep_com_msg *msg;
-	size_t len;
-	char *data;
-	int result;
-
-	if (geteuid() == 0)
-		return xauth_login_pam(port, raddr, usr, pwd);
-
-	len = sizeof(*msg) 
-	    + sizeof(port)
-	    + sizeof(isakmp_cfg_config.pool_size)
-	    + sysdep_sa_len(raddr) 
-	    + strlen(usr) + 1
-	    + strlen(pwd) + 1;
-
-	if ((msg = racoon_malloc(len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		return -1;
-	}
-	bzero(msg, len);
-	msg->hdr.ac_cmd = PRIVSEP_XAUTH_LOGIN_PAM;
-	msg->hdr.ac_len = len;
-	msg->bufs.buflen[0] = sizeof(port);
-	msg->bufs.buflen[1] = sizeof(isakmp_cfg_config.pool_size);
-	msg->bufs.buflen[2] = sysdep_sa_len(raddr);
-	msg->bufs.buflen[3] = strlen(usr) + 1;
-	msg->bufs.buflen[4] = strlen(pwd) + 1;
-
-	data = (char *)(msg + 1);
-	memcpy(data, &port, msg->bufs.buflen[0]);
-
-	data += msg->bufs.buflen[0];
-	memcpy(data, &isakmp_cfg_config.pool_size, msg->bufs.buflen[1]);
-
-	data += msg->bufs.buflen[1];
-	memcpy(data, raddr, msg->bufs.buflen[2]);
-
-	data += msg->bufs.buflen[2];
-	memcpy(data, usr, msg->bufs.buflen[3]);
-
-	data += msg->bufs.buflen[3];
-	memcpy(data, pwd, msg->bufs.buflen[4]);
-
-	if (privsep_send(privsep_sock[1], msg, len) != 0)
-		return -1;
-
-	if (privsep_recv(privsep_sock[1], &msg, &len) != 0)
-		return -1;
-
-	if (msg->hdr.ac_errno != 0) {
-		errno = msg->hdr.ac_errno;
-		goto out;
-	}
-
-	racoon_free(msg);
-	return 0;
-
-out:
-	racoon_free(msg);
-	return -1;
-}
-
-void
-privsep_cleanup_pam(port)
-	int port;
-{
-	struct privsep_com_msg *msg;
-	size_t len;
-	char *data;
-	int result;
-
-	if (geteuid() == 0)
-		return cleanup_pam(port);
-
-	len = sizeof(*msg) 
-	    + sizeof(port)
-	    + sizeof(isakmp_cfg_config.pool_size);
-
-	if ((msg = racoon_malloc(len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "Cannot allocate memory: %s\n", strerror(errno));
-		return;
-	}
-	bzero(msg, len);
-	msg->hdr.ac_cmd = PRIVSEP_CLEANUP_PAM;
-	msg->hdr.ac_len = len;
-	msg->bufs.buflen[0] = sizeof(port);
-	msg->bufs.buflen[1] = sizeof(isakmp_cfg_config.pool_size);
-
-	data = (char *)(msg + 1);
-	memcpy(data, &port, msg->bufs.buflen[0]);
-
-	data += msg->bufs.buflen[0];
-	memcpy(data, &isakmp_cfg_config.pool_size, msg->bufs.buflen[1]);
-
-	if (privsep_send(privsep_sock[1], msg, len) != 0)
-		return;
-
-	if (privsep_recv(privsep_sock[1], &msg, &len) != 0)
-		return;
-
-	if (msg->hdr.ac_errno != 0)
-		errno = msg->hdr.ac_errno;
-
-	racoon_free(msg);
-	return;
-}
-#endif
diff --git a/src/racoon/privsep.h b/src/racoon/privsep.h
deleted file mode 100644
index 0fa4363..0000000
--- a/src/racoon/privsep.h
+++ /dev/null
@@ -1,72 +0,0 @@
-/*	$NetBSD: privsep.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: privsep.h,v 1.5 2005/06/07 12:22:11 fredsen Exp */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus
- * 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.
- */
-
-#ifndef _PRIVSEP_H
-#define _PRIVSEP_H
-
-#define PRIVSEP_EAY_GET_PKCS1PRIVKEY	0x0801	/* admin_com_bufs follows */
-#define PRIVSEP_SCRIPT_EXEC		0x0803	/* admin_com_bufs follows */
-#define PRIVSEP_GETPSK			0x0804	/* admin_com_bufs follows */
-#define PRIVSEP_XAUTH_LOGIN_SYSTEM	0x0805	/* admin_com_bufs follows */
-#define PRIVSEP_ACCOUNTING_PAM		0x0806	/* admin_com_bufs follows */
-#define PRIVSEP_XAUTH_LOGIN_PAM		0x0807	/* admin_com_bufs follows */
-#define PRIVSEP_CLEANUP_PAM		0x0808	/* admin_com_bufs follows */
-#define PRIVSEP_ACCOUNTING_SYSTEM	0x0809	/* admin_com_bufs follows */
-
-#define PRIVSEP_NBUF_MAX 24
-#define PRIVSEP_BUFLEN_MAX 4096
-struct admin_com_bufs {
-	size_t buflen[PRIVSEP_NBUF_MAX];
-	/* Followed by the buffers */
-};
-
-struct privsep_com_msg {
-	struct admin_com hdr;
-	struct admin_com_bufs bufs;
-};
-
-int privsep_init __P((void));
-
-vchar_t *privsep_eay_get_pkcs1privkey __P((char *));
-int privsep_pfkey_open __P((void));
-void privsep_pfkey_close __P((int));
-int privsep_script_exec __P((char *, int, char * const *));
-vchar_t *privsep_getpsk __P((const char *, const int));
-int privsep_xauth_login_system __P((char *, char *));
-#ifdef HAVE_LIBPAM
-int privsep_accounting_pam __P((int, int));
-int privsep_xauth_login_pam __P((int, struct sockaddr *, char *, char *));
-void privsep_cleanup_pam __P((int));
-#endif
-int privsep_accounting_system __P((int, struct sockaddr *, char *, int));
-#endif /* _PRIVSEP_H */
diff --git a/src/racoon/proposal.c b/src/racoon/proposal.c
deleted file mode 100644
index 26c9274..0000000
--- a/src/racoon/proposal.c
+++ /dev/null
@@ -1,1294 +0,0 @@
-/*	$NetBSD: proposal.c,v 1.13.4.2 2008/07/22 13:25:42 vanhu Exp $	*/
-
-/* $Id: proposal.c,v 1.13.4.2 2008/07/22 13:25:42 vanhu Exp $ */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/queue.h>
-
-#include <netinet/in.h>
-#include PATH_IPSEC_H
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "debug.h"
-
-#include "policy.h"
-#include "pfkey.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "ipsec_doi.h"
-#include "algorithm.h"
-#include "proposal.h"
-#include "sainfo.h"
-#include "localconf.h"
-#include "remoteconf.h"
-#include "oakley.h"
-#include "handler.h"
-#include "strnames.h"
-#include "gcmalloc.h"
-#ifdef ENABLE_NATT
-#include "nattraversal.h"
-#endif
-
-static uint g_nextreqid = 1;
-
-/* %%%
- * modules for ipsec sa spec
- */
-struct saprop *
-newsaprop()
-{
-	struct saprop *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-
-	return new;
-}
-
-struct saproto *
-newsaproto()
-{
-	struct saproto *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-
-	return new;
-}
-
-/* set saprop to last part of the prop tree */
-void
-inssaprop(head, new)
-	struct saprop **head;
-	struct saprop *new;
-{
-	struct saprop *p;
-
-	if (*head == NULL) {
-		*head = new;
-		return;
-	}
-
-	for (p = *head; p->next; p = p->next)
-		;
-	p->next = new;
-
-	return;
-}
-
-/* set saproto to the end of the proto tree in saprop */
-void
-inssaproto(pp, new)
-	struct saprop *pp;
-	struct saproto *new;
-{
-	struct saproto *p;
-
-	for (p = pp->head; p && p->next; p = p->next)
-		;
-	if (p == NULL)
-		pp->head = new;
-	else
-		p->next = new;
-
-	return;
-}
-
-/* set saproto to the top of the proto tree in saprop */
-void
-inssaprotorev(pp, new)
-      struct saprop *pp;
-      struct saproto *new;
-{
-      new->next = pp->head;
-      pp->head = new;
-
-      return;
-}
-
-struct satrns *
-newsatrns()
-{
-	struct satrns *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-
-	return new;
-}
-
-/* set saproto to last part of the proto tree in saprop */
-void
-inssatrns(pr, new)
-	struct saproto *pr;
-	struct satrns *new;
-{
-	struct satrns *tr;
-
-	for (tr = pr->head; tr && tr->next; tr = tr->next)
-		;
-	if (tr == NULL)
-		pr->head = new;
-	else
-		tr->next = new;
-
-	return;
-}
-
-/*
- * take a single match between saprop.  allocate a new proposal and return it
- * for future use (like picking single proposal from a bundle).
- *	pp1: peer's proposal.
- *	pp2: my proposal.
- * NOTE: In the case of initiator, must be ensured that there is no
- * modification of the proposal by calling cmp_aproppair_i() before
- * this function.
- * XXX cannot understand the comment!
- */
-struct saprop *
-cmpsaprop_alloc(ph1, pp1, pp2, side)
-	struct ph1handle *ph1;
-	const struct saprop *pp1, *pp2;
-	int side;
-{
-	struct saprop *newpp = NULL;
-	struct saproto *pr1, *pr2, *newpr = NULL;
-	struct satrns *tr1, *tr2, *newtr;
-	const int ordermatters = 0;
-	int npr1, npr2;
-	int spisizematch;
-
-	newpp = newsaprop();
-	if (newpp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate saprop.\n");
-		return NULL;
-	}
-	newpp->prop_no = pp1->prop_no;
-
-	/* see proposal.h about lifetime/key length and PFS selection. */
-
-	/* check time/bytes lifetime and PFS */
-	switch (ph1->rmconf->pcheck_level) {
-	case PROP_CHECK_OBEY:
-		newpp->lifetime = pp1->lifetime;
-		newpp->lifebyte = pp1->lifebyte;
-		newpp->pfs_group = pp1->pfs_group;
-		break;
-
-	case PROP_CHECK_STRICT:
-		if (pp1->lifetime > pp2->lifetime) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"long lifetime proposed: "
-				"my:%d peer:%d\n",
-				(int)pp2->lifetime, (int)pp1->lifetime);
-			goto err;
-		}
-		if (pp1->lifebyte > pp2->lifebyte) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"long lifebyte proposed: "
-				"my:%d peer:%d\n",
-				pp2->lifebyte, pp1->lifebyte);
-			goto err;
-		}
-		newpp->lifetime = pp1->lifetime;
-		newpp->lifebyte = pp1->lifebyte;
-
-    prop_pfs_check:
-		if (pp2->pfs_group != 0 && pp1->pfs_group != pp2->pfs_group) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"pfs group mismatched: "
-				"my:%d peer:%d\n",
-				pp2->pfs_group, pp1->pfs_group);
-			goto err;
-		}
-		newpp->pfs_group = pp1->pfs_group;
-		break;
-
-	case PROP_CHECK_CLAIM:
-		/* lifetime */
-		if (pp1->lifetime <= pp2->lifetime) {
-			newpp->lifetime = pp1->lifetime;
-		} else {
-			newpp->lifetime = pp2->lifetime;
-			newpp->claim |= IPSECDOI_ATTR_SA_LD_TYPE_SEC;
-			plog(LLV_NOTIFY, LOCATION, NULL,
-				"use own lifetime: "
-				"my:%d peer:%d\n",
-				(int)pp2->lifetime, (int)pp1->lifetime);
-		}
-
-		/* lifebyte */
-		if (pp1->lifebyte > pp2->lifebyte) {
-			newpp->lifebyte = pp2->lifebyte;
-			newpp->claim |= IPSECDOI_ATTR_SA_LD_TYPE_SEC;
-			plog(LLV_NOTIFY, LOCATION, NULL,
-				"use own lifebyte: "
-				"my:%d peer:%d\n",
-				pp2->lifebyte, pp1->lifebyte);
-		}
-		newpp->lifebyte = pp1->lifebyte;
-
-    		goto prop_pfs_check;
-		break;
-
-	case PROP_CHECK_EXACT:
-		if (pp1->lifetime != pp2->lifetime) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"lifetime mismatched: "
-				"my:%d peer:%d\n",
-				(int)pp2->lifetime, (int)pp1->lifetime);
-			goto err;
-		}
-
-		if (pp1->lifebyte != pp2->lifebyte) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"lifebyte mismatched: "
-				"my:%d peer:%d\n",
-				pp2->lifebyte, pp1->lifebyte);
-			goto err;
-		}
-		if (pp1->pfs_group != pp2->pfs_group) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"pfs group mismatched: "
-				"my:%d peer:%d\n",
-				pp2->pfs_group, pp1->pfs_group);
-			goto err;
-		}
-		newpp->lifetime = pp1->lifetime;
-		newpp->lifebyte = pp1->lifebyte;
-		newpp->pfs_group = pp1->pfs_group;
-		break;
-
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid pcheck_level why?.\n");
-		goto err;
-	}
-
-#ifdef HAVE_SECCTX
-	/* check the security_context properties.
-	 * It is possible for one side to have a security context
-	 * and the other side doesn't. If so, this is an error.
-	 */
-
-	if (*pp1->sctx.ctx_str && !(*pp2->sctx.ctx_str)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "My proposal missing security context\n");
-		goto err;
-	}
-	if (!(*pp1->sctx.ctx_str) && *pp2->sctx.ctx_str) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		     "Peer is missing security context\n");
-		goto err;
-	}
-
-	if (*pp1->sctx.ctx_str && *pp2->sctx.ctx_str) {
-		if (pp1->sctx.ctx_doi == pp2->sctx.ctx_doi)
-			newpp->sctx.ctx_doi = pp1->sctx.ctx_doi;
-		else {
-			plog(LLV_ERROR, LOCATION, NULL, 
-			     "sec doi mismatched: my:%d peer:%d\n",
-			     pp2->sctx.ctx_doi, pp1->sctx.ctx_doi);
-			     goto err;
-		}
-
-		if (pp1->sctx.ctx_alg == pp2->sctx.ctx_alg)
-			newpp->sctx.ctx_alg = pp1->sctx.ctx_alg;
-		else {
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "sec alg mismatched: my:%d peer:%d\n",
-			     pp2->sctx.ctx_alg, pp1->sctx.ctx_alg);
-			goto err;
-		}
-
-		if ((pp1->sctx.ctx_strlen != pp2->sctx.ctx_strlen) ||
-		     memcmp(pp1->sctx.ctx_str, pp2->sctx.ctx_str,
-		     pp1->sctx.ctx_strlen) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			     "sec ctx string mismatched: my:%s peer:%s\n",
-			     pp2->sctx.ctx_str, pp1->sctx.ctx_str);
-				goto err;
-		} else {
-			newpp->sctx.ctx_strlen = pp1->sctx.ctx_strlen;
-			memcpy(newpp->sctx.ctx_str, pp1->sctx.ctx_str,
-				pp1->sctx.ctx_strlen);
-		}
-	}
-#endif /* HAVE_SECCTX */
-
-	npr1 = npr2 = 0;
-	for (pr1 = pp1->head; pr1; pr1 = pr1->next)
-		npr1++;
-	for (pr2 = pp2->head; pr2; pr2 = pr2->next)
-		npr2++;
-	if (npr1 != npr2)
-		goto err;
-
-	/* check protocol order */
-	pr1 = pp1->head;
-	pr2 = pp2->head;
-
-	while (1) {
-		if (!ordermatters) {
-			/*
-			 * XXX does not work if we have multiple proposals
-			 * with the same proto_id
-			 */
-			switch (side) {
-			case RESPONDER:
-				if (!pr2)
-					break;
-				for (pr1 = pp1->head; pr1; pr1 = pr1->next) {
-					if (pr1->proto_id == pr2->proto_id)
-						break;
-				}
-				break;
-			case INITIATOR:
-				if (!pr1)
-					break;
-				for (pr2 = pp2->head; pr2; pr2 = pr2->next) {
-					if (pr2->proto_id == pr1->proto_id)
-						break;
-				}
-				break;
-			}
-		}
-		if (!pr1 || !pr2)
-			break;
-
-		if (pr1->proto_id != pr2->proto_id) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"proto_id mismatched: "
-				"my:%s peer:%s\n",
-				s_ipsecdoi_proto(pr2->proto_id),
-				s_ipsecdoi_proto(pr1->proto_id));
-			goto err;
-		}
-		spisizematch = 0;
-		if (pr1->spisize == pr2->spisize)
-			spisizematch = 1;
-		else if (pr1->proto_id == IPSECDOI_PROTO_IPCOMP) {
-			/*
-			 * draft-shacham-ippcp-rfc2393bis-05.txt:
-			 * need to accept 16bit and 32bit SPI (CPI) for IPComp.
-			 */
-			if (pr1->spisize == sizeof(u_int16_t) &&
-			    pr2->spisize == sizeof(u_int32_t)) {
-				spisizematch = 1;
-			} else if (pr2->spisize == sizeof(u_int16_t) &&
-				 pr1->spisize == sizeof(u_int32_t)) {
-				spisizematch = 1;
-			}
-			if (spisizematch) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				    "IPComp SPI size promoted "
-				    "from 16bit to 32bit\n");
-			}
-		}
-		if (!spisizematch) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"spisize mismatched: "
-				"my:%d peer:%d\n",
-				(int)pr2->spisize, (int)pr1->spisize);
-			goto err;
-		}
-
-#ifdef ENABLE_NATT
-		if ((ph1->natt_flags & NAT_DETECTED) && 
-		    natt_udp_encap (pr2->encmode))
-		{
-			plog(LLV_INFO, LOCATION, NULL, "Adjusting my encmode %s->%s\n",
-			     s_ipsecdoi_encmode(pr2->encmode),
-			     s_ipsecdoi_encmode(pr2->encmode - ph1->natt_options->mode_udp_diff));
-			pr2->encmode -= ph1->natt_options->mode_udp_diff;
-			pr2->udp_encap = 1;
-		}
-
-		if ((ph1->natt_flags & NAT_DETECTED) &&
-		    natt_udp_encap (pr1->encmode))
-		{
-			plog(LLV_INFO, LOCATION, NULL, "Adjusting peer's encmode %s(%d)->%s(%d)\n",
-			     s_ipsecdoi_encmode(pr1->encmode),
-			     pr1->encmode,
-			     s_ipsecdoi_encmode(pr1->encmode - ph1->natt_options->mode_udp_diff),
-			     pr1->encmode - ph1->natt_options->mode_udp_diff);
-			pr1->encmode -= ph1->natt_options->mode_udp_diff;
-			pr1->udp_encap = 1;
-		}
-#endif
-
-		if (pr1->encmode != pr2->encmode) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"encmode mismatched: "
-				"my:%s peer:%s\n",
-				s_ipsecdoi_encmode(pr2->encmode),
-				s_ipsecdoi_encmode(pr1->encmode));
-			goto err;
-		}
-
-		for (tr1 = pr1->head; tr1; tr1 = tr1->next) {
-			for (tr2 = pr2->head; tr2; tr2 = tr2->next) {
-				if (cmpsatrns(pr1->proto_id, tr1, tr2, ph1->rmconf->pcheck_level) == 0)
-					goto found;
-			}
-		}
-
-		goto err;
-
-	    found:
-		newpr = newsaproto();
-		if (newpr == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to allocate saproto.\n");
-			goto err;
-		}
-		newpr->proto_id = pr1->proto_id;
-		newpr->spisize = pr1->spisize;
-		newpr->encmode = pr1->encmode;
-		newpr->spi = pr2->spi;		/* copy my SPI */
-		newpr->spi_p = pr1->spi;	/* copy peer's SPI */
-		newpr->reqid_in = pr2->reqid_in;
-		newpr->reqid_out = pr2->reqid_out;
-#ifdef ENABLE_NATT
-		newpr->udp_encap = pr1->udp_encap | pr2->udp_encap;
-#endif
-
-		newtr = newsatrns();
-		if (newtr == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to allocate satrns.\n");
-			racoon_free(newpr);
-			goto err;
-		}
-		newtr->trns_no = tr1->trns_no;
-		newtr->trns_id = tr1->trns_id;
-		newtr->encklen = tr1->encklen;
-		newtr->authtype = tr1->authtype;
-
-		inssatrns(newpr, newtr);
-		inssaproto(newpp, newpr);
-
-		pr1 = pr1->next;
-		pr2 = pr2->next;
-	}
-
-	/* XXX should check if we have visited all items or not */
-	if (!ordermatters) {
-		switch (side) {
-		case RESPONDER:
-			if (!pr2)
-				pr1 = NULL;
-			break;
-		case INITIATOR:
-			if (!pr1)
-				pr2 = NULL;
-			break;
-		}
-	}
-
-	/* should be matched all protocols in a proposal */
-	if (pr1 != NULL || pr2 != NULL)
-		goto err;
-
-	return newpp;
-
-err:
-	flushsaprop(newpp);
-	return NULL;
-}
-
-/* take a single match between saprop.  returns 0 if pp1 equals to pp2. */
-int
-cmpsaprop(pp1, pp2)
-	const struct saprop *pp1, *pp2;
-{
-	if (pp1->pfs_group != pp2->pfs_group) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"pfs_group mismatch. mine:%d peer:%d\n",
-			pp1->pfs_group, pp2->pfs_group);
-		/* FALLTHRU */
-	}
-
-	if (pp1->lifetime > pp2->lifetime) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"less lifetime proposed. mine:%d peer:%d\n",
-			(int)pp1->lifetime, (int)pp2->lifetime);
-		/* FALLTHRU */
-	}
-	if (pp1->lifebyte > pp2->lifebyte) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"less lifebyte proposed. mine:%d peer:%d\n",
-			pp1->lifebyte, pp2->lifebyte);
-		/* FALLTHRU */
-	}
-
-	return 0;
-}
-
-/*
- * take a single match between satrns.  returns 0 if tr1 equals to tr2.
- * tr1: peer's satrns
- * tr2: my satrns
- */
-int
-cmpsatrns(proto_id, tr1, tr2, check_level)
-	int proto_id;
-	const struct satrns *tr1, *tr2;
-	int check_level;
-{
-	if (tr1->trns_id != tr2->trns_id) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"trns_id mismatched: "
-			"my:%s peer:%s\n",
-			s_ipsecdoi_trns(proto_id, tr2->trns_id),
-			s_ipsecdoi_trns(proto_id, tr1->trns_id));
-		return 1;
-	}
-
-	if (tr1->authtype != tr2->authtype) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"authtype mismatched: "
-			"my:%s peer:%s\n",
-			s_ipsecdoi_attr_v(IPSECDOI_ATTR_AUTH, tr2->authtype),
-			s_ipsecdoi_attr_v(IPSECDOI_ATTR_AUTH, tr1->authtype));
-		return 1;
-	}
-
-	/* Check key length regarding checkmode
-	 * XXX Shall we send some kind of notify message when key length rejected ?
-	 */
-	switch(check_level){
-	case PROP_CHECK_OBEY:
-		return 0;
-		break;
-
-	case PROP_CHECK_STRICT:
-		/* FALLTHROUGH */
-	case PROP_CHECK_CLAIM:
-		if (tr1->encklen < tr2->encklen) {
-		plog(LLV_WARNING, LOCATION, NULL,
-				 "low key length proposed, "
-				 "mine:%d peer:%d.\n",
-			tr2->encklen, tr1->encklen);
-			return 1;
-		}
-		break;
-	case PROP_CHECK_EXACT:
-		if (tr1->encklen != tr2->encklen) {
-			plog(LLV_WARNING, LOCATION, NULL,
-				 "key length mismatched, "
-				 "mine:%d peer:%d.\n",
-				 tr2->encklen, tr1->encklen);
-			return 1;
-		}
-		break;
-	}
-
-	return 0;
-}
-
-int
-set_satrnsbysainfo(pr, sainfo)
-	struct saproto *pr;
-	struct sainfo *sainfo;
-{
-	struct sainfoalg *a, *b;
-	struct satrns *newtr;
-	int t;
-
-	switch (pr->proto_id) {
-	case IPSECDOI_PROTO_IPSEC_AH:
-		if (sainfo->algs[algclass_ipsec_auth] == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"no auth algorithm found\n");
-			goto err;
-		}
-		t = 1;
-		for (a = sainfo->algs[algclass_ipsec_auth]; a; a = a->next) {
-
-			if (a->alg == IPSECDOI_ATTR_AUTH_NONE)
-				continue;
-				
-			/* allocate satrns */
-			newtr = newsatrns();
-			if (newtr == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to allocate satrns.\n");
-				goto err;
-			}
-
-			newtr->trns_no = t++;
-			newtr->trns_id = ipsecdoi_authalg2trnsid(a->alg);
-			newtr->authtype = a->alg;
-
-			inssatrns(pr, newtr);
-		}
-		break;
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		if (sainfo->algs[algclass_ipsec_enc] == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"no encryption algorithm found\n");
-			goto err;
-		}
-		t = 1;
-		for (a = sainfo->algs[algclass_ipsec_enc]; a; a = a->next) {
-			for (b = sainfo->algs[algclass_ipsec_auth]; b; b = b->next) {
-				/* allocate satrns */
-				newtr = newsatrns();
-				if (newtr == NULL) {
-					plog(LLV_ERROR, LOCATION, NULL,
-						"failed to allocate satrns.\n");
-					goto err;
-				}
-
-				newtr->trns_no = t++;
-				newtr->trns_id = a->alg;
-				newtr->encklen = a->encklen;
-				newtr->authtype = b->alg;
-
-				inssatrns(pr, newtr);
-			}
-		}
-		break;
-	case IPSECDOI_PROTO_IPCOMP:
-		if (sainfo->algs[algclass_ipsec_comp] == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"no ipcomp algorithm found\n");
-			goto err;
-		}
-		t = 1;
-		for (a = sainfo->algs[algclass_ipsec_comp]; a; a = a->next) {
-
-			/* allocate satrns */
-			newtr = newsatrns();
-			if (newtr == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to allocate satrns.\n");
-				goto err;
-			}
-
-			newtr->trns_no = t++;
-			newtr->trns_id = a->alg;
-			newtr->authtype = IPSECDOI_ATTR_AUTH_NONE; /*no auth*/
-
-			inssatrns(pr, newtr);
-		}
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unknown proto_id (%d).\n", pr->proto_id);
-		goto err;
-	}
-
-	/* no proposal found */
-	if (pr->head == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "no algorithms found.\n");
-		return -1;
-	}
-
-	return 0;
-
-err:
-	flushsatrns(pr->head);
-	return -1;
-}
-
-struct saprop *
-aproppair2saprop(p0)
-	struct prop_pair *p0;
-{
-	struct prop_pair *p, *t;
-	struct saprop *newpp;
-	struct saproto *newpr;
-	struct satrns *newtr;
-	u_int8_t *spi;
-
-	if (p0 == NULL)
-		return NULL;
-
-	/* allocate ipsec a sa proposal */
-	newpp = newsaprop();
-	if (newpp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate saprop.\n");
-		return NULL;
-	}
-	newpp->prop_no = p0->prop->p_no;
-	/* lifetime & lifebyte must be updated later */
-
-	for (p = p0; p; p = p->next) {
-
-		/* allocate ipsec sa protocol */
-		newpr = newsaproto();
-		if (newpr == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to allocate saproto.\n");
-			goto err;
-		}
-
-		/* check spi size */
-		/* XXX should be handled isakmp cookie */
-		if (sizeof(newpr->spi) < p->prop->spi_size) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"invalid spi size %d.\n", p->prop->spi_size);
-			racoon_free(newpr);
-			goto err;
-		}
-
-		/*
-		 * XXX SPI bits are left-filled, for use with IPComp.
-		 * we should be switching to variable-length spi field...
-		 */
-		newpr->proto_id = p->prop->proto_id;
-		newpr->spisize = p->prop->spi_size;
-		memset(&newpr->spi, 0, sizeof(newpr->spi));
-		spi = (u_int8_t *)&newpr->spi;
-		spi += sizeof(newpr->spi);
-		spi -= p->prop->spi_size;
-		memcpy(spi, p->prop + 1, p->prop->spi_size);
-		newpr->reqid_in = 0;
-		newpr->reqid_out = 0;
-
-		for (t = p; t; t = t->tnext) {
-
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"prop#=%d prot-id=%s spi-size=%d "
-				"#trns=%d trns#=%d trns-id=%s\n",
-				t->prop->p_no,
-				s_ipsecdoi_proto(t->prop->proto_id),
-				t->prop->spi_size, t->prop->num_t,
-				t->trns->t_no,
-				s_ipsecdoi_trns(t->prop->proto_id,
-				t->trns->t_id));
-
-			/* allocate ipsec sa transform */
-			newtr = newsatrns();
-			if (newtr == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to allocate satrns.\n");
-				racoon_free(newpr);
-				goto err;
-			}
-
-			if (ipsecdoi_t2satrns(t->trns, 
-			    newpp, newpr, newtr) < 0) {
-				flushsaprop(newpp);
-				racoon_free(newtr);
-				racoon_free(newpr);
-				return NULL;
-			}
-
-			inssatrns(newpr, newtr);
-		}
-
-		/*
-		 * If the peer does not specify encryption mode, use 
-		 * transport mode by default.  This is to conform to
-		 * draft-shacham-ippcp-rfc2393bis-08.txt (explicitly specifies
-		 * that unspecified == transport), as well as RFC2407
-		 * (unspecified == implementation dependent default).
-		 */
-		if (newpr->encmode == 0)
-			newpr->encmode = IPSECDOI_ATTR_ENC_MODE_TRNS;
-
-		inssaproto(newpp, newpr);
-	}
-
-	return newpp;
-
-err:
-	flushsaprop(newpp);
-	return NULL;
-}
-
-void
-flushsaprop(head)
-	struct saprop *head;
-{
-	struct saprop *p, *save;
-
-	for (p = head; p != NULL; p = save) {
-		save = p->next;
-		flushsaproto(p->head);
-		racoon_free(p);
-	}
-
-	return;
-}
-
-void
-flushsaproto(head)
-	struct saproto *head;
-{
-	struct saproto *p, *save;
-
-	for (p = head; p != NULL; p = save) {
-		save = p->next;
-		flushsatrns(p->head);
-		vfree(p->keymat);
-		vfree(p->keymat_p);
-		racoon_free(p);
-	}
-
-	return;
-}
-
-void
-flushsatrns(head)
-	struct satrns *head;
-{
-	struct satrns *p, *save;
-
-	for (p = head; p != NULL; p = save) {
-		save = p->next;
-		racoon_free(p);
-	}
-
-	return;
-}
-
-/*
- * print multiple proposals
- */
-void
-printsaprop(pri, pp)
-	const int pri;
-	const struct saprop *pp;
-{
-	const struct saprop *p;
-
-	if (pp == NULL) {
-		plog(pri, LOCATION, NULL, "(null)");
-		return;
-	}
-
-	for (p = pp; p; p = p->next) {
-		printsaprop0(pri, p);
-	}
-
-	return;
-}
-
-/*
- * print one proposal.
- */
-void
-printsaprop0(pri, pp)
-	int pri;
-	const struct saprop *pp;
-{
-	const struct saproto *p;
-
-	if (pp == NULL)
-		return;
-
-	for (p = pp->head; p; p = p->next) {
-		printsaproto(pri, p);
-	}
-
-	return;
-}
-
-void
-printsaproto(pri, pr)
-	const int pri;
-	const struct saproto *pr;
-{
-	struct satrns *tr;
-
-	if (pr == NULL)
-		return;
-
-	plog(pri, LOCATION, NULL,
-		" (proto_id=%s spisize=%d spi=%08lx spi_p=%08lx "
-		"encmode=%s reqid=%d:%d)\n",
-		s_ipsecdoi_proto(pr->proto_id),
-		(int)pr->spisize,
-		(unsigned long)ntohl(pr->spi),
-		(unsigned long)ntohl(pr->spi_p),
-		s_ipsecdoi_attr_v(IPSECDOI_ATTR_ENC_MODE, pr->encmode),
-		(int)pr->reqid_in, (int)pr->reqid_out);
-
-	for (tr = pr->head; tr; tr = tr->next) {
-		printsatrns(pri, pr->proto_id, tr);
-	}
-
-	return;
-}
-
-void
-printsatrns(pri, proto_id, tr)
-	const int pri;
-	const int proto_id;
-	const struct satrns *tr;
-{
-	if (tr == NULL)
-		return;
-
-	switch (proto_id) {
-	case IPSECDOI_PROTO_IPSEC_AH:
-		plog(pri, LOCATION, NULL,
-			"  (trns_id=%s authtype=%s)\n",
-			s_ipsecdoi_trns(proto_id, tr->trns_id),
-			s_ipsecdoi_attr_v(IPSECDOI_ATTR_AUTH, tr->authtype));
-		break;
-	case IPSECDOI_PROTO_IPSEC_ESP:
-		plog(pri, LOCATION, NULL,
-			"  (trns_id=%s encklen=%d authtype=%s)\n",
-			s_ipsecdoi_trns(proto_id, tr->trns_id),
-			tr->encklen,
-			s_ipsecdoi_attr_v(IPSECDOI_ATTR_AUTH, tr->authtype));
-		break;
-	case IPSECDOI_PROTO_IPCOMP:
-		plog(pri, LOCATION, NULL,
-			"  (trns_id=%s)\n",
-			s_ipsecdoi_trns(proto_id, tr->trns_id));
-		break;
-	default:
-		plog(pri, LOCATION, NULL,
-			"(unknown proto_id %d)\n", proto_id);
-	}
-
-	return;
-}
-
-void
-print_proppair0(pri, p, level)
-	int pri; 
-	struct prop_pair *p;
-	int level;
-{
-	char spc[21];
-
-	memset(spc, ' ', sizeof(spc));
-	spc[sizeof(spc) - 1] = '\0';
-	if (level < 20) {
-		spc[level] = '\0';
-	}
-
-	plog(pri, LOCATION, NULL,
-		"%s%p: next=%p tnext=%p\n", spc, p, p->next, p->tnext);
-	if (p->next)
-		print_proppair0(pri, p->next, level + 1);
-	if (p->tnext)
-		print_proppair0(pri, p->tnext, level + 1);
-}
-
-void
-print_proppair(pri, p)
-	int pri;
-	struct prop_pair *p;
-{
-	print_proppair0(pri, p, 1);
-}
-
-int
-set_proposal_from_policy(iph2, sp_main, sp_sub)
-	struct ph2handle *iph2;
-	struct secpolicy *sp_main, *sp_sub;
-{
-	struct saprop *newpp;
-	struct ipsecrequest *req;
-	int encmodesv = IPSECDOI_ATTR_ENC_MODE_TRNS; /* use only when complex_bundle */
-
-	newpp = newsaprop();
-	if (newpp == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate saprop.\n");
-		goto err;
-	}
-	newpp->prop_no = 1;
-	newpp->lifetime = iph2->sainfo->lifetime;
-	newpp->lifebyte = iph2->sainfo->lifebyte;
-	newpp->pfs_group = iph2->sainfo->pfs_group;
-
-	if (lcconf->complex_bundle)
-		goto skip1;
-
-	/*
-	 * decide the encryption mode of this SA bundle.
-	 * the mode becomes tunnel mode when there is even one policy
-	 * of tunnel mode in the SPD.  otherwise the mode becomes
-	 * transport mode.
-	 */
-	for (req = sp_main->req; req; req = req->next) {
-		if (req->saidx.mode == IPSEC_MODE_TUNNEL) {
-			encmodesv = pfkey2ipsecdoi_mode(req->saidx.mode);
-#ifdef ENABLE_NATT
-			if (iph2->ph1 && (iph2->ph1->natt_flags & NAT_DETECTED))
-				encmodesv += iph2->ph1->natt_options->mode_udp_diff;
-#endif
-			break;
-		}
-	}
-
-    skip1:
-	for (req = sp_main->req; req; req = req->next) {
-		struct saproto *newpr;
-		caddr_t paddr = NULL;
-
-		/*
-		 * check if SA bundle ?
-		 * nested SAs negotiation is NOT supported.
-		 *       me +--- SA1 ---+ peer1
-		 *       me +--- SA2 --------------+ peer2
-		 */
-#ifdef __linux__
-		if (req->saidx.src.ss_family && req->saidx.dst.ss_family) {
-#else
-		if (req->saidx.src.ss_len && req->saidx.dst.ss_len) {
-#endif
-			/* check the end of ip addresses of SA */
-			if (iph2->side == INITIATOR)
-				paddr = (caddr_t)&req->saidx.dst;
-			else
-				paddr = (caddr_t)&req->saidx.src;
-		}
-
-		/* allocate ipsec sa protocol */
-		newpr = newsaproto();
-		if (newpr == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to allocate saproto.\n");
-			goto err;
-		}
-
-		newpr->proto_id = ipproto2doi(req->saidx.proto);
-		if (newpr->proto_id == IPSECDOI_PROTO_IPCOMP)
-			newpr->spisize = 2;
-		else
-			newpr->spisize = 4;
-		if (lcconf->complex_bundle) {
-			newpr->encmode = pfkey2ipsecdoi_mode(req->saidx.mode);
-#ifdef ENABLE_NATT
-			if (iph2->ph1 && (iph2->ph1->natt_flags & NAT_DETECTED))
-				newpr->encmode += 
-				    iph2->ph1->natt_options->mode_udp_diff;
-#endif
-		}
-		else
-			newpr->encmode = encmodesv;
-
-		if (iph2->side == INITIATOR)
-			newpr->reqid_out = req->saidx.reqid;
-		else
-			newpr->reqid_in = req->saidx.reqid;
-
-		if (set_satrnsbysainfo(newpr, iph2->sainfo) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to get algorithms.\n");
-			racoon_free(newpr);
-			goto err;
-		}
-
-		/* set new saproto */
-		inssaprotorev(newpp, newpr);
-	}
-
-	/* get reqid_in from inbound policy */
-	if (sp_sub) {
-		struct saproto *pr;
-
-		req = sp_sub->req;
-		pr = newpp->head;
-		while (req && pr) {
-			if (iph2->side == INITIATOR)
-				pr->reqid_in = req->saidx.reqid;
-			else
-				pr->reqid_out = req->saidx.reqid;
-			pr = pr->next;
-			req = req->next;
-		}
-		if (pr || req) {
-			plog(LLV_NOTIFY, LOCATION, NULL,
-				"There is a difference "
-				"between the in/out bound policies in SPD.\n");
-		}
-	}
-
-	iph2->proposal = newpp;
-
-	printsaprop0(LLV_DEBUG, newpp);
-
-	return 0;
-err:
-	flushsaprop(newpp);
-	return -1;
-}
-
-/*
- * generate a policy from peer's proposal.
- * this function unconditionally choices first proposal in SA payload
- * passed by peer.
- */
-int
-set_proposal_from_proposal(iph2)
-	struct ph2handle *iph2;
-{
-        struct saprop *newpp = NULL, *pp0, *pp_peer = NULL;
-	struct saproto *newpr = NULL, *pr;
-	struct prop_pair **pair;
-	int error = -1;
-	int i;
-
-	/* get proposal pair */
-	pair = get_proppair(iph2->sa, IPSECDOI_TYPE_PH2);
-	if (pair == NULL)
-		goto end;
-
-	/*
-	 * make my proposal according as the client proposal.
-	 * XXX assumed there is only one proposal even if it's the SA bundle.
-	 */
-        for (i = 0; i < MAXPROPPAIRLEN; i++) {
-                if (pair[i] == NULL)
-                        continue;
-
-		if (pp_peer != NULL)
-			flushsaprop(pp_peer);
-
-		pp_peer = aproppair2saprop(pair[i]);
-		if (pp_peer == NULL)
-			goto end;
-
-		pp0 = newsaprop();
-		if (pp0 == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to allocate saprop.\n");
-			goto end;
-		}
-		pp0->prop_no = 1;
-		pp0->lifetime = iph2->sainfo->lifetime;
-		pp0->lifebyte = iph2->sainfo->lifebyte;
-		pp0->pfs_group = iph2->sainfo->pfs_group;
-
-#ifdef HAVE_SECCTX
-		if (*pp_peer->sctx.ctx_str) {
-			pp0->sctx.ctx_doi = pp_peer->sctx.ctx_doi;
-			pp0->sctx.ctx_alg = pp_peer->sctx.ctx_alg;
-			pp0->sctx.ctx_strlen = pp_peer->sctx.ctx_strlen;
-			memcpy(pp0->sctx.ctx_str, pp_peer->sctx.ctx_str,
-			       pp_peer->sctx.ctx_strlen);
-		}
-#endif /* HAVE_SECCTX */
-
-		if (pp_peer->next != NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"pp_peer is inconsistency, ignore it.\n");
-			/*FALLTHROUGH*/
-		}
-
-		for (pr = pp_peer->head; pr; pr = pr->next)
-		{
-			struct remoteconf *conf;
-
-			newpr = newsaproto();
-			if (newpr == NULL)
-			{
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to allocate saproto.\n");
-				racoon_free(pp0);
-				goto end;
-			}
-			newpr->proto_id = pr->proto_id;
-			newpr->spisize = pr->spisize;
-			newpr->encmode = pr->encmode;
-			newpr->spi = 0;
-			newpr->spi_p = pr->spi;     /* copy peer's SPI */
-			newpr->reqid_in = 0;
-			newpr->reqid_out = 0;
-
-			conf = getrmconf(iph2->dst);
-			if (conf != NULL &&
-				conf->gen_policy == GENERATE_POLICY_UNIQUE){
-				newpr->reqid_in = g_nextreqid ;
-				newpr->reqid_out = g_nextreqid ++;
-				/* 
-				 * XXX there is a (very limited) 
-				 * risk of reusing the same reqid
-				 * as another SP entry for the same peer
-				 */
-				if(g_nextreqid >= IPSEC_MANUAL_REQID_MAX)
-					g_nextreqid = 1;
-			}else{
-				newpr->reqid_in = 0;
-				newpr->reqid_out = 0;
-			}
- 
-			if (set_satrnsbysainfo(newpr, iph2->sainfo) < 0)
-			{
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to get algorithms.\n");
-				racoon_free(newpr);
-				racoon_free(pp0);
-				goto end;
-			}
-			inssaproto(pp0, newpr);
-		}
-
-		inssaprop(&newpp, pp0);
-        }
-
-	plog(LLV_DEBUG, LOCATION, NULL, "make a proposal from peer's:\n");
-	printsaprop0(LLV_DEBUG, newpp);  
-
-	iph2->proposal = newpp;
-
-	error = 0;
-
-end:
-	if (error && newpp)
-		flushsaprop(newpp);
-
-	if (pp_peer)
-		flushsaprop(pp_peer);
-	if (pair)
-		free_proppair(pair);
-	return error;
-}
diff --git a/src/racoon/proposal.h b/src/racoon/proposal.h
deleted file mode 100644
index 60fc531..0000000
--- a/src/racoon/proposal.h
+++ /dev/null
@@ -1,214 +0,0 @@
-/*	$NetBSD: proposal.h,v 1.6 2006/12/09 05:52:57 manu Exp $	*/
-
-/* Id: proposal.h,v 1.5 2004/06/11 16:00:17 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _PROPOSAL_H
-#define _PROPOSAL_H
-
-#include <sys/queue.h>
-
-/*
- *   A. chained list of transform, only for single proto_id
- *      (this is same as set of transforms in single proposal payload)
- *   B. proposal.  this will point to multiple (A) items (order is important
- *      here so pointer to (A) must be ordered array, or chained list). 
- *      this covers multiple proposal on a packet if proposal # is the same.
- *   C. finally, (B) needs to be connected as chained list.
- * 
- * 	head ---> prop[.......] ---> prop[...] ---> prop[...] ---> ...
- * 	               | | | |
- * 	               | | | +- proto4  <== must preserve order here
- * 	               | | +--- proto3
- * 	               | +----- proto2
- * 	               +------- proto1[trans1, trans2, trans3, ...]
- *
- *   incoming packets needs to be parsed to construct the same structure
- *   (check "prop_pair" too).
- */
-/* SA proposal specification */
-struct saprop {
-	int prop_no;
-	time_t lifetime;
-	int lifebyte;
-	int pfs_group;			/* pfs group */
-	int claim;			/* flag to send RESPONDER-LIFETIME. */
-					/* XXX assumed DOI values are 1 or 2. */
-#ifdef HAVE_SECCTX
-	struct security_ctx sctx;       /* security context structure */
-#endif
-	struct saproto *head;
-	struct saprop *next;
-};
-
-/* SA protocol specification */
-struct saproto {
-	int proto_id;
-	size_t spisize;			/* spi size */
-	int encmode;			/* encryption mode */
-
-	int udp_encap;			/* UDP encapsulation */
-
-	/* XXX should be vchar_t * */
-	/* these are network byte order */
-	u_int32_t spi;			/* inbound. i.e. --SA-> me */
-	u_int32_t spi_p;		/* outbound. i.e. me -SA-> */
-
-	vchar_t *keymat;		/* KEYMAT */
-	vchar_t *keymat_p;		/* peer's KEYMAT */
-
-	int reqid_out;			/* request id (outbound) */
-	int reqid_in;			/* request id (inbound) */
-
-	int ok;				/* if 1, success to set SA in kenrel */
-
-	struct satrns *head;		/* header of transform */
-	struct saproto *next;		/* next protocol */
-};
-
-/* SA algorithm specification */
-struct satrns {
-	int trns_no;
-	int trns_id;			/* transform id */
-	int encklen;			/* key length of encryption algorithm */
-	int authtype;			/* authentication algorithm if ESP */
-
-	struct satrns *next;		/* next transform */
-};
-
-/*
- * prop_pair: (proposal number, transform number)
- *
- *	(SA (P1 (T1 T2)) (P1' (T1' T2')) (P2 (T1" T2")))
- *
- *              p[1]      p[2]
- *      top     (P1,T1)   (P2",T1")
- *		 |  |tnext     |tnext
- *		 |  v          v
- *		 | (P1, T2)   (P2", T2")
- *		 v next
- *		(P1', T1')
- *		    |tnext
- *		    v
- *		   (P1', T2')
- *
- * when we convert it to saprop in prop2saprop(), it should become like:
- * 
- * 		 (next)
- * 	saprop --------------------> saprop	
- * 	 | (head)                     | (head)
- * 	 +-> saproto                  +-> saproto
- * 	      | | (head)                     | (head)
- * 	      | +-> satrns(P1 T1)            +-> satrns(P2" T1")
- * 	      |      | (next)                     | (next)
- * 	      |      v                            v
- * 	      |     satrns(P1, T2)               satrns(P2", T2")
- * 	      v (next)
- * 	     saproto
- * 		| (head)
- * 		+-> satrns(P1' T1')
- * 		     | (next)
- * 		     v
- * 		    satrns(P1', T2')
- */
-struct prop_pair {
-	struct isakmp_pl_p *prop;
-	struct isakmp_pl_t *trns;
-	struct prop_pair *next;	/* next prop_pair with same proposal # */
-				/* (bundle case) */
-	struct prop_pair *tnext; /* next prop_pair in same proposal payload */
-				/* (multiple tranform case) */
-};
-#define MAXPROPPAIRLEN	256	/* It's enough because field size is 1 octet. */
-
-/*
- * Lifetime length selection refered to the section 4.5.4 of RFC2407.  It does
- * not completely conform to the description of RFC.  There are four types of
- * the behavior.  If the value of "proposal_check" in "remote" directive is;
- *     "obey"
- *         the responder obey the initiator anytime.
- *     "strict"
- *         If the responder's length is longer than the initiator's one, the
- *         responder uses the intitiator's one.  Otherwise rejects the proposal.
- *         If PFS is not required by the responder, the responder obeys the
- *         proposal.  If PFS is required by both sides and if the responder's
- *         group is not equal to the initiator's one, then the responder reject
- *         the proposal.
- *     "claim"
- *         If the responder's length is longer than the initiator's one, the
- *         responder use the intitiator's one.  If the responder's length is
- *         shorter than the initiator's one, the responder uses own length
- *         AND send RESPONDER-LIFETIME notify message to a initiator in the
- *         case of lifetime.
- *         About PFS, this directive is same as "strict".
- *     "exact"
- *         If the initiator's length is not equal to the responder's one, the
- *         responder rejects the proposal.
- *         If PFS is required and if the responder's group is not equal to
- *         the initiator's one, then the responder reject the proposal.
- * XXX should be defined the behavior of key length.
- */
-#define PROP_CHECK_OBEY		1
-#define PROP_CHECK_STRICT	2
-#define PROP_CHECK_CLAIM	3
-#define PROP_CHECK_EXACT	4
-
-struct sainfo;
-struct ph1handle;
-struct secpolicy;
-extern struct saprop *newsaprop __P((void));
-extern struct saproto *newsaproto __P((void));
-extern void inssaprop __P((struct saprop **, struct saprop *));
-extern void inssaproto __P((struct saprop *, struct saproto *));
-extern void inssaprotorev __P((struct saprop *, struct saproto *));
-extern struct satrns *newsatrns __P((void));
-extern void inssatrns __P((struct saproto *, struct satrns *));
-extern struct saprop *cmpsaprop_alloc __P((struct ph1handle *,
-	const struct saprop *, const struct saprop *, int));
-extern int cmpsaprop __P((const struct saprop *, const struct saprop *));
-extern int cmpsatrns __P((int, const struct satrns *, const struct satrns *, int));
-extern int set_satrnsbysainfo __P((struct saproto *, struct sainfo *));
-extern struct saprop *aproppair2saprop __P((struct prop_pair *));
-extern void free_proppair __P((struct prop_pair **));
-extern void flushsaprop __P((struct saprop *));
-extern void flushsaproto __P((struct saproto *));
-extern void flushsatrns __P((struct satrns *));
-extern void printsaprop __P((const int, const struct saprop *));
-extern void printsaprop0 __P((const int, const struct saprop *));
-extern void printsaproto __P((const int, const struct saproto *));
-extern void printsatrns __P((const int, const int, const struct satrns *));
-extern void print_proppair0 __P((int, struct prop_pair *, int));
-extern void print_proppair __P((int, struct prop_pair *));
-extern int set_proposal_from_policy __P((struct ph2handle *,
-	struct secpolicy *, struct secpolicy *));
-extern int set_proposal_from_proposal __P((struct ph2handle *));
-
-#endif /* _PROPOSAL_H */
diff --git a/src/racoon/prsa_par.h b/src/racoon/prsa_par.h
deleted file mode 100644
index 3bdb11d..0000000
--- a/src/racoon/prsa_par.h
+++ /dev/null
@@ -1,110 +0,0 @@
-/* A Bison parser, made by GNU Bison 2.3.  */
-
-/* Skeleton interface for Bison's Yacc-like parsers in C
-
-   Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
-   Free Software Foundation, Inc.
-
-   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, or (at your option)
-   any later version.
-
-   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.
-
-   You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 51 Franklin Street, Fifth Floor,
-   Boston, MA 02110-1301, USA.  */
-
-/* As a special exception, you may create a larger work that contains
-   part or all of the Bison parser skeleton and distribute that work
-   under terms of your choice, so long as that work isn't itself a
-   parser generator using the skeleton or a modified version thereof
-   as a parser skeleton.  Alternatively, if you modify or redistribute
-   the parser skeleton itself, you may (at your option) remove this
-   special exception, which will cause the skeleton and the resulting
-   Bison output files to be licensed under the GNU General Public
-   License without this special exception.
-
-   This special exception was added by the Free Software Foundation in
-   version 2.2 of Bison.  */
-
-/* Tokens.  */
-#ifndef YYTOKENTYPE
-# define YYTOKENTYPE
-   /* Put the tokens into the symbol table, so that GDB and other debuggers
-      know about them.  */
-   enum yytokentype {
-     COLON = 258,
-     HEX = 259,
-     OBRACE = 260,
-     EBRACE = 261,
-     TAG_RSA = 262,
-     TAG_PUB = 263,
-     TAG_PSK = 264,
-     MODULUS = 265,
-     PUBLIC_EXPONENT = 266,
-     PRIVATE_EXPONENT = 267,
-     PRIME1 = 268,
-     PRIME2 = 269,
-     EXPONENT1 = 270,
-     EXPONENT2 = 271,
-     COEFFICIENT = 272,
-     ADDR4 = 273,
-     ADDR6 = 274,
-     ADDRANY = 275,
-     SLASH = 276,
-     NUMBER = 277,
-     BASE64 = 278
-   };
-#endif
-/* Tokens.  */
-#define COLON 258
-#define HEX 259
-#define OBRACE 260
-#define EBRACE 261
-#define TAG_RSA 262
-#define TAG_PUB 263
-#define TAG_PSK 264
-#define MODULUS 265
-#define PUBLIC_EXPONENT 266
-#define PRIVATE_EXPONENT 267
-#define PRIME1 268
-#define PRIME2 269
-#define EXPONENT1 270
-#define EXPONENT2 271
-#define COEFFICIENT 272
-#define ADDR4 273
-#define ADDR6 274
-#define ADDRANY 275
-#define SLASH 276
-#define NUMBER 277
-#define BASE64 278
-
-
-
-
-#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
-typedef union YYSTYPE
-#line 130 "prsa_par.y"
-{
-	BIGNUM *bn;
-	RSA *rsa;
-	char *chr;
-	long num;
-	struct netaddr *naddr;
-}
-/* Line 1489 of yacc.c.  */
-#line 103 "prsa_par.h"
-	YYSTYPE;
-# define yystype YYSTYPE /* obsolescent; will be withdrawn */
-# define YYSTYPE_IS_DECLARED 1
-# define YYSTYPE_IS_TRIVIAL 1
-#endif
-
-extern YYSTYPE prsalval;
-
diff --git a/src/racoon/prsa_par.y b/src/racoon/prsa_par.y
deleted file mode 100644
index f21a82b..0000000
--- a/src/racoon/prsa_par.y
+++ /dev/null
@@ -1,350 +0,0 @@
-/*	$NetBSD: prsa_par.y,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: prsa_par.y,v 1.3 2004/11/08 12:04:23 ludvigm Exp */
-
-%{
-/*
- * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
- * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
- * 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.
- */
-
-/* This file contains a parser for FreeS/WAN-style ipsec.secrets RSA keys. */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdarg.h>
-#include <string.h>
-#include <errno.h>
-#include <unistd.h>
-
-#ifdef HAVE_STDARG_H
-#include <stdarg.h>
-#else
-#include <varargs.h>
-#endif
-
-#include <netdb.h>
-#include <netinet/in.h>
-#include <sys/socket.h>
-#include <arpa/inet.h>
-#include <sys/types.h>
-
-#include <sys/stat.h>
-#include <unistd.h>
-
-#include <openssl/bn.h>
-#include <openssl/rsa.h>
-
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "oakley.h"
-#include "isakmp_var.h"
-#include "handler.h"
-#include "crypto_openssl.h"
-#include "sockmisc.h"
-#include "rsalist.h"
-
-extern void prsaerror(const char *str, ...);
-extern int prsawrap (void);
-extern int prsalex (void);
-
-extern char *prsatext;
-extern int prsa_cur_lineno;
-extern char *prsa_cur_fname;
-extern FILE *prsain;
-
-int prsa_cur_lineno = 0;
-char *prsa_cur_fname = NULL;
-struct genlist *prsa_cur_list = NULL;
-enum rsa_key_type prsa_cur_type = RSA_TYPE_ANY;
-
-static RSA *rsa_cur;
-
-void
-prsaerror(const char *s, ...)
-{
-	char fmt[512];
-
-	va_list ap;
-#ifdef HAVE_STDARG_H
-	va_start(ap, s);
-#else
-	va_start(ap);
-#endif
-	snprintf(fmt, sizeof(fmt), "%s:%d: %s",
-		prsa_cur_fname, prsa_cur_lineno, s);
-	plogv(LLV_ERROR, LOCATION, NULL, fmt, ap);
-	va_end(ap);
-}
-
-void
-prsawarning(const char *s, ...)
-{
-	char fmt[512];
-
-	va_list ap;
-#ifdef HAVE_STDARG_H
-	va_start(ap, s);
-#else
-	va_start(ap);
-#endif
-	snprintf(fmt, sizeof(fmt), "%s:%d: %s",
-		prsa_cur_fname, prsa_cur_lineno, s);
-	plogv(LLV_WARNING, LOCATION, NULL, fmt, ap);
-	va_end(ap);
-}
-
-int
-prsawrap()
-{
-	return 1;
-} 
-%}
-%union {
-	BIGNUM *bn;
-	RSA *rsa;
-	char *chr;
-	long num;
-	struct netaddr *naddr;
-}
-
-%token COLON HEX
-%token OBRACE EBRACE COLON HEX
-%token TAG_RSA TAG_PUB TAG_PSK
-%token MODULUS PUBLIC_EXPONENT PRIVATE_EXPONENT 
-%token PRIME1 PRIME2 EXPONENT1 EXPONENT2 COEFFICIENT
-%token ADDR4 ADDR6 ADDRANY SLASH NUMBER BASE64
-
-%type <bn>	HEX
-%type <num>	NUMBER
-%type <chr>	ADDR4 ADDR6 BASE64
-
-%type <rsa>	rsa_statement
-%type <num>	prefix
-%type <naddr>	addr4 addr6 addr
-
-%%
-statements:
-	statements statement
-	| statement
-	;
-
-statement:
-	addr addr COLON rsa_statement
-	{
-		rsa_key_insert(prsa_cur_list, $1, $2, $4);
-	}
-	| addr COLON rsa_statement 
-	{
-		rsa_key_insert(prsa_cur_list, NULL, $1, $3);
-	}
-	| COLON rsa_statement 
-	{
-		rsa_key_insert(prsa_cur_list, NULL, NULL, $2);
-	}
-	;
-
-rsa_statement:
-	TAG_RSA OBRACE params EBRACE
-	{
-		if (prsa_cur_type == RSA_TYPE_PUBLIC) {
-			prsawarning("Using private key for public key purpose.\n");
-			if (!rsa_cur->n || !rsa_cur->e) {
-				prsaerror("Incomplete key. Mandatory parameters are missing!\n");
-				YYABORT;
-			}
-		}
-		else {
-			if (!rsa_cur->n || !rsa_cur->e || !rsa_cur->d) {
-				prsaerror("Incomplete key. Mandatory parameters are missing!\n");
-				YYABORT;
-			}
-			if (!rsa_cur->p || !rsa_cur->q || !rsa_cur->dmp1
-			    || !rsa_cur->dmq1 || !rsa_cur->iqmp) {
-				if (rsa_cur->p) BN_clear_free(rsa_cur->p);
-				if (rsa_cur->q) BN_clear_free(rsa_cur->q);
-				if (rsa_cur->dmp1) BN_clear_free(rsa_cur->dmp1);
-				if (rsa_cur->dmq1) BN_clear_free(rsa_cur->dmq1);
-				if (rsa_cur->iqmp) BN_clear_free(rsa_cur->iqmp);
-
-				rsa_cur->p = NULL;
-				rsa_cur->q = NULL;
-				rsa_cur->dmp1 = NULL;
-				rsa_cur->dmq1 = NULL;
-				rsa_cur->iqmp = NULL;
-			}
-		}
-		$$ = rsa_cur;
-		rsa_cur = RSA_new();
-	}
-	| TAG_PUB BASE64
-	{
-		if (prsa_cur_type == RSA_TYPE_PRIVATE) {
-			prsaerror("Public key in private-key file!\n");
-			YYABORT;
-		}
-		$$ = base64_pubkey2rsa($2);
-	}
-	| TAG_PUB HEX
-	{
-		if (prsa_cur_type == RSA_TYPE_PRIVATE) {
-			prsaerror("Public key in private-key file!\n");
-			YYABORT;
-		}
-		$$ = bignum_pubkey2rsa($2);
-	}
-	;
-
-addr:
-	addr4
-	| addr6
-	| ADDRANY
-	{
-		$$ = NULL;
-	}
-	;
-
-addr4:
-	ADDR4 prefix
-	{
-		int err;
-		struct sockaddr_in *sap;
-		
-		if ($2 == -1) $2 = 32;
-		if ($2 < 0 || $2 > 32) {
-			prsaerror ("Invalid IPv4 prefix\n");
-			YYABORT;
-		}
-		$$ = calloc (sizeof(struct netaddr), 1);
-		$$->prefix = $2;
-		sap = (struct sockaddr_in *)(&$$->sa);
-		sap->sin_family = AF_INET;
-		err = inet_pton(AF_INET, $1, (struct in_addr*)(&sap->sin_addr));
-		if (err <= 0) {
-			prsaerror("inet_pton(%s): %s\n", $1, strerror(errno));
-			YYABORT;
-		}
-	}
-	;
-
-addr6:
-	ADDR6 prefix
-	{
-		int err;
-		struct sockaddr_in6 *sap;
-		
-		if ($2 == -1) $2 = 128;
-		if ($2 < 0 || $2 > 128) {
-			prsaerror ("Invalid IPv6 prefix\n");
-			YYABORT;
-		}
-		$$ = calloc (sizeof(struct netaddr), 1);
-		$$->prefix = $2;
-		sap = (struct sockaddr_in6 *)(&$$->sa);
-		sap->sin6_family = AF_INET6;
-		err = inet_pton(AF_INET6, $1, (struct in6_addr*)(&sap->sin6_addr));
-		if (err <= 0) {
-			prsaerror("inet_pton(%s): %s\n", $1, strerror(errno));
-			YYABORT;
-		}
-	}
-	;
-
-prefix:
-	/* nothing */ { $$ = -1; }
-	| SLASH NUMBER { $$ = $2; }
-	;
-params:
-	params param
-	| param
-	;
-
-param:
-	MODULUS COLON HEX 
-	{ if (!rsa_cur->n) rsa_cur->n = $3; else { prsaerror ("Modulus already defined\n"); YYABORT; } }
-	| PUBLIC_EXPONENT COLON HEX 
-	{ if (!rsa_cur->e) rsa_cur->e = $3; else { prsaerror ("PublicExponent already defined\n"); YYABORT; } }
-	| PRIVATE_EXPONENT COLON HEX 
-	{ if (!rsa_cur->d) rsa_cur->d = $3; else { prsaerror ("PrivateExponent already defined\n"); YYABORT; } }
-	| PRIME1 COLON HEX 
-	{ if (!rsa_cur->p) rsa_cur->p = $3; else { prsaerror ("Prime1 already defined\n"); YYABORT; } }
-	| PRIME2 COLON HEX 
-	{ if (!rsa_cur->q) rsa_cur->q = $3; else { prsaerror ("Prime2 already defined\n"); YYABORT; } }
-	| EXPONENT1 COLON HEX 
-	{ if (!rsa_cur->dmp1) rsa_cur->dmp1 = $3; else { prsaerror ("Exponent1 already defined\n"); YYABORT; } }
-	| EXPONENT2 COLON HEX 
-	{ if (!rsa_cur->dmq1) rsa_cur->dmq1 = $3; else { prsaerror ("Exponent2 already defined\n"); YYABORT; } }
-	| COEFFICIENT COLON HEX 
-	{ if (!rsa_cur->iqmp) rsa_cur->iqmp = $3; else { prsaerror ("Coefficient already defined\n"); YYABORT; } }
-	;
-%%
-
-int prsaparse(void);
-
-int
-prsa_parse_file(struct genlist *list, char *fname, enum rsa_key_type type)
-{
-	FILE *fp = NULL;
-	int ret;
-	
-	if (!fname)
-		return -1;
-	if (type == RSA_TYPE_PRIVATE) {
-		struct stat st;
-		if (stat(fname, &st) < 0)
-			return -1;
-		if (st.st_mode & (S_IRWXG | S_IRWXO)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"Too slack permissions on private key '%s'\n", 
-				fname);
-			plog(LLV_ERROR, LOCATION, NULL,
-				"Should be at most 0600, now is 0%o\n",
-				st.st_mode & 0777);
-			return -1;
-		}
-	}
-	fp = fopen(fname, "r");
-	if (!fp)
-		return -1;
-	prsain = fp;
-	prsa_cur_lineno = 1;
-	prsa_cur_fname = fname;
-	prsa_cur_list = list;
-	prsa_cur_type = type;
-	rsa_cur = RSA_new();
-	ret = prsaparse();
-	if (rsa_cur) {
-		RSA_free(rsa_cur);
-		rsa_cur = NULL;
-	}
-	fclose (fp);
-	prsain = NULL;
-	return ret;
-}
diff --git a/src/racoon/prsa_tok.l b/src/racoon/prsa_tok.l
deleted file mode 100644
index 83e3d14..0000000
--- a/src/racoon/prsa_tok.l
+++ /dev/null
@@ -1,89 +0,0 @@
-/*	$NetBSD: prsa_tok.l,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: prsa_tok.l,v 1.2 2004/07/12 20:43:51 ludvigm Exp */
-
-%{
-/*
- * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
- * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
- * 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.
- */
-
-/* This file contains a tokeniser for FreeS/WAN-style ipsec.secrets RSA keys. */
-
-#include <string.h>
-#include <openssl/bn.h>
-#include <openssl/rsa.h>
-#include "prsa_par.h"
-
-extern int prsalex (void);
-extern int prsa_cur_lineno;
-
-%}
-
-comment		\#.*
-digit		[0-9]
-octet		(([01]?{digit}?{digit})|((2([0-4]{digit}))|(25[0-5])))
-addr4		{octet}\.{octet}\.{octet}\.{octet}
-hex		[0-9a-fA-F]
-word6		{hex}{0,4}
-base64		[A-Za-z0-9+/=]
-addr6		(::({word6}|{addr4})?|({word6}:)+:?({word6}|{addr4})?)
-%%
-\{		{ return OBRACE; }
-\}		{ return EBRACE; }
-:		{ return COLON; }
-RSA		{ return TAG_RSA; }
-PSK		{ return TAG_PSK; }
-PUB		{ return TAG_PUB; }
-0x[0-9a-fA-F]+	{ 
-			BIGNUM *bn = BN_new();
-			BN_hex2bn(&bn, prsatext+2);
-			prsalval.bn = bn;
-			return HEX;
-		}
-0s{base64}+	{
-			prsalval.chr = strdup(prsatext);
-			return BASE64;
-		}
-Modulus		{ return MODULUS; }
-PublicExponent	{ return PUBLIC_EXPONENT; }
-PrivateExponent	{ return PRIVATE_EXPONENT; }
-Prime1		{ return PRIME1; }
-Prime2		{ return PRIME2; }
-Exponent1	{ return EXPONENT1; }
-Exponent2	{ return EXPONENT2; }
-Coefficient	{ return COEFFICIENT; }
-\/		{ return SLASH; }
-{digit}+	{ prsalval.num = atol(prsatext); return NUMBER; }
-any		{ return ADDRANY; }
-{addr4}		{ prsalval.chr = strdup(prsatext); return ADDR4; }
-{addr6}		{ prsalval.chr = strdup(prsatext); return ADDR6; }
-[ \t]*		;
-\n		{ prsa_cur_lineno++; }
-\#.*		;
-%%
diff --git a/src/racoon/racoon.8 b/src/racoon/racoon.8
deleted file mode 100644
index a6d39d7..0000000
--- a/src/racoon/racoon.8
+++ /dev/null
@@ -1,155 +0,0 @@
-.\"	$NetBSD: racoon.8,v 1.10 2006/09/09 16:22:10 manu Exp $
-.\"
-.\" Id: racoon.8,v 1.4 2005/04/18 11:07:55 manubsd Exp
-.\"
-.\" 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.
-.\"
-.Dd November 20, 2000
-.Dt RACOON 8
-.Os
-.\"
-.Sh NAME
-.Nm racoon
-.Nd IKE (ISAKMP/Oakley) key management daemon
-.\"
-.Sh SYNOPSIS
-.Nm racoon
-.Bk -words
-.Op Fl 46BdFLv
-.Ek
-.Bk -words
-.Op Fl f Ar configfile
-.Ek
-.Bk -words
-.Op Fl l Ar logfile
-.Ek
-.Bk -words
-.Op Fl P Ar isakmp-natt-port
-.Ek
-.Bk -words
-.Op Fl p Ar isakmp-port
-.Ek
-.\"
-.Sh DESCRIPTION
-.Nm
-speaks the IKE
-.Pq ISAKMP/Oakley
-key management protocol,
-to establish security associations with other hosts.
-The SPD
-.Pq Security Policy Database
-in the kernel usually triggers
-.Nm .
-.Nm
-usually sends all informational messages, warnings and error messages to
-.Xr syslogd 8
-with the facility
-.Dv LOG_DAEMON
-and the priority
-.Dv LOG_INFO .
-Debugging messages are sent with the priority
-.Dv LOG_DEBUG .
-You should configure
-.Xr syslog.conf 5
-appropriately to see these messages.
-.Bl -tag -width Ds
-.It Fl 4
-.It Fl 6
-Specify the default address family for the sockets.
-.It Fl B
-Install SA(s) from the file which is specified in
-.Xr racoon.conf 5 .
-.It Fl d
-Increase the debug level.
-Multiple
-.Fl d
-arguments will increase the debug level even more.
-.It Fl F
-Run
-.Nm
-in the foreground.
-.It Fl f Ar configfile
-Use
-.Ar configfile
-as the configuration file instead of the default.
-.It Fl L
-Include
-.Ar file_name:line_number:function_name
-in all messages.
-.It Fl l Ar logfile
-Use
-.Ar logfile
-as the logging file instead of
-.Xr syslogd 8 .
-.It Fl P Ar isakmp-natt-port
-Use
-.Ar isakmp-natt-port
-for NAT-Traversal port-floating.
-The default is 4500.
-.It Fl p Ar isakmp-port
-Listen to the ISAKMP key exchange on port
-.Ar isakmp-port
-instead of the default port number, 500.
-.It Fl v
-This flag causes the packet dump be more verbose, with higher
-debugging level.
-.El
-.Pp
-.Nm
-assumes the presence of the kernel random number device
-.Xr rnd 4
-at
-.Pa /dev/urandom .
-.\"
-.Sh RETURN VALUES
-The command exits with 0 on success, and non-zero on errors.
-.\"
-.Sh FILES
-.Bl -tag -width /etc/racoon.conf -compact
-.It Pa /etc/racoon.conf
-default configuration file.
-.El
-.\"
-.Sh SEE ALSO
-.Xr ipsec 4 ,
-.Xr racoon.conf 5 ,
-.Xr syslog.conf 5 ,
-.Xr setkey 8 ,
-.Xr syslogd 8
-.\"
-.Sh HISTORY
-The
-.Nm
-command first appeared in the
-.Dq YIPS
-Yokogawa IPsec implementation.
-.\"
-.Sh SECURITY CONSIDERATIONS
-The use of IKE phase 1 aggressive mode is not recommended,
-as described in
-.Pa http://www.kb.cert.org/vuls/id/886601 .
diff --git a/src/racoon/racoon.conf.5 b/src/racoon/racoon.conf.5
deleted file mode 100644
index 9ddee80..0000000
--- a/src/racoon/racoon.conf.5
+++ /dev/null
@@ -1,1420 +0,0 @@
-.\"	$NetBSD: racoon.conf.5,v 1.34.4.3 2007/09/03 18:07:29 mgrooms Exp $
-.\"
-.\"	Id: racoon.conf.5,v 1.54 2006/08/22 18:17:17 manubsd Exp
-.\"
-.\" 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.
-.\"
-.Dd September 19, 2006
-.Dt RACOON.CONF 5
-.Os
-.\"
-.Sh NAME
-.Nm racoon.conf
-.Nd configuration file for racoon
-.\"
-.\" .Sh SYNOPSIS
-.\"
-.Sh DESCRIPTION
-.Nm
-is the configuration file for the
-.Xr racoon 8
-ISAKMP daemon.
-.Xr racoon 8
-negotiates security associations for itself (ISAKMP SA, or phase 1 SA)
-and for kernel IPsec (IPsec SA, or phase 2 SA).
-The file consists of a sequence of directives and statements.
-Each directive is composed by a tag and statements, enclosed by
-.Ql {
-and
-.Ql } .
-Lines beginning with
-.Ql #
-are comments.
-.\"
-.Ss Meta Syntax
-Keywords and special characters that the parser expects exactly are
-displayed using
-.Ic this
-font.
-Parameters are specified with
-.Ar this
-font.
-Square brackets
-.Po
-.Ql \&[
-and
-.Ql \&]
-.Pc
-are used to show optional keywords and parameters.
-Note that
-you have to pay attention when this manual is describing
-.Ar port
-numbers.
-The
-.Ar port
-number is always enclosed by
-.Ql \&[
-and
-.Ql \&] .
-In this case, the port number is not an optional keyword.
-If it is possible to omit the
-.Ar port
-number,
-the expression becomes
-.Bq Bq Ar port .
-The vertical bar
-.Pq Ql \&|
-is used to indicate
-a choice between optional parameters.
-Parentheses
-.Po
-.Ql \&(
-and
-.Ql \&)
-.Pc
-are used to group keywords and parameters when necessary.
-Major parameters are listed below.
-.Pp
-.Bl -tag -width addressx -compact
-.It Ar number
-means a hexadecimal or a decimal number.
-The former must be prefixed with
-.Ql Li 0x .
-.It Ar string
-.It Ar path
-.It Ar file
-means any string enclosed in
-.Ql \&"
-.Pq double quotes .
-.It Ar address
-means IPv6 and/or IPv4 address.
-.It Ar port
-means a TCP/UDP port number.
-The port number is always enclosed by
-.Ql \&[
-and
-.Ql \&] .
-.It Ar timeunit
-is one of following:
-.Ic sec , secs , second , seconds ,
-.Ic min , mins , minute , minutes ,
-.Ic hour , hours .
-.El
-.\"
-.Ss Privilege separation
-.Bl -tag -width Ds -compact
-.It Ic privsep { Ar statements Ic }
-Specifies privilege separation parameters.
-When enabled, these enable
-.Xr racoon 8
-to operate with an unprivileged instance doing most of the work, while
-a privileged instance takes care of performing the following operations
-as root: reading PSK and private keys, launching hook scripts, and
-validating passwords against system databases or against PAM.
-Please note that using privilege separation makes changes to the
-.Ar listen
-and
-.Ar paths
-sections ignored upon configuration reloads.
-A
-.Xr racoon 8
-restart is required if you want such changes to be taken into account.
-.Pp
-.Bl -tag -width Ds -compact
-.It Ic user Ar user ;
-The user to which the unprivileged instance of
-.Xr racoon 8 ,
-should switch.
-This can be a quoted user name or a numeric UID.
-.It Ic group Ar group ;
-The group the unprivilegied instance of
-.Xr racoon 8 ,
-should switch.
-This can be a quoted group name or a numeric GID.
-.It Ic chroot Ar path ;
-A directory to which the unprivileged instance of
-.Xr racoon 8
-should
-.Xr chroot 2 .
-This directory should hold a tree where the following files must be
-reachable:
-.Bl -tag -width Ds -compact
-.It Pa /dev/random
-.It Pa /dev/urandom
-.It The certificates
-.It The file containing the Xauth banner
-.El
-.Pp
-The PSK file, the private keys, and the hook scripts are accessed through the
-privileged instance of
-.Xr racoon 8
-and do not need to be reachable in the
-.Xr chroot 2 Ap ed
-tree.
-.El
-.El
-.Ss Path Specification
-This section specifies various paths used by racoon.
-When running in privilege separation mode,
-.Ic certificate
-and
-.Ic script
-paths are mandatory. A
-.Xr racoon 8
-restart is required if you want path changes to be taken into account.
-.Bl -tag -width Ds -compact
-.It Ic path include Ar path ;
-Specifies a path to include a file.
-See
-.Sx File Inclusion .
-.It Ic path pre_shared_key Ar file ;
-Specifies a file containing pre-shared key(s) for various ID(s).
-See
-.Sx Pre-shared key File .
-.It Ic path certificate Ar path ;
-.Xr racoon 8
-will search this directory if a certificate or certificate request is received.
-If you run with privilege separation,
-.Xr racoon 8
-will refuse to use a certificate stored outside of this directory.
-.It Ic path backupsa Ar file ;
-Specifies a file to which SA information negotiated by
-racoon should be stored.
-.Xr racoon 8
-will install SA(s) from the file when started with the
-.Fl B
-flag.
-The file is growing because
-.Xr racoon 8
-simply adds SAs to it.
-You should maintain the file manually.
-.It Ic path script Ar path ;
-.Xr racoon 8
-will search this directory for scripts hooks.
-If you run with privilege separation,
-.Xr racoon 8
-will refuse to execute a script stored outside of this directory.
-.It Ic path pidfile Ar file ;
-Specifies file where to store PID of process.
-If path starts with
-.Pa /
-it is treated as an absolute path. Otherwise, it is treated as a relative 
-path to the VARRUN directory specified at compilation time.
-Default is
-.Pa racoon.pid .
-.El
-.\"
-.Ss File Inclusion
-.Bl -tag -width Ds -compact
-.It Ic include Ar file
-Specifies other configuration files to be included.
-.El
-.\"
-.Ss Identifier Specification
-is obsolete.
-It must be defined at each
-.Ic remote
-directive.
-.\"
-.Ss Timer Specification
-.Bl -tag -width Ds -compact
-.It Ic timer { Ar statements Ic }
-This section specifies various timer values used by racoon.
-.Pp
-.Bl -tag -width Ds -compact
-.It Ic counter Ar number ;
-The maximum number of retries to send.
-The default is 5.
-.It Ic interval Ar number Ar timeunit ;
-The interval to resend, in seconds.
-The default time is 10 seconds.
-.It Ic persend Ar number ;
-The number of packets per send.
-The default is 1.
-.It Ic phase1 Ar number Ar timeunit ;
-The maximum time it should take to complete phase 1.
-The default time is 15 seconds.
-.It Ic phase2 Ar number Ar timeunit ;
-The maximum time it should take to complete phase 2.
-The default time is 10 seconds.
-.It Ic natt_keepalive Ar number Ar timeunit ;
-The interval between sending NAT-Traversal keep-alive packets.
-The default time is 20 seconds.
-Set to 0s to disable keep-alive packets.
-.El
-.El
-.\"
-.Ss Listening Port Specification
-.Bl -tag -width Ds -compact
-.It Ic listen { Ar statements Ic }
-If no
-.Ar listen
-directive is specified,
-.Xr racoon 8
-will listen on all available interface addresses.
-The following is the list of valid statements:
-.Pp
-.Bl -tag -width Ds -compact
-.\" How do I express bold brackets; `[' and `]' .
-.\" Answer: For bold brackets, do "Ic \&[ foo \&]".
-.\" Is the "Bq Ic [ Ar port ] ;" buggy ?
-.It Ic isakmp Ar address Bq Bq Ar port ;
-If this is specified,
-.Xr racoon 8
-will only listen on the defined
-.Ar address .
-The default port is 500, which is specified by IANA.
-You can provide more than one address definition.
-.It Ic isakmp_natt Ar address Bq Ar port ;
-Same as
-.Ic isakmp
-but also sets the socket options to accept UDP-encapsulated ESP traffic for
-NAT-Traversal.
-If you plan to use NAT-T, you should provide at least one address
-with port 4500, which is specified by IANA.
-There is no default.
-.It Ic strict_address ;
-Requires that all addresses for ISAKMP be bound.
-This statement will be ignored if you do not specify address definitions.
-.El
-When running in privilege separation mode, you need to restart
-.Xr racoon 8
-to have changes to the
-.Ar listen
-section taken into account.
-.Pp
-The
-.Ar listen
-section can also be used to specify the admin socket mode and ownership
-if racoon was built with support for admin port.
-.Bl -tag -width Ds -compact
-.It Ic adminsock Ar path Op Ar owner\ group\ mode ;
-The
-.Ar path ,
-.Ar owner ,
-and
-.Ar group
-values specify the socket path, owner, and group. They must be quoted.
-The defaults are
-.Pa /var/racoon/racoon.sock ,
-UID 0, and GID 0.
-.Ar mode
-is the access mode in octal. The default is 0600.
-.It Ic adminsock disabled ;
-This directive tells racoon to not listen on the admin socket.
-.El
-.El
-.\"
-.Ss Miscellaneous Global Parameters
-.Bl -tag -width Ds -compact
-.It Ic gss_id_enc Ar enctype ;
-Older versions of
-.Xr racoon 8
-used ISO-Latin-1 as the encoding of the GSS-API identifier attribute.
-For interoperability with Microsoft Windows' GSS-API authentication
-scheme, the default encoding has been changed to UTF-16LE.
-The
-.Ic gss_id_enc
-parameter allows
-.Xr racoon 8
-to be configured to use the old encoding for compatibility with existing
-.Xr racoon 8
-installations.
-The following are valid values for
-.Ar enctype :
-.Pp
-.Bl -tag -width Ds -compact
-.It Ic utf-16le
-Use UTF-16LE to encode the GSS-API identifier attribute.
-This is the default encoding.
-This encoding is compatible with Microsoft Windows.
-.It Ic latin1
-Use ISO-Latin-1 to encode the GSS-API identifier attribute.
-This is the encoding used by older versions of
-.Xr racoon 8 .
-.El
-.El
-.\"
-.Ss Remote Nodes Specifications
-.Bl -tag -width Ds -compact
-.It Xo
-.Ic remote ( Ar address | Ic anonymous )
-.Bq Bq Ar port
-.Bq Ic inherit Ar parent
-.Ic { Ar statements Ic }
-.Xc
-Specifies the IKE phase 1 parameters for each remote node.
-The default port is 500.
-If
-.Ic anonymous
-is specified, the statements will apply to any peer that does not match a
-more specific
-.Ic remote
-directive.
-.Pp
-Sections with
-.Ic inherit Ar parent
-statements (where
-.Ar parent
-is either
-.Ar address
-or a keyword
-.Ic anonymous )
-that have all values predefined to those of a given
-.Ar parent .
-In these sections it is enough to redefine only the changed parameters.
-.Pp
-The following are valid statements.
-.Pp
-.Bl -tag -width Ds -compact
-.\"
-.It Ic exchange_mode ( main | aggressive | base ) ;
-Defines the exchange mode for phase 1 when racoon is the initiator.
-It also means the acceptable exchange mode when racoon is the responder.
-More than one mode can be specified by separating them with a comma.
-All of the modes are acceptable.
-The first exchange mode is what racoon uses when it is the initiator.
-.\"
-.It Ic doi Ic ipsec_doi ;
-Means to use IPsec DOI as specified in RFC 2407.
-You can omit this statement.
-.\"
-.It Ic situation Ic identity_only ;
-Means to use SIT_IDENTITY_ONLY as specified in RFC 2407.
-You can omit this statement.
-.\"
-.It Ic identifier Ar idtype ;
-This statment is obsolete. Instead, use
-.Ic my_identifier .
-.\"
-.It Xo
-.Ic my_identifier Bq Ar qualifier
-.Ar idtype ... ;
-.Xc
-Specifies the identifier sent to the remote host
-and the type to use in the phase 1 negotiation.
-.Ic address, fqdn , user_fqdn , keyid ,
-and
-.Ic asn1dn
-can be used as an
-.Ar idtype .
-The
-.Ar qualifier
-is currently only used for
-.Ic keyid ,
-and can be either
-.Ic file
-or
-.Ic tag .
-The possible values are :
-.Bl -tag -width Ds -compact
-.It Ic my_identifier Ic address Bq Ar address ;
-The type is the IP address.
-This is the default type if you do not specify an identifier to use.
-.It Ic my_identifier Ic user_fqdn Ar string ;
-The type is a USER_FQDN (user fully-qualified domain name).
-.It Ic my_identifier Ic fqdn Ar string ;
-The type is a FQDN (fully-qualified domain name).
-.It Xo
-.Ic my_identifier Ic keyid Bq Ic file
-.Ar file ;
-.Xc
-The type is a KEY_ID, read from the file.
-.It Ic my_identifier Ic keyid Ic tag Ar string ;
-The type is a KEY_ID, specified in the quoted string.
-.It Ic my_identifier Ic asn1dn Bq Ar string ;
-The type is an ASN.1 distinguished name.
-If
-.Ar string
-is omitted,
-.Xr racoon 8
-will get the DN from the Subject field in the certificate.
-.El
-.\"
-.It Ic xauth_login Bq Ar string ;
-Specifies the login to use in client-side Hybrid authentication.
-It is available only if
-.Xr racoon 8
-has been built with this option.
-The associated password is looked up in the pre-shared key files,
-using the login
-.Ic string
-as the key id.
-.\"
-.It Ic peers_identifier Ar idtype ... ;
-Specifies the peer's identifier to be received.
-If it is not defined then
-.Xr racoon 8
-will not verify the peer's identifier in ID payload transmitted from the peer.
-If it is defined, the behavior of the verification depends on the flag of
-.Ic verify_identifier .
-The usage of
-.Ar idtype
-is the same as
-.Ic my_identifier
-except that the individual component values of an
-.Ic asn1dn
-identifier may specified as
-.Ic *
-to match any value (e.g. "C=XX, O=MyOrg, OU=*, CN=Mine").
-Alternative acceptable peer identifiers may be specified by repeating the
-.Ic peers_identifier
-statement.
-.\"
-.It Ic verify_identifier (on | off) ;
-If you want to verify the peer's identifier,
-set this to on.
-In this case, if the value defined by
-.Ic peers_identifier
-is not the same as the peer's identifier in the ID payload,
-the negotiation will fail.
-The default is off.
-.\"
-.It Ic certificate_type Ar certspec ;
-Specifies a certificate specification.
-.Ar certspec
-is one of followings:
-.Bl -tag -width Ds -compact
-.It Ic x509 Ar certfile Ar privkeyfile ;
-.Ar certfile
-means a file name of a certificate.
-.Ar privkeyfile
-means a file name of a secret key.
-.El
-.Bl -tag -width Ds -compact
-.It Ic plain_rsa Ar privkeyfile ;
-.Ar privkeyfile
-means a file name of a private key generated by plainrsa-gen(8).  Required
-for RSA authentication.
-.El
-.It Ic ca_type Ar cacertspec ;
-Specifies a root certificate authority specification.
-.Ar cacertspec
-is one of followings:
-.Bl -tag -width Ds -compact
-.It Ic x509 Ar cacertfile ;
-.Ar cacertfile
-means a file name of the root certificate authority.
-Default is
-.Pa /etc/openssl/cert.pem
-.El
-.\"
-.It Ic mode_cfg (on | off) ;
-Gather network information through ISAKMP mode configuration.
-Default is off.
-.\"
-.It Ic weak_phase1_check (on | off) ;
-Tells racoon to act on unencrypted deletion messages during phase 1.
-This is a small security risk, so the default is off, meaning that
-racoon will keep on trying to establish a connection even if the
-user credentials are wrong, for instance.
-.\"
-.It Ic peers_certfile ( dnssec | Ar certfile | Ic plain_rsa Ar pubkeyfile ) ;
-If
-.Ic dnssec
-is defined,
-.Xr racoon 8
-will ignore the CERT payload from the peer,
-and try to get the peer's certificate from DNS instead.
-If
-.Ar certfile
-is defined,
-.Xr racoon 8
-will ignore the CERT payload from the peer,
-and will use this certificate as the peer's certificate.
-If
-.Ic plain_rsa
-is defined,
-.Xr racoon 8
-will expect
-.Ar pubkeyfile
-to be the peer's public key that was generated
-by plainrsa-gen(8).
-.\"
-.It Ic script Ar script Ic phase1_up
-.It Ic script Ar script Ic phase1_down
-Shell scripts that get executed when a phase 1 SA goes up or down.
-Both scripts get either
-.Ic phase1_up
-or
-.Ic phase1_down
-as first argument, and the following
-variables are set in their environment:
-.Bl -tag -width Ds -compact
-.It Ev LOCAL_ADDR
-The local address of the phase 1 SA.
-.It Ev LOCAL_PORT
-The local port used for IKE for the phase 1 SA.
-.It Ev REMOTE_ADDR
-The remote address of the phase 1 SA.
-.It Ev REMOTE_PORT
-The remote port used for IKE for the phase 1 SA.
-.El
-The following variables are only set if
-.Ic mode_cfg
-was enabled:
-.Bl -tag -width Ds -compact
-.It INTERNAL_ADDR4
-An IPv4 internal address obtained by ISAKMP mode config.
-.It INTERNAL_NETMASK4
-An IPv4 internal netmask obtained by ISAKMP mode config.
-.It INTERNAL_CIDR4
-An IPv4 internal netmask obtained by ISAKMP mode config, in CIDR notation.
-.It INTERNAL_DNS4
-The first internal DNS server IPv4 address obtained by ISAKMP mode config.
-.It INTERNAL_DNS4_LIST
-A list of internal DNS servers IPv4 address obtained by ISAKMP mode config,
-separated by spaces.
-.It INTERNAL_WINS4
-The first internal WINS server IPv4 address obtained by ISAKMP mode config.
-.It INTERNAL_WINS4_LIST
-A list of internal WINS servers IPv4 address obtained by ISAKMP mode config,
-separated by spaces.
-.It SPLIT_INCLUDE
-The space separated list of IPv4 addresses and masks (address slash mask)
-that define the networks to be encrypted (as opposed to the default where
-all the traffic should be encrypted) ; obtained by ISAKMP mode config ;
-SPLIT_INCLUDE and SPLIT_LOCAL are mutually exclusive.
-.It SPLIT_LOCAL
-The space separated list of IPv4 addresses and masks (address slash mask)
-that define the networks to be considered local, and thus excluded from the
-tunnels ; obtained by ISAKMP mode config.
-.It DEFAULT_DOMAIN
-The DNS default domain name obtained by ISAKMP mode config.
-.El
-.\"
-.\"
-.It Ic send_cert (on | off) ;
-If you do not want to send a certificate, set this to off.
-The default is on.
-.\"
-.It Ic send_cr (on | off) ;
-If you do not want to send a certificate request, set this to off.
-The default is on.
-.\"
-.It Ic verify_cert (on | off) ;
-By default, the identifier sent by the remote host (as specified in its
-.Ic my_identifier
-statement) is compared with the credentials in the certificate
-used to authenticate the remote host as follows:
-.Bl -tag -width Ds -compact
-.It Type Ic asn1dn:
-The entire certificate subject name is compared with the identifier,
-e.g. "C=XX, O=YY, ...".
-.It Type Ic address, fqdn, or user_fqdn:
-The certificate's subjectAltName is compared with the identifier.
-.El
-If the two do not match the negotiation will fail.
-If you do not want to verify the identifier using the peer's certificate,
-set this to off.
-.\"
-.It Ic lifetime time Ar number Ar timeunit ;
-Define a lifetime of a certain time
-which will be proposed in the phase 1 negotiations.
-Any proposal will be accepted, and the attribute(s) will not be proposed to
-the peer if you do not specify it (them).
-They can be individually specified in each proposal.
-.\"
-.It Ic ike_frag (on | off | force) ;
-Enable receiver-side IKE fragmentation if
-.Xr racoon 8
-has been built with this feature.
-If set to on, racoon will advertise
-itself as being capable of receiving packets split by IKE fragmentation.
-This extension is there to work around broken firewalls that do not
-work with fragmented UDP packets.
-IKE fragmentation is always enabled on the sender-side, and it is
-used if the peer advertises itself as IKE fragmentation capable.
-By selecting force, IKE Fragmentation will
-be used when racoon is acting as the initiator even before the remote
-peer has advertised itself as IKE fragmentation capable.
-.\"
-.It Ic esp_frag Ar fraglen ;
-This option is only relevant if you use NAT traversal in tunnel mode.
-Its purpose is to work around broken DSL routers that reject UDP
-fragments, by fragmenting the IP packets before ESP encapsulation.
-The result is ESP over UDP of fragmented packets instead of fragmented
-ESP over UDP packets (i.e., IP:UDP:ESP:frag(IP) instead of
-frag(IP:UDP:ESP:IP)).
-.Ar fraglen
-is the maximum size of the fragments.
-552 should work anywhere,
-but the higher
-.Ar fraglen
-is, the better the performance.
-.Pp
-Note that because PMTU discovery is broken on many sites, you will
-have to use MSS clamping if you want TCP to work correctly.
-.\"
-.It Ic initial_contact (on | off) ;
-Enable this to send an INITIAL-CONTACT message.
-The default value is
-.Ic on .
-This message is useful only when the responder implementation chooses an
-old SA when there are multiple SAs with different established time and the
-initiator reboots.
-If racoon did not send the message,
-the responder would use an old SA even when a new SA was established.
-For systems that use a KAME derived IPSEC stack, the
-.Xr sysctl 8
-variable net.key.preferred_oldsa can be used to control this preference.
-When the value is zero, the stack always uses a new SA.
-.\"
-.It Ic passive (on | off) ;
-If you do not want to initiate the negotiation, set this to on.
-The default value is
-.Ic off .
-It is useful for a server.
-.\"
-.It Ic proposal_check Ar level ;
-Specifies the action of lifetime length, key length and PFS of the phase 2
-selection on the responder side, and the action of lifetime check in
-phase 1.
-The default level is
-.Ic strict .
-If the
-.Ar level
-is:
-.Bl -tag -width Ds -compact
-.It Ic obey
-The responder will obey the initiator anytime.
-.It Ic strict
-If the responder's lifetime length is longer than the initiator's or
-the responder's key length is shorter than the initiator's,
-the responder will use the initiator's value.
-Otherwise, the proposal will be rejected.
-If PFS is not required by the responder, the responder will obey the proposal.
-If PFS is required by both sides and the responder's group is not equal to
-the initiator's, then the responder will reject the proposal.
-.It Ic claim
-If the responder's lifetime length is longer than the initiator's or
-the responder's key length is shorter than the initiator's,
-the responder will use the initiator's value.
-If the responder's lifetime length is shorter than the initiator's,
-the responder uses its own length AND sends a RESPONDER-LIFETIME notify
-message to an initiator in the case of lifetime (phase 2 only).
-For PFS, this directive behaves the same as
-.Ic strict .
-.It Ic exact
-If the initiator's lifetime or key length is not equal to the responder's,
-the responder will reject the proposal.
-If PFS is required by both sides and the responder's group is not equal to
-the initiator's, then the responder will reject the proposal.
-.El
-.\"
-.It Ic support_proxy (on | off) ;
-If this value is set to on, then both values of ID payloads in the
-phase 2 exchange are always used as the addresses of end-point of
-IPsec-SAs.
-The default is off.
-.\"
-.It Ic generate_policy (on | off | require | unique) ;
-This directive is for the responder.
-Therefore you should set
-.Ic passive
-to on in order that
-.Xr racoon 8
-only becomes a responder.
-If the responder does not have any policy in SPD during phase 2
-negotiation, and the directive is set to on, then
-.Xr racoon 8
-will choose the first proposal in the
-SA payload from the initiator, and generate policy entries from the proposal.
-It is useful to negotiate with clients whose IP address is allocated
-dynamically.
-Note that an inappropriate policy might be installed into the responder's SPD
-by the initiator,
-so other communications might fail if such policies are installed
-due to a policy mismatch between the initiator and the responder.
-.Ic on
-and
-.Ic require
-values mean the same thing (generate a require policy).
-.Ic unique
-tells racoon to set up unique policies, with a monotoning increasing
-reqid number (between 1 and IPSEC_MANUAL_REQID_MAX).
-This directive is ignored in the initiator case.
-The default value is
-.Ic off .
-.\"
-.\"
-.It Ic nat_traversal (on | off | force) ;
-This directive enables use of the NAT-Traversal IPsec extension
-(NAT-T).
-NAT-T allows one or both peers to reside behind a NAT gateway (i.e.,
-doing address- or port-translation).
-If a NAT gateway is detected during the phase 1 handshake, racoon will
-attempt to negotiate the use of NAT-T with the remote peer.
-If the negotiation succeeds, all ESP and AH packets for the given connection
-will be encapsulated into UDP datagrams (port 4500, by default).
-Possible values are:
-.Bl -tag -width Ds -compact
-.It Ic on
-NAT-T is used when a NAT gateway is detected between the peers.
-.It Ic off
-NAT-T is not proposed/accepted.
-This is the default.
-.It Ic force
-NAT-T is used regardless of whether a NAT gateway is detected between the
-peers or not.
-.El
-Please note that NAT-T support is a compile-time option.
-Although it is enabled in the source distribution by default, it
-may not be available in your particular build.
-In that case you will get a
-warning when using any NAT-T related config options.
-.\"
-.It Ic dpd_delay Ar delay ;
-This option activates the DPD and sets the time (in seconds) allowed
-between 2 proof of liveliness requests.
-The default value is
-.Ic 0 ,
-which disables DPD monitoring, but still negotiates DPD support.
-.\"
-.It Ic dpd_retry Ar delay ;
-If
-.Ic dpd_delay
-is set, this sets the delay (in seconds) to wait for a proof of
-liveliness before considering it as failed and send another request.
-The default value is
-.Ic 5 .
-.\"
-.It Ic dpd_maxfail Ar number ;
-If
-.Ic dpd_delay
-is set, this sets the maximum number of liveliness proofs to request
-(without reply) before considering the peer is dead.
-The default value is
-.Ic 5 .
-.\"
-.It Ic nonce_size Ar number ;
-define the byte size of nonce value.
-Racoon can send any value although
-RFC2409 specifies that the value MUST be between 8 and 256 bytes.
-The default size is 16 bytes.
-.\"
-.It Ic ph1id Ar number ;
-An optionnal number to identify the remote proposal and to link it
-only with sainfos who have the same number.
-Defaults to 0.
-.\"
-.It Xo
-.Ic proposal { Ar sub-substatements Ic }
-.Xc
-.Bl -tag -width Ds -compact
-.\"
-.It Ic encryption_algorithm Ar algorithm ;
-Specifies the encryption algorithm used for the phase 1 negotiation.
-This directive must be defined.
-.Ar algorithm
-is one of following:
-.Ic des, 3des, blowfish, cast128, aes, camellia
-.\".Ic rc5 , idea
-for Oakley.
-For other transforms, this statement should not be used.
-.\"
-.It Ic hash_algorithm Ar algorithm ;
-Defines the hash algorithm used for the phase 1 negotiation.
-This directive must be defined.
-.Ar algorithm
-is one of following:
-.Ic md5, sha1, sha256, sha384, sha512
-for Oakley.
-.\"
-.It Ic authentication_method Ar type ;
-Defines the authentication method used for the phase 1 negotiation.
-This directive must be defined.
-.Ar type
-is one of:
-.Ic pre_shared_key , rsasig
-(for plain RSA authentication),
-.Ic gssapi_krb , hybrid_rsa_server ,
-.Ic hybrid_rsa_client , xauth_rsa_server , xauth_rsa_client , xauth_psk_server
-or
-.Ic xauth_psk_client .
-.\"
-.It Ic dh_group Ar group ;
-Defines the group used for the Diffie-Hellman exponentiations.
-This directive must be defined.
-.Ar group
-is one of following:
-.Ic modp768 , modp1024 , modp1536 ,
-.Ic modp2048 , modp3072 , modp4096 ,
-.Ic modp6144 , modp8192 .
-Or you can define 1, 2, 5, 14, 15, 16, 17, or 18 as the DH group number.
-When you want to use aggressive mode,
-you must define the same DH group in each proposal.
-.It Ic lifetime time Ar number Ar timeunit ;
-Defines the lifetime of the phase 1 SA proposal.
-Refer to the description of the
-.Ic lifetime
-directive defined in the
-.Ic remote
-directive.
-.It Ic gss_id Ar string ;
-Defines the GSS-API endpoint name, to be included as an attribute in the SA,
-if the
-.Ic gssapi_krb
-authentication method is used.
-If this is not defined, the default value of
-.Ql host/hostname
-is used, where hostname is the value returned by the
-.Xr hostname 1
-command.
-.El
-.El
-.El
-.\"
-.Ss Policy Specifications
-The policy directive is obsolete, policies are now in the SPD.
-.Xr racoon 8
-will obey the policy configured into the kernel by
-.Xr setkey 8 ,
-and will construct phase 2 proposals by combining
-.Ic sainfo
-specifications in
-.Nm ,
-and policies in the kernel.
-.\"
-.Ss Sainfo Specifications
-.Bl -tag -width Ds -compact
-.It Xo
-.Ic sainfo ( Ar source_id destination_id | Ar source_id Ic anonymous | Ic anonymous Ar destination_id | Ic anonymous ) [ from Ar idtype [ Ar string ] ] [ Ic group Ar string ]
-.Ic { Ar statements Ic }
-.Xc
-defines the parameters of the IKE phase 2 (IPsec-SA establishment).
-.Ar source_id
-and
-.Ar destination_id
-are constructed like:
-.Pp
-.Ic address Ar address
-.Bq Ic / Ar prefix
-.Bq Ic [ Ar port ]
-.Ar ul_proto
-.Pp
-or
-.Pp
-.Ic subnet Ar address
-.Bq Ic / Ar prefix
-.Bq Ic [ Ar port ]
-.Ar ul_proto
-.Pp
-or
-.Pp
-.Ar idtype Ar string
-.Pp
-An id string should be expressed to match the exact value of an ID payload
-(source is the local end, destination is the remote end).
-This is not like a filter rule.
-For example, if you define 3ffe:501:4819::/48 as
-.Ar source_id .
-3ffe:501:4819:1000:/64 will not match.
-.Pp
-In the case of a longest prefix (selecting a single host),
-.Ar address
-instructs to send ID type of ADDRESS while
-.Ar subnet
-instructs to send ID type of SUBNET.
-Otherwise, these instructions are identical.
-.Pp
-The group keyword allows an XAuth group membership check to be performed
-for this sainfo section.
-When the mode_cfg auth source is set to
-.Ic system
-or
-.Ic ldap ,
-the XAuth user is verified to be a member of the specified group
-before allowing a matching SA to be negotiated.
-.Pp
-.Bl -tag -width Ds -compact
-.\"
-.It Ic pfs_group Ar group ;
-define the group of Diffie-Hellman exponentiations.
-If you do not require PFS then you can omit this directive.
-Any proposal will be accepted if you do not specify one.
-.Ar group
-is one of following:
-.Ic modp768 , modp1024 , modp1536 ,
-.Ic modp2048 , modp3072 , modp4096 ,
-.Ic modp6144 , modp8192 .
-Or you can define 1, 2, 5, 14, 15, 16, 17, or 18 as the DH group number.
-.\"
-.It Ic lifetime time Ar number Ar timeunit ;
-define how long an IPsec-SA will be used, in timeunits.
-Any proposal will be accepted, and no attribute(s) will be proposed to
-the peer if you do not specify it(them).
-See the
-.Ic proposal_check
-directive.
-.\"
-.It Ic remoteid Ar number ;
-Sainfos will only be used if their remoteid matches the ph1id of the
-remote section used for phase 1.
-Defaults to 0, which is also the default for ph1id.
-.\"
-.It Ic my_identifier Ar idtype ... ;
-is obsolete.
-It does not make sense to specify an identifier in the phase 2.
-.El
-.\"
-.Pp
-.Xr racoon 8
-does not have a list of security protocols to be negotiated.
-The list of security protocols are passed by SPD in the kernel.
-Therefore you have to define all of the potential algorithms
-in the phase 2 proposals even if there are algorithms which will not be used.
-These algorithms are define by using the following three directives,
-with a single comma as the separator.
-For algorithms that can take variable-length keys, algorithm names
-can be followed by a key length, like
-.Dq Li blowfish 448 .
-.Xr racoon 8
-will compute the actual phase 2 proposals by computing
-the permutation of the specified algorithms,
-and then combining them with the security protocol specified by the SPD.
-For example, if
-.Ic des , 3des , hmac_md5 ,
-and
-.Ic hmac_sha1
-are specified as algorithms, we have four combinations for use with ESP,
-and two for AH.
-Then, based on the SPD settings,
-.Xr racoon 8
-will construct the actual proposals.
-If the SPD entry asks for ESP only, there will be 4 proposals.
-If it asks for both AH and ESP, there will be 8 proposals.
-Note that the kernel may not support the algorithm you have specified.
-.\"
-.Bl -tag -width Ds -compact
-.It Ic encryption_algorithm Ar algorithms ;
-.Ic des , 3des , des_iv64 , des_iv32 ,
-.Ic rc5 , rc4 , idea , 3idea ,
-.Ic cast128 , blowfish , null_enc ,
-.Ic twofish , rijndael , aes , camellia
-.Pq used with ESP
-.\"
-.It Ic authentication_algorithm Ar algorithms ;
-.Ic des , 3des , des_iv64 , des_iv32 ,
-.Ic hmac_md5 , hmac_sha1 , hmac_sha256, hmac_sha384, hmac_sha512, non_auth
-.Pq used with ESP authentication and AH
-.\"
-.It Ic compression_algorithm Ar algorithms ;
-.Ic deflate
-.Pq used with IPComp
-.El
-.El
-.\"
-.Ss Logging level
-.Bl -tag -width Ds -compact
-.It Ic log Ar level ;
-Defines the logging level.
-.Ar level
-is one of following:
-.Ic error , warning , notify , info , debug
-and
-.Ic debug2 .
-The default is
-.Ic info .
-If you set the logging level too high on slower machines,
-IKE negotiation can fail due to timing constraint changes.
-.El
-.\"
-.Ss Specifies the way to pad
-.Bl -tag -width Ds -compact
-.It Ic padding { Ar statements Ic }
-specifies the padding format.
-The following are valid statements:
-.Bl -tag -width Ds -compact
-.It Ic randomize (on | off) ;
-Enables the use of a randomized value for padding.
-The default is on.
-.It Ic randomize_length (on | off) ;
-The pad length will be random.
-The default is off.
-.It Ic maximum_length Ar number ;
-Defines a maximum padding length.
-If
-.Ic randomize_length
-is off, this is ignored.
-The default is 20 bytes.
-.It Ic exclusive_tail (on | off) ;
-Means to put the number of pad bytes minus one into the last part
-of the padding.
-The default is on.
-.It Ic strict_check (on | off) ;
-Means to constrain the peer to set the number of pad bytes.
-The default is off.
-.El
-.El
-.Ss ISAKMP mode configuration settings
-.Bl -tag -width Ds -compact
-.It Ic mode_cfg { Ar statements Ic }
-Defines the information to return for remote hosts' ISAKMP mode config
-requests.
-Also defines the authentication source for remote peers
-authenticating through Xauth.
-.Pp
-The following are valid statements:
-.Bl -tag -width Ds -compact
-.It Ic auth_source (system | radius | pam | ldap) ;
-Specifies the source for authentication of users through Xauth.
-.Ar system
-means to use the Unix user database.
-This is the default.
-.Ar radius
-means to use a RADIUS server.
-It works only if
-.Xr racoon 8
-was built with libradius support. Radius configuration is hanlded by
-.Xr radius.conf 5 .
-.Ar pam
-means to use PAM.
-It works only if
-.Xr racoon 8
-was built with libpam support.
-.Ar ldap
-means to use LDAP.
-It works only if
-.Xr racoon 8
-was built with libldap support. LDAP configuration is handled by
-statements in the
-.Ic ldapcfg
-section.
-.It Ic auth_groups Ar "group1", ... ;
-Specifies the group memberships for Xauth in quoted group name strings.
-When defined, the authenticating user must be a member of at least one
-group for Xauth to succeed.
-.It Ic group_source (system | ldap) ;
-Specifies the source for group validataion of users through Xauth.
-.Ar system
-means to use the Unix user database.
-This is the default.
-.Ar ldap
-means to use LDAP.
-It works only if
-.Xr racoon 8
-was built with libldap support and requires LDAP authentication.
-LDAP configuration is handled by statements in the
-.Ic ldapcfg
-section.
-.It Ic conf_source (local | radius | ldap) ;
-Specifies the source for IP addresses and netmask allocated through ISAKMP
-mode config.
-.Ar local
-means to use the local IP pool defined by the
-.Ic network4
-and
-.Ic pool_size
-statements.
-This is the default.
-.Ar radius
-means to use a RADIUS server.
-It works only if
-.Xr racoon 8
-was built with libradius support and requires RADIUS authentiation.
-RADIUS configuration is handled by
-.Xr radius.conf 5 .
-.Ar ldap
-means to use an LDAP server.
-It works only if
-.Xr racoon 8
-was built with libldap support and requires LDAP authentication.
-LDAP configuration is handled by
-statements in the
-.Ic ldapcfg
-section.
-.It Ic accounting (none | system | radius | pam) ;
-Enables or disables accounting for Xauth logins and logouts.
-The default is
-.Ar none
-which disable accounting.
-Specifying
-.Ar system
-enables system accounting through
-.Xr utmp 5 .
-Specifying
-.Ar radius
-enables RADIUS accounting.
-It works only if
-.Xr racoon 8
-was built with libradius support and requires RADIUS authentication.
-RADIUS configuration is handled by
-.Xr radius.conf 5 .
-Specifying
-.Ar pam
-enables PAM accounting.
-It works only if
-.Xr racoon 8
-was build with libpam support and requires PAM authentication.
-.It Ic pool_size Ar size
-Specify the size of the IP address pool, either local or allocated
-through RADIUS.
-.Ic conf_source
-selects the local pool or the RADIUS configuration, but in both
-configurations, you cannot have more than
-.Ar size
-users connected at the same time.
-The default is 255.
-.It Ic network4 Ar address ;
-.It Ic netmask4 Ar address ;
-The local IP pool base address and network mask from which dynamically
-allocated IPv4 addresses should be taken.
-This is used if
-.Ic conf_source
-is set to
-.Ar local
-or if the RADIUS server returned
-.Ar 255.255.255.254 .
-Default is
-.Ar 0.0.0.0/0.0.0.0 .
-.It Ic dns4 Ar addresses ;
-A list of IPv4 addresses for DNS servers, separated by commas, or on multiple
-.Ic dns4
-lines.
-.It Ic wins4 Ar addresses ;
-A list of IPv4 address for WINS servers. The keyword
-.It nbns4
-can also be used as an alias for
-.It wins4 .
-.It Ic split_network (include | local_lan) Ar network/mask, ...
-The network configuration to send, in cidr notation (e.g. 192.168.1.0/24).
-If
-.Ic include
-is specified, the tunnel should be only used to encrypt the indicated
-destinations ; otherwise, if
-.Ic local_lan
-is used, everything will pass through the tunnel but those destinations.
-.It Ic default_domain Ar domain ;
-The default DNS domain to send.
-.It Ic split_dns Ar "domain", ...
-The split dns configuration to send, in quoted domain name strings.
-This list can be used to describe a list of domain names for which
-a peer should query a modecfg assigned dns server.
-DNS queries for all other domains would be handled locally.
-(Cisco VPN client only).
-.It Ic banner Ar path ;
-The path of a file displayed on the client at connection time.
-Default is
-.Ar /etc/motd .
-.It Ic auth_throttle Ar delay ;
-On each failed Xauth authentication attempt, refuse new attempts for a set
-.Ar delay
-of seconds.
-This is to avoid dictionary attacks on Xauth passwords.
-Default is one second.
-Set to zero to disable authentication delay.
-.It Ic pfs_group Ar group ;
-Sets the PFS group used in the client proposal (Cisco VPN client only).
-Default is 0.
-.It Ic save_passwd (on | off) ;
-Allow the client to save the Xauth password (Cisco VPN client only).
-Default is off.
-.El
-.El
-.Ss Ldap configuration settings
-.Bl -tag -width Ds -compact
-.It Ic ldapcfg { Ar statements Ic }
-Defines the parameters that will be used to communicate with an ldap
-server for
-.Ic xauth
-authentication.
-.Pp
-The following are valid statements:
-.Bl -tag -width Ds -compact
-.It Ic version (2 | 3) ;
-The ldap protocol version used to communicate with the server.
-The default is
-.Ic 3 .
-.It Ic host Ar (hostname | address) ;
-The host name or ip address of the ldap server.
-The default is
-.Ic localhost .
-.It Ic port Ar number;
-The port that the ldap server is configured to listen on.
-The default is
-.Ic 389 .
-.It Ic base Ar distinguished name;
-The ldap search base.
-This option has no default value.
-.It Ic subtree (on | off) ;
-Use the subtree ldap search scope.
-Otherwise, use the one level search scope.
-The default is
-.Ic off .
-.It Ic bind_dn Ar distinguised name;
-The user dn used to optionaly bind as before performing ldap search operations.
-If this option is not specified, anonymous binds are used.
-.It Ic bind_pw Ar string;
-The password used when binding as
-.Ic bind_dn .
-.It Ic attr_user Ar attribute name;
-The attribute used to specify a users name in an ldap directory.
-For example,
-if a user dn is "cn=jdoe,dc=my,dc=net" then the attribute would be "cn".
-The default value is
-.Ic cn .
-.It Ic attr_addr Ar attribute name;
-.It Ic attr_mask Ar attribute name;
-The attributes used to specify a users network address and subnet mask in an
-ldap directory.
-These values are forwarded during mode_cfg negotiation when
-the conf_source is set to ldap.
-The default values are
-.Ic racoon-address
-and
-.Ic racoon-netmask .
-.It Ic attr_group Ar attribute name;
-The attribute used to specify a group name in an ldap directory.
-For example,
-if a group dn is "cn=users,dc=my,dc=net" then the attribute would be "cn".
-The default value is
-.Ic cn .
-.It Ic attr_member Ar attribute name;
-The attribute used to specify group membership in an ldap directory.
-The default value is
-.Ic member .
-.El
-.El
-.Ss Special directives
-.Bl -tag -width Ds -compact
-.It Ic complex_bundle (on | off) ;
-defines the interpretation of proposal in the case of SA bundle.
-Normally
-.Dq IP AH ESP IP payload
-is proposed as
-.Dq AH tunnel and ESP tunnel .
-The interpretation is more common to other IKE implementations, however,
-it allows very limited set of combinations for proposals.
-With the option enabled, it will be proposed as
-.Dq AH transport and ESP tunnel .
-The default value is
-.Ic off .
-.El
-.\"
-.Ss Pre-shared key File
-The pre-shared key file defines pairs of identifiers and corresponding
-shared secret keys which are used in the pre-shared key authentication
-method in phase 1.
-The pair in each line is separated by some number of blanks and/or tab
-characters like in the
-.Xr hosts 5
-file.
-Key can include blanks because everything after the first blanks
-is interpreted as the secret key.
-Lines starting with
-.Ql #
-are ignored.
-Keys which start with
-.Ql 0x
-are interpreted as hexadecimal strings.
-Note that the file must be owned by the user ID running
-.Xr racoon 8
-.Pq usually the privileged user ,
-and must not be accessible by others.
-.\"
-.Sh EXAMPLES
-The following shows how the remote directive should be configured.
-.Bd -literal -offset
-path pre_shared_key "/usr/local/v6/etc/psk.txt" ;
-remote anonymous
-{
-	exchange_mode aggressive,main,base;
-	lifetime time 24 hour;
-	proposal {
-		encryption_algorithm 3des;
-		hash_algorithm sha1;
-		authentication_method pre_shared_key;
-		dh_group 2;
-	}
-}
-
-sainfo anonymous
-{
-	pfs_group 2;
-	lifetime time 12 hour ;
-	encryption_algorithm 3des, blowfish 448, twofish, rijndael ;
-	authentication_algorithm hmac_sha1, hmac_md5 ;
-	compression_algorithm deflate ;
-}
-.Ed
-.Pp
-If you are configuring plain RSA authentication, the remote directive
-should look like the following:
-.Bd -literal -offset
-path certificate "/usr/local/v6/etc" ;
-remote anonymous
-{
-        exchange_mode main,base ;
-        lifetime time 12 hour ;
-        certificate_type plain_rsa "/usr/local/v6/etc/myrsakey.priv";
-        peers_certfile plain_rsa "/usr/local/v6/etc/yourrsakey.pub";
-        proposal {
-                        encryption_algorithm aes ;
-                        hash_algorithm sha1 ;
-                        authentication_method rsasig ;
-                        dh_group 2 ;
-        }
-}
-.Ed
-.Pp
-The following is a sample for the pre-shared key file.
-.Bd -literal -offset
-10.160.94.3     mekmitasdigoat
-172.16.1.133    0x12345678
-194.100.55.1    whatcertificatereally
-3ffe:501:410:ffff:200:86ff:fe05:80fa    mekmitasdigoat
-3ffe:501:410:ffff:210:4bff:fea2:8baa    mekmitasdigoat
-foo@kame.net    mekmitasdigoat
-foo.kame.net    hoge
-.Ed
-.\"
-.Sh SEE ALSO
-.Xr racoon 8 ,
-.Xr racoonctl 8 ,
-.Xr setkey 8
-.\"
-.Sh HISTORY
-The
-.Nm
-configuration file first appeared in the
-.Dq YIPS
-Yokogawa IPsec implementation.
-.\"
-.Sh BUGS
-Some statements may not be handled by
-.Xr racoon 8
-yet.
-.Pp
-Diffie-Hellman computation can take a very long time, and may cause
-unwanted timeouts, specifically when a large D-H group is used.
-.\"
-.Sh SECURITY CONSIDERATIONS
-The use of IKE phase 1 aggressive mode is not recommended,
-as described in
-.Li http://www.kb.cert.org/vuls/id/886601 .
diff --git a/src/racoon/racoonctl.8 b/src/racoon/racoonctl.8
deleted file mode 100644
index b27b188..0000000
--- a/src/racoon/racoonctl.8
+++ /dev/null
@@ -1,199 +0,0 @@
-.\"	$NetBSD: racoonctl.8,v 1.13 2006/09/09 16:22:10 manu Exp $
-.\"
-.\" Id: racoonctl.8,v 1.6 2006/05/07 21:32:59 manubsd Exp
-.\"
-.\" Copyright (C) 2004 Emmanuel Dreyfus
-.\" 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.
-.\"
-.Dd November 16, 2004
-.Dt RACOONCTL 8
-.Os
-.\"
-.Sh NAME
-.Nm racoonctl
-.Nd racoon administrative control tool
-.\"
-.Sh SYNOPSIS
-.Nm
-reload-config
-.Nm
-show-schedule
-.Nm
-.Op Fl l Op Fl l
-show-sa
-.Op isakmp|esp|ah|ipsec
-.Nm
-flush-sa
-.Op isakmp|esp|ah|ipsec
-.Nm
-delete-sa
-.Ar saopts
-.Nm
-establish-sa
-.Op Fl u Ar identity
-.Ar saopts
-.Nm
-vpn-connect
-.Op Fl u identity
-.Ar vpn_gateway
-.Nm
-vpn-disconnect
-.Ar vpn_gateway
-.Nm
-show-event
-.Op Fl l
-.Nm
-logout-user
-.Ar login
-.\"
-.Sh DESCRIPTION
-.Nm
-is used to control
-.Xr racoon 8
-operation, if ipsec-tools was configured with adminport support.
-Communication between
-.Nm
-and
-.Xr racoon 8
-is done through a UNIX socket.
-By changing the default mode and ownership
-of the socket, you can allow non-root users to alter
-.Xr racoon 8
-behavior, so do that with caution.
-.Pp
-The following commands are available:
-.Bl -tag -width Ds
-.It reload-config
-This should cause
-.Xr racoon 8
-to reload its configuration file.
-.It show-schedule
-Unknown command.
-.It show-sa Op isakmp|esp|ah|ipsec
-Dump the SA: All the SAs if no SA class is provided, or either ISAKMP SAs,
-IPsec ESP SAs, IPsec AH SAs, or all IPsec SAs.
-Use
-.Fl l
-to increase verbosity.
-.It flush-sa Op isakmp|esp|ah|ipsec
-is used to flush all SAs if no SA class is provided, or a class of SAs,
-either ISAKMP SAs, IPsec ESP SAs, IPsec AH SAs, or all IPsec SAs.
-.It Xo establish-sa
-.Oo Fl u Ar username
-.Oc Ar saopts
-.Xc
-Establish an SA, either an ISAKMP SA, IPsec ESP SA, or IPsec AH SA.
-The optional
-.Fl u Ar username
-can be used when establishing an ISAKMP SA while hybrid auth is in use.
-.Nm
-will prompt you for the password associated with
-.Ar username
-and these credentials will be used in the Xauth exchange.
-.Pp
-.Ar saopts
-has the following format:
-.Bl -tag -width Bl
-.It isakmp {inet|inet6} Ar src Ar dst
-.It {esp|ah} {inet|inet6} Ar src/prefixlen/port Ar dst/prefixlen/port
-{icmp|tcp|udp|any}
-.El
-.It Xo vpn-connect
-.Oo Fl u Ar username
-.Oc Ar vpn_gateway
-.Xc
-This is a particular case of the previous command.
-It will establish an ISAKMP SA with
-.Ar vpn_gateway .
-.It delete-sa Ar saopts
-Delete an SA, either an ISAKMP SA, IPsec ESP SA, or IPsec AH SA.
-.It vpn-disconnect Ar vpn_gateway
-This is a particular case of the previous command.
-It will kill all SAs associated with
-.Ar vpn_gateway .
-.It show-event Op Fl l
-Dump all events reported by
-.Xr racoon 8 ,
-then quit.
-The
-.Fl l
-flag causes
-.Nm
-to not stop once all the events have been read, but rather to loop
-awaiting and reporting new events.
-.It logout-user Ar login
-Delete all SA established on behalf of the Xauth user
-.Ar login .
-.El
-.Pp
-Command shortcuts are available:
-.Bl -tag -width XXX -compact -offset indent
-.It rc
-reload-config
-.It ss
-show-sa
-.It sc
-show-schedule
-.It fs
-flush-sa
-.It ds
-delete-sa
-.It es
-establish-sa
-.It vc
-vpn-connect
-.It vd
-vpn-disconnect
-.It se
-show-event
-.It lu
-logout-user
-.El
-.\"
-.Sh RETURN VALUES
-The command should exit with 0 on success, and non-zero on errors.
-.\"
-.Sh FILES
-.Bl -tag -width 30n -compact
-.It Pa /var/racoon/racoon.sock No or
-.It Pa /var/run/racoon.sock
-.Xr racoon 8
-control socket.
-.El
-.\"
-.Sh SEE ALSO
-.Xr ipsec 4 ,
-.Xr racoon 8
-.Sh HISTORY
-Once was
-.Ic kmpstat
-in the KAME project.
-It turned into
-.Nm
-but remained undocumented for a while.
-.An Emmanuel Dreyfus Aq manu@NetBSD.org
-wrote this man page.
diff --git a/src/racoon/racoonctl.c b/src/racoon/racoonctl.c
deleted file mode 100644
index 1dd26f0..0000000
--- a/src/racoon/racoonctl.c
+++ /dev/null
@@ -1,1654 +0,0 @@
-/*	$NetBSD: racoonctl.c,v 1.7.6.2 2009/04/20 13:32:57 tteras Exp $	*/
-
-/*	Id: racoonctl.c,v 1.11 2006/04/06 17:06:25 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/un.h>
-
-#include <netinet/in.h>
-#include <arpa/inet.h>
-#include <net/pfkeyv2.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-#else
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif
-#endif
-#include <netdb.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <err.h>
-#include <sys/ioctl.h> 
-#include <resolv.h>
-
-#include "var.h"
-#include "vmbuf.h"
-#include "misc.h"
-#include "gcmalloc.h"
-
-#include "racoonctl.h"
-#include "admin.h"
-#include "schedule.h"
-#include "handler.h"
-#include "sockmisc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h"
-#include "isakmp_unity.h"
-#include "ipsec_doi.h"
-#include "evt.h"
-
-char *adminsock_path = ADMINSOCK_PATH;
-
-static void usage __P((void));
-static vchar_t *get_combuf __P((int, char **));
-static int handle_recv __P((vchar_t *));
-static vchar_t *f_reload __P((int, char **));
-static vchar_t *f_getsched __P((int, char **));
-static vchar_t *f_getsa __P((int, char **));
-static vchar_t *f_flushsa __P((int, char **));
-static vchar_t *f_deletesa __P((int, char **));
-static vchar_t *f_exchangesa __P((int, char **));
-static vchar_t *f_vpnc __P((int, char **));
-static vchar_t *f_vpnd __P((int, char **));
-static vchar_t *f_getevt __P((int, char **));
-#ifdef ENABLE_HYBRID
-static vchar_t *f_logoutusr __P((int, char **));
-#endif
-
-struct cmd_tag {
-	vchar_t *(*func) __P((int, char **));
-	int cmd;
-	char *str;
-} cmdtab[] = {
-	{ f_reload,	ADMIN_RELOAD_CONF,	"reload-config" },
-	{ f_reload,	ADMIN_RELOAD_CONF,	"rc" },
-	{ f_getsched,	ADMIN_SHOW_SCHED,	"show-schedule" },
-	{ f_getsched,	ADMIN_SHOW_SCHED,	"sc" },
-	{ f_getsa,	ADMIN_SHOW_SA,		"show-sa" },
-	{ f_getsa,	ADMIN_SHOW_SA,		"ss" },
-	{ f_flushsa,	ADMIN_FLUSH_SA,		"flush-sa" },
-	{ f_flushsa,	ADMIN_FLUSH_SA,		"fs" },
-	{ f_deletesa,	ADMIN_DELETE_SA,	"delete-sa" },
-	{ f_deletesa,	ADMIN_DELETE_SA,	"ds" },
-	{ f_exchangesa,	ADMIN_ESTABLISH_SA,	"establish-sa" },
-	{ f_exchangesa,	ADMIN_ESTABLISH_SA,	"es" },
-	{ f_vpnc,	ADMIN_ESTABLISH_SA,	"vpn-connect" },
-	{ f_vpnc,	ADMIN_ESTABLISH_SA,	"vc" },
-	{ f_vpnd,	ADMIN_DELETE_ALL_SA_DST,"vpn-disconnect" },
-	{ f_vpnd,	ADMIN_DELETE_ALL_SA_DST,"vd" },
-	{ f_getevt,	ADMIN_SHOW_EVT,		"show-event" },
-	{ f_getevt,	ADMIN_SHOW_EVT,		"se" },
-#ifdef ENABLE_HYBRID
-	{ f_logoutusr,	ADMIN_LOGOUT_USER,	"logout-user" },
-	{ f_logoutusr,	ADMIN_LOGOUT_USER,	"lu" },
-#endif
-	{ NULL, 0, NULL },
-};
-
-struct evtmsg {
-	int type;
-	char *msg;
-	enum { UNSPEC, ERROR, INFO } level;
-} evtmsg[] = {
-	{ EVTT_PHASE1_UP, "Phase 1 established", INFO },
-	{ EVTT_PHASE1_DOWN, "Phase 1 deleted", INFO },
-	{ EVTT_XAUTH_SUCCESS, "Xauth exchange passed", INFO },
-	{ EVTT_ISAKMP_CFG_DONE, "ISAKMP mode config done", INFO },
-	{ EVTT_PHASE2_UP, "Phase 2 established", INFO },
-	{ EVTT_PHASE2_DOWN, "Phase 2 deleted", INFO },
-	{ EVTT_DPD_TIMEOUT, "Peer not reachable anymore", ERROR },
-	{ EVTT_PEER_NO_RESPONSE, "Peer not responding", ERROR },
-	{ EVTT_PEER_DELETE, "Peer terminated security association", ERROR },
-	{ EVTT_RACOON_QUIT, "Raccon terminated", ERROR },
-	{ EVTT_OVERFLOW, "Event queue overflow", ERROR },
-	{ EVTT_XAUTH_FAILED, "Xauth exchange failed", ERROR },
-	{ EVTT_PEERPH1AUTH_FAILED, "Peer failed phase 1 authentication "
-	    "(certificate problem?)", ERROR },
-	{ EVTT_PEERPH1_NOPROP, "Peer failed phase 1 initiation "
-	    "(proposal problem?)", ERROR },
-	{ 0, NULL, UNSPEC },
-	{ EVTT_NO_ISAKMP_CFG, "No need for ISAKMP mode config ", INFO },
-};
-
-static int get_proto __P((char *));
-static vchar_t *get_index __P((int, char **));
-static int get_family __P((char *));
-static vchar_t *get_comindexes __P((int, int, char **));
-static int get_comindex __P((char *, char **, char **, char **));
-static int get_ulproto __P((char *));
-
-struct proto_tag {
-	int proto;
-	char *str;
-} prototab[] = {
-	{ ADMIN_PROTO_ISAKMP,	"isakmp" },
-	{ ADMIN_PROTO_IPSEC,	"ipsec" },
-	{ ADMIN_PROTO_AH,	"ah" },
-	{ ADMIN_PROTO_ESP,	"esp" },
-	{ ADMIN_PROTO_INTERNAL,	"internal" },
-	{ 0, NULL },
-};
-
-struct ulproto_tag {
-	int ul_proto;
-	char *str;
-} ulprototab[] = {
-	{ 0,		"any" },
-	{ IPPROTO_ICMP,	"icmp" },
-	{ IPPROTO_TCP,	"tcp" },
-	{ IPPROTO_UDP,	"udp" },
-	{ 0, NULL },
-};
-
-int so;
-
-static char _addr1_[NI_MAXHOST], _addr2_[NI_MAXHOST];
-
-char *pname;
-int long_format = 0;
-
-#define EVTF_NONE		0x0000	/* Ignore any events */
-#define EVTF_LOOP		0x0001	/* Loop awaiting for new events */
-#define EVTF_CFG_STOP		0x0002	/* Stop after ISAKMP mode config */
-#define EVTF_CFG		0x0004	/* Print ISAKMP mode config info */
-#define EVTF_ALL		0x0008	/* Print any events */
-#define EVTF_PURGE		0x0010	/* Print all available events */
-#define EVTF_PH1DOWN_STOP	0x0020	/* Stop when phase 1 SA gets down */
-#define EVTF_PH1DOWN		0x0040	/* Print that phase 1 SA got down */
-#define EVTF_ERR		0x0080	/* Print any error */
-#define EVTF_ERR_STOP		0x0100	/* Stop on any error */
-
-int evt_filter = EVTF_NONE;
-time_t evt_start;
-
-void dump_isakmp_sa __P((char *, int));
-void dump_internal __P((char *, int));
-char *pindex_isakmp __P((isakmp_index *));
-void print_schedule __P((caddr_t, int));
-void print_evt __P((caddr_t, int));
-void print_cfg __P((caddr_t, int));
-void print_err __P((caddr_t, int));
-void print_ph1down __P((caddr_t, int));
-void print_ph1up __P((caddr_t, int));
-int evt_poll __P((void));
-char * fixed_addr __P((char *, char *, int));
-
-static void
-usage()
-{
-	printf(
-"Usage:\n"
-"  %s reload-config\n"
-"  %s [-l [-l]] show-sa [protocol]\n"
-"  %s flush-sa [protocol]\n"
-"  %s delete-sa <saopts>\n"
-"  %s establish-sa [-u identity] <saopts>\n"
-"  %s vpn-connect [-u identity] vpn_gateway\n"
-"  %s vpn-disconnect vpn_gateway\n"
-"\n"
-"    <protocol>: \"isakmp\", \"esp\" or \"ah\".\n"
-"        In the case of \"show-sa\" or \"flush-sa\", you can use \"ipsec\".\n"
-"\n"
-"    <saopts>: \"isakmp\" <family> <src> <dst>\n"
-"            : {\"esp\",\"ah\"} <family> <src/prefixlen/port> <dst/prefixlen/port>\n"
-"                              <ul_proto>\n"
-"    <family>: \"inet\" or \"inet6\"\n"
-"    <ul_proto>: \"icmp\", \"tcp\", \"udp\" or \"any\"\n",
-	pname, pname, pname, pname, pname, pname, pname);
-}
-
-/*
- * Check for proper racoonctl interface
- */
-#if ((RACOONCTL_INTERFACE_MAJOR != 1) || (RACOONCTL_INTERFACE < 20041230))
-#error	"Incompatible racoonctl interface"
-#endif
-
-int
-main(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *combuf;
-	int c;
-
-	pname = *av;
-
-	/*
-	 * Check for proper racoonctl interface
-	 */
-	if ((racoonctl_interface_major != RACOONCTL_INTERFACE_MAJOR) ||
-	    (racoonctl_interface < RACOONCTL_INTERFACE))
-		errx(1, "Incompatible racoonctl interface");
-
-#ifdef __linux__
-	/*
-	 * Disable GNU extensions that will prevent racoonct vc -u login
-	 * from working (GNU getopt(3) does not like options after vc)
-	 */
-	setenv("POSIXLY_CORRECT", "1", 0);
-#endif
-	while ((c = getopt(ac, av, "lds:")) != -1) {
-		switch(c) {
-		case 'l':
-			long_format++;
-			break;
-
-		case 'd':
-			loglevel++;
-			break;
-
-		case 's':
-			adminsock_path = optarg;
-			break;
-
-		default:
-			usage();
-			exit(0);
-		}
-	}
-
-	ac -= optind;
-	av += optind;
-
-	combuf = get_combuf(ac, av);
-	if (!combuf)
-		err(1, "kmpstat");
-
-	if (loglevel)
-		racoon_hexdump(combuf, ((struct admin_com *)combuf)->ac_len);
-
-	com_init();
-
-	if (com_send(combuf) != 0)
-		goto bad;
-
-	vfree(combuf);
-
-	if (com_recv(&combuf) != 0)
-		goto bad;
-	if (handle_recv(combuf) != 0)
-		goto bad;
-
-	vfree(combuf);
-
-	if (evt_filter != EVTF_NONE)
-		if (evt_poll() != 0)
-			goto bad;	
-	
-	exit(0);
-
-    bad:
-	exit(1);
-}
-
-int
-evt_poll(void) {
-	struct timeval tv;
-	vchar_t *recvbuf;
-	vchar_t *sendbuf;
-
-	if ((sendbuf = f_getevt(0, NULL)) == NULL)
-		errx(1, "Cannot make combuf");
-
-
-	while (evt_filter & (EVTF_LOOP|EVTF_PURGE)) {
-		/* handle_recv closes the socket time, so open it each time */
-		com_init();
-
-		if (com_send(sendbuf) != 0)
-			errx(1, "Cannot send combuf");
-
-		if (com_recv(&recvbuf) == 0) {
-			handle_recv(recvbuf);
-			vfree(recvbuf);
-		}
-
-		tv.tv_sec = 0;
-		tv.tv_usec = 10;
-		(void)select(0, NULL, NULL, NULL, &tv);
-	}
-
-	vfree(sendbuf);
-	return 0;
-}
-
-/* %%% */
-/*
- * return command buffer.
- */
-static vchar_t *
-get_combuf(ac, av)
-	int ac;
-	char **av;
-{
-	struct cmd_tag *cp;
-
-	if (ac == 0) {
-		usage();
-		exit(0);
-	}
-
-	/* checking the string of command. */
-	for (cp = &cmdtab[0]; cp->str; cp++) {
-		if (strcmp(*av, cp->str) == 0) {
-			break;
-		}
-	}
-	if (!cp->str) {
-		printf("Invalid command [%s]\n", *av);
-		errno = EINVAL;
-		return NULL;
-	}
-
-	ac--;
-	av++;
-	return (cp->func)(ac, av);
-}
-
-static vchar_t *
-f_reload(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *buf;
-	struct admin_com *head;
-
-	buf = vmalloc(sizeof(*head));
-	if (buf == NULL)
-		errx(1, "not enough core");
-
-	head = (struct admin_com *)buf->v;
-	head->ac_len = buf->l;
-	head->ac_cmd = ADMIN_RELOAD_CONF;
-	head->ac_errno = 0;
-	head->ac_proto = 0;
-
-	return buf;
-}
-
-static vchar_t *
-f_getevt(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *buf;
-	struct admin_com *head;
-
-	/*
-	 * There are 3 ways of getting here
-	 * 1) racoonctl vc => evt_filter = (EVTF_LOOP|EVTF_CFG| ... )
-	 * 2) racoonctl es => evt_filter = EVTF_NONE
-	 * 3) racoonctl es -l => evt_filter = EVTF_LOOP
-	 * Catch the second case: show-event is here to purge all
-	 */
-	if (evt_filter == EVTF_NONE)
-		evt_filter = (EVTF_ALL|EVTF_PURGE);
-
-	if ((ac >= 1) && (strcmp(av[0], "-l") == 0))
-		evt_filter |= EVTF_LOOP;
-
-	if (ac >= 2)
-		errx(1, "too many arguments");
-
-	buf = vmalloc(sizeof(*head));
-	if (buf == NULL)
-		errx(1, "not enough core");
-
-	head = (struct admin_com *)buf->v;
-	head->ac_len = buf->l;
-	head->ac_cmd = ADMIN_SHOW_EVT;
-	head->ac_errno = 0;
-	head->ac_proto = 0;
-
-	return buf;
-}
-
-static vchar_t *
-f_getsched(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *buf;
-	struct admin_com *head;
-
-	buf = vmalloc(sizeof(*head));
-	if (buf == NULL)
-		errx(1, "not enough core");
-
-	head = (struct admin_com *)buf->v;
-	head->ac_len = buf->l;
-	head->ac_cmd = ADMIN_SHOW_SCHED;
-	head->ac_errno = 0;
-	head->ac_proto = 0;
-
-	return buf;
-}
-
-static vchar_t *
-f_getsa(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *buf;
-	struct admin_com *head;
-	int proto;
-
-	/* need protocol */
-	if (ac != 1)
-		errx(1, "insufficient arguments");
-	proto = get_proto(*av);
-	if (proto == -1)
-		errx(1, "unknown protocol %s", *av);
-
-	buf = vmalloc(sizeof(*head));
-	if (buf == NULL)
-		errx(1, "not enough core");
-
-	head = (struct admin_com *)buf->v;
-	head->ac_len = buf->l;
-	head->ac_cmd = ADMIN_SHOW_SA;
-	head->ac_errno = 0;
-	head->ac_proto = proto;
-
-	return buf;
-}
-
-static vchar_t *
-f_flushsa(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *buf;
-	struct admin_com *head;
-	int proto;
-
-	/* need protocol */
-	if (ac != 1)
-		errx(1, "insufficient arguments");
-	proto = get_proto(*av);
-	if (proto == -1)
-		errx(1, "unknown protocol %s", *av);
-
-	buf = vmalloc(sizeof(*head));
-	if (buf == NULL)
-		errx(1, "not enough core");
-
-	head = (struct admin_com *)buf->v;
-	head->ac_len = buf->l;
-	head->ac_cmd = ADMIN_FLUSH_SA;
-	head->ac_errno = 0;
-	head->ac_proto = proto;
-
-	return buf;
-}
-
-static vchar_t *
-f_deletesa(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *buf, *index;
-	struct admin_com *head;
-	int proto;
-
-	/* need protocol */
-	if (ac < 1)
-		errx(1, "insufficient arguments");
-	proto = get_proto(*av);
-	if (proto == -1)
-		errx(1, "unknown protocol %s", *av);
-
-	/* get index(es) */
-	av++;
-	ac--;
-	switch (proto) {
-	case ADMIN_PROTO_ISAKMP:
-		index = get_index(ac, av);
-		if (index == NULL)
-			return NULL;
-		break;
-	case ADMIN_PROTO_AH:
-	case ADMIN_PROTO_ESP:
-		index = get_index(ac, av);
-		if (index == NULL)
-			return NULL;
-		break;
-	default:
-		errno = EPROTONOSUPPORT;
-		return NULL;
-	}
-
-	buf = vmalloc(sizeof(*head) + index->l);
-	if (buf == NULL)
-		goto out;
-
-	head = (struct admin_com *)buf->v;
-	head->ac_len = buf->l + index->l;
-	head->ac_cmd = ADMIN_DELETE_SA;
-	head->ac_errno = 0;
-	head->ac_proto = proto;
-
-	memcpy(buf->v+sizeof(*head), index->v, index->l);
-
-out:
-	if (index != NULL)
-		vfree(index);
-
-	return buf;
-}
-
-static vchar_t *
-f_deleteallsadst(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *buf, *index;
-	struct admin_com *head;
-	int proto;
-
-	/* need protocol */
-	if (ac < 1)
-		errx(1, "insufficient arguments");
-	proto = get_proto(*av);
-	if (proto == -1)
-		errx(1, "unknown protocol %s", *av);
-
-	/* get index(es) */
-	av++;
-	ac--;
-	switch (proto) {
-	case ADMIN_PROTO_ISAKMP:
-		index = get_index(ac, av);
-		if (index == NULL)
-			return NULL;
-		break;
-	case ADMIN_PROTO_AH:
-	case ADMIN_PROTO_ESP:
-		index = get_index(ac, av);
-		if (index == NULL)
-			return NULL;
-		break;
-	default:
-		errno = EPROTONOSUPPORT;
-		return NULL;
-	}
-
-	buf = vmalloc(sizeof(*head) + index->l);
-	if (buf == NULL)
-		goto out;
-
-	head = (struct admin_com *)buf->v;
-	head->ac_len = buf->l + index->l;
-	head->ac_cmd = ADMIN_DELETE_ALL_SA_DST;
-	head->ac_errno = 0;
-	head->ac_proto = proto;
-
-	memcpy(buf->v+sizeof(*head), index->v, index->l);
-
-out:
-	if (index != NULL)
-		vfree(index);
-
-	return buf;
-}
-
-static vchar_t *
-f_exchangesa(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *buf, *index;
-	struct admin_com *head;
-	int proto;
-	int cmd = ADMIN_ESTABLISH_SA;
-	size_t com_len = 0;
-	char *id = NULL;
-	char *key = NULL;
-	struct admin_com_psk *acp;
-
-	if (ac < 1)
-		errx(1, "insufficient arguments");
-
-	/* Optional -u identity */
-	if (strcmp(av[0], "-u") == 0) {
-		if (ac < 2)
-			errx(1, "-u require an argument");
-
-		id = av[1];
-		if ((key = getpass("Password: ")) == NULL)
-			errx(1, "getpass() failed: %s", strerror(errno));
-		
-		com_len += sizeof(*acp) + strlen(id) + 1 + strlen(key) + 1;
-		cmd = ADMIN_ESTABLISH_SA_PSK;
-
-		av += 2;
-		ac -= 2;
-	}
-
-	/* need protocol */
-	if (ac < 1)
-		errx(1, "insufficient arguments");
-	if ((proto = get_proto(*av)) == -1)
-		errx(1, "unknown protocol %s", *av);
-
-	/* get index(es) */
-	av++;
-	ac--;
-	switch (proto) {
-	case ADMIN_PROTO_ISAKMP:
-		index = get_index(ac, av);
-		if (index == NULL)
-			return NULL;
-		break;
-	case ADMIN_PROTO_AH:
-	case ADMIN_PROTO_ESP:
-		index = get_index(ac, av);
-		if (index == NULL)
-			return NULL;
-		break;
-	default:
-		errno = EPROTONOSUPPORT;
-		return NULL;
-	}
-
-	com_len += sizeof(*head) + index->l;
-	if ((buf = vmalloc(com_len)) == NULL)
-		errx(1, "Cannot allocate buffer");
-
-	head = (struct admin_com *)buf->v;
-	head->ac_len = buf->l;
-	head->ac_cmd = cmd;
-	head->ac_errno = 0;
-	head->ac_proto = proto;
-
-	memcpy(buf->v+sizeof(*head), index->v, index->l);
-
-	if (id && key) {
-		char *data;
-		acp = (struct admin_com_psk *)
-		    (buf->v + sizeof(*head) + index->l);
-
-		acp->id_type = IDTYPE_USERFQDN;
-		acp->id_len = strlen(id) + 1;
-		acp->key_len = strlen(key) + 1;
-
-		data = (char *)(acp + 1);
-		strcpy(data, id);
-
-		data = (char *)(data + acp->id_len);
-		strcpy(data, key);
-	}
-
-	vfree(index);
-
-	return buf;
-}
-
-static vchar_t *
-f_vpnc(ac, av)
-	int ac;
-	char **av;
-{
-	char *nav[] = {NULL, NULL, NULL, NULL, NULL, NULL};
-	int nac = 0;
-	char *isakmp = "isakmp";
-	char *inet = "inet";
-	char *srcaddr;
-	struct addrinfo hints, *res;
-	struct sockaddr *src;
-	char *idx;
-
-	if (ac < 1)
-		errx(1, "insufficient arguments");
-
-	evt_filter = (EVTF_LOOP|EVTF_CFG|EVTF_CFG_STOP|EVTF_ERR|EVTF_ERR_STOP);
-	time(&evt_start);
-	
-	/* Optional -u identity */
-	if (strcmp(av[0], "-u") == 0) {
-		if (ac < 2)
-			errx(1, "-u require an argument");
-
-		nav[nac++] = av[0];
-		nav[nac++] = av[1];
-
-		ac -= 2;
-		av += 2;
-	}
-
-	if (ac < 1)
-		errx(1, "VPN gateway required");	
-	if (ac > 1)
-		warnx("Extra arguments");
-
-	/*
-	 * Find the source address
-	 */
-	memset(&hints, 0, sizeof(hints));
-	hints.ai_family = PF_UNSPEC;
-	hints.ai_socktype = SOCK_DGRAM;
-	if (getaddrinfo(av[0], "4500", &hints, &res) != 0)
-		errx(1, "Cannot resolve destination address");
-
-	if ((src = getlocaladdr(res->ai_addr)) == NULL)
-		errx(1, "cannot find source address");
-
-	if ((srcaddr = saddr2str(src)) == NULL)
-		errx(1, "cannot read source address");
-
-	/* We get "ip[port]" strip the port */
-	if ((idx = index(srcaddr, '[')) == NULL) 
-		errx(1, "unexpected source address format");
-	*idx = '\0';
-
-	nav[nac++] = isakmp;
-	nav[nac++] = inet;
-	nav[nac++] = srcaddr;
-	nav[nac++] = av[0];
-
-	return f_exchangesa(nac, nav);
-}
-
-static vchar_t *
-f_vpnd(ac, av)
-	int ac;
-	char **av;
-{
-	char *nav[] = {NULL, NULL, NULL, NULL};
-	int nac = 0;
-	char *isakmp = "isakmp";
-	char *inet = "inet";
-	char *anyaddr = "0.0.0.0";
-	char *idx;
-
-	if (ac < 1)
-		errx(1, "VPN gateway required");	
-	if (ac > 1)
-		warnx("Extra arguments");
-
-	evt_filter = 
-	    (EVTF_PH1DOWN|EVTF_PH1DOWN_STOP|EVTF_LOOP|EVTF_ERR|EVTF_ERR_STOP);
-
-	nav[nac++] = isakmp;
-	nav[nac++] = inet;
-	nav[nac++] = anyaddr;
-	nav[nac++] = av[0];
-
-	return f_deleteallsadst(nac, nav);
-}
-
-#ifdef ENABLE_HYBRID
-static vchar_t *
-f_logoutusr(ac, av)
-	int ac;
-	char **av;
-{
-	vchar_t *buf;
-	struct admin_com *head;
-	char *user;
-	size_t userlen;
-
-	/* need username */
-	if (ac < 1)
-		errx(1, "insufficient arguments");
-	user = av[0];
-	userlen = strlen(user);
-	if ((user == NULL) || (userlen > LOGINLEN))
-		errx(1, "bad login (too long?)");
-
-	buf = vmalloc(sizeof(*head) + userlen);
-	if (buf == NULL)
-		return NULL;
-
-	head = (struct admin_com *)buf->v;
-	head->ac_len = buf->l;
-	head->ac_cmd = ADMIN_LOGOUT_USER;
-	head->ac_errno = 0;
-	head->ac_proto = 0;
-
-	strncpy((char *)(head + 1), user, userlen);
-
-	return buf;
-}
-#endif /* ENABLE_HYBRID */
-
-
-static int
-get_proto(str)
-	char *str;
-{
-	struct proto_tag *cp;
-
-	if (str == NULL) {
-		errno = EINVAL;
-		return -1;
-	}
-
-	/* checking the string of command. */
-	for (cp = &prototab[0]; cp->str; cp++) {
-		if (strcmp(str, cp->str) == 0)
-			return cp->proto;
-	}
-
-	errno = EINVAL;
-	return -1;
-}
-
-static vchar_t *
-get_index(ac, av)
-	int ac;
-	char **av;
-{
-	int family;
-
-	if (ac != 3 && ac != 4) {
-		errno = EINVAL;
-		return NULL;
-	}
-
-	/* checking the string of family */
-	family = get_family(*av);
-	if (family == -1)
-		return NULL;
-	av++;
-	ac--;
-
-	return get_comindexes(family, ac, av);
-}
-
-static int
-get_family(str)
-	char *str;
-{
-	if (strcmp("inet", str) == 0)
-		return AF_INET;
-#ifdef INET6
-	else if (strcmp("inet6", str) == 0)
-		return AF_INET6;
-#endif
-	errno = EAFNOSUPPORT;
-	return -1;
-}
-
-static vchar_t *
-get_comindexes(family, ac, av)
-	int family;
-	int ac;
-	char **av;
-{
-	vchar_t *buf;
-	struct admin_com_indexes *ci;
-	char *p_name = NULL, *p_port = NULL;
-	char *p_prefs = NULL, *p_prefd = NULL;
-	struct sockaddr *src = NULL, *dst = NULL;
-	int ulproto;
-
-	if (ac != 2 && ac != 3) {
-		errno = EINVAL;
-		return NULL;
-	}
-
-	if (get_comindex(*av, &p_name, &p_port, &p_prefs) == -1)
-		goto bad;
-	src = get_sockaddr(family, p_name, p_port);
-	if (p_name) {
-		racoon_free(p_name);
-		p_name = NULL;
-	}
-	if (p_port) {
-		racoon_free(p_port);
-		p_port = NULL;
-	}
-	if (src == NULL)
-		goto bad;
-	av++;
-	ac--;
-	if (get_comindex(*av, &p_name, &p_port, &p_prefd) == -1)
-		goto bad;
-	dst = get_sockaddr(family, p_name, p_port);
-	if (p_name) {
-		racoon_free(p_name);
-		p_name = NULL;
-	}
-	if (p_port) {
-		racoon_free(p_port);
-		p_port = NULL;
-	}
-	if (dst == NULL)
-		goto bad;
-
-	buf = vmalloc(sizeof(*ci));
-	if (buf == NULL)
-		goto bad;
-
-	av++;
-	ac--;
-	if(ac){
-		ulproto = get_ulproto(*av);
-		if (ulproto == -1)
-			goto bad;
-	}else
-		ulproto=0;
-
-	ci = (struct admin_com_indexes *)buf->v;
-	if(p_prefs)
-		ci->prefs = (u_int8_t)atoi(p_prefs); /* XXX should be handled error. */
-	else
-		ci->prefs = 32;
-	if(p_prefd)
-		ci->prefd = (u_int8_t)atoi(p_prefd); /* XXX should be handled error. */
-	else
-		ci->prefd = 32;
-	ci->ul_proto = ulproto;
-	memcpy(&ci->src, src, sysdep_sa_len(src));
-	memcpy(&ci->dst, dst, sysdep_sa_len(dst));
-
-	if (p_name)
-		racoon_free(p_name);
-
-	return buf;
-
-   bad:
-	if (p_name)
-		racoon_free(p_name);
-	if (p_port)
-		racoon_free(p_port);
-	if (p_prefs)
-		racoon_free(p_prefs);
-	if (p_prefd)
-		racoon_free(p_prefd);
-	return NULL;
-}
-
-static int
-get_comindex(str, name, port, pref)
-	char *str, **name, **port, **pref;
-{
-	char *p;
-
-	*name = *port = *pref = NULL;
-
-	*name = racoon_strdup(str);
-	STRDUP_FATAL(*name);
-	p = strpbrk(*name, "/[");
-	if (p != NULL) {
-		if (*(p + 1) == '\0')
-			goto bad;
-		if (*p == '/') {
-			*p = '\0';
-			*pref = racoon_strdup(p + 1);
-			STRDUP_FATAL(*pref);
-			p = strchr(*pref, '[');
-			if (p != NULL) {
-				if (*(p + 1) == '\0')
-					goto bad;
-				*p = '\0';
-				*port = racoon_strdup(p + 1);
-				STRDUP_FATAL(*port);
-				p = strchr(*pref, ']');
-				if (p == NULL)
-					goto bad;
-				*p = '\0';
-			}
-		} else if (*p == '[') {
-			if (*pref == NULL)
-				goto bad;
-			*p = '\0';
-			*port = racoon_strdup(p + 1);
-			STRDUP_FATAL(*port);
-			p = strchr(*pref, ']');
-			if (p == NULL)
-				goto bad;
-			*p = '\0';
-		} else {
-			/* XXX */
-		}
-	}
-
-	return 0;
-
-    bad:
-
-	if (*name)
-		racoon_free(*name);
-	if (*port)
-		racoon_free(*port);
-	if (*pref)
-		racoon_free(*pref);
-	*name = *port = *pref = NULL;
-	return -1;
-}
-
-static int
-get_ulproto(str)
-	char *str;
-{
-	struct ulproto_tag *cp;
-
-	if(str == NULL){
-		errno = EINVAL;
-		return -1;
-	}
-
-	/* checking the string of upper layer protocol. */
-	for (cp = &ulprototab[0]; cp->str; cp++) {
-		if (strcmp(str, cp->str) == 0)
-			return cp->ul_proto;
-	}
-
-	errno = EINVAL;
-	return -1;
-}
-
-/* %%% */
-void
-dump_isakmp_sa(buf, len)
-	char *buf;
-	int len;
-{
-	struct ph1dump *pd;
-	struct tm *tm;
-	char tbuf[56];
-	caddr_t p = NULL;
-
-/* isakmp status header */
-/* short header;
- 1234567890123456789012 0000000000000000:0000000000000000 000000000000
-*/
-char *header1 = 
-"Destination            Cookies                           Created";
-
-/* semi long header;
- 1234567890123456789012 0000000000000000:0000000000000000 00 X 00 X 0000-00-00 00:00:00 000000
-*/
-char *header2 = 
-"Destination            Cookies                           ST S  V E Created             Phase2";
-
-/* long header;
- 0000:0000:0000:0000:0000:0000:0000:0000.00000 0000:0000:0000:0000:0000:0000:0000:0000.00000 0000000000000000:0000000000000000 00 X 00 X 0000-00-00 00:00:00 000000
-*/
-char *header3 =
-"Source                                        Destination                                   Cookies                           ST S  V E Created             Phase2";
-
-/* phase status header */
-/* short format;
-   side stats source address         destination address   
-   xxx  xxxxx 1234567890123456789012 1234567890123456789012
-*/
-
-	static char *estr[] = { "", "B", "M", "U", "A", "I", };
-
-	switch (long_format) {
-	case 0:
-		printf("%s\n", header1);
-		break;
-	case 1:
-		printf("%s\n", header2);
-		break;
-	case 2:
-	default:
-		printf("%s\n", header3);
-		break;
-	}
-
-	if (len % sizeof(*pd))
-		printf("invalid length %d\n", len);
-	len /= sizeof(*pd);
-
-	pd = (struct ph1dump *)buf;
-
-	while (len-- > 0) {
-		/* source address */
-		if (long_format >= 2) {
-			GETNAMEINFO((struct sockaddr *)&pd->local, _addr1_, _addr2_);
-			switch (long_format) {
-			case 0:
-				break;
-			case 1:
-				p = fixed_addr(_addr1_, _addr2_, 22);
-				break;
-			case 2:
-			default:
-				p = fixed_addr(_addr1_, _addr2_, 45);
-				break;
-			}
-			printf("%s ", p);
-		}
-
-		/* destination address */
-		GETNAMEINFO((struct sockaddr *)&pd->remote, _addr1_, _addr2_);
-		switch (long_format) {
-		case 0:
-		case 1:
-			p = fixed_addr(_addr1_, _addr2_, 22);
-			break;
-		case 2:
-		default:
-			p = fixed_addr(_addr1_, _addr2_, 45);
-			break;
-		}
-		printf("%s ", p);
-
-		printf("%s ", pindex_isakmp(&pd->index));
-
-		/* statuc, side and version */
-		if (long_format >= 1) {
-			printf("%2d %c %2x ",
-				pd->status,
-				pd->side == INITIATOR ? 'I' : 'R',
-				pd->version);
-			if (ARRAYLEN(estr) > pd->etype)
-				printf("%s ", estr[pd->etype]);
-		}
-
-		/* created date */
-		if (pd->created) {
-			tm = localtime(&pd->created);
-			strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %T", tm);
-		} else
-			snprintf(tbuf, sizeof(tbuf), "                   ");
-		printf("%s ", tbuf);
-
-		/* counter of phase 2 */
-		if (long_format >= 1)
-			printf("%6d ", pd->ph2cnt);
-
-		printf("\n");
-
-		pd++;
-	}
-
-	return;
-}
-
-/* %%% */
-void
-dump_internal(buf, tlen)
-	char *buf;
-	int tlen;
-{
-	struct ph2handle *iph2;
-	struct sockaddr *addr;
-
-/*
-short header;
- source address         destination address    
- 1234567890123456789012 1234567890123456789012 
-*/
-char *short_h1 = 
-"Source                 Destination            ";
-
-/*
-long header;
- source address                                destination address                           
- 123456789012345678901234567890123456789012345 123456789012345678901234567890123456789012345 
- 0000:0000:0000:0000:0000:0000:0000:0000.00000 0000:0000:0000:0000:0000:0000:0000:0000.00000 0000:0000:0000:0000:0000:0000:0000:0000.00000
-*/
-char *long_h1 = 
-"Source                                        Destination                                  ";
-
-	printf("%s\n", long_format ? long_h1 : short_h1);
-
-	while (tlen > 0) {
-		iph2 = (struct ph2handle *)buf;
-		addr = (struct sockaddr *)(++iph2);
-
-		GETNAMEINFO(addr, _addr1_, _addr2_);
-		printf("%s ", long_format ?
-			  fixed_addr(_addr1_, _addr2_, 45)
-			: fixed_addr(_addr1_, _addr2_, 22));
-		addr++;
-		tlen -= sysdep_sa_len(addr);
-
-		GETNAMEINFO(addr, _addr1_, _addr2_);
-		printf("%s ", long_format ?
-			  fixed_addr(_addr1_, _addr2_, 45)
-			: fixed_addr(_addr1_, _addr2_, 22));
-		addr++;
-		tlen -= sysdep_sa_len(addr);
-
-		printf("\n");
-	}
-
-	return;
-}
-
-/* %%% */
-char *
-pindex_isakmp(index)
-	isakmp_index *index;
-{
-	static char buf[64];
-	u_char *p;
-	int i, j;
-
-	memset(buf, 0, sizeof(buf));
-
-	/* copy index */
-	p = (u_char *)index;
-	for (j = 0, i = 0; i < sizeof(isakmp_index); i++) {
-		snprintf((char *)&buf[j], sizeof(buf) - j, "%02x", p[i]);
-		j += 2;
-		switch (i) {
-		case 7:
-#if 0
-		case 15:
-#endif
-			buf[j++] = ':';
-		}
-	}
-
-	return buf;
-}
-
-/* print schedule */
-char *str_sched_stat[] = {
-"off",
-"on",
-"dead",
-};
-
-char *str_sched_id[] = {
-"PH1resend",
-"PH1lifetime",
-"PH2resend",
-"PSTacquire",
-"PSTlifetime",
-};
-
-void
-print_schedule(buf, len)
-	caddr_t buf;
-	int len;
-{
-	struct scheddump *sc = (struct scheddump *)buf;
-	struct tm *tm;
-	char tbuf[56];
-
-	if (len % sizeof(*sc))
-		printf("invalid length %d\n", len);
-	len /= sizeof(*sc);
-
-	/*      00000000 00000000 00000000 xxx........*/
-	printf("index    tick     xtime    created\n");
-
-	while (len-- > 0) {
-		tm = localtime(&sc->created);
-		strftime(tbuf, sizeof(tbuf), "%Y-%m-%d %T", tm);
-
-		printf("%-8ld %-8ld %-8ld %s\n",
-			sc->id,
-			(long)sc->tick,
-			(long)sc->xtime,
-			tbuf);
-		sc++;
-	}
-
-	return;
-}
-
-
-void
-print_evt(buf, len)
-	caddr_t buf;
-	int len;
-{
-	struct evtdump *evtdump = (struct evtdump *)buf;
-	int i;
-	char *srcstr;
-	char *dststr;
-	
-	for (i = 0; evtmsg[i].msg; i++)
-		if (evtmsg[i].type == evtdump->type)
-			break;				
-	
-	if (evtmsg[i].msg == NULL) 
-		printf("Event %d: ", evtdump->type);
-	else
-		printf("%s : ", evtmsg[i].msg);
-
-	if ((srcstr = saddr2str((struct sockaddr *)&evtdump->src)) == NULL)
-		printf("unknown");
-	else 
-		printf("%s", srcstr);
-	printf(" -> ");
-	if ((dststr = saddr2str((struct sockaddr *)&evtdump->dst)) == NULL)
-		printf("unknown");
-	else 
-		printf("%s", dststr);
-	printf("\n");
-
-	return;
-}
-
-void
-print_err(buf, len)
-	caddr_t buf;
-	int len;
-{
-	struct evtdump *evtdump = (struct evtdump *)buf;
-	int i;
-	
-	
-	for (i = 0; evtmsg[i].msg; i++)
-		if (evtmsg[i].type == evtdump->type)
-			break;				
-
-	if (evtmsg[i].level != ERROR)
-		return;
-	
-	if (evtmsg[i].msg == NULL) 
-		printf("Error: Event %d\n", evtdump->type);
-	else
-		printf("Error: %s\n", evtmsg[i].msg);
-
-	if (evt_filter & EVTF_ERR_STOP)
-		evt_filter &= ~EVTF_LOOP;
-
-	return;
-}
-
-/*
- * Print a message when phase 1 SA goes down
- */
-void
-print_ph1down(buf, len)
-	caddr_t buf;
-	int len;
-{
-	struct evtdump *evtdump = (struct evtdump *)buf;
-	
-	if (evtdump->type != EVTT_PHASE1_DOWN)
-		return;
-
-	printf("VPN connexion terminated\n");
-
-	if (evt_filter & EVTF_PH1DOWN_STOP)
-		evt_filter &= ~EVTF_LOOP;
-	
-	return;
-}
-
-/*
- * Print ISAKMP mode config info (IP and banner)
- */
-void
-print_cfg(buf, len)
-	caddr_t buf;
-	int len;
-{
-	struct evtdump *evtdump = (struct evtdump *)buf;
-	struct isakmp_data *attr;
-	char *banner = NULL;
-	struct in_addr addr4;
-	
-	memset(&addr4, 0, sizeof(addr4));
-
-	if (evtdump->type != EVTT_ISAKMP_CFG_DONE && 
-	    evtdump->type != EVTT_NO_ISAKMP_CFG)
-		return;
-
-	len -= sizeof(*evtdump);
-	attr = (struct isakmp_data *)(evtdump + 1);
-
-	while (len > 0) {
-		if (len < sizeof(*attr)) {
-			printf("short attribute too short\n");
-			break;
-		}
-
-		if ((ntohs(attr->type) & ISAKMP_GEN_MASK) == ISAKMP_GEN_TV) {
-			/* Short attribute, skip */
-			len -= sizeof(*attr);
-			attr++;
-		} else { /* Long attribute */
-			char *n;
-
-			if (len < (sizeof(*attr) + ntohs(attr->lorv))) {
-				printf("long attribute too long\n");
-				break;
-			}
-
-			switch (ntohs(attr->type) & ~ISAKMP_GEN_MASK) {
-			case INTERNAL_IP4_ADDRESS:
-				if (ntohs(attr->lorv) < sizeof(addr4)) {
-					printf("addr4 attribute too short\n");
-					break;
-				}
-				memcpy(&addr4, attr + 1, sizeof(addr4));
-				break;
-
-			case UNITY_BANNER:
-				banner = racoon_malloc(ntohs(attr->lorv) + 1);
-				if (banner == NULL) {
-					printf("malloc failed\n");
-					break;
-				}
-				memcpy(banner, attr + 1, ntohs(attr->lorv));
-				banner[ntohs(attr->lorv)] = '\0';
-				break;
-
-			default:
-				break;
-			}
-
-			len -= (sizeof(*attr) + ntohs(attr->lorv));
-			n = (char *)attr;
-			attr = (struct isakmp_data *)
-			    (n + sizeof(*attr) + ntohs(attr->lorv));
-		}
-	}
-	
-	if (evtdump->type == EVTT_ISAKMP_CFG_DONE)
-		printf("Bound to address %s\n", inet_ntoa(addr4));
-	else
-		printf("VPN connexion established\n");
-	
-	if (banner) {
-		struct winsize win;
-		int col = 0;
-		int i;
-
-		if (ioctl(1, TIOCGWINSZ, &win) != 1) 
-			col = win.ws_col;
-			
-		for (i = 0; i < col; i++)
-			printf("%c", '=');
-		printf("\n%s\n", banner);
-		for (i = 0; i < col; i++)
-			printf("%c", '=');
-		printf("\n");
-		racoon_free(banner);
-	}
-	
-	if (evt_filter & EVTF_CFG_STOP)
-		evt_filter &= ~EVTF_LOOP;
-	
-	return;
-}
-	
-
-char *
-fixed_addr(addr, port, len)
-	char *addr, *port;
-	int len;
-{
-	static char _addr_buf_[BUFSIZ];
-	char *p;
-	int plen, i;
-
-	/* initialize */
-	memset(_addr_buf_, ' ', sizeof(_addr_buf_));
-
-	plen = strlen(port);
-	if (len < plen + 1)
-		return NULL;
-
-	p = _addr_buf_;
-	for (i = 0; i < len - plen - 1 && addr[i] != '\0'; /*noting*/)
-		*p++ = addr[i++];
-	*p++ = '.';
-
-	for (i = 0; i < plen && port[i] != '\0'; /*noting*/)
-		*p++ = port[i++];
-
-	_addr_buf_[len] = '\0';
-
-	return _addr_buf_;
-}
-
-static int
-handle_recv(combuf)
-	vchar_t *combuf;
-{
-        struct admin_com h, *com;
-        caddr_t buf;
-        int len;
-
-	com = (struct admin_com *)combuf->v;
-	len = com->ac_len - sizeof(*com);
-	buf = combuf->v + sizeof(*com);
-
-	switch (com->ac_cmd) {
-	case ADMIN_SHOW_SCHED:
-		print_schedule(buf, len);
-		break;
-
-	case ADMIN_SHOW_EVT: {
-		struct evtdump *evtdump;
-
-		/* We got no event */
-		if (len == 0) {
-			/* If we were purging the queue, it is now done */
-			if (evt_filter & EVTF_PURGE)
-				evt_filter &= ~EVTF_PURGE;
-			break;
-		}
-
-		if (len < sizeof(struct evtdump))
-			errx(1, "Short buffer\n");		
-
-		/* Toss outdated events */
-		evtdump = (struct evtdump *)buf;
-		if (evtdump->timestamp < evt_start)
-			break;
-
-		if (evt_filter & EVTF_ALL)
-			print_evt(buf, len);
-		if (evt_filter & EVTF_ERR)
-			print_err(buf, len);
-		if (evt_filter & EVTF_CFG)
-			print_cfg(buf, len);
-		if (evt_filter & EVTF_PH1DOWN)
-			print_ph1down(buf, len);
-		break;
-	}
-
-	case ADMIN_SHOW_SA:
-	   {
-		switch (com->ac_proto) {
-		case ADMIN_PROTO_ISAKMP:
-			dump_isakmp_sa(buf, len);
-			break;
-		case ADMIN_PROTO_IPSEC:
-		case ADMIN_PROTO_AH:
-		case ADMIN_PROTO_ESP:
-		    {
-			struct sadb_msg *msg = (struct sadb_msg *)buf;
-
-			switch (msg->sadb_msg_errno) {
-			case ENOENT:
-				switch (msg->sadb_msg_type) {
-				case SADB_DELETE:
-				case SADB_GET:
-					printf("No entry.\n");
-					break;
-				case SADB_DUMP:
-					printf("No SAD entries.\n");
-					break;
-				}
-				break;
-			case 0:
-				while (1) {
-					pfkey_sadump(msg);
-					if (msg->sadb_msg_seq == 0)
-						break;
-					msg = (struct sadb_msg *)((caddr_t)msg +
-						     PFKEY_UNUNIT64(msg->sadb_msg_len));
-				}
-				break;
-			default:
-				printf("%s.\n", strerror(msg->sadb_msg_errno));
-			}
-		    }
-			break;
-		case ADMIN_PROTO_INTERNAL:
-			dump_internal(buf, len);
-			break;
-		default:
-			printf("Invalid proto [%d]\n", com->ac_proto);
-		}
-
-	    }
-		break;
-
-	default:
-		/* IGNORE */
-		break;
-	}
-
-	close(so);
-	return 0;
-
-    bad:
-	close(so);
-	return -1;
-}
diff --git a/src/racoon/racoonctl.h b/src/racoon/racoonctl.h
deleted file mode 100644
index d507213..0000000
--- a/src/racoon/racoonctl.h
+++ /dev/null
@@ -1,53 +0,0 @@
-/*	$NetBSD: racoonctl.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: racoonctl.h,v 1.3 2005/06/19 22:37:47 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _RACOONCTL_H
-#define _RACOONCTL_H
-
-/* bumped on any change to the interface */
-#define RACOONCTL_INTERFACE	20050619
-extern u_int32_t racoonctl_interface;
-
-/* bumped when introducing changes that break backward compatibility */
-#define RACOONCTL_INTERFACE_MAJOR	1	
-extern u_int32_t racoonctl_interface_major;
-
-extern u_int32_t loglevel;
-
-int com_init(void);
-int com_send(vchar_t *);
-int com_recv(vchar_t **);
-struct sockaddr *get_sockaddr(int, char *, char *);
-
-#endif /* _RACOONCTL_H */
-
diff --git a/src/racoon/remoteconf.c b/src/racoon/remoteconf.c
deleted file mode 100644
index 3b96f30..0000000
--- a/src/racoon/remoteconf.c
+++ /dev/null
@@ -1,693 +0,0 @@
-/*	$NetBSD: remoteconf.c,v 1.9.4.2 2008/06/18 07:30:19 mgrooms Exp $	*/
-
-/* Id: remoteconf.c,v 1.38 2006/05/06 15:52:44 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/queue.h>
-
-#include <netinet/in.h>
-#include <netinet/in_systm.h>
-#include <netinet/ip.h>
-
-#include PATH_IPSEC_H
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "genlist.h"
-#include "debug.h"
-
-#include "isakmp_var.h"
-#ifdef ENABLE_HYBRID
-#include "isakmp_xauth.h"
-#endif
-#include "isakmp.h"
-#include "ipsec_doi.h"
-#include "oakley.h"
-#include "remoteconf.h"
-#include "localconf.h"
-#include "grabmyaddr.h"
-#include "policy.h"
-#include "proposal.h"
-#include "vendorid.h"
-#include "gcmalloc.h"
-#include "strnames.h"
-#include "algorithm.h"
-#include "nattraversal.h"
-#include "isakmp_frag.h"
-#include "genlist.h"
-
-static TAILQ_HEAD(_rmtree, remoteconf) rmtree, rmtree_save, rmtree_tmp;
-
-/* 
- * Script hook names and script hook paths
- */
-char *script_names[SCRIPT_MAX + 1] = { "phase1_up", "phase1_down" };
-
-/*%%%*/
-/*
- * search remote configuration.
- * don't use port number to search if its value is either IPSEC_PORT_ANY.
- * If matching anonymous entry, then new entry is copied from anonymous entry.
- * If no anonymous entry found, then return NULL.
- * OUT:	NULL:	NG
- *	Other:	remote configuration entry.
- */
-struct remoteconf *
-getrmconf_strict(remote, allow_anon)
-	struct sockaddr *remote;
-	int allow_anon;
-{
-	struct remoteconf *p;
-	struct remoteconf *anon = NULL;
-	int withport;
-	char buf[NI_MAXHOST + NI_MAXSERV + 10];
-	char addr[NI_MAXHOST], port[NI_MAXSERV];
-
-	withport = 0;
-
-#ifndef ENABLE_NATT
-	/* 
-	 * We never have ports set in our remote configurations, but when
-	 * NAT-T is enabled, the kernel can have policies with ports and
-	 * send us an acquire message for a destination that has a port set.
-	 * If we do this port check here, we don't find the remote config.
-	 *
-	 * In an ideal world, we would be able to have remote conf with
-	 * port, and the port could be a wildcard. That test could be used.
-	 */
-	if (remote->sa_family != AF_UNSPEC &&
-	    extract_port(remote) != IPSEC_PORT_ANY)
-		withport = 1;
-#endif /* ENABLE_NATT */
-
-	if (remote->sa_family == AF_UNSPEC)
-		snprintf (buf, sizeof(buf), "%s", "anonymous");
-	else {
-		GETNAMEINFO(remote, addr, port);
-		snprintf(buf, sizeof(buf), "%s%s%s%s", addr,
-			withport ? "[" : "",
-			withport ? port : "",
-			withport ? "]" : "");
-	}
-
-	TAILQ_FOREACH(p, &rmtree, chain) {
-		if ((remote->sa_family == AF_UNSPEC
-		     && remote->sa_family == p->remote->sa_family)
-		 || (!withport && cmpsaddrwop(remote, p->remote) == 0)
-		 || (withport && cmpsaddrstrict(remote, p->remote) == 0)) {
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"configuration found for %s.\n", buf);
-			return p;
-		}
-
-		/* save the pointer to the anonymous configuration */
-		if (p->remote->sa_family == AF_UNSPEC)
-			anon = p;
-	}
-
-	if (allow_anon && anon != NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"anonymous configuration selected for %s.\n", buf);
-		return anon;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"no remote configuration found.\n");
-
-	return NULL;
-}
-
-struct remoteconf *
-getrmconf(remote)
-	struct sockaddr *remote;
-{
-	return getrmconf_strict(remote, 1);
-}
-
-struct remoteconf *
-newrmconf()
-{
-	struct remoteconf *new;
-	int i;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-
-	new->proposal = NULL;
-
-	/* set default */
-	new->doitype = IPSEC_DOI;
-	new->sittype = IPSECDOI_SIT_IDENTITY_ONLY;
-	new->idvtype = IDTYPE_UNDEFINED;
-	new->idvl_p = genlist_init();
-	new->nonce_size = DEFAULT_NONCE_SIZE;
-	new->passive = FALSE;
-	new->ike_frag = FALSE;
-	new->esp_frag = IP_MAXPACKET;
-	new->ini_contact = TRUE;
-	new->mode_cfg = FALSE;
-	new->pcheck_level = PROP_CHECK_STRICT;
-	new->verify_identifier = FALSE;
-	new->verify_cert = TRUE;
-	new->getcert_method = ISAKMP_GETCERT_PAYLOAD;
-	new->getcacert_method = ISAKMP_GETCERT_LOCALFILE;
-	new->cacerttype = ISAKMP_CERT_X509SIGN;
-	new->certtype = ISAKMP_CERT_NONE;
-	new->cacertfile = NULL;
-	new->send_cert = TRUE;
-	new->send_cr = TRUE;
-	new->support_proxy = FALSE;
-	for (i = 0; i <= SCRIPT_MAX; i++)
-		new->script[i] = NULL;
-	new->gen_policy = FALSE;
-	new->retry_counter = lcconf->retry_counter;
-	new->retry_interval = lcconf->retry_interval;
-	new->nat_traversal = FALSE;
-	new->rsa_private = genlist_init();
-	new->rsa_public = genlist_init();
-	new->idv = NULL;
-	new->key = NULL;
-
-	new->dpd = TRUE; /* Enable DPD support by default */
-	new->dpd_interval = 0; /* Disable DPD checks by default */
-	new->dpd_retry = 5;
-	new->dpd_maxfails = 5;
-
-	new->weak_phase1_check = 0;
-
-#ifdef ENABLE_HYBRID
-	new->xauth = NULL;
-#endif
-
-	return new;
-}
-
-struct remoteconf *
-copyrmconf(remote)
-	struct sockaddr *remote;
-{
-	struct remoteconf *new, *old;
-
-	old = getrmconf_strict (remote, 0);
-	if (old == NULL) {
-		plog (LLV_ERROR, LOCATION, NULL,
-		      "Remote configuration for '%s' not found!\n",
-		      saddr2str (remote));
-		return NULL;
-	}
-
-	new = duprmconf (old);
-
-	return new;
-}
-
-void *
-dupidvl(entry, arg)
-	void *entry;
-	void *arg;
-{
-	struct idspec *id;
-	struct idspec *old = (struct idspec *) entry;
-	id = newidspec();
-	if (!id) return (void *) -1;
-
-	if (set_identifier(&id->id, old->idtype, old->id) != 0) {
-		racoon_free(id);
-		return (void *) -1;
-	}
-
-	id->idtype = old->idtype;
-
-	genlist_append(arg, id);
-	return NULL;
-}
-
-struct remoteconf *
-duprmconf (rmconf)
-	struct remoteconf *rmconf;
-{
-	struct remoteconf *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-	memcpy (new, rmconf, sizeof (*new));
-	// FIXME: We should duplicate the proposal as well.
-	// This is now handled in the cfparse.y
-	// new->proposal = ...;
-	
-	/* duplicate dynamic structures */
-	if (new->etypes)
-		new->etypes=dupetypes(new->etypes);
-	new->idvl_p = genlist_init();
-	genlist_foreach(rmconf->idvl_p, dupidvl, new->idvl_p);
-
-	return new;
-}
-
-static void
-idspec_free(void *data)
-{
-	vfree (((struct idspec *)data)->id);
-	free (data);
-}
-
-void
-delrmconf(rmconf)
-	struct remoteconf *rmconf;
-{
-#ifdef ENABLE_HYBRID
-	if (rmconf->xauth)
-		xauth_rmconf_delete(&rmconf->xauth);
-#endif
-	if (rmconf->etypes){
-		deletypes(rmconf->etypes);
-		rmconf->etypes=NULL;
-	}
-	if (rmconf->idvl_p)
-		genlist_free(rmconf->idvl_p, idspec_free);
-	if (rmconf->dhgrp)
-		oakley_dhgrp_free(rmconf->dhgrp);
-	if (rmconf->proposal)
-		delisakmpsa(rmconf->proposal);
-	racoon_free(rmconf);
-}
-
-void
-delisakmpsa(sa)
-	struct isakmpsa *sa;
-{
-	if (sa->dhgrp)
-		oakley_dhgrp_free(sa->dhgrp);
-	if (sa->next)
-		delisakmpsa(sa->next);
-#ifdef HAVE_GSSAPI
-	if (sa->gssid)
-		vfree(sa->gssid);
-#endif
-	racoon_free(sa);
-}
-
-struct etypes *
-dupetypes(orig)
-	struct etypes *orig;
-{
-	struct etypes *new;
-
-	if (!orig) 
-		return NULL;
-
-	new = racoon_malloc(sizeof(struct etypes));
-	if (new == NULL) 
-		return NULL;
-
-	new->type = orig->type;
-	new->next = NULL;
-
-	if (orig->next)
-		new->next=dupetypes(orig->next);
-
-	return new;
-}
-
-void
-deletypes(e)
-	struct etypes *e;
-{
-	if (e->next)
-		deletypes(e->next);
-	racoon_free(e);
-}
-
-/*
- * insert into head of list.
- */
-void
-insrmconf(new)
-	struct remoteconf *new;
-{
-	TAILQ_INSERT_HEAD(&rmtree, new, chain);
-}
-
-void
-remrmconf(rmconf)
-	struct remoteconf *rmconf;
-{
-	TAILQ_REMOVE(&rmtree, rmconf, chain);
-}
-
-void
-flushrmconf()
-{
-	struct remoteconf *p, *next;
-
-	for (p = TAILQ_FIRST(&rmtree); p; p = next) {
-		next = TAILQ_NEXT(p, chain);
-		remrmconf(p);
-		delrmconf(p);
-	}
-}
-
-void
-initrmconf()
-{
-	TAILQ_INIT(&rmtree);
-}
-
-void
-save_rmconf()
-{
-	rmtree_save=rmtree;
-	initrmconf();
-}
-
-void
-save_rmconf_flush()
-{
-	rmtree_tmp=rmtree;
-	rmtree=rmtree_save;
-	flushrmconf();
-	initrmconf();
-	rmtree=rmtree_tmp;
-}
-
-
-
-/* check exchange type to be acceptable */
-struct etypes *
-check_etypeok( struct remoteconf *rmconf, u_int8_t etype)
-{
-	struct etypes *e;
-
-	for (e = rmconf->etypes; e != NULL; e = e->next) {
-		if (e->type == etype)
-			break;
-	}
-
-	return e;
-}
-
-/*%%%*/
-struct isakmpsa *
-newisakmpsa()
-{
-	struct isakmpsa *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-
-	/*
-	 * Just for sanity, make sure this is initialized.  This is
-	 * filled in for real when the ISAKMP proposal is configured.
-	 */
-	new->vendorid = VENDORID_UNKNOWN;
-
-	new->next = NULL;
-	new->rmconf = NULL;
-#ifdef HAVE_GSSAPI
-	new->gssid = NULL;
-#endif
-
-	return new;
-}
-
-/*
- * insert into tail of list.
- */
-void
-insisakmpsa(new, rmconf)
-	struct isakmpsa *new;
-	struct remoteconf *rmconf;
-{
-	struct isakmpsa *p;
-
-	new->rmconf = rmconf;
-
-	if (rmconf->proposal == NULL) {
-		rmconf->proposal = new;
-		return;
-	}
-
-	for (p = rmconf->proposal; p->next != NULL; p = p->next)
-		;
-	p->next = new;
-
-	return;
-}
-
-struct remoteconf *
-foreachrmconf(rmconf_func_t rmconf_func, void *data)
-{
-  struct remoteconf *p, *ret = NULL;
-  RACOON_TAILQ_FOREACH_REVERSE(p, &rmtree, _rmtree, chain) {
-    ret = (*rmconf_func)(p, data);
-    if (ret)
-      break;
-  }
-
-  return ret;
-}
-
-static void *
-dump_peers_identifiers (void *entry, void *arg)
-{
-	struct idspec *id = (struct idspec*) entry;
-	char buf[1024], *pbuf;
-	pbuf = buf;
-	pbuf += sprintf (pbuf, "\tpeers_identifier %s",
-			 s_idtype (id->idtype));
-	if (id->id)
-		pbuf += sprintf (pbuf, " \"%s\"", id->id->v);
-	plog(LLV_INFO, LOCATION, NULL, "%s;\n", buf);
-	return NULL;
-}
-
-static struct remoteconf *
-dump_rmconf_single (struct remoteconf *p, void *data)
-{
-	struct etypes *etype = p->etypes;
-	struct isakmpsa *prop = p->proposal;
-	char buf[1024], *pbuf;
-
-	pbuf = buf;
-	pbuf += sprintf(pbuf, "remote %s", saddr2str(p->remote));
-	if (p->inherited_from)
-		pbuf += sprintf(pbuf, " inherit %s",
-				saddr2str(p->inherited_from->remote));
-	plog(LLV_INFO, LOCATION, NULL, "%s {\n", buf);
-	pbuf = buf;
-	pbuf += sprintf(pbuf, "\texchange_type ");
-	while (etype) {
-		pbuf += sprintf (pbuf, "%s%s", s_etype(etype->type),
-				 etype->next != NULL ? ", " : ";\n");
-		etype = etype->next;
-	}
-	plog(LLV_INFO, LOCATION, NULL, "%s", buf);
-	plog(LLV_INFO, LOCATION, NULL, "\tdoi %s;\n", s_doi(p->doitype));
-	pbuf = buf;
-	pbuf += sprintf(pbuf, "\tmy_identifier %s", s_idtype (p->idvtype));
-	if (p->idvtype == IDTYPE_ASN1DN) {
-		plog(LLV_INFO, LOCATION, NULL, "%s;\n", buf);
-		plog(LLV_INFO, LOCATION, NULL, "\tcertificate_type %s \"%s\" \"%s\";\n",
-			p->certtype == ISAKMP_CERT_X509SIGN ? "x509" : "*UNKNOWN*",
-			p->mycertfile, p->myprivfile);
-		switch (p->getcert_method) {
-		  case 0:
-		  	break;
-		  case ISAKMP_GETCERT_PAYLOAD:
-			plog(LLV_INFO, LOCATION, NULL, "\t/* peers certificate from payload */\n");
-			break;
-		  case ISAKMP_GETCERT_LOCALFILE:
-			plog(LLV_INFO, LOCATION, NULL, "\tpeers_certfile \"%s\";\n", p->peerscertfile);
-			break;
-		  case ISAKMP_GETCERT_DNS:
-			plog(LLV_INFO, LOCATION, NULL, "\tpeer_certfile dnssec;\n");
-			break;
-		  default:
-			plog(LLV_INFO, LOCATION, NULL, "\tpeers_certfile *UNKNOWN* (%d)\n", p->getcert_method);
-		}
-	}
-	else {
-		if (p->idv)
-			pbuf += sprintf (pbuf, " \"%s\"", p->idv->v);
-		plog(LLV_INFO, LOCATION, NULL, "%s;\n", buf);
-		genlist_foreach(p->idvl_p, &dump_peers_identifiers, NULL);
-	}
-
-	plog(LLV_INFO, LOCATION, NULL, "\tsend_cert %s;\n",
-		s_switch (p->send_cert));
-	plog(LLV_INFO, LOCATION, NULL, "\tsend_cr %s;\n",
-		s_switch (p->send_cr));
-	plog(LLV_INFO, LOCATION, NULL, "\tverify_cert %s;\n",
-		s_switch (p->verify_cert));
-	plog(LLV_INFO, LOCATION, NULL, "\tverify_identifier %s;\n",
-		s_switch (p->verify_identifier));
-	plog(LLV_INFO, LOCATION, NULL, "\tnat_traversal %s;\n",
-		p->nat_traversal == NATT_FORCE ?
-			"force" : s_switch (p->nat_traversal));
-	plog(LLV_INFO, LOCATION, NULL, "\tnonce_size %d;\n",
-		p->nonce_size);
-	plog(LLV_INFO, LOCATION, NULL, "\tpassive %s;\n",
-		s_switch (p->passive));
-	plog(LLV_INFO, LOCATION, NULL, "\tike_frag %s;\n",
-		p->ike_frag == ISAKMP_FRAG_FORCE ?
-			"force" : s_switch (p->ike_frag));
-	plog(LLV_INFO, LOCATION, NULL, "\tesp_frag %d;\n", p->esp_frag);
-	plog(LLV_INFO, LOCATION, NULL, "\tinitial_contact %s;\n",
-		s_switch (p->ini_contact));
-	plog(LLV_INFO, LOCATION, NULL, "\tgenerate_policy %s;\n",
-		s_switch (p->gen_policy));
-	plog(LLV_INFO, LOCATION, NULL, "\tsupport_proxy %s;\n",
-		s_switch (p->support_proxy));
-
-	while (prop) {
-		plog(LLV_INFO, LOCATION, NULL, "\n");
-		plog(LLV_INFO, LOCATION, NULL,
-			"\t/* prop_no=%d, trns_no=%d, rmconf=%s */\n",
-			prop->prop_no, prop->trns_no,
-			saddr2str(prop->rmconf->remote));
-		plog(LLV_INFO, LOCATION, NULL, "\tproposal {\n");
-		plog(LLV_INFO, LOCATION, NULL, "\t\tlifetime time %lu sec;\n",
-			(long)prop->lifetime);
-		plog(LLV_INFO, LOCATION, NULL, "\t\tlifetime bytes %zd;\n",
-			prop->lifebyte);
-		plog(LLV_INFO, LOCATION, NULL, "\t\tdh_group %s;\n",
-			alg_oakley_dhdef_name(prop->dh_group));
-		plog(LLV_INFO, LOCATION, NULL, "\t\tencryption_algorithm %s;\n", 
-			alg_oakley_encdef_name(prop->enctype));
-		plog(LLV_INFO, LOCATION, NULL, "\t\thash_algorithm %s;\n", 
-			alg_oakley_hashdef_name(prop->hashtype));
-		plog(LLV_INFO, LOCATION, NULL, "\t\tauthentication_method %s;\n", 
-			alg_oakley_authdef_name(prop->authmethod));
-		plog(LLV_INFO, LOCATION, NULL, "\t}\n");
-		prop = prop->next;
-	}
-	plog(LLV_INFO, LOCATION, NULL, "}\n");
-	plog(LLV_INFO, LOCATION, NULL, "\n");
-
-	return NULL;
-}
-
-void
-dumprmconf()
-{
-	foreachrmconf (dump_rmconf_single, NULL);
-}
-
-struct idspec *
-newidspec()
-{
-	struct idspec *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-	new->idtype = IDTYPE_ADDRESS;
-
-	return new;
-}
-
-vchar_t *
-script_path_add(path)
-	vchar_t *path;
-{
-	char *script_dir;
-	vchar_t *new_path;
-	vchar_t *new_storage;
-	vchar_t **sp;
-	size_t len;
-	size_t size;
-
-	script_dir = lcconf->pathinfo[LC_PATHTYPE_SCRIPT];
-
-	/* Try to find the script in the script directory */
-	if ((path->v[0] != '/') && (script_dir != NULL)) {
-		len = strlen(script_dir) + sizeof("/") + path->l + 1;
-
-		if ((new_path = vmalloc(len)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "Cannot allocate memory: %s\n", strerror(errno));
-			return NULL;
-		}
-
-		new_path->v[0] = '\0';
-		(void)strlcat(new_path->v, script_dir, len);
-		(void)strlcat(new_path->v, "/", len);
-		(void)strlcat(new_path->v, path->v, len);
-
-		vfree(path);
-		path = new_path;
-	}
-
-	return path;
-}
-
-
-struct isakmpsa *
-dupisakmpsa(struct isakmpsa *sa)
-{
-	struct isakmpsa *res=NULL;
-
-	if(sa == NULL)
-		return NULL;
-
-	res=newisakmpsa();
-	if(res == NULL)
-		return NULL;
-
-	*res=*sa;
-#ifdef HAVE_GSSAPI
-	/* XXX gssid
-	 */
-#endif
-	res->next=NULL;
-
-	if(sa->dhgrp != NULL)
-		oakley_setdhgroup (sa->dh_group, &(res->dhgrp));
-
-	return res;
-
-}
diff --git a/src/racoon/remoteconf.h b/src/racoon/remoteconf.h
deleted file mode 100644
index ca5945e..0000000
--- a/src/racoon/remoteconf.h
+++ /dev/null
@@ -1,196 +0,0 @@
-/*	$NetBSD: remoteconf.h,v 1.7 2006/10/03 08:01:56 vanhu Exp $	*/
-
-/* Id: remoteconf.h,v 1.26 2006/05/06 15:52:44 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _REMOTECONF_H
-#define _REMOTECONF_H
-
-/* remote configuration */
-
-#include <sys/queue.h>
-#include "genlist.h"
-#ifdef ENABLE_HYBRID
-#include "isakmp_var.h"
-#include "isakmp_xauth.h"
-#endif
-
-struct proposalspec;
-
-struct etypes {
-	int type;
-	struct etypes *next;
-};
-
-/* Script hooks */
-#define SCRIPT_PHASE1_UP	0
-#define SCRIPT_PHASE1_DOWN	1
-#define SCRIPT_MAX		1
-extern char *script_names[SCRIPT_MAX + 1];
-
-struct remoteconf {
-	struct sockaddr *remote;	/* remote IP address */
-					/* if family is AF_UNSPEC, that is
-					 * for anonymous configuration. */
-
-	struct etypes *etypes;		/* exchange type list. the head
-					 * is a type to be sent first. */
-	int doitype;			/* doi type */
-	int sittype;			/* situation type */
-
-	int idvtype;			/* my identifier type */
-	vchar_t *idv;			/* my identifier */
-	vchar_t *key;			/* my pre-shared key */
-	struct genlist *idvl_p;         /* peer's identifiers list */
-
-	int certtype;			/* certificate type if need */
-	char *mycertfile;		/* file name of my certificate */
-	char *myprivfile;		/* file name of my private key file */
-	char *peerscertfile;		/* file name of peer's certifcate */
-	int getcert_method;		/* the way to get peer's certificate */
-	int cacerttype;			/* CA type is needed */
-	char *cacertfile;		/* file name of CA */
-	int getcacert_method;		/* the way to get the CA */
-	int send_cert;			/* send to CERT or not */
-	int send_cr;			/* send to CR or not */
-	int verify_cert;		/* verify a CERT strictly */
-	int verify_identifier;		/* vefify the peer's identifier */
-	int nonce_size;			/* the number of bytes of nonce */
-	int passive;			/* never initiate */
-	int ike_frag;			/* IKE fragmentation */
-	int esp_frag;			/* ESP fragmentation */
-	int mode_cfg;			/* Gets config through mode config */
-	int support_proxy;		/* support mip6/proxy */
-#define GENERATE_POLICY_NONE   0
-#define GENERATE_POLICY_REQUIRE        1
-#define GENERATE_POLICY_UNIQUE 2
-	int gen_policy;			/* generate policy if no policy found */
-	int ini_contact;		/* initial contact */
-	int pcheck_level;		/* level of propocl checking */
-	int nat_traversal;		/* NAT-Traversal */
-	vchar_t *script[SCRIPT_MAX + 1];/* script hooks paths */
-	int dh_group;			/* use it when only aggressive mode */
-	struct dhgroup *dhgrp;		/* use it when only aggressive mode */
-					/* above two can't be defined by user*/
-
-	int retry_counter;		/* times to retry. */
-	int retry_interval;		/* interval each retry. */
-				/* above 2 values are copied from localconf. */
-
-	int dpd;				/* Negociate DPD support ? */
-	int dpd_retry;			/* in seconds */
-	int dpd_interval;		/* in seconds */
-	int dpd_maxfails; 
-
-	int ph1id; /* ph1id to be matched with sainfo sections */
-
-	int weak_phase1_check;		/* act on unencrypted deletions ? */
-
-	struct isakmpsa *proposal;	/* proposal list */
-	struct remoteconf *inherited_from;	/* the original rmconf 
-						   from which this one 
-						   was inherited */
-	struct proposalspec *prhead;
-
-	struct genlist	*rsa_private,	/* lists of PlainRSA keys to use */
-			*rsa_public;
-
-#ifdef ENABLE_HYBRID
-	struct xauth_rmconf *xauth;
-#endif
-
-	TAILQ_ENTRY(remoteconf) chain;	/* next remote conf */
-};
-
-struct dhgroup;
-
-/* ISAKMP SA specification */
-struct isakmpsa {
-	int prop_no;
-	int trns_no;
-	time_t lifetime;
-	size_t lifebyte;
-	int enctype;
-	int encklen;
-	int authmethod;
-	int hashtype;
-	int vendorid;
-#ifdef HAVE_GSSAPI
-	vchar_t *gssid;
-#endif
-	int dh_group;			/* don't use it if aggressive mode */
-	struct dhgroup *dhgrp;		/* don't use it if aggressive mode */
-
-	struct isakmpsa *next;		/* next transform */
-	struct remoteconf *rmconf;	/* backpointer to remoteconf */
-};
-
-struct idspec {
-	int idtype;                     /* identifier type */
-	vchar_t *id;                    /* identifier */
-};
-
-typedef struct remoteconf * (rmconf_func_t)(struct remoteconf *rmconf, void *data);
-
-extern struct remoteconf *getrmconf __P((struct sockaddr *));
-extern struct remoteconf *getrmconf_strict
-	__P((struct sockaddr *remote, int allow_anon));
-extern struct remoteconf *copyrmconf __P((struct sockaddr *));
-extern struct remoteconf *newrmconf __P((void));
-extern struct remoteconf *duprmconf __P((struct remoteconf *));
-extern void delrmconf __P((struct remoteconf *));
-extern void delisakmpsa __P((struct isakmpsa *));
-extern void deletypes __P((struct etypes *));
-extern struct etypes * dupetypes __P((struct etypes *));
-extern void insrmconf __P((struct remoteconf *));
-extern void remrmconf __P((struct remoteconf *));
-extern void flushrmconf __P((void));
-extern void initrmconf __P((void));
-extern void save_rmconf __P((void));
-extern void save_rmconf_flush __P((void));
-
-extern struct etypes *check_etypeok
-	__P((struct remoteconf *, u_int8_t));
-extern struct remoteconf *foreachrmconf __P((rmconf_func_t rmconf_func,
-					     void *data));
-
-extern struct isakmpsa *newisakmpsa __P((void));
-extern struct isakmpsa *dupisakmpsa __P((struct isakmpsa *));
-
-extern void insisakmpsa __P((struct isakmpsa *, struct remoteconf *));
-
-extern void dumprmconf __P((void));
-
-extern struct idspec *newidspec __P((void));
-
-extern vchar_t *script_path_add __P((vchar_t *));
-
-#endif /* _REMOTECONF_H */
diff --git a/src/racoon/rsalist.c b/src/racoon/rsalist.c
deleted file mode 100644
index 850aa4c..0000000
--- a/src/racoon/rsalist.c
+++ /dev/null
@@ -1,216 +0,0 @@
-/*	$NetBSD: rsalist.c,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: rsalist.c,v 1.3 2004/11/08 12:04:23 ludvigm Exp */
-
-/*
- * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
- * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
- * 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.
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <string.h>
-
-#include <sys/types.h>
-#include <sys/queue.h>
-#include <sys/socket.h>
-#include <netdb.h>
-
-#include <openssl/bn.h>
-#include <openssl/rsa.h>
-
-#include "misc.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "rsalist.h"
-#include "genlist.h"
-#include "remoteconf.h"
-#include "crypto_openssl.h"
-
-#ifndef LIST_FIRST
-#define LIST_FIRST(head)        ((head)->lh_first)
-#endif
-
-#ifndef LIST_NEXT
-#define LIST_NEXT(elm, field)   ((elm)->field.le_next)
-#endif
-
-/* from prsa_tok.l */
-int prsa_parse_file(struct genlist *list, const char *fname, enum rsa_key_type type);
-
-int
-rsa_key_insert(struct genlist *list, struct netaddr *src,
-	       struct netaddr *dst, RSA *rsa)
-{
-	struct rsa_key *rsa_key;
-
-	rsa_key = calloc(sizeof(struct rsa_key), 1);
-	rsa_key->rsa = rsa;
-
-	if (src)
-		rsa_key->src = src;
-	else
-		rsa_key->src = calloc(sizeof(*rsa_key->src), 1);
-
-	if (dst)
-		rsa_key->dst = dst;
-	else
-		rsa_key->dst = calloc(sizeof(*rsa_key->dst), 1);
-
-	genlist_append(list, rsa_key);
-
-	return 0;
-}
-
-static void *
-rsa_key_dump_one(void *entry, void *arg)
-{
-	struct rsa_key *key = entry;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "Entry %s\n",
-	     naddrwop2str_fromto("%s -> %s", key->src,
-				 key->dst));
-	if (loglevel > LLV_DEBUG)
-		RSA_print_fp(stdout, key->rsa, 4);
-
-	return NULL;
-}
-
-void
-rsa_key_dump(struct genlist *list)
-{
-	genlist_foreach(list, rsa_key_dump_one, NULL);
-}
-
-static void *
-rsa_list_count_one(void *entry, void *arg)
-{
-	if (arg)
-		(*(unsigned long *)arg)++;
-	return NULL;
-}
-
-unsigned long
-rsa_list_count(struct genlist *list)
-{
-	unsigned long count = 0;
-	genlist_foreach(list, rsa_list_count_one, &count);
-	return count;
-}
-
-struct lookup_result {
-	struct ph1handle *iph1;
-	int max_score;
-	struct genlist *winners;
-};
-	
-static void *
-rsa_lookup_key_one(void *entry, void *data)
-{
-	int local_score, remote_score;
-	struct lookup_result *req = data;
-	struct rsa_key *key = entry;
-
-	local_score = naddr_score(key->src, req->iph1->local);
-	remote_score = naddr_score(key->dst, req->iph1->remote);
-
-	plog(LLV_DEBUG, LOCATION, NULL, "Entry %s scored %d/%d\n",
-		naddrwop2str_fromto("%s -> %s", key->src, key->dst),
-		local_score, remote_score);
-
-	if (local_score >= 0 && remote_score >= 0) {
-		if (local_score + remote_score > req->max_score) {
-			req->max_score = local_score + remote_score;
-//			genlist_free(req->winners, NULL);
-		}
-
-		if (local_score + remote_score >= req->max_score) {
-			genlist_append(req->winners, key);
-		}
-	}
-
-	/* Always traverse the whole list */
-	return NULL;
-}
-
-struct genlist *
-rsa_lookup_keys(struct ph1handle *iph1, int my)
-{
-	struct genlist *list;
-	struct lookup_result r;
-
-	plog(LLV_DEBUG, LOCATION, NULL, "Looking up RSA key for %s\n",
-	     saddr2str_fromto("%s <-> %s", iph1->local, iph1->remote));
-
-	r.iph1 = iph1;
-	r.max_score = -1;
-	r.winners = genlist_init();
-
-	if (my)
-		list = iph1->rmconf->rsa_private;
-	else
-		list = iph1->rmconf->rsa_public;
-
-	genlist_foreach(list, rsa_lookup_key_one, &r);
-
-	if (loglevel >= LLV_DEBUG)
-		rsa_key_dump(r.winners);
-
-	return r.winners;
-}
-
-int
-rsa_parse_file(struct genlist *list, const char *fname, enum rsa_key_type type)
-{
-	int ret;
-	
-	plog(LLV_DEBUG, LOCATION, NULL, "Parsing %s\n", fname);
-	ret = prsa_parse_file(list, fname, type);
-	if (loglevel >= LLV_DEBUG)
-		rsa_key_dump(list);
-	return ret;
-}
-
-RSA *
-rsa_try_check_rsasign(vchar_t *source, vchar_t *sig, struct genlist *list)
-{
-	struct rsa_key *key;
-	struct genlist_entry *gp;
-
-	for(key = genlist_next(list, &gp); key; key = genlist_next(NULL, &gp)) {
-		plog(LLV_DEBUG, LOCATION, NULL, "Checking key %s...\n",
-			naddrwop2str_fromto("%s -> %s", key->src, key->dst));
-		if (eay_check_rsasign(source, sig, key->rsa) == 0) {
-			plog(LLV_DEBUG, LOCATION, NULL, " ... YEAH!\n");
-			return key->rsa;
-		}
-		plog(LLV_DEBUG, LOCATION, NULL, " ... nope.\n");
-	}
-	return NULL;
-}
diff --git a/src/racoon/rsalist.h b/src/racoon/rsalist.h
deleted file mode 100644
index 911670f..0000000
--- a/src/racoon/rsalist.h
+++ /dev/null
@@ -1,65 +0,0 @@
-/*	$NetBSD: rsalist.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: rsalist.h,v 1.2 2004/07/12 20:43:51 ludvigm Exp */
-/*
- * Copyright (C) 2004 SuSE Linux AG, Nuernberg, Germany.
- * Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
- * 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.
- */
-
-#ifndef _RSALIST_H
-#define _RSALIST_H
-
-#include <netinet/in.h>
-#include <openssl/rsa.h>
-
-#include "handler.h"
-#include "genlist.h"
-
-enum rsa_key_type {
-	RSA_TYPE_ANY = 0,
-	RSA_TYPE_PUBLIC,
-	RSA_TYPE_PRIVATE
-};
-
-struct rsa_key {
-	struct netaddr *src;
-	struct netaddr *dst;
-	RSA *rsa;
-};
-
-int rsa_key_insert(struct genlist *list, struct netaddr *src, struct netaddr *dst, RSA *rsa);
-void rsa_key_dump(struct genlist *list);
-
-struct genlist *rsa_lookup_keys(struct ph1handle *iph1, int my);
-RSA *rsa_try_check_rsasign(vchar_t *source, vchar_t *sig, struct genlist *list);
-
-unsigned long rsa_list_count(struct genlist *list);
-
-int rsa_parse_file(struct genlist *list, const char *fname, enum rsa_key_type type);
-
-#endif /* _RSALIST_H */
diff --git a/src/racoon/safefile.c b/src/racoon/safefile.c
deleted file mode 100644
index 5241092..0000000
--- a/src/racoon/safefile.c
+++ /dev/null
@@ -1,93 +0,0 @@
-/*	$NetBSD: safefile.c,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/*	$KAME: safefile.c,v 1.5 2001/03/05 19:54:06 thorpej Exp $	*/
-
-/*
- * Copyright (C) 2000 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <sys/socket.h>
-#include <netinet/in.h>
-#include <unistd.h>
-
-#include "plog.h"
-#include "debug.h"
-#include "misc.h"
-#include "safefile.h"
-
-int
-safefile(path, secret)
-	const char *path;
-	int secret;
-{
-	struct stat s;
-	uid_t me;
-
-	/* no setuid */
-	if (getuid() != geteuid()) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "setuid'ed execution not allowed\n");
-		return -1;
-	}
-
-	if (stat(path, &s) != 0)
-		return -1;
-
-	/* the file must be owned by the running uid */
-	me = getuid();
-	if (s.st_uid != me) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "%s has invalid owner uid\n", path);
-		return -1;
-	}
-
-	switch (s.st_mode & S_IFMT) {
-	case S_IFREG:
-		break;
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "%s is an invalid file type 0x%x\n", path,
-		    (s.st_mode & S_IFMT));
-		return -1;
-	}
-
-	/* secret file should not be read by others */
-	if (secret) {
-		if ((s.st_mode & S_IRWXG) != 0 || (s.st_mode & S_IRWXO) != 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "%s has weak file permission\n", path);
-			return -1;
-		}
-	}
-
-	return 0;
-}
diff --git a/src/racoon/safefile.h b/src/racoon/safefile.h
deleted file mode 100644
index c8d6a6c..0000000
--- a/src/racoon/safefile.h
+++ /dev/null
@@ -1,39 +0,0 @@
-/*	$NetBSD: safefile.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: safefile.h,v 1.4 2004/07/12 18:32:12 ludvigm Exp */
-
-/*
- * Copyright (C) 2000 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.
- */
-
-#ifndef _SAFEFILE_H
-#define _SAFEFILE_H
-
-extern int safefile __P((const char *, int));
-
-#endif /* _SAFEFILE_H */
diff --git a/src/racoon/sainfo.c b/src/racoon/sainfo.c
deleted file mode 100644
index afa0aac..0000000
--- a/src/racoon/sainfo.c
+++ /dev/null
@@ -1,319 +0,0 @@
-/*	$NetBSD: sainfo.c,v 1.7.6.1 2007/08/01 11:52:22 vanhu Exp $	*/
-
-/*	$KAME: sainfo.c,v 1.16 2003/06/27 07:32:39 sakane Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/param.h>
-#include <sys/types.h>
-#include <sys/socket.h>
-#include <sys/queue.h>
-
-#include <netinet/in.h>
-#include <netinet/in.h> 
-#include PATH_IPSEC_H
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "debug.h"
-
-#include "localconf.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "ipsec_doi.h"
-#include "oakley.h"
-#include "handler.h"
-#include "algorithm.h"
-#include "sainfo.h"
-#include "gcmalloc.h"
-
-static LIST_HEAD(_sitree, sainfo) sitree, sitree_save, sitree_tmp;
-
-/* %%%
- * modules for ipsec sa info
- */
-/*
- * return matching entry.
- * no matching entry found and if there is anonymous entry, return it.
- * else return NULL.
- * First pass is for sainfo from a specified peer, second for others.
- */
-struct sainfo *
-getsainfo(loc, rmt, peer, remoteid)
-	const vchar_t *loc, *rmt, *peer;
-	int remoteid;
-{
-	struct sainfo *s = NULL;
-	struct sainfo *anonymous = NULL;
-	int pass = 1;
-
-	if (peer == NULL)
-		pass = 2;
-
-	/* debug level output */
-	if(loglevel >= LLV_DEBUG) {
-		char *dloc, *drmt, *dpeer, *dclient;
- 
-		if (loc == NULL)
-			dloc = strdup("ANONYMOUS");
-		else
-			dloc = ipsecdoi_id2str(loc);
- 
-		if (rmt == NULL)
-			drmt = strdup("ANONYMOUS");
-		else
-			drmt = ipsecdoi_id2str(rmt);
- 
-		if (peer == NULL)
-			dpeer = strdup("NULL");
-		else
-			dpeer = ipsecdoi_id2str(peer);
- 
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"getsainfo params: loc=\'%s\', rmt=\'%s\', peer=\'%s\', id=%i\n",
-			dloc, drmt, dpeer, remoteid );
- 
-                racoon_free(dloc);
-                racoon_free(drmt);
-                racoon_free(dpeer);
-	}
-
-    again:
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"getsainfo pass #%i\n", pass);
- 
-	LIST_FOREACH(s, &sitree, chain) {
-		const char *sainfostr = sainfo2str(s);
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"evaluating sainfo: %s\n", sainfostr);
-
-		if(s->remoteid != remoteid)
-			continue;
-
-		if (s->id_i != NULL) {
-			if (pass == 2)
-				continue;
-			if (ipsecdoi_chkcmpids(peer, s->id_i, 0))
-				continue;
-		} else if (pass == 1)
-			continue;
-		if (s->idsrc == NULL && s->iddst == NULL) {
-			anonymous = s;
-			continue;
-		}
-
-		/* anonymous ? */
-		if (loc == NULL) {
-			if (anonymous != NULL)
-				break;
-			continue;
-		}
-
-		/* compare the ids */
-		if (!ipsecdoi_chkcmpids(loc, s->idsrc, 0) &&
-		    !ipsecdoi_chkcmpids(rmt, s->iddst, 0))
-			return s;
-	}
-
-	if ((anonymous == NULL) && (pass == 1)) {
-		pass++;
-		goto again;
-	}
-
-	return anonymous;
-}
-
-struct sainfo *
-newsainfo()
-{
-	struct sainfo *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-
-	new->lifetime = IPSECDOI_ATTR_SA_LD_SEC_DEFAULT;
-	new->lifebyte = IPSECDOI_ATTR_SA_LD_KB_MAX;
-
-	return new;
-}
-
-void
-delsainfo(si)
-	struct sainfo *si;
-{
-	int i;
-
-	for (i = 0; i < MAXALGCLASS; i++)
-		delsainfoalg(si->algs[i]);
-
-	if (si->idsrc)
-		vfree(si->idsrc);
-	if (si->iddst)
-		vfree(si->iddst);
-
-#ifdef ENABLE_HYBRID
-	if (si->group)
-		vfree(si->group);
-#endif
-
-	racoon_free(si);
-}
-
-void
-inssainfo(new)
-	struct sainfo *new;
-{
-	LIST_INSERT_HEAD(&sitree, new, chain);
-}
-
-void
-remsainfo(si)
-	struct sainfo *si;
-{
-	LIST_REMOVE(si, chain);
-}
-
-void
-flushsainfo()
-{
-	struct sainfo *s, *next;
-
-	for (s = LIST_FIRST(&sitree); s; s = next) {
-		next = LIST_NEXT(s, chain);
-		remsainfo(s);
-		delsainfo(s);
-	}
-}
-
-void
-initsainfo()
-{
-	LIST_INIT(&sitree);
-}
-
-struct sainfoalg *
-newsainfoalg()
-{
-	struct sainfoalg *new;
-
-	new = racoon_calloc(1, sizeof(*new));
-	if (new == NULL)
-		return NULL;
-
-	return new;
-}
-
-void
-delsainfoalg(alg)
-	struct sainfoalg *alg;
-{
-	struct sainfoalg *a, *next;
-
-	for (a = alg; a; a = next) {
-		next = a->next;
-		racoon_free(a);
-	}
-}
-
-void
-inssainfoalg(head, new)
-	struct sainfoalg **head;
-	struct sainfoalg *new;
-{
-	struct sainfoalg *a;
-
-	for (a = *head; a && a->next; a = a->next)
-		;
-	if (a)
-		a->next = new;
-	else
-		*head = new;
-}
-
-const char *
-sainfo2str(si)
-	const struct sainfo *si;
-{
-        static char buf[256];
-
-        char *idloc = NULL, *idrmt = NULL, *id_i;
- 
-        if (si->idsrc == NULL)
-                idloc = strdup("ANONYMOUS");
-        else
-                idloc = ipsecdoi_id2str(si->idsrc);
- 
-        if (si->iddst == NULL)
-                idrmt = strdup("ANONYMOUS");
-        else
-                idrmt = ipsecdoi_id2str(si->iddst);
- 
-        if (si->id_i == NULL)
-                id_i = strdup("ANY");
-        else
-                id_i = ipsecdoi_id2str(si->id_i);
- 
-        snprintf(buf, 255, "loc=\'%s\', rmt=\'%s\', peer=\'%s\', id=%i",
-		idloc, idrmt, id_i, si->remoteid);
- 
-        racoon_free(idloc);
-        racoon_free(idrmt);
-        racoon_free(id_i);
- 
-        return buf;
-}
-
-void save_sainfotree(void){
-	sitree_save=sitree;
-	initsainfo();
-}
-
-void save_sainfotree_flush(void){
-	sitree_tmp=sitree;
-	sitree=sitree_save;
-	flushsainfo();
-	sitree=sitree_tmp;
-}
-
-void save_sainfotree_restore(void){
-	flushsainfo();
-	sitree=sitree_save;
-}
diff --git a/src/racoon/sainfo.h b/src/racoon/sainfo.h
deleted file mode 100644
index 357da3f..0000000
--- a/src/racoon/sainfo.h
+++ /dev/null
@@ -1,88 +0,0 @@
-/*	$NetBSD: sainfo.h,v 1.5 2006/10/03 08:01:56 vanhu Exp $	*/
-
-/* Id: sainfo.h,v 1.5 2006/07/09 17:19:38 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _SAINFO_H
-#define _SAINFO_H
-
-#include <sys/queue.h>
-
-/* SA info */
-struct sainfo {
-	vchar_t *idsrc;
-	vchar_t *iddst;
-		/*
-		 * idsrc and iddst are constructed body of ID payload.
-		 * that is (struct ipsecdoi_id_b) + ID value.
-		 * If idsrc == NULL, that is anonymous entry.
-		 */
-
-#ifdef ENABLE_HYBRID
-	vchar_t *group;
-#endif
-
-	time_t lifetime;
-	int lifebyte;
-	int pfs_group;		/* only use when pfs is required. */
-	vchar_t *id_i;		/* identifier of the authorized initiator */
-	struct sainfoalg *algs[MAXALGCLASS];
-
-	int remoteid;
-
-	LIST_ENTRY(sainfo) chain;
-};
-
-/* algorithm type */
-struct sainfoalg {
-	int alg;
-	int encklen;			/* key length if encryption algorithm */
-	struct sainfoalg *next;
-};
-
-extern struct sainfo *getsainfo __P((const vchar_t *,
-	const vchar_t *, const vchar_t *, int));
-extern struct sainfo *newsainfo __P((void));
-extern void delsainfo __P((struct sainfo *));
-extern void inssainfo __P((struct sainfo *));
-extern void remsainfo __P((struct sainfo *));
-extern void flushsainfo __P((void));
-extern void initsainfo __P((void));
-extern struct sainfoalg *newsainfoalg __P((void));
-extern void delsainfoalg __P((struct sainfoalg *));
-extern void inssainfoalg __P((struct sainfoalg **, struct sainfoalg *));
-extern const char * sainfo2str __P((const struct sainfo *));
-
-extern void save_sainfotree __P((void));
-extern void save_sainfotree_flush __P((void));
-extern void save_sainfotree_restore __P((void));
-
-#endif /* _SAINFO_H */
diff --git a/src/racoon/samples/psk.txt.in b/src/racoon/samples/psk.txt.in
deleted file mode 100644
index 52f1a55..0000000
--- a/src/racoon/samples/psk.txt.in
+++ /dev/null
@@ -1,21 +0,0 @@
-# IPv4/v6 addresses
-10.160.94.3	mekmitasdigoat
-172.16.1.133	mekmitasdigoat
-194.100.55.1	whatcertificatereally
-203.178.141.208	mekmitasdigoat
-206.175.160.18	mekmitasdigoat
-206.175.160.20	mekmitasdigoat
-206.175.160.21	mekmitasdigoat
-206.175.160.22	mekmitasdigoat
-206.175.160.23	mekmitasdigoat
-206.175.160.36	mekmitasdigoat
-206.175.161.125	mekmitasdigoat
-206.175.161.154	mekmitasdigoat
-206.175.161.156	mekmitasdigoat
-206.175.161.182	mekmitasdigoat
-3ffe:501:410:ffff:200:86ff:fe05:80fa	mekmitasdigoat
-3ffe:501:410:ffff:210:4bff:fea2:8baa	mekmitasdigoat
-# USER_FQDN
-sakane@kame.net	mekmitasdigoat
-# FQDN
-kame		hoge
diff --git a/src/racoon/samples/psk.txt.sample b/src/racoon/samples/psk.txt.sample
deleted file mode 100644
index 2ad1d0b..0000000
--- a/src/racoon/samples/psk.txt.sample
+++ /dev/null
@@ -1,10 +0,0 @@
-# IPv4/v6 addresses
-10.160.94.3	mekmitasdigoat
-172.16.1.133	0x12345678
-194.100.55.1	whatcertificatereally
-3ffe:501:410:ffff:200:86ff:fe05:80fa	mekmitasdigoat
-3ffe:501:410:ffff:210:4bff:fea2:8baa	mekmitasdigoat
-# USER_FQDN
-foo@kame.net	mekmitasdigoat
-# FQDN
-foo.kame.net	hoge
diff --git a/src/racoon/samples/racoon.conf.in b/src/racoon/samples/racoon.conf.in
deleted file mode 100644
index 29b7951..0000000
--- a/src/racoon/samples/racoon.conf.in
+++ /dev/null
@@ -1,121 +0,0 @@
-# $KAME: racoon.conf.in,v 1.18 2001/08/16 06:33:40 itojun Exp $
-
-# "path" affects "include" directives.  "path" must be specified before any
-# "include" directive with relative file path.
-# you can overwrite "path" directive afterwards, however, doing so may add
-# more confusion.
-path include "@sysconfdir_x@/racoon";
-#include "remote.conf";
-
-# the file should contain key ID/key pairs, for pre-shared key authentication.
-path pre_shared_key "@sysconfdir_x@/racoon/psk.txt";
-
-# racoon will look for certificate file in the directory,
-# if the certificate/certificate request payload is received.
-path certificate "@sysconfdir_x@/cert";
-
-# "log" specifies logging level.  It is followed by either "notify", "debug"
-# or "debug2".
-#log debug;
-
-# "padding" defines some padding parameters.  You should not touch these.
-padding
-{
-	maximum_length 20;	# maximum padding length.
-	randomize off;		# enable randomize length.
-	strict_check off;	# enable strict check.
-	exclusive_tail off;	# extract last one octet.
-}
-
-# if no listen directive is specified, racoon will listen on all
-# available interface addresses.
-listen
-{
-	#isakmp ::1 [7000];
-	#isakmp 202.249.11.124 [500];
-	#admin [7002];		# administrative port for racoonctl.
-	#strict_address; 	# requires that all addresses must be bound.
-}
-
-# Specify various default timers.
-timer
-{
-	# These value can be changed per remote node.
-	counter 5;		# maximum trying count to send.
-	interval 20 sec;	# maximum interval to resend.
-	persend 1;		# the number of packets per send.
-
-	# maximum time to wait for completing each phase.
-	phase1 30 sec;
-	phase2 15 sec;
-}
-
-remote anonymous
-{
-	exchange_mode main,aggressive;
-	doi ipsec_doi;
-	situation identity_only;
-
-	my_identifier asn1dn;
-	certificate_type x509 "my.cert.pem" "my.key.pem";
-
-	nonce_size 16;
-	initial_contact on;
-	proposal_check strict;	# obey, strict, or claim
-
-	proposal {
-		encryption_algorithm 3des;
-		hash_algorithm sha1;
-		authentication_method rsasig;
-		dh_group 2;
-	}
-}
-
-remote ::1 [8000]
-{
-	#exchange_mode main,aggressive;
-	exchange_mode aggressive,main;
-	doi ipsec_doi;
-	situation identity_only;
-
-	my_identifier user_fqdn "sakane@kame.net";
-	peers_identifier user_fqdn "sakane@kame.net";
-	#certificate_type x509 "mycert" "mypriv";
-
-	nonce_size 16;
-	lifetime time 1 min;	# sec,min,hour
-
-	proposal {
-		encryption_algorithm 3des;
-		hash_algorithm sha1;
-		authentication_method pre_shared_key;
-		dh_group 2;
-	}
-}
-
-sainfo anonymous
-{
-	pfs_group 2;
-	encryption_algorithm 3des;
-	authentication_algorithm hmac_sha1;
-	compression_algorithm deflate;
-}
-
-sainfo address 203.178.141.209 any address 203.178.141.218 any
-{
-	pfs_group 2;
-	lifetime time 30 sec;
-	encryption_algorithm des;
-	authentication_algorithm hmac_md5;
-	compression_algorithm deflate;
-}
-
-sainfo address ::1 icmp6 address ::1 icmp6
-{
-	pfs_group 3;
-	lifetime time 60 sec;
-	encryption_algorithm 3des, blowfish, aes;
-	authentication_algorithm hmac_sha1, hmac_md5;
-	compression_algorithm deflate;
-}
-
diff --git a/src/racoon/samples/racoon.conf.sample b/src/racoon/samples/racoon.conf.sample
deleted file mode 100644
index 631910f..0000000
--- a/src/racoon/samples/racoon.conf.sample
+++ /dev/null
@@ -1,61 +0,0 @@
-# $KAME: racoon.conf.sample,v 1.28 2002/10/18 14:33:28 itojun Exp $
-
-# "path" affects "include" directives.  "path" must be specified before any
-# "include" directive with relative file path.
-# you can overwrite "path" directive afterwards, however, doing so may add
-# more confusion.
-#path include "/usr/local/v6/etc" ;
-#include "remote.conf" ;
-
-# the file should contain key ID/key pairs, for pre-shared key authentication.
-path pre_shared_key "/usr/local/v6/etc/psk.txt" ;
-
-# racoon will look for certificate file in the directory,
-# if the certificate/certificate request payload is received.
-#path certificate "/usr/local/openssl/certs" ;
-
-# "log" specifies logging level.  It is followed by either "notify", "debug"
-# or "debug2".
-#log debug;
-
-remote anonymous
-{
-	#exchange_mode main,aggressive,base;
-	exchange_mode main,base;
-
-	#my_identifier fqdn "server.kame.net";
-	#certificate_type x509 "foo@kame.net.cert" "foo@kame.net.priv" ;
-
-	lifetime time 24 hour ;	# sec,min,hour
-
-	#initial_contact off ;
-	#passive on ;
-
-	# phase 1 proposal (for ISAKMP SA)
-	proposal {
-		encryption_algorithm 3des;
-		hash_algorithm sha1;
-		authentication_method pre_shared_key ;
-		dh_group 2 ;
-	}
-
-	# the configuration could makes racoon (as a responder)
-	# to obey the initiator's lifetime and PFS group proposal,
-	# by setting proposal_check to obey.
-	# this would makes testing "so much easier", but is really
-	# *not* secure !!!
-	proposal_check strict;
-}
-
-# phase 2 proposal (for IPsec SA).
-# actual phase 2 proposal will obey the following items:
-# - kernel IPsec policy configuration (like "esp/transport//use)
-# - permutation of the crypto/hash/compression algorithms presented below
-sainfo anonymous
-{
-	pfs_group 2;
-	lifetime time 12 hour ;
-	encryption_algorithm 3des, cast128, blowfish 448, des, rijndael ;
-	authentication_algorithm hmac_sha1, hmac_md5 ;
-	compression_algorithm deflate ;
-}
diff --git a/src/racoon/samples/racoon.conf.sample-gssapi b/src/racoon/samples/racoon.conf.sample-gssapi
deleted file mode 100644
index 09c4df1..0000000
--- a/src/racoon/samples/racoon.conf.sample-gssapi
+++ /dev/null
@@ -1,43 +0,0 @@
-# $KAME: racoon.conf.sample-gssapi,v 1.5 2001/08/16 06:33:40 itojun Exp $
-
-# sample configuration for GSSAPI authentication (basically, Kerberos).
-# doc/README.gssapi gives some idea on how to configure it.
-# TODO: more documentation.
-
-#listen {
-#	strict_address;
-#}
-
-# Uncomment the following for GSS-API to work with older versions of
-# racoon that (incorrectly) used ISO-Latin-1 encoding for the GSS-API
-# identifier attribute.
-#gss_id_enc latin1;
-
-remote anonymous {
-	exchange_mode main;
-
-	lifetime time 24 hour;
-
-	proposal {
-		encryption_algorithm 3des;
-		hash_algorithm sha1;
-		authentication_method gssapi_krb;
-		# The default GSS-API ID is "host/hostname", where
-		# hostname is the output of the hostname(1) command.
-		# You probably want this to match your system's host
-		# principal.  ktutil(8)'s "list" command will list the
-		# principals in your system's keytab.  If you need to,
-		# you can change the GSS-API ID here.
-		#gss_id "host/some.host.name";
-
-		dh_group 1;
-	}
-}
-
-sainfo anonymous {
-	lifetime time 2 hour;
-
-	encryption_algorithm rijndael, 3des;
-	authentication_algorithm hmac_sha1, hmac_md5;
-	compression_algorithm deflate;
-}
diff --git a/src/racoon/samples/racoon.conf.sample-inherit b/src/racoon/samples/racoon.conf.sample-inherit
deleted file mode 100644
index 9e1185f..0000000
--- a/src/racoon/samples/racoon.conf.sample-inherit
+++ /dev/null
@@ -1,55 +0,0 @@
-# Id: racoon.conf.sample-inherit,v 1.3 2005/12/13 16:41:07 vanhu Exp
-# Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
-
-# This file shows the basic inheritance usage in 'remote' statements.
-
-path pre_shared_key "/etc/racoon/psk.txt";
-path certificate "/etc/racoon";
-
-remote anonymous
-{
-	exchange_mode main,aggressive;
-	doi ipsec_doi;
-	situation identity_only;
-
-	my_identifier asn1dn;
-	certificate_type x509 "my.cert.pem" "my.key.pem";
-
-	nonce_size 16;
-	initial_contact on;
-	proposal_check strict;	# obey, strict or claim
-
-	proposal {
-		encryption_algorithm 3des;
-		hash_algorithm sha1;
-		authentication_method rsasig;
-		dh_group 2;
-	}
-}
-
-remote 3ffe:ffff::1 inherit anonymous
-{
-	exchange_mode aggressive;
-	nat_traversal force;
-}
-
-remote 3ffe:ffff::1 [8000] inherit 3ffe:ffff::1
-{
-	lifetime time 1 min;	# sec,min,hour
-
-	proposal {
-		encryption_algorithm 3des;
-		hash_algorithm sha1;
-		authentication_method pre_shared_key;
-		dh_group 2;
-	}
-}
-
-sainfo anonymous
-{
-	pfs_group 2;
-	lifetime time 12 hour;
-	encryption_algorithm aes, 3des;
-	authentication_algorithm hmac_sha1, hmac_md5;
-	compression_algorithm deflate;
-}
diff --git a/src/racoon/samples/racoon.conf.sample-natt b/src/racoon/samples/racoon.conf.sample-natt
deleted file mode 100644
index 645b4de..0000000
--- a/src/racoon/samples/racoon.conf.sample-natt
+++ /dev/null
@@ -1,97 +0,0 @@
-# Id: racoon.conf.sample-natt,v 1.5 2005/12/13 16:41:07 vanhu Exp
-# Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
-
-# This file can be used as a template for NAT-Traversal setups.
-# Only NAT-T related options are explained here, refer to other 
-# sample files and manual pages for details about the rest.
-
-path include "/etc/racoon";
-path certificate "/etc/racoon/cert";
-
-# Define addresses and ports where racoon will listen for an incoming
-# traffic. Don't forget to open these ports on your firewall!
-listen
-{
-	# First define an address where racoon will listen 
-	# for "normal" IKE traffic. IANA allocated port 500.
-	isakmp 172.16.0.1[500];
-
-	# To use NAT-T you must also open port 4500 of 
-	# the same address so that peers can do 'Port floating'.
-	# The same port will also be used for the UDP-Encapsulated 
-	# ESP traffic.
-	isakmp_natt 172.16.0.1[4500];
-}
-
-
-timer
-{
-	# To keep the NAT-mappings on your NAT gateway, there must be
-	# traffic between the peers. Normally the UDP-Encap traffic
-	# (i.e. the real data transported over the tunnel) would be
-	# enough, but to be safe racoon will send a short
-	# "Keep-alive packet" every few seconds to every peer with
-	# whom it does NAT-Traversal.
-	# The default is 20s. Set it to 0s to disable sending completely.
-	natt_keepalive 10 sec;
-}
-
-# To trigger the SA negotiation there must be an appropriate 
-# policy in the kernel SPD. For example for traffic between 
-# networks 192.168.0.0/24 and 192.168.1.0/24 with gateways 
-# 172.16.0.1 and 172.16.1.1, where the first gateway is behind 
-# a NAT which translates its address to 172.16.1.3, you need the 
-# following rules:
-# On 172.16.0.1 (e.g. behind the NAT):
-#     spdadd 192.168.0.0/24 192.168.1.0/24 any -P out ipsec \
-#            esp/tunnel/172.16.0.1-172.16.1.1/require;
-#     spdadd 192.168.1.0/24 192.168.0.0/24 any -P in ipsec \
-#            esp/tunnel/172.16.1.1-172.16.0.1/require;
-# On the other side (172.16.1.1) either use a "generate_policy on"
-# statement in the remote block, or in case that you know 
-# the translated address, use the following policy:
-#     spdadd 192.168.1.0/24 192.168.0.0/24 any -P out ipsec \
-#            esp/tunnel/172.16.1.1-172.16.1.3/require;
-#     spdadd 192.168.0.0/24 192.168.1.0/24 any -P in ipsec \
-#            esp/tunnel/172.16.1.3-172.16.1.1/require;
-
-# Phase 1 configuration (for ISAKMP SA)
-remote anonymous
-{
-	# NAT-T is supported with all exchange_modes.
-	exchange_mode main,base,aggressive;
-
-	# With NAT-T you shouldn't use PSK. Let's go on with certs.
-	my_identifier asn1dn;
-	certificate_type x509 "your-host.cert.pem" "your-host.key.pem";
-
-	# This is the main switch that enables NAT-T.
-	# Possible values are:
-	#   off - NAT-T support is disabled, i.e. neither offered,
-	#         nor accepted. This is the default.
-	#    on - normal NAT-T support, i.e. if NAT is detected 
-	#         along the way, NAT-T is used.
-	# force - if NAT-T is supported by both peers, it is used
-	#         regardless of whether there is a NAT gateway between them
-	#         or not. This is useful for traversing some firewalls.
-	nat_traversal on;
-	
-	proposal {
-		authentication_method rsasig;
-		encryption_algorithm 3des;
-		hash_algorithm sha1;
-		dh_group 2;
-	}
-
-	proposal_check strict;
-}
-
-# Phase 2 proposal (for IPsec SA)
-sainfo anonymous
-{
-	pfs_group 2;
-	lifetime time 12 hour;
-	encryption_algorithm 3des, rijndael;
-	authentication_algorithm hmac_sha1;
-	compression_algorithm deflate;
-}
diff --git a/src/racoon/samples/racoon.conf.sample-plainrsa b/src/racoon/samples/racoon.conf.sample-plainrsa
deleted file mode 100644
index 8447eb3..0000000
--- a/src/racoon/samples/racoon.conf.sample-plainrsa
+++ /dev/null
@@ -1,46 +0,0 @@
-# Id: racoon.conf.sample-plainrsa,v 1.4 2005/12/13 16:41:07 vanhu Exp
-# Contributed by: Michal Ludvig <mludvig@suse.cz>, SUSE Labs
-#                 http://www.logix.cz/michal
-
-# This file shows the usage of PlainRSA keys, which are widely used
-# by FreeSWAN/OpenSwan/StrongSwan/*Swan users. This functionality is 
-# here mainly for those who are moving from the *Swan world to Racoon.
-
-# Racoon will look for a keyfile in this directory.
-path certificate "samples" ;
-
-remote anonymous
-{
-	# *Swan supports only 'main' mode.
-	exchange_mode main;
-
-	# *Swan doesn't send identifiers by default.
-	my_identifier address;
-	peers_identifier address;
-
-	# This is the trick - use PlainRSA certificates.
-	certificate_type plain_rsa "privatekey.rsa";
-
-	# Multiple certfiles are supported.
-	peers_certfile plain_rsa "pubkey1.rsa";
-	peers_certfile plain_rsa "pubkey2.rsa";
-
-	# Standard setup follows...
-	proposal_check strict;
-
-	proposal {
-		encryption_algorithm 3des;
-		hash_algorithm sha1;
-		authentication_method rsasig;
-		dh_group 2;
-	}
-}
-
-sainfo anonymous
-{
-	pfs_group 2;
-	lifetime time 12 hour;
-	encryption_algorithm 3des, aes;
-	authentication_algorithm hmac_sha1, hmac_md5;
-	compression_algorithm deflate;
-}
diff --git a/src/racoon/samples/roadwarrior/README b/src/racoon/samples/roadwarrior/README
deleted file mode 100644
index aac9d43..0000000
--- a/src/racoon/samples/roadwarrior/README
+++ /dev/null
@@ -1,67 +0,0 @@
-This directory contains sample configurations files used for roadwarrior
-remote access using hybrid authentication. In this setup, the VPN 
-gateway authenticates to the client using a certificate, and the client
-authenticates to the VPN gateway using a login and a password.
-
-Moreover, this setup makes use of ISAKMP mode config to autoconfigure 
-the client. After a successful login, the client will receive an 
-internal address, netmask and DNS from the VPN gateway.
-
-
-Server setups
-=============
-The server setups need racoon built with the following options:
-configure --enable-natt --enable-frag --enable-hybrid --enable-dpd \
-	  --with-libradius --sysconfdir=/etc/racoon
-
-The first server setup, in server/racoon.conf, is for a VPN gateway 
-using authentication against the system password database, and using 
-a locally configured pool of addresses. 
-
-The second setup, server/racoon.conf-radius, uses a RADIUS server for 
-authentication, IP allocation and accounting. The address and secret
-to be used for the RADIUS server are configured in /etc/radius.conf, 
-see radius.conf(5).
-
-Both configurations can be used with the Cisco VPN client if it
-is set up to use hybrid authentication (aka mutual group authentication,
-available in Cisco VPN client version 4.0.5 and above). The group 
-password configured in the Cisco VPN client is not used by racoon.
-
-After you have installed /etc/racoon/racoon.conf, you will also have 
-to install a server certificate and key in /etc/openssl/certs/server.crt
-and /etc/openssl/certs/server.key
-
-
-Client setup
-============
-The client setup needs racoon built with the following options:
-configure --enable-natt --enable-frag --enable-hybrid --enable-dpd \
-	  --enable-adminport --sysconfdir=/etc/racoon --localstatedir=/var
-
-You need to copy client/racoon.conf, client/phase1-up.sh and
-client/phase1-down.sh to /etc/racoon, and you need to copy the 
-certificate authority that signed the VPN gateway certificate in
-/etc/openssl/certs/root-ca.crt
-
-Once this is done, you can run racoon, and then you can start
-the VPN using racoonctl:
-racoonctl vc -u username vpn-gateway.example.net
-
-Where username is your login, and vpn-gateway.example.net is
-the DNS or IP address of the VPN gateway. racoonctl will prompt 
-you for the password.
-
-The password can be stored in the psk.txt file. In that situation, 
-add this directive to the remote section of racoon.conf:
-	 xauth_login "username";
-where username is your login.
-
-Note that for now there is no feedback in racoonctl if the authentication
-fails. Peek at the racoon logs to discover what goes wrong.
-
-In order to disconnect from the VPN, do this:
-racoonctl vd vpn-gateway.example.net
-
-This configuration should be compatible with the Cisco VPN 3000 using 
-hybrid authentication, though this has not been tested.
diff --git a/src/racoon/samples/roadwarrior/client/phase1-down.sh b/src/racoon/samples/roadwarrior/client/phase1-down.sh
deleted file mode 100755
index 8edc187..0000000
--- a/src/racoon/samples/roadwarrior/client/phase1-down.sh
+++ /dev/null
@@ -1,73 +0,0 @@
-#!/bin/sh
-
-#
-# sa-down.sh local configuration for a new SA
-#
-
-PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
-
-case `uname -s` in
-NetBSD)
-	DEFAULT_GW=`netstat -rn | awk '($1 == "default"){print $2}'`
-	;;
-Linux)
-	DEFAULT_GW=`netstat -rn | awk '($1 == "0.0.0.0"){print $2}'`
-	;;
-esac
-
-echo $@
-echo "LOCAL_ADDR = ${LOCAL_ADDR}"
-echo "LOCAL_PORT = ${LOCAL_PORT}"
-echo "REMOTE_ADDR = ${REMOTE_ADDR}"
-echo "REMOTE_PORT = ${REMOTE_PORT}"
-echo "DEFAULT_GW = ${DEFAULT_GW}"
-echo "INTERNAL_ADDR4 = ${INTERNAL_ADDR4}"
-echo "INTERNAL_DNS4 = ${INTERNAL_DNS4}"
-
-echo ${INTERNAL_ADDR4} | grep '[0-9]' > /dev/null || exit 0
-echo ${DEFAULT_GW} | grep '[0-9]' > /dev/null || exit 0
-
-test -f /etc/resolv.conf.bak && cp /etc/resolv.conf.bak /etc/resolv.conf
-
-case `uname -s` in
-NetBSD)
-	if=`netstat -rn|awk '($1 == "default"){print $7}'`
-	ifconfig ${if} delete ${INTERNAL_ADDR4}
-	route delete default
-	route delete ${REMOTE_ADDR}
-	route add default ${DEFAULT_GW} -ifa ${LOCAL_ADDR}
-	;;
-Linux)
-	if=`netstat -rn|awk '($1 == "0.0.0.0"){print $8}'`
-	route delete default
-	route delete ${REMOTE_ADDR}
-	ifconfig ${if}:1 del ${INTERNAL_ADDR4}
-	route add default gw ${DEFAULT_GW}
-
-	#
-	# XXX This is a workaround because Linux seems to ignore
-	# the deleteall commands below. This is bad because it flushes
-	# any SAD instead of flushing what needs to be flushed.
-	# Someone using Linux please fix it
-	#
-	setkey -F
-	;;
-esac
-
-# Use this for a NAT-T setup
-LOCAL="${LOCAL_ADDR}[${LOCAL_PORT}]"
-REMOTE="${REMOTE_ADDR}[${REMOTE_PORT}]"
-
-# Use this for a non NAT-T setup
-#LOCAL="${LOCAL_ADDR}"
-#REMOTE="${REMOTE_ADDR}"
-
-echo "
-deleteall ${REMOTE_ADDR} ${LOCAL_ADDR} esp;
-deleteall ${LOCAL_ADDR} ${REMOTE_ADDR} esp; 
-spddelete ${INTERNAL_ADDR4}/32[any] 0.0.0.0/0[any] any
-	-P out ipsec esp/tunnel/${LOCAL}-${REMOTE}/require;
-spddelete 0.0.0.0/0[any] ${INTERNAL_ADDR4}[any] any
-	-P in ipsec esp/tunnel/${REMOTE}-${LOCAL}/require;
-" | setkey -c
-
diff --git a/src/racoon/samples/roadwarrior/client/phase1-up.sh b/src/racoon/samples/roadwarrior/client/phase1-up.sh
deleted file mode 100755
index e45b648..0000000
--- a/src/racoon/samples/roadwarrior/client/phase1-up.sh
+++ /dev/null
@@ -1,77 +0,0 @@
-#!/bin/sh
-
-#
-# sa-up.sh local configuration for a new SA
-#
-PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin
-
-case `uname -s` in
-NetBSD)
-	DEFAULT_GW=`netstat -rn | awk '($1 == "default"){print $2}'`
-	;;
-Linux)
-	DEFAULT_GW=`netstat -rn | awk '($1 == "0.0.0.0"){print $2}'`
-	;;
-esac
-
-echo $@
-echo "LOCAL_ADDR = ${LOCAL_ADDR}"
-echo "LOCAL_PORT = ${LOCAL_PORT}"
-echo "REMOTE_ADDR = ${REMOTE_ADDR}"
-echo "REMOTE_PORT = ${REMOTE_PORT}"
-echo "DEFAULT_GW = ${DEFAULT_GW}"
-echo "INTERNAL_ADDR4 = ${INTERNAL_ADDR4}"
-echo "INTERNAL_DNS4 = ${INTERNAL_DNS4}"
-
-echo ${INTERNAL_ADDR4} | grep '[0-9]' > /dev/null || exit 0
-echo ${DEFAULT_GW} | grep '[0-9]' > /dev/null || exit 0
-
-test -f /etc/resolv.conf.bak || cp /etc/resolv.conf /etc/resolv.conf.bak
-echo "# Generated by racoon on `date`" > /etc/resolv.conf
-echo "nameserver ${INTERNAL_DNS4}" >> /etc/resolv.conf
-
-case `uname -s` in
-NetBSD)
-	if=`netstat -rn|awk '($1 == "default"){print $7}'`
-	ifconfig ${if} alias ${INTERNAL_ADDR4} netmask ${INTERNAL_NETMASK4}
-	route delete default
-	route add default ${DEFAULT_GW} -ifa ${INTERNAL_ADDR4}
-	route add ${REMOTE_ADDR} ${DEFAULT_GW}
-	;;
-Linux)
-	if=`netstat -rn|awk '($1 == "0.0.0.0"){print $8}'`
-	ifconfig ${if}:1 ${INTERNAL_ADDR4}      
-	route delete default
-	route add ${REMOTE_ADDR} gw ${DEFAULT_GW} dev ${if}
-	route add default gw ${DEFAULT_GW} dev ${if}:1
-	;;
-esac
-
-# Use this for a NAT-T setup
-LOCAL="${LOCAL_ADDR}[${LOCAL_PORT}]"
-REMOTE="${REMOTE_ADDR}[${REMOTE_PORT}]"
-
-# Use this for a non NAT-T setup
-#LOCAL="${LOCAL_ADDR}"
-#REMOTE="${REMOTE_ADDR}"
-
-
-echo "
-spdadd ${INTERNAL_ADDR4}/32[any] 0.0.0.0/0[any] any
-       -P out ipsec esp/tunnel/${LOCAL}-${REMOTE}/require;
-spdadd 0.0.0.0/0[any] ${INTERNAL_ADDR4}[any] any
-       -P in ipsec esp/tunnel/${REMOTE}-${LOCAL}/require;
-" | setkey -c
-
-#
-# XXX This is a workaround for Linux forward policies problem. 
-# Someone familiar with forward policies please fix this properly.
-#
-case `uname -s` in
-Linux)
-	echo "
-	spddelete 0.0.0.0/0[any] ${INTERNAL_ADDR4}[any] any
-		-P fwd ipsec esp/tunnel/${REMOTE}-${LOCAL}/require;
-	" | setkey -c
-	;;
-esac
diff --git a/src/racoon/samples/roadwarrior/client/racoon.conf b/src/racoon/samples/roadwarrior/client/racoon.conf
deleted file mode 100644
index 669be36..0000000
--- a/src/racoon/samples/roadwarrior/client/racoon.conf
+++ /dev/null
@@ -1,33 +0,0 @@
-path certificate "/etc/openssl/certs";
-path pre_shared_key "/etc/racoon/psk.txt";
-
-listen {
-	adminsock "/var/racoon/racoon.sock" "root" "operator" 0660;
-}
-
-remote 192.0.2.50 {
-        exchange_mode aggressive;
-	ca_type x509 "root-ca.crt";
-        proposal_check strict;
-	nat_traversal on;
-	ike_frag on;
-	mode_cfg on;
-	script "/etc/racoon/phase1-up.sh" phase1_up;
-	script "/etc/racoon/phase1-down.sh" phase1_down;
-	passive off;
-        proposal {
-                encryption_algorithm aes;
-                hash_algorithm sha1;
-                authentication_method hybrid_rsa_client;
-                dh_group 2;
-        }
-}
-
-
-sainfo anonymous {
-        pfs_group 2;
-        lifetime time 1 hour;
-        encryption_algorithm aes;
-        authentication_algorithm hmac_sha1;
-        compression_algorithm deflate ;
-}
diff --git a/src/racoon/samples/roadwarrior/server/racoon.conf b/src/racoon/samples/roadwarrior/server/racoon.conf
deleted file mode 100644
index ae7d603..0000000
--- a/src/racoon/samples/roadwarrior/server/racoon.conf
+++ /dev/null
@@ -1,42 +0,0 @@
-path certificate "/etc/openssl/certs";
-
-listen {
-	adminsock disabled;
-}
-
-remote anonymous {
-	exchange_mode aggressive;
-	certificate_type x509 "server.crt" "server.key";
-	my_identifier asn1dn;
-	proposal_check strict;
-	generate_policy on;
-	nat_traversal on;
-	dpd_delay 20;
-	ike_frag on;
-	proposal {
-		encryption_algorithm aes;
-		hash_algorithm sha1;
-		authentication_method hybrid_rsa_server;
-		dh_group 2;
-	}
-}
-
-mode_cfg {
-	network4 10.99.99.0;
-	pool_size 255;
-	netmask4 255.255.255.0;  
-	auth_source system;
-	dns4 10.0.12.1;
-	wins4 10.0.12.1;
-	banner "/etc/racoon/motd";
-	pfs_group 2;
-}	       
-		
-sainfo anonymous {
-	pfs_group 2;
-	lifetime time 1 hour;
-	encryption_algorithm aes;
-	authentication_algorithm hmac_sha1;
-	compression_algorithm deflate;
-}   
-
diff --git a/src/racoon/samples/roadwarrior/server/racoon.conf-radius b/src/racoon/samples/roadwarrior/server/racoon.conf-radius
deleted file mode 100644
index 24e8d4e..0000000
--- a/src/racoon/samples/roadwarrior/server/racoon.conf-radius
+++ /dev/null
@@ -1,42 +0,0 @@
-path certificate "/etc/openssl/certs";
-
-listen {
-	adminsock disabled;
-}
-
-remote anonymous {
-	exchange_mode aggressive;
-	certificate_type x509 "server.crt" "server.key";
-	my_identifier asn1dn;
-	proposal_check strict;
-	generate_policy on;
-	nat_traversal on;
-	dpd_delay 20;
-	ike_frag on;
-	proposal {
-		encryption_algorithm aes;
-		hash_algorithm sha1;
-		authentication_method hybrid_rsa_server;
-		dh_group 2;
-	}
-}
-
-mode_cfg {
-	pool_size 255;
-	auth_source radius;
-	conf_source radius;
-	accounting radius;
-	dns4 10.0.12.1;
-	wins4 10.0.12.1;
-	banner "/etc/racoon/motd";
-	pfs_group 2;
-}	       
-		
-sainfo anonymous {
-	pfs_group 2;
-	lifetime time 1 hour;
-	encryption_algorithm aes;
-	authentication_algorithm hmac_sha1;
-	compression_algorithm deflate;
-}   
-
diff --git a/src/racoon/schedule.c b/src/racoon/schedule.c
deleted file mode 100644
index 04723c5..0000000
--- a/src/racoon/schedule.c
+++ /dev/null
@@ -1,364 +0,0 @@
-/*	$NetBSD: schedule.c,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/*	$KAME: schedule.c,v 1.19 2001/11/05 10:53:19 sakane Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/queue.h>
-#include <sys/socket.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <time.h>
-
-#include "misc.h"
-#include "plog.h"
-#include "schedule.h"
-#include "var.h"
-#include "gcmalloc.h"
-
-#define FIXY2038PROBLEM
-
-#ifndef TAILQ_FOREACH
-#define TAILQ_FOREACH(elm, head, field) \
-        for (elm = TAILQ_FIRST(head); elm; elm = TAILQ_NEXT(elm, field))
-#endif
-
-static struct timeval timeout;
-
-#ifdef FIXY2038PROBLEM
-#define Y2038TIME_T	0x7fffffff
-static time_t launched;		/* time when the program launched. */
-static time_t deltaY2038;
-#endif
-
-static TAILQ_HEAD(_schedtree, sched) sctree;
-
-static void sched_add __P((struct sched *));
-static time_t current_time __P((void));
-
-/*
- * schedule handler
- * OUT:
- *	time to block until next event.
- *	if no entry, NULL returned.
- */
-struct timeval *
-schedular()
-{
-	time_t now, delta;
-	struct sched *p, *next = NULL;
-
-	now = current_time();
-
-        for (p = TAILQ_FIRST(&sctree); p; p = next) {
-		/* if the entry has been daed, remove it */
-		if (p->dead)
-			goto next_schedule;
-
-		/* if the time hasn't come, proceed to the next entry */
-		if (now < p->xtime) {
-			next = TAILQ_NEXT(p, chain);
-			continue;
-		}
-
-		/* mark it with dead. and call the function. */
-		p->dead = 1;
-		if (p->func != NULL)
-			(p->func)(p->param);
-
-	   next_schedule:
-		next = TAILQ_NEXT(p, chain);
-		TAILQ_REMOVE(&sctree, p, chain);
-		racoon_free(p);
-	}
-
-	p = TAILQ_FIRST(&sctree);
-	if (p == NULL)
-		return NULL;
-
-	now = current_time();
-
-	delta = p->xtime - now;
-	timeout.tv_sec = delta < 0 ? 0 : delta;
-	timeout.tv_usec = 0;
-
-	return &timeout;
-}
-
-/*
- * add new schedule to schedule table.
- */
-struct sched *
-sched_new(tick, func, param)
-	time_t tick;
-	void (*func) __P((void *));
-	void *param;
-{
-	static long id = 1;
-	struct sched *new;
-
-	new = (struct sched *)racoon_malloc(sizeof(*new));
-	if (new == NULL)
-		return NULL;
-
-	memset(new, 0, sizeof(*new));
-	new->func = func;
-	new->param = param;
-
-	new->id = id++;
-	time(&new->created);
-	new->tick = tick;
-
-	new->xtime = current_time() + tick;
-	new->dead = 0;
-
-	/* add to schedule table */
-	sched_add(new);
-
-	return(new);
-}
-
-/* add new schedule to schedule table */
-static void
-sched_add(sc)
-	struct sched *sc;
-{
-	struct sched *p;
-
-	TAILQ_FOREACH(p, &sctree, chain) {
-		if (sc->xtime < p->xtime) {
-			TAILQ_INSERT_BEFORE(p, sc, chain);
-			return;
-		}
-	}
-	if (p == NULL)
-		TAILQ_INSERT_TAIL(&sctree, sc, chain);
-
-	return;
-}
-
-/* get current time.
- * if defined FIXY2038PROBLEM, base time is the time when called sched_init().
- * Otherwise, conform to time(3).
- */
-static time_t
-current_time()
-{
-	time_t n;
-#ifdef FIXY2038PROBLEM
-	time_t t;
-
-	time(&n);
-	t = n - launched;
-	if (t < 0)
-		t += deltaY2038;
-
-	return t;
-#else
-	return time(&n);
-#endif
-}
-
-void
-sched_kill(sc)
-	struct sched *sc;
-{
-	sc->dead = 1;
-
-	return;
-}
-
-/* XXX this function is probably unnecessary. */
-void
-sched_scrub_param(param)
-	void *param;
-{
-	struct sched *sc;
-
-	TAILQ_FOREACH(sc, &sctree, chain) {
-		if (sc->param == param) {
-			if (!sc->dead) {
-				plog(LLV_DEBUG, LOCATION, NULL,
-				    "an undead schedule has been deleted.\n");
-			}
-			sched_kill(sc);
-		}
-	}
-}
-
-/*
- * for debug
- */
-int
-sched_dump(buf, len)
-	caddr_t *buf;
-	int *len;
-{
-	caddr_t new;
-	struct sched *p;
-	struct scheddump *dst;
-	int cnt = 0;
-
-	/* initialize */
-	*len = 0;
-	*buf = NULL;
-
-	TAILQ_FOREACH(p, &sctree, chain)
-		cnt++;
-
-	/* no entry */
-	if (cnt == 0)
-		return -1;
-
-	*len = cnt * sizeof(*dst);
-
-	new = racoon_malloc(*len);
-	if (new == NULL)
-		return -1;
-	dst = (struct scheddump *)new;
-
-        p = TAILQ_FIRST(&sctree);
-	while (p) {
-		dst->xtime = p->xtime;
-		dst->id = p->id;
-		dst->created = p->created;
-		dst->tick = p->tick;
-
-		p = TAILQ_NEXT(p, chain);
-		if (p == NULL)
-			break;
-		dst++;
-	}
-
-	*buf = new;
-
-	return 0;
-}
-
-/* initialize schedule table */
-void
-sched_init()
-{
-#ifdef FIXY2038PROBLEM
-	time(&launched);
-
-	deltaY2038 = Y2038TIME_T - launched;
-#endif
-
-	TAILQ_INIT(&sctree);
-
-	return;
-}
-
-#ifdef STEST
-#include <sys/types.h>
-#include <sys/time.h>
-#include <unistd.h>
-#include <err.h>
-
-void
-test(tick)
-	int *tick;
-{
-	printf("execute %d\n", *tick);
-	racoon_free(tick);
-}
-
-void
-getstdin()
-{
-	int *tick;
-	char buf[16];
-
-	read(0, buf, sizeof(buf));
-	if (buf[0] == 'd') {
-		struct scheddump *scbuf, *p;
-		int len;
-		sched_dump((caddr_t *)&scbuf, &len);
-		if (scbuf == NULL)
-			return;
-		for (p = scbuf; len; p++) {
-			printf("xtime=%ld\n", p->xtime);
-			len -= sizeof(*p);
-		}
-		racoon_free(scbuf);
-		return;
-	}
-
-	tick = (int *)racoon_malloc(sizeof(*tick));
-	*tick = atoi(buf);
-	printf("new queue tick = %d\n", *tick);
-	sched_new(*tick, test, tick);
-}
-
-int
-main()
-{
-	static fd_set mask0;
-	int nfds = 0;
-	fd_set rfds;
-	struct timeval *timeout;
-	int error;
-
-	FD_ZERO(&mask0);
-	FD_SET(0, &mask0);
-	nfds = 1;
-
-	/* initialize */
-	sched_init();
-
-	while (1) {
-		rfds = mask0;
-
-		timeout = schedular();
-
-		error = select(nfds, &rfds, (fd_set *)0, (fd_set *)0, timeout);
-		if (error < 0) {
-			switch (errno) {
-			case EINTR: continue;
-			default:
-				err(1, "select");
-			}
-			/*NOTREACHED*/
-		}
-
-		if (FD_ISSET(0, &rfds))
-			getstdin();
-	}
-}
-#endif
diff --git a/src/racoon/schedule.h b/src/racoon/schedule.h
deleted file mode 100644
index bd66593..0000000
--- a/src/racoon/schedule.h
+++ /dev/null
@@ -1,85 +0,0 @@
-/*	$NetBSD: schedule.h,v 1.4.6.1 2007/03/21 14:29:48 vanhu Exp $	*/
-
-/* Id: schedule.h,v 1.5 2006/05/03 21:53:42 vanhu Exp */
-
-/*
- * 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.
- */
-
-#ifndef _SCHEDULE_H
-#define _SCHEDULE_H
-
-#include <sys/queue.h>
-#include "gnuc.h"
-
-/* scheduling table */
-/* the head is the nearest event. */
-struct sched {
-	time_t xtime;		/* event time which is as time(3). */
-				/*
-				 * if defined FIXY2038PROBLEM, this time
-				 * is from the time when called sched_init().
-				 */
-	void (*func) __P((void *)); /* call this function when timeout. */
-	void *param;		/* pointer to parameter */
-
-	int dead;		/* dead or alive */
-	long id;		/* for debug */
-	time_t created;		/* for debug */
-	time_t tick;		/* for debug */
-
-	TAILQ_ENTRY(sched) chain;
-};
-
-/* cancel schedule */
-#define SCHED_KILL(s)                                                          \
-do {                                                                           \
-	if(s != NULL){	   														\
-		sched_kill(s);                                                         \
-		s = NULL;                                                              \
-	}\
-} while(0)
-
-/* must be called after it's called from scheduler. */
-#define SCHED_INIT(s)	(s) = NULL
-
-struct scheddump {
-	time_t xtime;
-	long id;
-	time_t created;
-	time_t tick;
-};
-
-struct timeval *schedular __P((void));
-struct sched *sched_new __P((time_t, void (*func) __P((void *)), void *));
-void sched_kill __P((struct sched *));
-int sched_dump __P((caddr_t *, int *));
-void sched_init __P((void));
-void sched_scrub_param __P((void *));
-
-#endif /* _SCHEDULE_H */
diff --git a/src/racoon/security.c b/src/racoon/security.c
deleted file mode 100644
index e4b5a0d..0000000
--- a/src/racoon/security.c
+++ /dev/null
@@ -1,265 +0,0 @@
-/*
- * Copyright (C) 2005 International Business Machines Corporation
- * Copyright (c) 2005 by Trusted Computer Solutions, Inc.
- * 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.
- */
-
-
-#include "config.h"
-
-#include <sys/types.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include <selinux/selinux.h>
-#include <selinux/flask.h>
-#include <selinux/av_permissions.h>
-#include <selinux/avc.h>
-#include <selinux/context.h>
-
-#include "var.h"
-#include "vmbuf.h"
-#include "misc.h"
-#include "plog.h"
-
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "ipsec_doi.h"
-#include "policy.h"
-#include "proposal.h"
-#include "strnames.h"
-#include "handler.h"
-
-/* 
- * Get the security context information from SA.
- */
-int
-get_security_context(sa, p)
-	vchar_t *sa;
-	struct policyindex *p;
-{
-	int len = 0;
-	int flag, type = 0;
-	u_int16_t lorv;
-	caddr_t bp;
-	vchar_t *pbuf = NULL;
-	vchar_t *tbuf = NULL;
-	struct isakmp_parse_t *pa;
-	struct isakmp_parse_t *ta;
-	struct isakmp_pl_p *prop;
-	struct isakmp_pl_t *trns;
-	struct isakmp_data *d;
-	struct ipsecdoi_sa_b *sab = (struct ipsecdoi_sa_b *)sa->v;
-	
-	/* check SA payload size */
-	if (sa->l < sizeof(*sab)) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid SA length = %zu.\n", sa->l);
-		return -1;
-	}
-
-	bp = (caddr_t)(sab + 1); /* here bp points to first proposal payload */
-	len = sa->l - sizeof(*sab);
-
-	pbuf = isakmp_parsewoh(ISAKMP_NPTYPE_P, (struct isakmp_gen *)bp, len);
-	if (pbuf == NULL)
-		return -1;
-
-	pa = (struct isakmp_parse_t *)pbuf->v; 
-        /* check the value of next payload */
-	if (pa->type != ISAKMP_NPTYPE_P) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"Invalid payload type=%u\n", pa->type);
-		vfree(pbuf);
-		return -1;
-	}
-
-	if (pa->len == 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		"invalid proposal with length %d\n", pa->len);
-		vfree(pbuf);
-		return -1;
-	}
-
-	/* our first proposal */
-	prop = (struct isakmp_pl_p *)pa->ptr;
-
-	/* now get transform */
-	bp = (caddr_t)prop + sizeof(struct isakmp_pl_p) + prop->spi_size;
-	len = ntohs(prop->h.len) - 
-		(sizeof(struct isakmp_pl_p) + prop->spi_size);
-	tbuf = isakmp_parsewoh(ISAKMP_NPTYPE_T, (struct isakmp_gen *)bp, len);
-	if (tbuf == NULL)
-		return -1;
-
-	ta = (struct isakmp_parse_t *)tbuf->v;
-	if (ta->type != ISAKMP_NPTYPE_T) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "Invalid payload type=%u\n", ta->type);
-		return -1;
-	}
-	
-	trns = (struct isakmp_pl_t *)ta->ptr;
-
-	len = ntohs(trns->h.len) - sizeof(struct isakmp_pl_t);
-	d = (struct isakmp_data *)((caddr_t)trns + sizeof(struct isakmp_pl_t));
-
-	while (len > 0) {
-		type = ntohs(d->type) & ~ISAKMP_GEN_MASK;
-		flag = ntohs(d->type) & ISAKMP_GEN_MASK;
-		lorv = ntohs(d->lorv);
-
-		if (type != IPSECDOI_ATTR_SECCTX) {
-			if (flag) {
-				len -= sizeof(*d);
-				d = (struct isakmp_data *)((char *)d 
-				     + sizeof(*d));
-			} else {
-				len -= (sizeof(*d) + lorv);
-				d = (struct isakmp_data *)((caddr_t)d
-				     + sizeof(*d) + lorv);
-			}
-		} else {
-			flag = ntohs(d->type & ISAKMP_GEN_MASK);
-			if (flag) {
-				plog(LLV_ERROR, LOCATION, NULL,
-				     "SECCTX must be in TLV.\n");
-				return -1;
-			}
-			memcpy(&p->sec_ctx, d + 1, lorv);
-			p->sec_ctx.ctx_strlen = ntohs(p->sec_ctx.ctx_strlen);
-			return 0;
-		}
-	}
-	return 0;
-}
-
-void
-set_secctx_in_proposal(iph2, spidx)
-	struct ph2handle *iph2;
-	struct policyindex spidx;
-{
-	iph2->proposal->sctx.ctx_doi = spidx.sec_ctx.ctx_doi;
-	iph2->proposal->sctx.ctx_alg = spidx.sec_ctx.ctx_alg;
-	iph2->proposal->sctx.ctx_strlen = spidx.sec_ctx.ctx_strlen;
-		memcpy(iph2->proposal->sctx.ctx_str, spidx.sec_ctx.ctx_str,
-			spidx.sec_ctx.ctx_strlen);
-}
-
-
-/*
- * function: 	init_avc
- * description:	function performs the steps necessary to initialize the
- *		userspace avc.
- * input:	void
- * return:	0	if avc was successfully initialized
- * 		1	if the avc could not be initialized
- */
-
-static int mls_ready = 0;
-
-void
-init_avc(void)
-{
-	if (!is_selinux_mls_enabled()) {
-		plog(LLV_ERROR, LOCATION, NULL, "racoon: MLS support is not"
-				" enabled.\n");
-		return;
-	}
-
-	if (avc_init("racoon", NULL, NULL, NULL, NULL) == 0)
-		mls_ready = 1;
-	else
-		plog(LLV_ERROR, LOCATION, NULL, 
-		     "racoon: could not initialize avc.\n");
-}
-
-/*
- * function: 	within_range
- * description:	function determines if the specified sl is within the
- * 		configured range for a policy rule.
- * input:	security_context *sl		SL
- * 		char *range		Range
- * return:	1	if the sl is within the range
- * 		0	if the sl is not within the range or an error
- * 			occurred which prevented the determination
- */
-
-int
-within_range(security_context_t sl, security_context_t range)
-{
-	int rtn = 1;
-	security_id_t slsid;
-	security_id_t rangesid;
-	struct av_decision avd;
-	security_class_t tclass;
-	access_vector_t av;
-
-	if (!*range)	/* This policy doesn't have security context */
-		return 1;
-
-	if (!mls_ready)  /* mls may not be enabled */
-		return 0;
-
-	/*
-	 * Get the sids for the sl and range contexts
-	 */
-	rtn = avc_context_to_sid(sl, &slsid);
-	if (rtn != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-				"within_range: Unable to retrieve "
-				"sid for sl context (%s).\n", sl);
-		return 0;
-	}
-	rtn = avc_context_to_sid(range, &rangesid);
-	if (rtn != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-				"within_range: Unable to retrieve "
-				"sid for range context (%s).\n", range);
-		sidput(slsid);
-		return 0;
-	}
-
-	/* 
-	 * Straight up test between sl and range
-	 */
-	tclass = SECCLASS_ASSOCIATION;
-	av = ASSOCIATION__POLMATCH;
-	rtn = avc_has_perm(slsid, rangesid, tclass, av, NULL, &avd);
-	if (rtn != 0) {
-		plog(LLV_INFO, LOCATION, NULL, 
-			"within_range: The sl is not within range\n");
-		sidput(slsid);
-		sidput(rangesid);
-		return 0;
-	}
-	plog(LLV_DEBUG, LOCATION, NULL, 
-		"within_range: The sl (%s) is within range (%s)\n", sl, range);
-		return 1;
-}
diff --git a/src/racoon/session.c b/src/racoon/session.c
deleted file mode 100644
index 9db901d..0000000
--- a/src/racoon/session.c
+++ /dev/null
@@ -1,592 +0,0 @@
-/*	$NetBSD: session.c,v 1.7.6.2 2007/08/01 11:52:22 vanhu Exp $	*/
-
-/*	$KAME: session.c,v 1.32 2003/09/24 02:01:17 jinmei Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/time.h>
-#include <sys/socket.h>
-#if HAVE_SYS_WAIT_H
-# include <sys/wait.h>
-#endif
-#ifndef WEXITSTATUS
-# define WEXITSTATUS(s)	((unsigned)(s) >> 8)
-#endif
-#ifndef WIFEXITED
-# define WIFEXITED(s)	(((s) & 255) == 0)
-#endif
-
-#include PATH_IPSEC_H
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-#include <signal.h>
-#include <sys/stat.h>
-#include <paths.h>
-
-#include <netinet/in.h>
-#include <resolv.h>
-
-#include "libpfkey.h"
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "schedule.h"
-#include "session.h"
-#include "grabmyaddr.h"
-#include "evt.h"
-#include "cfparse_proto.h"
-#include "isakmp_var.h"
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h"
-#include "admin_var.h"
-#include "admin.h"
-#include "privsep.h"
-#include "oakley.h"
-#include "pfkey.h"
-#include "handler.h"
-#include "localconf.h"
-#include "remoteconf.h"
-#include "backupsa.h"
-#ifdef ENABLE_NATT
-#include "nattraversal.h"
-#endif
-
-
-#include "algorithm.h" /* XXX ??? */
-
-#include "sainfo.h"
-
-static void close_session __P((void));
-static void check_rtsock __P((void *));
-static void initfds __P((void));
-static void init_signal __P((void));
-static int set_signal __P((int sig, RETSIGTYPE (*func) __P((int))));
-static void check_sigreq __P((void));
-static void check_flushsa_stub __P((void *));
-static void check_flushsa __P((void));
-static int close_sockets __P((void));
-
-static fd_set mask0;
-static fd_set maskdying;
-static int nfds = 0;
-static volatile sig_atomic_t sigreq[NSIG + 1];
-static int dying = 0;
-
-int
-session(void)
-{
-	fd_set rfds;
-	struct timeval *timeout;
-	int error;
-	struct myaddrs *p;
-	char pid_file[MAXPATHLEN];
-	FILE *fp;
-	pid_t racoon_pid = 0;
-	int i;
-
-	/* initialize schedular */
-	sched_init();
-
-	init_signal();
-
-#ifdef ENABLE_ADMINPORT
-	if (admin_init() < 0)
-		exit(1);
-#endif
-
-	initmyaddr();
-
-	if (isakmp_init() < 0)
-		exit(1);
-
-	initfds();
-
-#ifdef ENABLE_NATT
-	natt_keepalive_init ();
-#endif
-
-	if (privsep_init() != 0)
-		exit(1);
-
-	for (i = 0; i <= NSIG; i++)
-		sigreq[i] = 0;
-
-	/* write .pid file */
-	racoon_pid = getpid();
-	if (lcconf->pathinfo[LC_PATHTYPE_PIDFILE] == NULL) 
-		strlcpy(pid_file, _PATH_VARRUN "racoon.pid", MAXPATHLEN);
-	else if (lcconf->pathinfo[LC_PATHTYPE_PIDFILE][0] == '/') 
-		strlcpy(pid_file, lcconf->pathinfo[LC_PATHTYPE_PIDFILE], MAXPATHLEN);
-	else {
-		strlcat(pid_file, _PATH_VARRUN, MAXPATHLEN);
-		strlcat(pid_file, lcconf->pathinfo[LC_PATHTYPE_PIDFILE], MAXPATHLEN);
-	} 
-	fp = fopen(pid_file, "w");
-	if (fp) {
-		if (fchmod(fileno(fp),
-			S_IRUSR | S_IWUSR | S_IRGRP | S_IROTH) == -1) {
-			syslog(LOG_ERR, "%s", strerror(errno));
-			fclose(fp);
-			exit(1);
-		}
-		fprintf(fp, "%ld\n", (long)racoon_pid);
-		fclose(fp);
-	} else {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"cannot open %s", pid_file);
-	}
-
-	while (1) {
-		if (dying)
-			rfds = maskdying;
-		else
-			rfds = mask0;
-
-		/*
-		 * asynchronous requests via signal.
-		 * make sure to reset sigreq to 0.
-		 */
-		check_sigreq();
-
-		/* scheduling */
-		timeout = schedular();
-
-		error = select(nfds, &rfds, (fd_set *)0, (fd_set *)0, timeout);
-		if (error < 0) {
-			switch (errno) {
-			case EINTR:
-				continue;
-			default:
-				plog(LLV_ERROR, LOCATION, NULL,
-					"failed to select (%s)\n",
-					strerror(errno));
-				return -1;
-			}
-			/*NOTREACHED*/
-		}
-
-#ifdef ENABLE_ADMINPORT
-		if ((lcconf->sock_admin != -1) &&
-		    (FD_ISSET(lcconf->sock_admin, &rfds)))
-			admin_handler();
-#endif
-
-		for (p = lcconf->myaddrs; p; p = p->next) {
-			if (!p->addr)
-				continue;
-			if (FD_ISSET(p->sock, &rfds))
-				isakmp_handler(p->sock);
-		}
-
-		if (FD_ISSET(lcconf->sock_pfkey, &rfds))
-			pfkey_handler();
-
-		if (lcconf->rtsock >= 0 && FD_ISSET(lcconf->rtsock, &rfds)) {
-			if (update_myaddrs() && lcconf->autograbaddr)
-				check_rtsock(NULL);
-			else
-				initfds();
-		}
-	}
-}
-
-/* clear all status and exit program. */
-static void
-close_session()
-{
-#ifdef ENABLE_FASTQUIT
-	flushph2();
-#endif
-	flushph1();
-	close_sockets();
-	backupsa_clean();
-
-	plog(LLV_INFO, LOCATION, NULL, "racoon shutdown\n");
-	exit(0);
-}
-
-static void
-check_rtsock(unused)
-	void *unused;
-{
-	isakmp_close();
-	grab_myaddrs();
-	autoconf_myaddrsport();
-	isakmp_open();
-
-	/* initialize socket list again */
-	initfds();
-}
-
-static void
-initfds()
-{
-	struct myaddrs *p;
-
-	nfds = 0;
-
-	FD_ZERO(&mask0);
-	FD_ZERO(&maskdying);
-
-#ifdef ENABLE_ADMINPORT
-	if (lcconf->sock_admin != -1) {
-		if (lcconf->sock_admin >= FD_SETSIZE) {
-			plog(LLV_ERROR, LOCATION, NULL, "fd_set overrun\n");
-			exit(1);
-		}
-		FD_SET(lcconf->sock_admin, &mask0);
-		/* XXX should we listen on admin socket when dying ?
-		 */
-#if 0
-		FD_SET(lcconf->sock_admin, &maskdying);
-#endif
-		nfds = (nfds > lcconf->sock_admin ? nfds : lcconf->sock_admin);
-	}
-#endif
-	if (lcconf->sock_pfkey >= FD_SETSIZE) {
-		plog(LLV_ERROR, LOCATION, NULL, "fd_set overrun\n");
-		exit(1);
-	}
-	FD_SET(lcconf->sock_pfkey, &mask0);
-	FD_SET(lcconf->sock_pfkey, &maskdying);
-	nfds = (nfds > lcconf->sock_pfkey ? nfds : lcconf->sock_pfkey);
-	if (lcconf->rtsock >= 0) {
-		if (lcconf->rtsock >= FD_SETSIZE) {
-			plog(LLV_ERROR, LOCATION, NULL, "fd_set overrun\n");
-			exit(1);
-		}
-		FD_SET(lcconf->rtsock, &mask0);
-		nfds = (nfds > lcconf->rtsock ? nfds : lcconf->rtsock);
-	}
-
-	for (p = lcconf->myaddrs; p; p = p->next) {
-		if (!p->addr)
-			continue;
-		if (p->sock >= FD_SETSIZE) {
-			plog(LLV_ERROR, LOCATION, NULL, "fd_set overrun\n");
-			exit(1);
-		}
-		FD_SET(p->sock, &mask0);
-		nfds = (nfds > p->sock ? nfds : p->sock);
-	}
-	nfds++;
-}
-
-static int signals[] = {
-	SIGHUP,
-	SIGINT,
-	SIGTERM,
-	SIGUSR1,
-	SIGUSR2,
-	SIGCHLD,
-	0
-};
-
-/*
- * asynchronous requests will actually dispatched in the
- * main loop in session().
- */
-RETSIGTYPE
-signal_handler(sig)
-	int sig;
-{
-	/* Do not just set it to 1, because we may miss some signals by just setting
-	 * values to 0/1
-	 */
-	sigreq[sig]++;
-}
-
-
-/* XXX possible mem leaks and no way to go back for now !!!
- */
-static void reload_conf(){
-	int error;
-
-#ifdef ENABLE_HYBRID
-	if ((isakmp_cfg_init(ISAKMP_CFG_INIT_WARM)) != 0) {
-		plog(LLV_ERROR, LOCATION, NULL, 
-		    "ISAKMP mode config structure reset failed, "
-		    "not reloading\n");
-		return;
-	}
-#endif
-
-	save_sainfotree();
-
-	/* TODO: save / restore / flush old lcconf (?) / rmtree
-	 */
-/*	initlcconf();*/ /* racoon_conf ? ! */
-
-	save_rmconf();
-	initrmconf();
-
-	/* Do a part of pfkey_init() ?
-	 * SPD reload ?
-	 */
-	
-	save_params();
-	error = cfparse();
-	if (error != 0){
-		plog(LLV_ERROR, LOCATION, NULL, "config reload failed\n");
-		/* We are probably in an inconsistant state... */
-		return;
-	}
-	restore_params();
-
-#if 0	
-	if (dump_config)
-		dumprmconf ();
-#endif
-
-	/* 
-	 * init_myaddr() ?
-	 * If running in privilege separation, do not reinitialize
-	 * the IKE listener, as we will not have the right to 
-	 * setsockopt(IP_IPSEC_POLICY). 
-	 */
-	if (geteuid() == 0)
-		check_rtsock(NULL);
-
-	/* Revalidate ph1 / ph2tree !!!
-	 * update ctdtree if removing some ph1 !
-	 */
-	revalidate_ph12();
-	/* Update ctdtree ?
-	 */
-
-	save_sainfotree_flush();
-	save_rmconf_flush();
-}
-
-static void
-check_sigreq()
-{
-	int sig;
-
-	/* 
-	 * XXX We are not able to tell if we got 
-	 * several time the same signal. This is
-	 * not a problem for the current code, 
-	 * but we shall remember this limitation.
-	 */
-	for (sig = 0; sig <= NSIG; sig++) {
-		if (sigreq[sig] == 0)
-			continue;
-
-		sigreq[sig]--;
-		switch(sig) {
-		case 0:
-			return;
-			
-			/* Catch up childs, mainly scripts.
-			 */
-		case SIGCHLD:
-	    {
-			pid_t pid;
-			int s;
-			
-			pid = wait(&s);
-	    }
-		break;
-
-#ifdef DEBUG_RECORD_MALLOCATION
-		/* 
-		 * XXX This operation is signal handler unsafe and may lead to 
-		 * crashes and security breaches: See Henning Brauer talk at
-		 * EuroBSDCon 2005. Do not run in production with this option
-		 * enabled.
-		 */
-		case SIGUSR2:
-			DRM_dump();
-			break;
-#endif
-
-		case SIGHUP:
-			/* Save old configuration, load new one...  */
-			reload_conf();
-			break;
-
-		case SIGINT:
-		case SIGTERM:			
-			plog(LLV_INFO, LOCATION, NULL, 
-			    "caught signal %d\n", sig);
-			EVT_PUSH(NULL, NULL, EVTT_RACOON_QUIT, NULL);
-			pfkey_send_flush(lcconf->sock_pfkey, 
-			    SADB_SATYPE_UNSPEC);
-#ifdef ENABLE_FASTQUIT
-			close_session();
-#else
-			sched_new(1, check_flushsa_stub, NULL);
-#endif
-			dying = 1;
-			break;
-
-		default:
-			plog(LLV_INFO, LOCATION, NULL, 
-			    "caught signal %d\n", sig);
-			break;
-		}
-	}
-}
-
-/*
- * waiting the termination of processing until sending DELETE message
- * for all inbound SA will complete.
- */
-static void
-check_flushsa_stub(p)
-	void *p;
-{
-
-	check_flushsa();
-}
-
-static void
-check_flushsa()
-{
-	vchar_t *buf;
-	struct sadb_msg *msg, *end, *next;
-	struct sadb_sa *sa;
-	caddr_t mhp[SADB_EXT_MAX + 1];
-	int n;
-
-	buf = pfkey_dump_sadb(SADB_SATYPE_UNSPEC);
-	if (buf == NULL) {
-		plog(LLV_DEBUG, LOCATION, NULL,
-		    "pfkey_dump_sadb: returned nothing.\n");
-		return;
-	}
-
-	msg = (struct sadb_msg *)buf->v;
-	end = (struct sadb_msg *)(buf->v + buf->l);
-
-	/* counting SA except of dead one. */
-	n = 0;
-	while (msg < end) {
-		if (PFKEY_UNUNIT64(msg->sadb_msg_len) < sizeof(*msg))
-			break;
-		next = (struct sadb_msg *)((caddr_t)msg + PFKEY_UNUNIT64(msg->sadb_msg_len));
-		if (msg->sadb_msg_type != SADB_DUMP) {
-			msg = next;
-			continue;
-		}
-
-		if (pfkey_align(msg, mhp) || pfkey_check(mhp)) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"pfkey_check (%s)\n", ipsec_strerror());
-			msg = next;
-			continue;
-		}
-
-		sa = (struct sadb_sa *)(mhp[SADB_EXT_SA]);
-		if (!sa) {
-			msg = next;
-			continue;
-		}
-
-		if (sa->sadb_sa_state != SADB_SASTATE_DEAD) {
-			n++;
-			msg = next;
-			continue;
-		}
-
-		msg = next;
-	}
-
-	if (buf != NULL)
-		vfree(buf);
-
-	if (n) {
-		sched_new(1, check_flushsa_stub, NULL);
-		return;
-	}
-
-	close_session();
-}
-
-static void
-init_signal()
-{
-	int i;
-
-	for (i = 0; signals[i] != 0; i++)
-		if (set_signal(signals[i], signal_handler) < 0) {
-			plog(LLV_ERROR, LOCATION, NULL,
-				"failed to set_signal (%s)\n",
-				strerror(errno));
-			exit(1);
-		}
-}
-
-static int
-set_signal(sig, func)
-	int sig;
-	RETSIGTYPE (*func) __P((int));
-{
-	struct sigaction sa;
-
-	memset((caddr_t)&sa, 0, sizeof(sa));
-	sa.sa_handler = func;
-	sa.sa_flags = SA_RESTART;
-
-	if (sigemptyset(&sa.sa_mask) < 0)
-		return -1;
-
-	if (sigaction(sig, &sa, (struct sigaction *)0) < 0)
-		return(-1);
-
-	return 0;
-}
-
-static int
-close_sockets()
-{
-	isakmp_close();
-	pfkey_close(lcconf->sock_pfkey);
-#ifdef ENABLE_ADMINPORT
-	(void)admin_close();
-#endif
-	return 0;
-}
-
diff --git a/src/racoon/session.h b/src/racoon/session.h
deleted file mode 100644
index 58799ee..0000000
--- a/src/racoon/session.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*	$NetBSD: session.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: session.h,v 1.3 2004/06/11 16:00:17 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _SESSION_H
-#define _SESSION_H
-
-extern int session __P((void));
-extern RETSIGTYPE signal_handler __P((int));
-
-#endif /* _SESSION_H */
diff --git a/src/racoon/sockmisc.c b/src/racoon/sockmisc.c
deleted file mode 100644
index 4dd7cf1..0000000
--- a/src/racoon/sockmisc.c
+++ /dev/null
@@ -1,1197 +0,0 @@
-/*	$NetBSD: sockmisc.c,v 1.8.6.1 2007/08/01 11:52:22 vanhu Exp $	*/
-
-/* Id: sockmisc.c,v 1.24 2006/05/07 21:32:59 manubsd Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-#include <sys/uio.h>
-
-#include <netinet/in.h>
-#include PATH_IPSEC_H
-
-#if defined(INET6) && !defined(INET6_ADVAPI) && \
-	defined(IP_RECVDSTADDR) && !defined(IPV6_RECVDSTADDR)
-#define IPV6_RECVDSTADDR IP_RECVDSTADDR
-#endif
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#ifdef HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "plog.h"
-#include "sockmisc.h"
-#include "debug.h"
-#include "gcmalloc.h"
-#include "debugrm.h"
-#include "libpfkey.h"
-
-#ifdef ANDROID_CHANGES
-#include "NetdClient.h"
-#endif
-
-#ifndef IP_IPSEC_POLICY
-#define IP_IPSEC_POLICY 16	/* XXX: from linux/in.h */
-#endif
-
-#ifndef IPV6_IPSEC_POLICY
-#define IPV6_IPSEC_POLICY 34	/* XXX: from linux/???.h per
-				   "Tom Lendacky" <toml@us.ibm.com> */
-#endif
-
-const int niflags = 0;
-
-/*
- * compare two sockaddr without port number.
- * OUT:	0: equal.
- *	1: not equal.
- */
-int
-cmpsaddrwop(addr1, addr2)
-	const struct sockaddr *addr1;
-	const struct sockaddr *addr2;
-{
-	caddr_t sa1, sa2;
-
-	if (addr1 == 0 && addr2 == 0)
-		return 0;
-	if (addr1 == 0 || addr2 == 0)
-		return 1;
-
-#ifdef __linux__
-	if (addr1->sa_family != addr2->sa_family)
-		return 1;
-#else
-	if (addr1->sa_len != addr2->sa_len
-	 || addr1->sa_family != addr2->sa_family)
-		return 1;
-
-#endif /* __linux__ */
-
-	switch (addr1->sa_family) {
-	case AF_INET:
-		sa1 = (caddr_t)&((struct sockaddr_in *)addr1)->sin_addr;
-		sa2 = (caddr_t)&((struct sockaddr_in *)addr2)->sin_addr;
-		if (memcmp(sa1, sa2, sizeof(struct in_addr)) != 0)
-			return 1;
-		break;
-#ifdef INET6
-	case AF_INET6:
-		sa1 = (caddr_t)&((struct sockaddr_in6 *)addr1)->sin6_addr;
-		sa2 = (caddr_t)&((struct sockaddr_in6 *)addr2)->sin6_addr;
-		if (memcmp(sa1, sa2, sizeof(struct in6_addr)) != 0)
-			return 1;
-		if (((struct sockaddr_in6 *)addr1)->sin6_scope_id !=
-		    ((struct sockaddr_in6 *)addr2)->sin6_scope_id)
-			return 1;
-		break;
-#endif
-	default:
-		return 1;
-	}
-
-	return 0;
-}
-
-/*
- * compare two sockaddr with port, taking care wildcard.
- * addr1 is a subject address, addr2 is in a database entry.
- * OUT:	0: equal.
- *	1: not equal.
- */
-int
-cmpsaddrwild(addr1, addr2)
-	const struct sockaddr *addr1;
-	const struct sockaddr *addr2;
-{
-	caddr_t sa1, sa2;
-	u_short port1, port2;
-
-	if (addr1 == 0 && addr2 == 0)
-		return 0;
-	if (addr1 == 0 || addr2 == 0)
-		return 1;
-
-#ifdef __linux__
-	if (addr1->sa_family != addr2->sa_family)
-		return 1;
-#else
-	if (addr1->sa_len != addr2->sa_len
-	 || addr1->sa_family != addr2->sa_family)
-		return 1;
-
-#endif /* __linux__ */
-
-	switch (addr1->sa_family) {
-	case AF_INET:
-		sa1 = (caddr_t)&((struct sockaddr_in *)addr1)->sin_addr;
-		sa2 = (caddr_t)&((struct sockaddr_in *)addr2)->sin_addr;
-		port1 = ((struct sockaddr_in *)addr1)->sin_port;
-		port2 = ((struct sockaddr_in *)addr2)->sin_port;
-		if (!(port1 == IPSEC_PORT_ANY ||
-		      port2 == IPSEC_PORT_ANY ||
-		      port1 == port2))
-			return 1;
-		if (memcmp(sa1, sa2, sizeof(struct in_addr)) != 0)
-			return 1;
-		break;
-#ifdef INET6
-	case AF_INET6:
-		sa1 = (caddr_t)&((struct sockaddr_in6 *)addr1)->sin6_addr;
-		sa2 = (caddr_t)&((struct sockaddr_in6 *)addr2)->sin6_addr;
-		port1 = ((struct sockaddr_in6 *)addr1)->sin6_port;
-		port2 = ((struct sockaddr_in6 *)addr2)->sin6_port;
-		if (!(port1 == IPSEC_PORT_ANY ||
-		      port2 == IPSEC_PORT_ANY ||
-		      port1 == port2))
-			return 1;
-		if (memcmp(sa1, sa2, sizeof(struct in6_addr)) != 0)
-			return 1;
-		if (((struct sockaddr_in6 *)addr1)->sin6_scope_id !=
-		    ((struct sockaddr_in6 *)addr2)->sin6_scope_id)
-			return 1;
-		break;
-#endif
-	default:
-		return 1;
-	}
-
-	return 0;
-}
-
-/*
- * compare two sockaddr with strict match on port.
- * OUT:	0: equal.
- *	1: not equal.
- */
-int
-cmpsaddrstrict(addr1, addr2)
-	const struct sockaddr *addr1;
-	const struct sockaddr *addr2;
-{
-	caddr_t sa1, sa2;
-	u_short port1, port2;
-
-	if (addr1 == 0 && addr2 == 0)
-		return 0;
-	if (addr1 == 0 || addr2 == 0)
-		return 1;
-
-#ifdef __linux__
-	if (addr1->sa_family != addr2->sa_family)
-		return 1;
-#else
-	if (addr1->sa_len != addr2->sa_len
-	 || addr1->sa_family != addr2->sa_family)
-		return 1;
-
-#endif /* __linux__ */
-
-	switch (addr1->sa_family) {
-	case AF_INET:
-		sa1 = (caddr_t)&((struct sockaddr_in *)addr1)->sin_addr;
-		sa2 = (caddr_t)&((struct sockaddr_in *)addr2)->sin_addr;
-		port1 = ((struct sockaddr_in *)addr1)->sin_port;
-		port2 = ((struct sockaddr_in *)addr2)->sin_port;
-		if (port1 != port2)
-			return 1;
-		if (memcmp(sa1, sa2, sizeof(struct in_addr)) != 0)
-			return 1;
-		break;
-#ifdef INET6
-	case AF_INET6:
-		sa1 = (caddr_t)&((struct sockaddr_in6 *)addr1)->sin6_addr;
-		sa2 = (caddr_t)&((struct sockaddr_in6 *)addr2)->sin6_addr;
-		port1 = ((struct sockaddr_in6 *)addr1)->sin6_port;
-		port2 = ((struct sockaddr_in6 *)addr2)->sin6_port;
-		if (port1 != port2)
-			return 1;
-		if (memcmp(sa1, sa2, sizeof(struct in6_addr)) != 0)
-			return 1;
-		if (((struct sockaddr_in6 *)addr1)->sin6_scope_id !=
-		    ((struct sockaddr_in6 *)addr2)->sin6_scope_id)
-			return 1;
-		break;
-#endif
-	default:
-		return 1;
-	}
-
-	return 0;
-}
-
-#ifdef ANDROID_PATCHED
-
-struct sockaddr *getlocaladdr(struct sockaddr *remote)
-{
-    struct sockaddr_storage local;
-    socklen_t len = sysdep_sa_len(remote);
-    int s = socket(remote->sa_family, SOCK_DGRAM, 0);
-#ifdef ANDROID_CHANGES
-        protectFromVpn(s);
-#endif
-
-    if (s == -1 || connect(s, remote, len) == -1 ||
-        getsockname(s, (struct sockaddr *)&local, &len) == -1) {
-        close(s);
-        return NULL;
-    }
-    close(s);
-    return dupsaddr((struct sockaddr *)&local);
-}
-
-int recvfromto(int s, void *buf, size_t len, int flags, struct sockaddr *from,
-               socklen_t *fromlen, struct sockaddr *to, unsigned int *tolen)
-{
-    if (getsockname(s, to, (socklen_t *)tolen) == -1) {
-        return -1;
-    }
-    return recvfrom(s, buf, len, flags, from, fromlen);
-}
-
-int sendfromto(int s, const void *buf, size_t len, struct sockaddr *from,
-               struct sockaddr *to, int count)
-{
-    int i;
-    for (i = 0; i < count; ++i) {
-        if (sendto(s, buf, len, 0, to, sysdep_sa_len(to)) == -1) {
-            return -1;
-        }
-    }
-    return len;
-}
-
-int setsockopt_bypass(int s, int family)
-{
-    struct sadb_x_policy p = {
-        .sadb_x_policy_len = PFKEY_UNIT64(sizeof(struct sadb_x_policy)),
-        .sadb_x_policy_exttype = SADB_X_EXT_POLICY,
-        .sadb_x_policy_type = IPSEC_POLICY_BYPASS,
-        .sadb_x_policy_dir = IPSEC_DIR_INBOUND,
-#ifdef HAVE_PFKEY_POLICY_PRIORITY
-        .sadb_x_policy_priority = PRIORITY_DEFAULT,
-#endif
-    };
-    int level = (family == AF_INET) ? IPPROTO_IP : IPPROTO_IPV6;
-    int option = (family == AF_INET) ? IP_IPSEC_POLICY : IPV6_IPSEC_POLICY;
-    int len = PFKEY_EXTLEN(&p);
-    if (setsockopt(s, level, option, &p, len) == -1) {
-        plog(LLV_WARNING, LOCATION, NULL, "setsockopt in bypass: %s\n",
-                strerror(errno));
-    }
-    p.sadb_x_policy_dir = IPSEC_DIR_OUTBOUND;
-    if (setsockopt(s, level, option, &p, len) == -1) {
-        plog(LLV_WARNING, LOCATION, NULL, "setsockopt out bypass: %s\n",
-                strerror(errno));
-    }
-    return 0;
-}
-
-#else
-
-/* get local address against the destination. */
-struct sockaddr *
-getlocaladdr(remote)
-	struct sockaddr *remote;
-{
-	struct sockaddr *local;
-	u_int local_len = sizeof(struct sockaddr_storage);
-	int s;	/* for dummy connection */
-
-	/* allocate buffer */
-	if ((local = racoon_calloc(1, local_len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to get address buffer.\n");
-		goto err;
-	}
-	
-	/* get real interface received packet */
-	if ((s = socket(remote->sa_family, SOCK_DGRAM, 0)) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"socket (%s)\n", strerror(errno));
-		goto err;
-	}
-#ifdef ANDROID_CHANGES
-	protectFromVpn(s);
-#endif
-
-	setsockopt_bypass(s, remote->sa_family);
-	
-	if (connect(s, remote, sysdep_sa_len(remote)) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"connect (%s)\n", strerror(errno));
-		close(s);
-		goto err;
-	}
-
-	if (getsockname(s, local, &local_len) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"getsockname (%s)\n", strerror(errno));
-		close(s);
-		return NULL;
-	}
-
-	close(s);
-	return local;
-
-    err:
-	if (local != NULL)
-		racoon_free(local);
-	return NULL;
-}
-
-/*
- * Receive packet, with src/dst information.  It is assumed that necessary
- * setsockopt() have already performed on socket.
- */
-int
-recvfromto(s, buf, buflen, flags, from, fromlen, to, tolen)
-	int s;
-	void *buf;
-	size_t buflen;
-	int flags;
-	struct sockaddr *from;
-	socklen_t *fromlen;
-	struct sockaddr *to;
-	u_int *tolen;
-{
-	int otolen;
-	u_int len;
-	struct sockaddr_storage ss;
-	struct msghdr m;
-	struct cmsghdr *cm;
-	struct iovec iov[2];
-	u_char cmsgbuf[256];
-#if defined(INET6) && defined(INET6_ADVAPI)
-	struct in6_pktinfo *pi;
-#endif /*INET6_ADVAPI*/
-	struct sockaddr_in *sin;
-#ifdef INET6
-	struct sockaddr_in6 *sin6;
-#endif
-
-	len = sizeof(ss);
-	if (getsockname(s, (struct sockaddr *)&ss, &len) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"getsockname (%s)\n", strerror(errno));
-		return -1;
-	}
-
-	m.msg_name = (caddr_t)from;
-	m.msg_namelen = *fromlen;
-	iov[0].iov_base = (caddr_t)buf;
-	iov[0].iov_len = buflen;
-	m.msg_iov = iov;
-	m.msg_iovlen = 1;
-	memset(cmsgbuf, 0, sizeof(cmsgbuf));
-	cm = (struct cmsghdr *)cmsgbuf;
-	m.msg_control = (caddr_t)cm;
-	m.msg_controllen = sizeof(cmsgbuf);
-	if ((len = recvmsg(s, &m, flags)) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"recvmsg (%s)\n", strerror(errno));
-		return -1;
-	}
-	*fromlen = m.msg_namelen;
-
-	otolen = *tolen;
-	*tolen = 0;
-	for (cm = (struct cmsghdr *)CMSG_FIRSTHDR(&m);
-	     m.msg_controllen != 0 && cm;
-	     cm = (struct cmsghdr *)CMSG_NXTHDR(&m, cm)) {
-#if 0
-		plog(LLV_ERROR, LOCATION, NULL,
-			"cmsg %d %d\n", cm->cmsg_level, cm->cmsg_type);)
-#endif
-#if defined(INET6) && defined(INET6_ADVAPI)
-		if (ss.ss_family == AF_INET6
-		 && cm->cmsg_level == IPPROTO_IPV6
-		 && cm->cmsg_type == IPV6_PKTINFO
-		 && otolen >= sizeof(*sin6)) {
-			pi = (struct in6_pktinfo *)(CMSG_DATA(cm));
-			*tolen = sizeof(*sin6);
-			sin6 = (struct sockaddr_in6 *)to;
-			memset(sin6, 0, sizeof(*sin6));
-			sin6->sin6_family = AF_INET6;
-#ifndef __linux__
-			sin6->sin6_len = sizeof(*sin6);
-#endif
-			memcpy(&sin6->sin6_addr, &pi->ipi6_addr,
-				sizeof(sin6->sin6_addr));
-			/* XXX other cases, such as site-local? */
-			if (IN6_IS_ADDR_LINKLOCAL(&sin6->sin6_addr))
-				sin6->sin6_scope_id = pi->ipi6_ifindex;
-			else
-				sin6->sin6_scope_id = 0;
-			sin6->sin6_port =
-				((struct sockaddr_in6 *)&ss)->sin6_port;
-			otolen = -1;	/* "to" already set */
-			continue;
-		}
-#endif
-#ifdef __linux__
-		if (ss.ss_family == AF_INET
-		 && cm->cmsg_level == IPPROTO_IP
-		 && cm->cmsg_type == IP_PKTINFO
-		 && otolen >= sizeof(sin)) {
-			struct in_pktinfo *pi = (struct in_pktinfo *)(CMSG_DATA(cm));
-			*tolen = sizeof(*sin);
-			sin = (struct sockaddr_in *)to;
-			memset(sin, 0, sizeof(*sin));
-			sin->sin_family = AF_INET;
-			memcpy(&sin->sin_addr, &pi->ipi_addr,
-				sizeof(sin->sin_addr));
-			sin->sin_port =
-				((struct sockaddr_in *)&ss)->sin_port;
-			otolen = -1;	/* "to" already set */
-			continue;
-		}
-#endif
-#if defined(INET6) && defined(IPV6_RECVDSTADDR)
-		if (ss.ss_family == AF_INET6
-		      && cm->cmsg_level == IPPROTO_IPV6
-		      && cm->cmsg_type == IPV6_RECVDSTADDR
-		      && otolen >= sizeof(*sin6)) {
-			*tolen = sizeof(*sin6);
-			sin6 = (struct sockaddr_in6 *)to;
-			memset(sin6, 0, sizeof(*sin6));
-			sin6->sin6_family = AF_INET6;
-			sin6->sin6_len = sizeof(*sin6);
-			memcpy(&sin6->sin6_addr, CMSG_DATA(cm),
-				sizeof(sin6->sin6_addr));
-			sin6->sin6_port =
-				((struct sockaddr_in6 *)&ss)->sin6_port;
-			otolen = -1;	/* "to" already set */
-			continue;
-		}
-#endif
-#ifndef __linux__
-		if (ss.ss_family == AF_INET
-		 && cm->cmsg_level == IPPROTO_IP
-		 && cm->cmsg_type == IP_RECVDSTADDR
-		 && otolen >= sizeof(*sin)) {
-			*tolen = sizeof(*sin);
-			sin = (struct sockaddr_in *)to;
-			memset(sin, 0, sizeof(*sin));
-			sin->sin_family = AF_INET;
-			sin->sin_len = sizeof(*sin);
-			memcpy(&sin->sin_addr, CMSG_DATA(cm),
-				sizeof(sin->sin_addr));
-			sin->sin_port = ((struct sockaddr_in *)&ss)->sin_port;
-			otolen = -1;	/* "to" already set */
-			continue;
-		}
-#endif
-	}
-
-	return len;
-}
-
-/* send packet, with fixing src/dst address pair. */
-int
-sendfromto(s, buf, buflen, src, dst, cnt)
-	int s, cnt;
-	const void *buf;
-	size_t buflen;
-	struct sockaddr *src;
-	struct sockaddr *dst;
-{
-	struct sockaddr_storage ss;
-	u_int len;
-	int i;
-
-	if (src->sa_family != dst->sa_family) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"address family mismatch\n");
-		return -1;
-	}
-
-	len = sizeof(ss);
-	if (getsockname(s, (struct sockaddr *)&ss, &len) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"getsockname (%s)\n", strerror(errno));
-		return -1;
-	}
-
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"sockname %s\n", saddr2str((struct sockaddr *)&ss));
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"send packet from %s\n", saddr2str(src));
-	plog(LLV_DEBUG, LOCATION, NULL,
-		"send packet to %s\n", saddr2str(dst));
-
-	if (src->sa_family != ss.ss_family) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"address family mismatch\n");
-		return -1;
-	}
-
-	switch (src->sa_family) {
-#if defined(INET6) && defined(INET6_ADVAPI)
-// XXX: This block wasn't compiled on Linux - does it work?
-	case AF_INET6:
-	    {
-		struct msghdr m;
-		struct cmsghdr *cm;
-		struct iovec iov[2];
-		u_char cmsgbuf[256];
-		struct in6_pktinfo *pi;
-		int ifindex;
-		struct sockaddr_in6 src6, dst6;
-
-		memcpy(&src6, src, sizeof(src6));
-		memcpy(&dst6, dst, sizeof(dst6));
-
-		/* XXX take care of other cases, such as site-local */
-		ifindex = 0;
-		if (IN6_IS_ADDR_LINKLOCAL(&src6.sin6_addr)
-		 || IN6_IS_ADDR_MULTICAST(&src6.sin6_addr)) {
-			ifindex = src6.sin6_scope_id;	/*???*/
-		}
-
-		/* XXX some sanity check on dst6.sin6_scope_id */
-
-		/* flowinfo for IKE?  mmm, maybe useful but for now make it 0 */
-		src6.sin6_flowinfo = dst6.sin6_flowinfo = 0;
-
-		memset(&m, 0, sizeof(m));
-		m.msg_name = (caddr_t)&dst6;
-		m.msg_namelen = sizeof(dst6);
-		iov[0].iov_base = (char *)buf;
-		iov[0].iov_len = buflen;
-		m.msg_iov = iov;
-		m.msg_iovlen = 1;
-
-		memset(cmsgbuf, 0, sizeof(cmsgbuf));
-		cm = (struct cmsghdr *)cmsgbuf;
-		m.msg_control = (caddr_t)cm;
-		m.msg_controllen = CMSG_SPACE(sizeof(struct in6_pktinfo));
-
-		cm->cmsg_len = CMSG_LEN(sizeof(struct in6_pktinfo));
-		cm->cmsg_level = IPPROTO_IPV6;
-		cm->cmsg_type = IPV6_PKTINFO;
-		pi = (struct in6_pktinfo *)CMSG_DATA(cm);
-		memcpy(&pi->ipi6_addr, &src6.sin6_addr, sizeof(src6.sin6_addr));
-		pi->ipi6_ifindex = ifindex;
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"src6 %s %d\n",
-			saddr2str((struct sockaddr *)&src6),
-			src6.sin6_scope_id);
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"dst6 %s %d\n",
-			saddr2str((struct sockaddr *)&dst6),
-			dst6.sin6_scope_id);
-
-		for (i = 0; i < cnt; i++) {
-			len = sendmsg(s, &m, 0 /*MSG_DONTROUTE*/);
-			if (len < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"sendmsg (%s)\n", strerror(errno));
-				return -1;
-			}
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"%d times of %d bytes message will be sent "
-				"to %s\n",
-				i + 1, len, saddr2str(dst));
-		}
-		plogdump(LLV_DEBUG, (char *)buf, buflen);
-
-		return len;
-	    }
-#endif
-#ifdef __linux__
-	case AF_INET:
-	    {
-		struct msghdr m;
-		struct cmsghdr *cm;
-		struct iovec iov[2];
-		u_char cmsgbuf[256];
-		struct in_pktinfo *pi;
-		int ifindex = 0;
-		struct sockaddr_in src6, dst6;
-
-		memcpy(&src6, src, sizeof(src6));
-		memcpy(&dst6, dst, sizeof(dst6));
-
-		memset(&m, 0, sizeof(m));
-		m.msg_name = (caddr_t)&dst6;
-		m.msg_namelen = sizeof(dst6);
-		iov[0].iov_base = (char *)buf;
-		iov[0].iov_len = buflen;
-		m.msg_iov = iov;
-		m.msg_iovlen = 1;
-
-		memset(cmsgbuf, 0, sizeof(cmsgbuf));
-		cm = (struct cmsghdr *)cmsgbuf;
-		m.msg_control = (caddr_t)cm;
-		m.msg_controllen = CMSG_SPACE(sizeof(struct in_pktinfo));
-
-		cm->cmsg_len = CMSG_LEN(sizeof(struct in_pktinfo));
-		cm->cmsg_level = IPPROTO_IP;
-		cm->cmsg_type = IP_PKTINFO;
-		pi = (struct in_pktinfo *)CMSG_DATA(cm);
-		memcpy(&pi->ipi_spec_dst, &src6.sin_addr, sizeof(src6.sin_addr));
-		pi->ipi_ifindex = ifindex;
-
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"src4 %s\n",
-			saddr2str((struct sockaddr *)&src6));
-		plog(LLV_DEBUG, LOCATION, NULL,
-			"dst4 %s\n",
-			saddr2str((struct sockaddr *)&dst6));
-
-		for (i = 0; i < cnt; i++) {
-			len = sendmsg(s, &m, 0 /*MSG_DONTROUTE*/);
-			if (len < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"sendmsg (%s)\n", strerror(errno));
-				return -1;
-			}
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"%d times of %d bytes message will be sent "
-				"to %s\n",
-				i + 1, len, saddr2str(dst));
-		}
-		plogdump(LLV_DEBUG, (char *)buf, buflen);
-
-		return len;
-	    }
-#endif /* __linux__ */
-	default:
-	    {
-		int needclose = 0;
-		int sendsock;
-
-		if (ss.ss_family == src->sa_family && memcmp(&ss, src, sysdep_sa_len(src)) == 0) {
-			sendsock = s;
-			needclose = 0;
-		} else {
-			int yes = 1;
-			/*
-			 * Use newly opened socket for sending packets.
-			 * NOTE: this is unsafe, because if the peer is quick enough
-			 * the packet from the peer may be queued into sendsock.
-			 * Better approach is to prepare bind'ed udp sockets for
-			 * each of the interface addresses.
-			 */
-			sendsock = socket(src->sa_family, SOCK_DGRAM, 0);
-			if (sendsock < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"socket (%s)\n", strerror(errno));
-				return -1;
-			}
-#ifdef ANDROID_CHANGES
-			protectFromVpn(sendsock);
-#endif
-
-			if (setsockopt(sendsock, SOL_SOCKET,
-#ifdef __linux__
-				       SO_REUSEADDR,
-#else
-				       SO_REUSEPORT,
-#endif
-				       (void *)&yes, sizeof(yes)) < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"setsockopt SO_REUSEPORT (%s)\n", 
-					strerror(errno));
-				close(sendsock);
-				return -1;
-			}
-#ifdef IPV6_USE_MIN_MTU
-			if (src->sa_family == AF_INET6 &&
-			    setsockopt(sendsock, IPPROTO_IPV6, IPV6_USE_MIN_MTU,
-			    (void *)&yes, sizeof(yes)) < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"setsockopt IPV6_USE_MIN_MTU (%s)\n", 
-					strerror(errno));
-				close(sendsock);
-				return -1;
-			}
-#endif
-			if (setsockopt_bypass(sendsock, src->sa_family) < 0) {
-				close(sendsock);
-				return -1;
-			}
-
-			if (bind(sendsock, (struct sockaddr *)src, sysdep_sa_len(src)) < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"bind 1 (%s)\n", strerror(errno));
-				close(sendsock);
-				return -1;
-			}
-			needclose = 1;
-		}
-
-		for (i = 0; i < cnt; i++) {
-			len = sendto(sendsock, buf, buflen, 0, dst, sysdep_sa_len(dst));
-			if (len < 0) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"sendto (%s)\n", strerror(errno));
-				if (needclose)
-					close(sendsock);
-				return len;
-			}
-			plog(LLV_DEBUG, LOCATION, NULL,
-				"%d times of %d bytes message will be sent "
-				"to %s\n",
-				i + 1, len, saddr2str(dst));
-		}
-		plogdump(LLV_DEBUG, (char *)buf, buflen);
-
-		if (needclose)
-			close(sendsock);
-
-		return len;
-	    }
-	}
-}
-
-int
-setsockopt_bypass(so, family)
-	int so, family;
-{
-	int level;
-	char *buf;
-	char *policy;
-
-	switch (family) {
-	case AF_INET:
-		level = IPPROTO_IP;
-		break;
-#ifdef INET6
-	case AF_INET6:
-		level = IPPROTO_IPV6;
-		break;
-#endif
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unsupported address family %d\n", family);
-		return -1;
-	}
-
-	policy = "in bypass";
-	buf = ipsec_set_policy(policy, strlen(policy));
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ipsec_set_policy (%s)\n",
-			ipsec_strerror());
-		return -1;
-	}
-	if (setsockopt(so, level,
-	               (level == IPPROTO_IP ?
-	                         IP_IPSEC_POLICY : IPV6_IPSEC_POLICY),
-	               buf, ipsec_get_policylen(buf)) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"setsockopt IP_IPSEC_POLICY (%s)\n",
-			strerror(errno));
-		return -1;
-	}
-	racoon_free(buf);
-
-	policy = "out bypass";
-	buf = ipsec_set_policy(policy, strlen(policy));
-	if (buf == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"ipsec_set_policy (%s)\n",
-			ipsec_strerror());
-		return -1;
-	}
-	if (setsockopt(so, level,
-	               (level == IPPROTO_IP ?
-	                         IP_IPSEC_POLICY : IPV6_IPSEC_POLICY),
-	               buf, ipsec_get_policylen(buf)) < 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"setsockopt IP_IPSEC_POLICY (%s)\n",
-			strerror(errno));
-		return -1;
-	}
-	racoon_free(buf);
-
-	return 0;
-}
-
-struct sockaddr *
-newsaddr(len)
-	int len;
-{
-	struct sockaddr *new;
-
-	if ((new = racoon_calloc(1, len)) == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"%s\n", strerror(errno)); 
-		goto out;
-	}
-
-#ifdef __linux__
-	if (len == sizeof (struct sockaddr_in6))
-		new->sa_family = AF_INET6;
-	else
-		new->sa_family = AF_INET;
-#else
-	/* initial */
-	new->sa_len = len;
-#endif
-out:
-	return new;
-}
-
-#endif
-
-struct sockaddr *
-dupsaddr(src)
-	struct sockaddr *src;
-{
-	struct sockaddr *dst;
-
-	dst = racoon_calloc(1, sysdep_sa_len(src));
-	if (dst == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"%s\n", strerror(errno)); 
-		return NULL;
-	}
-
-	memcpy(dst, src, sysdep_sa_len(src));
-
-	return dst;
-}
-
-char *
-saddr2str(saddr)
-	const struct sockaddr *saddr;
-{
-	static char buf[NI_MAXHOST + NI_MAXSERV + 10];
-	char addr[NI_MAXHOST], port[NI_MAXSERV];
-
-	if (saddr == NULL)
-		return NULL;
-
-	if (saddr->sa_family == AF_UNSPEC)
-		snprintf (buf, sizeof(buf), "%s", "anonymous");
-	else {
-		GETNAMEINFO(saddr, addr, port);
-		snprintf(buf, sizeof(buf), "%s[%s]", addr, port);
-	}
-
-	return buf;
-}
-
-char *
-saddrwop2str(saddr)
-	const struct sockaddr *saddr;
-{
-	static char buf[NI_MAXHOST + NI_MAXSERV + 10];
-	char addr[NI_MAXHOST];
-
-	if (saddr == NULL)
-		return NULL;
-
-	GETNAMEINFO_NULL(saddr, addr);
-	snprintf(buf, sizeof(buf), "%s", addr);
-
-	return buf;
-}
-
-char *
-naddrwop2str(const struct netaddr *naddr)
-{
-	static char buf[NI_MAXHOST + 10];
-	static const struct sockaddr sa_any;	/* this is initialized to all zeros */
-	
-	if (naddr == NULL)
-		return NULL;
-
-	if (memcmp(&naddr->sa, &sa_any, sizeof(sa_any)) == 0)
-		snprintf(buf, sizeof(buf), "%s", "any");
-	else {
-		snprintf(buf, sizeof(buf), "%s", saddrwop2str(&naddr->sa.sa));
-		snprintf(&buf[strlen(buf)], sizeof(buf) - strlen(buf), "/%ld", naddr->prefix);
-	}
-	return buf;
-}
-
-char *
-naddrwop2str_fromto(const char *format, const struct netaddr *saddr,
-		    const struct netaddr *daddr)
-{
-	static char buf[2*(NI_MAXHOST + NI_MAXSERV + 10) + 100];
-	char *src, *dst;
-
-	src = racoon_strdup(naddrwop2str(saddr));
-	dst = racoon_strdup(naddrwop2str(daddr));
-	STRDUP_FATAL(src);
-	STRDUP_FATAL(dst);
-	/* WARNING: Be careful about the format string! Don't 
-	   ever pass in something that a user can modify!!! */
-	snprintf (buf, sizeof(buf), format, src, dst);
-	racoon_free (src);
-	racoon_free (dst);
-
-	return buf;
-}
-
-char *
-saddr2str_fromto(format, saddr, daddr)
-	const char *format;
-	const struct sockaddr *saddr;
-	const struct sockaddr *daddr;
-{
-	static char buf[2*(NI_MAXHOST + NI_MAXSERV + 10) + 100];
-	char *src, *dst;
-
-	src = racoon_strdup(saddr2str(saddr));
-	dst = racoon_strdup(saddr2str(daddr));
-	STRDUP_FATAL(src);
-	STRDUP_FATAL(dst);
-	/* WARNING: Be careful about the format string! Don't 
-	   ever pass in something that a user can modify!!! */
-	snprintf (buf, sizeof(buf), format, src, dst);
-	racoon_free (src);
-	racoon_free (dst);
-
-	return buf;
-}
-
-struct sockaddr *
-str2saddr(host, port)
-	char *host;
-	char *port;
-{
-	struct addrinfo hints, *res;
-	struct sockaddr *saddr;
-	int error;
-
-	memset(&hints, 0, sizeof(hints));
-	hints.ai_family = PF_UNSPEC;
-	hints.ai_socktype = SOCK_DGRAM;
-	hints.ai_flags = AI_NUMERICHOST;
-	error = getaddrinfo(host, port, &hints, &res);
-	if (error != 0) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"getaddrinfo(%s%s%s): %s\n",
-			host, port ? "," : "", port ? port : "",
-			gai_strerror(error));
-		return NULL;
-	}
-	if (res->ai_next != NULL) {
-		plog(LLV_WARNING, LOCATION, NULL,
-			"getaddrinfo(%s%s%s): "
-			"resolved to multiple address, "
-			"taking the first one\n",
-			host, port ? "," : "", port ? port : "");
-	}
-	saddr = racoon_malloc(res->ai_addrlen);
-	if (saddr == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"failed to allocate buffer.\n");
-		freeaddrinfo(res);
-		return NULL;
-	}
-	memcpy(saddr, res->ai_addr, res->ai_addrlen);
-	freeaddrinfo(res);
-
-	return saddr;
-}
-
-void
-mask_sockaddr(a, b, l)
-	struct sockaddr *a;
-	const struct sockaddr *b;
-	size_t l;
-{
-	size_t i;
-	u_int8_t *p, alen;
-
-	switch (b->sa_family) {
-	case AF_INET:
-		alen = sizeof(struct in_addr);
-		p = (u_int8_t *)&((struct sockaddr_in *)a)->sin_addr;
-		break;
-#ifdef INET6
-	case AF_INET6:
-		alen = sizeof(struct in6_addr);
-		p = (u_int8_t *)&((struct sockaddr_in6 *)a)->sin6_addr;
-		break;
-#endif
-	default:
-		plog(LLV_ERROR, LOCATION, NULL,
-			"invalid family: %d\n", b->sa_family);
-		exit(1);
-	}
-
-	if ((alen << 3) < l) {
-		plog(LLV_ERROR, LOCATION, NULL,
-			"unexpected inconsistency: %d %zu\n", b->sa_family, l);
-		exit(1);
-	}
-
-	memcpy(a, b, sysdep_sa_len(b));
-	p[l / 8] &= (0xff00 >> (l % 8)) & 0xff;
-	for (i = l / 8 + 1; i < alen; i++)
-		p[i] = 0x00;
-}
-
-/* Compute a score describing how "accurate" a netaddr is for a given sockaddr.
- * Examples:
- * 	Return values for address 10.20.30.40 [port 500] and given netaddresses...
- * 		10.10.0.0/16	=> -1	... doesn't match
- * 		0.0.0.0/0	=> 0	... matches, but only 0 bits.
- * 		10.20.0.0/16	=> 16	... 16 bits match
- * 		10.20.30.0/24	=> 24	... guess what ;-)
- * 		10.20.30.40/32	=> 32	... whole address match
- * 		10.20.30.40:500	=> 33	... both address and port match
- * 		10.20.30.40:501	=> -1	... port doesn't match and isn't 0 (=any)
- */
-int
-naddr_score(const struct netaddr *naddr, const struct sockaddr *saddr)
-{
-	static const struct netaddr naddr_any;	/* initialized to all-zeros */
-	struct sockaddr sa;
-	u_int16_t naddr_port, saddr_port;
-	int port_score;
-
-	if (!naddr || !saddr) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		     "Call with null args: naddr=%p, saddr=%p\n",
-		     naddr, saddr);
-		return -1;
-	}
-
-	/* Wildcard address matches, but only 0 bits. */
-	if (memcmp(naddr, &naddr_any, sizeof(naddr_any)) == 0)
-		return 0;
-
-	/* If families don't match we really can't do much... */
-	if (naddr->sa.sa.sa_family != saddr->sa_family)
-		return -1;
-	
-	/* If port check fail don't bother to check addresses. */
-	naddr_port = extract_port(&naddr->sa.sa);
-	saddr_port = extract_port(saddr);
-	if (naddr_port == 0 || saddr_port == 0)	/* wildcard match */
-		port_score = 0;
-	else if (naddr_port == saddr_port)	/* exact match */
-		port_score = 1;
-	else					/* mismatch :-) */
-		return -1;
-
-	/* Here it comes - compare network addresses. */
-	mask_sockaddr(&sa, saddr, naddr->prefix);
-	if (loglevel >= LLV_DEBUG) {	/* debug only */
-		char *a1, *a2, *a3;
-		a1 = racoon_strdup(naddrwop2str(naddr));
-		a2 = racoon_strdup(saddrwop2str(saddr));
-		a3 = racoon_strdup(saddrwop2str(&sa));
-		STRDUP_FATAL(a1);
-		STRDUP_FATAL(a2);
-		STRDUP_FATAL(a3);
-		plog(LLV_DEBUG, LOCATION, NULL,
-		     "naddr=%s, saddr=%s (masked=%s)\n",
-		     a1, a2, a3);
-		free(a1);
-		free(a2);
-		free(a3);
-	}
-	if (cmpsaddrwop(&sa, &naddr->sa.sa) == 0)
-		return naddr->prefix + port_score;
-
-	return -1;
-}
-
-/* Some usefull functions for sockaddr port manipulations. */
-u_int16_t
-extract_port (const struct sockaddr *addr)
-{
-  u_int16_t port = 0;
-  
-  if (!addr)
-    return port;
-
-  switch (addr->sa_family) {
-    case AF_INET:
-      port = ((struct sockaddr_in *)addr)->sin_port;
-      break;
-    case AF_INET6:
-      port = ((struct sockaddr_in6 *)addr)->sin6_port;
-      break;
-    default:
-      plog(LLV_ERROR, LOCATION, NULL, "unknown AF: %u\n", addr->sa_family);
-      break;
-  }
-
-  return ntohs(port);
-}
-
-u_int16_t *
-get_port_ptr (struct sockaddr *addr)
-{
-  u_int16_t *port_ptr;
-
-  if (!addr)
-    return NULL;
-
-  switch (addr->sa_family) {
-    case AF_INET:
-      port_ptr = &(((struct sockaddr_in *)addr)->sin_port);
-      break;
-    case AF_INET6:
-      port_ptr = &(((struct sockaddr_in6 *)addr)->sin6_port);
-      break;
-    default:
-      plog(LLV_ERROR, LOCATION, NULL, "unknown AF: %u\n", addr->sa_family);
-      return NULL;
-      break;
-  }
-
-  return port_ptr;
-}
-
-u_int16_t *
-set_port (struct sockaddr *addr, u_int16_t new_port)
-{
-  u_int16_t *port_ptr;
-
-  port_ptr = get_port_ptr (addr);
-
-  if (port_ptr)
-    *port_ptr = htons(new_port);
-
-  return port_ptr;
-}
diff --git a/src/racoon/sockmisc.h b/src/racoon/sockmisc.h
deleted file mode 100644
index a035dec..0000000
--- a/src/racoon/sockmisc.h
+++ /dev/null
@@ -1,89 +0,0 @@
-/*	$NetBSD: sockmisc.h,v 1.7 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: sockmisc.h,v 1.9 2005/10/05 16:55:41 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _SOCKMISC_H
-#define _SOCKMISC_H
-
-struct netaddr {
-	union {
-		struct sockaddr sa;
-		struct sockaddr_in sin;
-		struct sockaddr_in6 sin6;
-	} sa;
-	unsigned long prefix;
-};
-
-extern const int niflags;
-
-extern int cmpsaddrwop __P((const struct sockaddr *, const struct sockaddr *));
-extern int cmpsaddrwild __P((const struct sockaddr *, const struct sockaddr *));
-extern int cmpsaddrstrict __P((const struct sockaddr *, const struct sockaddr *));
-
-#ifdef ENABLE_NATT 
-#define CMPSADDR(saddr1, saddr2) cmpsaddrstrict((saddr1), (saddr2))
-#else 
-#define CMPSADDR(saddr1, saddr2) cmpsaddrwop((saddr1), (saddr2))
-#endif
-
-extern struct sockaddr *getlocaladdr __P((struct sockaddr *));
-
-extern int recvfromto __P((int, void *, size_t, int,
-	struct sockaddr *, socklen_t *, struct sockaddr *, unsigned int *));
-extern int sendfromto __P((int, const void *, size_t,
-	struct sockaddr *, struct sockaddr *, int));
-
-extern int setsockopt_bypass __P((int, int));
-
-extern struct sockaddr *newsaddr __P((int));
-extern struct sockaddr *dupsaddr __P((struct sockaddr *));
-extern char *saddr2str __P((const struct sockaddr *));
-extern char *saddrwop2str __P((const struct sockaddr *));
-extern char *saddr2str_fromto __P((const char *format, 
-				   const struct sockaddr *saddr, 
-				   const struct sockaddr *daddr));
-extern struct sockaddr *str2saddr __P((char *, char *));
-extern void mask_sockaddr __P((struct sockaddr *, const struct sockaddr *,
-	size_t));
-
-/* struct netaddr functions */
-extern char *naddrwop2str __P((const struct netaddr *naddr));
-extern char *naddrwop2str_fromto __P((const char *format, const struct netaddr *saddr,
-				      const struct netaddr *daddr));
-extern int naddr_score(const struct netaddr *naddr, const struct sockaddr *saddr);
-
-/* Some usefull functions for sockaddr port manipulations. */
-extern u_int16_t extract_port __P((const struct sockaddr *addr));
-extern u_int16_t *set_port __P((struct sockaddr *addr, u_int16_t new_port));
-extern u_int16_t *get_port_ptr __P((struct sockaddr *addr));
-
-#endif /* _SOCKMISC_H */
diff --git a/src/racoon/stats.pl b/src/racoon/stats.pl
deleted file mode 100644
index f509512..0000000
--- a/src/racoon/stats.pl
+++ /dev/null
@@ -1,15 +0,0 @@
-#!/usr/bin/perl
-# usage:
-# % cat /var/log/racoon-stats.log | perl stats.pl
-
-while(<STDIN>) {
-	chomp;
-	($a, $a, $a, $a, $a, $b) = split(/\s+/, $_, 6);
-	($a, $c) = split(/:/, $b, 2);
-	$r{$a} += $c;
-	$t{$a}++;
-}
-
-foreach (sort keys %t) {
-	printf "%s: total=%d avg=%8.6f\n", $_, $t{$_}, $r{$_}/$t{$_};
-}
diff --git a/src/racoon/str2val.c b/src/racoon/str2val.c
deleted file mode 100644
index 62d38a6..0000000
--- a/src/racoon/str2val.c
+++ /dev/null
@@ -1,126 +0,0 @@
-/*	$NetBSD: str2val.c,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/*	$KAME: str2val.c,v 1.11 2001/08/16 14:37:29 itojun Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <ctype.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-
-#include "str2val.h"
-#include "gcmalloc.h"
-
-/*
- * exchange a value to a hex string.
- * must free buffer allocated later.
- */
-caddr_t
-val2str(buf, mlen)
-	const char *buf;
-	size_t mlen;
-{
-	caddr_t new;
-	size_t len = (mlen * 2) + mlen / 8 + 10;
-	size_t i, j;
-
-	if ((new = racoon_malloc(len)) == 0) return(0);
-
-	for (i = 0, j = 0; i < mlen; i++) {
-		snprintf(&new[j], len - j, "%02x", (u_char)buf[i]);
-		j += 2;
-		if (i % 8 == 7) {
-			new[j++] = ' ';
-			new[j] = '\0';
-		}
-	}
-	new[j] = '\0';
-
-	return(new);
-}
-
-/*
- * exchange a string based "base" to a value.
- */
-char *
-str2val(str, base, len)
-	const char *str;
-	int base;
-	size_t *len;
-{
-	int f;
-	size_t i;
-	char *dst;
-	char *rp;
-	const char *p;
-	char b[3];
-
-	i = 0;
-	for (p = str; *p != '\0'; p++) {
-		if (isxdigit((int)*p))
-			i++;
-		else if (isspace((int)*p))
-			;
-		else
-			return NULL;
-	}
-	if (i == 0 || (i % 2) != 0)
-		return NULL;
-	i /= 2;
-
-	if ((dst = racoon_malloc(i)) == NULL)
-		return NULL;
-
-	i = 0;
-	f = 0;
-	for (rp = dst, p = str; *p != '\0'; p++) {
-		if (isxdigit((int)*p)) {
-			if (!f) {
-				b[0] = *p;
-				f = 1;
-			} else {
-				b[1] = *p;
-				b[2] = '\0';
-				*rp++ = (char)strtol(b, NULL, base);
-				i++;
-				f = 0;
-			}
-		}
-	}
-
-	*len = i;
-
-	return(dst);
-}
diff --git a/src/racoon/str2val.h b/src/racoon/str2val.h
deleted file mode 100644
index 4a7cec1..0000000
--- a/src/racoon/str2val.h
+++ /dev/null
@@ -1,40 +0,0 @@
-/*	$NetBSD: str2val.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: str2val.h,v 1.3 2004/06/11 16:00:17 ludvigm Exp */
-
-/*
- * 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.
- */
-
-#ifndef _STR2VAL_H
-#define _STR2VAL_H
-
-extern caddr_t val2str __P((const char *, size_t));
-extern char *str2val __P((const char *, int, size_t *));
-
-#endif /* _STR2VAL_H */
diff --git a/src/racoon/strnames.c b/src/racoon/strnames.c
deleted file mode 100644
index fa5df0f..0000000
--- a/src/racoon/strnames.c
+++ /dev/null
@@ -1,1034 +0,0 @@
-/*	$NetBSD: strnames.c,v 1.7.6.1 2007/08/01 11:52:22 vanhu Exp $	*/
-
-/*	$KAME: strnames.c,v 1.25 2003/11/13 10:53:26 itojun Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h> 
-#include PATH_IPSEC_H
-#include <netinet/in.h>
-
-#include <stdio.h>
-#include <stdlib.h>
-#ifdef ENABLE_HYBRID
-#include <resolv.h>
-#endif
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-
-#include "isakmp_var.h"
-#include "isakmp.h"
-#ifdef ENABLE_HYBRID
-#  include "isakmp_xauth.h"
-#  include "isakmp_unity.h"
-#  include "isakmp_cfg.h"
-#endif
-#include "ipsec_doi.h"
-#include "oakley.h"
-#include "handler.h"
-#include "pfkey.h"
-#include "strnames.h"
-#include "algorithm.h"
-
-struct ksmap {
-	int key;
-	char *str;
-	char *(*f) __P((int));
-};
-
-char *
-num2str(n)
-	int n;
-{
-	static char buf[20];
-
-	snprintf(buf, sizeof(buf), "%d", n);
-
-	return buf;
-}
-
-/* isakmp.h */
-char *
-s_isakmp_state(t, d, s)
-	int t, d, s;
-{
-	switch (t) {
-	case ISAKMP_ETYPE_AGG:
-		switch (d) {
-		case INITIATOR:
-			switch (s) {
-			case PHASE1ST_MSG1SENT:
-				return "agg I msg1";
-			case PHASE1ST_ESTABLISHED:
-				return "agg I msg2";
-			default:
-				break;
-			}
-		case RESPONDER:
-			switch (s) {
-			case PHASE1ST_MSG1SENT:
-				return "agg R msg1";
-			default:
-				break;
-			}
-		}
-		break;
-	case ISAKMP_ETYPE_BASE:
-		switch (d) {
-		case INITIATOR:
-			switch (s) {
-			case PHASE1ST_MSG1SENT:
-				return "base I msg1";
-			case PHASE1ST_MSG2SENT:
-				return "base I msg2";
-			default:
-				break;
-			}
-		case RESPONDER:
-			switch (s) {
-			case PHASE1ST_MSG1SENT:
-				return "base R msg1";
-			case PHASE1ST_ESTABLISHED:
-				return "base R msg2";
-			default:
-				break;
-			}
-		}
-		break;
-	case ISAKMP_ETYPE_IDENT:
-		switch (d) {
-		case INITIATOR:
-			switch (s) {
-			case PHASE1ST_MSG1SENT:
-				return "ident I msg1";
-			case PHASE1ST_MSG2SENT:
-				return "ident I msg2";
-			case PHASE1ST_MSG3SENT:
-				return "ident I msg3";
-			default:
-				break;
-			}
-		case RESPONDER:
-			switch (s) {
-			case PHASE1ST_MSG1SENT:
-				return "ident R msg1";
-			case PHASE1ST_MSG2SENT:
-				return "ident R msg2";
-			case PHASE1ST_ESTABLISHED:
-				return "ident R msg3";
-			default:
-				break;
-			}
-		}
-		break;
-	case ISAKMP_ETYPE_QUICK:
-		switch (d) {
-		case INITIATOR:
-			switch (s) {
-			case PHASE2ST_MSG1SENT:
-				return "quick I msg1";
-			case PHASE2ST_ADDSA:
-				return "quick I msg2";
-			default:
-				break;
-			}
-		case RESPONDER:
-			switch (s) {
-			case PHASE2ST_MSG1SENT:
-				return "quick R msg1";
-			case PHASE2ST_COMMIT:
-				return "quick R msg2";
-			default:
-				break;
-			}
-		}
-		break;
-	default:
-	case ISAKMP_ETYPE_NONE:
-	case ISAKMP_ETYPE_AUTH:
-	case ISAKMP_ETYPE_INFO:
-	case ISAKMP_ETYPE_NEWGRP:
-	case ISAKMP_ETYPE_ACKINFO:
-		break;
-	}
-	/*NOTREACHED*/
-
-	return "???";
-}
-
-static struct ksmap name_isakmp_certtype[] = {
-{ ISAKMP_CERT_NONE,	"NONE",					NULL },
-{ ISAKMP_CERT_PKCS7,	"PKCS #7 wrapped X.509 certificate",	NULL },
-{ ISAKMP_CERT_PGP,	"PGP Certificate",			NULL },
-{ ISAKMP_CERT_DNS,	"DNS Signed Key",			NULL },
-{ ISAKMP_CERT_X509SIGN,	"X.509 Certificate Signature",		NULL },
-{ ISAKMP_CERT_X509KE,	"X.509 Certificate Key Exchange",	NULL },
-{ ISAKMP_CERT_KERBEROS,	"Kerberos Tokens",			NULL },
-{ ISAKMP_CERT_CRL,	"Certificate Revocation List (CRL)",	NULL },
-{ ISAKMP_CERT_ARL,	"Authority Revocation List (ARL)",	NULL },
-{ ISAKMP_CERT_SPKI,	"SPKI Certificate",			NULL },
-{ ISAKMP_CERT_X509ATTR,	"X.509 Certificate Attribute",		NULL },
-};
-
-char *
-s_isakmp_certtype(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_isakmp_certtype); i++)
-		if (name_isakmp_certtype[i].key == k)
-			return name_isakmp_certtype[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_isakmp_etype[] = {
-{ ISAKMP_ETYPE_NONE,	"None",			NULL },
-{ ISAKMP_ETYPE_BASE,	"Base",			NULL },
-{ ISAKMP_ETYPE_IDENT,	"Identity Protection",	NULL },
-{ ISAKMP_ETYPE_AUTH,	"Authentication Only",	NULL },
-{ ISAKMP_ETYPE_AGG,	"Aggressive",		NULL },
-{ ISAKMP_ETYPE_INFO,	"Informational",	NULL },
-{ ISAKMP_ETYPE_CFG,	"Mode config",		NULL },
-{ ISAKMP_ETYPE_QUICK,	"Quick",		NULL },
-{ ISAKMP_ETYPE_NEWGRP,	"New Group",		NULL },
-{ ISAKMP_ETYPE_ACKINFO,	"Acknowledged Informational",	NULL },
-};
-
-char *
-s_isakmp_etype(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_isakmp_etype); i++)
-		if (name_isakmp_etype[i].key == k)
-			return name_isakmp_etype[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_isakmp_notify_msg[] = {
-{ ISAKMP_NTYPE_INVALID_PAYLOAD_TYPE,	"INVALID-PAYLOAD-TYPE",		NULL },
-{ ISAKMP_NTYPE_DOI_NOT_SUPPORTED,	"DOI-NOT-SUPPORTED",		NULL },
-{ ISAKMP_NTYPE_SITUATION_NOT_SUPPORTED,	"SITUATION-NOT-SUPPORTED",	NULL },
-{ ISAKMP_NTYPE_INVALID_COOKIE,		"INVALID-COOKIE",		NULL },
-{ ISAKMP_NTYPE_INVALID_MAJOR_VERSION,	"INVALID-MAJOR-VERSION",	NULL },
-{ ISAKMP_NTYPE_INVALID_MINOR_VERSION,	"INVALID-MINOR-VERSION",	NULL },
-{ ISAKMP_NTYPE_INVALID_EXCHANGE_TYPE,	"INVALID-EXCHANGE-TYPE",	NULL },
-{ ISAKMP_NTYPE_INVALID_FLAGS,		"INVALID-FLAGS",		NULL },
-{ ISAKMP_NTYPE_INVALID_MESSAGE_ID,	"INVALID-MESSAGE-ID",		NULL },
-{ ISAKMP_NTYPE_INVALID_PROTOCOL_ID,	"INVALID-PROTOCOL-ID",		NULL },
-{ ISAKMP_NTYPE_INVALID_SPI,		"INVALID-SPI",			NULL },
-{ ISAKMP_NTYPE_INVALID_TRANSFORM_ID,	"INVALID-TRANSFORM-ID",		NULL },
-{ ISAKMP_NTYPE_ATTRIBUTES_NOT_SUPPORTED, "ATTRIBUTES-NOT-SUPPORTED",	NULL },
-{ ISAKMP_NTYPE_NO_PROPOSAL_CHOSEN,	"NO-PROPOSAL-CHOSEN",		NULL },
-{ ISAKMP_NTYPE_BAD_PROPOSAL_SYNTAX,	"BAD-PROPOSAL-SYNTAX",		NULL },
-{ ISAKMP_NTYPE_PAYLOAD_MALFORMED,	"PAYLOAD-MALFORMED",		NULL },
-{ ISAKMP_NTYPE_INVALID_KEY_INFORMATION,	"INVALID-KEY-INFORMATION",	NULL },
-{ ISAKMP_NTYPE_INVALID_ID_INFORMATION,	"INVALID-ID-INFORMATION",	NULL },
-{ ISAKMP_NTYPE_INVALID_CERT_ENCODING,	"INVALID-CERT-ENCODING",	NULL },
-{ ISAKMP_NTYPE_INVALID_CERTIFICATE,	"INVALID-CERTIFICATE",		NULL },
-{ ISAKMP_NTYPE_BAD_CERT_REQUEST_SYNTAX,	"BAD-CERT-REQUEST-SYNTAX",	NULL },
-{ ISAKMP_NTYPE_INVALID_CERT_AUTHORITY,	"INVALID-CERT-AUTHORITY",	NULL },
-{ ISAKMP_NTYPE_INVALID_HASH_INFORMATION, "INVALID-HASH-INFORMATION",	NULL },
-{ ISAKMP_NTYPE_AUTHENTICATION_FAILED,	"AUTHENTICATION-FAILED",	NULL },
-{ ISAKMP_NTYPE_INVALID_SIGNATURE,	"INVALID-SIGNATURE",		NULL },
-{ ISAKMP_NTYPE_ADDRESS_NOTIFICATION,	"ADDRESS-NOTIFICATION",		NULL },
-{ ISAKMP_NTYPE_NOTIFY_SA_LIFETIME,	"NOTIFY-SA-LIFETIME",		NULL },
-{ ISAKMP_NTYPE_CERTIFICATE_UNAVAILABLE,	"CERTIFICATE-UNAVAILABLE",	NULL },
-{ ISAKMP_NTYPE_UNSUPPORTED_EXCHANGE_TYPE, "UNSUPPORTED-EXCHANGE-TYPE",	NULL },
-{ ISAKMP_NTYPE_UNEQUAL_PAYLOAD_LENGTHS,	"UNEQUAL-PAYLOAD-LENGTHS",	NULL },
-{ ISAKMP_NTYPE_CONNECTED,		"CONNECTED",			NULL },
-{ ISAKMP_NTYPE_RESPONDER_LIFETIME,	"RESPONDER-LIFETIME",		NULL },
-{ ISAKMP_NTYPE_REPLAY_STATUS,		"REPLAY-STATUS",		NULL },
-{ ISAKMP_NTYPE_INITIAL_CONTACT,		"INITIAL-CONTACT",		NULL },
-#ifdef ENABLE_HYBRID
-{ ISAKMP_NTYPE_UNITY_HEARTBEAT,		"HEARTBEAT (Unity)",		NULL },
-#endif
-{ ISAKMP_LOG_RETRY_LIMIT_REACHED,	"RETRY-LIMIT-REACHED",		NULL },
-};
-
-char *
-s_isakmp_notify_msg(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_isakmp_notify_msg); i++)
-		if (name_isakmp_notify_msg[i].key == k)
-			return name_isakmp_notify_msg[i].str;
-
-	return num2str(k);
-}
-
-static struct ksmap name_isakmp_nptype[] = {
-{ ISAKMP_NPTYPE_NONE,		"none",		NULL },
-{ ISAKMP_NPTYPE_SA,		"sa",		NULL },
-{ ISAKMP_NPTYPE_P,		"prop",		NULL },
-{ ISAKMP_NPTYPE_T,		"trns",		NULL },
-{ ISAKMP_NPTYPE_KE,		"ke",		NULL },
-{ ISAKMP_NPTYPE_ID,		"id",		NULL },
-{ ISAKMP_NPTYPE_CERT,		"cert",		NULL },
-{ ISAKMP_NPTYPE_CR,		"cr",		NULL },
-{ ISAKMP_NPTYPE_HASH,		"hash",		NULL },
-{ ISAKMP_NPTYPE_SIG,		"sig",		NULL },
-{ ISAKMP_NPTYPE_NONCE,		"nonce",	NULL },
-{ ISAKMP_NPTYPE_N,		"notify",	NULL },
-{ ISAKMP_NPTYPE_D,		"delete",	NULL },
-{ ISAKMP_NPTYPE_VID,		"vid",		NULL },
-{ ISAKMP_NPTYPE_ATTR,		"attr",		NULL },
-{ ISAKMP_NPTYPE_GSS,		"gss id",	NULL },
-{ ISAKMP_NPTYPE_NATD_RFC,	"nat-d",	NULL },
-{ ISAKMP_NPTYPE_NATOA_RFC,	"nat-oa",	NULL },
-{ ISAKMP_NPTYPE_NATD_DRAFT,	"nat-d",	NULL },
-{ ISAKMP_NPTYPE_NATOA_DRAFT,	"nat-oa",	NULL },
-{ ISAKMP_NPTYPE_FRAG,		"ike frag",	NULL },
-};
-
-char *
-s_isakmp_nptype(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_isakmp_nptype); i++)
-		if (name_isakmp_nptype[i].key == k)
-			return name_isakmp_nptype[i].str;
-	return num2str(k);
-}
-
-#ifdef ENABLE_HYBRID
-/* isakmp_cfg.h / isakmp_unity.h / isakmp_xauth.h */
-static struct ksmap name_isakmp_cfg_type[] = {
-{ INTERNAL_IP4_ADDRESS,		"INTERNAL_IP4_ADDRESS",		NULL },
-{ INTERNAL_IP4_NETMASK,		"INTERNAL_IP4_NETMASK",		NULL },
-{ INTERNAL_IP4_DNS,		"INTERNAL_IP4_DNS",		NULL },
-{ INTERNAL_IP4_NBNS,		"INTERNAL_IP4_NBNS",		NULL },
-{ INTERNAL_ADDRESS_EXPIRY,	"INTERNAL_ADDRESS_EXPIRY",	NULL },
-{ INTERNAL_IP4_DHCP,		"INTERNAL_IP4_DHCP",		NULL },
-{ APPLICATION_VERSION,		"APPLICATION_VERSION",		NULL },
-{ INTERNAL_IP6_ADDRESS,		"INTERNAL_IP6_ADDRESS",		NULL },
-{ INTERNAL_IP6_NETMASK,		"INTERNAL_IP6_NETMASK",		NULL },
-{ INTERNAL_IP6_DNS,		"INTERNAL_IP6_DNS",		NULL },
-{ INTERNAL_IP6_NBNS,		"INTERNAL_IP6_NBNS",		NULL },
-{ INTERNAL_IP6_DHCP,		"INTERNAL_IP6_DHCP",		NULL },
-{ INTERNAL_IP4_SUBNET,		"INTERNAL_IP4_SUBNET",		NULL },
-{ SUPPORTED_ATTRIBUTES,		"SUPPORTED_ATTRIBUTES",		NULL },
-{ INTERNAL_IP6_SUBNET,		"INTERNAL_IP6_SUBNET",		NULL },
-{ XAUTH_TYPE,			"XAUTH_TYPE",			NULL },
-{ XAUTH_USER_NAME,		"XAUTH_USER_NAME",		NULL },
-{ XAUTH_USER_PASSWORD,		"XAUTH_USER_PASSWORD",		NULL },
-{ XAUTH_PASSCODE,		"XAUTH_PASSCODE",		NULL },
-{ XAUTH_MESSAGE,		"XAUTH_MESSAGE",		NULL },
-{ XAUTH_CHALLENGE,		"XAUTH_CHALLENGE",		NULL },
-{ XAUTH_DOMAIN,			"XAUTH_DOMAIN",			NULL },
-{ XAUTH_STATUS,			"XAUTH_STATUS",			NULL },
-{ XAUTH_NEXT_PIN,		"XAUTH_NEXT_PIN",		NULL },
-{ XAUTH_ANSWER,			"XAUTH_ANSWER",			NULL },
-{ UNITY_BANNER,			"UNITY_BANNER",			NULL },
-{ UNITY_SAVE_PASSWD,		"UNITY_SAVE_PASSWD",		NULL },
-{ UNITY_DEF_DOMAIN,		"UNITY_DEF_DOMAIN",		NULL },
-{ UNITY_SPLITDNS_NAME,		"UNITY_SPLITDNS_NAME",		NULL },
-{ UNITY_SPLIT_INCLUDE,		"UNITY_SPLIT_INCLUDE",		NULL },
-{ UNITY_NATT_PORT,		"UNITY_NATT_PORT",		NULL },
-{ UNITY_LOCAL_LAN,		"UNITY_LOCAL_LAN",		NULL },
-{ UNITY_PFS,			"UNITY_PFS",			NULL },
-{ UNITY_FW_TYPE,		"UNITY_FW_TYPE",		NULL },
-{ UNITY_BACKUP_SERVERS,		"UNITY_BACKUP_SERVERS",		NULL },
-{ UNITY_DDNS_HOSTNAME,		"UNITY_DDNS_HOSTNAME",		NULL },
-};
-
-char *
-s_isakmp_cfg_type(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_isakmp_cfg_type); i++)
-		if (name_isakmp_cfg_type[i].key == k)
-			return name_isakmp_cfg_type[i].str;
-	return num2str(k);
-}
-
-/* isakmp_cfg.h / isakmp_unity.h / isakmp_xauth.h */
-static struct ksmap name_isakmp_cfg_ptype[] = {
-{ ISAKMP_CFG_ACK,		"mode config ACK",		NULL },
-{ ISAKMP_CFG_SET,		"mode config SET",		NULL },
-{ ISAKMP_CFG_REQUEST,		"mode config REQUEST",		NULL },
-{ ISAKMP_CFG_REPLY,		"mode config REPLY",		NULL },
-};
-
-char *
-s_isakmp_cfg_ptype(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_isakmp_cfg_ptype); i++)
-		if (name_isakmp_cfg_ptype[i].key == k)
-			return name_isakmp_cfg_ptype[i].str;
-	return num2str(k);
-}
-
-#endif
-
-/* ipsec_doi.h */
-static struct ksmap name_ipsecdoi_proto[] = {
-{ IPSECDOI_PROTO_ISAKMP,	"ISAKMP",	s_ipsecdoi_trns_isakmp },
-{ IPSECDOI_PROTO_IPSEC_AH,	"AH",		s_ipsecdoi_trns_ah },
-{ IPSECDOI_PROTO_IPSEC_ESP,	"ESP",		s_ipsecdoi_trns_esp },
-{ IPSECDOI_PROTO_IPCOMP,	"IPCOMP",	s_ipsecdoi_trns_ipcomp },
-};
-
-char *
-s_ipsecdoi_proto(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_ipsecdoi_proto); i++)
-		if (name_ipsecdoi_proto[i].key == k)
-			return name_ipsecdoi_proto[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_ipsecdoi_trns_isakmp[] = {
-{ IPSECDOI_KEY_IKE,	"IKE", NULL },
-};
-
-char *
-s_ipsecdoi_trns_isakmp(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_ipsecdoi_trns_isakmp); i++)
-		if (name_ipsecdoi_trns_isakmp[i].key == k)
-			return name_ipsecdoi_trns_isakmp[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_ipsecdoi_trns_ah[] = {
-{ IPSECDOI_AH_MD5,	"MD5", NULL },
-{ IPSECDOI_AH_SHA,	"SHA", NULL },
-{ IPSECDOI_AH_DES,	"DES", NULL },
-{ IPSECDOI_AH_SHA256,	"SHA256", NULL },
-{ IPSECDOI_AH_SHA384,	"SHA384", NULL },
-{ IPSECDOI_AH_SHA512,	"SHA512", NULL },
-};
-
-char *
-s_ipsecdoi_trns_ah(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_ipsecdoi_trns_ah); i++)
-		if (name_ipsecdoi_trns_ah[i].key == k)
-			return name_ipsecdoi_trns_ah[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_ipsecdoi_trns_esp[] = {
-{ IPSECDOI_ESP_DES_IV64,	"DES_IV64",	NULL },
-{ IPSECDOI_ESP_DES,		"DES",		NULL },
-{ IPSECDOI_ESP_3DES,		"3DES",		NULL },
-{ IPSECDOI_ESP_RC5,		"RC5",		NULL },
-{ IPSECDOI_ESP_IDEA,		"IDEA",		NULL },
-{ IPSECDOI_ESP_CAST,		"CAST",		NULL },
-{ IPSECDOI_ESP_BLOWFISH,	"BLOWFISH",	NULL },
-{ IPSECDOI_ESP_3IDEA,		"3IDEA",	NULL },
-{ IPSECDOI_ESP_DES_IV32,	"DES_IV32",	NULL },
-{ IPSECDOI_ESP_RC4,		"RC4",		NULL },
-{ IPSECDOI_ESP_NULL,		"NULL",		NULL },
-{ IPSECDOI_ESP_AES,		"AES",		NULL },
-{ IPSECDOI_ESP_TWOFISH,		"TWOFISH",	NULL },
-{ IPSECDOI_ESP_CAMELLIA,	"CAMELLIA",	NULL },
-};
-
-char *
-s_ipsecdoi_trns_esp(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_ipsecdoi_trns_esp); i++)
-		if (name_ipsecdoi_trns_esp[i].key == k)
-			return name_ipsecdoi_trns_esp[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_ipsecdoi_trns_ipcomp[] = {
-{ IPSECDOI_IPCOMP_OUI,		"OUI",		NULL},
-{ IPSECDOI_IPCOMP_DEFLATE,	"DEFLATE",	NULL},
-{ IPSECDOI_IPCOMP_LZS,		"LZS",		NULL},
-};
-
-char *
-s_ipsecdoi_trns_ipcomp(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_ipsecdoi_trns_ipcomp); i++)
-		if (name_ipsecdoi_trns_ipcomp[i].key == k)
-			return name_ipsecdoi_trns_ipcomp[i].str;
-	return num2str(k);
-}
-
-char *
-s_ipsecdoi_trns(proto, trns)
-	int proto, trns;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_ipsecdoi_proto); i++)
-		if (name_ipsecdoi_proto[i].key == proto
-		 && name_ipsecdoi_proto[i].f)
-			return (name_ipsecdoi_proto[i].f)(trns);
-	return num2str(trns);
-}
-
-static struct ksmap name_attr_ipsec[] = {
-{ IPSECDOI_ATTR_SA_LD_TYPE,	"SA Life Type",		s_ipsecdoi_ltype },
-{ IPSECDOI_ATTR_SA_LD,		"SA Life Duration",	NULL },
-{ IPSECDOI_ATTR_GRP_DESC,	"Group Description",	NULL },
-{ IPSECDOI_ATTR_ENC_MODE,	"Encryption Mode",	s_ipsecdoi_encmode },
-{ IPSECDOI_ATTR_AUTH,		"Authentication Algorithm", s_ipsecdoi_auth },
-{ IPSECDOI_ATTR_KEY_LENGTH,	"Key Length",		NULL },
-{ IPSECDOI_ATTR_KEY_ROUNDS,	"Key Rounds",		NULL },
-{ IPSECDOI_ATTR_COMP_DICT_SIZE,	"Compression Dictionary Size",	NULL },
-{ IPSECDOI_ATTR_COMP_PRIVALG,	"Compression Private Algorithm", NULL },
-};
-
-char *
-s_ipsecdoi_attr(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_ipsec); i++)
-		if (name_attr_ipsec[i].key == k)
-			return name_attr_ipsec[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_attr_ipsec_ltype[] = {
-{ IPSECDOI_ATTR_SA_LD_TYPE_SEC,	"seconds",	NULL },
-{ IPSECDOI_ATTR_SA_LD_TYPE_KB,	"kilobytes",	NULL },
-};
-
-char *
-s_ipsecdoi_ltype(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_ipsec_ltype); i++)
-		if (name_attr_ipsec_ltype[i].key == k)
-			return name_attr_ipsec_ltype[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_attr_ipsec_encmode[] = {
-{ IPSECDOI_ATTR_ENC_MODE_ANY,		"Any",		NULL },
-{ IPSECDOI_ATTR_ENC_MODE_TUNNEL,	"Tunnel",	NULL },
-{ IPSECDOI_ATTR_ENC_MODE_TRNS,		"Transport",	NULL },
-{ IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_RFC,	"UDP-Tunnel",	NULL },
-{ IPSECDOI_ATTR_ENC_MODE_UDPTRNS_RFC,	"UDP-Transport",	NULL },
-{ IPSECDOI_ATTR_ENC_MODE_UDPTUNNEL_DRAFT,	"UDP-Tunnel",	NULL },
-{ IPSECDOI_ATTR_ENC_MODE_UDPTRNS_DRAFT,	"UDP-Transport",	NULL },
-};
-
-char *
-s_ipsecdoi_encmode(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_ipsec_encmode); i++)
-		if (name_attr_ipsec_encmode[i].key == k)
-			return name_attr_ipsec_encmode[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_attr_ipsec_auth[] = {
-{ IPSECDOI_ATTR_AUTH_HMAC_MD5,		"hmac-md5",	NULL },
-{ IPSECDOI_ATTR_AUTH_HMAC_SHA1,		"hmac-sha",	NULL },
-{ IPSECDOI_ATTR_AUTH_HMAC_SHA2_256,	"hmac-sha256",	NULL },
-{ IPSECDOI_ATTR_AUTH_HMAC_SHA2_384,	"hmac-sha384",	NULL },
-{ IPSECDOI_ATTR_AUTH_HMAC_SHA2_512,	"hmac-sha512",	NULL },
-{ IPSECDOI_ATTR_AUTH_DES_MAC,		"des-mac",	NULL },
-{ IPSECDOI_ATTR_AUTH_KPDK,		"kpdk",		NULL },
-};
-
-char *
-s_ipsecdoi_auth(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_ipsec_auth); i++)
-		if (name_attr_ipsec_auth[i].key == k)
-			return name_attr_ipsec_auth[i].str;
-	return num2str(k);
-}
-
-char *
-s_ipsecdoi_attr_v(type, val)
-	int type, val;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_ipsec); i++)
-		if (name_attr_ipsec[i].key == type
-		 && name_attr_ipsec[i].f)
-			return (name_attr_ipsec[i].f)(val);
-	return num2str(val);
-}
-
-static struct ksmap name_ipsecdoi_ident[] = {
-{ IPSECDOI_ID_IPV4_ADDR,	"IPv4_address",	NULL },
-{ IPSECDOI_ID_FQDN,		"FQDN",		NULL },
-{ IPSECDOI_ID_USER_FQDN,	"User_FQDN",	NULL },
-{ IPSECDOI_ID_IPV4_ADDR_SUBNET,	"IPv4_subnet",	NULL },
-{ IPSECDOI_ID_IPV6_ADDR,	"IPv6_address",	NULL },
-{ IPSECDOI_ID_IPV6_ADDR_SUBNET,	"IPv6_subnet",	NULL },
-{ IPSECDOI_ID_IPV4_ADDR_RANGE,	"IPv4_address_range",	NULL },
-{ IPSECDOI_ID_IPV6_ADDR_RANGE,	"IPv6_address_range",	NULL },
-{ IPSECDOI_ID_DER_ASN1_DN,	"DER_ASN1_DN",	NULL },
-{ IPSECDOI_ID_DER_ASN1_GN,	"DER_ASN1_GN",	NULL },
-{ IPSECDOI_ID_KEY_ID,		"KEY_ID",	NULL },
-};
-
-char *
-s_ipsecdoi_ident(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_ipsecdoi_ident); i++)
-		if (name_ipsecdoi_ident[i].key == k)
-			return name_ipsecdoi_ident[i].str;
-	return num2str(k);
-}
-
-/* oakley.h */
-static struct ksmap name_oakley_attr[] = {
-{ OAKLEY_ATTR_ENC_ALG,		"Encryption Algorithm",	s_attr_isakmp_enc },
-{ OAKLEY_ATTR_HASH_ALG,		"Hash Algorithm",	s_attr_isakmp_hash },
-{ OAKLEY_ATTR_AUTH_METHOD,	"Authentication Method", s_oakley_attr_method },
-{ OAKLEY_ATTR_GRP_DESC,		"Group Description",	s_attr_isakmp_desc },
-{ OAKLEY_ATTR_GRP_TYPE,		"Group Type",		s_attr_isakmp_group },
-{ OAKLEY_ATTR_GRP_PI,		"Group Prime/Irreducible Polynomial",	NULL },
-{ OAKLEY_ATTR_GRP_GEN_ONE,	"Group Generator One",	NULL },
-{ OAKLEY_ATTR_GRP_GEN_TWO,	"Group Generator Two",	NULL },
-{ OAKLEY_ATTR_GRP_CURVE_A,	"Group Curve A",	NULL },
-{ OAKLEY_ATTR_GRP_CURVE_B,	"Group Curve B",	NULL },
-{ OAKLEY_ATTR_SA_LD_TYPE,	"Life Type",		s_attr_isakmp_ltype },
-{ OAKLEY_ATTR_SA_LD,		"Life Duration",	NULL },
-{ OAKLEY_ATTR_PRF,		"PRF",			NULL },
-{ OAKLEY_ATTR_KEY_LEN,		"Key Length",		NULL },
-{ OAKLEY_ATTR_FIELD_SIZE,	"Field Size",		NULL },
-{ OAKLEY_ATTR_GRP_ORDER,	"Group Order",		NULL },
-{ OAKLEY_ATTR_BLOCK_SIZE,	"Block Size",		NULL },
-{ OAKLEY_ATTR_GSS_ID,		"GSS-API endpoint name",NULL },
-};
-
-char *
-s_oakley_attr(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_oakley_attr); i++)
-		if (name_oakley_attr[i].key == k)
-			return name_oakley_attr[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_attr_isakmp_enc[] = {
-{ OAKLEY_ATTR_ENC_ALG_DES,	"DES-CBC",		NULL },
-{ OAKLEY_ATTR_ENC_ALG_IDEA,	"IDEA-CBC",		NULL },
-{ OAKLEY_ATTR_ENC_ALG_BLOWFISH,	"Blowfish-CBC",		NULL },
-{ OAKLEY_ATTR_ENC_ALG_RC5,	"RC5-R16-B64-CBC",	NULL },
-{ OAKLEY_ATTR_ENC_ALG_3DES,	"3DES-CBC",		NULL },
-{ OAKLEY_ATTR_ENC_ALG_CAST,	"CAST-CBC",		NULL },
-{ OAKLEY_ATTR_ENC_ALG_AES,	"AES-CBC",		NULL },
-};
-
-char *
-s_attr_isakmp_enc(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_isakmp_enc); i++)
-		if (name_attr_isakmp_enc[i].key == k)
-			return name_attr_isakmp_enc[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_attr_isakmp_hash[] = {
-{ OAKLEY_ATTR_HASH_ALG_MD5,	"MD5",		NULL },
-{ OAKLEY_ATTR_HASH_ALG_SHA,	"SHA",		NULL },
-{ OAKLEY_ATTR_HASH_ALG_TIGER,	"Tiger",	NULL },
-{ OAKLEY_ATTR_HASH_ALG_SHA2_256,"SHA256",	NULL },
-{ OAKLEY_ATTR_HASH_ALG_SHA2_384,"SHA384",	NULL },
-{ OAKLEY_ATTR_HASH_ALG_SHA2_512,"SHA512",	NULL },
-};
-
-char *
-s_attr_isakmp_hash(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_isakmp_hash); i++)
-		if (name_attr_isakmp_hash[i].key == k)
-			return name_attr_isakmp_hash[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_attr_isakmp_method[] = {
-{ OAKLEY_ATTR_AUTH_METHOD_PSKEY,		"pre-shared key",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_DSSSIG,		"DSS signatures",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_RSASIG,		"RSA signatures",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_RSAENC,		"Encryption with RSA",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_RSAREV,		"Revised encryption with RSA",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_EGENC,		"Encryption with El-Gamal",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_EGREV,		"Revised encryption with El-Gamal",	NULL },
-#ifdef HAVE_GSSAPI
-{ OAKLEY_ATTR_AUTH_METHOD_GSSAPI_KRB,		"GSS-API on Kerberos 5", NULL },
-#endif
-#ifdef ENABLE_HYBRID
-{ OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_R,		"Hybrid DSS server",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_R,		"Hybrid RSA server",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_HYBRID_DSS_I,		"Hybrid DSS client",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_HYBRID_RSA_I,		"Hybrid RSA client",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_I,	"XAuth pskey client",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_XAUTH_PSKEY_R,	"XAuth pskey server",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_I,	"XAuth RSASIG client",	NULL },
-{ OAKLEY_ATTR_AUTH_METHOD_XAUTH_RSASIG_R,	"XAuth RSASIG server",	NULL },
-#endif
-};
-
-char *
-s_oakley_attr_method(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_isakmp_method); i++)
-		if (name_attr_isakmp_method[i].key == k)
-			return name_attr_isakmp_method[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_attr_isakmp_desc[] = {
-{ OAKLEY_ATTR_GRP_DESC_MODP768,		"768-bit MODP group",	NULL },
-{ OAKLEY_ATTR_GRP_DESC_MODP1024,	"1024-bit MODP group",	NULL },
-{ OAKLEY_ATTR_GRP_DESC_EC2N155,		"EC2N group on GP[2^155]",	NULL },
-{ OAKLEY_ATTR_GRP_DESC_EC2N185,		"EC2N group on GP[2^185]",	NULL },
-{ OAKLEY_ATTR_GRP_DESC_MODP1536,	"1536-bit MODP group",	NULL },
-{ OAKLEY_ATTR_GRP_DESC_MODP2048,	"2048-bit MODP group",	NULL },
-{ OAKLEY_ATTR_GRP_DESC_MODP3072,	"3072-bit MODP group",	NULL },
-{ OAKLEY_ATTR_GRP_DESC_MODP4096,	"4096-bit MODP group",	NULL },
-{ OAKLEY_ATTR_GRP_DESC_MODP6144,	"6144-bit MODP group",	NULL },
-{ OAKLEY_ATTR_GRP_DESC_MODP8192,	"8192-bit MODP group",	NULL },
-};
-
-char *
-s_attr_isakmp_desc(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_isakmp_desc); i++)
-		if (name_attr_isakmp_desc[i].key == k)
-			return name_attr_isakmp_desc[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_attr_isakmp_group[] = {
-{ OAKLEY_ATTR_GRP_TYPE_MODP,	"MODP",	NULL },
-{ OAKLEY_ATTR_GRP_TYPE_ECP,	"ECP",	NULL },
-{ OAKLEY_ATTR_GRP_TYPE_EC2N,	"EC2N",	NULL },
-};
-
-char *
-s_attr_isakmp_group(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_isakmp_group); i++)
-		if (name_attr_isakmp_group[i].key == k)
-			return name_attr_isakmp_group[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_attr_isakmp_ltype[] = {
-{ OAKLEY_ATTR_SA_LD_TYPE_SEC,	"seconds",	NULL },
-{ OAKLEY_ATTR_SA_LD_TYPE_KB,	"kilobytes",	NULL },
-};
-
-char *
-s_attr_isakmp_ltype(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_attr_isakmp_ltype); i++)
-		if (name_attr_isakmp_ltype[i].key == k)
-			return name_attr_isakmp_ltype[i].str;
-	return num2str(k);
-}
-
-char *
-s_oakley_attr_v(type, val)
-	int type, val;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_oakley_attr); i++)
-		if (name_oakley_attr[i].key == type
-		 && name_oakley_attr[i].f)
-			return (name_oakley_attr[i].f)(val);
-	return num2str(val);
-}
-
-/* netinet6/ipsec.h */
-static struct ksmap name_ipsec_level[] = {
-{ IPSEC_LEVEL_USE,	"use",		NULL },
-{ IPSEC_LEVEL_REQUIRE,	"require",	NULL },
-{ IPSEC_LEVEL_UNIQUE,	"unique",	NULL },
-};
-
-char *
-s_ipsec_level(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_ipsec_level); i++)
-		if (name_ipsec_level[i].key == k)
-			return name_ipsec_level[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_algclass[] = {
-{ algclass_ipsec_enc,	"ipsec enc",	s_ipsecdoi_trns_esp },
-{ algclass_ipsec_auth,	"ipsec auth",	s_ipsecdoi_trns_ah },
-{ algclass_ipsec_comp,	"ipsec comp",	s_ipsecdoi_trns_ipcomp },
-{ algclass_isakmp_enc,	"isakmp enc",	s_attr_isakmp_enc },
-{ algclass_isakmp_hash,	"isakmp hash",	s_attr_isakmp_hash },
-{ algclass_isakmp_dh,	"isakmp dh",	s_attr_isakmp_desc },
-{ algclass_isakmp_ameth, "isakmp auth method",	s_oakley_attr_method },
-};
-
-char *
-s_algclass(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_algclass); i++)
-		if (name_algclass[i].key == k)
-			return name_algclass[i].str;
-	return num2str(k);
-}
-
-char *
-s_algtype(class, n)
-	int class, n;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_algclass); i++)
-		if (name_algclass[i].key == class
-		 && name_algclass[i].f)
-			return (name_algclass[i].f)(n);
-	return num2str(n);
-}
-
-/* pfkey.h */
-static struct ksmap name_pfkey_type[] = {
-{ SADB_GETSPI,		"GETSPI",	NULL },
-{ SADB_UPDATE,		"UPDATE",	NULL },
-{ SADB_ADD,		"ADD",		NULL },
-{ SADB_DELETE,		"DELETE",	NULL },
-{ SADB_GET,		"GET",		NULL },
-{ SADB_ACQUIRE,		"ACQUIRE",	NULL },
-{ SADB_REGISTER,	"REGISTER",	NULL },
-{ SADB_EXPIRE,		"EXPIRE",	NULL },
-{ SADB_FLUSH,		"FLUSH",	NULL },
-{ SADB_DUMP,		"DUMP",		NULL },
-{ SADB_X_PROMISC,	"X_PROMISC",	NULL },
-{ SADB_X_PCHANGE,	"X_PCHANGE",	NULL },
-{ SADB_X_SPDUPDATE,	"X_SPDUPDATE",	NULL },
-{ SADB_X_SPDADD,	"X_SPDADD",	NULL },
-{ SADB_X_SPDDELETE,	"X_SPDDELETE",	NULL },
-{ SADB_X_SPDGET,	"X_SPDGET",	NULL },
-{ SADB_X_SPDACQUIRE,	"X_SPDACQUIRE",	NULL },
-{ SADB_X_SPDDUMP,	"X_SPDDUMP",	NULL },
-{ SADB_X_SPDFLUSH,	"X_SPDFLUSH",	NULL },
-{ SADB_X_SPDSETIDX,	"X_SPDSETIDX",	NULL },
-{ SADB_X_SPDEXPIRE,	"X_SPDEXPIRE",	NULL },
-{ SADB_X_SPDDELETE2,	"X_SPDDELETE2",	NULL },
-#ifdef SADB_X_NAT_T_NEW_MAPPING
-{ SADB_X_NAT_T_NEW_MAPPING, "X_NAT_T_NEW_MAPPING", NULL },
-#endif
-#ifdef SADB_X_MIGRATE
-{ SADB_X_MIGRATE,	"X_MIGRATE",	NULL },
-#endif
-};
-
-char *
-s_pfkey_type(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_pfkey_type); i++)
-		if (name_pfkey_type[i].key == k)
-			return name_pfkey_type[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_pfkey_satype[] = {
-{ SADB_SATYPE_UNSPEC,	"UNSPEC",	NULL },
-{ SADB_SATYPE_AH,	"AH",		NULL },
-{ SADB_SATYPE_ESP,	"ESP",		NULL },
-{ SADB_SATYPE_RSVP,	"RSVP",		NULL },
-{ SADB_SATYPE_OSPFV2,	"OSPFV2",	NULL },
-{ SADB_SATYPE_RIPV2,	"RIPV2",	NULL },
-{ SADB_SATYPE_MIP,	"MIP",		NULL },
-{ SADB_X_SATYPE_IPCOMP,	"IPCOMP",	NULL },
-};
-
-char *
-s_pfkey_satype(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_pfkey_satype); i++)
-		if (name_pfkey_satype[i].key == k)
-			return name_pfkey_satype[i].str;
-	return num2str(k);
-}
-
-static struct ksmap name_direction[] = {
-{ IPSEC_DIR_INBOUND,	"in",	NULL },
-{ IPSEC_DIR_OUTBOUND,	"out",	NULL },
-#ifdef HAVE_POLICY_FWD
-{ IPSEC_DIR_FWD,	"fwd",	NULL },
-#endif
-};
-
-char *
-s_direction(k)
-	int k;
-{
-	int i;
-	for (i = 0; i < ARRAYLEN(name_direction); i++)
-		if (name_direction[i].key == k)
-			return name_direction[i].str;
-	return num2str(k);
-}
-
-char *
-s_proto(k)
-	int k;
-{
-	switch (k) {
-	case IPPROTO_ICMP:
-		return "icmp";
-	case IPPROTO_TCP:
-		return "tcp";
-	case IPPROTO_UDP:
-		return "udp";
-	case IPPROTO_ICMPV6:
-		return "icmpv6";
-	case IPSEC_ULPROTO_ANY:
-		return "any";
-	}
-
-	return num2str(k);
-}
-
-char *
-s_doi(int k)
-{
-  switch (k) {
-    case IPSEC_DOI:
-      return "ipsec_doi";
-    default:
-      return num2str(k);
-  }
-}
-
-char *
-s_etype (int k)
-{
-  switch (k) {
-    case ISAKMP_ETYPE_NONE:
-      return "_none";
-    case ISAKMP_ETYPE_BASE:
-      return "base";
-    case ISAKMP_ETYPE_IDENT:
-      return "main";
-    case ISAKMP_ETYPE_AUTH:
-      return "_auth";
-    case ISAKMP_ETYPE_AGG:
-      return "aggressive";
-    case ISAKMP_ETYPE_INFO:
-      return "_info";
-    case ISAKMP_ETYPE_QUICK:
-      return "_quick";
-    case ISAKMP_ETYPE_NEWGRP:
-      return "_newgrp";
-    case ISAKMP_ETYPE_ACKINFO:
-      return "_ackinfo";
-    default:
-      return num2str(k);
-  }
-}
-
-char *
-s_idtype (int k)
-{
-  switch (k) {
-    case IDTYPE_FQDN:
-      return "fqdn";
-    case IDTYPE_USERFQDN:
-      return "user_fqdn";
-    case IDTYPE_KEYID:
-      return "keyid";
-    case IDTYPE_ADDRESS:
-      return "address";
-    case IDTYPE_ASN1DN:
-      return "asn1dn";
-    default:
-      return num2str(k);
-  }
-}
-
-char *
-s_switch (int k)
-{
-  switch (k) {
-    case FALSE:
-      return "off";
-    case TRUE:
-      return "on";
-    default:
-      return num2str(k);
-  }
-}
diff --git a/src/racoon/strnames.h b/src/racoon/strnames.h
deleted file mode 100644
index 02ebbb5..0000000
--- a/src/racoon/strnames.h
+++ /dev/null
@@ -1,80 +0,0 @@
-/*	$NetBSD: strnames.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: strnames.h,v 1.7 2005/04/18 10:04:26 manubsd Exp */
-
-/*
- * 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.
- */
-
-#ifndef _STRNAMES_H
-#define _STRNAMES_H
-
-extern char *num2str __P((int n));
-
-extern char *s_isakmp_state __P((int, int, int));
-extern char *s_isakmp_certtype __P((int));
-extern char *s_isakmp_etype __P((int));
-extern char *s_isakmp_notify_msg __P((int));
-extern char *s_isakmp_nptype __P((int));
-extern char *s_ipsecdoi_proto __P((int));
-extern char *s_ipsecdoi_trns_isakmp __P((int));
-extern char *s_ipsecdoi_trns_ah __P((int));
-extern char *s_ipsecdoi_trns_esp __P((int));
-extern char *s_ipsecdoi_trns_ipcomp __P((int));
-extern char *s_ipsecdoi_trns __P((int, int));
-extern char *s_ipsecdoi_attr __P((int));
-extern char *s_ipsecdoi_ltype __P((int));
-extern char *s_ipsecdoi_encmode __P((int));
-extern char *s_ipsecdoi_auth __P((int));
-extern char *s_ipsecdoi_attr_v __P((int, int));
-extern char *s_ipsecdoi_ident __P((int));
-extern char *s_oakley_attr __P((int));
-extern char *s_attr_isakmp_enc __P((int));
-extern char *s_attr_isakmp_hash __P((int));
-extern char *s_oakley_attr_method __P((int));
-extern char *s_attr_isakmp_desc __P((int));
-extern char *s_attr_isakmp_group __P((int));
-extern char *s_attr_isakmp_ltype __P((int));
-extern char *s_oakley_attr_v __P((int, int));
-extern char *s_ipsec_level __P((int));
-extern char *s_algclass __P((int));
-extern char *s_algtype __P((int, int));
-extern char *s_pfkey_type __P((int));
-extern char *s_pfkey_satype __P((int));
-extern char *s_direction __P((int));
-extern char *s_proto __P((int));
-extern char *s_doi __P((int));
-extern char *s_etype __P((int));
-extern char *s_idtype __P((int));
-extern char *s_switch __P((int));
-#ifdef ENABLE_HYBRID
-extern char *s_isakmp_cfg_type __P((int));
-extern char *s_isakmp_cfg_ptype __P((int));
-#endif
-
-#endif /* _STRNAMES_H */
diff --git a/src/racoon/throttle.c b/src/racoon/throttle.c
deleted file mode 100644
index cd7de1f..0000000
--- a/src/racoon/throttle.c
+++ /dev/null
@@ -1,158 +0,0 @@
-/*	$NetBSD: throttle.c,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: throttle.c,v 1.5 2006/04/05 20:54:50 manubsd Exp */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus
- * 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.
- */
-
-#include "config.h"
-
-#include <stdio.h>
-#include <stdlib.h>
-#include <string.h>
-#if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h> 
-#else 
-# if HAVE_SYS_TIME_H
-#  include <sys/time.h>
-# else
-#  include <time.h>
-# endif 
-#endif
-#include <sys/param.h>
-#include <sys/queue.h>
-#include <sys/socket.h>
-
-#include <netinet/in.h>
-#include <resolv.h>
-
-#include "vmbuf.h"
-#include "misc.h"
-#include "plog.h"
-#include "throttle.h"
-#include "sockmisc.h"
-#include "libpfkey.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h"
-#include "gcmalloc.h"
-
-struct throttle_list throttle_list = TAILQ_HEAD_INITIALIZER(throttle_list);
-
-
-struct throttle_entry *
-throttle_add(addr)
-	struct sockaddr *addr;
-{
-	struct throttle_entry *te;
-	size_t len;
-
-	len = sizeof(*te) 
-	    - sizeof(struct sockaddr_storage) 
-	    + sysdep_sa_len(addr);
-
-	if ((te = racoon_malloc(len)) == NULL)
-		return NULL;
-
-	te->penalty = time(NULL) + isakmp_cfg_config.auth_throttle;
-	memcpy(&te->host, addr, sysdep_sa_len(addr));
-	TAILQ_INSERT_HEAD(&throttle_list, te, next);
-
-	return te;
-}
-
-int
-throttle_host(addr, authfail) 
-	struct sockaddr *addr;
-	int authfail;
-{
-	struct throttle_entry *te;
-	int found = 0;
-	time_t now;
-
-	if (isakmp_cfg_config.auth_throttle == 0)
-		return 0;
-
-	now = time(NULL);
-
-restart:
-	RACOON_TAILQ_FOREACH_REVERSE(te, &throttle_list, throttle_list, next) {
-	  /*
-	   * Remove outdated entries 
-	   */
-		if (te->penalty < now) {
-			TAILQ_REMOVE(&throttle_list, te, next);
-			racoon_free(te);
-			goto restart;
-		}
-			
-		if (cmpsaddrwop(addr, (struct sockaddr *)&te->host) == 0) {
-			found = 1;
-			break;
-		}
-	}
-
-	/* 
-	 * No match, if auth failed, allocate a new throttle entry
-	 * give no penalty even on error: this is the first time
-	 * and we are indulgent.
-	 */
-	if (!found) {
-		if (authfail) {
-			if ((te = throttle_add(addr)) == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL, 
-				    "Throttle insertion failed\n");
-				return (time(NULL) 
-				    + isakmp_cfg_config.auth_throttle);
-			}
-		}
-		return 0;
-	} else {
-		/*
-		 * We had a match and auth failed, increase penalty.
-		 */
-		if (authfail) {
-			time_t remaining;
-			time_t new;
-
-			remaining = te->penalty - now;
-			new = remaining + isakmp_cfg_config.auth_throttle;
-
-			if (new > THROTTLE_PENALTY_MAX)
-				new = THROTTLE_PENALTY_MAX;
-
-			te->penalty = now + new;
-		}
-	}
-	
-	return te->penalty;
-}
-
diff --git a/src/racoon/throttle.h b/src/racoon/throttle.h
deleted file mode 100644
index baa9af5..0000000
--- a/src/racoon/throttle.h
+++ /dev/null
@@ -1,51 +0,0 @@
-/*	$NetBSD: throttle.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: throttle.h,v 1.1 2004/11/30 00:46:09 manubsd Exp */
-
-/*
- * Copyright (C) 2004 Emmanuel Dreyfus
- * 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.
- */
-
-#ifndef _THROTTLE_H
-#define _THROTTLE_H
-
-struct throttle_entry {
-	int penalty;
-	TAILQ_ENTRY(throttle_entry) next;
-	struct sockaddr_storage host;
-};
-
-TAILQ_HEAD(throttle_list, throttle_entry);
-
-#define THROTTLE_PENALTY 1
-#define THROTTLE_PENALTY_MAX 10
-
-struct throttle_entry *throttle_add(struct sockaddr *);
-int throttle_host(struct sockaddr *, int);
-
-#endif /* _THROTTLE_H */
diff --git a/src/racoon/var.h b/src/racoon/var.h
deleted file mode 100644
index 8abb1c2..0000000
--- a/src/racoon/var.h
+++ /dev/null
@@ -1,107 +0,0 @@
-/*	$NetBSD: var.h,v 1.4.6.1 2007/06/06 15:36:38 vanhu Exp $	*/
-
-/* Id: var.h,v 1.6 2004/11/20 16:16:59 monas Exp */
-
-/*
- * 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.
- */
-
-#ifndef _VAR_H
-#define _VAR_H
-
-#if !defined(_VAR_H_)
-#define _VAR_H_
-
-#define MAX3(a, b, c) (a > b ? (a > c ? a : c) : (b > c ? b : c))
-
-#define ISSET(exp, bit) (((exp) & (bit)) == (bit))
-
-#define LALIGN(a) \
-    ((a) > 0 ? ((a) &~ (sizeof(long) - 1)) : sizeof(long))
-
-#define RNDUP(a) \
-    ((a) > 0 ? (1 + (((a) - 1) | (sizeof(long) - 1))) : sizeof(long))
-
-#define ARRAYLEN(a)	(sizeof(a)/sizeof(a[0]))
-
-#define BUFSIZE    5120
-
-#ifndef FALSE
-#define FALSE 0
-#endif
-#ifndef TRUE
-#define TRUE 1
-#endif
-
-#ifdef ENABLE_STATS
-#include <sys/time.h>
-#endif
-#include <sys/socket.h>
-
-/*
- * use of GETNAMEINFO(x, y, NULL) is not politically correct,
- * as sizeof(NULL) would be 4, not 0. Also, gcc-3.4.2+ bombs on it.
- * In such cases, use GETNAMEINFO_NULL(x, y)
- */
-#include <sys/socket.h>
-#include <netdb.h>
-
-/* var.h is used from non-racoon code (like eaytest), so we can't use niflags */
-#define NIFLAGS	(NI_NUMERICHOST | NI_NUMERICSERV)
-
-#define GETNAMEINFO(x, y, z) \
-do { \
-	if (getnameinfo((x), sysdep_sa_len(x), (y), sizeof(y), (z), sizeof(z), \
-			NIFLAGS) != 0) { \
-		if (y != NULL) \
-			strncpy((y), "(invalid)", sizeof(y)); \
-		if (z != NULL) \
-			strncpy((z), "(invalid)", sizeof(z)); \
-	} \
-} while (0);
-
-#define GETNAMEINFO_NULL(x, y) \
-do { \
-	if (getnameinfo((x), sysdep_sa_len(x), (y), sizeof(y), NULL, 0, \
-			NIFLAGS) != 0) { \
-		if (y != NULL) \
-			strncpy((y), "(invalid)", sizeof(y)); \
-	} \
-} while (0);
-
-#include <sys/queue.h>
-#ifndef LIST_FOREACH
-#define LIST_FOREACH(elm, head, field) \
-	for (elm = LIST_FIRST(head); elm; elm = LIST_NEXT(elm, field))
-#endif
-
-#include "gcmalloc.h"
-
-#endif /*!defined(_VAR_H_)*/
-
-#endif /* _VAR_H */
diff --git a/src/racoon/vendorid.c b/src/racoon/vendorid.c
deleted file mode 100644
index 96c87a3..0000000
--- a/src/racoon/vendorid.c
+++ /dev/null
@@ -1,317 +0,0 @@
-/*	$NetBSD: vendorid.c,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: vendorid.c,v 1.10 2006/02/22 16:10:21 vanhu Exp */
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-#include <errno.h>
-#include <ctype.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "plog.h"
-#include "debug.h"
-
-#include "localconf.h"
-#include "isakmp_var.h"
-#include "isakmp.h"
-#include "vendorid.h"
-#include "crypto_openssl.h"
-#include "handler.h"
-#include "remoteconf.h"
-#ifdef ENABLE_NATT
-#include "nattraversal.h"
-#endif
-#ifdef ENABLE_HYBRID
-#include "isakmp_xauth.h"
-#include "isakmp_cfg.h"
-#endif
-
-static struct vendor_id all_vendor_ids[] = {
-{ VENDORID_IPSEC_TOOLS, "IPSec-Tools" },
-{ VENDORID_GSSAPI_LONG, "A GSS-API Authentication Method for IKE" },
-{ VENDORID_GSSAPI     , "GSSAPI" },
-{ VENDORID_MS_NT5     , "MS NT5 ISAKMPOAKLEY" },
-{ VENDORID_NATT_00    , "draft-ietf-ipsec-nat-t-ike-00" },
-{ VENDORID_NATT_01    , "draft-ietf-ipsec-nat-t-ike-01" },
-{ VENDORID_NATT_02    , "draft-ietf-ipsec-nat-t-ike-02" },
-{ VENDORID_NATT_02_N  , "draft-ietf-ipsec-nat-t-ike-02\n" },
-{ VENDORID_NATT_03    , "draft-ietf-ipsec-nat-t-ike-03" },
-{ VENDORID_NATT_04    , "draft-ietf-ipsec-nat-t-ike-04" },
-{ VENDORID_NATT_05    , "draft-ietf-ipsec-nat-t-ike-05" },
-{ VENDORID_NATT_06    , "draft-ietf-ipsec-nat-t-ike-06" },
-{ VENDORID_NATT_07    , "draft-ietf-ipsec-nat-t-ike-07" },
-{ VENDORID_NATT_08    , "draft-ietf-ipsec-nat-t-ike-08" },
-{ VENDORID_NATT_RFC   , "RFC 3947" },
-{ VENDORID_XAUTH      , "draft-ietf-ipsra-isakmp-xauth-06.txt" },
-{ VENDORID_UNITY      , "CISCO-UNITY" },
-{ VENDORID_FRAG       , "FRAGMENTATION" },
-/* Just a readable string for DPD ... */
-{ VENDORID_DPD        , "DPD" },
-/* Other known Vendor IDs */
-{ VENDORID_KAME       , "KAME/racoon" },
-};
-
-#define NUMVENDORIDS	(sizeof(all_vendor_ids)/sizeof(all_vendor_ids[0]))
-
-#define DPD_MAJOR_VERSION	0x01
-#define DPD_MINOR_VERSION	0x00
-
-const char vendorid_dpd_hash[] = {
-	0xAF, 0xCA, 0xD7, 0x13,
-	0x68, 0xA1, 0xF1, 0xC9,
-	0x6B, 0x86, 0x96, 0xFC,
-	0x77, 0x57, DPD_MAJOR_VERSION, DPD_MINOR_VERSION
-};
-
-
-static vchar_t *vendorid_fixup(int, vchar_t *t);
-
-static struct vendor_id *
-lookup_vendor_id_by_id (int id)
-{
-	int i;
-
-	for (i = 0; i < NUMVENDORIDS; i++)
-		if (all_vendor_ids[i].id == id)
-			return &all_vendor_ids[i];
-
-	return NULL;
-}
-
-const char *
-vid_string_by_id (int id)
-{
-	struct vendor_id *current;
-
-	if (id == VENDORID_DPD)
-		return vendorid_dpd_hash;
-
-	current = lookup_vendor_id_by_id(id);
-
-	return current ? current->string : NULL;
-}
-
-static struct vendor_id *
-lookup_vendor_id_by_hash (const char *hash)
-{
-	int i;
-	unsigned char *h = (unsigned char *)hash;
-
-	for (i = 0; i < NUMVENDORIDS; i++)
-		if (strncmp(all_vendor_ids[i].hash->v, hash,
-			    all_vendor_ids[i].hash->l) == 0)
-			return &all_vendor_ids[i];
-
-	return NULL;
-}
-
-void
-compute_vendorids (void)
-{
-	int i;
-	vchar_t vid;
-
-	for (i = 0; i < NUMVENDORIDS; i++) {
-		/* VENDORID_DPD is not a MD5 sum... */
-		if(all_vendor_ids[i].id == VENDORID_DPD){
-			all_vendor_ids[i].hash = vmalloc(sizeof(vendorid_dpd_hash));
-			if (all_vendor_ids[i].hash == NULL) {
-				plog(LLV_ERROR, LOCATION, NULL,
-					"unable to get memory for VID hash\n");
-				exit(1); /* this really shouldn't happen */
-			}
-			memcpy(all_vendor_ids[i].hash->v, vendorid_dpd_hash,
-				   sizeof(vendorid_dpd_hash));
-			continue;
-		}
-
-		vid.v = (char *) all_vendor_ids[i].string;
-		vid.l = strlen(vid.v);
-
-		all_vendor_ids[i].hash = eay_md5_one(&vid);
-		if (all_vendor_ids[i].hash == NULL)
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "unable to hash vendor ID string\n");
-
-		/* Special cases */
-		all_vendor_ids[i].hash =
-			vendorid_fixup(all_vendor_ids[i].id,
-				       all_vendor_ids[i].hash);
-	}
-}
-
-/*
- * set hashed vendor id.
- * hash function is always MD5.
- */
-vchar_t *
-set_vendorid(int vendorid)
-{
-	struct vendor_id *current;
-	vchar_t vid, *new;
-
-	if (vendorid == VENDORID_UNKNOWN) {
-		/*
-		 * The default unknown ID gets translated to
-		 * KAME/racoon.
-		 */
-		vendorid = VENDORID_DEFAULT;
-	}
-
-	current = lookup_vendor_id_by_id(vendorid);
-	if (current == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL,
-		    "invalid vendor ID index: %d\n", vendorid);
-		return (NULL);
-	}
-
-	/* The rest of racoon expects a private copy 
-	 * of the VID that could be free'd after use.
-	 * That's why we don't return the original pointer. */
-	return vdup(current->hash);
-}
-
-/*
- * Check the vendor ID payload -- return the vendor ID index
- * if we find a recognized one, or UNKNOWN if we don't.
- *
- * gen ... points to Vendor ID payload.
- */
-int
-check_vendorid(struct isakmp_gen *gen)
-{
-	vchar_t vid, *vidhash;
-	int i, vidlen;
-	struct vendor_id *current;
-
-	if (gen == NULL)
-		return (VENDORID_UNKNOWN);
-
-	vidlen = ntohs(gen->len) - sizeof(*gen);
-
-	current = lookup_vendor_id_by_hash((char *)(gen + 1));
-	if (!current)
-		goto unknown;
-	
-	if (current->hash->l < vidlen)
-		plog(LLV_INFO, LOCATION, NULL,
-		     "received broken Microsoft ID: %s\n",
-		     current->string);
-	else
-		plog(LLV_INFO, LOCATION, NULL,
-		     "received Vendor ID: %s\n",
-		     current->string);
-
-	return current->id;
-
-unknown:
-	plog(LLV_DEBUG, LOCATION, NULL, "received unknown Vendor ID\n");
-	plogdump(LLV_DEBUG, (char *)(gen + 1), vidlen);
-	return (VENDORID_UNKNOWN);
-}
-
-int
-handle_vendorid(struct ph1handle *iph1, struct isakmp_gen *gen)
-{
-	int vid_numeric;
-
-	vid_numeric = check_vendorid(gen);
-	if (vid_numeric == VENDORID_UNKNOWN)
-		return vid_numeric;
-
-#ifdef ENABLE_NATT
-	if (natt_vendorid(vid_numeric))
-		natt_handle_vendorid(iph1, vid_numeric);
-#endif
-#ifdef ENABLE_HYBRID
-	switch (vid_numeric) {
-	case VENDORID_XAUTH:
-		iph1->mode_cfg->flags |= ISAKMP_CFG_VENDORID_XAUTH;
-		break;
-	case VENDORID_UNITY:
-		iph1->mode_cfg->flags |= ISAKMP_CFG_VENDORID_UNITY;
-		break;
-	default:
-		break;
-	}
-#endif
-#ifdef ENABLE_DPD
-	if (vid_numeric == VENDORID_DPD &&
-	    (iph1->rmconf == NULL || iph1->rmconf->dpd)) {
-		iph1->dpd_support = 1;
-		plog(LLV_DEBUG, LOCATION, NULL, "remote supports DPD\n");
-	}
-#endif
-
-	return vid_numeric;
-}
-
-static vchar_t * 
-vendorid_fixup(vendorid, vidhash)
-	int vendorid;		 
-	vchar_t *vidhash;
-{			   
-	switch(vendorid) {
-	case VENDORID_XAUTH: {	/* The vendor Id is truncated */
-		vchar_t *tmp;					    
-				  
-		if ((tmp = vmalloc(8)) == NULL) {
-			plog(LLV_ERROR, LOCATION, NULL,
-			    "unable to hash vendor ID string\n");
-			return NULL;				    
-		}			
-		  
-		memcpy(tmp->v, vidhash->v, 8);
-		vfree(vidhash);		  
-		vidhash = tmp;
-				   
-		break;
-	} 
-	case VENDORID_UNITY:	/* Two bytes tweak */
-		vidhash->v[14] = 0x01;		  
-		vidhash->v[15] = 0x00;
-		break;		   
-
-	default:     
-		break;
-	}		
-	
-	return vidhash;
-}			 
diff --git a/src/racoon/vendorid.h b/src/racoon/vendorid.h
deleted file mode 100644
index 7060c7e..0000000
--- a/src/racoon/vendorid.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*	$NetBSD: vendorid.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: vendorid.h,v 1.11 2006/02/17 14:09:10 vanhu Exp */
-
-/*
- * 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.
- */
-
-#ifndef _VENDORID_H
-#define _VENDORID_H
-
-/* The unknown vendor ID. */
-#define	VENDORID_UNKNOWN	-1
-
-
-/* Our default vendor ID. */
-#define	VENDORID_DEFAULT	VENDORID_IPSEC_TOOLS
-
-#define	VENDORID_IPSEC_TOOLS 0		
-
-/*
- * Refer to draft-ietf-ipsec-isakmp-gss-auth-06.txt.
- */
-#define	VENDORID_GSSAPI_LONG	1
-#define	VENDORID_GSSAPI		2
-#define	VENDORID_MS_NT5		3
-#define	VENDOR_SUPPORTS_GSSAPI(x)					\
-	((x) == VENDORID_GSSAPI_LONG ||					\
-	 (x) == VENDORID_GSSAPI ||					\
-	 (x) == VENDORID_MS_NT5)
-
-/* NAT-T support */
-#define VENDORID_NATT_00	4
-#define VENDORID_NATT_01	5
-#define VENDORID_NATT_02	6
-#define VENDORID_NATT_02_N	7
-#define VENDORID_NATT_03	8
-#define VENDORID_NATT_04	9
-#define VENDORID_NATT_05	10
-#define VENDORID_NATT_06	11
-#define VENDORID_NATT_07	12
-#define VENDORID_NATT_08	13
-#define VENDORID_NATT_RFC	14
-
-#define VENDORID_NATT_FIRST	VENDORID_NATT_00
-#define VENDORID_NATT_LAST	VENDORID_NATT_RFC
-
-
-#define MAX_NATT_VID_COUNT	(VENDORID_NATT_LAST - VENDORID_NATT_FIRST + 1 )
-
-/* Hybrid auth */
-#define VENDORID_XAUTH		15
-#define VENDORID_UNITY		16
-
-/* IKE fragmentation */
-#define VENDORID_FRAG		17
-
-/* Dead Peer Detection */
-#define VENDORID_DPD		18
-
-
-/* Other Vendors...
- * XXX: do some cleanup to have separate lists for "real" vendors (to complete)
- * and "features" VendorIDs
- */
-#define	VENDORID_KAME		19
-
-
-struct vendor_id {
-	int		id;
-	const char	*string;
-	vchar_t		*hash;
-};
-
-vchar_t *set_vendorid __P((int));
-int handle_vendorid __P((struct ph1handle *, struct isakmp_gen *));
-
-void compute_vendorids __P((void));
-const char *vid_string_by_id __P((int id));
-
-#endif /* _VENDORID_H */
diff --git a/src/racoon/vmbuf.c b/src/racoon/vmbuf.c
deleted file mode 100644
index 6c1aed1..0000000
--- a/src/racoon/vmbuf.c
+++ /dev/null
@@ -1,137 +0,0 @@
-/*	$NetBSD: vmbuf.c,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/*	$KAME: vmbuf.c,v 1.11 2001/11/26 16:54:29 sakane Exp $	*/
-
-/*
- * 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.
- */
-
-#include "config.h"
-
-#define NONEED_DRM
-
-#include <sys/types.h>
-#include <sys/param.h>
-
-#include <stdlib.h>
-#include <stdio.h>
-#include <string.h>
-
-#include "var.h"
-#include "misc.h"
-#include "vmbuf.h"
-#include "debug.h"
-#include "plog.h"
-#include "gcmalloc.h"
-
-vchar_t *
-vmalloc(size)
-	size_t size;
-{
-	vchar_t *var;
-
-	if ((var = (vchar_t *)racoon_malloc(sizeof(*var))) == NULL)
-		return NULL;
-
-	var->l = size;
-	if (size == 0) {
-		var->v = NULL;
-	} else {
-		var->v = (caddr_t)racoon_calloc(1, size);
-		if (var->v == NULL) {
-			(void)racoon_free(var);
-			return NULL;
-		}
-	}
-
-	return var;
-}
-
-vchar_t *
-vrealloc(ptr, size)
-	vchar_t *ptr;
-	size_t size;
-{
-	caddr_t v;
-	
-	if (ptr != NULL) {
-		if (ptr->l == 0) {
-			(void)vfree(ptr);
-			return vmalloc(size); /* zero-fill it? */
-		}
-
-		if ((v = (caddr_t)racoon_realloc(ptr->v, size)) == NULL) {
-			(void)vfree(ptr);
-			return NULL;
-		}
-
-		if ( size > ptr->l)
-			memset(v + ptr->l, 0, size - ptr->l);
-		ptr->v = v;
-		ptr->l = size;
-	} else {
-		if ((ptr = vmalloc(size)) == NULL)
-			return NULL;
-	}
-
-	return ptr;
-}
-
-void
-vfree(var)
-	vchar_t *var;
-{
-	if (var == NULL)
-		return;
-
-	if (var->v)
-		(void)racoon_free(var->v);
-
-	(void)racoon_free(var);
-
-	return;
-}
-
-vchar_t *
-vdup(src)
-	vchar_t *src;
-{
-	vchar_t *new;
-
-	if (src == NULL) {
-		plog(LLV_ERROR, LOCATION, NULL, "vdup(NULL) called\n");
-		return NULL;
-	}
-
-	if ((new = vmalloc(src->l)) == NULL)
-		return NULL;
-
-	memcpy(new->v, src->v, src->l);
-
-	return new;
-}
diff --git a/src/racoon/vmbuf.h b/src/racoon/vmbuf.h
deleted file mode 100644
index 3f2f4ea..0000000
--- a/src/racoon/vmbuf.h
+++ /dev/null
@@ -1,73 +0,0 @@
-/*	$NetBSD: vmbuf.h,v 1.4 2006/09/09 16:22:10 manu Exp $	*/
-
-/* Id: vmbuf.h,v 1.4 2005/10/30 10:28:44 vanhu Exp */
-
-/*
- * 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.
- */
-
-#ifndef _VMBUF_H
-#define _VMBUF_H
-
-/*
- *	bp      v
- *	v       v
- *	........................
- *	        <--------------> l
- *	<----------------------> bl
- */
-typedef struct _vchar_t_ {
-#if notyet
-	u_int32_t t;	/* type of the value */
-	vchar_t *n;	/* next vchar_t buffer */
-	size_t bl;	/* length of the buffer */
-	caddr_t bp;	/* pointer to the buffer */
-#endif
-	size_t l;	/* length of the value */
-	caddr_t v;	/* place holder to the pointer to the value */
-} vchar_t;
-
-#define VPTRINIT(p) \
-do { \
-	if (p) { \
-		vfree(p); \
-		(p) = NULL; \
-	} \
-} while(0);
-
-#if defined(__APPLE__) && defined(__MACH__)
-/* vfree is already defined in Apple's system libraries */
-#define vfree   vmbuf_free
-#endif
-
-extern vchar_t *vmalloc __P((size_t));
-extern vchar_t *vrealloc __P((vchar_t *, size_t));
-extern void vfree __P((vchar_t *));
-extern vchar_t *vdup __P((vchar_t *));
-
-#endif /* _VMBUF_H */