Merge pull request #2675 from lambdageek/dev/monoerror-mono_string_intern
[mono.git] / mono / io-layer / security.c
1 /*
2  * security.c:  Security
3  *
4  * Author:
5  *      Sebastien Pouliot  <sebastien@ximian.com>
6  *
7  * (C) 2004 Novell (http://www.novell.com)
8  */
9
10 #include <config.h>
11 #include <mono/io-layer/io-layer.h>
12
13 #ifdef HAVE_PWD_H
14 #include <pwd.h>
15 #endif
16
17 #include <string.h>
18 #include <sys/types.h>
19 #include <sys/stat.h>
20 #include <unistd.h>
21
22 gboolean 
23 ImpersonateLoggedOnUser (gpointer handle)
24 {
25         uid_t token = (uid_t) GPOINTER_TO_INT (handle);
26 #ifdef HAVE_SETRESUID
27         if (setresuid (-1, token, getuid ()) < 0)
28                 return FALSE;
29 #endif
30         return (geteuid () == token);
31 }
32
33
34 gboolean RevertToSelf (void)
35 {
36 #ifdef HAVE_GETRESUID
37         uid_t ruid, euid;
38 #endif
39         uid_t suid = -1;
40
41 #ifdef HAVE_GETRESUID
42         if (getresuid (&ruid, &euid, &suid) < 0)
43                 return FALSE;
44 #endif
45 #ifdef HAVE_SETRESUID
46         if (setresuid (-1, suid, -1) < 0)
47                 return FALSE;
48 #else
49         return TRUE;
50 #endif
51         return (geteuid () == suid);
52 }
53