summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--source4/librpc/idl/dcerpc.idl1
-rw-r--r--source4/librpc/idl/epmapper.idl43
-rw-r--r--source4/librpc/rpc/dcerpc_util.c6
-rw-r--r--source4/rpc_server/epmapper/rpc_epmapper.c20
-rw-r--r--source4/torture/rpc/epmapper.c60
5 files changed, 76 insertions, 54 deletions
diff --git a/source4/librpc/idl/dcerpc.idl b/source4/librpc/idl/dcerpc.idl
index 191e10a17a..81571541ea 100644
--- a/source4/librpc/idl/dcerpc.idl
+++ b/source4/librpc/idl/dcerpc.idl
@@ -110,6 +110,7 @@ interface dcerpc
*/
const uint8 DCERPC_AUTH_TYPE_KRB5_16 = 16;
const uint8 DCERPC_AUTH_TYPE_SCHANNEL = 68;
+ const uint8 DCERPC_AUTH_TYPE_MSMQ = 100;
const uint8 DCERPC_AUTH_LEVEL_NONE = 1;
const uint8 DCERPC_AUTH_LEVEL_CONNECT = 2;
diff --git a/source4/librpc/idl/epmapper.idl b/source4/librpc/idl/epmapper.idl
index 6a58dcfd7a..80c2fe5ee0 100644
--- a/source4/librpc/idl/epmapper.idl
+++ b/source4/librpc/idl/epmapper.idl
@@ -42,26 +42,35 @@ interface epmapper
} epm_prot_uuid;
typedef enum {
- EPM_PROTOCOL_NCACN_DNET_NSP = 0x04,
- EPM_PROTOCOL_NCACN_OSI_TP4 = 0x05,
- EPM_PROTOCOL_NCACN_OSI_CLNS = 0x06,
- EPM_PROTOCOL_NCACN_TCP = 0x07,
- EPM_PROTOCOL_NCADG_UDP = 0x08,
- EPM_PROTOCOL_NCACN_IP = 0x09,
- EPM_PROTOCOL_NCADG_RPC = 0x0a, /* Connectionless RPC */
- EPM_PROTOCOL_NCACN_RPC_C = 0x0b,
- EPM_PROTOCOL_NCACN_SPX = 0x0c,
- EPM_PROTOCOL_UUID = 0x0d,
- EPM_PROTOCOL_NCADG_IPX = 0x0e,
- EPM_PROTOCOL_NCACN_SMB = 0x0f,
- EPM_PROTOCOL_NCACN_PIPE = 0x10,
- EPM_PROTOCOL_NCACN_NETBIOS = 0x11,
- EPM_PROTOCOL_NCACN_NB_NB = 0x12, /* NetBIOS over NetBEUI */
- EPM_PROTOCOL_NCACN_HTTP = 0x1f
+
+ /* Level 4 and higher */
+ EPM_PROTOCOL_DNET_NSP = 0x04,
+ EPM_PROTOCOL_OSI_TP4 = 0x05,
+ EPM_PROTOCOL_OSI_CLNS = 0x06,
+ EPM_PROTOCOL_TCP = 0x07,
+ EPM_PROTOCOL_UDP = 0x08,
+ EPM_PROTOCOL_IP = 0x09,
+
+ /* These 4 are protocol identifiers, always at level 3 or lower */
+ EPM_PROTOCOL_NCADG = 0x0a, /* Connectionless RPC */
+ EPM_PROTOCOL_NCACN = 0x0b,
+ EPM_PROTOCOL_NCALRPC = 0x0c, /* Local RPC */
+ EPM_PROTOCOL_UUID = 0x0d,
+
+ EPM_PROTOCOL_IPX = 0x0e,
+ EPM_PROTOCOL_SMB = 0x0f,
+ EPM_PROTOCOL_PIPE = 0x10,
+ EPM_PROTOCOL_NETBIOS = 0x11,
+ EPM_PROTOCOL_NB_NB = 0x12, /* NetBIOS over NetBEUI */
+ EPM_PROTOCOL_SPX = 0x13,
+ EPM_PROTOCOL_NB_IPX = 0x14, /* NetBIOS over IPX */
+ EPM_PROTOCOL_HTTP = 0x1f,
+ EPM_PROTOCOL_UNIX_DS = 0x20, /* Unix domain socket */
+ EPM_PROTOCOL_NULL = 0x21
} epm_protocols;
typedef [nodiscriminant] union {
- [case(13)] epm_prot_uuid uuid;
+ [case(EPM_PROTOCOL_UUID)] epm_prot_uuid uuid;
[default] [flag(NDR_REMAINING)] DATA_BLOB lhs_data;
} epm_protocol_info;
diff --git a/source4/librpc/rpc/dcerpc_util.c b/source4/librpc/rpc/dcerpc_util.c
index f2ba573369..d3c461a2f4 100644
--- a/source4/librpc/rpc/dcerpc_util.c
+++ b/source4/librpc/rpc/dcerpc_util.c
@@ -105,17 +105,17 @@ NTSTATUS dcerpc_epm_map_tcp_port(const char *server,
twr.towers.floors[1].rhs.rhs_data = data_blob_talloc_zero(p, 2);
/* on an RPC connection ... */
- twr.towers.floors[2].lhs.protocol = EPM_PROTOCOL_NCACN_RPC_C;
+ twr.towers.floors[2].lhs.protocol = EPM_PROTOCOL_NCACN;
twr.towers.floors[2].lhs.info.lhs_data = data_blob(NULL, 0);
twr.towers.floors[2].rhs.rhs_data = data_blob_talloc_zero(p, 2);
/* on a TCP port ... */
- twr.towers.floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_TCP;
+ twr.towers.floors[3].lhs.protocol = EPM_PROTOCOL_TCP;
twr.towers.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
twr.towers.floors[3].rhs.rhs_data = data_blob_talloc_zero(p, 2);
/* on an IP link ... */
- twr.towers.floors[4].lhs.protocol = EPM_PROTOCOL_NCACN_IP;
+ twr.towers.floors[4].lhs.protocol = EPM_PROTOCOL_IP;
twr.towers.floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
twr.towers.floors[4].rhs.rhs_data = data_blob_talloc_zero(p, 4);
diff --git a/source4/rpc_server/epmapper/rpc_epmapper.c b/source4/rpc_server/epmapper/rpc_epmapper.c
index 54a996e82a..5f9271868c 100644
--- a/source4/rpc_server/epmapper/rpc_epmapper.c
+++ b/source4/rpc_server/epmapper/rpc_epmapper.c
@@ -72,21 +72,21 @@ static BOOL fill_protocol_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr,
twr->floors[1].rhs.rhs_data = data_blob_talloc_zero(mem_ctx, 2);
/* on an RPC connection ... */
- twr->floors[2].lhs.protocol = EPM_PROTOCOL_NCACN_RPC_C;
+ twr->floors[2].lhs.protocol = EPM_PROTOCOL_NCACN;
twr->floors[2].lhs.info.lhs_data = data_blob(NULL, 0);
twr->floors[2].rhs.rhs_data = data_blob_talloc_zero(mem_ctx, 2);
switch (e->ep_description.type) {
case ENDPOINT_SMB:
/* on a SMB pipe ... */
- twr->floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_SMB;
+ twr->floors[3].lhs.protocol = EPM_PROTOCOL_SMB;
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->ep_description.info.smb_pipe);
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_NCACN_NETBIOS;
+ 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());
@@ -95,13 +95,13 @@ static BOOL fill_protocol_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr,
case ENDPOINT_TCP:
/* on a TCP connection ... */
- twr->floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_TCP;
+ twr->floors[3].lhs.protocol = EPM_PROTOCOL_TCP;
twr->floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
twr->floors[3].rhs.rhs_data = data_blob_talloc(mem_ctx, NULL, 2);
RSSVAL(twr->floors[3].rhs.rhs_data.data, 0, e->ep_description.info.tcp_port);
/* on an IP link ... */
- twr->floors[4].lhs.protocol = EPM_PROTOCOL_NCACN_IP;
+ twr->floors[4].lhs.protocol = EPM_PROTOCOL_IP;
twr->floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
twr->floors[4].rhs.rhs_data = data_blob_talloc_zero(mem_ctx, 4);
/* TODO: we should fill in our IP address here as a hint to the
@@ -270,7 +270,7 @@ static error_status_t epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *me
floors[1].lhs.protocol != EPM_PROTOCOL_UUID ||
guid_cmp(mem_ctx, &floors[1].lhs.info.uuid.uuid, NDR_GUID) != 0 ||
floors[1].lhs.info.uuid.version != NDR_GUID_VERSION ||
- floors[2].lhs.protocol != EPM_PROTOCOL_NCACN_RPC_C) {
+ floors[2].lhs.protocol != EPM_PROTOCOL_NCACN) {
goto failed;
}
@@ -281,14 +281,14 @@ static error_status_t epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *me
}
switch (eps[i].ep_description.type) {
case ENDPOINT_SMB:
- if (floors[3].lhs.protocol != EPM_PROTOCOL_NCACN_SMB ||
- floors[4].lhs.protocol != EPM_PROTOCOL_NCACN_NETBIOS) {
+ if (floors[3].lhs.protocol != EPM_PROTOCOL_SMB ||
+ floors[4].lhs.protocol != EPM_PROTOCOL_NETBIOS) {
continue;
}
break;
case ENDPOINT_TCP:
- if (floors[3].lhs.protocol != EPM_PROTOCOL_NCACN_TCP ||
- floors[4].lhs.protocol != EPM_PROTOCOL_NCACN_IP) {
+ if (floors[3].lhs.protocol != EPM_PROTOCOL_TCP ||
+ floors[4].lhs.protocol != EPM_PROTOCOL_IP) {
continue;
}
break;
diff --git a/source4/torture/rpc/epmapper.c b/source4/torture/rpc/epmapper.c
index 6a50d18276..ebb640b70d 100644
--- a/source4/torture/rpc/epmapper.c
+++ b/source4/torture/rpc/epmapper.c
@@ -33,11 +33,8 @@ static void display_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr)
for (i=0;i<twr->num_floors;i++) {
struct epm_lhs *lhs = &twr->floors[i].lhs;
struct epm_rhs *rhs = &twr->floors[i].rhs;
- switch (lhs->protocol) {
- case EPM_PROTOCOL_NCACN_DNET_NSP:
- printf(" DNET/NSP");
- break;
-
+
+ switch(lhs->protocol) {
case EPM_PROTOCOL_UUID:
uuid = GUID_string(mem_ctx, &lhs->info.uuid.uuid);
if (strcasecmp(uuid, NDR_GUID) == 0) {
@@ -47,11 +44,23 @@ static void display_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr)
}
break;
- case EPM_PROTOCOL_NCACN_RPC_C:
+ case EPM_PROTOCOL_NCACN:
printf(" RPC-C");
break;
- case EPM_PROTOCOL_NCACN_IP:
+ case EPM_PROTOCOL_NCADG:
+ printf(" RPC");
+ break;
+
+ case EPM_PROTOCOL_NCALRPC:
+ printf(" NCALRPC");
+ break;
+
+ case EPM_PROTOCOL_DNET_NSP:
+ printf(" DNET/NSP");
+ break;
+
+ case EPM_PROTOCOL_IP:
printf(" IP:");
if (rhs->rhs_data.length == 4) {
struct in_addr in;
@@ -60,43 +69,46 @@ static void display_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr)
}
break;
- case EPM_PROTOCOL_NCACN_PIPE:
+ case EPM_PROTOCOL_PIPE:
printf(" PIPE:%.*s", rhs->rhs_data.length, rhs->rhs_data.data);
break;
- case EPM_PROTOCOL_NCACN_SMB:
+ case EPM_PROTOCOL_SMB:
printf(" SMB:%.*s", rhs->rhs_data.length, rhs->rhs_data.data);
break;
- case EPM_PROTOCOL_NCACN_NETBIOS:
+ case EPM_PROTOCOL_UNIX_DS:
+ printf(" Unix Domain Socket:%.*s", rhs->rhs_data.length, rhs->rhs_data.data);
+ break;
+
+ case EPM_PROTOCOL_NETBIOS:
printf(" NetBIOS:%.*s", rhs->rhs_data.length, rhs->rhs_data.data);
break;
- case EPM_PROTOCOL_NCACN_NB_NB:
+ case EPM_PROTOCOL_NB_NB:
printf(" NB_NB");
break;
- case EPM_PROTOCOL_NCACN_SPX:
+ case EPM_PROTOCOL_SPX:
printf(" SPX");
break;
- /*
- case EPM_PROTOCOL_NCACN_NB_IPX:
+ case EPM_PROTOCOL_NB_IPX:
printf(" NB_IPX");
- break;*/
+ break;
case 0x01:
printf(" UNK(1):%.*s", rhs->rhs_data.length, rhs->rhs_data.data);
break;
- case EPM_PROTOCOL_NCACN_HTTP:
+ case EPM_PROTOCOL_HTTP:
printf(" HTTP:");
if (rhs->rhs_data.length == 2) {
printf("%d", RSVAL(rhs->rhs_data.data, 0));
}
break;
- case EPM_PROTOCOL_NCACN_TCP:
+ case EPM_PROTOCOL_TCP:
/* what is the difference between this and 0x1f? */
printf(" TCP:");
if (rhs->rhs_data.length == 2) {
@@ -104,7 +116,7 @@ static void display_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr)
}
break;
- case EPM_PROTOCOL_NCADG_UDP:
+ case EPM_PROTOCOL_UDP:
printf(" UDP:");
break;
@@ -149,15 +161,15 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
printf("epm_Map results for '%s':\n",
idl_pipe_name(uuid_str, twr->towers.floors[0].lhs.info.uuid.version));
- twr->towers.floors[2].lhs.protocol = EPM_PROTOCOL_NCACN_RPC_C;
+ twr->towers.floors[2].lhs.protocol = EPM_PROTOCOL_NCACN;
twr->towers.floors[2].lhs.info.lhs_data = data_blob(NULL, 0);
twr->towers.floors[2].rhs.rhs_data = data_blob_talloc_zero(p, 2);
- twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_TCP;
+ twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_TCP;
twr->towers.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
twr->towers.floors[3].rhs.rhs_data = data_blob_talloc_zero(p, 2);
- twr->towers.floors[4].lhs.protocol = EPM_PROTOCOL_NCACN_IP;
+ twr->towers.floors[4].lhs.protocol = EPM_PROTOCOL_IP;
twr->towers.floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
twr->towers.floors[4].rhs.rhs_data = data_blob_talloc_zero(p, 4);
@@ -170,7 +182,7 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
}
}
- twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_HTTP;
+ twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_HTTP;
twr->towers.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
twr->towers.floors[3].rhs.rhs_data = data_blob_talloc_zero(p, 2);
@@ -183,11 +195,11 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
}
}
- twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_NCACN_SMB;
+ twr->towers.floors[3].lhs.protocol = EPM_PROTOCOL_SMB;
twr->towers.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
twr->towers.floors[3].rhs.rhs_data = data_blob_talloc_zero(p, 2);
- twr->towers.floors[4].lhs.protocol = EPM_PROTOCOL_NCACN_NETBIOS;
+ twr->towers.floors[4].lhs.protocol = EPM_PROTOCOL_NETBIOS;
twr->towers.floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
twr->towers.floors[4].rhs.rhs_data = data_blob_talloc_zero(p, 2);