From 98fb71782e05ae72cd6abeb38b6e0b96a50c1761 Mon Sep 17 00:00:00 2001 From: Volker Lendecke Date: Sun, 8 Nov 2009 10:51:34 +0100 Subject: s3: Do not reference the ndr_tables in the server calls directly This involves storing the interface table in the pipes_struct --- source3/rpc_server/srv_lsa_hnd.c | 5 +++-- source3/rpc_server/srv_pipe_hnd.c | 13 ++++++++++--- 2 files changed, 13 insertions(+), 5 deletions(-) (limited to 'source3/rpc_server') diff --git a/source3/rpc_server/srv_lsa_hnd.c b/source3/rpc_server/srv_lsa_hnd.c index 4233b6f0e6..8b4b4a9252 100644 --- a/source3/rpc_server/srv_lsa_hnd.c +++ b/source3/rpc_server/srv_lsa_hnd.c @@ -81,10 +81,11 @@ bool init_pipe_handle_list(pipes_struct *p, const struct ndr_syntax_id *syntax) for (plist = get_first_internal_pipe(); plist; plist = get_next_internal_pipe(plist)) { - if (ndr_syntax_id_equal(syntax, &plist->syntax)) { + if (ndr_syntax_id_equal(syntax, + &plist->interface->syntax_id)) { break; } - if (is_samr_lsa_pipe(&plist->syntax) + if (is_samr_lsa_pipe(&plist->interface->syntax_id) && is_samr_lsa_pipe(syntax)) { /* * samr and lsa share a handle space (same process diff --git a/source3/rpc_server/srv_pipe_hnd.c b/source3/rpc_server/srv_pipe_hnd.c index e7d94d70ec..8bc2bdd505 100644 --- a/source3/rpc_server/srv_pipe_hnd.c +++ b/source3/rpc_server/srv_pipe_hnd.c @@ -57,7 +57,8 @@ pipes_struct *get_next_internal_pipe(pipes_struct *p) const char *get_pipe_name_tos(struct pipes_struct *p) { - return get_pipe_name_from_syntax(talloc_tos(), &p->syntax); + return get_pipe_name_from_syntax(talloc_tos(), + &p->interface->syntax_id); } /**************************************************************************** @@ -119,6 +120,14 @@ static struct pipes_struct *make_internal_rpc_pipe_p(TALLOC_CTX *mem_ctx, return NULL; } + p->interface = get_iface_from_syntax(syntax); + if (p->interface == NULL) { + DEBUG(10, ("Could not find ndr table for syntax\n")); + TALLOC_FREE(p->mem_ctx); + TALLOC_FREE(p); + return NULL; + } + if (!init_pipe_handle_list(p, syntax)) { DEBUG(0,("open_rpc_pipe_p: init_pipe_handles failed.\n")); talloc_destroy(p->mem_ctx); @@ -161,8 +170,6 @@ static struct pipes_struct *make_internal_rpc_pipe_p(TALLOC_CTX *mem_ctx, */ prs_init_empty(&p->out_data.rdata, p->mem_ctx, MARSHALL); - p->syntax = *syntax; - DEBUG(4,("Created internal pipe %s (pipes_open=%d)\n", get_pipe_name_from_syntax(talloc_tos(), syntax), pipes_open)); -- cgit