/* basic testing of all RAW_FILEINFO_* calls for each call we test that it succeeds, and where possible test for consistency between the calls. */ BOOL torture_raw_qfileinfo(struct torture_context *torture) { struct smbcli_state *cli; BOOL ret = True; TALLOC_CTX *mem_ctx; int fnum; const char *fname = "\\torture_qfileinfo.txt"; if (!torture_open_connection(&cli, 0)) { return False; } mem_ctx = talloc_init("torture_qfileinfo"); fnum = create_complex_file(cli, mem_ctx, fname); if (fnum == -1) { printf("ERROR: open of %s failed (%s)\n", fname, smbcli_errstr(cli->tree)); ret = False; goto done; } ret = torture_raw_qfileinfo_internals(torture, mem_ctx, cli->tree, fnum, fname, False /* is_ipc */); smbcli_close(cli->tree, fnum); smbcli_unlink(cli->tree, fname); done: torture_close_connection(cli); talloc_free(mem_ctx); return ret; }
bool torture_raw_qfileinfo_pipe(struct torture_context *torture, struct smbcli_state *cli) { bool ret = true; int fnum; const char *fname = "\\lsass"; struct dcerpc_pipe *p; struct smbcli_tree *ipc_tree; NTSTATUS status; if (!(p = dcerpc_pipe_init(torture, cli->tree->session->transport->socket->event.ctx, lp_iconv_convenience(torture->lp_ctx)))) { return false; } status = dcerpc_pipe_open_smb(p, cli->tree, fname); torture_assert_ntstatus_ok(torture, status, "dcerpc_pipe_open_smb failed"); ipc_tree = dcerpc_smb_tree(p->conn); fnum = dcerpc_smb_fnum(p->conn); ret = torture_raw_qfileinfo_internals(torture, torture, ipc_tree, fnum, fname, true /* is_ipc */); talloc_free(p); return ret; }
bool torture_raw_qfileinfo_pipe(struct torture_context *torture, struct smbcli_state *cli) { bool ret = true; int fnum; const char *fname = "\\lsass"; union smb_open op; NTSTATUS status; op.ntcreatex.level = RAW_OPEN_NTCREATEX; op.ntcreatex.in.flags = 0; op.ntcreatex.in.root_fid.fnum = 0; op.ntcreatex.in.access_mask = SEC_STD_READ_CONTROL | SEC_FILE_WRITE_ATTRIBUTE | SEC_FILE_WRITE_EA | SEC_FILE_READ_DATA | SEC_FILE_WRITE_DATA; op.ntcreatex.in.file_attr = 0; op.ntcreatex.in.alloc_size = 0; op.ntcreatex.in.share_access = NTCREATEX_SHARE_ACCESS_READ | NTCREATEX_SHARE_ACCESS_WRITE; op.ntcreatex.in.open_disposition = NTCREATEX_DISP_OPEN; op.ntcreatex.in.create_options = 0; op.ntcreatex.in.impersonation = NTCREATEX_IMPERSONATION_IMPERSONATION; op.ntcreatex.in.security_flags = 0; op.ntcreatex.in.fname = fname; status = smb_raw_open(cli->tree, torture, &op); torture_assert_ntstatus_ok(torture, status, "smb_raw_open failed"); fnum = op.ntcreatex.out.file.fnum; ret = torture_raw_qfileinfo_internals(torture, torture, cli->tree, fnum, fname, true /* is_ipc */); smbcli_close(cli->tree, fnum); return ret; }
/* basic testing of all RAW_FILEINFO_* calls for each call we test that it succeeds, and where possible test for consistency between the calls. */ bool torture_raw_qfileinfo(struct torture_context *torture, struct smbcli_state *cli) { int fnum; bool ret; const char *fname = "\\torture_qfileinfo.txt"; fnum = create_complex_file(cli, torture, fname); if (fnum == -1) { printf("ERROR: open of %s failed (%s)\n", fname, smbcli_errstr(cli->tree)); return false; } ret = torture_raw_qfileinfo_internals(torture, torture, cli->tree, fnum, fname, false /* is_ipc */); smbcli_close(cli->tree, fnum); smbcli_unlink(cli->tree, fname); return ret; }
BOOL torture_raw_qfileinfo_pipe(struct torture_context *torture) { TALLOC_CTX *mem_ctx; BOOL ret = True; int fnum; const char *fname = "\\lsass"; struct smbcli_state *cli; struct dcerpc_pipe *p; struct smbcli_tree *ipc_tree; NTSTATUS status; if (!torture_open_connection(&cli, 0)) { return False; } mem_ctx = talloc_init("torture_qfileinfo_pipe"); if (!(p = dcerpc_pipe_init(mem_ctx, cli->tree->session->transport->socket->event.ctx))) { return False; } status = dcerpc_pipe_open_smb(p, cli->tree, fname); if (!NT_STATUS_IS_OK(status)) { d_printf("dcerpc_pipe_open_smb failed: %s\n", nt_errstr(status)); talloc_free(p); return False; } ipc_tree = dcerpc_smb_tree(p->conn); fnum = dcerpc_smb_fnum(p->conn); ret = torture_raw_qfileinfo_internals(torture, mem_ctx, ipc_tree, fnum, fname, True /* is_ipc */); talloc_free(p); return ret; }