diff common/util.c @ 323:31ba7ed4d50f

Made is_elevated portable.
author Sascha Wilde <wilde@intevation.de>
date Mon, 07 Apr 2014 13:20:34 +0200
parents 824ef90a6721
children 64e38886f903
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

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