root/source4/nbt_server/nbt_server.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. nbtd_task_init
  2. server_service_nbtd_init

   1 /* 
   2    Unix SMB/CIFS implementation.
   3 
   4    NBT server task
   5 
   6    Copyright (C) Andrew Tridgell        2005
   7    
   8    This program is free software; you can redistribute it and/or modify
   9    it under the terms of the GNU General Public License as published by
  10    the Free Software Foundation; either version 3 of the License, or
  11    (at your option) any later version.
  12    
  13    This program is distributed in the hope that it will be useful,
  14    but WITHOUT ANY WARRANTY; without even the implied warranty of
  15    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  16    GNU General Public License for more details.
  17    
  18    You should have received a copy of the GNU General Public License
  19    along with this program.  If not, see <http://www.gnu.org/licenses/>.
  20 */
  21 
  22 #include "includes.h"
  23 #include "smbd/service_task.h"
  24 #include "smbd/service.h"
  25 #include "nbt_server/nbt_server.h"
  26 #include "nbt_server/wins/winsserver.h"
  27 #include "system/network.h"
  28 #include "lib/socket/netif.h"
  29 #include "auth/auth.h"
  30 #include "dsdb/samdb/samdb.h"
  31 #include "param/param.h"
  32 
  33 /*
  34   startup the nbtd task
  35 */
  36 static void nbtd_task_init(struct task_server *task)
     /* [<][>][^][v][top][bottom][index][help] */
  37 {
  38         struct nbtd_server *nbtsrv;
  39         NTSTATUS status;
  40         struct interface *ifaces;
  41 
  42         load_interfaces(task, lp_interfaces(task->lp_ctx), &ifaces);
  43 
  44         if (iface_count(ifaces) == 0) {
  45                 task_server_terminate(task, "nbtd: no network interfaces configured");
  46                 return;
  47         }
  48 
  49         task_server_set_title(task, "task[nbtd]");
  50 
  51         nbtsrv = talloc(task, struct nbtd_server);
  52         if (nbtsrv == NULL) {
  53                 task_server_terminate(task, "nbtd: out of memory");
  54                 return;
  55         }
  56 
  57         nbtsrv->task            = task;
  58         nbtsrv->interfaces      = NULL;
  59         nbtsrv->bcast_interface = NULL;
  60         nbtsrv->wins_interface  = NULL;
  61 
  62         /* start listening on the configured network interfaces */
  63         status = nbtd_startup_interfaces(nbtsrv, task->lp_ctx, ifaces);
  64         if (!NT_STATUS_IS_OK(status)) {
  65                 task_server_terminate(task, "nbtd failed to setup interfaces");
  66                 return;
  67         }
  68 
  69         nbtsrv->sam_ctx = samdb_connect(nbtsrv, task->event_ctx, task->lp_ctx, system_session(nbtsrv, task->lp_ctx));
  70         if (nbtsrv->sam_ctx == NULL) {
  71                 task_server_terminate(task, "nbtd failed to open samdb");
  72                 return;
  73         }
  74 
  75         /* start the WINS server, if appropriate */
  76         status = nbtd_winsserver_init(nbtsrv);
  77         if (!NT_STATUS_IS_OK(status)) {
  78                 task_server_terminate(task, "nbtd failed to start WINS server");
  79                 return;
  80         }
  81 
  82         nbtd_register_irpc(nbtsrv);
  83 
  84         /* start the process of registering our names on all interfaces */
  85         nbtd_register_names(nbtsrv);
  86 
  87         irpc_add_name(task->msg_ctx, "nbt_server");
  88 }
  89 
  90 
  91 /*
  92   register ourselves as a available server
  93 */
  94 NTSTATUS server_service_nbtd_init(void)
     /* [<][>][^][v][top][bottom][index][help] */
  95 {
  96         return register_server_service("nbt", nbtd_task_init);
  97 }

/* [<][>][^][v][top][bottom][index][help] */