Mercurial > trustbridge
changeset 323:31ba7ed4d50f
Made is_elevated portable.
author | Sascha Wilde <wilde@intevation.de> |
---|---|
date | Mon, 07 Apr 2014 13:20:34 +0200 |
parents | e30c9fee111a |
children | eff8e7ce4dae |
files | common/util.c common/util.h |
diffstat | 2 files changed, 28 insertions(+), 23 deletions(-) [+] |
line wrap: on
line diff
--- a/common/util.c Mon Apr 07 13:11:48 2014 +0200 +++ b/common/util.c Mon Apr 07 13:20:34 2014 +0200 @@ -1,26 +1,32 @@ #include "util.h" -#ifdef WIN32 +#ifndef _WIN32 +#include <unistd.h> +#include <sys/types.h> +#else #include <windows.h> #endif -#ifdef WIN32 bool -is_elevated() { - HANDLE hToken = NULL; - bool ret = false; - if (OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &hToken)) - { - DWORD elevation; - DWORD cbSize = sizeof (DWORD); - if (GetTokenInformation (hToken, TokenElevation, &elevation, - sizeof (TokenElevation), &cbSize)) - { - ret = elevation; - } - } - if (hToken) - CloseHandle (hToken); +is_elevated() +{ + bool ret = false; +#ifndef _WIN32 + ret = (geteuid() == 0); +#else + HANDLE hToken = NULL; + if (OpenProcessToken (GetCurrentProcess(), TOKEN_QUERY, &hToken)) + { + DWORD elevation; + DWORD cbSize = sizeof (DWORD); + if (GetTokenInformation (hToken, TokenElevation, &elevation, + sizeof (TokenElevation), &cbSize)) + { + ret = elevation; + } + } + if (hToken) + CloseHandle (hToken); +#endif + return ret; +} - return ret; -} -#endif
--- a/common/util.h Mon Apr 07 13:11:48 2014 +0200 +++ b/common/util.h Mon Apr 07 13:20:34 2014 +0200 @@ -5,13 +5,12 @@ */ #include <stdbool.h> -#ifdef WIN32 /**@brief Check if the current process is running with elevated privileges. * * Elevates the current process token to check if it is marked as elevated. - * Uses TokenElevation. + * Uses TokenElevation on windows and checks effective UID on Linux. * * @returns true if the current process is elevated.*/ bool is_elevated(); -#endif + #endif // COMMON_UTIL_H