|
Ian Kent |
beeac8 |
diff -up autofs-5.0.2/include/lookup_ldap.h.init-cb-on-load autofs-5.0.2/include/lookup_ldap.h
|
|
Ian Kent |
beeac8 |
--- autofs-5.0.2/include/lookup_ldap.h.init-cb-on-load 2008-03-09 13:50:30.000000000 +0900
|
|
Ian Kent |
beeac8 |
+++ autofs-5.0.2/include/lookup_ldap.h 2008-03-09 13:52:52.000000000 +0900
|
|
Ian Kent |
beeac8 |
@@ -99,10 +99,12 @@ int unbind_ldap_connection(unsigned logo
|
|
Ian Kent |
beeac8 |
int authtype_requires_creds(const char *authtype);
|
|
Ian Kent |
beeac8 |
|
|
Ian Kent |
beeac8 |
/* cyrus-sasl.c */
|
|
Ian Kent |
beeac8 |
+int autofs_sasl_client_init(unsigned logopt);
|
|
Ian Kent |
beeac8 |
int autofs_sasl_init(unsigned logopt, LDAP *ldap, struct lookup_context *ctxt);
|
|
Ian Kent |
beeac8 |
int autofs_sasl_bind(unsigned logopt, LDAP *ldap, struct lookup_context *ctxt);
|
|
Ian Kent |
beeac8 |
void autofs_sasl_unbind(struct lookup_context *ctxt);
|
|
Ian Kent |
beeac8 |
-void autofs_sasl_done(struct lookup_context *ctxt);
|
|
Ian Kent |
beeac8 |
+void autofs_sasl_dispose(struct lookup_context *ctxt);
|
|
Ian Kent |
beeac8 |
+void autofs_sasl_done(void);
|
|
Ian Kent |
beeac8 |
#endif
|
|
Ian Kent |
beeac8 |
|
|
Ian Kent |
beeac8 |
#endif
|
|
Ian Kent |
beeac8 |
diff -up autofs-5.0.2/modules/lookup_ldap.c.init-cb-on-load autofs-5.0.2/modules/lookup_ldap.c
|
|
Ian Kent |
beeac8 |
--- autofs-5.0.2/modules/lookup_ldap.c.init-cb-on-load 2008-03-09 13:50:30.000000000 +0900
|
|
Ian Kent |
beeac8 |
+++ autofs-5.0.2/modules/lookup_ldap.c 2008-03-09 13:58:47.000000000 +0900
|
|
Ian Kent |
beeac8 |
@@ -599,7 +599,7 @@ static LDAP *connect_to_server(unsigned
|
|
Ian Kent |
beeac8 |
|
|
Ian Kent |
beeac8 |
if (!do_bind(logopt, ldap, ctxt)) {
|
|
Ian Kent |
beeac8 |
unbind_ldap_connection(logopt, ldap, ctxt);
|
|
Ian Kent |
beeac8 |
- autofs_sasl_done(ctxt);
|
|
Ian Kent |
beeac8 |
+ autofs_sasl_dispose(ctxt);
|
|
Ian Kent |
beeac8 |
error(logopt, MODPREFIX "cannot bind to server");
|
|
Ian Kent |
beeac8 |
return NULL;
|
|
Ian Kent |
beeac8 |
}
|
|
Ian Kent |
beeac8 |
@@ -672,7 +672,7 @@ static LDAP *do_reconnect(unsigned logop
|
|
Ian Kent |
beeac8 |
list_add_tail(&this->list, ctxt->uri);
|
|
Ian Kent |
beeac8 |
|
|
Ian Kent |
beeac8 |
#ifdef WITH_SASL
|
|
Ian Kent |
beeac8 |
- autofs_sasl_done(ctxt);
|
|
Ian Kent |
beeac8 |
+ autofs_sasl_dispose(ctxt);
|
|
Ian Kent |
beeac8 |
#endif
|
|
Ian Kent |
beeac8 |
|
|
Ian Kent |
beeac8 |
/* Current server failed connect, try the rest */
|
|
Ian Kent |
beeac8 |
@@ -1330,6 +1330,13 @@ int lookup_init(const char *mapfmt, int
|
|
Ian Kent |
beeac8 |
free_context(ctxt);
|
|
Ian Kent |
beeac8 |
return 1;
|
|
Ian Kent |
beeac8 |
}
|
|
Ian Kent |
beeac8 |
+
|
|
Ian Kent |
beeac8 |
+ /* Init the sasl callbacks */
|
|
Ian Kent |
beeac8 |
+ if (!autofs_sasl_client_init(LOGOPT_NONE)) {
|
|
Ian Kent |
beeac8 |
+ error(LOGOPT_ANY, "failed to init sasl client");
|
|
Ian Kent |
beeac8 |
+ free_context(ctxt);
|
|
Ian Kent |
beeac8 |
+ return 1;
|
|
Ian Kent |
beeac8 |
+ }
|
|
Ian Kent |
beeac8 |
#endif
|
|
Ian Kent |
beeac8 |
|
|
Ian Kent |
beeac8 |
if (ctxt->server || !ctxt->uri) {
|
|
Ian Kent |
beeac8 |
@@ -2640,7 +2647,8 @@ int lookup_done(void *context)
|
|
Ian Kent |
beeac8 |
struct lookup_context *ctxt = (struct lookup_context *) context;
|
|
Ian Kent |
beeac8 |
int rv = close_parse(ctxt->parse);
|
|
Ian Kent |
beeac8 |
#ifdef WITH_SASL
|
|
Ian Kent |
beeac8 |
- autofs_sasl_done(ctxt);
|
|
Ian Kent |
beeac8 |
+ autofs_sasl_dispose(ctxt);
|
|
Ian Kent |
beeac8 |
+ autofs_sasl_done();
|
|
Ian Kent |
beeac8 |
#endif
|
|
Ian Kent |
beeac8 |
free_context(ctxt);
|
|
Ian Kent |
beeac8 |
return rv;
|
|
Ian Kent |
beeac8 |
diff -up autofs-5.0.2/modules/cyrus-sasl.c.init-cb-on-load autofs-5.0.2/modules/cyrus-sasl.c
|
|
Ian Kent |
beeac8 |
--- autofs-5.0.2/modules/cyrus-sasl.c.init-cb-on-load 2008-03-09 13:50:30.000000000 +0900
|
|
Ian Kent |
beeac8 |
+++ autofs-5.0.2/modules/cyrus-sasl.c 2008-03-09 13:56:59.000000000 +0900
|
|
Ian Kent |
beeac8 |
@@ -76,7 +76,6 @@ static const char *default_client = "aut
|
|
Ian Kent |
beeac8 |
static pthread_mutex_t krb5cc_mutex = PTHREAD_MUTEX_INITIALIZER;
|
|
Ian Kent |
beeac8 |
static unsigned int krb5cc_in_use = 0;
|
|
Ian Kent |
beeac8 |
|
|
Ian Kent |
beeac8 |
-static unsigned int init_callbacks = 1;
|
|
Ian Kent |
beeac8 |
static int sasl_log_func(void *, int, const char *);
|
|
Ian Kent |
beeac8 |
static int getpass_func(sasl_conn_t *, void *, int, sasl_secret_t **);
|
|
Ian Kent |
beeac8 |
static int getuser_func(void *, int, const char **, unsigned *);
|
|
Ian Kent |
beeac8 |
@@ -878,13 +877,6 @@ autofs_sasl_init(unsigned logopt, LDAP *
|
|
Ian Kent |
beeac8 |
{
|
|
Ian Kent |
beeac8 |
sasl_conn_t *conn;
|
|
Ian Kent |
beeac8 |
|
|
Ian Kent |
beeac8 |
- /* Start up Cyrus SASL--only needs to be done once. */
|
|
Ian Kent |
beeac8 |
- if (init_callbacks && sasl_client_init(callbacks) != SASL_OK) {
|
|
Ian Kent |
beeac8 |
- error(logopt, "sasl_client_init failed");
|
|
Ian Kent |
beeac8 |
- return -1;
|
|
Ian Kent |
beeac8 |
- }
|
|
Ian Kent |
beeac8 |
- init_callbacks = 0;
|
|
Ian Kent |
beeac8 |
-
|
|
Ian Kent |
beeac8 |
sasl_auth_id = ctxt->user;
|
|
Ian Kent |
beeac8 |
sasl_auth_secret = ctxt->secret;
|
|
Ian Kent |
beeac8 |
|
|
Ian Kent |
beeac8 |
@@ -916,8 +908,7 @@ autofs_sasl_init(unsigned logopt, LDAP *
|
|
Ian Kent |
beeac8 |
* Destructor routine. This should be called when finished with an ldap
|
|
Ian Kent |
beeac8 |
* session.
|
|
Ian Kent |
beeac8 |
*/
|
|
Ian Kent |
beeac8 |
-void
|
|
Ian Kent |
beeac8 |
-autofs_sasl_done(struct lookup_context *ctxt)
|
|
Ian Kent |
beeac8 |
+void autofs_sasl_dispose(struct lookup_context *ctxt)
|
|
Ian Kent |
beeac8 |
{
|
|
Ian Kent |
beeac8 |
int status, ret;
|
|
Ian Kent |
beeac8 |
|
|
Ian Kent |
beeac8 |
@@ -953,3 +944,28 @@ autofs_sasl_done(struct lookup_context *
|
|
Ian Kent |
beeac8 |
ctxt->kinit_successful = 0;
|
|
Ian Kent |
beeac8 |
}
|
|
Ian Kent |
beeac8 |
}
|
|
Ian Kent |
beeac8 |
+
|
|
Ian Kent |
beeac8 |
+/*
|
|
Ian Kent |
beeac8 |
+ * Initialize the sasl callbacks, which increments the global
|
|
Ian Kent |
beeac8 |
+ * use counter.
|
|
Ian Kent |
beeac8 |
+ */
|
|
Ian Kent |
beeac8 |
+int autofs_sasl_client_init(unsigned logopt)
|
|
Ian Kent |
beeac8 |
+{
|
|
Ian Kent |
beeac8 |
+ /* Start up Cyrus SASL--only needs to be done at library load. */
|
|
Ian Kent |
beeac8 |
+ if (sasl_client_init(callbacks) != SASL_OK) {
|
|
Ian Kent |
beeac8 |
+ error(logopt, "sasl_client_init failed");
|
|
Ian Kent |
beeac8 |
+ return 0;
|
|
Ian Kent |
beeac8 |
+ }
|
|
Ian Kent |
beeac8 |
+ return 1;
|
|
Ian Kent |
beeac8 |
+}
|
|
Ian Kent |
beeac8 |
+
|
|
Ian Kent |
beeac8 |
+/*
|
|
Ian Kent |
beeac8 |
+ * Decrement the library reference count and free resources if
|
|
Ian Kent |
beeac8 |
+ * we are the last to close the library.
|
|
Ian Kent |
beeac8 |
+ */
|
|
Ian Kent |
beeac8 |
+void autofs_sasl_done(void)
|
|
Ian Kent |
beeac8 |
+{
|
|
Ian Kent |
beeac8 |
+ sasl_done();
|
|
Ian Kent |
beeac8 |
+ return;
|
|
Ian Kent |
beeac8 |
+}
|
|
Ian Kent |
beeac8 |
+
|