[Linux-cluster] patch for gfs, add suiddir option for mount

Антон Нехороших anton at hq.310.ru
Fri Jul 16 08:47:49 UTC 2004


Hi linux-cluster,

I apologize for the previous letter, here full patch

suiddir option for mount
man 8 mount (FreeBSD)

*** gfs_ioctl.h.orig    2004-07-14 13:54:39.000000000 +0400
--- gfs_ioctl.h 2004-07-14 13:57:38.000000000 +0400
***************
*** 213,218 ****
--- 213,219 ----
        unsigned int ar_num_glockd;

        int ar_posixacls;       /* Enable posix acls */
+       int ar_suiddir;         /* suiddir support */
  };

  #endif /* ___GFS_IOCTL_DOT_H__ */
*** inode.c.orig        2004-07-15 19:52:33.000000000 +0400
--- inode.c     2004-07-15 19:55:36.000000000 +0400
***************
*** 1132,1138 ****
        struct posix_acl *acl = NULL;
        struct gfs_alloc *al;
        struct gfs_inode *ip;
!       unsigned int gid;
        int alloc_required;
        int error;
  
--- 1132,1138 ----
        struct posix_acl *acl = NULL;
        struct gfs_alloc *al;
        struct gfs_inode *ip;
!       unsigned int gid, uid;
        int alloc_required;
        int error;
  
***************
*** 1148,1162 ****
        else
                gid = current->fsgid;
  
        al = gfs_alloc_get(dip);
  
        error = gfs_quota_lock_m(dip,
!                                current->fsuid,
                                 gid);
        if (error)
                goto fail;
  
!       error = gfs_quota_check(dip, current->fsuid, gid);
        if (error)
                goto fail_gunlock_q;
  
--- 1148,1172 ----
        else
                gid = current->fsgid;
  
+       if ( (sdp->sd_args.ar_suiddir == TRUE) 
+             && (dip->i_di.di_mode & S_ISUID) ) {
+               if (type == GFS_FILE_DIR)
+                       mode |= S_ISUID;
+               uid = dip->i_di.di_uid;
+               gid = dip->i_di.di_gid;
+       }
+       else
+               uid = current->fsuid;
+ 
        al = gfs_alloc_get(dip);
  
        error = gfs_quota_lock_m(dip,
!                                uid,
                                 gid);
        if (error)
                goto fail;
  
!       error = gfs_quota_check(dip, uid, gid);
        if (error)
                goto fail_gunlock_q;
  
***************
*** 1206,1212 ****
        if (error)
                goto fail_end_trans;
  
!       error = make_dinode(dip, gl, inum, type, mode, current->fsuid, gid);
        if (error)
                goto fail_end_trans;
  
--- 1216,1222 ----
        if (error)
                goto fail_end_trans;
  
!       error = make_dinode(dip, gl, inum, type, mode, uid, gid);
        if (error)
                goto fail_end_trans;
*** mount.c.orig        2004-06-24 12:53:28.000000000 +0400
--- mount.c     2004-07-14 13:59:36.000000000 +0400
***************
*** 110,115 ****
--- 110,118 ----
                else if (!strcmp(x, "upgrade"))
                        args->ar_upgrade = TRUE;

+               else if (!strcmp(x, "suiddir"))
+                       args->ar_suiddir = TRUE;
+
                else if (!strcmp(x, "num_glockd")) {
                        if (!y) {
                                printk("GFS: need argument to num_glockd\n");  

  

-- 
e-mail: anton at hq.310.ru
http://www.310.ru




More information about the Linux-cluster mailing list