- /* FIXME: this code is not aware of any extension fields */
- if (length == NTP_TIMEMSG_MINLEN + 4) { /* Optional: key-id (crypto-NAK) */
- ND_TCHECK_4(bp->key_id);
- ND_PRINT((ndo, "\n\tKey id: %u", EXTRACT_BE_U_4(bp->key_id)));
- } else if (length == NTP_TIMEMSG_MINLEN + 4 + 16) { /* Optional: key-id + 128-bit digest */
- ND_TCHECK_4(bp->key_id);
- ND_PRINT((ndo, "\n\tKey id: %u", EXTRACT_BE_U_4(bp->key_id)));
- ND_TCHECK2(bp->message_digest, 16);
- ND_PRINT((ndo, "\n\tAuthentication: %08x%08x%08x%08x",
- EXTRACT_BE_U_4(bp->message_digest),
- EXTRACT_BE_U_4(bp->message_digest + 4),
- EXTRACT_BE_U_4(bp->message_digest + 8),
- EXTRACT_BE_U_4(bp->message_digest + 12)));
- } else if (length == NTP_TIMEMSG_MINLEN + 4 + 20) { /* Optional: key-id + 160-bit digest */
- ND_TCHECK_4(bp->key_id);
- ND_PRINT((ndo, "\n\tKey id: %u", EXTRACT_BE_U_4(bp->key_id)));
- ND_TCHECK2(bp->message_digest, 20);
- ND_PRINT((ndo, "\n\tAuthentication: %08x%08x%08x%08x%08x",
- EXTRACT_BE_U_4(bp->message_digest),
- EXTRACT_BE_U_4(bp->message_digest + 4),
- EXTRACT_BE_U_4(bp->message_digest + 8),
- EXTRACT_BE_U_4(bp->message_digest + 12),
- EXTRACT_BE_U_4(bp->message_digest + 16)));
- } else if (length > NTP_TIMEMSG_MINLEN) {
- ND_PRINT((ndo, "\n\t(%u more bytes after the header)", length - NTP_TIMEMSG_MINLEN));
+ if (version == 4)
+ efs_len = p_ext_fields(ndo, (const u_char *)bp + NTP_TIMEMSG_MINLEN, length - NTP_TIMEMSG_MINLEN);
+ else
+ efs_len = 0;
+
+ mac = (const u_char *)bp + NTP_TIMEMSG_MINLEN + efs_len;
+
+ if (length == NTP_TIMEMSG_MINLEN + efs_len + 4) { /* Optional: key-id (crypto-NAK) */
+ ND_PRINT("\n\tKey id: %u", GET_BE_U_4(mac));
+ } else if (length == NTP_TIMEMSG_MINLEN + efs_len + 4 + 16) { /* Optional: key-id + 128-bit digest */
+ ND_PRINT("\n\tKey id: %u", GET_BE_U_4(mac));
+ ND_PRINT("\n\tAuthentication: %08x%08x%08x%08x",
+ GET_BE_U_4(mac + 4),
+ GET_BE_U_4(mac + 8),
+ GET_BE_U_4(mac + 12),
+ GET_BE_U_4(mac + 16));
+ } else if (length == NTP_TIMEMSG_MINLEN + efs_len + 4 + 20) { /* Optional: key-id + 160-bit digest */
+ ND_PRINT("\n\tKey id: %u", GET_BE_U_4(mac));
+ ND_PRINT("\n\tAuthentication: %08x%08x%08x%08x%08x",
+ GET_BE_U_4(mac + 4),
+ GET_BE_U_4(mac + 8),
+ GET_BE_U_4(mac + 12),
+ GET_BE_U_4(mac + 16),
+ GET_BE_U_4(mac + 20));
+ } else if (length > NTP_TIMEMSG_MINLEN + efs_len) {
+ ND_PRINT("\n\t(%u more bytes after the header and extension fields)",
+ length - NTP_TIMEMSG_MINLEN - efs_len);