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);
