Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 40723)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageHelp.cpp	(revision 40724)
@@ -321,5 +321,5 @@
                      "                            [--teleporteraddress <address|empty>\n"
                      "                            [--teleporterpassword <password>]\n"
-                     "                            [--teleporterpasswordfrom  <file>]\n"
+                     "                            [--teleporterpasswordfrom  <file>|-]\n"
                      "                            [--tracing-enabled on|off]\n"
                      "                            [--tracing-config <config-string>]\n"
Index: /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp
===================================================================
--- /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 40723)
+++ /trunk/src/VBox/Frontends/VBoxManage/VBoxManageModifyVM.cpp	(revision 40724)
@@ -2217,16 +2217,30 @@
             {
                 size_t cbFile;
-                char *pszFileBuf;
-                int vrc = RTFileReadAll(ValueUnion.psz, (void**)&pszFileBuf, &cbFile);
+                char szPasswd[512];
+                int vrc = VINF_SUCCESS;
+                bool fStdIn = !strcmp(ValueUnion.psz, "-");
+                PRTSTREAM pStrm;
+                if (!fStdIn)
+                    vrc = RTStrmOpen(ValueUnion.psz, "r", &pStrm);
+                else
+                    pStrm = g_pStdIn;
                 if (RT_SUCCESS(vrc))
                 {
-                    char szPasswd[512];
-                    for (unsigned i = 0;
-                            i < cbFile
-                         && i < sizeof(szPasswd)-1
-                         && !RT_C_IS_CNTRL(pszFileBuf[i]); i++)
-                        szPasswd[i] = pszFileBuf[i];
-
-                    CHECK_ERROR(machine, COMSETTER(TeleporterPassword)(Bstr(szPasswd).raw()));
+                    vrc = RTStrmReadEx(pStrm, szPasswd, sizeof(szPasswd)-1, &cbFile);
+                    if (RT_SUCCESS(vrc))
+                    {
+                        if (cbFile >= sizeof(szPasswd)-1)
+                            errorArgument("Provided password too long");
+                        else
+                        {
+                            unsigned i;
+                            for (i = 0; i < cbFile && !RT_C_IS_CNTRL(szPasswd[i]); i++)
+                                ;
+                            szPasswd[i] = '\0';
+                            CHECK_ERROR(machine, COMSETTER(TeleporterPassword)(Bstr(szPasswd).raw()));
+                        }
+                    }
+                    if (!fStdIn)
+                        RTStrmClose(pStrm);
                 }
                 else
