1 diff -Naur strongswan-2.6.4/Makefile.inc strongswan-2.6.4-charon/Makefile.inc
2 --- strongswan-2.6.4/Makefile.inc 2006-01-25 18:23:15.000000000 +0100
3 +++ strongswan-2.6.4-charon/Makefile.inc 2006-04-19 14:22:26.000000000 +0200
5 FINALLIBDIR=$(INC_USRLOCAL)/lib/ipsec
6 LIBDIR=$(DESTDIR)$(FINALLIBDIR)
8 +# sharedlibdir is where shared libraries go
9 +SHAREDLIBDIR=$(DESTDIR)$(INC_USRLOCAL)/lib
11 # where the appropriate manpage tree is located
12 # location within INC_USRLOCAL
14 # include PKCS11-based smartcard support
17 +# support IKEv2 via charon
20 # Default PKCS11 library
21 # Uncomment this line if using OpenSC <= 0.9.6
22 PKCS11_DEFAULT_LIB=\"/usr/lib/pkcs11/opensc-pkcs11.so\"
23 diff -Naur strongswan-2.6.4/programs/Makefile strongswan-2.6.4-charon/programs/Makefile
24 --- strongswan-2.6.4/programs/Makefile 2006-01-01 16:14:08.000000000 +0100
25 +++ strongswan-2.6.4-charon/programs/Makefile 2006-04-19 14:22:26.000000000 +0200
30 +ifeq ($(USE_IKEV2),true)
35 @echo "Please read doc/intro.html or INSTALL before running make"
37 diff -Naur strongswan-2.6.4/programs/ipsec/ipsec.in strongswan-2.6.4-charon/programs/ipsec/ipsec.in
38 --- strongswan-2.6.4/programs/ipsec/ipsec.in 2006-03-09 21:09:33.000000000 +0100
39 +++ strongswan-2.6.4-charon/programs/ipsec/ipsec.in 2006-04-19 14:22:26.000000000 +0200
43 $IPSEC_EXECDIR/whack --name "$1" --terminate
44 + if test -e $IPSEC_EXECDIR/stroke
46 + $IPSEC_EXECDIR/stroke down "$1"
50 listalgs|listpubkeys|listcerts|listcacerts|\
54 $IPSEC_EXECDIR/whack "$@" "--$op"
55 + if test -e $IPSEC_EXECDIR/stroke
57 + $IPSEC_EXECDIR/stroke "$op"
65 $IPSEC_EXECDIR/whack "--$op"
66 + if test -e $IPSEC_EXECDIR/stroke
68 + $IPSEC_EXECDIR/stroke status
71 $IPSEC_EXECDIR/whack --name "$1" "--$op"
72 + if test -e $IPSEC_EXECDIR/stroke
74 + $IPSEC_EXECDIR/stroke status
82 $IPSEC_EXECDIR/whack --name "$1" --initiate
83 + if test -e $IPSEC_EXECDIR/stroke
85 + $IPSEC_EXECDIR/stroke up "$1"
90 diff -Naur strongswan-2.6.4/programs/pluto/Makefile strongswan-2.6.4-charon/programs/pluto/Makefile
91 --- strongswan-2.6.4/programs/pluto/Makefile 2006-01-25 18:22:19.000000000 +0100
92 +++ strongswan-2.6.4-charon/programs/pluto/Makefile 2006-04-19 14:22:26.000000000 +0200
97 +# enable IKEv2 support
98 +ifeq ($(USE_IKEV2),true)
102 # This compile option activates the leak detective
103 ifeq ($(USE_LEAK_DETECTIVE),true)
104 DEFINES+= -DLEAK_DETECTIVE
105 diff -Naur strongswan-2.6.4/programs/pluto/demux.c strongswan-2.6.4-charon/programs/pluto/demux.c
106 --- strongswan-2.6.4/programs/pluto/demux.c 2005-02-18 22:08:59.000000000 +0100
107 +++ strongswan-2.6.4-charon/programs/pluto/demux.c 2006-04-19 14:22:26.000000000 +0200
108 @@ -1229,6 +1229,15 @@
109 if (md->packet_pbs.roof - md->packet_pbs.cur >= (ptrdiff_t)isakmp_hdr_desc.size)
111 struct isakmp_hdr *hdr = (struct isakmp_hdr *)md->packet_pbs.cur;
113 + if ((hdr->isa_version >> ISA_MAJ_SHIFT) == 0x2 &&
114 + (hdr->isa_version & ISA_MIN_MASK) == 0x0)
116 + /* IKEv2 is handled from charon, ignore */
121 if ((hdr->isa_version >> ISA_MAJ_SHIFT) != ISAKMP_MAJOR_VERSION)
123 SEND_NOTIFICATION(INVALID_MAJOR_VERSION);
124 diff -Naur strongswan-2.6.4/programs/starter/Makefile strongswan-2.6.4-charon/programs/starter/Makefile
125 --- strongswan-2.6.4/programs/starter/Makefile 2006-02-17 20:34:02.000000000 +0100
126 +++ strongswan-2.6.4-charon/programs/starter/Makefile 2006-04-19 14:22:26.000000000 +0200
128 DEFINES+= -DLEAK_DETECTIVE
131 +# Enable charon support
132 +ifeq ($(USE_IKEV2),true)
136 INCLUDES=-I${FREESWANDIR}/linux/include
137 CFLAGS=$(DEFINES) $(INCLUDES) -Wall
138 CFLAGS+=-DIPSEC_EXECDIR=\"${FINALLIBEXECDIR}\" -DIPSEC_CONFDDIR=\"${FINALCONFDDIR}\"
140 starterwhack.o klips.o netkey.o interfaces.o exec.o cmp.o confread.o \
141 loglite.o ${PLUTO_OBJS}
143 +# Build charon-only objs
144 +ifeq ($(USE_IKEV2),true)
145 + OBJS+= invokecharon.o starterstroke.o
148 DISTSRC=$(OBJS:.o=.c)
149 DISTSRC+=cmp.h confread.h confwrite.h exec.h files.h interfaces.h klips.h netkey.h
150 DISTSRC+=parser.h args.h invokepluto.h starterwhack.h keywords.h keywords.txt
151 diff -Naur strongswan-2.6.4/programs/starter/args.c strongswan-2.6.4-charon/programs/starter/args.c
152 --- strongswan-2.6.4/programs/starter/args.c 2006-03-10 21:37:10.000000000 +0100
153 +++ strongswan-2.6.4-charon/programs/starter/args.c 2006-04-19 14:22:26.000000000 +0200
156 static const char *LST_keyexchange[] = {
165 diff -Naur strongswan-2.6.4/programs/starter/files.h strongswan-2.6.4-charon/programs/starter/files.h
166 --- strongswan-2.6.4/programs/starter/files.h 2006-02-04 19:52:58.000000000 +0100
167 +++ strongswan-2.6.4-charon/programs/starter/files.h 2006-04-19 14:22:26.000000000 +0200
169 #define SECRETS_FILE IPSEC_CONFDIR"/ipsec.secrets"
171 #define PLUTO_CMD IPSEC_EXECDIR"/pluto"
172 -#define CTL_FILE DEFAULT_CTLBASE CTL_SUFFIX
173 -#define PID_FILE DEFAULT_CTLBASE PID_SUFFIX
174 +#define PLUTO_CTL_FILE DEFAULT_CTLBASE CTL_SUFFIX
175 +#define PLUTO_PID_FILE DEFAULT_CTLBASE PID_SUFFIX
178 +#define CHARON_CMD IPSEC_EXECDIR"/charon"
179 +#define CHARON_BASE "/var/run/charon"
180 +#define CHARON_CTL_FILE CHARON_BASE CTL_SUFFIX
181 +#define CHARON_PID_FILE CHARON_BASE PID_SUFFIX
184 #define DYNIP_DIR "/var/run/dynip"
185 #define INFO_FILE "/var/run/ipsec.info"
186 diff -Naur strongswan-2.6.4/programs/starter/invokecharon.c strongswan-2.6.4-charon/programs/starter/invokecharon.c
187 --- strongswan-2.6.4/programs/starter/invokecharon.c 1970-01-01 01:00:00.000000000 +0100
188 +++ strongswan-2.6.4-charon/programs/starter/invokecharon.c 2006-04-20 08:14:25.000000000 +0200
190 +/* strongSwan charon launcher
191 + * Copyright (C) 2001-2002 Mathieu Lafon - Arkoon Network Security
192 + * Copyright (C) 2006 Martin Willi - Hochschule fuer Technik Rapperswil
194 + * Ported from invokepluto.c to fit charons needs.
196 + * This program is free software; you can redistribute it and/or modify it
197 + * under the terms of the GNU General Public License as published by the
198 + * Free Software Foundation; either version 2 of the License, or (at your
199 + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
201 + * This program is distributed in the hope that it will be useful, but
202 + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
203 + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
204 + * for more details.
206 + * RCSID $Id: invokecharon.c $
209 +#include <sys/types.h>
210 +#include <sys/stat.h>
217 +#include <freeswan.h>
219 +#include "../pluto/constants.h"
220 +#include "../pluto/defs.h"
221 +#include "../pluto/log.h"
223 +#include "confread.h"
224 +#include "invokecharon.h"
227 +static int _charon_pid = 0;
228 +static int _stop_requested;
231 +starter_charon_pid(void)
233 + return _charon_pid;
237 +starter_charon_sigchild(pid_t pid)
239 + if (pid == _charon_pid)
242 + if (!_stop_requested)
244 + plog("charon has died -- restart scheduled (%dsec)"
245 + , CHARON_RESTART_DELAY);
246 + alarm(CHARON_RESTART_DELAY); // restart in 5 sec
248 + unlink(CHARON_PID_FILE);
253 +starter_stop_charon (void)
261 + _stop_requested = 1;
263 + /* be more and more aggressive */
264 + for (i = 0; i < 20 && (pid = _charon_pid) != 0; i++)
269 + kill(pid, SIGTERM);
271 + kill(pid, SIGKILL);
274 + if (_charon_pid == 0)
276 + plog("starter_stop_charon(): can't stop charon !!!");
281 + plog("stater_stop_charon(): charon is not started...");
288 +starter_start_charon (starter_config_t *cfg, bool debug)
294 + CHARON_CMD, NULL, NULL,
299 + arg[argc++] = "--use-syslog";
304 + plog("starter_start_charon(): charon already started...");
309 + unlink(CHARON_CTL_FILE);
310 + _stop_requested = 0;
316 + plog("can't fork(): %s", strerror(errno));
321 + sigprocmask(SIG_SETMASK, 0, NULL);
322 + execv(arg[0], arg);
323 + plog("can't execv(%s,...): %s", arg[0], strerror(errno));
328 + for (i = 0; i < 50 && _charon_pid; i++)
330 + /* wait for charon */
332 + if (stat(CHARON_PID_FILE, &stb) == 0)
335 + DBG_log("charon (%d) started", _charon_pid)
342 + /* If charon is started but with no ctl file, stop it */
343 + plog("charon too long to start... - kill kill");
344 + for (i = 0; i < 20 && (pid = _charon_pid) != 0; i++)
349 + kill(pid, SIGTERM);
351 + kill(pid, SIGKILL);
357 + plog("charon refused to be started");
364 diff -Naur strongswan-2.6.4/programs/starter/invokecharon.h strongswan-2.6.4-charon/programs/starter/invokecharon.h
365 --- strongswan-2.6.4/programs/starter/invokecharon.h 1970-01-01 01:00:00.000000000 +0100
366 +++ strongswan-2.6.4-charon/programs/starter/invokecharon.h 2006-04-19 14:22:26.000000000 +0200
368 +/* strongSwan charon launcher
369 + * Copyright (C) 2001-2002 Mathieu Lafon - Arkoon Network Security
370 + * Copyright (C) 2006 Martin Willi - Hochschule fuer Technik Rapperswil
372 + * Ported from invokepluto.h to fit charons needs.
374 + * This program is free software; you can redistribute it and/or modify it
375 + * under the terms of the GNU General Public License as published by the
376 + * Free Software Foundation; either version 2 of the License, or (at your
377 + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
379 + * This program is distributed in the hope that it will be useful, but
380 + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
381 + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
382 + * for more details.
384 + * RCSID $Id: invokecharon.h $
387 +#ifndef _STARTER_CHARON_H_
388 +#define _STARTER_CHARON_H_
390 +#define CHARON_RESTART_DELAY 5
392 +extern void starter_charon_sigchild (pid_t pid);
393 +extern pid_t starter_charon_pid (void);
394 +extern int starter_stop_charon (void);
395 +extern int starter_start_charon(struct starter_config *cfg, bool debug);
397 +#endif /* _STARTER_CHARON_H_ */
399 diff -Naur strongswan-2.6.4/programs/starter/invokepluto.c strongswan-2.6.4-charon/programs/starter/invokepluto.c
400 --- strongswan-2.6.4/programs/starter/invokepluto.c 2006-02-17 22:41:50.000000000 +0100
401 +++ strongswan-2.6.4-charon/programs/starter/invokepluto.c 2006-04-19 14:22:26.000000000 +0200
403 , PLUTO_RESTART_DELAY);
404 alarm(PLUTO_RESTART_DELAY); // restart in 5 sec
407 + unlink(PLUTO_PID_FILE);
416 + unlink(PLUTO_CTL_FILE);
419 if (cfg->setup.prepluto)
424 - if (stat(CTL_FILE, &stb) == 0)
425 + if (stat(PLUTO_CTL_FILE, &stb) == 0)
428 DBG_log("pluto (%d) started", _pluto_pid)
429 diff -Naur strongswan-2.6.4/programs/starter/starter.c strongswan-2.6.4-charon/programs/starter/starter.c
430 --- strongswan-2.6.4/programs/starter/starter.c 2006-02-15 19:37:46.000000000 +0100
431 +++ strongswan-2.6.4-charon/programs/starter/starter.c 2006-04-19 14:22:26.000000000 +0200
434 #include "starterwhack.h"
435 #include "invokepluto.h"
436 +#include "invokecharon.h"
441 #define FLAG_ACTION_RELOAD 0x04
442 #define FLAG_ACTION_QUIT 0x08
443 #define FLAG_ACTION_LISTEN 0x10
445 +#define FLAG_ACTION_START_CHARON 0x20
448 static unsigned int _action_ = 0;
452 if (pid == starter_pluto_pid())
455 + if (pid == starter_charon_pid())
456 + name = " (Charon)";
458 if (WIFSIGNALED(status))
460 DBG_log("child %d%s has been killed by sig %d\n",
463 if (pid == starter_pluto_pid())
464 starter_pluto_sigchild(pid);
466 + if (pid == starter_charon_pid())
467 + starter_charon_sigchild(pid);
475 _action_ |= FLAG_ACTION_START_PLUTO;
477 + _action_ |= FLAG_ACTION_START_CHARON;
483 signal(SIGQUIT, fsig);
484 signal(SIGALRM, fsig);
485 signal(SIGUSR1, fsig);
488 + plog("Starting strongSwan IPsec %s [starter]...", ipsec_version_code());
490 /* verify that we can start */
492 @@ -201,12 +219,24 @@
496 - if (stat(PID_FILE, &stb) == 0)
497 + if (stat(PLUTO_PID_FILE, &stb) == 0)
499 - plog("pluto is already running (%s exists) -- aborting", PID_FILE);
501 + plog("pluto is already running (%s exists) -- skipping pluto start", PLUTO_PID_FILE);
506 + _action_ |= FLAG_ACTION_START_PLUTO;
509 + if (stat(CHARON_PID_FILE, &stb) == 0)
511 + plog("charon is already running (%s exists) -- skipping charon start", CHARON_PID_FILE);
515 + _action_ |= FLAG_ACTION_START_CHARON;
518 if (stat(DEV_RANDOM, &stb) != 0)
520 plog("unable to start strongSwan IPsec -- no %s!", DEV_RANDOM);
523 last_reload = time(NULL);
525 - plog("Starting strongSwan IPsec %s [starter]...", ipsec_version_code());
526 + if (stat(MY_PID_FILE, &stb) == 0)
528 + plog("starter is already running (%s exists) -- no fork done", MY_PID_FILE);
532 /* fork if we're not debugging stuff */
534 @@ -296,17 +330,19 @@
535 , &cfg->defaultroute);
538 - _action_ = FLAG_ACTION_START_PLUTO;
543 - * Stop pluto (if started) and exit
545 + * Stop pluto/charon (if started) and exit
547 if (_action_ & FLAG_ACTION_QUIT)
549 if (starter_pluto_pid())
550 starter_stop_pluto();
552 + if (starter_charon_pid())
553 + starter_stop_charon();
556 starter_netkey_cleanup();
559 if (conn->state == STATE_ADDED)
561 starter_whack_del_conn(conn);
563 + starter_stroke_del_conn(conn);
565 conn->state = STATE_TO_ADD;
570 if (conn->state == STATE_ADDED)
571 starter_whack_del_conn(conn);
573 + starter_stroke_del_conn(conn);
577 /* Look for new ca sections that are already loaded */
579 conn->state = STATE_TO_ADD;
587 + if (_action_ & FLAG_ACTION_START_CHARON)
589 + if (starter_charon_pid() == 0)
592 + DBG_log("Attempting to start charon...")
594 + if (starter_start_charon(cfg, no_fork) != 0)
596 + /* schedule next try */
597 + alarm(PLUTO_RESTART_DELAY);
600 + _action_ &= ~FLAG_ACTION_START_CHARON;
605 * Tell pluto to reread its interfaces
606 @@ -536,11 +599,36 @@
609 starter_whack_add_conn(conn);
611 + starter_stroke_add_conn(conn);
613 conn->state = STATE_ADDED;
614 if (conn->startup == STARTUP_START)
615 - starter_whack_initiate_conn(conn);
618 + if (conn->keyexchange == 2)
620 + starter_stroke_initiate_conn(conn);
625 + starter_whack_initiate_conn(conn);
628 else if (conn->startup == STARTUP_ROUTE)
629 - starter_whack_route_conn(conn);
632 + if (conn->keyexchange == 2)
634 + starter_stroke_route_conn(conn);
639 + starter_whack_route_conn(conn);
645 diff -Naur strongswan-2.6.4/programs/starter/starterstroke.c strongswan-2.6.4-charon/programs/starter/starterstroke.c
646 --- strongswan-2.6.4/programs/starter/starterstroke.c 1970-01-01 01:00:00.000000000 +0100
647 +++ strongswan-2.6.4-charon/programs/starter/starterstroke.c 2006-04-19 14:28:33.000000000 +0200
649 +/* Stroke for charon is the counterpart to whack from pluto
650 + * Copyright (C) 2006 Martin Willi - Hochschule fuer Technik Rapperswil
652 + * This program is free software; you can redistribute it and/or modify it
653 + * under the terms of the GNU General Public License as published by the
654 + * Free Software Foundation; either version 2 of the License, or (at your
655 + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
657 + * This program is distributed in the hope that it will be useful, but
658 + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
659 + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
660 + * for more details.
662 + * RCSID $Id: starterstroke.c $
665 +#include <sys/types.h>
666 +#include <sys/socket.h>
668 +#include <linux/stddef.h>
672 +#include <netinet/in.h>
673 +#include <arpa/inet.h>
675 +#include <freeswan.h>
677 +#include "../pluto/constants.h"
678 +#include "../pluto/defs.h"
679 +#include "../pluto/log.h"
681 +#include "../charon/stroke/stroke.h"
683 +#include "starterstroke.h"
684 +#include "confread.h"
687 +static char* push_string(stroke_msg_t **strm, char *string)
689 + stroke_msg_t *stroke_msg;
690 + size_t string_length;
692 + if (string == NULL)
696 + stroke_msg = *strm;
697 + string_length = strlen(string) + 1;
698 + stroke_msg->length += string_length;
700 + stroke_msg = realloc(stroke_msg, stroke_msg->length);
701 + strcpy((char*)stroke_msg + stroke_msg->length - string_length, string);
703 + *strm = stroke_msg;
704 + return (char*)(u_int)stroke_msg->length - string_length;
708 +send_stroke_msg (stroke_msg_t *msg)
710 + struct sockaddr_un ctl_addr = { AF_UNIX, CHARON_CTL_FILE };
713 + sock = socket(AF_UNIX, SOCK_STREAM, 0);
716 + plog("socket() failed: %s", strerror(errno));
719 + if (connect(sock, (struct sockaddr *)&ctl_addr,
720 + offsetof(struct sockaddr_un, sun_path) + strlen(ctl_addr.sun_path)) < 0)
722 + plog("connect(charon_ctl) failed: %s", strerror(errno));
728 + if (write(sock, msg, msg->length) != msg->length)
730 + plog("write(charon_ctl) failed: %s", strerror(errno));
740 +connection_name(starter_conn_t *conn)
742 + /* if connection name is '%auto', create a new name like conn_xxxxx */
743 + static char buf[32];
745 + if (streq(conn->name, "%auto"))
747 + sprintf(buf, "conn_%ld", conn->id);
754 +int starter_stroke_add_conn(starter_conn_t *conn)
756 + stroke_msg_t *msg = malloc(sizeof(stroke_msg_t));
759 + msg->length = sizeof(stroke_msg_t);
760 + msg->type = STR_ADD_CONN;
762 + msg->add_conn.name = push_string(&msg, connection_name(conn));
764 + msg->add_conn.me.id = push_string(&msg, conn->left.id);
765 + msg->add_conn.me.cert = push_string(&msg, conn->left.cert);
766 + msg->add_conn.me.address = push_string(&msg, inet_ntoa(conn->left.addr.u.v4.sin_addr));
767 + msg->add_conn.me.subnet = push_string(&msg, inet_ntoa(conn->left.subnet.addr.u.v4.sin_addr));
768 + msg->add_conn.me.subnet_mask = conn->left.subnet.maskbits;
770 + msg->add_conn.other.id = push_string(&msg, conn->right.id);
771 + msg->add_conn.other.cert = push_string(&msg, conn->right.cert);
772 + msg->add_conn.other.address = push_string(&msg, inet_ntoa(conn->right.addr.u.v4.sin_addr));
773 + msg->add_conn.other.subnet = push_string(&msg, inet_ntoa(conn->right.subnet.addr.u.v4.sin_addr));
774 + msg->add_conn.other.subnet_mask = conn->right.subnet.maskbits;
776 + res = send_stroke_msg(msg);
781 +int starter_stroke_del_conn(starter_conn_t *conn)
785 +int starter_stroke_route_conn(starter_conn_t *conn)
787 + stroke_msg_t *msg = malloc(sizeof(stroke_msg_t));
790 + msg->length = sizeof(stroke_msg_t);
791 + msg->type = STR_INSTALL;
792 + msg->install.name = push_string(&msg, connection_name(conn));
793 + res = send_stroke_msg(msg);
798 +int starter_stroke_initiate_conn(starter_conn_t *conn)
800 + stroke_msg_t *msg = malloc(sizeof(stroke_msg_t));
803 + msg->length = sizeof(stroke_msg_t);
804 + msg->type = STR_INITIATE;
805 + msg->initiate.name = push_string(&msg, connection_name(conn));
806 + res = send_stroke_msg(msg);
810 diff -Naur strongswan-2.6.4/programs/starter/starterstroke.h strongswan-2.6.4-charon/programs/starter/starterstroke.h
811 --- strongswan-2.6.4/programs/starter/starterstroke.h 1970-01-01 01:00:00.000000000 +0100
812 +++ strongswan-2.6.4-charon/programs/starter/starterstroke.h 2006-04-19 14:22:26.000000000 +0200
814 +/* Stroke for charon is the counterpart to whack from pluto
815 + * Copyright (C) 2006 Martin Willi - Hochschule fuer Technik Rapperswil
817 + * This program is free software; you can redistribute it and/or modify it
818 + * under the terms of the GNU General Public License as published by the
819 + * Free Software Foundation; either version 2 of the License, or (at your
820 + * option) any later version. See <http://www.fsf.org/copyleft/gpl.txt>.
822 + * This program is distributed in the hope that it will be useful, but
823 + * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
824 + * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
825 + * for more details.
827 + * RCSID $Id: starterstroke.h $
830 +#ifndef _STARTER_STROKE_H_
831 +#define _STARTER_STROKE_H_
833 +#include "confread.h"
835 +extern int starter_stroke_add_conn(starter_conn_t *conn);
836 +extern int starter_stroke_del_conn(starter_conn_t *conn);
837 +extern int starter_stroke_route_conn(starter_conn_t *conn);
838 +extern int starter_stroke_initiate_conn(starter_conn_t *conn);
840 +#endif /* _STARTER_STROKE_H_ */
841 diff -Naur strongswan-2.6.4/programs/starter/starterwhack.c strongswan-2.6.4-charon/programs/starter/starterwhack.c
842 --- strongswan-2.6.4/programs/starter/starterwhack.c 2006-02-08 21:56:07.000000000 +0100
843 +++ strongswan-2.6.4-charon/programs/starter/starterwhack.c 2006-04-19 14:22:26.000000000 +0200
846 send_whack_msg (whack_message_t *msg)
848 - struct sockaddr_un ctl_addr = { AF_UNIX, CTL_FILE };
849 + struct sockaddr_un ctl_addr = { AF_UNIX, PLUTO_CTL_FILE };
852 char *str_next, *str_roof;