[SCM] Samba Shared Repository - branch master updated

Simo Sorce idra at samba.org
Sun Jan 31 11:50:39 MST 2010


The branch, master has been updated
       via  f77714c... s4:kdc streamline context initialization
      from  b116d4e... s4:kdc Streamline client access verification call

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


- Log -----------------------------------------------------------------
commit f77714c8874a5caaca74d8176259604bc8c32117
Author: Simo Sorce <idra at samba.org>
Date:   Sun Jan 31 13:28:04 2010 -0500

    s4:kdc streamline context initialization
    
    Allow other plugins to init the context without having it try to grab sockets
    or set samba specific logging.

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

Summary of changes:
 source4/auth/kerberos/krb5_init_context.c |   87 +++++++++++++++++------------
 source4/auth/kerberos/krb5_init_context.h |    8 ++-
 2 files changed, 58 insertions(+), 37 deletions(-)


Changeset truncated at 500 lines:

diff --git a/source4/auth/kerberos/krb5_init_context.c b/source4/auth/kerberos/krb5_init_context.c
index 7e75029..3bd938f 100644
--- a/source4/auth/kerberos/krb5_init_context.c
+++ b/source4/auth/kerberos/krb5_init_context.c
@@ -49,18 +49,12 @@ struct smb_krb5_socket {
 	krb5_krbhst_info *hi;
 };
 
-static krb5_error_code smb_krb5_context_destroy_1(struct smb_krb5_context *ctx)
-{
-	krb5_free_context(ctx->krb5_context);
-	return 0;
-}
-
-static krb5_error_code smb_krb5_context_destroy_2(struct smb_krb5_context *ctx)
+static krb5_error_code smb_krb5_context_destroy(struct smb_krb5_context *ctx)
 {
 	/* Otherwise krb5_free_context will try and close what we have already free()ed */
 	krb5_set_warn_dest(ctx->krb5_context, NULL);
 	krb5_closelog(ctx->krb5_context, ctx->logf);
-	smb_krb5_context_destroy_1(ctx);
+	krb5_free_context(ctx->krb5_context);
 	return 0;
 }
 
@@ -360,39 +354,29 @@ krb5_error_code smb_krb5_send_and_recv_func(krb5_context context,
 	return KRB5_KDC_UNREACH;
 }
 
-krb5_error_code smb_krb5_init_context(void *parent_ctx,
-				      struct tevent_context *ev,
-				      struct loadparm_context *lp_ctx,
-				       struct smb_krb5_context **smb_krb5_context)
+krb5_error_code
+smb_krb5_init_context_basic(TALLOC_CTX *tmp_ctx,
+			    struct tevent_context *ev,
+			    struct loadparm_context *lp_ctx,
+			    krb5_context *_krb5_context)
 {
 	krb5_error_code ret;
-	TALLOC_CTX *tmp_ctx;
 	char **config_files;
 	const char *config_file, *realm;
+	krb5_context krb5_ctx;
 
 	initialize_krb5_error_table();
 
-	tmp_ctx = talloc_new(parent_ctx);
-	*smb_krb5_context = talloc(tmp_ctx, struct smb_krb5_context);
-
-	if (!*smb_krb5_context || !tmp_ctx) {
-		talloc_free(tmp_ctx);
-		return ENOMEM;
-	}
-
-	ret = krb5_init_context(&(*smb_krb5_context)->krb5_context);
+	ret = krb5_init_context(&krb5_ctx);
 	if (ret) {
 		DEBUG(1,("krb5_init_context failed (%s)\n",
 			 error_message(ret)));
-		talloc_free(tmp_ctx);
 		return ret;
 	}
 
-	talloc_set_destructor(*smb_krb5_context, smb_krb5_context_destroy_1);
-
 	config_file = config_path(tmp_ctx, lp_ctx, "krb5.conf");
 	if (!config_file) {
-		talloc_free(tmp_ctx);
+		krb5_free_context(krb5_ctx);
 		return ENOMEM;
 	}
 
@@ -400,43 +384,74 @@ krb5_error_code smb_krb5_init_context(void *parent_ctx,
 	ret = krb5_prepend_config_files_default(config_file == NULL?"":config_file, &config_files);
 	if (ret) {
 		DEBUG(1,("krb5_prepend_config_files_default failed (%s)\n",
-			 smb_get_krb5_error_message((*smb_krb5_context)->krb5_context, ret, tmp_ctx)));
-		talloc_free(tmp_ctx);
+			 smb_get_krb5_error_message(krb5_ctx, ret, tmp_ctx)));
+		krb5_free_context(krb5_ctx);
 		return ret;
 	}
 
