r3111: Add a few more protocol identifiers, rhs for ncalrpc
authorJelmer Vernooij <jelmer@samba.org>
Thu, 21 Oct 2004 10:52:03 +0000 (10:52 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:02:22 +0000 (13:02 -0500)
(This used to be commit 53567a83cbca9df60bef76a15df24d2cd89a16b0)

source4/librpc/idl/epmapper.idl
source4/librpc/rpc/dcerpc_util.c
source4/rpc_server/epmapper/rpc_epmapper.c
source4/torture/rpc/epmapper.c

index eaf2b185f658dce3e661921b21683569b3ba77b9..de45675c90b73466a6fd1b63008723ce5ce3bd29 100644 (file)
@@ -50,20 +50,24 @@ interface epmapper
                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_NETBEUI            = 0x12,
                EPM_PROTOCOL_SPX                = 0x13,
                EPM_PROTOCOL_NB_IPX             = 0x14, /* NetBIOS over IPX */
+               EPM_PROTOCOL_ATALK_STREAM       = 0x16,
+               EPM_PROTOCOL_ATALK_DATAGRAM = 0x17,
+               EPM_PROTOCOL_APPLETALK          = 0x18, /* AppleTalk */
+               EPM_PROTOCOL_VINES_SPP          = 0x1a, 
+               EPM_PROTOCOL_VINES_IPC          = 0x1b,
+               EPM_PROTOCOL_STREETTALK         = 0x1c,
                EPM_PROTOCOL_HTTP               = 0x1f,
                EPM_PROTOCOL_UNIX_DS            = 0x20,  /* Unix domain socket */
                EPM_PROTOCOL_NULL                       = 0x21
@@ -127,7 +131,7 @@ interface epmapper
        } epm_rhs_netbios;
 
        typedef struct {
-       } epm_rhs_nb_nb;
+       } epm_rhs_netbeui;
 
        typedef struct {
        } epm_rhs_spx;
@@ -147,8 +151,30 @@ interface epmapper
        } epm_rhs_null;
 
        typedef struct {
+               astring identifier;
        } epm_rhs_ncalrpc;
 
