Added checking for maximum packet length.
[silc.git] / apps / silcd / packet_send.c
index 7ead93203810eb2a313b86b1e0df631b6e7735a2..e9d70fbb076fd87abdd7b702f9fe1b8c36021139 100644 (file)
@@ -176,6 +176,9 @@ void silc_server_packet_send_dest(SilcServer server,
   packetdata.dst_id = dst_id_data;
   packetdata.dst_id_len = dst_id_len;
   packetdata.dst_id_type = dst_id_type;
+  data_len = SILC_PACKET_DATALEN(data_len, (SILC_PACKET_HEADER_LEN +
+                                           packetdata.src_id_len + 
+                                           packetdata.dst_id_len));
   packetdata.truelen = data_len + SILC_PACKET_HEADER_LEN + 
     packetdata.src_id_len + dst_id_len;
   packetdata.padlen = SILC_PACKET_PADLEN(packetdata.truelen, block_len);
@@ -277,6 +280,9 @@ void silc_server_packet_send_srcdest(SilcServer server,
   packetdata.dst_id = dst_id_data;
   packetdata.dst_id_len = dst_id_len;
   packetdata.dst_id_type = dst_id_type;
+  data_len = SILC_PACKET_DATALEN(data_len, (SILC_PACKET_HEADER_LEN +
+                                           packetdata.src_id_len + 
+                                           dst_id_len));
   packetdata.truelen = data_len + SILC_PACKET_HEADER_LEN + 
     packetdata.src_id_len + dst_id_len;
   packetdata.padlen = SILC_PACKET_PADLEN(packetdata.truelen, block_len);
@@ -480,6 +486,9 @@ silc_server_packet_send_to_channel_real(SilcServer server,
   if (!sock)
     return;
 
+  data_len = SILC_PACKET_DATALEN(data_len, (SILC_PACKET_HEADER_LEN +
+                                           packet->src_id_len + 
+                                           packet->dst_id_len));
   packet->truelen = data_len + SILC_PACKET_HEADER_LEN + 
     packet->src_id_len + packet->dst_id_len;
 
@@ -710,7 +719,7 @@ silc_server_packet_relay_to_channel_encrypt(SilcServer server,
     chp = silc_channel_message_payload_encode(flags, dlen, data + 4,
                                              iv_len, channel->iv,
                                              channel->channel_key,
-                                             channel->hmac);
+                                             channel->hmac, NULL);
     memcpy(data, chp->data, chp->len);
     silc_buffer_free(chp);
   }