}
struct smbd_smb2_create_state {
+ struct tevent_context *ev;
struct smbd_smb2_request *smb2req;
struct smb_request *smb1req;
bool open_was_deferred;
return NULL;
}
*state = (struct smbd_smb2_create_state) {
+ .ev = ev,
.smb2req = smb2req,
};
smb1req = smbd_smb2_fake_smb_request(smb2req);
if (tevent_req_nomem(smb1req, req)) {
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
state->smb1req = smb1req;
state->out_context_blobs = talloc_zero(state, struct smb2_create_blobs);
if (tevent_req_nomem(state->out_context_blobs, req)) {
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
dhnq = smb2_create_blob_find(&in_context_blobs,
{
/* not both are allowed at the same time */
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
if (dhnc) {
if (dhnc->data.length != 16) {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
/*
if (in_context_blobs.num_blobs != num_blobs_allowed) {
tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
if (dh2c->data.length != 36) {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
/*
if (in_context_blobs.num_blobs != num_blobs_allowed) {
tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
if (dhnc || dh2c) {
/* durable handles are not supported on IPC$ */
tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
if (!lp_nt_pipe_support()) {
tevent_req_nterror(req, NT_STATUS_ACCESS_DENIED);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
status = open_np_file(smb1req, pipe_name, &result);
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
info = FILE_WAS_OPENED;
} else if (CAN_PRINT(smb1req->conn)) {
if (dhnc || dh2c) {
/* durable handles are not supported on printers */
tevent_req_nterror(req, NT_STATUS_OBJECT_NAME_NOT_FOUND);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
status = file_new(smb1req, smb1req->conn, &result);
if(!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
status = print_spool_open(result, in_name,
if (!NT_STATUS_IS_OK(status)) {
file_free(smb1req, result);
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
info = FILE_WAS_CREATED;
} else {
fname = talloc_strdup(state, in_name);
if (tevent_req_nomem(fname, req)) {
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
if (exta) {
if (!lp_ea_support(SNUM(smb2req->tcon->compat))) {
tevent_req_nterror(req,
NT_STATUS_EAS_NOT_SUPPORTED);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
ea_list = read_nttrans_ea_list(mem_ctx,
if (!ea_list) {
DEBUG(10,("smbd_smb2_create_send: read_ea_name_list failed.\n"));
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
/*
*/
if (ea_list_has_invalid_name(ea_list)) {
tevent_req_nterror(req, STATUS_INVALID_EA_NAME);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
max_access_time = BVAL(mxac->data.data, 0);
} else {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
sec_desc = talloc_zero(state, struct security_descriptor);
if (tevent_req_nomem(sec_desc, req)) {
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
ndr_err = ndr_pull_struct_blob(&secd->data,
DEBUG(2,("ndr_pull_security_descriptor failed: %s\n",
ndr_errstr(ndr_err)));
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
if (dhnq) {
if (dhnq->data.length != 16) {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
if (dh2q) {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
/*
if (dh2q->data.length != 32) {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
if (dhnq) {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
durable_v2_timeout = IVAL(p, 0);
status = GUID_from_ndr_blob(&create_guid_blob,
&_create_guid);
if (tevent_req_nterror(req, status)) {
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
create_guid = &_create_guid;
/*
} else if (tevent_req_nterror(req, status)) {
DBG_WARNING("smb2srv_open_lookup_replay_cache "
"failed: %s\n", nt_errstr(status));
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
} else if (!replay_operation) {
/*
* If a create without replay operation flag
*/
status = NT_STATUS_DUPLICATE_OBJECTID;
(void)tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
status = GUID_from_ndr_blob(&create_guid_blob,
&_create_guid);
if (tevent_req_nterror(req, status)) {
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
create_guid = &_create_guid;
if (alsi) {
if (alsi->data.length != 8) {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
allocation_size = BVAL(alsi->data.data, 0);
}
if (twrp->data.length != 8) {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
nttime = BVAL(twrp->data.data, 0);
tm->tm_min,
tm->tm_sec);
if (tevent_req_nomem(fname, req)) {
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
/*
* Tell filename_create_ucf_flags() this
if (qfid) {
if (qfid->data.length != 0) {
tevent_req_nterror(req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
if (lease_len == -1) {
tevent_req_nterror(
req, NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
lease_ptr = &lease;
{
status = NT_STATUS_ACCESS_DENIED;
(void)tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
if (!smb2_lease_key_equal(&lease.lease_key,
&op_ls->lease_key))
{
status = NT_STATUS_ACCESS_DENIED;
(void)tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
}
"smb2srv_open_recreate failed: %s\n",
nt_errstr(status)));
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
DEBUG(10, ("smb2_create_send: %s to recreate the "
talloc_free(op);
tevent_req_nterror(req,
NT_STATUS_OBJECT_NAME_NOT_FOUND);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
status = SMB_VFS_DURABLE_RECONNECT(smb1req->conn,
nt_errstr(return_status)));
tevent_req_nterror(req, return_status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
DEBUG(10, ("result->oplock_type=%u, lease_ptr==%p\n",
if (!NT_STATUS_IS_OK(status)) {
close_file(smb1req, result, SHUTDOWN_CLOSE);
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
data_blob_free(&op->global->backend_cookie);
status = check_path_syntax(fname);
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
&smb_fname);
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
/*
SMB2_IMPERSONATION_DELEGATE) {
tevent_req_nterror(req,
NT_STATUS_BAD_IMPERSONATION_LEVEL);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
/*
if (in_name[0] == '\\' || in_name[0] == '/') {
tevent_req_nterror(req,
NT_STATUS_INVALID_PARAMETER);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
status = SMB_VFS_CREATE_FILE(smb1req->conn,
return req;
}
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
op = result->op;
}
blob);
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
}
nt_errstr(status)));
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
blob);
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
blob);
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
blob);
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
if (!smb2_lease_push(&lease, buf, lease_len)) {
tevent_req_nterror(
req, NT_STATUS_INTERNAL_ERROR);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
status = smb2_create_blob_add(
data_blob_const(buf, lease_len));
if (!NT_STATUS_IS_OK(status)) {
tevent_req_nterror(req, status);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
}
}
fsp_str_dbg(result), fsp_fnum_dbg(result)));
tevent_req_done(req);
- return tevent_req_post(req, ev);
+ return tevent_req_post(req, state->ev);
}
static NTSTATUS smbd_smb2_create_recv(struct tevent_req *req,