aboutsummaryrefslogtreecommitdiff
path: root/src/lib/protocols/kerberos.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/protocols/kerberos.c')
-rw-r--r--src/lib/protocols/kerberos.c45
1 files changed, 25 insertions, 20 deletions
diff --git a/src/lib/protocols/kerberos.c b/src/lib/protocols/kerberos.c
index ae33d525a..1eb006108 100644
--- a/src/lib/protocols/kerberos.c
+++ b/src/lib/protocols/kerberos.c
@@ -30,6 +30,8 @@
//#define KERBEROS_DEBUG 1
+#define KERBEROS_PORT 88
+
static void ndpi_int_kerberos_add_connection(struct ndpi_detection_module_struct *ndpi_struct,
struct ndpi_flow_struct *flow) {
ndpi_set_detected_protocol(ndpi_struct, flow, NDPI_PROTOCOL_KERBEROS, NDPI_PROTOCOL_UNKNOWN);
@@ -41,34 +43,37 @@ static void ndpi_int_kerberos_add_connection(struct ndpi_detection_module_struct
void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struct,
struct ndpi_flow_struct *flow) {
struct ndpi_packet_struct *packet = &flow->packet;
-#ifdef KERBEROS_DEBUG
u_int16_t sport = packet->tcp ? ntohs(packet->tcp->source) : ntohs(packet->udp->source);
u_int16_t dport = packet->tcp ? ntohs(packet->tcp->dest) : ntohs(packet->udp->dest);
-#endif
+ if((sport != KERBEROS_PORT) && (dport != KERBEROS_PORT)) {
+ NDPI_EXCLUDE_PROTO(ndpi_struct, flow);
+ return;
+ }
+
NDPI_LOG_DBG(ndpi_struct, "search KERBEROS\n");
#ifdef KERBEROS_DEBUG
printf("\n[Kerberos] Process packet [len: %u]\n", packet->payload_packet_len);
#endif
- if(flow->protos.kerberos.pktbuf != NULL) {
- u_int missing = flow->protos.kerberos.pktbuf_maxlen - flow->protos.kerberos.pktbuf_currlen;
+ if(flow->kerberos_buf.pktbuf != NULL) {
+ u_int missing = flow->kerberos_buf.pktbuf_maxlen - flow->kerberos_buf.pktbuf_currlen;
if(packet->payload_packet_len <= missing) {
- memcpy(&flow->protos.kerberos.pktbuf[flow->protos.kerberos.pktbuf_currlen], packet->payload, packet->payload_packet_len);
- flow->protos.kerberos.pktbuf_currlen += packet->payload_packet_len;
+ memcpy(&flow->kerberos_buf.pktbuf[flow->kerberos_buf.pktbuf_currlen], packet->payload, packet->payload_packet_len);
+ flow->kerberos_buf.pktbuf_currlen += packet->payload_packet_len;
- if(flow->protos.kerberos.pktbuf_currlen == flow->protos.kerberos.pktbuf_maxlen) {
- packet->payload = (u_int8_t *)flow->protos.kerberos.pktbuf;
- packet->payload_packet_len = flow->protos.kerberos.pktbuf_currlen;
+ if(flow->kerberos_buf.pktbuf_currlen == flow->kerberos_buf.pktbuf_maxlen) {
+ packet->payload = (u_int8_t *)flow->kerberos_buf.pktbuf;
+ packet->payload_packet_len = flow->kerberos_buf.pktbuf_currlen;
#ifdef KERBEROS_DEBUG
printf("[Kerberos] Packet is now full: processing\n");
#endif
} else {
#ifdef KERBEROS_DEBUG
printf("[Kerberos] Missing %u bytes: skipping\n",
- flow->protos.kerberos.pktbuf_maxlen - flow->protos.kerberos.pktbuf_currlen);
+ flow->kerberos_buf.pktbuf_maxlen - flow->kerberos_buf.pktbuf_currlen);
#endif
return;
@@ -100,11 +105,11 @@ void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struct,
*/
if(kerberos_len > expected_len) {
if(packet->tcp) {
- flow->protos.kerberos.pktbuf = (char*)ndpi_malloc(kerberos_len+4);
- if(flow->protos.kerberos.pktbuf != NULL) {
- flow->protos.kerberos.pktbuf_maxlen = kerberos_len+4;
- memcpy(flow->protos.kerberos.pktbuf, packet->payload, packet->payload_packet_len);
- flow->protos.kerberos.pktbuf_currlen = packet->payload_packet_len;
+ flow->kerberos_buf.pktbuf = (char*)ndpi_malloc(kerberos_len+4);
+ if(flow->kerberos_buf.pktbuf != NULL) {
+ flow->kerberos_buf.pktbuf_maxlen = kerberos_len+4;
+ memcpy(flow->kerberos_buf.pktbuf, packet->payload, packet->payload_packet_len);
+ flow->kerberos_buf.pktbuf_currlen = packet->payload_packet_len;
}
}
@@ -306,8 +311,8 @@ void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struct,
/* If necessary we can decode sname */
- if(flow->protos.kerberos.pktbuf) ndpi_free(flow->protos.kerberos.pktbuf);
- flow->protos.kerberos.pktbuf = NULL;
+ if(flow->kerberos_buf.pktbuf) ndpi_free(flow->kerberos_buf.pktbuf);
+ flow->kerberos_buf.pktbuf = NULL;
}
}
}
@@ -316,9 +321,9 @@ void ndpi_search_kerberos(struct ndpi_detection_module_struct *ndpi_struct,
ndpi_int_kerberos_add_connection(ndpi_struct, flow);
/* We set the protocol in the response */
- if(flow->protos.kerberos.pktbuf != NULL) {
- free(flow->protos.kerberos.pktbuf);
- flow->protos.kerberos.pktbuf = NULL;
+ if(flow->kerberos_buf.pktbuf != NULL) {
+ free(flow->kerberos_buf.pktbuf);
+ flow->kerberos_buf.pktbuf = NULL;
}
return;