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

http://wald.intevation.org/projects/trustbridge/