static BOOL test_opendomain_lsa(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx, struct policy_handle *handle, struct lsa_String *domname, uint32_t *access_mask) { NTSTATUS status; struct lsa_OpenPolicy2 open; struct lsa_ObjectAttribute attr; struct lsa_QosInfo qos; *access_mask = SEC_FLAG_MAXIMUM_ALLOWED; ZERO_STRUCT(attr); ZERO_STRUCT(qos); qos.len = 0; qos.impersonation_level = 2; qos.context_mode = 1; qos.effective_only = 0; attr.sec_qos = &qos; open.in.system_name = domname->string; open.in.attr = &attr; open.in.access_mask = *access_mask; open.out.handle = handle; status = dcerpc_lsa_OpenPolicy2(p, mem_ctx, &open); if (!NT_STATUS_IS_OK(status)) { return False; } return True; }
NTSTATUS dcerpc_lsa_open_policy2(struct dcerpc_binding_handle *h, TALLOC_CTX *mem_ctx, const char *srv_name_slash, bool sec_qos, uint32_t des_access, struct policy_handle *pol, NTSTATUS *result) { struct lsa_ObjectAttribute attr; struct lsa_QosInfo qos; ZERO_STRUCT(attr); attr.len = 0x18; if (sec_qos) { qos.len = 0xc; qos.impersonation_level = 2; qos.context_mode = 1; qos.effective_only = 0; attr.sec_qos = &qos; } return dcerpc_lsa_OpenPolicy2(h, mem_ctx, srv_name_slash, &attr, des_access, pol, result); }
static BOOL open_policy(TALLOC_CTX *mem_ctx, struct dcerpc_pipe *p, struct policy_handle **handle) { struct lsa_ObjectAttribute attr; struct lsa_QosInfo qos; struct lsa_OpenPolicy2 r; NTSTATUS status; *handle = talloc(mem_ctx, struct policy_handle); if (!*handle) { return False; } qos.len = 0; qos.impersonation_level = 2; qos.context_mode = 1; qos.effective_only = 0; attr.len = 0; attr.root_dir = NULL; attr.object_name = NULL; attr.attributes = 0; attr.sec_desc = NULL; attr.sec_qos = &qos; r.in.system_name = "\\"; r.in.attr = &attr; r.in.access_mask = SEC_FLAG_MAXIMUM_ALLOWED; r.out.handle = *handle; status = dcerpc_lsa_OpenPolicy2(p, mem_ctx, &r); return NT_STATUS_IS_OK(status); }