Implement linux's setfsuid and getfsuid (from NetBSD)
authorjasoni <jasoni@openbsd.org>
Wed, 12 Apr 2000 04:22:40 +0000 (04:22 +0000)
committerjasoni <jasoni@openbsd.org>
Wed, 12 Apr 2000 04:22:40 +0000 (04:22 +0000)
sys/compat/linux/linux_misc.c
sys/compat/linux/syscalls.master

index 3f1653c..4c5a58e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: linux_misc.c,v 1.26 2000/02/28 13:29:30 jasoni Exp $  */
+/*     $OpenBSD: linux_misc.c,v 1.27 2000/04/12 04:22:40 jasoni Exp $  */
 /*     $NetBSD: linux_misc.c,v 1.27 1996/05/20 01:59:21 fvdl Exp $     */
 
 /*
@@ -1440,6 +1440,38 @@ linux_sys_getresuid(p, v, retval)
        return (copyout(&pc->p_svuid, SCARG(uap, suid), sizeof(uid_t)));
 }
 
+/*
+ * We have nonexistent fsuid equal to uid.
+ * If modification is requested, refuse.
+ */
+int
+linux_sys_setfsuid(p, v, retval)
+        struct proc *p;
+        void *v;
+        register_t *retval;
+{
+        struct linux_sys_setfsuid_args /* {
+                syscallarg(uid_t) uid;
+        } */ *uap = v;
+        uid_t uid;
+
+        uid = SCARG(uap, uid);
+        if (p->p_cred->p_ruid != uid)
+                return sys_nosys(p, v, retval);
+        else
+                return (0);
+}
+
+int
+linux_sys_getfsuid(p, v, retval)
+       struct proc *p;
+       void *v;
+       register_t *retval;
+{
+       return sys_getuid(p, v, retval);
+}
+
+
 int
 linux_sys_nice(p, v, retval)
        struct proc *p;
index 21162ac..932f76f 100644 (file)
@@ -1,4 +1,4 @@
-       $OpenBSD: syscalls.master,v 1.21 2000/04/04 05:31:50 jasoni Exp $
+       $OpenBSD: syscalls.master,v 1.22 2000/04/12 04:22:40 jasoni Exp $
 ;      $NetBSD: syscalls.master,v 1.15 1995/12/18 14:35:10 fvdl Exp $
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 135    UNIMPL          sysfs
 136    STD             { int linux_sys_personality(int per); }
 137    UNIMPL          afs_syscall
-138    UNIMPL          setfsuid
-139    UNIMPL          getfsuid
+138    STD             { int linux_sys_setfsuid(uid_t uid); }
+139    NOARGS          { int linux_sys_getfsuid(void); }
 140    STD             { int linux_sys_llseek(int fd, u_int32_t ohigh, \
                            u_int32_t olow, caddr_t res, int whence); }
 141    STD             { int linux_sys_getdents(int fd, void *dirent, \