/** @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 - 2016, 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
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
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
}\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
*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
- 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
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
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
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
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
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
//\r
// Process Data\r
//\r
+ OldData->SaIdCount = 0;\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
&CreateNew\r
);\r
if (!EFI_ERROR (Status)) {\r
+ //\r
+ // If the Selector already existed, this Entry will be updated by set data.\r
+ //\r
+ Status = mIpSecConfig->SetData (\r
+ mIpSecConfig,\r
+ Context->DataType,\r
+ Context->Selector, /// New created selector.\r
+ Data, /// Old date which has been modified, need to be set data.\r
+ Selector\r
+ );\r
+ ASSERT_EFI_ERROR (Status);\r
+ \r
if (CreateNew) {\r
//\r
- // Insert new entry before old entry\r
- //\r
- Status = mIpSecConfig->SetData (\r
- mIpSecConfig,\r
- Context->DataType,\r
- Context->Selector,\r
- Data,\r
- Selector\r
- );\r
- ASSERT_EFI_ERROR (Status);\r
- //\r
- // Delete old entry\r
+ // Edit the entry to a new one. So, we need delete the old entry.\r
//\r
Status = mIpSecConfig->SetData (\r
mIpSecConfig,\r
Context->DataType,\r
- Selector,\r
- NULL,\r
+ Selector, /// Old selector.\r
+ NULL, /// NULL means to delete this Entry specified by Selector.\r
NULL\r
);\r
ASSERT_EFI_ERROR (Status);\r
- } else {\r
- Status = mIpSecConfig->SetData (\r
- mIpSecConfig,\r
- Context->DataType,\r
- Context->Selector,\r
- Data,\r
- NULL\r
- );\r
}\r
}\r
\r