r20340: Join vfs_MkDir to its only caller
authorVolker Lendecke <vlendec@samba.org>
Sun, 24 Dec 2006 14:29:19 +0000 (14:29 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 17:16:42 +0000 (12:16 -0500)
(This used to be commit cce911780fc52ea56dccde1879b0891cdf9ea320)

source3/smbd/open.c
source3/smbd/vfs.c

index e8536e33358c642558bbb49731752859524cf333..1ca793fb80a498b333efe645b9a84345ead914d4 100644 (file)
@@ -1851,27 +1851,45 @@ int close_file_fchmod(files_struct *fsp)
        return ret;
 }
 
-static NTSTATUS mkdir_internal(connection_struct *conn,
-                              const pstring directory)
+static NTSTATUS mkdir_internal(connection_struct *conn, const char *name)
 {
+       SMB_STRUCT_STAT sbuf;
        int ret= -1;
-       
+       mode_t mode;
+
        if(!CAN_WRITE(conn)) {
                DEBUG(5,("mkdir_internal: failing create on read-only share "
                         "%s\n", lp_servicename(SNUM(conn))));
                return NT_STATUS_ACCESS_DENIED;
        }
 
-       if (!check_name(directory, conn)) {
+       if (!check_name(name, conn)) {
                return map_nt_error_from_unix(errno);
        }
 
-       ret = vfs_MkDir(conn,directory,unix_mode(conn,aDIR,directory,True));
+       mode = unix_mode(conn, aDIR, name, True);
 
-       if (ret == -1) {
+       if ((ret=SMB_VFS_MKDIR(conn, name, mode)) != 0) {
                return map_nt_error_from_unix(errno);
        }
-       
+
+       if (lp_inherit_perms(SNUM(conn))) {
+               inherit_access_acl(conn, name, mode);
+       }
+
+       /*
+        * Check if high bits should have been set,
+        * then (if bits are missing): add them.
+        * Consider bits automagically set by UNIX, i.e. SGID bit from parent
+        * dir.
+        */
+       if (mode & ~(S_IRWXU|S_IRWXG|S_IRWXO)
+           && (SMB_VFS_STAT(conn, name, &sbuf) == 0)
+           && (mode & ~sbuf.st_mode)) {
+               SMB_VFS_CHMOD(conn, name,
+                             sbuf.st_mode | (mode & ~sbuf.st_mode));
+       }
+
        return NT_STATUS_OK;
 }
 
index b6a7d477bd98bdd049068fd24a49acf452696fc8..a4ecff921af665142b4b49712c27dda9aa719030 100644 (file)
@@ -306,37 +306,6 @@ BOOL vfs_directory_exist(connection_struct *conn, const char *dname, SMB_STRUCT_
        return ret;
 }
 
-/*******************************************************************
- vfs mkdir wrapper 
-********************************************************************/
-
-int vfs_MkDir(connection_struct *conn, const char *name, mode_t mode)
-{
-       int ret;
-       SMB_STRUCT_STAT sbuf;
-
-       if ((ret=SMB_VFS_MKDIR(conn, name, mode)) != 0) {
-               return ret;
-       }
-
-       if (lp_inherit_perms(SNUM(conn))) {
-               inherit_access_acl(conn, name, mode);
-       }
-
-       /*
-        * Check if high bits should have been set,
-        * then (if bits are missing): add them.
-        * Consider bits automagically set by UNIX, i.e. SGID bit from parent
-        * dir.
-        */
-       if (mode & ~(S_IRWXU|S_IRWXG|S_IRWXO)
-           && (SMB_VFS_STAT(conn,name,&sbuf) == 0)
-           && (mode & ~sbuf.st_mode)) {
-               SMB_VFS_CHMOD(conn,name,sbuf.st_mode | (mode & ~sbuf.st_mode));
-       }
-       return 0;
-}
-
 /*******************************************************************
  Check if an object exists in the vfs.
 ********************************************************************/