Merge branch 'master' into 'master'

Add support for multiple privileges file

Fixes MER#1607

See merge request !2
pull/1/head
chriadam 9 years ago
commit 84ba4c7960

@ -37,6 +37,7 @@
#include <sstream>
#include <stdexcept>
#include <syslog.h>
#include <dirent.h>
#include <fstream>
@ -327,7 +328,7 @@ void Booster::renameProcess(int parentArgc, char** parentArgv,
}
}
static bool isPrivileged(AppData *appData)
static bool isPrivileged(AppData *appData, const char *path)
{
/*
Returns true if privileged, false if not privileged.
@ -342,9 +343,7 @@ static bool isPrivileged(AppData *appData)
Comment lines start with # and are ignored.
*/
const char *BOOSTER_APP_PRIVILEGES_LIST = "/usr/share/mapplauncherd/privileges";
std::ifstream infile(BOOSTER_APP_PRIVILEGES_LIST);
std::ifstream infile(path);
if (infile) {
std::string line;
while (std::getline(infile, line)) {
@ -370,6 +369,38 @@ static bool isPrivileged(AppData *appData)
return false;
}
static bool isPrivileged(AppData *appData)
{
/*
Return true if privileged, false if not privileged.
This function checks the standard paths to find privileges definition file.
First it will check
/usr/share/mapplauncherd/privileges
And then, any file in
/usr/share/mapplauncherd/privileges.d/
*/
static const char *BOOSTER_APP_PRIVILEGES_LIST = "/usr/share/mapplauncherd/privileges";
static const char *BOOSTER_APP_PRIVILEGES_DIR = "/usr/share/mapplauncherd/privileges.d";
if (isPrivileged(appData, BOOSTER_APP_PRIVILEGES_LIST))
return true;
DIR *privilegesDir = opendir(BOOSTER_APP_PRIVILEGES_DIR);
if (!privilegesDir)
return false;
bool privileged = false;
dirent *dir = NULL;
while ((dir = readdir(privilegesDir)) && !privileged) {
std::string privilegesFile (BOOSTER_APP_PRIVILEGES_DIR);
privilegesFile += "/";
privilegesFile += dir->d_name;
privileged = isPrivileged(appData, privilegesFile.c_str());
}
closedir(privilegesDir);
return privileged;
}
void Booster::setEnvironmentBeforeLaunch()
{
// Possibly restore process priority

Loading…
Cancel
Save