summaryrefslogtreecommitdiff
path: root/source3
diff options
context:
space:
mode:
Diffstat (limited to 'source3')
-rw-r--r--source3/include/ntdomain.h2
-rw-r--r--source3/include/proto.h1
-rw-r--r--source3/rpc_server/srv_pipe.c122
3 files changed, 26 insertions, 99 deletions
diff --git a/source3/include/ntdomain.h b/source3/include/ntdomain.h
index 1829b19c77..23bbe9aba2 100644
--- a/source3/include/ntdomain.h
+++ b/source3/include/ntdomain.h
@@ -157,7 +157,7 @@ typedef struct pipe_rpc_fns {
/* RPC function table associated with the current rpc_bind (associated by context) */
- struct api_struct *cmds;
+ const struct api_struct *cmds;
int n_cmds;
uint32 context_id;
diff --git a/source3/include/proto.h b/source3/include/proto.h
index 3c3d5018df..209bc0704e 100644
--- a/source3/include/proto.h
+++ b/source3/include/proto.h
@@ -8825,7 +8825,6 @@ void free_pipe_rpc_context( PIPE_RPC_FNS *list );
bool api_pipe_request(pipes_struct *p);
bool api_rpcTNP(pipes_struct *p, const char *rpc_name,
const struct api_struct *api_rpc_cmds, int n_cmds);
-void get_pipe_fns( int idx, struct api_struct **fns, int *n_fns );
/* The following definitions come from rpc_server/srv_pipe_hnd.c */
diff --git a/source3/rpc_server/srv_pipe.c b/source3/rpc_server/srv_pipe.c
index 48e6646c75..fa8fffa350 100644
--- a/source3/rpc_server/srv_pipe.c
+++ b/source3/rpc_server/srv_pipe.c
@@ -29,7 +29,6 @@
#include "includes.h"
-extern struct pipe_id_info pipe_names[];
extern struct current_user current_user;
#undef DBGC_CLASS
@@ -986,53 +985,42 @@ bool setup_cancel_ack_reply(pipes_struct *p, prs_struct *rpc_in_p)
bool check_bind_req(struct pipes_struct *p, RPC_IFACE* abstract,
RPC_IFACE* transfer, uint32 context_id)
{
- char *pipe_name = p->name;
int i=0;
- fstring pname;
-
- fstrcpy(pname,"\\PIPE\\");
- fstrcat(pname,pipe_name);
+ struct pipe_rpc_fns *context_fns;
- DEBUG(3,("check_bind_req for %s\n", pname));
+ DEBUG(3,("check_bind_req for %s\n", p->name));
/* we have to check all now since win2k introduced a new UUID on the lsaprpc pipe */
-
- for ( i=0; pipe_names[i].client_pipe; i++ ) {
- DEBUGADD(10,("checking %s\n", pipe_names[i].client_pipe));
- if ( strequal(pipe_names[i].client_pipe, pname)
- && (abstract->if_version == pipe_names[i].abstr_syntax->if_version)
- && (memcmp(&abstract->uuid, &pipe_names[i].abstr_syntax->uuid, sizeof(struct GUID)) == 0)
- && (transfer->if_version == pipe_names[i].trans_syntax->if_version)
- && (memcmp(&transfer->uuid, &pipe_names[i].trans_syntax->uuid, sizeof(struct GUID)) == 0) ) {
- struct api_struct *fns = NULL;
- int n_fns = 0;
- PIPE_RPC_FNS *context_fns;
-
- if ( !(context_fns = SMB_MALLOC_P(PIPE_RPC_FNS)) ) {
- DEBUG(0,("check_bind_req: malloc() failed!\n"));
- return False;
- }
-
- /* save the RPC function table associated with this bind */
-
- get_pipe_fns(i, &fns, &n_fns);
-
- context_fns->cmds = fns;
- context_fns->n_cmds = n_fns;
- context_fns->context_id = context_id;
-
- /* add to the list of open contexts */
-
- DLIST_ADD( p->contexts, context_fns );
-
+
+ for (i=0; i<rpc_lookup_size; i++) {
+ DEBUGADD(10, ("checking %s\n", rpc_lookup[i].pipe.clnt));
+ if (strequal(rpc_lookup[i].pipe.clnt, p->name)
+ && ndr_syntax_id_equal(
+ abstract, &rpc_lookup[i].rpc_interface)
+ && ndr_syntax_id_equal(
+ transfer, &ndr_transfer_syntax)) {
break;
}
}
- if(pipe_names[i].client_pipe == NULL) {
+ if (i == rpc_lookup_size) {
+ return false;
+ }
+
+ context_fns = SMB_MALLOC_P(struct pipe_rpc_fns);
+ if (context_fns == NULL) {
+ DEBUG(0,("check_bind_req: malloc() failed!\n"));
return False;
}
+ context_fns->cmds = rpc_lookup[i].cmds;
+ context_fns->n_cmds = rpc_lookup[i].n_cmds;
+ context_fns->context_id = context_id;
+
+ /* add to the list of open contexts */
+
+ DLIST_ADD( p->contexts, context_fns );
+
return True;
}
@@ -2393,63 +2381,3 @@ bool api_rpcTNP(pipes_struct *p, const char *rpc_name,
return True;
}
-
-/*******************************************************************
-*******************************************************************/
-
-void get_pipe_fns( int idx, struct api_struct **fns, int *n_fns )
-{
- struct api_struct *cmds = NULL;
- int n_cmds = 0;
-
- switch ( idx ) {
- case PI_LSARPC:
- lsarpc_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_DSSETUP:
- dssetup_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_SAMR:
- samr_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_NETLOGON:
- netlogon_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_SRVSVC:
- srvsvc_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_WKSSVC:
- wkssvc_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_WINREG:
- winreg_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_SPOOLSS:
- spoolss_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_NETDFS:
- netdfs_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_SVCCTL:
- svcctl2_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_EVENTLOG:
- eventlog2_get_pipe_fns( &cmds, &n_cmds );
- break;
- case PI_NTSVCS:
- ntsvcs2_get_pipe_fns( &cmds, &n_cmds );
- break;
-#ifdef DEVELOPER
- case PI_RPCECHO:
- rpcecho_get_pipe_fns( &cmds, &n_cmds );
- break;
-#endif
- default:
- DEBUG(0,("get_pipe_fns: Unknown pipe index! [%d]\n", idx));
- }
-
- *fns = cmds;
- *n_fns = n_cmds;
-
- return;
-}