diff options
Diffstat (limited to 'source4/nbt_server')
-rw-r--r-- | source4/nbt_server/nbt_server.c | 10 | ||||
-rw-r--r-- | source4/nbt_server/nbt_server.h | 2 | ||||
-rw-r--r-- | source4/nbt_server/register.c | 18 |
3 files changed, 21 insertions, 9 deletions
diff --git a/source4/nbt_server/nbt_server.c b/source4/nbt_server/nbt_server.c index d8f6a83e94..a2b95d76c4 100644 --- a/source4/nbt_server/nbt_server.c +++ b/source4/nbt_server/nbt_server.c @@ -27,6 +27,8 @@ #include "nbt_server/wins/winsserver.h" #include "system/network.h" #include "lib/socket/netif.h" +#include "auth/auth.h" +#include "dsdb/samdb/samdb.h" /* startup the nbtd task @@ -61,6 +63,12 @@ static void nbtd_task_init(struct task_server *task) return; } + nbtsrv->sam_ctx = samdb_connect(nbtsrv, anonymous_session(nbtsrv)); + if (nbtsrv->sam_ctx == NULL) { + task_server_terminate(task, "nbtd failed to open samdb"); + return; + } + /* start the WINS server, if appropriate */ status = nbtd_winsserver_init(nbtsrv); if (!NT_STATUS_IS_OK(status)) { @@ -74,6 +82,8 @@ static void nbtd_task_init(struct task_server *task) nbtd_register_names(nbtsrv); irpc_add_name(task->msg_ctx, "nbt_server"); + + } diff --git a/source4/nbt_server/nbt_server.h b/source4/nbt_server/nbt_server.h index ebf1edb81f..e5a33ca5f1 100644 --- a/source4/nbt_server/nbt_server.h +++ b/source4/nbt_server/nbt_server.h @@ -75,6 +75,8 @@ struct nbtd_server { struct wins_server *winssrv; struct nbtd_statistics stats; + + struct ldb_context *sam_ctx; }; diff --git a/source4/nbt_server/register.c b/source4/nbt_server/register.c index 64ceaffd9c..6e65b753b1 100644 --- a/source4/nbt_server/register.c +++ b/source4/nbt_server/register.c @@ -29,6 +29,7 @@ #include "librpc/gen_ndr/ndr_samr.h" #include "nbt_server/wins/winsserver.h" #include "librpc/gen_ndr/ndr_nbt.h" +#include "dsdb/samdb/samdb.h" static void nbtd_start_refresh_timer(struct nbtd_iface_name *iname); @@ -271,15 +272,14 @@ void nbtd_register_names(struct nbtd_server *nbtsrv) aliases++; } - switch (lp_server_role()) { - case ROLE_DOMAIN_PDC: - nbtd_register_name(nbtsrv, lp_workgroup(), NBT_NAME_PDC, nb_flags); - nbtd_register_name(nbtsrv, lp_workgroup(), NBT_NAME_LOGON, nb_flags | NBT_NM_GROUP); - break; - case ROLE_DOMAIN_BDC: - nbtd_register_name(nbtsrv, lp_workgroup(), NBT_NAME_LOGON, nb_flags | NBT_NM_GROUP); - default: - break; + if (lp_server_role() == ROLE_DOMAIN_CONTROLLER) { + BOOL is_pdc = samdb_is_pdc(nbtsrv->sam_ctx); + if (is_pdc) { + nbtd_register_name(nbtsrv, lp_workgroup(), + NBT_NAME_PDC, nb_flags); + } + nbtd_register_name(nbtsrv, lp_workgroup(), + NBT_NAME_LOGON, nb_flags | NBT_NM_GROUP); } nb_flags |= NBT_NM_GROUP; |