summaryrefslogtreecommitdiff
path: root/source4/nbt_server/wins
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2006-10-05 07:51:51 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 14:20:34 -0500
commiteb06c35f12f49c1ef003ed161cc0a2339453e452 (patch)
treec737b0ccb00dc281b3f8acc6fd0ecc3d536a9983 /source4/nbt_server/wins
parentdf31092a0171b1fee62138608294c2af3e4d0074 (diff)
downloadsamba-eb06c35f12f49c1ef003ed161cc0a2339453e452.tar.gz
samba-eb06c35f12f49c1ef003ed161cc0a2339453e452.tar.bz2
samba-eb06c35f12f49c1ef003ed161cc0a2339453e452.zip
r19092: active replica records cannot expire!
we handle that in the scavenging code, but were missing that in the wins server name query code... metze (This used to be commit 7fb8dd3ab7a50b6fd77c74cb9078c62013b04a54)
Diffstat (limited to 'source4/nbt_server/wins')
-rw-r--r--source4/nbt_server/wins/winsdb.c19
1 files changed, 16 insertions, 3 deletions
diff --git a/source4/nbt_server/wins/winsdb.c b/source4/nbt_server/wins/winsdb.c
index e51b589f32..f423458073 100644
--- a/source4/nbt_server/wins/winsdb.c
+++ b/source4/nbt_server/wins/winsdb.c
@@ -618,6 +618,7 @@ NTSTATUS winsdb_record(struct winsdb_handle *h, struct ldb_message *msg, TALLOC_
struct ldb_message_element *el;
struct nbt_name *name;
uint32_t i, j, num_values;
+ BOOL we_are_owner = False;
rec = talloc(mem_ctx, struct winsdb_record);
if (rec == NULL) {
@@ -678,10 +679,21 @@ NTSTATUS winsdb_record(struct winsdb_handle *h, struct ldb_message *msg, TALLOC_
goto failed;
}
- /* see if it has already expired */
+ if (strcmp(rec->wins_owner, h->local_owner) == 0) {
+ we_are_owner = True;
+ }
+
+ /*
+ * see if it has already expired
+ *
+ * NOTE: only expire owned records this way!
+ * w2k3 resolves expired replicas
+ * which are in active state
+ */
if (!rec->is_static &&
rec->expire_time <= now &&
- rec->state == WREPL_STATE_ACTIVE) {
+ rec->state == WREPL_STATE_ACTIVE &&
+ we_are_owner) {
DEBUG(5,("WINS: expiring name %s (expired at %s)\n",
nbt_name_string(mem_ctx, rec->name), timestring(mem_ctx, rec->expire_time)));
rec->state = WREPL_STATE_RELEASED;
@@ -703,7 +715,8 @@ NTSTATUS winsdb_record(struct winsdb_handle *h, struct ldb_message *msg, TALLOC_
*/
if (!rec->is_static &&
rec->addresses[j]->expire_time <= now &&
- rec->state == WREPL_STATE_ACTIVE) {
+ rec->state == WREPL_STATE_ACTIVE &&
+ we_are_owner) {
DEBUG(5,("WINS: expiring name addr %s of %s (expired at %s)\n",
rec->addresses[j]->address, nbt_name_string(rec->addresses[j], rec->name),
timestring(rec->addresses[j], rec->addresses[j]->expire_time)));