[SCM] Samba Shared Repository - branch master updated

Stefan Metzmacher metze at samba.org
Mon Sep 27 22:55:01 MDT 2010


The branch, master has been updated
       via  491102c s4:gensec_tstream: remove plain socket handling
      from  ca360fb s4:lib/tls: add gnutls backend for tstream

http://gitweb.samba.org/?p=samba.git;a=shortlog;h=master


- Log -----------------------------------------------------------------
commit 491102c1ce842e14be8074a4abe6676b83efa5eb
Author: Stefan Metzmacher <metze at samba.org>
Date:   Tue Sep 28 04:50:32 2010 +0200

    s4:gensec_tstream: remove plain socket handling
    
    metze
    
    Autobuild-User: Stefan Metzmacher <metze at samba.org>
    Autobuild-Date: Tue Sep 28 04:54:24 UTC 2010 on sn-devel-104

-----------------------------------------------------------------------

Summary of changes:
 source4/auth/gensec/gensec_tstream.c |  136 +++-------------------------------
 1 files changed, 12 insertions(+), 124 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/auth/gensec/gensec_tstream.c b/source4/auth/gensec/gensec_tstream.c
index d2d4d5b..de3d4fe 100644
--- a/source4/auth/gensec/gensec_tstream.c
+++ b/source4/auth/gensec/gensec_tstream.c
@@ -36,8 +36,6 @@ struct tstream_gensec {
 
 	struct gensec_security *gensec_security;
 
-	bool wrap;
-
 	int error;
 
 	struct {
@@ -74,11 +72,10 @@ _PUBLIC_ NTSTATUS _gensec_create_tstream(TALLOC_CTX *mem_ctx,
 	tgss->gensec_security = gensec_security;
 	tgss->error = 0;
 
-	if (gensec_have_feature(gensec_security, GENSEC_FEATURE_SIGN) ||
-	    gensec_have_feature(gensec_security, GENSEC_FEATURE_SEAL)) {
-		tgss->wrap = true;
-	} else {
-		tgss->wrap = false;
+	if (!gensec_have_feature(gensec_security, GENSEC_FEATURE_SIGN) &&
+	    !gensec_have_feature(gensec_security, GENSEC_FEATURE_SEAL)) {
+		talloc_free(gensec_stream);
+		return NT_STATUS_INVALID_PARAMETER;
 	}
 
 	tgss->write.max_unwrapped_size = gensec_max_input_size(gensec_security);
@@ -95,29 +92,13 @@ static ssize_t tstream_gensec_pending_bytes(struct tstream_context *stream)
 	struct tstream_gensec *tgss =
 		tstream_context_data(stream,
 		struct tstream_gensec);
-	ssize_t ret;
-
-	if (!tgss->plain_stream) {
-		errno = ENOTCONN;
-		return -1;
-	}
 
 	if (tgss->error != 0) {
 		errno = tgss->error;
 		return -1;
 	}
 
-	if (tgss->wrap) {
-		return tgss->read.left;
-	}
-
-	ret = tstream_pending_bytes(tgss->plain_stream);
-	if (ret == -1) {
-		tgss->error = errno;
-		return -1;
-	}
-
-	return ret;
+	return tgss->read.left;
 }
 
 struct tstream_gensec_readv_state {
@@ -137,7 +118,6 @@ struct tstream_gensec_readv_state {
 	int ret;
 };
 
-static void tstream_gensec_readv_plain_done(struct tevent_req *subreq);
 static void tstream_gensec_readv_wrapped_next(struct tevent_req *req);
 
 static struct tevent_req *tstream_gensec_readv_send(TALLOC_CTX *mem_ctx,
@@ -151,8 +131,6 @@ static struct tevent_req *tstream_gensec_readv_send(TALLOC_CTX *mem_ctx,
 		struct tstream_gensec);
 	struct tevent_req *req;
 	struct tstream_gensec_readv_state *state;
-	struct tevent_req *subreq;
-	ssize_t ret;
 
 	req = tevent_req_create(mem_ctx, &state,
 				struct tstream_gensec_readv_state);
@@ -160,9 +138,8 @@ static struct tevent_req *tstream_gensec_readv_send(TALLOC_CTX *mem_ctx,
 		return NULL;
 	}
 
-	ret = tstream_gensec_pending_bytes(stream);
-	if (ret == -1) {
-		tevent_req_error(req, errno);
+	if (tgss->error != 0) {
+		tevent_req_error(req, tgss->error);
 		return tevent_req_post(req, ev);
 	}
 
@@ -170,22 +147,6 @@ static struct tevent_req *tstream_gensec_readv_send(TALLOC_CTX *mem_ctx,
 	state->stream = stream;
 	state->ret = 0;
 
-	if (!tgss->wrap) {
-		subreq = tstream_readv_send(state,
-					    ev,
-					    tgss->plain_stream,
-					    vector,
-					    count);
-		if (tevent_req_nomem(subreq,req)) {
-			return tevent_req_post(req, ev);
-		}
-		tevent_req_set_callback(subreq,
-					tstream_gensec_readv_plain_done,
-					req);
-
-		return req;
-	}
-
 	/*
 	 * we make a copy of the vector so we can change the structure
 	 */
@@ -204,33 +165,6 @@ static struct tevent_req *tstream_gensec_readv_send(TALLOC_CTX *mem_ctx,
 	return req;
 }
 
-static void tstream_gensec_readv_plain_done(struct tevent_req *subreq)
-{
-	struct tevent_req *req =
-		tevent_req_callback_data(subreq,
-		struct tevent_req);
-	struct tstream_gensec_readv_state *state =
-		tevent_req_data(req,
-		struct tstream_gensec_readv_state);
-	struct tstream_gensec *tgss =
-		tstream_context_data(state->stream,
-		struct tstream_gensec);
-	int ret;
-	int sys_errno;
-
-	ret = tstream_readv_recv(subreq, &sys_errno);
-	TALLOC_FREE(subreq);
-	if (ret == -1) {
-		tgss->error = sys_errno;
-		tevent_req_error(req, sys_errno);
-		return;
-	}
-
-	state->ret = ret;
-
-	tevent_req_done(req);
-}
-
 static int tstream_gensec_readv_next_vector(struct tstream_context *unix_stream,
 					    void *private_data,
 					    TALLOC_CTX *mem_ctx,
@@ -426,7 +360,6 @@ struct tstream_gensec_writev_state {
 	int ret;
 };
 
-static void tstream_gensec_writev_plain_done(struct tevent_req *subreq);
 static void tstream_gensec_writev_wrapped_next(struct tevent_req *req);
 
 static struct tevent_req *tstream_gensec_writev_send(TALLOC_CTX *mem_ctx,
@@ -440,8 +373,6 @@ static struct tevent_req *tstream_gensec_writev_send(TALLOC_CTX *mem_ctx,
 		struct tstream_gensec);
 	struct tevent_req *req;
 	struct tstream_gensec_writev_state *state;
-	struct tevent_req *subreq;
-	ssize_t ret;
 	int i;
 	int total;
 	int chunk;
@@ -452,9 +383,8 @@ static struct tevent_req *tstream_gensec_writev_send(TALLOC_CTX *mem_ctx,
 		return NULL;
 	}
 
-	ret = tstream_gensec_pending_bytes(stream);
-	if (ret == -1) {
-		tevent_req_error(req, errno);
+	if (tgss->error != 0) {
+		tevent_req_error(req, tgss->error);
 		return tevent_req_post(req, ev);
 	}
 
@@ -462,20 +392,6 @@ static struct tevent_req *tstream_gensec_writev_send(TALLOC_CTX *mem_ctx,
 	state->stream = stream;
 	state->ret = 0;
 
-	if (!tgss->wrap) {
-		subreq = tstream_writev_send(state,
-					     ev,
-					     tgss->plain_stream,
-					     vector,
-					     count);
-		if (tevent_req_nomem(subreq, req)) {
-			return tevent_req_post(req, ev);
-		}
-		tevent_req_set_callback(subreq, tstream_gensec_writev_plain_done, req);
-
-		return req;
-	}
-
 	/*
 	 * we make a copy of the vector so we can change the structure
 	 */
@@ -513,33 +429,6 @@ static struct tevent_req *tstream_gensec_writev_send(TALLOC_CTX *mem_ctx,
 	return req;
 }
 
-static void tstream_gensec_writev_plain_done(struct tevent_req *subreq)
-{
-	struct tevent_req *req =
-		tevent_req_callback_data(subreq,
-		struct tevent_req);
-	struct tstream_gensec_writev_state *state =
-		tevent_req_data(req,
-		struct tstream_gensec_writev_state);
-	struct tstream_gensec *tgss =
-		tstream_context_data(state->stream,
-		struct tstream_gensec);
-	int ret;
-	int sys_errno;
-
-	ret = tstream_writev_recv(subreq, &sys_errno);
-	TALLOC_FREE(subreq);
-	if (ret < 0) {
-		tgss->error = sys_errno;
-		tevent_req_error(req, sys_errno);
-		return;
-	}
-
-	state->ret = ret;
-
-	tevent_req_done(req);
-}
-
 static void tstream_gensec_writev_wrapped_done(struct tevent_req *subreq);
 
 static void tstream_gensec_writev_wrapped_next(struct tevent_req *req)
@@ -672,7 +561,6 @@ static struct tevent_req *tstream_gensec_disconnect_send(TALLOC_CTX *mem_ctx,
 		struct tstream_gensec);
 	struct tevent_req *req;
 	struct tstream_gensec_disconnect_state *state;
-	ssize_t ret;
 
 	req = tevent_req_create(mem_ctx, &state,
 				struct tstream_gensec_disconnect_state);
@@ -680,9 +568,8 @@ static struct tevent_req *tstream_gensec_disconnect_send(TALLOC_CTX *mem_ctx,
 		return NULL;
 	}
 
-	ret = tstream_gensec_pending_bytes(stream);
-	if (ret == -1) {
-		tevent_req_error(req, errno);
+	if (tgss->error != 0) {
+		tevent_req_error(req, tgss->error);
 		return tevent_req_post(req, ev);
 	}
 
@@ -691,6 +578,7 @@ static struct tevent_req *tstream_gensec_disconnect_send(TALLOC_CTX *mem_ctx,
 	 * on the plain stream!
 	 */
 	tgss->plain_stream = NULL;
+	tgss->error = ENOTCONN;
 
 	tevent_req_done(req);
 	return tevent_req_post(req, ev);


-- 
Samba Shared Repository


More information about the samba-cvs mailing list