summaryrefslogtreecommitdiff
path: root/sbin/isakmpd/message.c
diff options
context:
space:
mode:
authorNiklas Hallqvist <niklas@cvs.openbsd.org>1999-02-26 03:47:47 +0000
committerNiklas Hallqvist <niklas@cvs.openbsd.org>1999-02-26 03:47:47 +0000
commited71d85886c0c846d050af1ae2e5a5d8476c8c1a (patch)
treecd988a66ef8727cf1c5cedb535f4c093a7fc5102 /sbin/isakmpd/message.c
parentc662f96eab7c9e6a55ac258dcdbd91bea9f977de (diff)
Merge from the Ericsson repository
| revision 1.106 | date: 1999/02/25 11:39:15; author: niklas; state: Exp; lines: +3 -1 | include sysdep.h everywhere | ---------------------------- | revision 1.105 | date: 1999/02/14 00:18:11; author: niklas; state: Exp; lines: +10 -9 | Keep track of what SPI we are generating/using | ---------------------------- | revision 1.104 | date: 1999/02/06 15:03:39; author: niklas; state: Exp; lines: +7 -1 | Do not forget to remove message from sendq when freed | ----------------------------
Diffstat (limited to 'sbin/isakmpd/message.c')
-rw-r--r--sbin/isakmpd/message.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/sbin/isakmpd/message.c b/sbin/isakmpd/message.c
index e74060e58d1..595172a7572 100644
--- a/sbin/isakmpd/message.c
+++ b/sbin/isakmpd/message.c
@@ -1,5 +1,5 @@
-/* $OpenBSD: message.c,v 1.8 1998/12/21 01:02:26 niklas Exp $ */
-/* $EOM: message.c,v 1.103 1998/12/15 16:58:45 niklas Exp $ */
+/* $OpenBSD: message.c,v 1.9 1999/02/26 03:47:46 niklas Exp $ */
+/* $EOM: message.c,v 1.106 1999/02/25 11:39:15 niklas Exp $ */
/*
* Copyright (c) 1998 Niklas Hallqvist. All rights reserved.
@@ -42,6 +42,8 @@
#include <stdlib.h>
#include <string.h>
+#include "sysdep.h"
+
#include "attribute.h"
#include "cert.h"
#include "constants.h"
@@ -202,6 +204,11 @@ message_free (struct message *msg)
}
while ((node = TAILQ_FIRST (&msg->post_send)) != 0)
TAILQ_REMOVE (&msg->post_send, TAILQ_FIRST (&msg->post_send), link);
+
+ /* If we are on the send queue, remove us from there. */
+ if (msg->flags & MSG_IN_TRANSIT)
+ TAILQ_REMOVE (&msg->transport->sendq, msg, link);
+
free (msg);
}
@@ -1050,6 +1057,7 @@ message_send (struct message *msg)
| ISAKMP_FLAGS_COMMIT);
message_dump_raw ("message_send", msg);
+ msg->flags |= MSG_IN_TRANSIT;
TAILQ_INSERT_TAIL (&msg->transport->sendq, msg, link);
}
@@ -1143,7 +1151,9 @@ struct info_args {
/*
* As a reaction to the incoming message MSG create an informational exchange
* protected by ISAKMP_SA and send a notify payload of type NOTIFY, with
- * fields initialized from SA.
+ * fields initialized from SA. INCOMING is true if the SPI field should be
+ * filled with the incoming SPI and false if it is to be filled with the
+ * outgoing one.
*
* XXX Should we handle sending multiple notify payloads? The draft allows
* it, but do we need it? Furthermore, should we not return a success
@@ -1152,16 +1162,16 @@ struct info_args {
void
message_send_notification (struct message *msg, struct sa *isakmp_sa,
u_int16_t notify, struct proto *proto,
- int initiator)
+ int incoming)
{
struct info_args args;
args.discr = 'N';
args.doi = proto ? proto->sa->doi->id : 0;
args.proto = proto ? proto->proto : 0;
- args.spi_sz = proto ? proto->spi_sz[initiator] : 0;
+ args.spi_sz = proto ? proto->spi_sz[incoming] : 0;
args.u.n.msg_type = notify;
- args.u.n.spi = proto ? proto->spi[initiator] : 0;
+ args.u.n.spi = proto ? proto->spi[incoming] : 0;
if (isakmp_sa->flags & SA_FLAG_READY)
exchange_establish_p2 (isakmp_sa, ISAKMP_EXCH_INFO, &args);
else
@@ -1521,8 +1531,7 @@ message_negotiate_sa (struct message *msg,
}
else
spi = 0;
- TAILQ_FIRST (&sa->protos)->spi[!msg->exchange->initiator]
- = spi;
+ TAILQ_FIRST (&sa->protos)->spi[1] = spi;
log_debug_buf (LOG_MESSAGE, 40, "message_negotiate_sa: SPI",
spi, spi_sz);
@@ -1644,8 +1653,8 @@ message_add_sa_payload (struct message *msg)
msg);
if (spi_sz && !spi)
goto cleanup;
- proto->spi[exchange->initiator] = spi;
- proto->spi_sz[exchange->initiator] = spi_sz;
+ proto->spi[0] = spi;
+ proto->spi_sz[0] = spi_sz;
}
else
spi_sz = 0;