r3125: Store object UUID directly instead of using a pointer (struct dcerpc_binding)
authorJelmer Vernooij <jelmer@samba.org>
Thu, 21 Oct 2004 21:57:30 +0000 (21:57 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:02:23 +0000 (13:02 -0500)
Let test fail if messaging_init() fails instead of generating segfault in the LOCAL-MESSAGING test
(This used to be commit 0609f410ef756501d50c04b544387ae547fcd63c)

source4/gtk/common/gtk-smb.c
source4/librpc/rpc/dcerpc.h
source4/librpc/rpc/dcerpc_util.c
source4/torture/local/messaging.c

index 70c05350e8914bda0d44d00d98f0ff6faed1f9a0..e5121a21ce40143c4e29f912c70f2da8c05ba2a9 100644 (file)
@@ -307,7 +307,7 @@ struct dcerpc_binding *gtk_rpc_binding_dialog_get_binding(GtkRpcBindingDialog *d
 {
        struct dcerpc_binding *binding = talloc_p(mem_ctx, struct dcerpc_binding);
 
-       binding->object = NULL;
+       ZERO_STRUCT(binding->object);
 
        /* Format: TRANSPORT:host[\pipe\foo,foo,foo] */
 
index 903759f19b28408c957e1757b284c4ba8e001e96..e7b520d0ad8f166f9054a69425c509d255a9d331 100644 (file)
@@ -144,7 +144,7 @@ struct dcerpc_interface_table {
 /* this describes a binding to a particular transport/pipe */
 struct dcerpc_binding {
        enum dcerpc_transport_t transport;
-       struct GUID *object;
+       struct GUID object;
        const char *host;
        const char **options;
        uint32_t flags;
index f1b120894ed0a13fc37eb9080e2f6dd816746c58..a951f782c384b5ec32d276a1eae65cd9c3ec3929 100644 (file)
@@ -296,8 +296,8 @@ const char *dcerpc_binding_string(TALLOC_CTX *mem_ctx, const struct dcerpc_bindi
                return NULL;
        }
 
-       if (b->object) { 
-               s = talloc_asprintf(mem_ctx, "%s@", GUID_string(mem_ctx, b->object));
+       if (!uuid_all_zero(&b->object)) { 
+               s = talloc_asprintf(mem_ctx, "%s@", GUID_string(mem_ctx, &b->object));
        }
 
        s = talloc_asprintf_append(s, "%s:", t_name);
@@ -347,9 +347,7 @@ NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struct dcerpc_
        if (p && PTR_DIFF(p, s) == 36) { /* 36 is the length of a UUID */
                NTSTATUS status;
 
-               b->object = talloc_p(mem_ctx, struct GUID);
-               
-               status = GUID_from_string(s, b->object);
+               status = GUID_from_string(s, &b->object);
 
                if (NT_STATUS_IS_ERR(status)) {
                        DEBUG(0, ("Failed parsing UUID\n"));
@@ -358,7 +356,7 @@ NTSTATUS dcerpc_parse_binding(TALLOC_CTX *mem_ctx, const char *s, struct dcerpc_
 
                s = p + 1;
        } else {
-               b->object = NULL;
+               ZERO_STRUCT(b->object);
        }
 
        p = strchr(s, ':');
@@ -609,7 +607,7 @@ NTSTATUS dcerpc_binding_from_tower(TALLOC_CTX *mem_ctx, struct epm_tower *tower,
        int i;
 
        binding->transport = -1;
-       binding->object = NULL;
+       ZERO_STRUCT(binding->object);
        binding->options = NULL;
        binding->host = NULL;
        binding->flags = 0;
@@ -642,10 +640,7 @@ NTSTATUS dcerpc_binding_from_tower(TALLOC_CTX *mem_ctx, struct epm_tower *tower,
        }
 
        /* Set object uuid */
-       if (!uuid_all_zero(&tower->floors[0].lhs.info.uuid.uuid)) {
-               binding->object = talloc_p(mem_ctx, struct GUID);
-               *binding->object = tower->floors[0].lhs.info.uuid.uuid;
-       }
+       binding->object = tower->floors[0].lhs.info.uuid.uuid;
 
        /* Ignore floor 1, it contains the NDR version info */
        
@@ -697,11 +692,7 @@ NTSTATUS dcerpc_binding_build_tower(TALLOC_CTX *mem_ctx, struct dcerpc_binding *
 
        /* Floor 0 */
        (*tower)->floors[0].lhs.protocol = EPM_PROTOCOL_UUID;
-       if (binding->object) {
-               (*tower)->floors[0].lhs.info.uuid.uuid = *binding->object;
-       } else {
-               ZERO_STRUCT((*tower)->floors[0].lhs.info.uuid.uuid);
-       }
+       (*tower)->floors[0].lhs.info.uuid.uuid = binding->object;
        (*tower)->floors[0].lhs.info.uuid.version = 0;
        
        /* Floor 1 */
index 6177bc82a80d6f14a978ef4dec7a8450e470961b..38cebb4d394a08530d9f64f6178de334f95a41c4 100644 (file)
@@ -61,6 +61,11 @@ static BOOL test_ping_speed(TALLOC_CTX *mem_ctx)
 
        if (fork() == 0) {
                void *msg_ctx2 = messaging_init(mem_ctx, 1, ev);
+       
+               if (!msg_ctx2) {
+                       exit(1);
+               }
+               
                messaging_register(msg_ctx2, NULL, MY_PING, ping_message);
                messaging_register(msg_ctx2, mem_ctx, MY_EXIT, exit_message);
                event_loop_wait(ev);
@@ -71,6 +76,11 @@ static BOOL test_ping_speed(TALLOC_CTX *mem_ctx)
 
        msg_ctx = messaging_init(mem_ctx, 2, ev);
 
+       if (!msg_ctx) {
+               printf("messaging_init() failed\n");
+               return False;
+       }
+
        messaging_register(msg_ctx, &pong_count, MY_PONG, pong_message);
 
        start_timer();