svn commit: samba r20313 - in branches/SAMBA_3_0/source/smbd: .

vlendec at samba.org vlendec at samba.org
Thu Dec 21 22:35:10 GMT 2006


Author: vlendec
Date: 2006-12-21 22:35:10 +0000 (Thu, 21 Dec 2006)
New Revision: 20313

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

Log:
Make trans2_mkdir also go through open_directory for all the fancy inherit_acl
stuff & friends.

Survives raw-mkdir. I'll activate that tomorrow when all build farm machines
have picked up the changed samba4 torture test.

Volker

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


Changeset:
Modified: branches/SAMBA_3_0/source/smbd/trans2.c
===================================================================
--- branches/SAMBA_3_0/source/smbd/trans2.c	2006-12-21 22:30:21 UTC (rev 20312)
+++ branches/SAMBA_3_0/source/smbd/trans2.c	2006-12-21 22:35:10 UTC (rev 20313)
@@ -4773,12 +4773,12 @@
 	char *params = *pparams;
 	char *pdata = *ppdata;
 	pstring directory;
-	int ret = -1;
 	SMB_STRUCT_STAT sbuf;
 	BOOL bad_path = False;
 	NTSTATUS status = NT_STATUS_OK;
 	TALLOC_CTX *ctx = NULL;
 	struct ea_list *ea_list = NULL;
+	files_struct *fsp;
 
 	if (!CAN_WRITE(conn))
 		return ERROR_DOS(ERRSRV,ERRaccess);
@@ -4827,27 +4827,35 @@
 		}
 		ea_list = read_ea_list(ctx, pdata + 4, total_data - 4);
 		if (!ea_list) {
-			talloc_destroy(ctx);
+			TALLOC_FREE(ctx);
 			return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 		}
 	} else if (IVAL(pdata,0) != 4) {
 		return ERROR_NT(NT_STATUS_INVALID_PARAMETER);
 	}
 
-	if (check_name(directory,conn)) {
-		ret = vfs_MkDir(conn,directory,unix_mode(conn,aDIR,directory,True));
-	}
-  
-	if(ret < 0) {
-		talloc_destroy(ctx);
+	if (!check_name(directory,conn)) {
+		TALLOC_FREE(ctx);
 		DEBUG(5,("call_trans2mkdir error (%s)\n", strerror(errno)));
-		return set_bad_path_error(errno, bad_path, outbuf, ERRDOS,ERRnoaccess);
+		return set_bad_path_error(errno, bad_path, outbuf, ERRDOS,
+					  ERRnoaccess);
 	}
 
+	status = open_directory(conn, directory, &sbuf, 
+				FILE_READ_ATTRIBUTES, /* A stat open */
+				FILE_SHARE_NONE, /* Ignored  */
+				FILE_CREATE, 0, NULL, &fsp);
+
+	if (!NT_STATUS_IS_OK(status)) {
+		TALLOC_FREE(ctx);
+		return ERROR_NT(status);
+	}
+	close_file(fsp, NORMAL_CLOSE);
+  
 	/* Try and set any given EA. */
 	if (ea_list) {
 		status = set_ea(conn, NULL, directory, ea_list);
-		talloc_destroy(ctx);
+		TALLOC_FREE(ctx);
 		if (!NT_STATUS_IS_OK(status)) {
 			return ERROR_NT(status);
 		}



More information about the samba-cvs mailing list