--- /dev/null
+#include <stdio.h>
+#include <sys/types.h>
+#include <ctype.h>
+#include <limits.h>
+
+
+int main(int argc, char **argv) {
+
+ long a = LONG_MAX-10;
+ unsigned long b = a;
+ long c = b;
+
+ printf("a=%ld %lu %lx b=%ld %lu %lx c=%ld %lu %lx LONG_MAX=%ld %lu %lx ULONG_MAX=%ld %lu %lx\n", a,a,a,b,b,b,c,c,c,LONG_MAX,LONG_MAX,LONG_MAX,ULONG_MAX,ULONG_MAX,ULONG_MAX);
+
+}
--- /dev/null
+#include <sys/types.h>
+#include <unistd.h>
+#include <stdio.h>
+
+// if run as user and suid fcron sgid fcron: can set(e)uid() from/to user/fcron back and forth
+// if run as root and suid fcron sgid fcron: can seteuid() from/to root/fcron back and forth BUT CANNOT setuid back to root
+// if run as user and suid root sgid root: can seteuid() from/to root/fcron back and forth BUT CANNOT setuid back to root
+// if run as root and suid root sgid root: can set(e)uid() from/to user/fcron back and forth (i.e. always stay uid/euid 0!)
+
+
+int main(int argc, char *argv[]) {
+ uid_t uid = getuid();
+ uid_t euid = geteuid();
+ gid_t gid = getgid();
+ gid_t egid = getegid();
+
+ printf("=== uid=%d gid=%d euid=%d egid=%d\n", getuid(), getgid(), geteuid(), getegid());
+
+ printf("seteuid(uid)\n");
+ if ( seteuid(uid) < 0 ) return 1;
+ printf("=== uid=%d gid=%d euid=%d egid=%d\n", getuid(), getgid(), geteuid(), getegid());
+
+ printf("seteuid(euid)\n");
+ if ( seteuid(euid) < 0 ) return 1;
+ printf("=== uid=%d gid=%d euid=%d egid=%d\n", getuid(), getgid(), geteuid(), getegid());
+
+ printf("seteuid(uid)\n");
+ if ( seteuid(uid) < 0 ) return 1;
+ printf("=== uid=%d gid=%d euid=%d egid=%d\n", getuid(), getgid(), geteuid(), getegid());
+
+ printf("seteuid(euid)\n");
+ if ( seteuid(euid) < 0 ) return 1;
+ printf("=== uid=%d gid=%d euid=%d egid=%d\n", getuid(), getgid(), geteuid(), getegid());
+
+ printf("setuid(uid)\n");
+ if ( setuid(uid) < 0 ) return 1;
+ printf("=== uid=%d gid=%d euid=%d egid=%d\n", getuid(), getgid(), geteuid(), getegid());
+
+ printf("setuid(euid)\n");
+ if ( setuid(euid) < 0 ) return 1;
+ printf("=== uid=%d gid=%d euid=%d egid=%d\n", getuid(), getgid(), geteuid(), getegid());
+
+ printf("setuid(uid)\n");
+ if ( setuid(uid) < 0 ) return 1;
+ printf("=== uid=%d gid=%d euid=%d egid=%d\n", getuid(), getgid(), geteuid(), getegid());
+
+ printf("setuid(euid)\n");
+ if ( setuid(euid) < 0 ) return 1;
+ printf("=== uid=%d gid=%d euid=%d egid=%d\n", getuid(), getgid(), geteuid(), getegid());
+
+
+ printf("=== DONE\n");
+
+ return 0;
+
+}
+