]> granicus.if.org Git - fcron/commitdiff
Added test programs -- some could later be used as basis for unit-tests
authorThibault Godouet <fcron@free.fr>
Sun, 10 Apr 2011 13:57:17 +0000 (14:57 +0100)
committerThibault Godouet <fcron@free.fr>
Sun, 10 Apr 2011 13:57:17 +0000 (14:57 +0100)
.gitignore
tests/test-open [new file with mode: 0755]
tests/test-open.c [new file with mode: 0644]
tests/test-types [new file with mode: 0755]
tests/test-types.c [new file with mode: 0644]
tests/test-uidgid [new file with mode: 0755]
tests/test-uidgid.c [new file with mode: 0644]

index 93a7e3ab652d1d048a557445e57ec9fd997183bd..241d8c89bd553edf6aca589c05e31e63cedcb038 100644 (file)
@@ -26,3 +26,7 @@ doc/fr/HTML/*
 doc/fr/man/*
 doc/fr/txt/*
 configure
+tests/test-open*
+tests/test-types*
+tests/test-uidgid*
+
diff --git a/tests/test-open b/tests/test-open
new file mode 100755 (executable)
index 0000000..d134d2a
Binary files /dev/null and b/tests/test-open differ
diff --git a/tests/test-open.c b/tests/test-open.c
new file mode 100644 (file)
index 0000000..349d0a9
--- /dev/null
@@ -0,0 +1,13 @@
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <errno.h>
+
+int main(int argc, char *argv[]) {
+    int fd;
+    if ( (fd = open("/tmp/test", O_RDWR | O_CREAT, (mode_t) 0)) < 0 )
+        perror("open()");
+
+    return 0;
+}
diff --git a/tests/test-types b/tests/test-types
new file mode 100755 (executable)
index 0000000..85b70d8
Binary files /dev/null and b/tests/test-types differ
diff --git a/tests/test-types.c b/tests/test-types.c
new file mode 100644 (file)
index 0000000..c3802cd
--- /dev/null
@@ -0,0 +1,15 @@
+#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);
+
+}
diff --git a/tests/test-uidgid b/tests/test-uidgid
new file mode 100755 (executable)
index 0000000..1c9e279
Binary files /dev/null and b/tests/test-uidgid differ
diff --git a/tests/test-uidgid.c b/tests/test-uidgid.c
new file mode 100644 (file)
index 0000000..56d1d1a
--- /dev/null
@@ -0,0 +1,57 @@
+#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;
+
+}
+