Mercurial > trustbridge
comparison cinst/nssstore_win.c @ 363:d10d9bc2e84f
Update Windows api usage. Warning: To build on windows you need
a shell32.dll with SHGetKnownFolder
author | Andre Heinecke <aheinecke@intevation.de> |
---|---|
date | Mon, 14 Apr 2014 16:57:41 +0000 |
parents | c0eac5c8c245 |
children | cbd0c1c20b30 |
comparison
equal
deleted
inserted
replaced
362:857ae1ffdd6f | 363:d10d9bc2e84f |
---|---|
156 */ | 156 */ |
157 | 157 |
158 cmd_line_len = wcslen (lpApplicationName) + wcslen(selection_file) + 1; | 158 cmd_line_len = wcslen (lpApplicationName) + wcslen(selection_file) + 1; |
159 lpCommandLine = xmalloc (cmd_line_len * sizeof(wchar_t)); | 159 lpCommandLine = xmalloc (cmd_line_len * sizeof(wchar_t)); |
160 | 160 |
161 wcscpy (lpCommandLine, lpApplicationName); | 161 wcscpy_s (lpCommandLine, cmd_line_len, lpApplicationName); |
162 wcscat (lpCommandLine, selection_file); | 162 wcscat_s (lpCommandLine, cmd_line_len, selection_file); |
163 | 163 |
164 success = CreateProcessAsUserW (hToken, | 164 success = CreateProcessAsUserW (hToken, |
165 lpApplicationName, | 165 lpApplicationName, |
166 lpCommandLine, /* Commandline */ | 166 lpCommandLine, /* Commandline */ |
167 NULL, /* Process attributes. Take hToken */ | 167 NULL, /* Process attributes. Take hToken */ |
199 /**@brief Create a directory with restricted access rights | 199 /**@brief Create a directory with restricted access rights |
200 * | 200 * |
201 * This creates a security attributes structure that restricts | 201 * This creates a security attributes structure that restricts |
202 * write access to the Administrators group but allows everyone to read files | 202 * write access to the Administrators group but allows everyone to read files |
203 * in that directory. | 203 * in that directory. |
204 * Basically a very complicated vetrsion of mkdir path -m 604 | 204 * Basically a very complicated version of mkdir path -m 644 |
205 * | 205 * |
206 * If the directory exists the permissions of that directory are checked if | 206 * If the directory exists the permissions of that directory are checked if |
207 * they are acceptable and true or false is returned accordingly. | 207 * they are acceptable and true or false is returned accordingly. |
208 * | 208 * |
209 * Code based on msdn example: | 209 * Code based on msdn example: |
363 if (!elevated) | 363 if (!elevated) |
364 { | 364 { |
365 /* TODO */ | 365 /* TODO */ |
366 } | 366 } |
367 | 367 |
368 #if 0 | 368 result = SHGetKnownFolderPath (&FOLDERID_ProgramData, /* Get program data dir */ |
369 result = SHGetKnownFolderPath (FOLDERID_ProgramData, /* Get program data dir */ | |
370 KF_FLAG_CREATE | /* Create if it does not exist */ | 369 KF_FLAG_CREATE | /* Create if it does not exist */ |
371 KF_FLAG_INIT, /* Initialize it if created */ | 370 KF_FLAG_INIT, /* Initialize it if created */ |
372 -1, /* Get it for the default user */ | 371 INVALID_HANDLE_VALUE, /* Get it for the default user */ |
373 &folder_name); | 372 &folder_name); |
374 #endif | |
375 /* TODO figure out how to do this with mingw */ | |
376 result = S_OK; | |
377 folder_name = L"C:\\ProgramData"; | |
378 | 373 |
379 if (result != S_OK) | 374 if (result != S_OK) |
380 { | 375 { |
381 PRINTLASTERROR ("Failed to get folder path"); | 376 PRINTLASTERROR ("Failed to get folder path"); |
382 return NULL; | 377 return NULL; |
392 ERRORPRINTF ("Path too long.\n"); | 387 ERRORPRINTF ("Path too long.\n"); |
393 return NULL; | 388 return NULL; |
394 } | 389 } |
395 | 390 |
396 path = xmalloc (path_len * sizeof (wchar_t)); | 391 path = xmalloc (path_len * sizeof (wchar_t)); |
397 if (wcscpy (path, folder_name) != 0) | 392 if (wcscpy_s (path, path_len, folder_name) != 0) |
398 { | 393 { |
399 ERRORPRINTF ("Failed to copy folder name.\n"); | 394 ERRORPRINTF ("Failed to copy folder name.\n"); |
400 #if 0 | 395 |
401 CoTaskMemFree (folder_name); | 396 CoTaskMemFree (folder_name); |
402 #endif | 397 |
403 return NULL; | 398 return NULL; |
404 } | 399 } |
405 | 400 |
406 #if 0 | 401 #if 0 |
407 CoTaskMemFree (folder_name); | 402 CoTaskMemFree (folder_name); |
408 #endif | 403 #endif |
409 | 404 |
410 if (wcscat (path, L"\\") != 0) | 405 if (wcscat_s (path, path_len, L"\\") != 0) |
411 { | 406 { |
412 ERRORPRINTF ("Failed to cat dirsep.\n"); | 407 ERRORPRINTF ("Failed to cat dirsep.\n"); |
413 xfree(path); | 408 xfree(path); |
414 return NULL; | 409 return NULL; |
415 } | 410 } |
416 | 411 |
417 if (wcscat (path, APPNAME) != 0) | 412 if (wcscat_s (path, path_len, APPNAME) != 0) |
418 { | 413 { |
419 ERRORPRINTF ("Failed to cat appname.\n"); | 414 ERRORPRINTF ("Failed to cat appname.\n"); |
420 xfree(path); | 415 xfree(path); |
421 return NULL; | 416 return NULL; |
422 } | 417 } |
430 ERRORPRINTF ("Failed to create directory\n"); | 425 ERRORPRINTF ("Failed to create directory\n"); |
431 xfree(path); | 426 xfree(path); |
432 return NULL; | 427 return NULL; |
433 } | 428 } |
434 | 429 |
435 if (wcscat (path, L"\\") != 0) | 430 if (wcscat_s (path, path_len, L"\\") != 0) |
436 { | 431 { |
437 ERRORPRINTF ("Failed to cat dirsep.\n"); | 432 ERRORPRINTF ("Failed to cat dirsep.\n"); |
438 xfree(path); | 433 xfree(path); |
439 return NULL; | 434 return NULL; |
440 } | 435 } |
441 | 436 |
442 if (wcscat (path, SELECTION_FILE_NAME) != 0) | 437 if (wcscat_s (path, path_len, SELECTION_FILE_NAME) != 0) |
443 { | 438 { |
444 ERRORPRINTF ("Failed to cat filename.\n"); | 439 ERRORPRINTF ("Failed to cat filename.\n"); |
445 xfree(path); | 440 xfree(path); |
446 return NULL; | 441 return NULL; |
447 } | 442 } |