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