summaryrefslogtreecommitdiff
path: root/reference/C/EXAMPLES/setuid.c
diff options
context:
space:
mode:
Diffstat (limited to 'reference/C/EXAMPLES/setuid.c')
-rw-r--r--reference/C/EXAMPLES/setuid.c47
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());
+}