diff options
author | Andrew Tridgell <tridge@samba.org> | 2005-02-11 23:54:37 +0000 |
---|---|---|
committer | Gerald (Jerry) Carter <jerry@samba.org> | 2007-10-10 13:09:44 -0500 |
commit | 0487eee93a06c8d4d1925660d6d14374c4039d86 (patch) | |
tree | 94c251edd48c5996aa831f8378459079e01939c5 /source4/nbt_server/winsserver.c | |
parent | 801889f71af52d8d136656ec1100364c50c1626d (diff) | |
download | samba-0487eee93a06c8d4d1925660d6d14374c4039d86.tar.gz samba-0487eee93a06c8d4d1925660d6d14374c4039d86.tar.bz2 samba-0487eee93a06c8d4d1925660d6d14374c4039d86.zip |
r5346: - a bit more preparation for the WINS server going in
- more NBT packet asserts, to ensure that incoming requests have all
the elements we depend on
- open the WINS database at startup if we are configured as a WINS server
- split out the nbtd server reply packet generation code so it can be
shared by the WINS server
- re-did the logic of what is answered by the WINS server and what by
the B node server. It now always tries to answer by the B node, and
only "recurses" to the WINS server for names that are not found.
(This used to be commit 5613e6b8ad9b32639caf5055f793dbc4d0a2fc19)
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; } |