+       typedef struct {
+       } epm_rhs_appletalk;
+
+       typedef struct {
+       } epm_rhs_atalk_stream;
+
+       typedef struct {
+       } epm_rhs_atalk_datagram;
+
+       typedef struct {
+               uint16 port;
+       } epm_rhs_vines_spp;
+
+       typedef struct {
+               uint16 port;
+       } epm_rhs_vines_ipc;
+
+       typedef struct {
+               astring streettalk;
+       } epm_rhs_streettalk;
+
        typedef [flag(NDR_BIG_ENDIAN),nodiscriminant] union {
                [case(EPM_PROTOCOL_DNET_NSP)] epm_rhs_dnet_nsp dnet_nsp;
                [case(EPM_PROTOCOL_OSI_TP4)] epm_rhs_osi_tp4 osi_tp4;
@@ -164,9 +190,15 @@ interface epmapper
                [case(EPM_PROTOCOL_SMB)] epm_rhs_smb smb;
                [case(EPM_PROTOCOL_PIPE)] epm_rhs_pipe pipe;
                [case(EPM_PROTOCOL_NETBIOS)] epm_rhs_netbios netbios;
-               [case(EPM_PROTOCOL_NB_NB)] epm_rhs_nb_nb nb_nb;
+               [case(EPM_PROTOCOL_NETBEUI)] epm_rhs_netbeui netbeui;
                [case(EPM_PROTOCOL_SPX)] epm_rhs_spx spx;
                [case(EPM_PROTOCOL_NB_IPX)] epm_rhs_nb_ipx nb_ipx;
+               [case(EPM_PROTOCOL_ATALK_STREAM)] epm_rhs_atalk_stream atalk_stream;
+               [case(EPM_PROTOCOL_ATALK_DATAGRAM)] epm_rhs_atalk_datagram atalk_datagram;
+               [case(EPM_PROTOCOL_APPLETALK)] epm_rhs_appletalk appletalk;
+               [case(EPM_PROTOCOL_VINES_SPP)] epm_rhs_vines_spp vines_spp;
+               [case(EPM_PROTOCOL_VINES_IPC)] epm_rhs_vines_ipc vines_ipc;
+               [case(EPM_PROTOCOL_STREETTALK)] epm_rhs_streettalk streettalk;
                [case(EPM_PROTOCOL_HTTP)] epm_rhs_http http;
                [case(EPM_PROTOCOL_UNIX_DS)] epm_rhs_unix_ds unix_ds;
                [case(EPM_PROTOCOL_NULL)] epm_rhs_null null;
@@ -191,11 +223,11 @@ interface epmapper
        typedef [flag(NDR_NOALIGN|NDR_LITTLE_ENDIAN)] struct {
                uint16 num_floors;
                epm_floor floors[num_floors];
-       } epm_towers;
+       } epm_tower;
 
        typedef [gensize] struct {
-               [value(ndr_size_epm_towers(0, &r->towers,ndr->flags))] uint32  tower_length;
-               [subcontext(4)] epm_towers towers;
+               [value(ndr_size_epm_tower(0, &r->tower,ndr->flags))] uint32  tower_length;
+               [subcontext(4)] epm_tower tower;
        } epm_twr_t;
 
        typedef struct {
index ccb7f126eabaee7cc0d0edaff149009ecff1b087..d034dd89d0589ed3173a9b0715f1c053efbe1889 100644 (file)
@@ -62,37 +62,37 @@ NTSTATUS dcerpc_epm_map_tcp_port(const char *server,
        ZERO_STRUCT(handle);
        ZERO_STRUCT(guid);
 
-       twr.towers.num_floors = 5;
-       twr.towers.floors = talloc(p, sizeof(twr.towers.floors[0]) * 5);
+       twr.tower.num_floors = 5;
+       twr.tower.floors = talloc(p, sizeof(twr.tower.floors[0]) * 5);
 
        /* what I'd like for christmas ... */
 
        /* an RPC interface ... */
-       twr.towers.floors[0].lhs.protocol = EPM_PROTOCOL_UUID;
-       GUID_from_string(uuid, &twr.towers.floors[0].lhs.info.uuid.uuid);
-       twr.towers.floors[0].lhs.info.uuid.version = version;
-       twr.towers.floors[0].rhs.uuid.unknown = 0;
+       twr.tower.floors[0].lhs.protocol = EPM_PROTOCOL_UUID;
+       GUID_from_string(uuid, &twr.tower.floors[0].lhs.info.uuid.uuid);
+       twr.tower.floors[0].lhs.info.uuid.version = version;
+       twr.tower.floors[0].rhs.uuid.unknown = 0;
 
        /* encoded with NDR ... */
-       twr.towers.floors[1].lhs.protocol = EPM_PROTOCOL_UUID;
-       GUID_from_string(NDR_GUID, &twr.towers.floors[1].lhs.info.uuid.uuid);
-       twr.towers.floors[1].lhs.info.uuid.version = NDR_GUID_VERSION;
-       twr.towers.floors[1].rhs.uuid.unknown = 0;
+       twr.tower.floors[1].lhs.protocol = EPM_PROTOCOL_UUID;
+       GUID_from_string(NDR_GUID, &twr.tower.floors[1].lhs.info.uuid.uuid);
+       twr.tower.floors[1].lhs.info.uuid.version = NDR_GUID_VERSION;
+       twr.tower.floors[1].rhs.uuid.unknown = 0;
 
        /* on an RPC connection ... */
-       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.ncacn.minor_version = 0;
+       twr.tower.floors[2].lhs.protocol = EPM_PROTOCOL_NCACN;
+       twr.tower.floors[2].lhs.info.lhs_data = data_blob(NULL, 0);
+       twr.tower.floors[2].rhs.ncacn.minor_version = 0;
 
        /* on a TCP port ... */
-       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.tcp.port = 0;
+       twr.tower.floors[3].lhs.protocol = EPM_PROTOCOL_TCP;
+       twr.tower.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
+       twr.tower.floors[3].rhs.tcp.port = 0;
 
        /* on an IP link ... */
-       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.ip.address = 0;
+       twr.tower.floors[4].lhs.protocol = EPM_PROTOCOL_IP;
+       twr.tower.floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
+       twr.tower.floors[4].rhs.ip.address = 0;
 
        /* with some nice pretty paper around it of course */
        r.in.object = &guid;
@@ -117,13 +117,13 @@ NTSTATUS dcerpc_epm_map_tcp_port(const char *server,
                return NT_STATUS_PORT_UNREACHABLE;
        }
 
-       if (twr_r->towers.num_floors != 5 ||
-           twr_r->towers.floors[3].lhs.protocol != twr.towers.floors[3].lhs.protocol) {
+       if (twr_r->tower.num_floors != 5 ||
+           twr_r->tower.floors[3].lhs.protocol != twr.tower.floors[3].lhs.protocol) {
                dcerpc_pipe_close(p);
                return NT_STATUS_PORT_UNREACHABLE;
        }
 
-       *port = twr_r->towers.floors[3].rhs.tcp.port;
+       *port = twr_r->tower.floors[3].rhs.tcp.port;
 
        dcerpc_pipe_close(p);
 
index 7de99687b77bcd444ffc85c817f94caf9ee0a260..cf6b8429f05b1543f4db95de796d819d7adbd81a 100644 (file)
@@ -218,7 +218,7 @@ static error_status_t epm_Lookup(struct dcesrv_call_state *dce_call, TALLOC_CTX
                        return EPMAPPER_STATUS_NO_MEMORY;
                }
 
-               if (!fill_protocol_tower(mem_ctx, &r->out.entries[i].tower->towers, &eps->e[i])) {
+               if (!fill_protocol_tower(mem_ctx, &r->out.entries[i].tower->tower, &eps->e[i])) {
                        return EPMAPPER_STATUS_NO_MEMORY;
                }
        }
@@ -256,11 +256,11 @@ static error_status_t epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *me
        }
        
        if (!r->in.map_tower || r->in.max_towers == 0 ||
-           r->in.map_tower->towers.num_floors != 5) {
+           r->in.map_tower->tower.num_floors != 5) {
                goto failed;
        }
 
-       floors = r->in.map_tower->towers.floors;
+       floors = r->in.map_tower->tower.floors;
 
        if (floors[0].lhs.protocol != EPM_PROTOCOL_UUID ||
            floors[1].lhs.protocol != EPM_PROTOCOL_UUID ||
@@ -289,7 +289,7 @@ static error_status_t epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *me
                        }
                        break;
                }
-               fill_protocol_tower(mem_ctx, &r->out.towers->twr->towers, &eps[i]);
+               fill_protocol_tower(mem_ctx, &r->out.towers->twr->tower, &eps[i]);
                r->out.towers->twr->tower_length = 0;
                return EPMAPPER_STATUS_OK;
        }
