Changeset 745 for trunk/server/source4/libnet/libnet_lookup.c
- Timestamp:
- Nov 27, 2012, 4:43:17 PM (13 years ago)
- Location:
- trunk/server
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/server
- Property svn:mergeinfo changed
/vendor/current merged: 581,587,591,594,597,600,615,618,740
- Property svn:mergeinfo changed
-
trunk/server/source4/libnet/libnet_lookup.c
r414 r745 23 23 24 24 #include "includes.h" 25 #include "lib/events/events.h"26 25 #include "libnet/libnet.h" 27 26 #include "libcli/composite/composite.h" 28 27 #include "auth/credentials/credentials.h" 29 #include "lib/messaging/messaging.h"30 #include "lib/messaging/irpc.h"31 28 #include "libcli/resolve/resolve.h" 32 #include "libcli/finddc s.h"29 #include "libcli/finddc.h" 33 30 #include "libcli/security/security.h" 34 #include "librpc/gen_ndr/lsa.h"35 31 #include "librpc/gen_ndr/ndr_lsa_c.h" 36 37 32 #include "param/param.h" 38 33 … … 187 182 * Sends asynchronous LookupDCs request 188 183 */ 189 struct composite_context* libnet_LookupDCs_send(struct libnet_context *ctx, 190 TALLOC_CTX *mem_ctx, 191 struct libnet_LookupDCs *io) 192 { 193 struct composite_context *c; 194 struct messaging_context *msg_ctx = 195 messaging_client_init(mem_ctx, lp_messaging_path(mem_ctx, ctx->lp_ctx), 196 lp_iconv_convenience(ctx->lp_ctx), ctx->event_ctx); 197 198 c = finddcs_send(mem_ctx, lp_netbios_name(ctx->lp_ctx), lp_nbt_port(ctx->lp_ctx), 199 io->in.domain_name, io->in.name_type, 200 NULL, lp_iconv_convenience(ctx->lp_ctx), 201 ctx->resolve_ctx, ctx->event_ctx, msg_ctx); 202 return c; 184 struct tevent_req *libnet_LookupDCs_send(struct libnet_context *ctx, 185 TALLOC_CTX *mem_ctx, 186 struct libnet_LookupDCs *io) 187 { 188 struct tevent_req *req; 189 struct finddcs finddcs_io; 190 191 ZERO_STRUCT(finddcs_io); 192 193 if (strcasecmp_m(io->in.domain_name, lpcfg_workgroup(ctx->lp_ctx)) == 0) { 194 finddcs_io.in.domain_name = lpcfg_dnsdomain(ctx->lp_ctx); 195 } else { 196 finddcs_io.in.domain_name = io->in.domain_name; 197 } 198 finddcs_io.in.minimum_dc_flags = NBT_SERVER_LDAP | NBT_SERVER_DS | NBT_SERVER_WRITABLE; 199 finddcs_io.in.server_address = ctx->server_address; 200 201 req = finddcs_cldap_send(mem_ctx, &finddcs_io, ctx->resolve_ctx, ctx->event_ctx); 202 return req; 203 203 } 204 204 … … 212 212 */ 213 213 214 NTSTATUS libnet_LookupDCs_recv(struct composite_context *c, TALLOC_CTX *mem_ctx,214 NTSTATUS libnet_LookupDCs_recv(struct tevent_req *req, TALLOC_CTX *mem_ctx, 215 215 struct libnet_LookupDCs *io) 216 216 { 217 217 NTSTATUS status; 218 status = finddcs_recv(c, mem_ctx, &io->out.num_dcs, &io->out.dcs); 219 if (!NT_STATUS_IS_OK(status)) { 220 return status; 221 } 218 struct finddcs finddcs_io; 219 status = finddcs_cldap_recv(req, mem_ctx, &finddcs_io); 220 talloc_free(req); 221 io->out.num_dcs = 1; 222 io->out.dcs = talloc(mem_ctx, struct nbt_dc_name); 223 NT_STATUS_HAVE_NO_MEMORY(io->out.dcs); 224 io->out.dcs[0].address = finddcs_io.out.address; 225 io->out.dcs[0].name = finddcs_io.out.netlogon.data.nt5_ex.pdc_dns_name; 222 226 return status; 223 227 } … … 230 234 struct libnet_LookupDCs *io) 231 235 { 232 struct composite_context *c= libnet_LookupDCs_send(ctx, mem_ctx, io);233 return libnet_LookupDCs_recv( c, mem_ctx, io);236 struct tevent_req *req = libnet_LookupDCs_send(ctx, mem_ctx, io); 237 return libnet_LookupDCs_recv(req, mem_ctx, io); 234 238 } 235 239 … … 253 257 struct lookup_name_state *s); 254 258 static void continue_lookup_name(struct composite_context *ctx); 255 static void continue_name_found(struct rpc_request *req);259 static void continue_name_found(struct tevent_req *subreq); 256 260 257 261 … … 263 267 struct composite_context *c; 264 268 struct lookup_name_state *s; 265 struct rpc_request *lookup_req;269 struct tevent_req *subreq; 266 270 bool prereq_met = false; 267 271 … … 284 288 if (!prepare_lookup_params(ctx, c, s)) return c; 285 289 286 lookup_req = dcerpc_lsa_LookupNames_send(ctx->lsa.pipe, c, &s->lookup); 287 if (composite_nomem(lookup_req, c)) return c; 288 289 composite_continue_rpc(c, lookup_req, continue_name_found, c); 290 subreq = dcerpc_lsa_LookupNames_r_send(s, c->event_ctx, 291 ctx->lsa.pipe->binding_handle, 292 &s->lookup); 293 if (composite_nomem(subreq, c)) return c; 294 295 tevent_req_set_callback(subreq, continue_name_found, c); 290 296 return c; 291 297 } … … 324 330 struct composite_context *c; 325 331 struct lookup_name_state *s; 326 struct rpc_request *lookup_req;332 struct tevent_req *subreq; 327 333 328 334 c = talloc_get_type(ctx->async.private_data, struct composite_context); … … 334 340 if (!prepare_lookup_params(s->ctx, c, s)) return; 335 341 336 lookup_req = dcerpc_lsa_LookupNames_send(s->ctx->lsa.pipe, c, &s->lookup); 337 if (composite_nomem(lookup_req, c)) return; 338 339 composite_continue_rpc(c, lookup_req, continue_name_found, c); 340 } 341 342 343 static void continue_name_found(struct rpc_request *req) 342 subreq = dcerpc_lsa_LookupNames_r_send(s, c->event_ctx, 343 s->ctx->lsa.pipe->binding_handle, 344 &s->lookup); 345 if (composite_nomem(subreq, c)) return; 346 347 tevent_req_set_callback(subreq, continue_name_found, c); 348 } 349 350 351 static void continue_name_found(struct tevent_req *subreq) 344 352 { 345 353 struct composite_context *c; 346 354 struct lookup_name_state *s; 347 355 348 c = t alloc_get_type(req->async.private_data, struct composite_context);356 c = tevent_req_callback_data(subreq, struct composite_context); 349 357 s = talloc_get_type(c->private_data, struct lookup_name_state); 350 358 351 c->status = dcerpc_ndr_request_recv(req); 359 c->status = dcerpc_lsa_LookupNames_r_recv(subreq, s); 360 TALLOC_FREE(subreq); 352 361 if (!composite_is_ok(c)) return; 353 362
Note:
See TracChangeset
for help on using the changeset viewer.