]> git.proxmox.com Git - mirror_edk2.git/blobdiff - NetworkPkg/Application/IpsecConfig/PolicyEntryOperation.c
NetworkPkg:Replace unsafe string functions.
[mirror_edk2.git] / NetworkPkg / Application / IpsecConfig / PolicyEntryOperation.c
index d8330bcce095c682411a6a51ec8832e4c7ca31a5..970caa16ca0bc43aba7824ad452fb28c8dacd48f 100644 (file)
@@ -1,7 +1,7 @@
 /** @file\r
   The implementation of policy entry operation function in IpSecConfig application.\r
 \r
 /** @file\r
   The implementation of policy entry operation function in IpSecConfig application.\r
 \r
-  Copyright (c) 2009 - 2011, Intel Corporation. All rights reserved.<BR>\r
+  Copyright (c) 2009 - 2015, Intel Corporation. All rights reserved.<BR>\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
 \r
   This program and the accompanying materials\r
   are licensed and made available under the terms and conditions of the BSD License\r
@@ -784,6 +784,7 @@ CreateSadEntry (
   if (ValueStr != NULL ) {\r
     (*Data)->AlgoInfo.EspAlgoInfo.EncKeyLength = EncKeyLength;\r
     AsciiStr = AllocateZeroPool (EncKeyLength + 1);\r
   if (ValueStr != NULL ) {\r
     (*Data)->AlgoInfo.EspAlgoInfo.EncKeyLength = EncKeyLength;\r
     AsciiStr = AllocateZeroPool (EncKeyLength + 1);\r
+    ASSERT (AsciiStr != NULL);\r
     UnicodeStrToAsciiStr (ValueStr, AsciiStr);\r
     CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.EncKey,  AsciiStr, EncKeyLength);\r
     FreePool (AsciiStr);\r
     UnicodeStrToAsciiStr (ValueStr, AsciiStr);\r
     CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.EncKey,  AsciiStr, EncKeyLength);\r
     FreePool (AsciiStr);\r
@@ -813,6 +814,7 @@ CreateSadEntry (
   if (ValueStr != NULL) {\r
     (*Data)->AlgoInfo.EspAlgoInfo.AuthKeyLength = AuthKeyLength;\r
     AsciiStr = AllocateZeroPool (AuthKeyLength + 1);\r
   if (ValueStr != NULL) {\r
     (*Data)->AlgoInfo.EspAlgoInfo.AuthKeyLength = AuthKeyLength;\r
     AsciiStr = AllocateZeroPool (AuthKeyLength + 1);\r
+    ASSERT (AsciiStr != NULL);\r
     UnicodeStrToAsciiStr (ValueStr, AsciiStr);\r
     CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.AuthKey, AsciiStr, AuthKeyLength);\r
     FreePool (AsciiStr);\r
     UnicodeStrToAsciiStr (ValueStr, AsciiStr);\r
     CopyMem ((*Data)->AlgoInfo.EspAlgoInfo.AuthKey, AsciiStr, AuthKeyLength);\r
     FreePool (AsciiStr);\r
@@ -913,7 +915,7 @@ CreateSadEntry (
   }\r
 \r
   //\r
   }\r
 \r
   //\r
-  // Convert user imput from string to integer, and fill in the DestAddress in EFI_IPSEC_SA_ID.\r
+  // Convert user input from string to integer, and fill in the DestAddress in EFI_IPSEC_SA_ID.\r
   //\r
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--tunnel-source");\r
   if (ValueStr != NULL) {\r
   //\r
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--tunnel-source");\r
   if (ValueStr != NULL) {\r
@@ -934,10 +936,28 @@ CreateSadEntry (
       *Mask |= SOURCE;\r
     }\r
   }\r
       *Mask |= SOURCE;\r
     }\r
   }\r
+\r
+  //\r
+  // If it is TunnelMode, then check if the tunnel-source and --tunnel-dest are set\r
+  //\r
+  if ((*Data)->Mode == EfiIPsecTunnel) {\r
+    if ((*Mask & (DEST|SOURCE)) != (DEST|SOURCE)) {\r
+      ShellPrintHiiEx (\r
+        -1,\r
+        -1,\r
+        NULL,\r
+        STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_ONE_OF_PARAMETERS),\r
+        mHiiHandle,\r
+        mAppName,\r
+        L"--tunnel-source --tunnel-dest"\r
+        );\r
+      ReturnStatus = EFI_INVALID_PARAMETER;\r
+    }\r
+  }\r
   ReturnStatus = CreateSpdSelector ((*Data)->SpdSelector, ParamPackage, Mask);\r
 \r
   if (CreateNew) {\r
   ReturnStatus = CreateSpdSelector ((*Data)->SpdSelector, ParamPackage, Mask);\r
 \r
   if (CreateNew) {\r
-    if ((*Mask & (SPI | IPSEC_PROTO )) != (SPI | IPSEC_PROTO )) {\r
+    if ((*Mask & (SPI|IPSEC_PROTO|LOCAL|REMOTE)) != (SPI|IPSEC_PROTO|LOCAL|REMOTE)) {\r
       ShellPrintHiiEx (\r
         -1,\r
         -1,\r
       ShellPrintHiiEx (\r
         -1,\r
         -1,\r
@@ -945,7 +965,7 @@ CreateSadEntry (
         STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_ONE_OF_PARAMETERS),\r
         mHiiHandle,\r
         mAppName,\r
         STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_ONE_OF_PARAMETERS),\r
         mHiiHandle,\r
         mAppName,\r
-        L"--spi --ipsec-proto --dest"\r
+        L"--spi --ipsec-proto --local --remote"\r
         );\r
       ReturnStatus = EFI_INVALID_PARAMETER;\r
     } else {\r
         );\r
       ReturnStatus = EFI_INVALID_PARAMETER;\r
     } else {\r
@@ -974,7 +994,7 @@ CreateSadEntry (
           ReturnStatus = EFI_INVALID_PARAMETER;\r
         }\r
       } else {\r
           ReturnStatus = EFI_INVALID_PARAMETER;\r
         }\r
       } else {\r
-        if ((*Mask & ENCRYPT_ALGO) == 0) {\r
+        if ((*Mask & (ENCRYPT_ALGO|AUTH_ALGO)) != (ENCRYPT_ALGO|AUTH_ALGO) ) {\r
           ShellPrintHiiEx (\r
             -1,\r
             -1,\r
           ShellPrintHiiEx (\r
             -1,\r
             -1,\r
@@ -982,7 +1002,7 @@ CreateSadEntry (
             STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_PARAMETER),\r
             mHiiHandle,\r
             mAppName,\r
             STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_PARAMETER),\r
             mHiiHandle,\r
             mAppName,\r
-            L"--encrypt-algo"\r
+            L"--encrypt-algo --auth-algo"\r
             );\r
           ReturnStatus = EFI_INVALID_PARAMETER;\r
         } else if ((*Data)->AlgoInfo.EspAlgoInfo.EncAlgoId != IPSEC_EALG_NONE && (*Mask & ENCRYPT_KEY) == 0) {\r
             );\r
           ReturnStatus = EFI_INVALID_PARAMETER;\r
         } else if ((*Data)->AlgoInfo.EspAlgoInfo.EncAlgoId != IPSEC_EALG_NONE && (*Mask & ENCRYPT_KEY) == 0) {\r
@@ -996,6 +1016,17 @@ CreateSadEntry (
             L"--encrypt-key"\r
             );\r
           ReturnStatus = EFI_INVALID_PARAMETER;\r
             L"--encrypt-key"\r
             );\r
           ReturnStatus = EFI_INVALID_PARAMETER;\r
+        } else if ((*Data)->AlgoInfo.EspAlgoInfo.AuthAlgoId != IPSEC_AALG_NONE && (*Mask & AUTH_KEY) == 0) {\r
+          ShellPrintHiiEx (\r
+            -1,\r
+            -1,\r
+            NULL,\r
+            STRING_TOKEN (STR_IPSEC_CONFIG_MISSING_PARAMETER),\r
+            mHiiHandle,\r
+            mAppName,\r
+            L"--auth-key"\r
+            );\r
+          ReturnStatus = EFI_INVALID_PARAMETER;\r
         }\r
       }\r
     }\r
         }\r
       }\r
     }\r
@@ -1073,7 +1104,7 @@ CreatePadEntry (
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--peer-id");\r
   if (ValueStr != NULL) {\r
     (*PadId)->PeerIdValid = TRUE;\r
   ValueStr = ShellCommandLineGetValue (ParamPackage, L"--peer-id");\r
   if (ValueStr != NULL) {\r
     (*PadId)->PeerIdValid = TRUE;\r
-    StrnCpy ((CHAR16 *) (*PadId)->Id.PeerId, ValueStr, ARRAY_SIZE ((*PadId)->Id.PeerId) - 1);\r
+    StrnCpyS ((CHAR16 *) (*PadId)->Id.PeerId, MAX_PEERID_LEN / sizeof (CHAR16), ValueStr, MAX_PEERID_LEN / sizeof (CHAR16) - 1);\r
     *Mask |= PEER_ID;\r
   }\r
 \r
     *Mask |= PEER_ID;\r
   }\r
 \r
@@ -1368,7 +1399,7 @@ CombineSpdEntry (
   // Process Data\r
   //\r
   if ((Mask & NAME) != 0) {\r
   // Process Data\r
   //\r
   if ((Mask & NAME) != 0) {\r
-    AsciiStrCpy ((CHAR8 *) OldData->Name, (CHAR8 *) NewData->Name);\r
+    AsciiStrCpyS ((CHAR8 *) OldData->Name, MAX_PEERID_LEN, (CHAR8 *) NewData->Name);\r
   }\r
 \r
   if ((Mask & PACKET_FLAG) != 0) {\r
   }\r
 \r
   if ((Mask & PACKET_FLAG) != 0) {\r