diff options
author | Tobias Klauser <tklauser@distanz.ch> | 2008-01-27 11:37:44 +0100 |
---|---|---|
committer | Tobias Klauser <tklauser@xenon.tklauser.home> | 2008-01-27 11:37:44 +0100 |
commit | 7e0f021a9aec35fd8e6725e87e3313b101d26f5e (patch) | |
tree | b1cacc4b24393f517aeb4610e9e1021f954307a8 /reference/C/EXAMPLES/setuid.c |
Initial import (2.0.2-6)2.0.2-6
Diffstat (limited to 'reference/C/EXAMPLES/setuid.c')
-rw-r--r-- | reference/C/EXAMPLES/setuid.c | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/reference/C/EXAMPLES/setuid.c b/reference/C/EXAMPLES/setuid.c new file mode 100644 index 0000000..bce4a3d --- /dev/null +++ b/reference/C/EXAMPLES/setuid.c @@ -0,0 +1,47 @@ +#include <sys/types.h> +#include <unistd.h> +main() +{ + + /* Identify the person logged in (real ID). */ + + printf("getuid = %d\n", getuid()); + + /* Get the ID in use by this process (effective ID). + * Normally this is the same as above but if the program is: + * + * o Owned by root (chown root progname). + * o Had 'Set owner' set in the permissions (chmod u+s progname). + * o The disk is not mounted 'nosetuid'. + * + * We can use 'setuid' and 'seteuid'. + */ + + printf("geteuid = %d\n", geteuid()); + + (!geteuid()) + ? + puts("setuid//setruid/seteuid will work.") + : + puts("setuid/setruid/seteuid will fail."); + + /* 0 = OK + * -1 = Fail + */ +/* + printf("seteuid return code = %d\n", seteuid(3570)); + + printf("getuid = %d\n", getuid()); + printf("geteuid = %d\n", geteuid()); + + printf("seteuid return code = %d\n", seteuid(0)); + + printf("getuid = %d\n", getuid()); + printf("geteuid = %d\n", geteuid()); +*/ + + printf("setuid return code = %d\n", setuid(4261)); + + printf("getuid = %d\n", getuid()); + printf("geteuid = %d\n", geteuid()); +} |