summaryrefslogtreecommitdiff
path: root/source4/nbt_server/wins/winsserver.c
diff options
context:
space:
mode:
authorStefan Metzmacher <metze@samba.org>2005-10-14 12:55:59 +0000
committerGerald (Jerry) Carter <jerry@samba.org>2007-10-10 13:42:34 -0500
commit676b220f3e8c975824bfdae407e9f7938d79118c (patch)
treed61ecaa11b43e82b5732706eb9ced5d9566785c5 /source4/nbt_server/wins/winsserver.c
parent8755cd4a9ce7ff053c77d51a65a9c91761aea28d (diff)
downloadsamba-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.c18
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;