s4:librpc: use dcerpc_binding_dup() instead of talloc_reference()
authorStefan Metzmacher <metze@samba.org>
Thu, 19 Sep 2013 16:23:37 +0000 (18:23 +0200)
committerStefan Metzmacher <metze@samba.org>
Tue, 7 Jan 2014 07:37:44 +0000 (08:37 +0100)
Signed-off-by: Stefan Metzmacher <metze@samba.org>
Reviewed-by: Andreas Schneider <asn@samba.org>
source4/librpc/rpc/dcerpc_connect.c
source4/librpc/rpc/dcerpc_secondary.c
source4/librpc/rpc/dcerpc_util.c

index 089603d1b851f5d8ff29d7221e958f03d7328302..4383fe3b441866d95157374496834dc44bb3386c 100644 (file)
@@ -717,9 +717,8 @@ static void continue_pipe_connect(struct composite_context *c, struct pipe_conne
 {
        struct composite_context *auth_bind_req;
 
-       s->pipe->binding = s->binding;
-       if (!talloc_reference(s->pipe, s->binding)) {
-               composite_error(c, NT_STATUS_NO_MEMORY);
+       s->pipe->binding = dcerpc_binding_dup(s->pipe, s->binding);
+       if (composite_nomem(s->pipe->binding, c)) {
                return;
        }
 
index 2787f0a3dce0b980a406631db3f4690a4c3f14e5..44e406f4c0430c8c2afee65fb24875f3319caa23 100644 (file)
@@ -174,9 +174,8 @@ static void continue_pipe_open(struct composite_context *c)
        s = talloc_get_type(c->private_data, struct sec_conn_state);
 
        s->pipe2->conn->flags = s->pipe->conn->flags;
-       s->pipe2->binding     = s->binding;
-       if (!talloc_reference(s->pipe2, s->binding)) {
-               composite_error(c, NT_STATUS_NO_MEMORY);
+       s->pipe2->binding     = dcerpc_binding_dup(s->pipe2, s->binding);
+       if (composite_nomem(s->pipe2->binding, c)) {
                return;
        }
 
index 1364fdce35324f673cbd4852948eebd1721a0190..3ee891d3e3fc879bdfb891d48e88741b1ecd54a8 100644 (file)
@@ -808,7 +808,11 @@ _PUBLIC_ NTSTATUS dcerpc_secondary_context(struct dcerpc_pipe *p,
 
        p2->transfer_syntax = p->transfer_syntax;
 
-       p2->binding = talloc_reference(p2, p->binding);
+       p2->binding = dcerpc_binding_dup(p2, p->binding);
+       if (p2->binding == NULL) {
+               talloc_free(p2);
+               return NT_STATUS_NO_MEMORY;
+       }
 
        p2->binding_handle = dcerpc_pipe_binding_handle(p2);
        if (p2->binding_handle == NULL) {