svn commit: samba r19092 - in branches/SAMBA_4_0/source/nbt_server/wins: .

metze at samba.org metze at samba.org
Thu Oct 5 07:51:51 GMT 2006


Author: metze
Date: 2006-10-05 07:51:51 +0000 (Thu, 05 Oct 2006)
New Revision: 19092

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=19092

Log:
active replica records cannot expire!

we handle that in the scavenging code, but were missing that
in the wins server name query code...

metze
Modified:
   branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c


Changeset:
Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c
===================================================================
--- branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c	2006-10-05 07:47:56 UTC (rev 19091)
+++ branches/SAMBA_4_0/source/nbt_server/wins/winsdb.c	2006-10-05 07:51:51 UTC (rev 19092)
@@ -618,6 +618,7 @@
 	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 @@
 		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 @@
 		 */
 		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)));



More information about the samba-cvs mailing list