summaryrefslogtreecommitdiff
path: root/source4/rpc_server
diff options
context:
space:
mode:
authorAndrew Tridgell <tridge@samba.org>2003-12-13 04:46:50 +0000
committerAndrew Tridgell <tridge@samba.org>2003-12-13 04:46:50 +0000
commit8faa77f177833eeee245391840d06771f46e0136 (patch)
treef13c2fd53d13539915e8565e4800cac18cfb8e71 /source4/rpc_server
parentda86d3af3126413e59798bcfb0705c307bc730cb (diff)
downloadsamba-8faa77f177833eeee245391840d06771f46e0136.tar.gz
samba-8faa77f177833eeee245391840d06771f46e0136.tar.bz2
samba-8faa77f177833eeee245391840d06771f46e0136.zip
rpcdump.exe now works fine against a Samba4 server
for some reason the epm_Lookup replies can't be parsed by ethereal, although w2k parses then fine as does the Samba4 NDR code. (This used to be commit 097e7ca99d947932df5674c36e628ca6b8f31d3a)
Diffstat (limited to 'source4/rpc_server')
-rw-r--r--source4/rpc_server/dcerpc_server.c1
-rw-r--r--source4/rpc_server/dcerpc_server.h1
-rw-r--r--source4/rpc_server/epmapper/rpc_epmapper.c11
3 files changed, 9 insertions, 4 deletions
diff --git a/source4/rpc_server/dcerpc_server.c b/source4/rpc_server/dcerpc_server.c
index 35661d913e..67b36cdc48 100644
--- a/source4/rpc_server/dcerpc_server.c
+++ b/source4/rpc_server/dcerpc_server.c
@@ -651,6 +651,7 @@ int dcesrv_lookup_endpoints(const struct dcerpc_interface_table *table,
return -1;
}
+ (*e)->name = table->name;
(*e)->uuid = table->uuid;
(*e)->if_version = table->if_version;
(*e)->endpoint.type = ENDPOINT_SMB;
diff --git a/source4/rpc_server/dcerpc_server.h b/source4/rpc_server/dcerpc_server.h
index 3f2f5d039f..83e0ee249a 100644
--- a/source4/rpc_server/dcerpc_server.h
+++ b/source4/rpc_server/dcerpc_server.h
@@ -35,6 +35,7 @@ struct dcesrv_endpoint {
/* a endpoint combined with an interface description */
struct dcesrv_ep_iface {
+ const char *name;
struct dcesrv_endpoint endpoint;
const char *uuid;
uint32 if_version;
diff --git a/source4/rpc_server/epmapper/rpc_epmapper.c b/source4/rpc_server/epmapper/rpc_epmapper.c
index c5bd2ffa45..2898a70159 100644
--- a/source4/rpc_server/epmapper/rpc_epmapper.c
+++ b/source4/rpc_server/epmapper/rpc_epmapper.c
@@ -72,14 +72,14 @@ static BOOL fill_protocol_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr,
twr->floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
twr->floors[3].rhs.rhs_data.data = talloc_asprintf(mem_ctx, "\\PIPE\\%s",
e->endpoint.info.smb_pipe);
- twr->floors[3].rhs.rhs_data.length = strlen(twr->floors[3].rhs.rhs_data.data);
+ twr->floors[3].rhs.rhs_data.length = strlen(twr->floors[3].rhs.rhs_data.data)+1;
/* on an NetBIOS link ... */
twr->floors[4].lhs.protocol = EPM_PROTOCOL_NETBIOS;
twr->floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
twr->floors[4].rhs.rhs_data.data = talloc_asprintf(mem_ctx, "\\\\%s",
lp_netbios_name());
- twr->floors[4].rhs.rhs_data.length = strlen(twr->floors[4].rhs.rhs_data.data);
+ twr->floors[4].rhs.rhs_data.length = strlen(twr->floors[4].rhs.rhs_data.data)+1;
return True;
}
@@ -175,6 +175,9 @@ static NTSTATUS epm_Lookup(struct dcesrv_state *dce, TALLOC_CTX *mem_ctx,
if (num_ents == 0) {
r->out.entries = NULL;
+ r->out.status = EPMAPPER_STATUS_NO_MORE_ENTRIES;
+ ZERO_STRUCTP(r->out.entry_handle);
+ dcesrv_handle_destroy(dce, h);
return NT_STATUS_OK;
}
@@ -185,7 +188,7 @@ static NTSTATUS epm_Lookup(struct dcesrv_state *dce, TALLOC_CTX *mem_ctx,
for (i=0;i<num_ents;i++) {
ZERO_STRUCT(r->out.entries[i].object);
- r->out.entries[i].annotation = "";
+ r->out.entries[i].annotation = eps->e[i].name;
r->out.entries[i].tower = talloc_p(mem_ctx, struct epm_twr_t);
if (!r->out.entries[i].tower) {
return NT_STATUS_NO_MEMORY;
@@ -270,7 +273,7 @@ static NTSTATUS epm_Map(struct dcesrv_state *dce, TALLOC_CTX *mem_ctx,
failed:
r->out.num_towers = 0;
- r->out.status = EPMAPPER_MAP_FAILED;
+ r->out.status = EPMAPPER_STATUS_NO_MORE_ENTRIES;
r->out.towers->twr = NULL;
return NT_STATUS_OK;