Ignore:
Timestamp:
Nov 27, 2012, 4:43:17 PM (13 years ago)
Author:
Silvan Scherrer
Message:

Samba Server: updated trunk to 3.6.0

Location:
trunk/server
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/server

  • trunk/server/source4/nbt_server/register.c

    r414 r745  
    9494        io.in.name            = iname->name;
    9595        io.in.dest_addr       = iface->bcast_address;
    96         io.in.dest_port       = lp_nbt_port(iface->nbtsrv->task->lp_ctx);
     96        io.in.dest_port       = lpcfg_nbt_port(iface->nbtsrv->task->lp_ctx);
    9797        io.in.address         = iface->ip_address;
    9898        io.in.nb_flags        = iname->nb_flags;
     
    119119{
    120120        uint32_t refresh_time;
    121         uint32_t max_refresh_time = lp_parm_int(iname->iface->nbtsrv->task->lp_ctx, NULL, "nbtd", "max_refresh_time", 7200);
     121        uint32_t max_refresh_time = lpcfg_parm_int(iname->iface->nbtsrv->task->lp_ctx, NULL, "nbtd", "max_refresh_time", 7200);
    122122
    123123        refresh_time = MIN(max_refresh_time, iname->ttl/2);
     
    129129}
    130130
     131struct nbtd_register_name_state {
     132        struct nbtd_iface_name *iname;
     133        struct nbt_name_register_bcast io;
     134};
    131135
    132136/*
    133137  a name registration has completed
    134138*/
    135 static void nbtd_register_handler(struct composite_context *creq)
    136 {
    137         struct nbtd_iface_name *iname = talloc_get_type(creq->async.private_data,
    138                                                         struct nbtd_iface_name);
     139static void nbtd_register_name_handler(struct tevent_req *subreq)
     140{
     141        struct nbtd_register_name_state *state =
     142                tevent_req_callback_data(subreq,
     143                struct nbtd_register_name_state);
     144        struct nbtd_iface_name *iname = state->iname;
    139145        NTSTATUS status;
    140         TALLOC_CTX *tmp_ctx = talloc_new(iname);
    141 
    142         status = nbt_name_register_bcast_recv(creq);
     146
     147        status = nbt_name_register_bcast_recv(subreq);
     148        TALLOC_FREE(subreq);
    143149        if (NT_STATUS_IS_OK(status)) {
    144150                /* good - nobody complained about our registration */
    145151                iname->nb_flags |= NBT_NM_ACTIVE;
    146152                DEBUG(3,("Registered %s with %s on interface %s\n",
    147                          nbt_name_string(tmp_ctx, &iname->name),
     153                         nbt_name_string(state, &iname->name),
    148154                         iname->iface->ip_address, iname->iface->bcast_address));
    149155                iname->registration_time = timeval_current();
    150                 talloc_free(tmp_ctx);
     156                talloc_free(state);
    151157                nbtd_start_refresh_timer(iname);
    152158                return;
     
    157163
    158164        DEBUG(1,("Error registering %s with %s on interface %s - %s\n",
    159                  nbt_name_string(tmp_ctx, &iname->name),
     165                 nbt_name_string(state, &iname->name),
    160166                 iname->iface->ip_address, iname->iface->bcast_address,
    161167                 nt_errstr(status)));
    162         talloc_free(tmp_ctx);
     168        talloc_free(state);
    163169}
    164170
     
    172178{
    173179        struct nbtd_iface_name *iname;
    174         const char *scope = lp_netbios_scope(iface->nbtsrv->task->lp_ctx);
    175         struct nbt_name_register_bcast io;
    176         struct composite_context *creq;
     180        const char *scope = lpcfg_netbios_scope(iface->nbtsrv->task->lp_ctx);
     181        struct nbtd_register_name_state *state;
     182        struct tevent_req *subreq;
    177183        struct nbtd_server *nbtsrv = iface->nbtsrv;
    178184
     
    189195        }
    190196        iname->nb_flags          = nb_flags;
    191         iname->ttl               = lp_parm_int(iface->nbtsrv->task->lp_ctx, NULL, "nbtd", "bcast_ttl", 300000);
     197        iname->ttl               = lpcfg_parm_int(iface->nbtsrv->task->lp_ctx, NULL, "nbtd", "bcast_ttl", 300000);
    192198        iname->registration_time = timeval_zero();
    193199        iname->wins_server       = NULL;
     
    209215        }
    210216
     217        state = talloc_zero(iname, struct nbtd_register_name_state);
     218        if (state == NULL) {
     219                return;
     220        }
     221
     222        state->iname = iname;
     223
    211224        /* setup a broadcast name registration request */
    212         io.in.name            = iname->name;
    213         io.in.dest_addr      = iface->bcast_address;
    214         io.in.dest_port       = lp_nbt_port(iface->nbtsrv->task->lp_ctx);
    215         io.in.address         = iface->ip_address;
    216         io.in.nb_flags        = nb_flags;
    217         io.in.ttl             = iname->ttl;
     225        state->io.in.name      = iname->name;
     226        state->io.in.dest_addr = iface->bcast_address;
     227        state->io.in.dest_port = lpcfg_nbt_port(iface->nbtsrv->task->lp_ctx);
     228        state->io.in.address   = iface->ip_address;
     229        state->io.in.nb_flags  = nb_flags;
     230        state->io.in.ttl       = iname->ttl;
    218231
    219232        nbtsrv->stats.total_sent++;
    220         creq = nbt_name_register_bcast_send(iface->nbtsock, &io);
    221         if (creq == NULL) return;
    222 
    223         creq->async.fn = nbtd_register_handler;
    224         creq->async.private_data = iname;
     233
     234        subreq = nbt_name_register_bcast_send(state, nbtsrv->task->event_ctx,
     235                                              iface->nbtsock, &state->io);
     236        if (subreq == NULL) {
     237                return;
     238        }
     239
     240        tevent_req_set_callback(subreq, nbtd_register_name_handler, state);
    225241}
    226242
     
    263279        /* note that we don't initially mark the names "ACTIVE". They are
    264280           marked active once registration is successful */
    265         nbtd_register_name(nbtsrv, lp_netbios_name(nbtsrv->task->lp_ctx), NBT_NAME_CLIENT, nb_flags);
    266         nbtd_register_name(nbtsrv, lp_netbios_name(nbtsrv->task->lp_ctx), NBT_NAME_USER,   nb_flags);
    267         nbtd_register_name(nbtsrv, lp_netbios_name(nbtsrv->task->lp_ctx), NBT_NAME_SERVER, nb_flags);
    268 
    269         aliases = lp_netbios_aliases(nbtsrv->task->lp_ctx);
     281        nbtd_register_name(nbtsrv, lpcfg_netbios_name(nbtsrv->task->lp_ctx), NBT_NAME_CLIENT, nb_flags);
     282        nbtd_register_name(nbtsrv, lpcfg_netbios_name(nbtsrv->task->lp_ctx), NBT_NAME_USER,   nb_flags);
     283        nbtd_register_name(nbtsrv, lpcfg_netbios_name(nbtsrv->task->lp_ctx), NBT_NAME_SERVER, nb_flags);
     284
     285        aliases = lpcfg_netbios_aliases(nbtsrv->task->lp_ctx);
    270286        while (aliases && aliases[0]) {
    271287                nbtd_register_name(nbtsrv, aliases[0], NBT_NAME_CLIENT, nb_flags);
     
    274290        }
    275291
    276         if (lp_server_role(nbtsrv->task->lp_ctx) == ROLE_DOMAIN_CONTROLLER)     {
     292        if (lpcfg_server_role(nbtsrv->task->lp_ctx) == ROLE_DOMAIN_CONTROLLER)  {
    277293                bool is_pdc = samdb_is_pdc(nbtsrv->sam_ctx);
    278294                if (is_pdc) {
    279                         nbtd_register_name(nbtsrv, lp_workgroup(nbtsrv->task->lp_ctx),
     295                        nbtd_register_name(nbtsrv, lpcfg_workgroup(nbtsrv->task->lp_ctx),
    280296                                           NBT_NAME_PDC, nb_flags);
    281297                }
    282                 nbtd_register_name(nbtsrv, lp_workgroup(nbtsrv->task->lp_ctx),
     298                nbtd_register_name(nbtsrv, lpcfg_workgroup(nbtsrv->task->lp_ctx),
    283299                                   NBT_NAME_LOGON, nb_flags | NBT_NM_GROUP);
    284300        }
    285301
    286302        nb_flags |= NBT_NM_GROUP;
    287         nbtd_register_name(nbtsrv, lp_workgroup(nbtsrv->task->lp_ctx), NBT_NAME_CLIENT, nb_flags);
     303        nbtd_register_name(nbtsrv, lpcfg_workgroup(nbtsrv->task->lp_ctx), NBT_NAME_CLIENT, nb_flags);
    288304
    289305        nb_flags |= NBT_NM_PERMANENT;
Note: See TracChangeset for help on using the changeset viewer.