index c2450c6fbf78ecf73d646d804293c5e84dc5af98..5335fd2dac8a16d4c8c1e176d0032ca6245db000 100644 (file)
@@ -85,8 +85,8 @@ static void display_tower(TALLOC_CTX *mem_ctx, struct epm_towers *twr)
                        printf(" NetBIOS:%s", rhs->netbios.name);
                        break;
 
-               case EPM_PROTOCOL_NB_NB:
-                       printf(" NB_NB");
+               case EPM_PROTOCOL_NETBEUI:
+                       printf(" NETBeui");
                        break;
 
                case EPM_PROTOCOL_SPX:
@@ -141,63 +141,63 @@ static BOOL test_Map(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx,
        r.out.entry_handle = &handle;
        r.in.max_towers = 100;
 
-       if (twr->towers.num_floors != 5) {
-               printf(" tower has %d floors - skipping test_Map\n", twr->towers.num_floors);
+       if (twr->tower.num_floors != 5) {
+               printf(" tower has %d floors - skipping test_Map\n", twr->tower.num_floors);
                return True;
        }
 
-       uuid_str = GUID_string(mem_ctx, &twr->towers.floors[0].lhs.info.uuid.uuid);
+       uuid_str = GUID_string(mem_ctx, &twr->tower.floors[0].lhs.info.uuid.uuid);
 
        printf("epm_Map results for '%s':\n", 
-              idl_pipe_name(uuid_str, twr->towers.floors[0].lhs.info.uuid.version));
+              idl_pipe_name(uuid_str, twr->tower.floors[0].lhs.info.uuid.version));
 
-       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.ncacn.minor_version = 0;
+       twr->tower.floors[2].lhs.protocol = EPM_PROTOCOL_NCACN;
+       twr->tower.floors[2].lhs.info.lhs_data = data_blob(NULL, 0);
+       twr->tower.floors[2].rhs.ncacn.minor_version = 0;
 
-       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.tcp.port = 0;
+       twr->tower.floors[3].lhs.protocol = EPM_PROTOCOL_TCP;
+       twr->tower.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
+       twr->tower.floors[3].rhs.tcp.port = 0;
 
-       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.ip.address = 0;
+       twr->tower.floors[4].lhs.protocol = EPM_PROTOCOL_IP;
+       twr->tower.floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
+       twr->tower.floors[4].rhs.ip.address = 0;
 
        status = dcerpc_epm_Map(p, mem_ctx, &r);
        if (NT_STATUS_IS_OK(status) && r.out.result == 0) {
                for (i=0;i<r.out.num_towers;i++) {
                        if (r.out.towers[i].twr) {
-                               display_tower(mem_ctx, &r.out.towers[i].twr->towers);
+                               display_tower(mem_ctx, &r.out.towers[i].twr->tower);
                        }
                }
        }
 
-       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.http.port = 0;
+       twr->tower.floors[3].lhs.protocol = EPM_PROTOCOL_HTTP;
+       twr->tower.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
+       twr->tower.floors[3].rhs.http.port = 0;
 
        status = dcerpc_epm_Map(p, mem_ctx, &r);
        if (NT_STATUS_IS_OK(status) && r.out.result == 0) {
                for (i=0;i<r.out.num_towers;i++) {
                        if (r.out.towers[i].twr) {
-                               display_tower(mem_ctx, &r.out.towers[i].twr->towers);
+                               display_tower(mem_ctx, &r.out.towers[i].twr->tower);
                        }
                }
        }
 
-       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.smb.unc = "";
+       twr->tower.floors[3].lhs.protocol = EPM_PROTOCOL_SMB;
+       twr->tower.floors[3].lhs.info.lhs_data = data_blob(NULL, 0);
+       twr->tower.floors[3].rhs.smb.unc = "";
 
-       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.netbios.name = "";
+       twr->tower.floors[4].lhs.protocol = EPM_PROTOCOL_NETBIOS;
+       twr->tower.floors[4].lhs.info.lhs_data = data_blob(NULL, 0);
+       twr->tower.floors[4].rhs.netbios.name = "";
 
        status = dcerpc_epm_Map(p, mem_ctx, &r);
        if (NT_STATUS_IS_OK(status) && r.out.result == 0) {
                for (i=0;i<r.out.num_towers;i++) {
                        if (r.out.towers[i].twr) {
-                               display_tower(mem_ctx, &r.out.towers[i].twr->towers);
+                               display_tower(mem_ctx, &r.out.towers[i].twr->tower);
                        }
                }
        }
@@ -233,7 +233,7 @@ static BOOL test_Lookup(struct dcerpc_pipe *p, TALLOC_CTX *mem_ctx)
                }
                for (i=0;i<r.out.num_ents;i++) {
                        printf("\nFound '%s'\n", r.out.entries[i].annotation);
-                       display_tower(mem_ctx, &r.out.entries[i].tower->towers);
+                       display_tower(mem_ctx, &r.out.entries[i].tower->tower);
                        test_Map(p, mem_ctx, r.out.entries[i].tower);
                }
        } while (NT_STATUS_IS_OK(status) &&