r23792: convert Samba4 to GPLv3
[samba.git] / source4 / rpc_server / epmapper / rpc_epmapper.c
index e7371a632fad510c2f0764c72f5185b8eab3f89a..b5903fd17f0b88b6ea563465441ca8b7e6f49cd3 100644 (file)
@@ -8,7 +8,7 @@
    
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
-   the Free Software Foundation; either version 2 of the License, or
+   the Free Software Foundation; either version 3 of the License, or
    (at your option) any later version.
    
    This program is distributed in the hope that it will be useful,
@@ -17,8 +17,7 @@
    GNU General Public License for more details.
    
    You should have received a copy of the GNU General Public License
-   along with this program; if not, write to the Free Software
-   Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+   along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 #include "includes.h"
@@ -37,18 +36,6 @@ struct dcesrv_ep_iface {
        struct epm_tower ep;
 };
 
-/*
-  simple routine to compare a GUID string to a GUID structure
-*/
-static int guid_cmp(TALLOC_CTX *mem_ctx, const struct GUID *guid, const char *uuid_str)
-{
-       const char *s = GUID_string(mem_ctx, guid);
-       if (!s || strcasecmp(s, uuid_str)) {
-               return -1;
-       }
-       return 0;
-}
-
 /*
   build a list of all interfaces handled by all endpoint servers
 */
@@ -77,8 +64,7 @@ static uint32_t build_ep_list(TALLOC_CTX *mem_ctx,
                        (*eps)[total].name = iface->iface.name;
 
                        description = d->ep_description;
-                       description->object = iface->iface.uuid;
-                       description->object_version = iface->iface.if_version;
+                       description->object = iface->iface.syntax_id;
 
                        status = dcerpc_binding_build_tower(mem_ctx, description, &(*eps)[total].ep);
                        if (NT_STATUS_IS_ERR(status)) {
@@ -93,13 +79,12 @@ static uint32_t build_ep_list(TALLOC_CTX *mem_ctx,
 }
 
 
-static error_status_t epm_Insert(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
-                                struct epm_Insert *r)
+static error_status_t dcesrv_epm_Insert(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, struct epm_Insert *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
 
-static error_status_t epm_Delete(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
+static error_status_t dcesrv_epm_Delete(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
                                 struct epm_Delete *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
@@ -110,7 +95,7 @@ static error_status_t epm_Delete(struct dcesrv_call_state *dce_call, TALLOC_CTX
   implement epm_Lookup. This call is used to enumerate the interfaces
   available on a rpc server
 */
-static error_status_t epm_Lookup(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
+static error_status_t dcesrv_epm_Lookup(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
                                 struct epm_Lookup *r)
 {
        struct dcesrv_handle *h;
@@ -144,7 +129,8 @@ static error_status_t epm_Lookup(struct dcesrv_call_state *dce_call, TALLOC_CTX
        }
 
        *r->out.entry_handle = h->wire_handle;
-       r->out.num_ents = num_ents;
+       r->out.num_ents = talloc(mem_ctx, uint32_t);
+       *r->out.num_ents = num_ents;
 
        if (num_ents == 0) {
                r->out.entries = NULL;
@@ -179,7 +165,7 @@ static error_status_t epm_Lookup(struct dcesrv_call_state *dce_call, TALLOC_CTX
   implement epm_Map. This is used to find the specific endpoint to talk to given
   a generic protocol tower
 */
-static error_status_t epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
+static error_status_t dcesrv_epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
                              struct epm_Map *r)
 {
        uint32_t count;
@@ -187,13 +173,13 @@ static error_status_t epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *me
        struct dcesrv_ep_iface *eps;
        struct epm_floor *floors;
        enum dcerpc_transport_t transport;
-       struct GUID ndr_uuid;
-       uint16_t ndr_version;
+       struct dcerpc_syntax_id ndr_syntax;
 
        count = build_ep_list(mem_ctx, dce_call->conn->dce_ctx->endpoint_list, &eps);
 
        ZERO_STRUCT(*r->out.entry_handle);
-       r->out.num_towers = 1;
+       r->out.num_towers = talloc(mem_ctx, uint32_t);
+       *r->out.num_towers = 1;
        r->out.towers = talloc(mem_ctx, struct epm_twr_p_t);
        if (!r->out.towers) {
                return EPMAPPER_STATUS_NO_MEMORY;
@@ -210,11 +196,11 @@ static error_status_t epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *me
 
        floors = r->in.map_tower->tower.floors;
 
-       dcerpc_floor_get_lhs_data(&r->in.map_tower->tower.floors[1], &ndr_uuid, &ndr_version);
+       dcerpc_floor_get_lhs_data(&r->in.map_tower->tower.floors[1], &ndr_syntax);
 
        if (floors[1].lhs.protocol != EPM_PROTOCOL_UUID ||
-           guid_cmp(mem_ctx, &ndr_uuid, NDR_GUID) != 0 ||
-           ndr_version != NDR_GUID_VERSION) {
+               !GUID_equal(&ndr_syntax.uuid, &ndr_transfer_syntax.uuid) ||
+           ndr_syntax.if_version != ndr_transfer_syntax.if_version) {
                goto failed;
        }
 
@@ -231,8 +217,8 @@ static error_status_t epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *me
 
        for (i=0;i<count;i++) {
                if (
-                       !data_blob_equal(&r->in.map_tower->tower.floors[0].lhs.lhs_data, 
-                       &eps[i].ep.floors[0].lhs.lhs_data) 
+                       data_blob_cmp(&r->in.map_tower->tower.floors[0].lhs.lhs_data, 
+                       &eps[i].ep.floors[0].lhs.lhs_data) != 0 
                        || transport != dcerpc_transport_by_tower(&eps[i].ep)) {
                        continue;
                }
@@ -244,31 +230,31 @@ static error_status_t epm_Map(struct dcesrv_call_state *dce_call, TALLOC_CTX *me
 
 
 failed:
-       r->out.num_towers = 0;
+       *r->out.num_towers = 0;
        r->out.towers->twr = NULL;
 
        return EPMAPPER_STATUS_NO_MORE_ENTRIES;
 }
 
-static error_status_t epm_LookupHandleFree(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
+static error_status_t dcesrv_epm_LookupHandleFree(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
                                           struct epm_LookupHandleFree *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
 
-static error_status_t epm_InqObject(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
+static error_status_t dcesrv_epm_InqObject(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
                                    struct epm_InqObject *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
 
-static error_status_t epm_MgmtDelete(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
+static error_status_t dcesrv_epm_MgmtDelete(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx, 
                               struct epm_MgmtDelete *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);
 }
 
-static error_status_t epm_MapAuth(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
+static error_status_t dcesrv_epm_MapAuth(struct dcesrv_call_state *dce_call, TALLOC_CTX *mem_ctx,
                            struct epm_MapAuth *r)
 {
        DCESRV_FAULT(DCERPC_FAULT_OP_RNG_ERROR);