diff options
author | Andrew Tridgell <tridge@samba.org> | 2004-09-28 05:44:59 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 12:59:25 -0500 |
commit | b2f1a29e4348a5bc34a87d72d526e23e421ed9d5 (patch) | |
tree | c69987090647da615193f1361e03986588ac164d /source4/rpc_server | |
parent | a675b09e8d45b9298df8f8c82bbaa7b91a793eb5 (diff) | |
download | samba-b2f1a29e4348a5bc34a87d72d526e23e421ed9d5.tar.gz samba-b2f1a29e4348a5bc34a87d72d526e23e421ed9d5.tar.bz2 samba-b2f1a29e4348a5bc34a87d72d526e23e421ed9d5.zip |
r2710: continue with the new style of providing a parent context whenever
possible to a structure creation routine. This makes for much easier
global cleanup.
(This used to be commit e14ee428ec357fab76a960387a9820a673786e27)
Diffstat (limited to 'source4/rpc_server')
-rw-r--r-- | source4/rpc_server/dcerpc_server.c | 46 |
1 files changed, 25 insertions, 21 deletions
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c index 9536fd6894..220c730790 100644 --- a/source4/rpc_server/dcerpc_server.c +++ b/source4/rpc_server/dcerpc_server.c @@ -269,6 +269,29 @@ NTSTATUS dcesrv_fetch_session_key(struct dcesrv_connection *p, /* + destroy a link to an endpoint +*/ +static int dcesrv_endpoint_destructor(void *ptr) +{ + struct dcesrv_connection *p = ptr; + if (p->iface) { + p->iface->unbind(p, p->iface); + } + + /* destroy any handles */ + while (p->handles) { + dcesrv_handle_destroy(p, p->handles); + } + + if (p->auth_state.gensec_security) { + gensec_end(&p->auth_state.gensec_security); + } + + return 0; +} + + +/* connect to a dcerpc endpoint */ NTSTATUS dcesrv_endpoint_connect(struct dcesrv_context *dce_ctx, @@ -294,6 +317,8 @@ NTSTATUS dcesrv_endpoint_connect(struct dcesrv_context *dce_ctx, (*p)->auth_state.session_key = dcesrv_generic_session_key; (*p)->srv_conn = NULL; + talloc_set_destructor(*p, dcesrv_endpoint_destructor); + return NT_STATUS_OK; } @@ -332,27 +357,6 @@ NTSTATUS dcesrv_endpoint_search_connect(struct dcesrv_context *dce_ctx, } -/* - disconnect a link to an endpoint -*/ -void dcesrv_endpoint_disconnect(struct dcesrv_connection *p) -{ - if (p->iface) { - p->iface->unbind(p, p->iface); - } - - /* destroy any handles */ - while (p->handles) { - dcesrv_handle_destroy(p, p->handles); - } - - if (p->auth_state.gensec_security) { - gensec_end(&p->auth_state.gensec_security); - } - - talloc_free(p); -} - static void dcesrv_init_hdr(struct dcerpc_packet *pkt) { pkt->rpc_vers = 5; |