svn commit: samba r23106 - in branches: SAMBA_3_0/source/smbd SAMBA_3_0_26/source/smbd

jra at samba.org jra at samba.org
Thu May 24 00:13:27 GMT 2007


Author: jra
Date: 2007-05-24 00:13:24 +0000 (Thu, 24 May 2007)
New Revision: 23106

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=23106

Log:
Use lchown for symlinks.
Jeremy.

Modified:
   branches/SAMBA_3_0/source/smbd/trans2.c
   branches/SAMBA_3_0_26/source/smbd/trans2.c


Changeset:
Modified: branches/SAMBA_3_0/source/smbd/trans2.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/trans2.c	2007-05-23 23:55:12 UTC (rev 23105)
+++ branches/SAMBA_3_0/source/smbd/trans2.c	2007-05-24 00:13:24 UTC (rev 23106)
@@ -5268,9 +5268,18 @@
 	 */
 
 	if ((set_owner != (uid_t)SMB_UID_NO_CHANGE) && (psbuf->st_uid != set_owner)) {
-		DEBUG(10,("smb_set_file_unix_basic: SMB_SET_FILE_UNIX_BASIC changing owner %u for file %s\n",
+		int ret;
+
+		DEBUG(10,("smb_set_file_unix_basic: SMB_SET_FILE_UNIX_BASIC changing owner %u for path %s\n",
 			(unsigned int)set_owner, fname ));
-		if (SMB_VFS_CHOWN(conn, fname, set_owner, (gid_t)-1) != 0) {
+
+		if (S_ISLNK(psbuf->st_mode)) {
+			ret = SMB_VFS_LCHOWN(conn, fname, set_owner, (gid_t)-1);
+		} else {
+			ret = SMB_VFS_CHOWN(conn, fname, set_owner, (gid_t)-1);
+		}
+
+		if (ret != 0) {
 			status = map_nt_error_from_unix(errno);
 			if (delete_on_fail) {
 				SMB_VFS_UNLINK(conn,fname);

Modified: branches/SAMBA_3_0_26/source/smbd/trans2.c
===================================================================
--- branches/SAMBA_3_0_26/source/smbd/trans2.c	2007-05-23 23:55:12 UTC (rev 23105)
+++ branches/SAMBA_3_0_26/source/smbd/trans2.c	2007-05-24 00:13:24 UTC (rev 23106)
@@ -5214,9 +5214,18 @@
 	 */
 
 	if ((set_owner != (uid_t)SMB_UID_NO_CHANGE) && (psbuf->st_uid != set_owner)) {
-		DEBUG(10,("smb_set_file_unix_basic: SMB_SET_FILE_UNIX_BASIC changing owner %u for file %s\n",
+		int ret;
+
+		DEBUG(10,("smb_set_file_unix_basic: SMB_SET_FILE_UNIX_BASIC changing owner %u for path %s\n",
 			(unsigned int)set_owner, fname ));
-		if (SMB_VFS_CHOWN(conn, fname, set_owner, (gid_t)-1) != 0) {
+
+		if (S_ISLNK(psbuf->st_mode)) {
+			ret = SMB_VFS_LCHOWN(conn, fname, set_owner, (gid_t)-1);
+		} else {
+			ret = SMB_VFS_CHOWN(conn, fname, set_owner, (gid_t)-1);
+		}
+
+		if (ret != 0) {
 			status = map_nt_error_from_unix(errno);
 			if (delete_on_fail) {
 				SMB_VFS_UNLINK(conn,fname);



More information about the samba-cvs mailing list