--- lan.c	2007-09-12 10:48:48.161772000 -0700
+++ lan_new.c	2007-09-12 11:02:44.504303000 -0700
@@ -428,6 +428,7 @@
 	struct ipmi_rq_entry * entry;
 	int x=0, rv;
 	uint8_t our_address = intf->my_addr;
+	uint8_t authentication = FALSE;
 
 	if (our_address == 0)
 		our_address = IPMI_BMC_SLAVE_ADDR;
@@ -522,7 +523,10 @@
 			/* Standard IPMI 1.5 packet */
 			rsp->session.payloadtype = IPMI_PAYLOAD_TYPE_IPMI;
 			if (intf->session->active && (rsp->session.authtype || intf->session->authtype))
+			{
+				authentication = TRUE;
 				x += 16;
+			}
 
 			rsp->session.msglen = rsp->data[x++];
 			rsp->payload.ipmi_response.rq_addr = rsp->data[x++];
@@ -575,8 +579,14 @@
 							 "bridge command response");
 					}
 					/* bridged command: lose extra header */
-					if (rsp->payload.ipmi_response.cmd == 0x34) {
-						if (rsp->data_len == 38) {
+					/* Extra check to ensure that command is 0x34 and netfn 
+					 * should be Application 0x07 */
+					if ((rsp->payload.ipmi_response.cmd == 0x34) &&
+						(rsp->payload.ipmi_response.netfn == 0x07)) {
+					/* If authentication is present then the resp length will be 38
+					* and if its not present then the response length is 22*/
+						if ((authentication && rsp->data_len == 38) ||
+						   (!authentication && rsp->data_len == 22)) {
 							rsp = !rsp->ccode ? ipmi_lan_recv_packet(intf) : NULL;
 							if (rsp && !rsp->ccode &&
 								intf->transit_addr != intf->my_addr &&
