svn commit: samba r23856 - in branches: SAMBA_3_2/source/modules
SAMBA_3_2_0/source/modules
jra at samba.org
jra at samba.org
Thu Jul 12 18:49:45 GMT 2007
Author: jra
Date: 2007-07-12 18:49:44 +0000 (Thu, 12 Jul 2007)
New Revision: 23856
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23856
Log:
Add Jiri.Sasek at Sun.COM;s fix from Axel Apitz for ZFS ACLs.
Jeremy.
Modified:
branches/SAMBA_3_2/source/modules/vfs_zfsacl.c
branches/SAMBA_3_2_0/source/modules/vfs_zfsacl.c
Changeset:
Modified: branches/SAMBA_3_2/source/modules/vfs_zfsacl.c
===================================================================
--- branches/SAMBA_3_2/source/modules/vfs_zfsacl.c 2007-07-12 18:11:41 UTC (rev 23855)
+++ branches/SAMBA_3_2/source/modules/vfs_zfsacl.c 2007-07-12 18:49:44 UTC (rev 23856)
@@ -4,6 +4,9 @@
* Copyright (C) Jiri Sasek, 2007
* based on the foobar.c module which is copyrighted by Volker Lendecke
*
+ * Many thanks to Axel Apitz for help to fix the special ace's handling
+ * issues.
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
@@ -71,7 +74,19 @@
aceprop.aceFlags = (uint32) acebuf[i].a_flags;
aceprop.aceMask = (uint32) acebuf[i].a_access_mask;
aceprop.who.id = (uint32) acebuf[i].a_who;
- aceprop.flags = 0;
+
+ if(aceprop.aceFlags & ACE_OWNER) {
+ aceprop.flags = SMB_ACE4_ID_SPECIAL;
+ aceprop.who.special_id = SMB_ACE4_WHO_OWNER;
+ } else if(aceprop.aceFlags & ACE_GROUP) {
+ aceprop.flags = SMB_ACE4_ID_SPECIAL;
+ aceprop.who.special_id = SMB_ACE4_WHO_GROUP;
+ } else if(aceprop.aceFlags & ACE_EVERYONE) {
+ aceprop.flags = SMB_ACE4_ID_SPECIAL;
+ aceprop.who.special_id = SMB_ACE4_WHO_EVERYONE;
+ } else {
+ aceprop.flags = 0;
+ }
if(smb_add_ace4(pacl, &aceprop) == NULL) return 0;
}
@@ -103,6 +118,23 @@
acebuf[i].a_flags = aceprop->aceFlags;
acebuf[i].a_access_mask = aceprop->aceMask;
acebuf[i].a_who = aceprop->who.id;
+ if(aceprop->flags & SMB_ACE4_ID_SPECIAL) {
+ switch(aceprop->who.special_id) {
+ case SMB_ACE4_WHO_EVERYONE:
+ acebuf[i].a_flags |= ACE_EVERYONE;
+ break;
+ case SMB_ACE4_WHO_OWNER:
+ acebuf[i].a_flags |= ACE_OWNER;
+ break;
+ case SMB_ACE4_WHO_GROUP:
+ acebuf[i].a_flags |= ACE_GROUP;
+ break;
+ default:
+ DEBUG(8, ("unsupported special_id %d\n", \
+ aceprop->who.special_id));
+ continue; /* don't add it !!! */
+ }
+ }
}
SMB_ASSERT(i == naces);
@@ -178,8 +210,23 @@
{SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}
};
+/* != 0 if this module will be compiled as static */
+
+#define STATIC 0
+
+#if STATIC
NTSTATUS vfs_zfsacl_init(void);
-NTSTATUS vfs_zfsacl_init(void)
+#else
+NTSTATUS init_module(void);
+#endif
+
+NTSTATUS
+#if STATIC
+ vfs_zfsacl_init
+#else
+ init_module
+#endif
+ (void)
{
return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "zfsacl",
zfsacl_ops);
Modified: branches/SAMBA_3_2_0/source/modules/vfs_zfsacl.c
===================================================================
--- branches/SAMBA_3_2_0/source/modules/vfs_zfsacl.c 2007-07-12 18:11:41 UTC (rev 23855)
+++ branches/SAMBA_3_2_0/source/modules/vfs_zfsacl.c 2007-07-12 18:49:44 UTC (rev 23856)
@@ -4,6 +4,9 @@
* Copyright (C) Jiri Sasek, 2007
* based on the foobar.c module which is copyrighted by Volker Lendecke
*
+ * Many thanks to Axel Apitz for help to fix the special ace's handling
+ * issues.
+ *
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 3 of the License, or
@@ -71,7 +74,19 @@
aceprop.aceFlags = (uint32) acebuf[i].a_flags;
aceprop.aceMask = (uint32) acebuf[i].a_access_mask;
aceprop.who.id = (uint32) acebuf[i].a_who;
- aceprop.flags = 0;
+
+ if(aceprop.aceFlags & ACE_OWNER) {
+ aceprop.flags = SMB_ACE4_ID_SPECIAL;
+ aceprop.who.special_id = SMB_ACE4_WHO_OWNER;
+ } else if(aceprop.aceFlags & ACE_GROUP) {
+ aceprop.flags = SMB_ACE4_ID_SPECIAL;
+ aceprop.who.special_id = SMB_ACE4_WHO_GROUP;
+ } else if(aceprop.aceFlags & ACE_EVERYONE) {
+ aceprop.flags = SMB_ACE4_ID_SPECIAL;
+ aceprop.who.special_id = SMB_ACE4_WHO_EVERYONE;
+ } else {
+ aceprop.flags = 0;
+ }
if(smb_add_ace4(pacl, &aceprop) == NULL) return 0;
}
@@ -103,6 +118,23 @@
acebuf[i].a_flags = aceprop->aceFlags;
acebuf[i].a_access_mask = aceprop->aceMask;
acebuf[i].a_who = aceprop->who.id;
+ if(aceprop->flags & SMB_ACE4_ID_SPECIAL) {
+ switch(aceprop->who.special_id) {
+ case SMB_ACE4_WHO_EVERYONE:
+ acebuf[i].a_flags |= ACE_EVERYONE;
+ break;
+ case SMB_ACE4_WHO_OWNER:
+ acebuf[i].a_flags |= ACE_OWNER;
+ break;
+ case SMB_ACE4_WHO_GROUP:
+ acebuf[i].a_flags |= ACE_GROUP;
+ break;
+ default:
+ DEBUG(8, ("unsupported special_id %d\n", \
+ aceprop->who.special_id));
+ continue; /* don't add it !!! */
+ }
+ }
}
SMB_ASSERT(i == naces);
@@ -178,8 +210,23 @@
{SMB_VFS_OP(NULL), SMB_VFS_OP_NOOP, SMB_VFS_LAYER_NOOP}
};
+/* != 0 if this module will be compiled as static */
+
+#define STATIC 0
+
+#if STATIC
NTSTATUS vfs_zfsacl_init(void);
-NTSTATUS vfs_zfsacl_init(void)
+#else
+NTSTATUS init_module(void);
+#endif
+
+NTSTATUS
+#if STATIC
+ vfs_zfsacl_init
+#else
+ init_module
+#endif
+ (void)
{
return smb_register_vfs(SMB_VFS_INTERFACE_VERSION, "zfsacl",
zfsacl_ops);
More information about the samba-cvs
mailing list