}
/* TODO: needed? or is successful global_lookup enough?) */
-#if 0
- if (!open->durable) {
+
+ if (!global->durable) {
tevent_req_nterror(req,
NT_STATUS_OBJECT_NAME_NOT_FOUND);
return tevent_req_post(req, ev);
}
-#endif
// TODO: implement this function..
status = smb2_create_durable_reconnect(global, mem_ctx, &result);
uint8_t p[8];
DATA_BLOB blob = data_blob_const(p, sizeof(p));
+ result->smbXsrv->global->backend_file_id = result->file_id;
+ result->smbXsrv->global->durable = true;
+
+ status = smbXsrv_open_update(result->smbXsrv);
+ if (!NT_STATUS_IS_OK(status)) {
+ tevent_req_nterror(req, status);
+ return tevent_req_post(req, ev);
+ }
+
ZERO_STRUCT(p);
status = smb2_create_blob_add(state, &out_context_blobs,
global_blob.seqnum += 1;
global_blob.info.info0 = global;
+ DEBUG(0,("%s:%s:\n", __location__, __FUNCTION__));
+ NDR_PRINT_DEBUG(smbXsrv_open_globalB, &global_blob);
+
ndr_err = ndr_push_struct_blob(&blob, global->db_rec, &global_blob,
(ndr_push_flags_fn_t)ndr_push_smbXsrv_open_globalB);
if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
//status = ndr_err_code;
TALLOC_FREE(global->db_rec);
+ //status = map...
return status;
}
struct smbXsrv_open_global_fetch_state {
TALLOC_CTX *mem_ctx;
- struct smbXsrv_open_global *open;
+ struct smbXsrv_open_global0 *op;
NTSTATUS status;
};
{
struct smbXsrv_open_global_fetch_state *state =
(struct smbXsrv_open_global_fetch_state *)private_data;
+ DATA_BLOB blob = data_blob_const(data.dptr, data.dsize);
+ struct smbXsrv_open_globalB global_blob;
+ enum ndr_err_code ndr_err;
- state->status = NT_STATUS_NOT_IMPLEMENTED;
+ ndr_err = ndr_pull_struct_blob(&blob, state->mem_ctx, &global_blob,
+ (ndr_pull_flags_fn_t)ndr_pull_smbXsrv_open_globalB);
+ if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) {
+ //state->status = map;
+ return;
+ }
+
+ DEBUG(0,("%s:%s:\n", __location__, __FUNCTION__));
+ NDR_PRINT_DEBUG(smbXsrv_open_globalB, &global_blob);
+
+ state->op = global_blob.info.info0;
+
+ state->status = NT_STATUS_OK;
}
static NTSTATUS smbXsrv_open_global_lookup(struct smbXsrv_open_table *table,
{
struct smbXsrv_open_global_fetch_state state = {
.mem_ctx = mem_ctx,
- .open = NULL,
+ .op = NULL,
.status = NT_STATUS_INTERNAL_ERROR,
};
TDB_DATA key;
return state.status;
}
- *_open = state.open;
+ *_open = state.op;
+ DEBUG(0,("%s:%s:\n", __location__, __FUNCTION__));
return NT_STATUS_OK;
}
global_rec = op->global->db_rec;
op->global->db_rec = NULL;
- if (global_rec == NULL) {
+ if (global_rec == NULL && !op->global->durable) {
uint8_t key_buf[sizeof(uint32_t)];
TDB_DATA key;
open_blob.version = 0;
open_blob.info.info0 = op;
+ DEBUG(0,("%s:%s:\n", __location__, __FUNCTION__));
NDR_PRINT_DEBUG(smbXsrv_openB, &open_blob);
}
return status;
}
+ {
+ struct smbXsrv_openB open_blob;
+
+ ZERO_STRUCT(open_blob);
+ open_blob.version = 0;
+ open_blob.info.info0 = op;
+
+ DEBUG(0,("%s:%s:\n", __location__, __FUNCTION__));
+ NDR_PRINT_DEBUG(smbXsrv_openB, &open_blob);
+ }
+
return NT_STATUS_OK;
}