]> git.ipfire.org Git - thirdparty/samba.git/commitdiff
s3: smbd: unlink_internals() can figure out if the mask has a wildcard on its own.
authorJeremy Allison <jra@samba.org>
Tue, 29 Sep 2020 19:30:53 +0000 (12:30 -0700)
committerRalph Boehme <slow@samba.org>
Wed, 30 Sep 2020 20:46:40 +0000 (20:46 +0000)
Doesn't need a parameter for that.

Signed-off-by: Jeremy Allison <jra@samba.org>
Reviewed-by: Ralph Boehme <slow@samba.org>
source3/printing/nt_printing.c
source3/smbd/proto.h
source3/smbd/reply.c
source3/smbd/trans2.c

index 355953fa22262a4db9afa27fd738cfafe6795720..e57ff3404deb0c6c2ffe7399f6044bdeebcdaeaf 100644 (file)
@@ -2040,7 +2040,7 @@ static NTSTATUS driver_unlink_internals(connection_struct *conn,
                goto err_out;
        }
 
-       status = unlink_internals(conn, NULL, 0, smb_fname, false);
+       status = unlink_internals(conn, NULL, 0, smb_fname);
 err_out:
        talloc_free(tmp_ctx);
        return status;
index 5fa101c362282fb5ef6cf896f0481ec1825b5b77..b2dfdb21b1beb09d11190bd7ba28b741736ab663 100644 (file)
@@ -1000,8 +1000,7 @@ void reply_ulogoffX(struct smb_request *req);
 void reply_mknew(struct smb_request *req);
 void reply_ctemp(struct smb_request *req);
 NTSTATUS unlink_internals(connection_struct *conn, struct smb_request *req,
-                         uint32_t dirtype, struct smb_filename *smb_fname,
-                         bool has_wild);
+                         uint32_t dirtype, struct smb_filename *smb_fname);
 void reply_unlink(struct smb_request *req);
 ssize_t fake_sendfile(struct smbXsrv_connection *xconn, files_struct *fsp,
                      off_t startpos, size_t nread);
index f46f0c5a644e37b34e949f75b198b4cfbdcd7e75..7a8d7c766eb429d6af0dcf9be4e59e15cd61b20e 100644 (file)
@@ -3369,14 +3369,14 @@ static NTSTATUS do_unlink(connection_struct *conn,
 ****************************************************************************/
 
 NTSTATUS unlink_internals(connection_struct *conn, struct smb_request *req,
-                         uint32_t dirtype, struct smb_filename *smb_fname,
-                         bool has_wild)
+                         uint32_t dirtype, struct smb_filename *smb_fname)
 {
        char *fname_dir = NULL;
        char *fname_mask = NULL;
        int count=0;
        NTSTATUS status = NT_STATUS_OK;
        struct smb_filename *smb_fname_dir = NULL;
+       bool has_wild = false;
        TALLOC_CTX *ctx = talloc_tos();
 
        /* Split up the directory from the filename/mask. */
@@ -3386,6 +3386,17 @@ NTSTATUS unlink_internals(connection_struct *conn, struct smb_request *req,
                goto out;
        }
 
+       if (req != NULL && !req->posix_pathnames) {
+               /*
+                * Check the wildcard mask *before*
+                * unmangling. As mangling is done
+                * for names that can't be returned
+                * to Windows the unmangled name may
+                * contain Windows wildcard characters.
+                */
+               has_wild = ms_has_wild(fname_mask);
+       }
+
        /*
         * We should only check the mangled cache
         * here if unix_convert failed. This means
@@ -3642,8 +3653,7 @@ void reply_unlink(struct smb_request *req)
 
        DEBUG(3,("reply_unlink : %s\n", smb_fname_str_dbg(smb_fname)));
 
-       status = unlink_internals(conn, req, dirtype, smb_fname,
-                                 path_contains_wcard);
+       status = unlink_internals(conn, req, dirtype, smb_fname);
        if (!NT_STATUS_IS_OK(status)) {
                if (open_was_deferred(req->xconn, req->mid)) {
                        /* We have re-scheduled this call. */
index 1ab0195d951618e3e4be8f9eb051489314c11d08..c6bdb5803f0fa1ecb684c0f24b52c601295c7d2c 100644 (file)
@@ -6479,8 +6479,7 @@ NTSTATUS hardlink_internals(TALLOC_CTX *ctx,
                        status = unlink_internals(conn,
                                                req,
                                                FILE_ATTRIBUTE_NORMAL,
-                                               smb_fname_new,
-                                               false);
+                                               smb_fname_new);
                        if (!NT_STATUS_IS_OK(status)) {
                                return status;
                        }