]> Zhao Yanbai Git Server - minix.git/commitdiff
Message types for VFS chown
authorLionel Sambuc <lionel@minix3.org>
Thu, 1 May 2014 09:40:33 +0000 (11:40 +0200)
committerLionel Sambuc <lionel@minix3.org>
Mon, 28 Jul 2014 15:05:29 +0000 (17:05 +0200)
Change-Id: I1dc50772fd28b0c698d85922ad0ad3b41dde006c

include/minix/ipc.h
lib/libpuffs/protect.c
servers/ext2/protect.c
servers/mfs/protect.c
servers/vfs/request.c

index f892cc647447bdd6a11dc33faff1e636c6cb6dfa..f0715624dadd1e548246842264070fa889b81ca1 100644 (file)
@@ -162,6 +162,23 @@ typedef struct {
 } mess_fs_vfs_chmod;
 _ASSERT_MSG_SIZE(mess_fs_vfs_chmod);
 
+typedef struct {
+       ino_t inode;
+
+       uid_t uid;
+       gid_t gid;
+
+       uint8_t data[40];
+} mess_vfs_fs_chown;
+_ASSERT_MSG_SIZE(mess_vfs_fs_chown);
+
+typedef struct {
+       mode_t mode;
+
+       uint8_t data[52];
+} mess_fs_vfs_chown;
+_ASSERT_MSG_SIZE(mess_fs_vfs_chown);
+
 typedef struct {
        ino_t inode;
 
@@ -532,6 +549,8 @@ typedef struct {
        mess_fs_vfs_newnode m_fs_vfs_newnode;
        mess_vfs_fs_chmod m_vfs_fs_chmod;
        mess_fs_vfs_chmod m_fs_vfs_chmod;
+       mess_vfs_fs_chown m_vfs_fs_chown;
+       mess_fs_vfs_chown m_fs_vfs_chown;
        mess_vfs_fs_create m_vfs_fs_create;
        mess_fs_vfs_create m_fs_vfs_create;
        mess_vfs_fs_flush m_vfs_fs_flush;
index f75fea50d37e9ef7be30fbd21449388c9fd8da64..6a127f51305a47f22bc0d05885ba0b7c7620c7ec 100644 (file)
@@ -54,14 +54,14 @@ int fs_chown(void)
   struct vattr va;
   PUFFS_MAKECRED(pcr, &global_kcred);
 
-  if ((pn = puffs_pn_nodewalk(global_pu, 0, &fs_m_in.REQ_INODE_NR)) == NULL)
+  if ((pn = puffs_pn_nodewalk(global_pu, 0, &fs_m_in.m_vfs_fs_chown.inode)) == NULL)
        return(EINVAL);
 
   /* Not permitted to change the owner of a file on a read-only file sys. */
   if (!is_readonly_fs) {
        puffs_vattr_null(&va);
-       va.va_uid = fs_m_in.REQ_UID;
-       va.va_gid = fs_m_in.REQ_GID;
+       va.va_uid = fs_m_in.m_vfs_fs_chown.uid;
+       va.va_gid = fs_m_in.m_vfs_fs_chown.gid;
        va.va_mode = pn->pn_va.va_mode & ~(I_SET_UID_BIT | I_SET_GID_BIT);
        va.va_ctime = clock_timespec();
 
@@ -70,7 +70,7 @@ int fs_chown(void)
   }
 
   /* Update caller on current mode, as it may have changed. */
-  fs_m_out.RES_MODE = pn->pn_va.va_mode;
+  fs_m_out.m_fs_vfs_chown.mode = pn->pn_va.va_mode;
 
   return(OK);
 }
index 436e9d23c3a9a74a9f0e31634676c236856fd31e..d3e6315b0f91d9c647485fcf5d1e9bf9395c5659 100644 (file)
@@ -48,21 +48,21 @@ int fs_chown()
   register int r;
 
   /* Temporarily open the file. */
-  if( (rip = get_inode(fs_dev, (pino_t) fs_m_in.REQ_INODE_NR)) == NULL)
+  if( (rip = get_inode(fs_dev, fs_m_in.m_vfs_fs_chown.inode)) == NULL)
          return(EINVAL);
 
   /* Not permitted to change the owner of a file on a read-only file sys. */
   r = read_only(rip);
   if (r == OK) {
-         rip->i_uid = fs_m_in.REQ_UID;
-         rip->i_gid = fs_m_in.REQ_GID;
+         rip->i_uid = fs_m_in.m_vfs_fs_chown.uid;
+         rip->i_gid = fs_m_in.m_vfs_fs_chown.gid;
          rip->i_mode &= ~(I_SET_UID_BIT | I_SET_GID_BIT);
          rip->i_update |= CTIME;
          rip->i_dirt = IN_DIRTY;
   }
 
   /* Update caller on current mode, as it may have changed. */
-  fs_m_out.RES_MODE = rip->i_mode;
+  fs_m_out.m_fs_vfs_chown.mode = rip->i_mode;
   put_inode(rip);
 
   return(r);
index 85826e2d595d4bd694336b034ad7b4b9ae4dad48..c17712852f745e12797e08f4cd5d6bb75fa409a0 100644 (file)
@@ -49,21 +49,21 @@ int fs_chown()
   register int r;
 
   /* Temporarily open the file. */
-  if( (rip = get_inode(fs_dev, (pino_t) fs_m_in.REQ_INODE_NR)) == NULL)
+  if( (rip = get_inode(fs_dev, fs_m_in.m_vfs_fs_chown.inode)) == NULL)
          return(EINVAL);
 
   /* Not permitted to change the owner of a file on a read-only file sys. */
   r = read_only(rip);
   if (r == OK) {
-         rip->i_uid = (uid_t) fs_m_in.REQ_UID;
-         rip->i_gid = (gid_t) fs_m_in.REQ_GID;
+         rip->i_uid = fs_m_in.m_vfs_fs_chown.uid;
+         rip->i_gid = fs_m_in.m_vfs_fs_chown.gid;
          rip->i_mode &= ~(I_SET_UID_BIT | I_SET_GID_BIT);
          rip->i_update |= CTIME;
           IN_MARKDIRTY(rip);
   }
 
   /* Update caller on current mode, as it may have changed. */
-  fs_m_out.RES_MODE = rip->i_mode;
+  fs_m_out.m_fs_vfs_chown.mode = rip->i_mode;
   put_inode(rip);
   
   return(r);
index 4c028f743aa288cea0616421d8db36f74a693180..c93795b63ece9a2c41f5286cdb355ecb0a100b31 100644 (file)
@@ -144,15 +144,15 @@ int req_chown(
 
   /* Fill in request message */
   m.m_type = REQ_CHOWN;
-  m.REQ_INODE_NR = (pino_t) inode_nr;
-  m.REQ_UID = (puid_t) newuid;
-  m.REQ_GID = (pgid_t) newgid;
+  m.m_vfs_fs_chown.inode = inode_nr;
+  m.m_vfs_fs_chown.uid = newuid;
+  m.m_vfs_fs_chown.gid = newgid;
 
   /* Send/rec request */
   r = fs_sendrec(fs_e, &m);
 
   /* Return new mode to caller. */
-  *new_modep = (mode_t) m.RES_MODE;
+  *new_modep = m.m_fs_vfs_chown.mode;
 
   return(r);
 }