Tal Aloni 8 anni fa
parent
commit
13b00952ca

+ 10 - 0
ISCSI/ISCSI.Server/ISCSIServer.Login.cs

@@ -36,8 +36,11 @@ namespace ISCSI.Server
             response.TSIH = request.TSIH;
             response.InitiatorTaskTag = request.InitiatorTaskTag;
 
+            string connectionIdentifier = ConnectionState.GetConnectionIdentifier(session, connection);
+
             if (request.Transit && request.Continue)
             {
+                Log(Severity.Warning, "[{0}] Initiator error: Received login request with both Transit and Continue set to true", connectionIdentifier);
                 response.Status = LoginResponseStatusName.InitiatorError;
                 return response;
             }
@@ -69,6 +72,7 @@ namespace ISCSI.Server
                 {
                     // RFC 3720: InitiatorName: The initiator of the TCP connection MUST provide this key [..]
                     // at the first Login of the Login Phase for every connection.
+                    Log(Severity.Warning, "[{0}] Initiator error: InitiatorName was not included in the login request", connectionIdentifier);
                     response.Status = LoginResponseStatusName.InitiatorError;
                     return response;
                 }
@@ -89,12 +93,14 @@ namespace ISCSI.Server
                             session.Target = m_targets[targetIndex];
                             if (!session.Target.AuthorizeInitiator(connection.InitiatorName, connection.InitiatorEndPoint))
                             {
+                                Log(Severity.Warning, "[{0}] Initiator was not authorized to access {1}", connectionIdentifier, targetName);
                                 response.Status = LoginResponseStatusName.AuthorizationFailure;
                                 return response;
                             }
                         }
                         else
                         {
+                            Log(Severity.Warning, "[{0}] Initiator requested an unknown target: {1}", connectionIdentifier, targetName);
                             response.Status = LoginResponseStatusName.NotFound;
                             return response;
                         }
@@ -102,6 +108,7 @@ namespace ISCSI.Server
                     else
                     {
                         // RFC 3720: For any connection within a session whose type is not "Discovery", the first Login Request MUST also include the TargetName key=value pair.
+                        Log(Severity.Warning, "[{0}] Initiator error: TargetName was not included in a non-discovery session", connectionIdentifier);
                         response.Status = LoginResponseStatusName.InitiatorError;
                         return response;
                     }
@@ -125,6 +132,7 @@ namespace ISCSI.Server
                     }
                     else if (request.NextStage != 1)
                     {
+                        Log(Severity.Warning, "[{0}] Initiator error: Received login request with Invalid NextStage", connectionIdentifier);
                         response.Status = LoginResponseStatusName.InitiatorError;
                     }
                 }
@@ -142,6 +150,7 @@ namespace ISCSI.Server
                     }
                     else
                     {
+                        Log(Severity.Warning, "[{0}] Initiator error: Received login request with Invalid NextStage", connectionIdentifier);
                         response.Status = LoginResponseStatusName.InitiatorError;
                     }
                 }
@@ -149,6 +158,7 @@ namespace ISCSI.Server
             else
             {
                 // Not valid
+                Log(Severity.Warning, "[{0}] Initiator error: Received login request with Invalid CurrentStage", connectionIdentifier);
                 response.Status = LoginResponseStatusName.InitiatorError;
             }
 

+ 4 - 4
ISCSI/ISCSI.Server/ISCSIServer.PDUProcessor.cs

@@ -86,7 +86,7 @@ namespace ISCSI.Server
                 else
                 {
                     // Before the Full Feature Phase is established, only Login Request and Login Response PDUs are allowed.
-                    Log(Severity.Error, "[{0}] Improper command during login phase, OpCode: 0x{1}", state.ConnectionIdentifier, pdu.OpCode.ToString("x"));
+                    Log(Severity.Warning, "[{0}] Initiator error: Improper command during login phase, OpCode: 0x{1}", state.ConnectionIdentifier, pdu.OpCode.ToString("x"));
                     if (state.Session.TSIH == 0)
                     {
                         // A target receiving any PDU except a Login request before the Login phase is started MUST
@@ -161,7 +161,7 @@ namespace ISCSI.Server
                 {
                     // The target MUST ONLY accept text requests with the SendTargets key and a logout
                     // request with the reason "close the session".  All other requests MUST be rejected.
-                    Log(Severity.Error, "[{0}] Improper command during discovery session, OpCode: 0x{1}", state.ConnectionIdentifier, pdu.OpCode.ToString("x"));
+                    Log(Severity.Warning, "[{0}] Initiator error: Improper command during discovery session, OpCode: 0x{1}", state.ConnectionIdentifier, pdu.OpCode.ToString("x"));
                     RejectPDU reject = new RejectPDU();
                     reject.Reason = RejectReason.ProtocolError;
                     reject.Data = ByteReader.ReadBytes(pdu.GetBytes(), 0, 48);
@@ -193,7 +193,7 @@ namespace ISCSI.Server
                         }
                         catch (InvalidTargetTransferTagException ex)
                         {
-                            Log(Severity.Error, "[{0}] Invalid TargetTransferTag: {1}", state.ConnectionIdentifier, ex.TargetTransferTag);
+                            Log(Severity.Warning, "[{0}] Initiator error: Invalid TargetTransferTag: {1}", state.ConnectionIdentifier, ex.TargetTransferTag);
                             RejectPDU reject = new RejectPDU();
                             reject.InitiatorTaskTag = request.InitiatorTaskTag;
                             reject.Reason = RejectReason.InvalidPDUField;
@@ -223,7 +223,7 @@ namespace ISCSI.Server
                 }
                 else if (pdu is LoginRequestPDU)
                 {
-                    Log(Severity.Error, "[{0}] Protocol Error (Login request during full feature phase)", state.ConnectionIdentifier);
+                    Log(Severity.Warning, "[{0}] Initiator Error: Login request during full feature phase", state.ConnectionIdentifier);
                     // RFC 3720: Login requests and responses MUST be used exclusively during Login.
                     // On any connection, the login phase MUST immediately follow TCP connection establishment and
                     // a subsequent Login Phase MUST NOT occur before tearing down a connection

+ 2 - 2
ISCSI/SCSITarget/VirtualSCSITarget.cs

@@ -62,7 +62,7 @@ namespace SCSI
             }
             else if (lun >= m_disks.Count)
             {
-                Log(Severity.Error, "LUN {0}: Invalid LUN", lun);
+                Log(Severity.Warning, "Initiator error: tried to execute command on LUN {0} which does not exist", lun);
                 response = FormatSenseData(SenseDataParameter.GetIllegalRequestInvalidLUNSenseData());
                 return SCSIStatusCodeName.CheckCondition;
             }
@@ -149,7 +149,7 @@ namespace SCSI
                 }
                 else
                 {
-                    Log(Severity.Error, "Inquiry: Invalid request");
+                    Log(Severity.Warning, "Initiator error: Invalid Inquiry request");
                     response = FormatSenseData(SenseDataParameter.GetIllegalRequestInvalidFieldInCDBSenseData());
                     return SCSIStatusCodeName.CheckCondition;
                 }

+ 1 - 1
ISCSIConsole/Program.Log.cs

@@ -38,7 +38,7 @@ namespace ISCSIConsole
 
         public static void OnLogEntry(object sender, LogEntry entry)
         {
-            if (m_logFile != null)
+            if (m_logFile != null && entry.Severity != Severity.Trace)
             {
                 lock (m_logFile)
                 {