r10569: add all info that we have to wrepl_name, as we need it for replication :-)
authorStefan Metzmacher <metze@samba.org>
Wed, 28 Sep 2005 09:58:58 +0000 (09:58 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:39:06 +0000 (13:39 -0500)
metze

source/libcli/wrepl/winsrepl.c
source/libcli/wrepl/winsrepl.h
source/torture/nbt/winsreplication.c

index 4284c5cdbbd85353f8a92b353b75f7f7f524389a..069ee2940794bcbb7ebdc5a05af20762f8f0f6dc 100644 (file)
@@ -729,7 +729,7 @@ NTSTATUS wrepl_pull_names_recv(struct wrepl_request *req,
        status = NT_STATUS_NO_MEMORY;
 
        io->out.names = talloc_array(packet, struct wrepl_name, io->out.num_names);
-       if (io->out.names == NULL) goto failed;
+       if (io->out.names == NULL) goto nomem;
 
        /* convert the list of names and addresses to a sane format */
        for (i=0;i<io->out.num_names;i++) {
@@ -739,6 +739,12 @@ NTSTATUS wrepl_pull_names_recv(struct wrepl_request *req,
                                            wname->name, wname->name_len);
                if (!NT_STATUS_IS_OK(status)) goto failed;
 
+               name->flags     = wname->flags;
+               name->group_flag= wname->group_flag;
+               name->version_id= wname->id;
+               name->owner     = talloc_strdup(io->out.names, io->in.partner.address);
+               if (name->owner == NULL) goto nomem;
+
                /* trying to save 1 or 2 bytes on the wire isn't a good idea */
                if (wname->flags & 2) {
                        int j;
@@ -747,7 +753,7 @@ NTSTATUS wrepl_pull_names_recv(struct wrepl_request *req,
                        name->addresses = talloc_array(io->out.names, 
                                                       struct wrepl_address, 
                                                       name->num_addresses);
-                       if (name->addresses == NULL) goto failed;
+                       if (name->addresses == NULL) goto nomem;
                        for (j=0;j<name->num_addresses;j++) {
                                name->addresses[j].owner = 
                                        talloc_steal(name->addresses, 
@@ -759,16 +765,19 @@ NTSTATUS wrepl_pull_names_recv(struct wrepl_request *req,
                } else {
                        name->num_addresses = 1;
                        name->addresses = talloc(io->out.names, struct wrepl_address);
-                       if (name->addresses == NULL) goto failed;
-                       name->addresses[0].owner = io->in.partner.address;
+                       if (name->addresses == NULL) goto nomem;
+                       name->addresses[0].owner = talloc_strdup(name->addresses,io->in.partner.address);
+                       if (name->addresses[0].owner == NULL) goto nomem;
                        name->addresses[0].address = talloc_steal(name->addresses,
                                                                  wname->addresses.ip);
                }
        }
 
        talloc_steal(mem_ctx, io->out.names);
-       status = NT_STATUS_OK;
-
+       talloc_free(packet);
+       return NT_STATUS_OK;
+nomem:
+       status = NT_STATUS_NO_MEMORY;
 failed:
        talloc_free(packet);
        return status;
index 64e09d61c62d3c4f3265671c84c4477287c679a1..2253fe181ebef3b83de0f20d3071433615fe04e0 100644 (file)
@@ -116,6 +116,10 @@ struct wrepl_pull_names {
                uint32_t num_names;
                struct wrepl_name {
                        struct nbt_name name;
+                       uint32_t flags;
+                       uint32_t group_flag;
+                       uint64_t version_id;
+                       const char *owner;
                        uint32_t num_addresses;
                        struct wrepl_address {
                                const char *owner;
index 914e0b52eb2fb6f1ccb064242df0f79b057758b4..cd60e12499b2571db12b2a266a6f4ed486d42ac2 100644 (file)
@@ -147,9 +147,12 @@ static void display_entry(TALLOC_CTX *mem_ctx, struct wrepl_name *name)
        int i;
 
        printf("%s\n", nbt_name_string(mem_ctx, &name->name));
+       printf("\tFLAGS: 0x%08X G_FLAG: 0x%08X VERSION_ID: %llu\n",
+               name->flags, name->group_flag, name->version_id);
+       printf("\tOWNER: %-15s\n", name->owner);
        for (i=0;i<name->num_addresses;i++) {
-               printf("\t%s %s\n", 
-                      name->addresses[i].owner, name->addresses[i].address);
+               printf("\tADDR: %-15s OWNER: %-15s\n", 
+                       name->addresses[i].address, name->addresses[i].owner);
        }
 }