summaryrefslogtreecommitdiff
path: root/source4/nbt_server/winsserver.c
diff options
context:
space:
mode:
Diffstat (limited to 'source4/nbt_server/winsserver.c')
-rw-r--r--source4/nbt_server/winsserver.c70
1 files changed, 64 insertions, 6 deletions
diff --git a/source4/nbt_server/winsserver.c b/source4/nbt_server/winsserver.c
index 5940303f66..c7720b6ec7 100644
--- a/source4/nbt_server/winsserver.c
+++ b/source4/nbt_server/winsserver.c
@@ -23,15 +23,73 @@
#include "includes.h"
#include "nbt_server/nbt_server.h"
+
+static void nbtd_winsserver_query(struct nbt_name_socket *nbtsock,
+ struct nbt_name_packet *packet,
+ const char *src_address, int src_port)
+{
+ nbtd_negative_name_query_reply(nbtsock, packet, src_address, src_port);
+}
+
+static void nbtd_winsserver_register(struct nbt_name_socket *nbtsock,
+ struct nbt_name_packet *packet,
+ const char *src_address, int src_port)
+{
+ nbtd_negative_name_registration_reply(nbtsock, packet, src_address, src_port);
+}
+
+
+static void nbtd_winsserver_release(struct nbt_name_socket *nbtsock,
+ struct nbt_name_packet *packet,
+ const char *src_address, int src_port)
+{
+}
+
+
/*
answer a name query
*/
-void nbtd_query_wins(struct nbt_name_socket *nbtsock,
- struct nbt_name_packet *packet,
- const char *src_address, int src_port)
+void nbtd_winsserver_request(struct nbt_name_socket *nbtsock,
+ struct nbt_name_packet *packet,
+ const char *src_address, int src_port)
+{
+ if (packet->operation & NBT_FLAG_BROADCAST) {
+ return;
+ }
+
+ switch (packet->operation & NBT_OPCODE) {
+ case NBT_OPCODE_QUERY:
+ nbtd_winsserver_query(nbtsock, packet, src_address, src_port);
+ break;
+
+ case NBT_OPCODE_REGISTER:
+ case NBT_OPCODE_REFRESH:
+ case NBT_OPCODE_REFRESH2:
+ case NBT_OPCODE_MULTI_HOME_REG:
+ nbtd_winsserver_register(nbtsock, packet, src_address, src_port);
+ break;
+
+ case NBT_OPCODE_RELEASE:
+ nbtd_winsserver_release(nbtsock, packet, src_address, src_port);
+ break;
+ }
+
+}
+
+/*
+ startup the WINS server, if configured
+*/
+NTSTATUS nbtd_winsserver_init(struct nbtd_server *nbtsrv)
{
- DEBUG(0,("WINS query from %s\n", src_address));
- if (DEBUGLVL(10)) {
- NDR_PRINT_DEBUG(nbt_name_packet, packet);
+ if (!lp_wins_support()) {
+ nbtsrv->wins_db = NULL;
+ return NT_STATUS_OK;
}
+
+ nbtsrv->wins_db = ldb_wrap_connect(nbtsrv, lp_wins_url(), 0, NULL);
+ if (nbtsrv->wins_db == NULL) {
+ return NT_STATUS_INTERNAL_DB_ERROR;
+ }
+
+ return NT_STATUS_OK;
}