diff options
author | Stefan Metzmacher <metze@samba.org> | 2005-10-14 12:55:59 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:42:34 -0500 |
commit | 676b220f3e8c975824bfdae407e9f7938d79118c (patch) | |
tree | d61ecaa11b43e82b5732706eb9ced5d9566785c5 /source4/nbt_server/wins/winsserver.c | |
parent | 8755cd4a9ce7ff053c77d51a65a9c91761aea28d (diff) | |
download | samba-676b220f3e8c975824bfdae407e9f7938d79118c.tar.gz samba-676b220f3e8c975824bfdae407e9f7938d79118c.tar.bz2 samba-676b220f3e8c975824bfdae407e9f7938d79118c.zip |
r11040: r10357@SERNOX: metze | 2005-09-20 21:28:11 +0200
- as the old records are broken sinse the last winsdb_dn() changes, (the dn components order was reversed)
we can use nicer attribute and objectClass names...
- use much more verbose error handling for winsdb_*
- print a debug message when we found a corrupted record
metze
(This used to be commit 82bad3f3efec5b706a65e65054787f1486d7c875)
Diffstat (limited to 'source4/nbt_server/wins/winsserver.c')
-rw-r--r-- | source4/nbt_server/wins/winsserver.c | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/source4/nbt_server/wins/winsserver.c b/source4/nbt_server/wins/winsserver.c index 37b59cdc7f..d5043caa29 100644 --- a/source4/nbt_server/wins/winsserver.c +++ b/source4/nbt_server/wins/winsserver.c @@ -110,6 +110,7 @@ static void nbtd_winsserver_register(struct nbt_name_socket *nbtsock, struct nbt_name_packet *packet, const struct nbt_peer_socket *src) { + NTSTATUS status; struct nbtd_interface *iface = talloc_get_type(nbtsock->incoming.private, struct nbtd_interface); struct wins_server *winssrv = iface->nbtsrv->winssrv; @@ -125,10 +126,13 @@ static void nbtd_winsserver_register(struct nbt_name_socket *nbtsock, goto done; } - rec = winsdb_load(winssrv, name, packet); - if (rec == NULL) { + status = winsdb_lookup(winssrv->wins_db, name, packet, &rec); + if (NT_STATUS_EQUAL(NT_STATUS_OBJECT_NAME_NOT_FOUND, status)) { rcode = wins_register_new(nbtsock, packet, src); goto done; + } else if (!NT_STATUS_IS_OK(status)) { + rcode = NBT_RCODE_SVR; + goto done; } else if (rec->state != WINS_REC_ACTIVE) { winsdb_delete(winssrv, rec); rcode = wins_register_new(nbtsock, packet, src); @@ -182,6 +186,7 @@ static void nbtd_winsserver_query(struct nbt_name_socket *nbtsock, struct nbt_name_packet *packet, const struct nbt_peer_socket *src) { + NTSTATUS status; struct nbtd_interface *iface = talloc_get_type(nbtsock->incoming.private, struct nbtd_interface); struct wins_server *winssrv = iface->nbtsrv->winssrv; @@ -189,8 +194,8 @@ static void nbtd_winsserver_query(struct nbt_name_socket *nbtsock, struct winsdb_record *rec; const char **addresses; - rec = winsdb_load(winssrv, name, packet); - if (rec == NULL || rec->state != WINS_REC_ACTIVE) { + status = winsdb_lookup(winssrv->wins_db, name, packet, &rec); + if (!NT_STATUS_IS_OK(status) || rec->state != WINS_REC_ACTIVE) { nbtd_negative_name_query_reply(nbtsock, packet, src); return; } @@ -212,14 +217,15 @@ static void nbtd_winsserver_release(struct nbt_name_socket *nbtsock, struct nbt_name_packet *packet, const struct nbt_peer_socket *src) { + NTSTATUS status; struct nbtd_interface *iface = talloc_get_type(nbtsock->incoming.private, struct nbtd_interface); struct wins_server *winssrv = iface->nbtsrv->winssrv; struct nbt_name *name = &packet->questions[0].name; struct winsdb_record *rec; - rec = winsdb_load(winssrv, name, packet); - if (rec == NULL || + status = winsdb_lookup(winssrv->wins_db, name, packet, &rec); + if (!NT_STATUS_IS_OK(status) || rec->state != WINS_REC_ACTIVE || IS_GROUP_NAME(name, rec->nb_flags)) { goto done; |