diff options
Diffstat (limited to 'source4/nbt_server/winsserver.c')
-rw-r--r-- | source4/nbt_server/winsserver.c | 70 |
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; } |