mirror of
https://github.com/samba-team/samba.git
synced 2024-12-25 23:21:54 +03:00
give far more detail in the EPMAPPER results
(This used to be commit 4203019698
)
This commit is contained in:
parent
3114289c64
commit
7d36545d33
@ -30,12 +30,12 @@ definition : cpp_prefix
|
||||
| function { $item[1] }
|
||||
| const { $item[1] }
|
||||
|
||||
const : 'const' <commit> identifier identifier '=' constant ';'
|
||||
const : 'const' <commit> identifier identifier '=' anytext ';'
|
||||
{{
|
||||
"TYPE" => "CONST",
|
||||
"DTYPE" => $item[3],
|
||||
"NAME" => $item[4],
|
||||
"VALUE" => $item{constant}
|
||||
"VALUE" => $item{anytext}
|
||||
}}
|
||||
| <error?>
|
||||
|
||||
@ -166,7 +166,7 @@ type :
|
||||
|
||||
text: /[\w\s\..?-]*/
|
||||
|
||||
text2: /[\|\w\s,\*\>\/\..?-]*/
|
||||
text2: /[\|\w\s,\*\>"\/\..?-]*/
|
||||
|
||||
anytext: text2 '(' <commit> anytext ')' anytext
|
||||
{{ "$item[1]($item[4])$item[6]" }}
|
||||
|
@ -20,6 +20,9 @@ interface epmapper
|
||||
with.
|
||||
*/
|
||||
|
||||
/* this guid indicates NDR encoding in a protocol tower */
|
||||
const string NDR_GUID = "8a885d04-1ceb-11c9-9fe8-08002b104860";
|
||||
|
||||
typedef struct {
|
||||
GUID uuid;
|
||||
uint16 version;
|
||||
@ -36,7 +39,7 @@ interface epmapper
|
||||
} epm_lhs;
|
||||
|
||||
typedef struct {
|
||||
uint16 unknown;
|
||||
[flag(NDR_REMAINING)] DATA_BLOB data;
|
||||
} epm_rhs;
|
||||
|
||||
typedef struct {
|
||||
@ -57,11 +60,11 @@ interface epmapper
|
||||
typedef struct {
|
||||
uint32 tower_length;
|
||||
[subcontext(4)] epm_towers towers;
|
||||
} twr_t;
|
||||
} epm_twr_t;
|
||||
|
||||
typedef struct {
|
||||
GUID object;
|
||||
twr_t *tower;
|
||||
epm_twr_t *tower;
|
||||
ascstr2 annotation;
|
||||
} epm_entry_t;
|
||||
|
||||
@ -77,7 +80,7 @@ interface epmapper
|
||||
[in] uint32 num_ents,
|
||||
[in,size_is(num_ents)] epm_entry_t entries[],
|
||||
[in] uint32 replace,
|
||||
[out] error_status_t *status
|
||||
[out] error_status_t status
|
||||
);
|
||||
|
||||
/**********************/
|
||||
@ -85,7 +88,7 @@ interface epmapper
|
||||
void epm_Delete(
|
||||
[in] uint32 num_ents,
|
||||
[in, size_is(num_ents)] epm_entry_t entries[],
|
||||
[out] error_status_t *status
|
||||
[out] error_status_t status
|
||||
);
|
||||
|
||||
/**********************/
|
||||
@ -95,11 +98,11 @@ interface epmapper
|
||||
[in] GUID *object,
|
||||
[in] rpc_if_id_t *interface_id,
|
||||
[in] uint32 vers_option,
|
||||
[in, out, ref] policy_handle *entry_handle,
|
||||
[in,out,ref] policy_handle *entry_handle,
|
||||
[in] uint32 max_ents,
|
||||
[out] uint32 num_ents,
|
||||
[out, length_is(num_ents), size_is(max_ents)] epm_entry_t entries[],
|
||||
[out] error_status_t status
|
||||
[out] error_status_t status
|
||||
);
|
||||
|
||||
|
||||
@ -107,32 +110,32 @@ interface epmapper
|
||||
/* Function 0x03 */
|
||||
|
||||
typedef struct {
|
||||
twr_t *twr;
|
||||
} twr_p_t;
|
||||
epm_twr_t *twr;
|
||||
} epm_twr_p_t;
|
||||
|
||||
void epm_Map(
|
||||
[in] GUID *object,
|
||||
[in] twr_t *map_tower,
|
||||
[in, out] policy_handle *entry_handle,
|
||||
[in] epm_twr_t *map_tower,
|
||||
[in,out,ref] policy_handle *entry_handle,
|
||||
[in] uint32 max_towers,
|
||||
[out] uint32 *num_towers,
|
||||
[out, length_is(*num_towers), size_is(max_towers)] twr_p_t towers[],
|
||||
[out] error_status_t *status
|
||||
[out] uint32 num_towers,
|
||||
[out, length_is(num_towers), size_is(max_towers)] epm_twr_p_t towers[],
|
||||
[out] error_status_t status
|
||||
);
|
||||
|
||||
|
||||
/**********************/
|
||||
/* Function 0x04 */
|
||||
void epm_LookupHandleFree(
|
||||
[in, out] policy_handle *entry_handle,
|
||||
[out] error_status_t *status
|
||||
[in,out,ref] policy_handle *entry_handle,
|
||||
[out] error_status_t status
|
||||
);
|
||||
|
||||
/**********************/
|
||||
/* Function 0x05 */
|
||||
void epm_InqObject(
|
||||
[out] GUID *epm_object,
|
||||
[out] error_status_t *status
|
||||
[out] error_status_t status
|
||||
);
|
||||
|
||||
|
||||
@ -141,7 +144,7 @@ interface epmapper
|
||||
void epm_MgmtDelete(
|
||||
[in] uint32 object_speced,
|
||||
[in] GUID *object,
|
||||
[in] twr_t *tower,
|
||||
[out] error_status_t *status
|
||||
[in] epm_twr_t *tower,
|
||||
[out] error_status_t status
|
||||
);
|
||||
}
|
||||
|
@ -22,6 +22,80 @@
|
||||
#include "includes.h"
|
||||
|
||||
|
||||
/*
|
||||
display any protocol tower
|
||||
*/
|
||||
static void display_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr)
|
||||
{
|
||||
int i;
|
||||
const char *uuid;
|
||||
|
||||
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 0xd:
|
||||
uuid = GUID_string(mem_ctx, &lhs->info.uuid.uuid);
|
||||
if (strcasecmp(uuid, NDR_GUID) == 0) {
|
||||
printf(" NDR");
|
||||
} else {
|
||||
printf(" uuid %s/0x%02x", uuid, lhs->info.uuid.version);
|
||||
}
|
||||
break;
|
||||
case 0xb:
|
||||
printf(" RPC-C");
|
||||
break;
|
||||
|
||||
case 0x9:
|
||||
printf(" IP:");
|
||||
if (rhs->data.length == 4) {
|
||||
struct in_addr in;
|
||||
in.s_addr = RIVAL(rhs->data.data, 0);
|
||||
printf("%s", inet_ntoa(in));
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x10:
|
||||
printf(" PIPE:%.*s", rhs->data.length, rhs->data.data);
|
||||
break;
|
||||
|
||||
case 0x0f:
|
||||
printf(" SMBNP:%.*s", rhs->data.length, rhs->data.data);
|
||||
break;
|
||||
|
||||
case 0x11:
|
||||
printf(" SMB:%.*s", rhs->data.length, rhs->data.data);
|
||||
break;
|
||||
|
||||
case 0x01:
|
||||
printf(" UNK(1):%.*s", rhs->data.length, rhs->data.data);
|
||||
break;
|
||||
|
||||
case 0x1f:
|
||||
printf(" TCP:");
|
||||
if (rhs->data.length == 2) {
|
||||
printf("%d", SVAL(rhs->data.data, 0));
|
||||
}
|
||||
break;
|
||||
|
||||
case 0x07:
|
||||
printf(" XXX:");
|
||||
if (rhs->data.length == 2) {
|
||||
printf("%d", SVAL(rhs->data.data, 0));
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
printf(" UNK(%02x):", lhs->protocol);
|
||||
if (rhs->data.length == 2) {
|
||||
printf("%d", SVAL(rhs->data.data, 0));
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
|
||||
static BOOL test_Lookup(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
|
||||
{
|
||||
NTSTATUS status;
|
||||
@ -29,7 +103,6 @@ static BOOL test_Lookup(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
|
||||
struct GUID uuid;
|
||||
struct rpc_if_id_t iface;
|
||||
struct policy_handle handle;
|
||||
int i;
|
||||
|
||||
ZERO_STRUCT(uuid);
|
||||
ZERO_STRUCT(iface);
|
||||
@ -41,20 +114,20 @@ static BOOL test_Lookup(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
|
||||
r.in.vers_option = 0;
|
||||
r.in.entry_handle = &handle;
|
||||
r.out.entry_handle = &handle;
|
||||
r.in.max_ents = 1;
|
||||
r.in.max_ents = 10;
|
||||
|
||||
do {
|
||||
status = dcerpc_epm_Lookup(p, mem_ctx, &r);
|
||||
if (NT_STATUS_IS_OK(status) && r.out.status == 0) {
|
||||
printf("Found '%s'\n", r.out.entries[0].annotation);
|
||||
for (i=0;i<r.out.entries[0].tower->towers.num_floors;i++) {
|
||||
struct epm_lhs *lhs = &r.out.entries[0].tower->towers.floors[i].lhs;
|
||||
if (lhs->protocol == 13) {
|
||||
NDR_PRINT_DEBUG(epm_prot_uuid, &lhs->info.uuid);
|
||||
}
|
||||
int i;
|
||||
for (i=0;i<r.out.num_ents;i++) {
|
||||
printf("Found '%s'\n", r.out.entries[i].annotation);
|
||||
display_tower(mem_ctx, &r.out.entries[i].tower->towers);
|
||||
}
|
||||
}
|
||||
} while (NT_STATUS_IS_OK(status) && r.out.status == 0);
|
||||
} while (NT_STATUS_IS_OK(status) &&
|
||||
r.out.status == 0 &&
|
||||
r.out.num_ents == r.in.max_ents);
|
||||
|
||||
if (!NT_STATUS_IS_OK(status)) {
|
||||
printf("Lookup failed - %s\n", nt_errstr(status));
|
||||
|
Loading…
Reference in New Issue
Block a user