s3: smbd: Change rmdir_internals() to call SMB_VFS_UNLINKAT() in rmdir cases.
authorJeremy Allison <jra@samba.org>
Fri, 4 Oct 2019 20:51:09 +0000 (13:51 -0700)
committerRalph Boehme <slow@samba.org>
Thu, 10 Oct 2019 06:09:40 +0000 (06:09 +0000)
Use conn->cwd_fsp as current fsp.

No logic change for now.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/smbd/close.c

index 1de80b500078d4ff0a6fc474edef72bacc8f0c7d..e62480d69da3628302ac2bc99598529a74ddb074 100644 (file)
@@ -968,7 +968,10 @@ static NTSTATUS rmdir_internals(TALLOC_CTX *ctx, files_struct *fsp)
                                smb_dname,
                                0);
        } else {
-               ret = SMB_VFS_RMDIR(conn, smb_dname);
+               ret = SMB_VFS_UNLINKAT(conn,
+                               conn->cwd_fsp,
+                               smb_dname,
+                               AT_REMOVEDIR);
        }
        if (ret == 0) {
                notify_fname(conn, NOTIFY_ACTION_REMOVED,
@@ -1068,12 +1071,16 @@ static NTSTATUS rmdir_internals(TALLOC_CTX *ctx, files_struct *fsp)
                                goto err_break;
                        }
                        if(smb_dname_full->st.st_ex_mode & S_IFDIR) {
+                               int retval;
                                if(!recursive_rmdir(ctx, conn,
                                                    smb_dname_full)) {
                                        goto err_break;
                                }
-                               if(SMB_VFS_RMDIR(conn,
-                                       smb_dname_full) != 0) {
+                               retval = SMB_VFS_UNLINKAT(conn,
+                                               conn->cwd_fsp,
+                                               smb_dname_full,
+                                               AT_REMOVEDIR);
+                               if(retval != 0) {
                                        goto err_break;
                                }
                        } else {
@@ -1098,7 +1105,10 @@ static NTSTATUS rmdir_internals(TALLOC_CTX *ctx, files_struct *fsp)
                }
                TALLOC_FREE(dir_hnd);
                /* Retry the rmdir */
-               ret = SMB_VFS_RMDIR(conn, smb_dname);
+               ret = SMB_VFS_UNLINKAT(conn,
+                               conn->cwd_fsp,
+                               smb_dname,
+                               AT_REMOVEDIR);
        }
 
   err: