^samba3.rpc.mdssvc.rpccmd.close\(fileserver\)
-^samba3.rpc.mdssvc.rpccmd.null_ph\(fileserver\)
-^samba3.rpc.mdssvc.disconnect1.invalid_ph_unknown1\(fileserver\)
-^samba3.rpc.mdssvc.disconnect2.invalid_ph_cmd\(fileserver\)
-^samba3.rpc.mdssvc.disconnect3.invalid_ph_close\(fileserver\)
^samba3.rpc.mdssvc.mdscmd.fetch_unknown_cnid\(fileserver\)
return;
}
+static bool is_zero_policy_handle(const struct policy_handle *h)
+{
+ struct GUID zero_uuid = {0};
+
+ if (h->handle_type != 0) {
+ return false;
+ }
+ if (!GUID_equal(&h->uuid, &zero_uuid)) {
+ return false;
+ }
+ return true;
+}
+
void _mdssvc_unknown1(struct pipes_struct *p, struct mdssvc_unknown1 *r)
{
struct mds_ctx *mds_ctx;
if (!find_policy_by_hnd(p, &r->in.handle, (void **)(void *)&mds_ctx)) {
- DEBUG(1, ("%s: invalid handle\n", __func__));
+ if (is_zero_policy_handle(&r->in.handle)) {
+ p->fault_state = 0;
+ } else {
+ p->fault_state = DCERPC_NCA_S_PROTO_ERROR;
+ }
+ *r->out.status = 0;
+ *r->out.flags = 0;
+ *r->out.unkn7 = 0;
return;
}
struct mds_ctx *mds_ctx;
if (!find_policy_by_hnd(p, &r->in.handle, (void **)(void *)&mds_ctx)) {
- DEBUG(1, ("%s: invalid handle\n", __func__));
+ if (is_zero_policy_handle(&r->in.handle)) {
+ p->fault_state = 0;
+ } else {
+ p->fault_state = DCERPC_NCA_S_PROTO_ERROR;
+ }
+ r->out.response_blob->size = 0;
+ *r->out.fragment = 0;
+ *r->out.unkn9 = 0;
return;
}
if (!find_policy_by_hnd(p, &r->in.in_handle, (void **)(void *)&mds_ctx)) {
DEBUG(1, ("%s: invalid handle\n", __func__));
+ if (is_zero_policy_handle(&r->in.in_handle)) {
+ p->fault_state = 0;
+ } else {
+ p->fault_state = DCERPC_NCA_S_PROTO_ERROR;
+ }
return;
}