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/libnet/libnet_rpc.c

    r414 r745  
    2323#include "libcli/libcli.h"
    2424#include "libcli/composite/composite.h"
    25 #include "librpc/rpc/dcerpc.h"
    2625#include "librpc/rpc/dcerpc_proto.h"
    2726#include "librpc/gen_ndr/ndr_lsa_c.h"
     
    111110        case LIBNET_RPC_CONNECT_SERVER_ADDRESS:
    112111                b->flags = r->in.dcerpc_flags;
     112        }
     113
     114        if (DEBUGLEVEL >= 10) {
     115                b->flags |= DCERPC_DEBUG_PRINT_BOTH;
    113116        }
    114117
     
    225228
    226229
    227 static void continue_lookup_dc(struct composite_context *ctx);
     230static void continue_lookup_dc(struct tevent_req *req);
    228231static void continue_rpc_connect(struct composite_context *ctx);
    229232
     
    245248        struct composite_context *c;
    246249        struct rpc_connect_dc_state *s;
    247         struct composite_context *lookup_dc_req;
     250        struct tevent_req *lookup_dc_req;
    248251
    249252        /* composite context allocation and setup */
     
    282285        if (composite_nomem(lookup_dc_req, c)) return c;
    283286
    284         composite_continue(c, lookup_dc_req, continue_lookup_dc, c);
     287        tevent_req_set_callback(lookup_dc_req, continue_lookup_dc, c);
    285288        return c;
    286289}
     
    291294  initiate RpcConnect to it
    292295*/
    293 static void continue_lookup_dc(struct composite_context *ctx)
     296static void continue_lookup_dc(struct tevent_req *req)
    294297{
    295298        struct composite_context *c;
     
    298301        struct monitor_msg msg;
    299302        struct msg_net_lookup_dc data;
    300        
    301         c = talloc_get_type(ctx->async.private_data, struct composite_context);
    302         s = talloc_get_type(c->private_data, struct rpc_connect_dc_state);
     303
     304        c = tevent_req_callback_data(req, struct composite_context);
     305        s = talloc_get_type_abort(c->private_data, struct rpc_connect_dc_state);
    303306       
    304307        /* receive result of domain controller lookup */
    305         c->status = libnet_LookupDCs_recv(ctx, c, &s->f);
     308        c->status = libnet_LookupDCs_recv(req, c, &s->f);
    306309        if (!composite_is_ok(c)) return;
    307310
     
    455458
    456459static void continue_dci_rpc_connect(struct composite_context *ctx);
    457 static void continue_lsa_policy(struct rpc_request *req);
    458 static void continue_lsa_query_info(struct rpc_request *req);
    459 static void continue_lsa_query_info2(struct rpc_request *req);
     460static void continue_lsa_policy(struct tevent_req *subreq);
     461static void continue_lsa_query_info(struct tevent_req *subreq);
     462static void continue_lsa_query_info2(struct tevent_req *subreq);
    460463static void continue_epm_map_binding(struct composite_context *ctx);
    461464static void continue_secondary_conn(struct composite_context *ctx);
     
    529532        struct composite_context *c;
    530533        struct rpc_connect_dci_state *s;
    531         struct rpc_request *open_pol_req;
     534        struct tevent_req *subreq;
    532535
    533536        c = talloc_get_type(ctx->async.private_data, struct composite_context);
     
    574577        s->lsa_open_policy.out.handle     = &s->lsa_handle;
    575578
    576         open_pol_req = dcerpc_lsa_OpenPolicy2_send(s->lsa_pipe, c, &s->lsa_open_policy);
    577         if (composite_nomem(open_pol_req, c)) return;
    578 
    579         composite_continue_rpc(c, open_pol_req, continue_lsa_policy, c);
     579        subreq = dcerpc_lsa_OpenPolicy2_r_send(s, c->event_ctx,
     580                                               s->lsa_pipe->binding_handle,
     581                                               &s->lsa_open_policy);
     582        if (composite_nomem(subreq, c)) return;
     583
     584        tevent_req_set_callback(subreq, continue_lsa_policy, c);
    580585}
    581586
     
    585590  for kerberos realm (dns name) and guid. The query may fail.
    586591*/
    587 static void continue_lsa_policy(struct rpc_request *req)
     592static void continue_lsa_policy(struct tevent_req *subreq)
    588593{
    589594        struct composite_context *c;
    590595        struct rpc_connect_dci_state *s;
    591         struct rpc_request *query_info_req;
    592 
    593         c = talloc_get_type(req->async.private_data, struct composite_context);
     596
     597        c = tevent_req_callback_data(subreq, struct composite_context);
    594598        s = talloc_get_type(c->private_data, struct rpc_connect_dci_state);
    595599
    596         c->status = dcerpc_ndr_request_recv(req);
     600        c->status = dcerpc_lsa_OpenPolicy2_r_recv(subreq, s);
     601        TALLOC_FREE(subreq);
    597602        if (!NT_STATUS_IS_OK(c->status)) {
    598603                composite_error(c, c->status);
     
    631636        if (composite_nomem(s->lsa_query_info2.out.info, c)) return;
    632637
    633         query_info_req = dcerpc_lsa_QueryInfoPolicy2_send(s->lsa_pipe, c, &s->lsa_query_info2);
    634         if (composite_nomem(query_info_req, c)) return;
    635 
    636         composite_continue_rpc(c, query_info_req, continue_lsa_query_info2, c);
     638        subreq = dcerpc_lsa_QueryInfoPolicy2_r_send(s, c->event_ctx,
     639                                                    s->lsa_pipe->binding_handle,
     640                                                    &s->lsa_query_info2);
     641        if (composite_nomem(subreq, c)) return;
     642
     643        tevent_req_set_callback(subreq, continue_lsa_query_info2, c);
    637644}
    638645
     
    642649  may result in failure) and query lsa info for domain name and sid.
    643650*/
    644 static void continue_lsa_query_info2(struct rpc_request *req)
     651static void continue_lsa_query_info2(struct tevent_req *subreq)
    645652{       
    646653        struct composite_context *c;
    647654        struct rpc_connect_dci_state *s;
    648         struct rpc_request *query_info_req;
    649 
    650         c = talloc_get_type(req->async.private_data, struct composite_context);
     655
     656        c = tevent_req_callback_data(subreq, struct composite_context);
    651657        s = talloc_get_type(c->private_data, struct rpc_connect_dci_state);
    652658
    653         c->status = dcerpc_ndr_request_recv(req);
     659        c->status = dcerpc_lsa_QueryInfoPolicy2_r_recv(subreq, s);
     660        TALLOC_FREE(subreq);
    654661       
    655662        /* In case of error just null the realm and guid and proceed
     
    657664           controller we talking to - NT-style PDC also counts */
    658665
    659         if (NT_STATUS_EQUAL(c->status, NT_STATUS_NET_WRITE_FAULT)) {
     666        if (NT_STATUS_EQUAL(c->status, NT_STATUS_RPC_PROCNUM_OUT_OF_RANGE)) {
    660667                s->r.out.realm = NULL;
    661668                s->r.out.guid  = NULL;
     
    706713        if (composite_nomem(s->lsa_query_info.out.info, c)) return;
    707714
    708         query_info_req = dcerpc_lsa_QueryInfoPolicy_send(s->lsa_pipe, c, &s->lsa_query_info);
    709         if (composite_nomem(query_info_req, c)) return;
    710 
    711         composite_continue_rpc(c, query_info_req, continue_lsa_query_info, c);
     715        subreq = dcerpc_lsa_QueryInfoPolicy_r_send(s, c->event_ctx,
     716                                                   s->lsa_pipe->binding_handle,
     717                                                   &s->lsa_query_info);
     718        if (composite_nomem(subreq, c)) return;
     719
     720        tevent_req_set_callback(subreq, continue_lsa_query_info, c);
    712721}
    713722
     
    716725  Step 5 of RpcConnectDCInfo: Get domain name and sid
    717726*/
    718 static void continue_lsa_query_info(struct rpc_request *req)
     727static void continue_lsa_query_info(struct tevent_req *subreq)
    719728{
    720729        struct composite_context *c;
    721730        struct rpc_connect_dci_state *s;
    722731
    723         c = talloc_get_type(req->async.private_data, struct composite_context);
     732        c = tevent_req_callback_data(subreq, struct composite_context);
    724733        s = talloc_get_type(c->private_data, struct rpc_connect_dci_state);
    725734
    726         c->status = dcerpc_ndr_request_recv(req);
     735        c->status = dcerpc_lsa_QueryInfoPolicy_r_recv(subreq, s);
     736        TALLOC_FREE(subreq);
    727737        if (!NT_STATUS_IS_OK(c->status)) {
    728738                s->r.out.error_string = talloc_asprintf(c,
     
    763773
    764774        /* prepare to get endpoint mapping for the requested interface */
    765         s->final_binding = talloc(s, struct dcerpc_binding);
     775        s->final_binding = talloc_zero(s, struct dcerpc_binding);
    766776        if (composite_nomem(s->final_binding, c)) return;
    767777       
     
    885895                if (r->in.dcerpc_iface == &ndr_table_samr) {
    886896                        ctx->samr.pipe = talloc_reference(ctx, r->out.dcerpc_pipe);
     897                        ctx->samr.samr_handle = ctx->samr.pipe->binding_handle;
    887898
    888899                } else if (r->in.dcerpc_iface == &ndr_table_lsarpc) {
    889900                        ctx->lsa.pipe = talloc_reference(ctx, r->out.dcerpc_pipe);
     901                        ctx->lsa.lsa_handle = ctx->lsa.pipe->binding_handle;
    890902                }
    891903
Note: See TracChangeset for help on using the changeset viewer.