diff options
Diffstat (limited to 'source4/rpc_server/handles.c')
-rw-r--r-- | source4/rpc_server/handles.c | 20 |
1 files changed, 10 insertions, 10 deletions
diff --git a/source4/rpc_server/handles.c b/source4/rpc_server/handles.c index 6b7d422267..df7745f6da 100644 --- a/source4/rpc_server/handles.c +++ b/source4/rpc_server/handles.c @@ -43,15 +43,9 @@ struct dcesrv_handle *dcesrv_handle_new(struct dcesrv_state *dce, h->mem_ctx = mem_ctx; h->data = NULL; - memset(h->wire_handle.data, 'H', sizeof(h->wire_handle.data)); - strncpy(h->wire_handle.data, dce->ndr->name, 11); - h->wire_handle.data[11] = handle_type; + h->wire_handle.handle_type = handle_type; + uuid_generate_random(&h->wire_handle.uuid); - /* TODO: check for wraparound here */ - SIVAL(&h->wire_handle.data, 12, random()); - dce->next_handle++; - SIVAL(&h->wire_handle.data, 16, dce->next_handle); - DLIST_ADD(dce->handles, h); return h; @@ -78,12 +72,18 @@ struct dcesrv_handle *dcesrv_handle_fetch(struct dcesrv_state *dce, { struct dcesrv_handle *h; - if (all_zero(p->data, sizeof(p->data))) { + if (p->handle_type == 0 && uuid_all_zero(&p->uuid)) { return dcesrv_handle_new(dce, handle_type); } for (h=dce->handles; h; h=h->next) { - if (memcmp(h->wire_handle.data, p->data, sizeof(p->data)) == 0) { + if (h->wire_handle.handle_type == p->handle_type && + uuid_equal(&p->uuid, &h->wire_handle.uuid)) { + if (p->handle_type != handle_type) { + DEBUG(0,("client gave us the wrong handle type (%d should be %d)\n", + p->handle_type, handle_type)); + return NULL; + } return h; } } |