# HG changeset patch # User Andre Heinecke # Date 1405961561 -7200 # Node ID 24e1e47e2d1aa00a67d116793173038533798f92 # Parent a511c1f45c707905df2bf0d210dba685873082e0 Start NSS process only from the current installation directory diff -r a511c1f45c70 -r 24e1e47e2d1a cinst/nssstore_win.c --- a/cinst/nssstore_win.c Mon Jul 21 18:51:34 2014 +0200 +++ b/cinst/nssstore_win.c Mon Jul 21 18:52:41 2014 +0200 @@ -664,14 +664,15 @@ static bool start_procces_for_user (wchar_t *selection_file) { - HANDLE hToken = NULL;/*, - hChildToken = NULL;*/ - /* TODO get this as absolute path based on current module location */ - LPWSTR lpApplicationName = L"mozilla.exe", - lpCommandLine; + HANDLE hToken = NULL; + LPWSTR lpApplicationPath = NULL, + lpCommandLine = NULL; PROCESS_INFORMATION piProcInfo = {0}; STARTUPINFOW siStartInfo = {0}; BOOL success = FALSE; + char *install_dir = get_install_dir(); + wchar_t *w_inst_dir; + size_t w_path_len = 0; if (!selection_file) { @@ -679,6 +680,24 @@ return false; } + /* Set up the application path. It's installdir + NSS_APP_NAME */ + if (install_dir == NULL) + { + ERRORPRINTF ("Failed to get installation directory"); + return FALSE; + } + + w_inst_dir = utf8_to_wchar (install_dir, strlen(install_dir)); + xfree (install_dir); + install_dir = NULL; + + w_path_len = wcslen(w_inst_dir) + wcslen(L"\\" NSS_APP_NAME) + 1; + lpApplicationPath = xmalloc(w_path_len * sizeof (wchar_t)); + wcscpy_s (lpApplicationPath, w_path_len, w_inst_dir); + xfree (w_inst_dir); + w_inst_dir = NULL; + wcscat_s (lpApplicationPath, w_path_len, L"\\" NSS_APP_NAME); + /* set up handles. stdin and stdout go to the same stdout*/ siStartInfo.cb = sizeof (STARTUPINFO); @@ -695,6 +714,7 @@ else if(!OpenProcessToken(GetCurrentProcess(), TOKEN_ALL_ACCESS, &hToken)) { PRINTLASTERROR("Failed to get current handle."); + xfree (lpApplicationPath); return false; } @@ -703,13 +723,14 @@ if (lpCommandLine == NULL) { ERRORPRINTF ("Failed to build command line."); + xfree (lpApplicationPath); return false; } - DEBUGPRINTF ("Starting %S with command line %S\n", lpApplicationName, lpCommandLine); + DEBUGPRINTF ("Starting %S with command line %S\n", lpApplicationPath, lpCommandLine); success = CreateProcessAsUserW (hToken, - lpApplicationName, + lpApplicationPath, lpCommandLine, /* Commandline */ NULL, /* Process attributes. Take hToken */ NULL, /* Thread attribues. Take hToken */ @@ -719,6 +740,7 @@ NULL, /* Current working directory */ &siStartInfo, &piProcInfo); + xfree (lpApplicationPath); xfree (lpCommandLine); if (!success) {