Author: metze Date: 2005-12-14 08:38:25 +0000 (Wed, 14 Dec 2005) New Revision: 12228
WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=12228 Log: fix the expire time for RELEASED records metze Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c Changeset: Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h =================================================================== --- branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h 2005-12-14 07:22:25 UTC (rev 12227) +++ branches/SAMBA_4_0/source/nbt_server/wins/winsdb.h 2005-12-14 08:38:25 UTC (rev 12228) @@ -54,6 +54,19 @@ /* wins server database handle */ struct ldb_context *wins_db; - uint32_t min_ttl; - uint32_t max_ttl; + /* some configuration */ + struct { + /* + * the interval (in secs) till an active record will be marked as RELEASED + */ + uint32_t min_renew_interval; + uint32_t max_renew_interval; + + /* + * the interval (in secs) a record remains in RELEASED state, + * before it will be marked as TOMBSTONE + * (also known as extinction interval) + */ + uint32_t tombstone_interval; + } config; }; Modified: branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c =================================================================== --- branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c 2005-12-14 07:22:25 UTC (rev 12227) +++ branches/SAMBA_4_0/source/nbt_server/wins/winsserver.c 2005-12-14 08:38:25 UTC (rev 12228) @@ -4,7 +4,8 @@ core wins server handling Copyright (C) Andrew Tridgell 2005 - + Copyright (C) Stefan Metzmacher 2005 + This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation; either version 2 of the License, or @@ -31,8 +32,8 @@ */ uint32_t wins_server_ttl(struct wins_server *winssrv, uint32_t ttl) { - ttl = MIN(ttl, winssrv->max_ttl); - ttl = MAX(ttl, winssrv->min_ttl); + ttl = MIN(ttl, winssrv->config.max_renew_interval); + ttl = MAX(ttl, winssrv->config.min_renew_interval); return ttl; } @@ -419,6 +420,10 @@ break; } + if (rec->state == WREPL_STATE_RELEASED) { + rec->expire_time = winssrv->config.tombstone_interval; + } + ret = winsdb_modify(winssrv->wins_db, rec, modify_flags); if (ret != NBT_RCODE_OK) { DEBUG(1,("WINS: FAILED: released name %s at %s: error:%u\n", @@ -468,6 +473,8 @@ */ NTSTATUS nbtd_winsserver_init(struct nbtd_server *nbtsrv) { + uint32_t tombstone_interval; + if (!lp_wins_support()) { nbtsrv->winssrv = NULL; return NT_STATUS_OK; @@ -476,8 +483,10 @@ nbtsrv->winssrv = talloc_zero(nbtsrv, struct wins_server); NT_STATUS_HAVE_NO_MEMORY(nbtsrv->winssrv); - nbtsrv->winssrv->max_ttl = lp_max_wins_ttl(); - nbtsrv->winssrv->min_ttl = lp_min_wins_ttl(); + nbtsrv->winssrv->config.max_renew_interval = lp_max_wins_ttl(); + nbtsrv->winssrv->config.min_renew_interval = lp_min_wins_ttl(); + tombstone_interval = lp_parm_int(-1,"wreplsrv","tombstone_interval", 6*24*60*60); + nbtsrv->winssrv->config.tombstone_interval = tombstone_interval; nbtsrv->winssrv->wins_db = winsdb_connect(nbtsrv->winssrv); if (!nbtsrv->winssrv->wins_db) {