Greg Troxel <gdt@ir.bbn.com>
[zebra 15715] FIX for ospf md5 authentication problem, finally!
fix copy of ospf packet buffer
diff --git a/ospfd/ospf_packet.c b/ospfd/ospf_packet.c
index 95d184d..62b93fe 100644
--- a/ospfd/ospf_packet.c
+++ b/ospfd/ospf_packet.c
@@ -226,7 +226,13 @@
{
struct ospf_packet *new;
- new = ospf_packet_new (op->length);
+ if (stream_get_endp(op->s) != op->length) {
+ zlog_warn ("ospf_packet_dup stream %d ospf_packet %d size mismatch",
+ STREAM_SIZE(op->s), op->length);
+ }
+
+ /* Reserve space for MD5 authentication that may be added later. */
+ new = ospf_packet_new (stream_get_endp(op->s) + OSPF_AUTH_MD5_SIZE);
ospf_stream_copy (new->s, op->s);
new->dst = op->dst;
@@ -359,7 +365,12 @@
stream_set_putp (op->s, oldputp);
/* We do *NOT* increment the OSPF header length. */
- op->length += OSPF_AUTH_MD5_SIZE;
+ op->length = ntohs (ospfh->length) + OSPF_AUTH_MD5_SIZE;
+
+ if (stream_get_endp(op->s) != op->length) {
+ zlog_warn("ospf_make_md5_digest: length mismatch stream %d ospf_packet %d",
+ stream_get_endp(op->s), op->length);
+ }
return OSPF_AUTH_MD5_SIZE;
}