Remove zfs_ctldir.[ch]
[zfs.git] / module / zfs / zfs_dir.c
index 6d66668..aced288 100644 (file)
@@ -22,6 +22,8 @@
  * Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
  */
 
+#ifdef HAVE_ZPL
+
 #include <sys/types.h>
 #include <sys/param.h>
 #include <sys/time.h>
@@ -49,7 +51,6 @@
 #include <sys/zap.h>
 #include <sys/dmu.h>
 #include <sys/atomic.h>
-#include <sys/zfs_ctldir.h>
 #include <sys/zfs_fuid.h>
 #include <sys/sa.h>
 #include <sys/zfs_sa.h>
@@ -151,9 +152,9 @@ zfs_dirent_lock(zfs_dirlock_t **dlpp, znode_t *dzp, char *name, znode_t **zpp,
        /*
         * Verify that we are not trying to lock '.', '..', or '.zfs'
         */
-       if (name[0] == '.' &&
-           (name[1] == '\0' || (name[1] == '.' && name[2] == '\0')) ||
-           zfs_has_ctldir(dzp) && strcmp(name, ZFS_CTLDIR_NAME) == 0)
+       if ((name[0] == '.' &&
+           (name[1] == '\0' || (name[1] == '.' && name[2] == '\0'))) ||
+           (zfs_has_ctldir(dzp) && strcmp(name, ZFS_CTLDIR_NAME) == 0))
                return (EEXIST);
 
        /*
@@ -630,7 +631,7 @@ zfs_rmnode(znode_t *zp)
                ASSERT(error == 0);
        }
 
-       acl_obj = ZFS_EXTERNAL_ACL(zp);
+       acl_obj = zfs_external_acl(zp);
 
        /*
         * Set up the final transaction.
@@ -1067,6 +1068,9 @@ int
 zfs_sticky_remove_access(znode_t *zdp, znode_t *zp, cred_t *cr)
 {
        uid_t           uid;
+       uid_t           downer;
+       uid_t           fowner;
+       zfsvfs_t        *zfsvfs = zdp->z_zfsvfs;
 
        if (zdp->z_zfsvfs->z_replay)
                return (0);
@@ -1074,10 +1078,14 @@ zfs_sticky_remove_access(znode_t *zdp, znode_t *zp, cred_t *cr)
        if ((zdp->z_mode & S_ISVTX) == 0)
                return (0);
 
-       if ((uid = crgetuid(cr)) == zdp->z_uid || uid == zp->z_uid ||
+       downer = zfs_fuid_map_id(zfsvfs, zdp->z_uid, cr, ZFS_OWNER);
+       fowner = zfs_fuid_map_id(zfsvfs, zp->z_uid, cr, ZFS_OWNER);
+
+       if ((uid = crgetuid(cr)) == downer || uid == fowner ||
            (ZTOV(zp)->v_type == VREG &&
            zfs_zaccess(zp, ACE_WRITE_DATA, 0, B_FALSE, cr) == 0))
                return (0);
        else
                return (secpolicy_vnode_remove(cr));
 }
+#endif /* HAVE_ZPL */