aboutsummaryrefslogtreecommitdiffstats
path: root/guts/setresuid.c
diff options
context:
space:
mode:
Diffstat (limited to 'guts/setresuid.c')
-rw-r--r--guts/setresuid.c34
1 files changed, 34 insertions, 0 deletions
diff --git a/guts/setresuid.c b/guts/setresuid.c
new file mode 100644
index 0000000..41dd81d
--- /dev/null
+++ b/guts/setresuid.c
@@ -0,0 +1,34 @@
+/*
+ * static int
+ * wrap_setresuid(uid_t ruid, uid_t euid, uid_t suid) {
+ * int rc = -1;
+ */
+ rc = 0;
+ if (pseudo_euid != 0 && ruid != -1 &&
+ ruid != pseudo_euid && ruid != pseudo_ruid && ruid != pseudo_suid) {
+ rc = -1;
+ errno = EPERM;
+ }
+ if (pseudo_euid != 0 && euid != -1 &&
+ euid != pseudo_euid && euid != pseudo_ruid && euid != pseudo_suid) {
+ rc = -1;
+ errno = EPERM;
+ }
+ if (pseudo_euid != 0 && suid != -1 &&
+ suid != pseudo_euid && suid != pseudo_ruid && suid != pseudo_suid) {
+ rc = -1;
+ errno = EPERM;
+ }
+ if (rc != -1) {
+ if (ruid != -1)
+ pseudo_ruid = ruid;
+ if (euid != -1)
+ pseudo_euid = euid;
+ if (suid != -1)
+ pseudo_suid = suid;
+ pseudo_fuid = pseudo_euid;
+ pseudo_client_touchuid();
+ }
+/* return rc;
+ * }
+ */