From f25219365803603cd93360285a0929043f9ce6a1 Mon Sep 17 00:00:00 2001 From: Ian Kent Date: Mar 20 2008 02:11:06 +0000 Subject: - add patch to initialize sasl callbacks unconditionally on autofs LDAP lookup library load. --- diff --git a/autofs-5.0.2-init-cb-on-load.patch b/autofs-5.0.2-init-cb-on-load.patch new file mode 100644 index 0000000..855b8a0 --- /dev/null +++ b/autofs-5.0.2-init-cb-on-load.patch @@ -0,0 +1,126 @@ +diff -up autofs-5.0.2/include/lookup_ldap.h.init-cb-on-load autofs-5.0.2/include/lookup_ldap.h +--- autofs-5.0.2/include/lookup_ldap.h.init-cb-on-load 2008-03-09 13:50:30.000000000 +0900 ++++ autofs-5.0.2/include/lookup_ldap.h 2008-03-09 13:52:52.000000000 +0900 +@@ -99,10 +99,12 @@ int unbind_ldap_connection(unsigned logo + int authtype_requires_creds(const char *authtype); + + /* cyrus-sasl.c */ ++int autofs_sasl_client_init(unsigned logopt); + int autofs_sasl_init(unsigned logopt, LDAP *ldap, struct lookup_context *ctxt); + int autofs_sasl_bind(unsigned logopt, LDAP *ldap, struct lookup_context *ctxt); + void autofs_sasl_unbind(struct lookup_context *ctxt); +-void autofs_sasl_done(struct lookup_context *ctxt); ++void autofs_sasl_dispose(struct lookup_context *ctxt); ++void autofs_sasl_done(void); + #endif + + #endif +diff -up autofs-5.0.2/modules/lookup_ldap.c.init-cb-on-load autofs-5.0.2/modules/lookup_ldap.c +--- autofs-5.0.2/modules/lookup_ldap.c.init-cb-on-load 2008-03-09 13:50:30.000000000 +0900 ++++ autofs-5.0.2/modules/lookup_ldap.c 2008-03-09 13:58:47.000000000 +0900 +@@ -599,7 +599,7 @@ static LDAP *connect_to_server(unsigned + + if (!do_bind(logopt, ldap, ctxt)) { + unbind_ldap_connection(logopt, ldap, ctxt); +- autofs_sasl_done(ctxt); ++ autofs_sasl_dispose(ctxt); + error(logopt, MODPREFIX "cannot bind to server"); + return NULL; + } +@@ -672,7 +672,7 @@ static LDAP *do_reconnect(unsigned logop + list_add_tail(&this->list, ctxt->uri); + + #ifdef WITH_SASL +- autofs_sasl_done(ctxt); ++ autofs_sasl_dispose(ctxt); + #endif + + /* Current server failed connect, try the rest */ +@@ -1330,6 +1330,13 @@ int lookup_init(const char *mapfmt, int + free_context(ctxt); + return 1; + } ++ ++ /* Init the sasl callbacks */ ++ if (!autofs_sasl_client_init(LOGOPT_NONE)) { ++ error(LOGOPT_ANY, "failed to init sasl client"); ++ free_context(ctxt); ++ return 1; ++ } + #endif + + if (ctxt->server || !ctxt->uri) { +@@ -2640,7 +2647,8 @@ int lookup_done(void *context) + struct lookup_context *ctxt = (struct lookup_context *) context; + int rv = close_parse(ctxt->parse); + #ifdef WITH_SASL +- autofs_sasl_done(ctxt); ++ autofs_sasl_dispose(ctxt); ++ autofs_sasl_done(); + #endif + free_context(ctxt); + return rv; +diff -up autofs-5.0.2/modules/cyrus-sasl.c.init-cb-on-load autofs-5.0.2/modules/cyrus-sasl.c +--- autofs-5.0.2/modules/cyrus-sasl.c.init-cb-on-load 2008-03-09 13:50:30.000000000 +0900 ++++ autofs-5.0.2/modules/cyrus-sasl.c 2008-03-09 13:56:59.000000000 +0900 +@@ -76,7 +76,6 @@ static const char *default_client = "aut + static pthread_mutex_t krb5cc_mutex = PTHREAD_MUTEX_INITIALIZER; + static unsigned int krb5cc_in_use = 0; + +-static unsigned int init_callbacks = 1; + static int sasl_log_func(void *, int, const char *); + static int getpass_func(sasl_conn_t *, void *, int, sasl_secret_t **); + static int getuser_func(void *, int, const char **, unsigned *); +@@ -878,13 +877,6 @@ autofs_sasl_init(unsigned logopt, LDAP * + { + sasl_conn_t *conn; + +- /* Start up Cyrus SASL--only needs to be done once. */ +- if (init_callbacks && sasl_client_init(callbacks) != SASL_OK) { +- error(logopt, "sasl_client_init failed"); +- return -1; +- } +- init_callbacks = 0; +- + sasl_auth_id = ctxt->user; + sasl_auth_secret = ctxt->secret; + +@@ -916,8 +908,7 @@ autofs_sasl_init(unsigned logopt, LDAP * + * Destructor routine. This should be called when finished with an ldap + * session. + */ +-void +-autofs_sasl_done(struct lookup_context *ctxt) ++void autofs_sasl_dispose(struct lookup_context *ctxt) + { + int status, ret; + +@@ -953,3 +944,28 @@ autofs_sasl_done(struct lookup_context * + ctxt->kinit_successful = 0; + } + } ++ ++/* ++ * Initialize the sasl callbacks, which increments the global ++ * use counter. ++ */ ++int autofs_sasl_client_init(unsigned logopt) ++{ ++ /* Start up Cyrus SASL--only needs to be done at library load. */ ++ if (sasl_client_init(callbacks) != SASL_OK) { ++ error(logopt, "sasl_client_init failed"); ++ return 0; ++ } ++ return 1; ++} ++ ++/* ++ * Decrement the library reference count and free resources if ++ * we are the last to close the library. ++ */ ++void autofs_sasl_done(void) ++{ ++ sasl_done(); ++ return; ++} ++ diff --git a/autofs.spec b/autofs.spec index e8ca836..b5ec4ef 100644 --- a/autofs.spec +++ b/autofs.spec @@ -4,7 +4,7 @@ Summary: A tool for automatically mounting and unmounting filesystems Name: autofs Version: 5.0.2 -Release: 27 +Release: 28 Epoch: 1 License: GPL Group: System Environment/Daemons @@ -80,6 +80,7 @@ Patch66: autofs-5.0.3-correct-ldap-lib.patch Patch67: autofs-5.0.3-dont-fail-on-empty-master-fix-2.patch Patch68: autofs-5.0.3-expire-works-too-hard.patch Patch69: autofs-5.0.3-unlink-mount-return-fix.patch +Patch70: autofs-5.0.2-init-cb-on-load.patch Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n) BuildRequires: autoconf, hesiod-devel, openldap-devel, bison, flex, libxml2-devel, cyrus-sasl-devel, openssl-devel module-init-tools util-linux nfs-utils e2fsprogs Conflicts: kernel < 2.6.17 @@ -191,6 +192,7 @@ echo %{version}-%{release} > .version %patch67 -p1 %patch68 -p1 %patch69 -p1 +%patch70 -p1 %build #CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir} @@ -243,6 +245,10 @@ fi %{_libdir}/autofs/ %changelog +* Thu Mar 20 2008 Ian Kent - 5.0.2-28 +- add patch to initialize sasl callbacks unconditionally on autofs + LDAP lookup library load. + * Thu Feb 14 2008 Ian Kent - 5.0.2-27 - re-order and update patches to sync with upstream. - located missing patch.