From 41764f7b417b95f28f8fc0abfa6c139d2eac98bd Mon Sep 17 00:00:00 2001 From: Bill Zissimopoulos Date: Wed, 29 Jun 2016 13:05:15 -0700 Subject: [PATCH] launcher, launchctl: fixes --- src/launcher/launchctl.c | 9 +++++---- src/launcher/launcher.c | 7 ++++--- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/src/launcher/launchctl.c b/src/launcher/launchctl.c index d48f4399..e6a5e039 100644 --- a/src/launcher/launchctl.c +++ b/src/launcher/launchctl.c @@ -54,9 +54,10 @@ static void usage(void) "usage: %s COMMAND ARGS\n" "\n" "commands:\n" - " start ClassName InstanceName Args...\n" - " stop ClassName InstanceName\n" - " info ClassName InstanceName\n" + " start ClassName InstanceName Args...\n" + " startWithSecret ClassName InstanceName Args... Secret\n" + " stop ClassName InstanceName\n" + " info ClassName InstanceName\n" " list\n", PROGNAME); } @@ -237,7 +238,7 @@ int wmain(int argc, wchar_t **argv) else if (0 == lstrcmpW(L"startWithSecret", argv[0])) { - if (3 > argc || argc > 12) + if (4 > argc || argc > 13) usage(); return start(PipeBuf, LAUNCHER_PIPE_BUFFER_SIZE, argv[1], argv[2], argc - 3, argv + 3, diff --git a/src/launcher/launcher.c b/src/launcher/launcher.c index fd96db83..dee0c9d4 100644 --- a/src/launcher/launcher.c +++ b/src/launcher/launcher.c @@ -648,7 +648,9 @@ NTSTATUS SvcInstanceStart(HANDLE ClientToken, SVC_INSTANCE *SvcInstance; NTSTATUS Result; - HasSecret = HasSecret && 0 < Argc && L'\0' != Argv[Argc - 1][0]; + if (HasSecret && (0 == Argc || L'\0' == Argv[Argc - 1][0])) + return STATUS_INVALID_PARAMETER; + HasSecret = !!HasSecret; Result = SvcInstanceCreate(ClientToken, ClassName, InstanceName, Argc - HasSecret, Argv, Job, HasSecret, @@ -667,13 +669,12 @@ NTSTATUS SvcInstanceStart(HANDLE ClientToken, OVERLAPPED Overlapped; if (0 == (BytesTransferred = - WideCharToMultiByte(CP_UTF8, 0, Secret, -1, ReqBuf, sizeof ReqBuf, 0, 0))) + WideCharToMultiByte(CP_UTF8, 0, Secret, lstrlenW(Secret), ReqBuf, sizeof ReqBuf, 0, 0))) { Result = FspNtStatusFromWin32(GetLastError()); goto exit; } - /* also send the term-0 */ if (!WriteFile(SvcInstance->StdioHandles[0], ReqBuf, BytesTransferred, &BytesTransferred, 0)) { Result = FspNtStatusFromWin32(GetLastError());