git://git.camperquake.de
/
zfs.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Use stored whole_disk property when opening a vdev
[zfs.git]
/
module
/
zfs
/
zfs_dir.c
diff --git
a/module/zfs/zfs_dir.c
b/module/zfs/zfs_dir.c
index
6d66668
..
f0084cd
100644
(file)
--- a/
module/zfs/zfs_dir.c
+++ b/
module/zfs/zfs_dir.c
@@
-22,6
+22,8
@@
* Copyright (c) 2005, 2010, Oracle and/or its affiliates. All rights reserved.
*/
* 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>
#include <sys/types.h>
#include <sys/param.h>
#include <sys/time.h>
@@
-630,7
+632,7
@@
zfs_rmnode(znode_t *zp)
ASSERT(error == 0);
}
ASSERT(error == 0);
}
- acl_obj =
ZFS_EXTERNAL_ACL
(zp);
+ acl_obj =
zfs_external_acl
(zp);
/*
* Set up the final transaction.
/*
* Set up the final transaction.
@@
-1067,6
+1069,9
@@
int
zfs_sticky_remove_access(znode_t *zdp, znode_t *zp, cred_t *cr)
{
uid_t uid;
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);
if (zdp->z_zfsvfs->z_replay)
return (0);
@@
-1074,10
+1079,14
@@
zfs_sticky_remove_access(znode_t *zdp, znode_t *zp, cred_t *cr)
if ((zdp->z_mode & S_ISVTX) == 0)
return (0);
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));
}
(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 */