1
0
mirror of https://github.com/samba-team/samba.git synced 2024-12-23 17:34:34 +03:00

vfs_fruit: lp_case_sensitive() does not return a bool

lp_case_sensitive() returns an int, not a bool, so with the default
setting of "Auto" by default we set the AAPL flag
SMB2_CRTCTX_AAPL_CASE_SENSITIVE.

This caused the client to believe the volume is case sensitive where it
wasn't, leading to an error when trying to rename files changing only
the case of the name.

Also fix the existing torture test that verifies AAPL context
negotiation and actually expected the server to return "case sensitive",
while the Samba default is really "case insensitive".

Bug: https://bugzilla.samba.org/show_bug.cgi?id=12749

Signed-off-by: Ralph Boehme <slow@samba.org>
Reviewed-by: Jeremy Allison <jra@samba.org>
This commit is contained in:
Ralph Boehme 2017-04-19 13:12:55 +02:00 committed by Jeremy Allison
parent 52349a7e69
commit 36612723b2
2 changed files with 19 additions and 5 deletions

View File

@ -2201,9 +2201,23 @@ static NTSTATUS check_aapl(vfs_handle_struct *handle,
}
if (req_bitmap & SMB2_CRTCTX_AAPL_VOLUME_CAPS) {
SBVAL(p, 0,
lp_case_sensitive(SNUM(handle->conn->tcon->compat)) ?
SMB2_CRTCTX_AAPL_CASE_SENSITIVE : 0);
int val = lp_case_sensitive(SNUM(handle->conn->tcon->compat));
uint64_t caps = 0;
switch (val) {
case Auto:
break;
case True:
caps |= SMB2_CRTCTX_AAPL_CASE_SENSITIVE;
break;
default:
break;
}
SBVAL(p, 0, caps);
ok = data_blob_append(req, &blob, p, 8);
if (!ok) {
return NT_STATUS_UNSUCCESSFUL;

View File

@ -2068,9 +2068,9 @@ static bool test_aapl(struct torture_context *tctx,
}
aapl_vol_caps = BVAL(aapl->data.data, 24);
if (aapl_vol_caps != SMB2_CRTCTX_AAPL_CASE_SENSITIVE) {
if (aapl_vol_caps != 0) {
/* this will fail on a case insensitive fs ... */
torture_warning(tctx,
torture_result(tctx, TORTURE_FAIL,
"(%s) unexpected vol_caps: %d",
__location__, (int)aapl_vol_caps);
}