summaryrefslogtreecommitdiff
path: root/source4/wrepl_server
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2006-01-24 19:14:08 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:51:27 -0500
commit8311b9e9e706cfb98136f3bd096eaf2152a71db9 (patch)
treed5b5ebda95474da507225308c2759b4712f8c9ad /source4/wrepl_server
parent5304f341329d562cb0f3ece28633d21bd8d3b01c (diff)
downloadsamba-8311b9e9e706cfb98136f3bd096eaf2152a71db9.tar.gz
samba-8311b9e9e706cfb98136f3bd096eaf2152a71db9.tar.bz2
samba-8311b9e9e706cfb98136f3bd096eaf2152a71db9.zip
r13116: make sure we don't add more than 25 addresses to a record,
and don't return more than 25 in a name query reply we now also order the addresses from the newest owned address to the oldest replica address metze (This used to be commit 602ec0f1c66e6cb9e958e0e7cc10d3294737378a)
Diffstat (limited to 'source4/wrepl_server')
-rw-r--r--source4/wrepl_server/wrepl_apply_records.c48
1 files changed, 28 insertions, 20 deletions
diff --git a/source4/wrepl_server/wrepl_apply_records.c b/source4/wrepl_server/wrepl_apply_records.c
index f41957a210..e1b4bcbf39 100644
--- a/source4/wrepl_server/wrepl_apply_records.c
+++ b/source4/wrepl_server/wrepl_apply_records.c
@@ -686,10 +686,12 @@ static NTSTATUS r_do_add(struct wreplsrv_partner *partner,
for (i=0; i < replica->num_addresses; i++) {
/* TODO: find out if rec->expire_time is correct here */
- rec->addresses = winsdb_addr_list_add(rec->addresses,
+ rec->addresses = winsdb_addr_list_add(partner->service->wins_db,
+ rec, rec->addresses,
replica->addresses[i].address,
replica->addresses[i].owner,
- rec->expire_time);
+ rec->expire_time,
+ False);
NT_STATUS_HAVE_NO_MEMORY(rec->addresses);
}
@@ -729,10 +731,12 @@ static NTSTATUS r_do_replace(struct wreplsrv_partner *partner,
for (i=0; i < replica->num_addresses; i++) {
/* TODO: find out if rec->expire_time is correct here */
- rec->addresses = winsdb_addr_list_add(rec->addresses,
+ rec->addresses = winsdb_addr_list_add(partner->service->wins_db,
+ rec, rec->addresses,
replica->addresses[i].address,
replica->addresses[i].owner,
- rec->expire_time);
+ rec->expire_time,
+ False);
NT_STATUS_HAVE_NO_MEMORY(rec->addresses);
}
@@ -829,11 +833,12 @@ static NTSTATUS r_do_mhomed_merge(struct wreplsrv_partner *partner,
merge->registered_by = NULL;
for (i=0; i < replica->num_addresses; i++) {
- /* TODO: find out if rec->expire_time is correct here */
- merge->addresses = winsdb_addr_list_add(merge->addresses,
+ merge->addresses = winsdb_addr_list_add(partner->service->wins_db,
+ merge, merge->addresses,
replica->addresses[i].address,
replica->addresses[i].owner,
- merge->expire_time);
+ merge->expire_time,
+ False);
NT_STATUS_HAVE_NO_MEMORY(merge->addresses);
}
@@ -849,11 +854,12 @@ static NTSTATUS r_do_mhomed_merge(struct wreplsrv_partner *partner,
}
if (found) continue;
- /* TODO: find out if rec->expire_time is correct here */
- merge->addresses = winsdb_addr_list_add(merge->addresses,
+ merge->addresses = winsdb_addr_list_add(partner->service->wins_db,
+ merge, merge->addresses,
rec->addresses[i]->address,
rec->addresses[i]->wins_owner,
- merge->expire_time);
+ rec->addresses[i]->expire_time,
+ False);
NT_STATUS_HAVE_NO_MEMORY(merge->addresses);
}
@@ -1198,34 +1204,36 @@ static NTSTATUS r_do_sgroup_merge(struct wreplsrv_partner *partner,
break;
}
- /* if it's also in the replica, it'll added later */
- if (found) continue;
-
/*
* if the address isn't in the replica and is owned by replicas owner,
* it won't be added to the merged record
*/
- if (strcmp(rec->addresses[i]->wins_owner, owner->address) == 0) {
+ if (!found && strcmp(rec->addresses[i]->wins_owner, owner->address) == 0) {
changed_old_addrs = True;
continue;
}
/*
- * add the address to the merge result, with the old owner and expire_time
+ * add the address to the merge result, with the old owner and expire_time,
+ * the owner and expire_time will be overwritten later if the address is
+ * in the replica too
*/
- merge->addresses = winsdb_addr_list_add(merge->addresses,
+ merge->addresses = winsdb_addr_list_add(partner->service->wins_db,
+ merge, merge->addresses,
rec->addresses[i]->address,
rec->addresses[i]->wins_owner,
- rec->addresses[i]->expire_time);
+ rec->addresses[i]->expire_time,
+ False);
NT_STATUS_HAVE_NO_MEMORY(merge->addresses);
}
for (i=0; i < replica->num_addresses; i++) {
- /* TODO: find out if rec->expire_time is correct here */
- merge->addresses = winsdb_addr_list_add(merge->addresses,
+ merge->addresses = winsdb_addr_list_add(partner->service->wins_db,
+ merge, merge->addresses,
replica->addresses[i].address,
replica->addresses[i].owner,
- merge->expire_time);
+ merge->expire_time,
+ False);
NT_STATUS_HAVE_NO_MEMORY(merge->addresses);
}