svn commit: samba r11317 - in branches/SAMBA_4_0/source: heimdal/lib/gssapi smbd

abartlet at samba.org abartlet at samba.org
Thu Oct 27 05:33:49 GMT 2005


Author: abartlet
Date: 2005-10-27 05:33:49 +0000 (Thu, 27 Oct 2005)
New Revision: 11317

WebSVN: http://websvn.samba.org/cgi-bin/viewcvs.cgi?view=rev&root=samba&rev=11317

Log:
An ugly hack to setup the global gssapi_krb5_context early, when we
have easy access to the event context.

This stops Samba dead-locking against itself when the winbindd client
tries to contact the KDC.

Andrew Bartlett

Modified:
   branches/SAMBA_4_0/source/heimdal/lib/gssapi/gssapi_locl.h
   branches/SAMBA_4_0/source/heimdal/lib/gssapi/init.c
   branches/SAMBA_4_0/source/smbd/server.c


Changeset:
Modified: branches/SAMBA_4_0/source/heimdal/lib/gssapi/gssapi_locl.h
===================================================================
--- branches/SAMBA_4_0/source/heimdal/lib/gssapi/gssapi_locl.h	2005-10-27 05:31:20 UTC (rev 11316)
+++ branches/SAMBA_4_0/source/heimdal/lib/gssapi/gssapi_locl.h	2005-10-27 05:33:49 UTC (rev 11317)
@@ -108,6 +108,7 @@
  */
 
 krb5_error_code gssapi_krb5_init (void);
+krb5_error_code gssapi_krb5_init_ev (void *event_context);
 
 #define GSSAPI_KRB5_INIT() do {					\
     krb5_error_code kret_gss_init;				\

Modified: branches/SAMBA_4_0/source/heimdal/lib/gssapi/init.c
===================================================================
--- branches/SAMBA_4_0/source/heimdal/lib/gssapi/init.c	2005-10-27 05:31:20 UTC (rev 11316)
+++ branches/SAMBA_4_0/source/heimdal/lib/gssapi/init.c	2005-10-27 05:33:49 UTC (rev 11317)
@@ -89,17 +89,19 @@
     return NULL;
 }
 
-krb5_error_code
-gssapi_krb5_init (void)
+#ifdef _SAMBA_BUILD_
+/* Init krb5 with an event context.  Disgusting Samba-specific hack */
+
+krb5_error_code 
+gssapi_krb5_init_ev (void *event_context)
 {
+    static struct smb_krb5_context *smb_krb5_context;
     krb5_error_code ret = 0;
-#ifdef _SAMBA_BUILD_
-    static struct smb_krb5_context *smb_krb5_context;
 
     HEIMDAL_MUTEX_lock(&gssapi_krb5_context_mutex);
 
     if(smb_krb5_context == NULL) {
-	ret = smb_krb5_init_context(NULL, &smb_krb5_context);
+	ret = smb_krb5_init_context(event_context, &smb_krb5_context);
     }
     if (ret == 0 && !created_key) {
 	HEIMDAL_key_create(&gssapi_context_key, 
@@ -116,6 +118,16 @@
     }
 
     HEIMDAL_MUTEX_unlock(&gssapi_krb5_context_mutex);
+    return ret;
+}
+#endif
+
+krb5_error_code
+gssapi_krb5_init (void)
+{
+    krb5_error_code ret = 0;
+#ifdef _SAMBA_BUILD_
+    ret = gssapi_krb5_init_ev(NULL);
 #else 
     HEIMDAL_MUTEX_lock(&gssapi_krb5_context_mutex);
 

Modified: branches/SAMBA_4_0/source/smbd/server.c
===================================================================
--- branches/SAMBA_4_0/source/smbd/server.c	2005-10-27 05:31:20 UTC (rev 11316)
+++ branches/SAMBA_4_0/source/smbd/server.c	2005-10-27 05:33:49 UTC (rev 11317)
@@ -29,7 +29,10 @@
 #include "lib/cmdline/popt_common.h"
 #include "system/dir.h"
 #include "system/filesys.h"
+#include "system/kerberos.h"
 
+/* For sepecifiying event context to GSSAPI below */
+#include "heimdal/lib/gssapi/gssapi_locl.h"
 
 /*
   recursively delete a directory tree
@@ -236,6 +239,9 @@
 		return 1;
 	}
 
+	/* Hack to ensure that GSSAPI uses the right event context */
+	gssapi_krb5_init_ev(event_ctx);
+
 	/* wait for events - this is where smbd sits for most of its
 	   life */
 	event_loop_wait(event_ctx);



More information about the samba-cvs mailing list