diff options
author | Andrew Tridgell <tridge@samba.org> | 2003-11-27 07:28:46 +0000 |
---|---|---|
committer | Andrew Tridgell <tridge@samba.org> | 2003-11-27 07:28:46 +0000 |
commit | c7c9e61987dbc46fe962647727bfe52e0fdd8de0 (patch) | |
tree | 158546b900c54a8426f3e94cbb3130f6ed8227cd /source4/librpc/rpc | |
parent | 4884a97f3b4564fa367598453d7ebc2b24ba6708 (diff) | |
download | samba-c7c9e61987dbc46fe962647727bfe52e0fdd8de0.tar.gz samba-c7c9e61987dbc46fe962647727bfe52e0fdd8de0.tar.bz2 samba-c7c9e61987dbc46fe962647727bfe52e0fdd8de0.zip |
more epmapper and mgmt magic
protocol 0x1f is interesting - its ncacn_http !
(This used to be commit e3d40e3da6e15407162c1d0a29d2cbe86842228e)
Diffstat (limited to 'source4/librpc/rpc')
-rw-r--r-- | source4/librpc/rpc/dcerpc_tcp.c | 10 | ||||
-rw-r--r-- | source4/librpc/rpc/dcerpc_util.c | 34 |
2 files changed, 43 insertions, 1 deletions
diff --git a/source4/librpc/rpc/dcerpc_tcp.c b/source4/librpc/rpc/dcerpc_tcp.c index c50b71c3f0..468cd9465b 100644 --- a/source4/librpc/rpc/dcerpc_tcp.c +++ b/source4/librpc/rpc/dcerpc_tcp.c @@ -48,6 +48,16 @@ static NTSTATUS tcp_raw_recv(struct dcerpc_pipe *p, return NT_STATUS_NET_WRITE_FAULT; } + /* this could be a ncacn_http endpoint - this doesn't work + yet, but it goes close */ + if (strncmp(blob1.data, "ncacn_http/1.0", 14) == 0) { + memmove(blob1.data, blob1.data+14, 2); + ret = read_data(tcp->fd, blob1.data+2, 14); + if (ret != 14) { + return NT_STATUS_NET_WRITE_FAULT; + } + } + /* we might have recieved a partial fragment, in which case we need to pull the rest of it */ frag_length = SVAL(blob1.data, 8); diff --git a/source4/librpc/rpc/dcerpc_util.c b/source4/librpc/rpc/dcerpc_util.c index e9499f969b..d439c89e65 100644 --- a/source4/librpc/rpc/dcerpc_util.c +++ b/source4/librpc/rpc/dcerpc_util.c @@ -143,7 +143,7 @@ NTSTATUS dcerpc_epm_map_tcp_port(const char *server, } if (twr_r->towers.num_floors != 5 || - twr_r->towers.floors[3].lhs.protocol != EPM_PROTOCOL_TCP || + twr_r->towers.floors[3].lhs.protocol != twr.towers.floors[3].lhs.protocol || twr_r->towers.floors[3].rhs.rhs_data.length != 2) { dcerpc_pipe_close(p); return NT_STATUS_PORT_UNREACHABLE; @@ -155,3 +155,35 @@ NTSTATUS dcerpc_epm_map_tcp_port(const char *server, return NT_STATUS_OK; } + + +/* + find the pipe name for a local IDL interface +*/ +const char *idl_pipe_name(const char *uuid, uint32 if_version) +{ + int i; + for (i=0;dcerpc_pipes[i];i++) { + if (strcasecmp(dcerpc_pipes[i]->uuid, uuid) == 0 && + dcerpc_pipes[i]->if_version == if_version) { + return dcerpc_pipes[i]->name; + } + } + return "UNKNOWN"; +} + +/* + find the number of calls defined by local IDL +*/ +int idl_num_calls(const char *uuid, uint32 if_version) +{ + int i; + for (i=0;dcerpc_pipes[i];i++) { + if (strcasecmp(dcerpc_pipes[i]->uuid, uuid) == 0 && + dcerpc_pipes[i]->if_version == if_version) { + return dcerpc_pipes[i]->num_calls; + } + } + return -1; +} + |