-	ret = krb5_set_config_files((*smb_krb5_context)->krb5_context,
-				    config_files);
+	ret = krb5_set_config_files(krb5_ctx, config_files);
 	krb5_free_config_files(config_files);
 	if (ret) {
 		DEBUG(1,("krb5_set_config_files failed (%s)\n",
-			 smb_get_krb5_error_message((*smb_krb5_context)->krb5_context, ret, tmp_ctx)));
-		talloc_free(tmp_ctx);
+			 smb_get_krb5_error_message(krb5_ctx, ret, tmp_ctx)));
+		krb5_free_context(krb5_ctx);
 		return ret;
 	}
 
 	realm = lp_realm(lp_ctx);
 	if (realm != NULL) {
-		ret = krb5_set_default_realm((*smb_krb5_context)->krb5_context, realm);
+		ret = krb5_set_default_realm(krb5_ctx, realm);
 		if (ret) {
 			DEBUG(1,("krb5_set_default_realm failed (%s)\n",
-				 smb_get_krb5_error_message((*smb_krb5_context)->krb5_context, ret, tmp_ctx)));
-			talloc_free(tmp_ctx);
+				 smb_get_krb5_error_message(krb5_ctx, ret, tmp_ctx)));
+			krb5_free_context(krb5_ctx);
 			return ret;
 		}
 	}
 
+	*_krb5_context = krb5_ctx;
+	return 0;
+}
+
+krb5_error_code smb_krb5_init_context(void *parent_ctx,
+				      struct tevent_context *ev,
+				      struct loadparm_context *lp_ctx,
+				       struct smb_krb5_context **smb_krb5_context)
+{
+	krb5_error_code ret;
+	TALLOC_CTX *tmp_ctx;
+
+	initialize_krb5_error_table();
+
+	tmp_ctx = talloc_new(parent_ctx);
+	*smb_krb5_context = talloc(tmp_ctx, struct smb_krb5_context);
+
+	if (!*smb_krb5_context || !tmp_ctx) {
+		talloc_free(tmp_ctx);
+		return ENOMEM;
+	}
+
+	ret = smb_krb5_init_context_basic(tmp_ctx, ev, lp_ctx,
+					  &(*smb_krb5_context)->krb5_context);
+	if (ret) {
+		DEBUG(1,("smb_krb5_context_init_basic failed (%s)\n",
+			 error_message(ret)));
+		talloc_free(tmp_ctx);
+		return ret;
+	}
+
 	/* TODO: Should we have a different name here? */
 	ret = krb5_initlog((*smb_krb5_context)->krb5_context, "Samba", &(*smb_krb5_context)->logf);
 
 	if (ret) {
 		DEBUG(1,("krb5_initlog failed (%s)\n",
 			 smb_get_krb5_error_message((*smb_krb5_context)->krb5_context, ret, tmp_ctx)));
+		krb5_free_context((*smb_krb5_context)->krb5_context);
 		talloc_free(tmp_ctx);
 		return ret;
 	}
 
-	talloc_set_destructor(*smb_krb5_context, smb_krb5_context_destroy_2);
+	talloc_set_destructor(*smb_krb5_context, smb_krb5_context_destroy);
 
 	ret = krb5_addlog_func((*smb_krb5_context)->krb5_context, (*smb_krb5_context)->logf, 0 /* min */, -1 /* max */,
 			       smb_krb5_debug_wrapper, smb_krb5_debug_close, NULL);
diff --git a/source4/auth/kerberos/krb5_init_context.h b/source4/auth/kerberos/krb5_init_context.h
index 3f1425e..f9e88ce 100644
--- a/source4/auth/kerberos/krb5_init_context.h
+++ b/source4/auth/kerberos/krb5_init_context.h
@@ -24,10 +24,16 @@ struct smb_krb5_context {
 	
 struct tevent_context;
 struct loadparm_context;
+
+krb5_error_code
+smb_krb5_init_context_basic(TALLOC_CTX *tmp_ctx,
+			    struct tevent_context *ev,
+			    struct loadparm_context *lp_ctx,
+			    krb5_context *_krb5_context);
+
 krb5_error_code smb_krb5_init_context(void *parent_ctx, struct tevent_context *ev,
 				      struct loadparm_context *lp_ctx,
 				      struct smb_krb5_context **smb_krb5_context); 
-void smb_krb5_free_context(struct smb_krb5_context *smb_krb5_context);
 
 krb5_error_code smb_krb5_send_and_recv_func(krb5_context context,
 					    void *data,


-- 
Samba Shared Repository


More information about the samba-cvs mailing list