diff options
author | Stefan Metzmacher <metze@samba.org> | 2005-11-25 15:30:35 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:46:48 -0500 |
commit | 3f80ecc0de442313ac4bdb827b401fa7346790e8 (patch) | |
tree | c08e8532b79716d3224f482e633c732f740a8fcf /source4/nbt_server/wins/winswack.c | |
parent | 97e19e9716e73e98cdcfd7a9a209a7a24add05fb (diff) | |
download | samba-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.c | 19 |
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); } |