static struct bkrp_BackupKey *createRetreiveBackupKeyGUIDStruct(struct torture_context *tctx, struct dcerpc_pipe *p, int version, DATA_BLOB *out) { struct dcerpc_binding *binding; struct bkrp_client_side_wrapped data; struct GUID *g = talloc(tctx, struct GUID); struct bkrp_BackupKey *r = talloc_zero(tctx, struct bkrp_BackupKey); enum ndr_err_code ndr_err; DATA_BLOB blob; NTSTATUS status; if (r == NULL) { return NULL; } binding = dcerpc_binding_dup(tctx, p->binding); if (binding == NULL) { return NULL; } status = dcerpc_binding_set_flags(binding, DCERPC_SEAL|DCERPC_AUTH_SPNEGO, 0); if (!NT_STATUS_IS_OK(status)) { return NULL; } ZERO_STRUCT(data); status = GUID_from_string(BACKUPKEY_RETRIEVE_BACKUP_KEY_GUID, g); if (!NT_STATUS_IS_OK(status)) { return NULL; } r->in.guidActionAgent = g; data.version = version; ndr_err = ndr_push_struct_blob(&blob, tctx, &data, (ndr_push_flags_fn_t)ndr_push_bkrp_client_side_wrapped); if (!NDR_ERR_CODE_IS_SUCCESS(ndr_err)) { return NULL; } r->in.data_in = blob.data; r->in.data_in_len = blob.length; r->out.data_out = &out->data; r->out.data_out_len = talloc(r, uint32_t); return r; }
/* * Build a list of all interfaces handled by all endpoint servers. */ static uint32_t build_ep_list(TALLOC_CTX *mem_ctx, struct dcesrv_endpoint *endpoint_list, const struct GUID *uuid, const char *srv_addr, struct dcesrv_ep_iface **peps) { struct dcesrv_ep_iface *eps = NULL; struct dcesrv_endpoint *d; uint32_t total = 0; NTSTATUS status; *peps = NULL; for (d = endpoint_list; d != NULL; d = d->next) { struct dcesrv_iface_list *iface; struct dcerpc_binding *description; for (iface = d->iface_list; iface != NULL; iface = iface->next) { if (uuid && !interface_match_by_uuid(iface->iface, uuid)) { continue; } eps = talloc_realloc(mem_ctx, eps, struct dcesrv_ep_iface, total + 1); if (eps == NULL) { return 0; } eps[total].name = talloc_strdup(eps, iface->iface->name); eps[total].syntax_id = iface->iface->syntax_id; description = dcerpc_binding_dup(mem_ctx, d->ep_description); if (description == NULL) { return 0; } description->object = iface->iface->syntax_id; if (description->transport == NCACN_IP_TCP && srv_addr != NULL && (strcmp(description->host, "0.0.0.0") == 0 || strcmp(description->host, "::") == 0)) { description->host = srv_addr; } status = dcerpc_binding_build_tower(eps, description, &eps[total].ep); TALLOC_FREE(description); if (NT_STATUS_IS_ERR(status)) { DEBUG(1, ("Unable to build tower for %s\n", iface->iface->name)); continue; } total++; } } *peps = eps; return total; }