mirror of
https://github.com/samba-team/samba.git
synced 2024-12-24 21:34:56 +03:00
69e24b4e8b
Add a return parameter of struct smb_create_returns *cr to cli_ntcreate() cli_ntcreate_recv() cli_nttrans_create() cli_nttrans_create_recv() Always pass in NULL for now. This fixes the create API to always fully return the data the server has given back to us on the open file to the caller. Signed-off-by: Jeremy Allison <jra@samba.org> Reviewed-by: Stefan Metzmacher <metze@samba.org>
109 lines
3.0 KiB
C
109 lines
3.0 KiB
C
/*
|
|
Unix SMB/CIFS implementation.
|
|
Basic test for share secdescs vs nttrans_create
|
|
Copyright (C) Volker Lendecke 2011
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 3 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
*/
|
|
|
|
#include "includes.h"
|
|
#include "torture/proto.h"
|
|
#include "libsmb/libsmb.h"
|
|
#include "libcli/security/dom_sid.h"
|
|
#include "libcli/security/secdesc.h"
|
|
#include "libcli/security/security.h"
|
|
|
|
bool run_nttrans_create(int dummy)
|
|
{
|
|
struct cli_state *cli = NULL;
|
|
NTSTATUS status, status2;
|
|
bool ret = false;
|
|
struct security_ace ace;
|
|
struct security_acl acl;
|
|
struct security_descriptor *sd;
|
|
const char *fname = "transtest";
|
|
uint16_t fnum, fnum2;
|
|
struct dom_sid owner;
|
|
|
|
printf("Starting NTTRANS_CREATE\n");
|
|
|
|
if (!torture_open_connection(&cli, 0)) {
|
|
printf("torture_open_connection failed\n");
|
|
goto fail;
|
|
}
|
|
|
|
ZERO_STRUCT(ace);
|
|
ace.type = SEC_ACE_TYPE_ACCESS_ALLOWED;
|
|
ace.access_mask = SEC_RIGHTS_FILE_ALL & ~SEC_STD_WRITE_DAC;
|
|
sid_copy(&ace.trustee, &global_sid_World);
|
|
|
|
acl.revision = SECURITY_ACL_REVISION_NT4;
|
|
acl.size = 0;
|
|
acl.num_aces = 1;
|
|
acl.aces = &ace;
|
|
|
|
dom_sid_parse("S-1-22-1-1000", &owner);
|
|
|
|
sd = make_sec_desc(talloc_tos(),
|
|
SECURITY_DESCRIPTOR_REVISION_1,
|
|
SEC_DESC_SELF_RELATIVE|
|
|
SEC_DESC_DACL_PRESENT|SEC_DESC_OWNER_DEFAULTED|
|
|
SEC_DESC_GROUP_DEFAULTED,
|
|
NULL, NULL, NULL, &acl, NULL);
|
|
if (sd == NULL) {
|
|
d_fprintf(stderr, "make_sec_desc failed\n");
|
|
goto fail;
|
|
}
|
|
|
|
status = cli_nttrans_create(
|
|
cli, fname, 0, FILE_READ_DATA|FILE_WRITE_DATA|DELETE_ACCESS|
|
|
READ_CONTROL_ACCESS,
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
FILE_SHARE_READ|FILE_SHARE_WRITE| FILE_SHARE_DELETE,
|
|
FILE_CREATE, 0, 0, sd, NULL, 0, &fnum, NULL);
|
|
if (!NT_STATUS_IS_OK(status)) {
|
|
d_fprintf(stderr, "cli_nttrans_create returned %s\n",
|
|
nt_errstr(status));
|
|
goto fail;
|
|
}
|
|
|
|
cli_query_secdesc(cli, fnum, talloc_tos(), NULL);
|
|
|
|
status2 = cli_ntcreate(cli, fname, 0, WRITE_DAC_ACCESS,
|
|
FILE_ATTRIBUTE_NORMAL,
|
|
FILE_SHARE_READ|FILE_SHARE_WRITE|
|
|
FILE_SHARE_DELETE,
|
|
FILE_OPEN, 0, 0, &fnum2, NULL);
|
|
|
|
status = cli_nt_delete_on_close(cli, fnum, true);
|
|
if (!NT_STATUS_IS_OK(status)) {
|
|
d_fprintf(stderr, "cli_nt_delete_on_close returned %s\n",
|
|
nt_errstr(status));
|
|
goto fail;
|
|
}
|
|
|
|
if (!NT_STATUS_EQUAL(status2, NT_STATUS_ACCESS_DENIED)) {
|
|
d_fprintf(stderr, "cli_ntcreate returned %s\n",
|
|
nt_errstr(status));
|
|
goto fail;
|
|
}
|
|
|
|
ret = true;
|
|
fail:
|
|
if (cli != NULL) {
|
|
torture_close_connection(cli);
|
|
}
|
|
return ret;
|
|
}
|