summaryrefslogtreecommitdiff
path: root/source4/nbt_server/wins/winswack.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2005-11-25 15:30:35 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:46:48 -0500
commit3f80ecc0de442313ac4bdb827b401fa7346790e8 (patch)
treec08e8532b79716d3224f482e633c732f740a8fcf /source4/nbt_server/wins/winswack.c
parent97e19e9716e73e98cdcfd7a9a209a7a24add05fb (diff)
downloadsamba-3f80ecc0de442313ac4bdb827b401fa7346790e8.tar.gz
samba-3f80ecc0de442313ac4bdb827b401fa7346790e8.tar.bz2
samba-3f80ecc0de442313ac4bdb827b401fa7346790e8.zip
r11912: fix nbt_name_registration, there's still some minor stuff todo,
e.g. to return the first address of the 0x1B address as first address in the 0x1C reply, and handle sgroup merge overflow of 25 addresses metze (This used to be commit a80280e061c03f9d07f7d6df20228de7923bb000)
Diffstat (limited to 'source4/nbt_server/wins/winswack.c')
-rw-r--r--source4/nbt_server/wins/winswack.c19
1 files changed, 9 insertions, 10 deletions
diff --git a/source4/nbt_server/wins/winswack.c b/source4/nbt_server/wins/winswack.c
index e8c5dd6780..793c0a3d8f 100644
--- a/source4/nbt_server/wins/winswack.c
+++ b/source4/nbt_server/wins/winswack.c
@@ -55,12 +55,13 @@ static void wins_wack_deny(struct wack_state *state)
static void wins_wack_allow(struct wack_state *state)
{
NTSTATUS status;
- uint32_t ttl;
- time_t now = time(NULL);
+ uint32_t ttl = wins_server_ttl(state->winssrv, state->request_packet->additional[0].ttl);
struct winsdb_record *rec = state->rec, *rec2;
status = winsdb_lookup(state->winssrv->wins_db, rec->name, state, &rec2);
- if (!NT_STATUS_IS_OK(status) || rec2->version != rec->version) {
+ if (!NT_STATUS_IS_OK(status)
+ || rec2->version != rec->version
+ || strcmp(rec2->wins_owner, rec->wins_owner) != 0) {
DEBUG(1,("WINS: record %s changed during WACK - failing registration\n",
nbt_name_string(state, rec->name)));
wins_wack_deny(state);
@@ -70,18 +71,16 @@ static void wins_wack_allow(struct wack_state *state)
nbtd_name_registration_reply(state->nbtsock, state->request_packet,
&state->src, NBT_RCODE_OK);
- ttl = wins_server_ttl(state->winssrv, state->request_packet->additional[0].ttl);
- if (now + ttl > rec->expire_time) {
- rec->expire_time = now + ttl;
- }
+ rec->expire_time = time(NULL) + ttl;
+ rec->registered_by = state->src.addr;
+
+ /* TODO: is it correct to only add this address? */
rec->addresses = winsdb_addr_list_add(rec->addresses,
state->reg_address,
WINSDB_OWNER_LOCAL,
rec->expire_time);
if (rec->addresses == NULL) goto failed;
- rec->registered_by = state->src.addr;
-
winsdb_modify(state->winssrv->wins_db, rec, WINSDB_FLAG_ALLOC_VERSION | WINSDB_FLAG_TAKE_OWNERSHIP);
DEBUG(4,("WINS: accepted registration of %s with address %s\n",
@@ -211,5 +210,5 @@ void wins_register_wack(struct nbt_name_socket *nbtsock,
failed:
talloc_free(state);
- nbtd_name_registration_reply(nbtsock, packet, src, NBT_RCODE_SVR);
+ nbtd_name_registration_reply(nbtsock, packet, src, NBT_RCODE_SVR);
}