diff options
Diffstat (limited to 'source3')
-rw-r--r-- | source3/Makefile.in | 2 | ||||
-rw-r--r-- | source3/lib/tldap.c | 28 |
2 files changed, 18 insertions, 12 deletions
diff --git a/source3/Makefile.in b/source3/Makefile.in index ddc344dccd..ebb3b2945e 100644 --- a/source3/Makefile.in +++ b/source3/Makefile.in @@ -859,7 +859,7 @@ SMBPASSWD_OBJ = utils/smbpasswd.o $(PASSWD_UTIL_OBJ) $(PASSCHANGE_OBJ) \ $(LIBMSRPC_GEN_OBJ) $(LIBMSRPC_OBJ) $(LDB_OBJ) PDBEDIT_OBJ = utils/pdbedit.o $(PASSWD_UTIL_OBJ) $(PARAM_OBJ) $(PASSDB_OBJ) \ - $(LIBSAMBA_OBJ) \ + $(LIBSAMBA_OBJ) $(LIBTSOCKET_OBJ) \ $(LIB_NONSMBD_OBJ) $(GROUPDB_OBJ) \ $(POPT_LIB_OBJ) $(SMBLDAP_OBJ) ../lib/util/asn1.o \ $(LDB_OBJ) diff --git a/source3/lib/tldap.c b/source3/lib/tldap.c index 0f9e67869c..8f6e3a246e 100644 --- a/source3/lib/tldap.c +++ b/source3/lib/tldap.c @@ -54,7 +54,7 @@ struct tldap_context { int ld_deref; int ld_sizelimit; int ld_timelimit; - int fd; + struct tstream_context *conn; int msgid; struct tevent_queue *outgoing; struct tevent_req **pending; @@ -132,12 +132,17 @@ static int tldap_next_msgid(struct tldap_context *ld) struct tldap_context *tldap_context_create(TALLOC_CTX *mem_ctx, int fd) { struct tldap_context *ctx; + int ret; ctx = talloc_zero(mem_ctx, struct tldap_context); if (ctx == NULL) { return NULL; } - ctx->fd = fd; + ret = tstream_bsd_existing_socket(ctx, fd, &ctx->conn); + if (ret == -1) { + TALLOC_FREE(ctx); + return NULL; + } ctx->msgid = 1; ctx->ld_version = 3; ctx->outgoing = tevent_queue_create(ctx, "tldap_outgoing"); @@ -274,7 +279,7 @@ static void read_ldap_done(struct tevent_req *subreq); static struct tevent_req *read_ldap_send(TALLOC_CTX *mem_ctx, struct tevent_context *ev, - int fd) + struct tstream_context *conn) { struct tevent_req *req, *subreq; struct read_ldap_state *state; @@ -285,7 +290,8 @@ static struct tevent_req *read_ldap_send(TALLOC_CTX *mem_ctx, } state->done = false; - subreq = read_packet_send(state, ev, fd, 2, read_ldap_more, state); + subreq = tstream_read_packet_send(state, ev, conn, 2, read_ldap_more, + state); if (tevent_req_nomem(subreq, req)) { return tevent_req_post(req, ev); } @@ -302,7 +308,7 @@ static void read_ldap_done(struct tevent_req *subreq) ssize_t nread; int err; - nread = read_packet_recv(subreq, state, &state->buf, &err); + nread = tstream_read_packet_recv(subreq, state, &state->buf, &err); TALLOC_FREE(subreq); if (nread == -1) { tevent_req_error(req, err); @@ -400,8 +406,8 @@ static struct tevent_req *tldap_msg_send(TALLOC_CTX *mem_ctx, state->iov.iov_base = blob.data; state->iov.iov_len = blob.length; - subreq = writev_send(state, ev, ld->outgoing, ld->fd, false, - &state->iov, 1); + subreq = tstream_writev_queue_send(state, ev, ld->conn, ld->outgoing, + &state->iov, 1); if (tevent_req_nomem(subreq, req)) { return tevent_req_post(req, ev); } @@ -487,7 +493,7 @@ static bool tldap_msg_set_pending(struct tevent_req *req) * We're the first ones, add the read_ldap request that waits for the * answer from the server */ - subreq = read_ldap_send(ld->pending, state->ev, ld->fd); + subreq = read_ldap_send(ld->pending, state->ev, ld->conn); if (subreq == NULL) { tldap_msg_unset_pending(req); return false; @@ -503,7 +509,7 @@ static void tldap_msg_sent(struct tevent_req *subreq) ssize_t nwritten; int err; - nwritten = writev_recv(subreq, &err); + nwritten = tstream_writev_queue_recv(subreq, &err); TALLOC_FREE(subreq); if (nwritten == -1) { tevent_req_error(req, TLDAP_SERVER_DOWN); @@ -610,8 +616,8 @@ static void tldap_msg_received(struct tevent_req *subreq) return; } - state = tevent_req_data(ld->pending[0], struct tldap_msg_state); - subreq = read_ldap_send(ld->pending, state->ev, ld->fd); + state = tevent_req_data(ld->pending[0], struct tldap_msg_state); + subreq = read_ldap_send(ld->pending, state->ev, ld->conn); if (subreq == NULL) { status = TLDAP_NO_MEMORY; goto fail; |