r11900: - make sure address and registered_by are replaced when they're not present
authorStefan Metzmacher <metze@samba.org>
Fri, 25 Nov 2005 10:46:38 +0000 (10:46 +0000)
committerGerald (Jerry) Carter <jerry@samba.org>
Wed, 10 Oct 2007 18:46:44 +0000 (13:46 -0500)
- make sure we don't add active records with 0 addresses

metze
(This used to be commit 5e7324efb338f4c4e390e4930d7ea21056db3a57)

source4/nbt_server/wins/winsdb.c

index 94e47b00b1a805656b5298cd6ddcdcc758a98908..7916d139bbce8dc37e92da114b6936031873b91f 100644 (file)
@@ -513,9 +513,16 @@ struct ldb_message *winsdb_message(struct ldb_context *ldb,
                                   struct winsdb_record *rec, TALLOC_CTX *mem_ctx)
 {
        int i, ret=0;
+       size_t addr_count;
        struct ldb_message *msg = ldb_msg_new(mem_ctx);
        if (msg == NULL) goto failed;
 
+       /* make sure we don't put in corrupted records */
+       addr_count = winsdb_addr_list_length(rec->addresses);
+       if (rec->state == WREPL_STATE_ACTIVE && addr_count == 0) {
+               rec->state = WREPL_STATE_RELEASED;
+       }
+
        msg->dn = winsdb_dn(msg, rec->name);
        if (msg->dn == NULL) goto failed;
        ret |= ldb_msg_add_fmt(msg, "type", "0x%02X", rec->name->type);
@@ -534,9 +541,11 @@ struct ldb_message *winsdb_message(struct ldb_context *ldb,
                                  ldb_timestring(msg, rec->expire_time));
        ret |= ldb_msg_add_fmt(msg, "versionID", "%llu", rec->version);
        ret |= ldb_msg_add_string(msg, "winsOwner", rec->wins_owner);
+       ret |= ldb_msg_add_empty(msg, "address", 0);
        for (i=0;rec->addresses[i];i++) {
                ret |= ldb_msg_add_winsdb_addr(msg, "address", rec->addresses[i]);
        }
+       ret |= ldb_msg_add_empty(msg, "registeredBy", 0);
        if (rec->registered_by) {
                ret |= ldb_msg_add_string(msg, "registeredBy", rec->registered_by);
                if (ret != 0) goto failed;