aboutsummaryrefslogtreecommitdiffstats
path: root/epan/dissectors/packet-dcerpc-netlogon.c
diff options
context:
space:
mode:
authorRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2012-02-11 02:10:32 +0000
committerRonnie Sahlberg <ronnie_sahlberg@ozemail.com.au>2012-02-11 02:10:32 +0000
commit232c882946dd7d786e198c18907348089c224203 (patch)
tree02cddd4bfbe343c78f7f199a5228eadf4115052c /epan/dissectors/packet-dcerpc-netlogon.c
parent4d2cb8bf94776c1f8386fdb95ad0d50ecdea86f4 (diff)
NETLOGON handle different schannel with the same source
ip and dest i from Matthieu Patou <mat@matws.net> svn path=/trunk/; revision=40961
Diffstat (limited to 'epan/dissectors/packet-dcerpc-netlogon.c')
-rw-r--r--epan/dissectors/packet-dcerpc-netlogon.c7
1 files changed, 6 insertions, 1 deletions
diff --git a/epan/dissectors/packet-dcerpc-netlogon.c b/epan/dissectors/packet-dcerpc-netlogon.c
index 6af34dd286..ccc6654008 100644
--- a/epan/dissectors/packet-dcerpc-netlogon.c
+++ b/epan/dissectors/packet-dcerpc-netlogon.c
@@ -572,6 +572,7 @@ static const true_false_string user_account_control_account_disabled= {
typedef struct _netlogon_auth_key {
address src;
address dst;
+ guint32 srcport;
guint32 dstport;
char * name;
} netlogon_auth_key;
@@ -582,7 +583,7 @@ netlogon_auth_equal (gconstpointer k1, gconstpointer k2)
const netlogon_auth_key *key1 = (const netlogon_auth_key *)k1;
const netlogon_auth_key *key2 = (const netlogon_auth_key *)k2;
if(key1->name == NULL || key2->name ==NULL)
- return ((key1->dstport == key2->dstport) && ADDRESSES_EQUAL(&key1->src,&key2->src) &&
+ return ((key1->srcport == key2->srcport) && (key1->dstport == key2->dstport) && ADDRESSES_EQUAL(&key1->src,&key2->src) &&
ADDRESSES_EQUAL(&key1->dst,&key2->dst));
else
return ((strcmp(key1->name,key2->name)==0) && ADDRESSES_EQUAL(&key1->src,&key2->src) &&
@@ -596,6 +597,7 @@ netlogon_auth_hash (gconstpointer k)
guint hash_val1;
if(key1->name == NULL) {
hash_val1 = key1->dstport;
+ hash_val1 += key1->srcport;
}
else {
unsigned int i = 0;
@@ -2472,6 +2474,7 @@ static void generate_hash_key(packet_info *pinfo,unsigned char is_server,netlogo
{
if(is_server) {
key->dstport = pinfo->srcport;
+ key->srcport = pinfo->destport;
COPY_ADDRESS(&key->dst,&pinfo->src);
COPY_ADDRESS(&key->src,&pinfo->dst);
/* name has been durably allocated */
@@ -2481,6 +2484,7 @@ static void generate_hash_key(packet_info *pinfo,unsigned char is_server,netlogo
COPY_ADDRESS(&key->dst,&pinfo->dst);
COPY_ADDRESS(&key->src,&pinfo->src);
key->dstport = pinfo->destport;
+ key->srcport = pinfo->srcport;
/* name has been durably allocated */
key->name = name;
}
@@ -6904,6 +6908,7 @@ netlogon_dissect_netrserverauthenticate23_reply(tvbuff_t *tvb, int offset,
vars = (netlogon_auth_vars *)g_hash_table_lookup(netlogon_auths, &key);
if(vars != NULL) {
debugprintf("Found some vars (ie. server/client challenges), let's see if I can get a session key\n");
+ debugprintf("Context Id = %d \n", pinfo->dcectxid);
while(vars != NULL && vars->next_start != -1 && vars->next_start < (int) pinfo->fd->num ) {
debugprintf("looping auth reply...\n");
vars = vars->next;