]> git.proxmox.com Git - mirror_edk2.git/blobdiff - ShellPkg/Library/UefiShellNetwork1CommandsLib/Ifconfig.c
ShellPkg: Fix ifconfig hang issue with incomplete parameters
[mirror_edk2.git] / ShellPkg / Library / UefiShellNetwork1CommandsLib / Ifconfig.c
index fb6f57518422576e1d349fc3450906c5e6602333..f8dbc88cf84273fc96d896016c1f0fe721c17ad5 100644 (file)
@@ -828,6 +828,7 @@ IfConfigClearInterfaceInfo (
                             &Policy\r
                             );\r
     if (EFI_ERROR (Status)) {\r
+      ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");\r
       ShellStatus = SHELL_ACCESS_DENIED;\r
       break;\r
     }\r
@@ -904,6 +905,7 @@ IfConfigSetInterfaceInfo (
                   &TimeOutEvt\r
                   );\r
   if (EFI_ERROR (Status)) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");\r
     ShellStatus = SHELL_ACCESS_DENIED;\r
     goto ON_EXIT;\r
   }\r
@@ -916,6 +918,7 @@ IfConfigSetInterfaceInfo (
                   &MappedEvt\r
                   );\r
   if (EFI_ERROR (Status)) {\r
+    ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");\r
     ShellStatus = SHELL_ACCESS_DENIED;\r
     goto ON_EXIT;\r
   }\r
@@ -974,6 +977,7 @@ IfConfigSetInterfaceInfo (
       if (IfCb->Policy == Ip4Config2PolicyDhcp) {\r
         Status = IfConfigStartIp4 (IfCb->NicHandle, gImageHandle);\r
         if (EFI_ERROR(Status)) {\r
+          ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");\r
           ShellStatus = SHELL_ACCESS_DENIED;\r
           goto ON_EXIT;\r
         }\r
@@ -989,6 +993,7 @@ IfConfigSetInterfaceInfo (
                                 &Policy\r
                                 );\r
         if (EFI_ERROR(Status)) {\r
+          ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");\r
           ShellStatus = SHELL_ACCESS_DENIED;\r
           goto ON_EXIT;\r
         }\r
@@ -997,23 +1002,13 @@ IfConfigSetInterfaceInfo (
       VarArg= VarArg->Next;    \r
 \r
     } else if (StrCmp (VarArg->Arg, L"static") == 0) {\r
-      //\r
-      // Set manual config policy.\r
-      //\r
-      Policy = Ip4Config2PolicyStatic;\r
-      Status = IfCb->IfCfg->SetData (\r
-                              IfCb->IfCfg,\r
-                              Ip4Config2DataTypePolicy,\r
-                              sizeof (EFI_IP4_CONFIG2_POLICY),\r
-                              &Policy\r
-                              );\r
-      if (EFI_ERROR(Status)) {\r
-        ShellStatus = SHELL_ACCESS_DENIED;\r
+      VarArg= VarArg->Next;\r
+      if (VarArg == NULL) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle);\r
+        ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto ON_EXIT;\r
       }\r
 \r
-      VarArg= VarArg->Next;   \r
-\r
       ZeroMem (&ManualAddress, sizeof (ManualAddress));\r
     \r
       //\r
@@ -1021,6 +1016,7 @@ IfConfigSetInterfaceInfo (
       //\r
       Status = NetLibStrToIp4 (VarArg->Arg, &ManualAddress.Address);\r
       if (EFI_ERROR(Status)) {\r
+        ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto ON_EXIT;\r
       }\r
@@ -1029,8 +1025,15 @@ IfConfigSetInterfaceInfo (
       // Get subnetmask.\r
       //    \r
       VarArg = VarArg->Next;\r
+      if (VarArg == NULL) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle);\r
+        ShellStatus = SHELL_INVALID_PARAMETER;\r
+        goto ON_EXIT;\r
+      }\r
+      \r
       Status = NetLibStrToIp4 (VarArg->Arg, &ManualAddress.SubnetMask);\r
       if (EFI_ERROR(Status)) {\r
+        ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto ON_EXIT;\r
       }\r
@@ -1039,12 +1042,38 @@ IfConfigSetInterfaceInfo (
       // Get gateway.\r
       //\r
       VarArg = VarArg->Next;\r
+      if (VarArg == NULL) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_LACK_COMMAND), gShellNetwork1HiiHandle);\r
+        ShellStatus = SHELL_INVALID_PARAMETER;\r
+        goto ON_EXIT;\r
+      }\r
+      \r
       Status = NetLibStrToIp4 (VarArg->Arg, &Gateway);\r
       if (EFI_ERROR(Status)) {\r
+        ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, VarArg->Arg);\r
         ShellStatus = SHELL_INVALID_PARAMETER;\r
         goto ON_EXIT;\r
       }\r
+\r
+      //\r
+      // Set manual config policy.\r
+      //\r
+      Policy = Ip4Config2PolicyStatic;\r
+      Status = IfCb->IfCfg->SetData (\r
+                              IfCb->IfCfg,\r
+                              Ip4Config2DataTypePolicy,\r
+                              sizeof (EFI_IP4_CONFIG2_POLICY),\r
+                              &Policy\r
+                              );\r
+      if (EFI_ERROR(Status)) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");\r
+        ShellStatus = SHELL_ACCESS_DENIED;\r
+        goto ON_EXIT;\r
+      }\r
       \r
+      //\r
+      // Set Manual Address.\r
+      //\r
       IsAddressOk = FALSE;\r
 \r
       Status = IfCb->IfCfg->RegisterDataNotify (\r
@@ -1053,6 +1082,7 @@ IfConfigSetInterfaceInfo (
                               MappedEvt\r
                               );\r
       if (EFI_ERROR (Status)) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_SET_ADDR_FAILED), gShellNetwork1HiiHandle, Status);\r
         ShellStatus = SHELL_ACCESS_DENIED;\r
         goto ON_EXIT;\r
       }\r
@@ -1101,6 +1131,7 @@ IfConfigSetInterfaceInfo (
                               &Gateway\r
                               );\r
       if (EFI_ERROR (Status)) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_IFCONFIG_SET_ADDR_FAILED), gShellNetwork1HiiHandle, Status);\r
         ShellStatus = SHELL_ACCESS_DENIED;\r
         goto ON_EXIT;\r
       }\r
@@ -1126,6 +1157,7 @@ IfConfigSetInterfaceInfo (
       while (Tmp != NULL) {\r
         Status = NetLibStrToIp4 (Tmp->Arg, Dns + Index);\r
         if (EFI_ERROR(Status)) {\r
+          ShellPrintHiiEx(-1, -1, NULL,STRING_TOKEN (STR_IFCONFIG_INVALID_IPADDRESS), gShellNetwork1HiiHandle, Tmp->Arg);\r
           ShellStatus = SHELL_INVALID_PARAMETER;\r
           goto ON_EXIT;\r
         }\r
@@ -1147,6 +1179,7 @@ IfConfigSetInterfaceInfo (
                               Dns\r
                               );\r
       if (EFI_ERROR (Status)) {\r
+        ShellPrintHiiEx (-1, -1, NULL, STRING_TOKEN (STR_GEN_ERR_AD), gShellNetwork1HiiHandle, L"ifconfig");\r
         ShellStatus = SHELL_ACCESS_DENIED;\r
         goto ON_EXIT;\r
       }\r