diff -uNrp samba-3.0.23d.org/source/smbd/posix_acls.c samba-3.0.23d/source/smbd/posix_acls.c
--- samba-3.0.23d.org/source/smbd/posix_acls.c	2007-01-10 11:47:36.000000000 +0900
+++ samba-3.0.23d/source/smbd/posix_acls.c	2007-01-10 11:48:44.000000000 +0900
@@ -1233,8 +1233,10 @@ static BOOL create_canon_ace_lists(files
 							DOM_SID *pfile_owner_sid,
 							DOM_SID *pfile_grp_sid,
 							canon_ace **ppfile_ace, canon_ace **ppdir_ace,
-							SEC_ACL *dacl)
+							uint32 security_info_sent,
+							SEC_DESC *psd)
 {
+	SEC_ACL *dacl = psd->dacl;
 	BOOL all_aces_are_inherit_only = (fsp->is_directory ? True : False);
 	canon_ace *file_ace = NULL;
 	canon_ace *dir_ace = NULL;
@@ -1354,7 +1356,17 @@ static BOOL create_canon_ace_lists(files
 		 * Note what kind of a POSIX ACL this should map to.
 		 */
 
-		if( sid_equal(&current_ace->trustee, &global_sid_World)) {
+		if (security_info_sent & OWNER_SECURITY_INFORMATION
+		           && sid_equal(&current_ace->trustee, psd->owner_sid)
+		           && sid_to_uid( psd->owner_sid, &current_ace->unix_ug.uid)) {
+			current_ace->owner_type = UID_ACE;
+			current_ace->type = SMB_ACL_USER_OBJ;
+		} else if (security_info_sent & GROUP_SECURITY_INFORMATION
+		           && sid_equal(&current_ace->trustee, psd->grp_sid)
+		           && sid_to_gid( psd->grp_sid, &current_ace->unix_ug.gid)) {
+			current_ace->owner_type = GID_ACE;
+			current_ace->type = SMB_ACL_GROUP_OBJ;
+		} else if( sid_equal(&current_ace->trustee, &global_sid_World)) {
 			current_ace->owner_type = WORLD_ACE;
 			current_ace->unix_ug.world = -1;
 			current_ace->type = SMB_ACL_OTHER;
@@ -1935,7 +1947,7 @@ static BOOL unpack_canon_ace(files_struc
 	 */
 
 	if (!create_canon_ace_lists( fsp, pst, pfile_owner_sid, pfile_grp_sid,
-								&file_ace, &dir_ace, psd->dacl))
+	                                                        &file_ace, &dir_ace, security_info_sent, psd))
 		return False;
 
 	if ((file_ace == NULL) && (dir_ace == NULL)) {
@@ -3048,12 +3060,6 @@ static int try_chown(connection_struct *
 		return -1;
 	}
 
-	/* only allow chown to the current user. This is more secure,
-	   and also copes with the case where the SID in a take ownership ACL is
-	   a local SID on the users workstation 
-	*/
-	uid = current_user.ut.uid;
-
 	become_root();
 	ret = SMB_VFS_FCHOWN(fsp, fsp->fh->fd, uid, gid);
 	unbecome_root();
