Mercurial > trustbridge
diff common/util.c @ 1306:845048d4a69f
(issue159) Use user specific appdata directory for nss list with simple rights.
Using the ProgramData folder with resticted access rights failed in case
the process was not elevated.
author | Andre Heinecke <andre.heinecke@intevation.de> |
---|---|
date | Mon, 13 Oct 2014 12:31:37 +0200 |
parents | 0a803c3fb5a6 |
children | 2bacaec6e101 |
line wrap: on
line diff
--- a/common/util.c Mon Sep 29 16:53:49 2014 +0200 +++ b/common/util.c Mon Oct 13 12:31:37 2014 +0200 @@ -511,14 +511,29 @@ get_program_data_folder () { wchar_t *folder_name = NULL; - if (SHGetKnownFolderPath (&FOLDERID_ProgramData, /* Get program data dir */ - KF_FLAG_CREATE | /* Create if it does not exist */ - KF_FLAG_INIT, /* Initialize it if created */ - INVALID_HANDLE_VALUE, /* Get it for the default user */ - &folder_name) != S_OK) + if (is_elevated()) { - PRINTLASTERROR ("Failed to get folder path"); - return NULL; + if (SHGetKnownFolderPath (&FOLDERID_ProgramData, /* Get program data dir */ + KF_FLAG_CREATE | /* Create if it does not exist */ + KF_FLAG_INIT, /* Initialize it if created */ + INVALID_HANDLE_VALUE, /* Get it for the default user */ + &folder_name) != S_OK) + { + PRINTLASTERROR ("Failed to get folder path"); + return NULL; + } + } + else + { + if (SHGetKnownFolderPath (&FOLDERID_LocalAppData, /* Get program data dir */ + KF_FLAG_CREATE | /* Create if it does not exist */ + KF_FLAG_INIT, /* Initialize it if created */ + NULL, /* Get it for the default user */ + &folder_name) != S_OK) + { + PRINTLASTERROR ("Failed to get folder path"); + return NULL; + } } return folder_name; }