[autofs/origin/f14/master] * Tue Aug 17 2010 Ian Kent <ikent at redhat.com> - 1:5.0.5-29 - remove extra read master map call. - re
Ian Kent
iankent at fedoraproject.org
Tue Aug 17 02:13:56 UTC 2010
commit e6b420cf564163c0b4f5c6dcf75afceeac48ef53
Author: Ian Kent <raven at themaw.net>
Date: Tue Aug 17 09:40:31 2010 +0800
* Tue Aug 17 2010 Ian Kent <ikent at redhat.com> - 1:5.0.5-29
- remove extra read master map call.
- remove extra cache create call in master_add_map_source().
- fix error handing in do_mount_indirect().
- expire thread use pending mutex.
- explicity link against the Kerberos library.
- remove some log message duplication for verbose logging.
- remove ERR_remove_state() openssl call.
autofs-5.0.5-expire-thread-use-pending-mutex.patch | 486 ++++++++++++++++++++
....5-fix-error-handing-in-do_mount_indirect.patch | 43 ++
....0.5-fix-fix-cache_init-on-source-re-read.patch | 28 ++
autofs-5.0.5-include-krb5-library.patch | 204 ++++++++
...5-make-verbose-mode-a-little-less-verbose.patch | 94 ++++
....0.5-remove-ERR_remove_state-openssl-call.patch | 44 ++
...s-5.0.5-remove-extra-read-master-map-call.patch | 33 ++
autofs.spec | 25 +-
8 files changed, 956 insertions(+), 1 deletions(-)
---
diff --git a/autofs-5.0.5-expire-thread-use-pending-mutex.patch b/autofs-5.0.5-expire-thread-use-pending-mutex.patch
new file mode 100644
index 0000000..13e6753
--- /dev/null
+++ b/autofs-5.0.5-expire-thread-use-pending-mutex.patch
@@ -0,0 +1,486 @@
+autofs-5.0.5 - expire thread use pending mutex
+
+From: Ian Kent <raven at themaw.net>
+
+Some time ago the mount request thread creation was changed to
+use its own mutex for its condition handling due to execution
+order problems under heavy mount request pressure. When there
+are a large number of master map entries we see the same problem
+with expire thread creation. This patch changes the expire thread
+creation to use the same approach as the mount thread creation.
+---
+
+ CHANGELOG | 1
+ daemon/direct.c | 76 +++++++++++-----------------------------------------
+ daemon/indirect.c | 76 +++++++++++-----------------------------------------
+ include/automount.h | 41 ++++++++++++++++++++++++++++
+ 4 files changed, 76 insertions(+), 118 deletions(-)
+
+
+--- autofs-5.0.5.orig/CHANGELOG
++++ autofs-5.0.5/CHANGELOG
+@@ -45,6 +45,7 @@
+ - remove state machine timed wait.
+ - remove extra read master map call.
+ - fix error handing in do_mount_indirect().
++- expire thread use pending mutex.
+
+ 03/09/2009 autofs-5.0.5
+ -----------------------
+--- autofs-5.0.5.orig/daemon/direct.c
++++ autofs-5.0.5/daemon/direct.c
+@@ -35,6 +35,7 @@
+ #include <sys/vfs.h>
+ #include <sched.h>
+
++#define INCLUDE_PENDING_FUNCTIONS
+ #include "automount.h"
+
+ /* Attribute to create detached thread */
+@@ -48,8 +49,6 @@ pthread_key_t key_mnt_direct_params;
+ pthread_key_t key_mnt_offset_params;
+ pthread_once_t key_mnt_params_once = PTHREAD_ONCE_INIT;
+
+-static pthread_mutex_t ea_mutex = PTHREAD_MUTEX_INITIALIZER;
+-
+ static void key_mnt_params_destroy(void *arg)
+ {
+ struct mnt_params *mp;
+@@ -952,17 +951,6 @@ void *expire_proc_direct(void *arg)
+ return NULL;
+ }
+
+-static void pending_cond_destroy(void *arg)
+-{
+- struct pending_args *mt;
+- int status;
+-
+- mt = (struct pending_args *) arg;
+- status = pthread_cond_destroy(&mt->cond);
+- if (status)
+- fatal(status);
+-}
+-
+ static void expire_send_fail(void *arg)
+ {
+ struct ioctl_ops *ops = get_ioctl_ops();
+@@ -972,19 +960,6 @@ static void expire_send_fail(void *arg)
+ mt->ioctlfd, mt->wait_queue_token, -ENOENT);
+ }
+
+-static void free_pending_args(void *arg)
+-{
+- struct pending_args *mt = arg;
+- free(mt);
+-}
+-
+-static void expire_mutex_unlock(void *arg)
+-{
+- int status = pthread_mutex_unlock(&ea_mutex);
+- if (status)
+- fatal(status);
+-}
+-
+ static void *do_expire_direct(void *arg)
+ {
+ struct ioctl_ops *ops = get_ioctl_ops();
+@@ -995,9 +970,7 @@ static void *do_expire_direct(void *arg)
+
+ args = (struct pending_args *) arg;
+
+- status = pthread_mutex_lock(&ea_mutex);
+- if (status)
+- fatal(status);
++ pending_mutex_lock(args);
+
+ memcpy(&mt, args, sizeof(struct pending_args));
+
+@@ -1008,7 +981,7 @@ static void *do_expire_direct(void *arg)
+ if (status)
+ fatal(status);
+
+- expire_mutex_unlock(NULL);
++ pending_mutex_unlock(args);
+
+ pthread_cleanup_push(expire_send_fail, &mt);
+
+@@ -1124,7 +1097,7 @@ int handle_packet_expire_direct(struct a
+ if (status)
+ fatal(status);
+
+- status = pthread_mutex_lock(&ea_mutex);
++ status = pthread_mutex_init(&mt->mutex, NULL);
+ if (status)
+ fatal(status);
+
+@@ -1140,6 +1113,8 @@ int handle_packet_expire_direct(struct a
+ debug(ap->logopt, "token %ld, name %s",
+ (unsigned long) pkt->wait_queue_token, mt->name);
+
++ pending_mutex_lock(mt);
++
+ status = pthread_create(&thid, &th_attr_detached, do_expire_direct, mt);
+ if (status) {
+ error(ap->logopt, "expire thread create failed");
+@@ -1147,8 +1122,9 @@ int handle_packet_expire_direct(struct a
+ mt->ioctlfd, pkt->wait_queue_token, -status);
+ cache_unlock(mc);
+ master_source_unlock(ap->entry);
+- expire_mutex_unlock(NULL);
++ pending_mutex_unlock(mt);
+ pending_cond_destroy(mt);
++ pending_mutex_destroy(mt);
+ free_pending_args(mt);
+ pthread_setcancelstate(state, NULL);
+ return 1;
+@@ -1158,8 +1134,9 @@ int handle_packet_expire_direct(struct a
+ master_source_unlock(ap->entry);
+
+ pthread_cleanup_push(free_pending_args, mt);
++ pthread_cleanup_push(pending_mutex_destroy, mt);
+ pthread_cleanup_push(pending_cond_destroy, mt);
+- pthread_cleanup_push(expire_mutex_unlock, NULL);
++ pthread_cleanup_push(pending_mutex_unlock, mt);
+ pthread_setcancelstate(state, NULL);
+
+ mt->signaled = 0;
+@@ -1167,7 +1144,7 @@ int handle_packet_expire_direct(struct a
+ gettimeofday(&now, NULL);
+ wait.tv_sec = now.tv_sec + 2;
+ wait.tv_nsec = now.tv_usec * 1000;
+- status = pthread_cond_wait(&mt->cond, &ea_mutex);
++ status = pthread_cond_timedwait(&mt->cond, &mt->mutex, &wait);
+ if (status && status != ETIMEDOUT)
+ fatal(status);
+ }
+@@ -1175,6 +1152,7 @@ int handle_packet_expire_direct(struct a
+ pthread_cleanup_pop(1);
+ pthread_cleanup_pop(1);
+ pthread_cleanup_pop(1);
++ pthread_cleanup_pop(1);
+
+ return 0;
+ }
+@@ -1188,22 +1166,6 @@ static void mount_send_fail(void *arg)
+ ops->close(ap->logopt, mt->ioctlfd);
+ }
+
+-static void pending_mutex_destroy(void *arg)
+-{
+- struct pending_args *mt = (struct pending_args *) arg;
+- int status = pthread_mutex_destroy(&mt->mutex);
+- if (status)
+- fatal(status);
+-}
+-
+-static void mount_mutex_unlock(void *arg)
+-{
+- struct pending_args *mt = (struct pending_args *) arg;
+- int status = pthread_mutex_unlock(&mt->mutex);
+- if (status)
+- fatal(status);
+-}
+-
+ static void *do_mount_direct(void *arg)
+ {
+ struct ioctl_ops *ops = get_ioctl_ops();
+@@ -1214,9 +1176,7 @@ static void *do_mount_direct(void *arg)
+
+ args = (struct pending_args *) arg;
+
+- status = pthread_mutex_lock(&args->mutex);
+- if (status)
+- fatal(status);
++ pending_mutex_lock(args);
+
+ memcpy(&mt, args, sizeof(struct pending_args));
+
+@@ -1227,7 +1187,7 @@ static void *do_mount_direct(void *arg)
+ if (status)
+ fatal(status);
+
+- mount_mutex_unlock(args);
++ pending_mutex_unlock(args);
+
+ pthread_cleanup_push(mount_send_fail, &mt);
+
+@@ -1434,9 +1394,7 @@ int handle_packet_missing_direct(struct
+ if (status)
+ fatal(status);
+
+- status = pthread_mutex_lock(&mt->mutex);
+- if (status)
+- fatal(status);
++ pending_mutex_lock(mt);
+
+ mt->ap = ap;
+ mt->ioctlfd = ioctlfd;
+@@ -1458,7 +1416,7 @@ int handle_packet_missing_direct(struct
+ cache_unlock(mc);
+ master_source_unlock(ap->entry);
+ master_mutex_unlock();
+- mount_mutex_unlock(mt);
++ pending_mutex_unlock(mt);
+ pending_cond_destroy(mt);
+ pending_mutex_destroy(mt);
+ free_pending_args(mt);
+@@ -1474,7 +1432,7 @@ int handle_packet_missing_direct(struct
+ pthread_cleanup_push(free_pending_args, mt);
+ pthread_cleanup_push(pending_mutex_destroy, mt);
+ pthread_cleanup_push(pending_cond_destroy, mt);
+- pthread_cleanup_push(mount_mutex_unlock, mt);
++ pthread_cleanup_push(pending_mutex_unlock, mt);
+ pthread_setcancelstate(state, NULL);
+
+ mt->signaled = 0;
+--- autofs-5.0.5.orig/daemon/indirect.c
++++ autofs-5.0.5/daemon/indirect.c
+@@ -34,13 +34,12 @@
+ #include <sys/vfs.h>
+ #include <sched.h>
+
++#define INCLUDE_PENDING_FUNCTIONS
+ #include "automount.h"
+
+ /* Attribute to create detached thread */
+ extern pthread_attr_t th_attr_detached;
+
+-static pthread_mutex_t ea_mutex = PTHREAD_MUTEX_INITIALIZER;
+-
+ static int unlink_mount_tree(struct autofs_point *ap, struct mnt_list *mnts)
+ {
+ struct mnt_list *this;
+@@ -587,17 +586,6 @@ void *expire_proc_indirect(void *arg)
+ return NULL;
+ }
+
+-static void pending_cond_destroy(void *arg)
+-{
+- struct pending_args *mt;
+- int status;
+-
+- mt = (struct pending_args *) arg;
+- status = pthread_cond_destroy(&mt->cond);
+- if (status)
+- fatal(status);
+-}
+-
+ static void expire_send_fail(void *arg)
+ {
+ struct ioctl_ops *ops = get_ioctl_ops();
+@@ -607,19 +595,6 @@ static void expire_send_fail(void *arg)
+ ap->ioctlfd, mt->wait_queue_token, -ENOENT);
+ }
+
+-static void free_pending_args(void *arg)
+-{
+- struct pending_args *mt = arg;
+- free(mt);
+-}
+-
+-static void expire_mutex_unlock(void *arg)
+-{
+- int status = pthread_mutex_unlock(&ea_mutex);
+- if (status)
+- fatal(status);
+-}
+-
+ static void *do_expire_indirect(void *arg)
+ {
+ struct ioctl_ops *ops = get_ioctl_ops();
+@@ -629,9 +604,7 @@ static void *do_expire_indirect(void *ar
+
+ args = (struct pending_args *) arg;
+
+- status = pthread_mutex_lock(&ea_mutex);
+- if (status)
+- fatal(status);
++ pending_mutex_lock(args);
+
+ memcpy(&mt, args, sizeof(struct pending_args));
+
+@@ -642,7 +615,7 @@ static void *do_expire_indirect(void *ar
+ if (status)
+ fatal(status);
+
+- expire_mutex_unlock(NULL);
++ pending_mutex_unlock(args);
+
+ pthread_cleanup_push(expire_send_fail, &mt);
+
+@@ -690,7 +663,7 @@ int handle_packet_expire_indirect(struct
+ if (status)
+ fatal(status);
+
+- status = pthread_mutex_lock(&ea_mutex);
++ status = pthread_mutex_init(&mt->mutex, NULL);
+ if (status)
+ fatal(status);
+
+@@ -700,21 +673,25 @@ int handle_packet_expire_indirect(struct
+ mt->len = pkt->len;
+ mt->wait_queue_token = pkt->wait_queue_token;
+
++ pending_mutex_lock(mt);
++
+ status = pthread_create(&thid, &th_attr_detached, do_expire_indirect, mt);
+ if (status) {
+ error(ap->logopt, "expire thread create failed");
+ ops->send_fail(ap->logopt,
+ ap->ioctlfd, pkt->wait_queue_token, -status);
+- expire_mutex_unlock(NULL);
++ pending_mutex_unlock(mt);
+ pending_cond_destroy(mt);
++ pending_mutex_destroy(mt);
+ free_pending_args(mt);
+ pthread_setcancelstate(state, NULL);
+ return 1;
+ }
+
+ pthread_cleanup_push(free_pending_args, mt);
++ pthread_cleanup_push(pending_mutex_destroy, mt);
+ pthread_cleanup_push(pending_cond_destroy, mt);
+- pthread_cleanup_push(expire_mutex_unlock, NULL);
++ pthread_cleanup_push(pending_mutex_unlock, mt);
+ pthread_setcancelstate(state, NULL);
+
+ mt->signaled = 0;
+@@ -722,7 +699,7 @@ int handle_packet_expire_indirect(struct
+ gettimeofday(&now, NULL);
+ wait.tv_sec = now.tv_sec + 2;
+ wait.tv_nsec = now.tv_usec * 1000;
+- status = pthread_cond_timedwait(&mt->cond, &ea_mutex, &wait);
++ status = pthread_cond_timedwait(&mt->cond, &mt->mutex, &wait);
+ if (status && status != ETIMEDOUT)
+ fatal(status);
+ }
+@@ -730,6 +707,7 @@ int handle_packet_expire_indirect(struct
+ pthread_cleanup_pop(1);
+ pthread_cleanup_pop(1);
+ pthread_cleanup_pop(1);
++ pthread_cleanup_pop(1);
+
+ return 0;
+ }
+@@ -743,22 +721,6 @@ static void mount_send_fail(void *arg)
+ ap->ioctlfd, mt->wait_queue_token, -ENOENT);
+ }
+
+-static void pending_mutex_destroy(void *arg)
+-{
+- struct pending_args *mt = (struct pending_args *) arg;
+- int status = pthread_mutex_destroy(&mt->mutex);
+- if (status)
+- fatal(status);
+-}
+-
+-static void mount_mutex_unlock(void *arg)
+-{
+- struct pending_args *mt = (struct pending_args *) arg;
+- int status = pthread_mutex_unlock(&mt->mutex);
+- if (status)
+- fatal(status);
+-}
+-
+ static void *do_mount_indirect(void *arg)
+ {
+ struct ioctl_ops *ops = get_ioctl_ops();
+@@ -770,9 +732,7 @@ static void *do_mount_indirect(void *arg
+
+ args = (struct pending_args *) arg;
+
+- status = pthread_mutex_lock(&args->mutex);
+- if (status)
+- fatal(status);
++ pending_mutex_lock(args);
+
+ memcpy(&mt, args, sizeof(struct pending_args));
+
+@@ -783,7 +743,7 @@ static void *do_mount_indirect(void *arg
+ if (status)
+ fatal(status);
+
+- mount_mutex_unlock(args);
++ pending_mutex_unlock(args);
+
+ pthread_cleanup_push(mount_send_fail, &mt);
+
+@@ -879,9 +839,7 @@ int handle_packet_missing_indirect(struc
+ if (status)
+ fatal(status);
+
+- status = pthread_mutex_lock(&mt->mutex);
+- if (status)
+- fatal(status);
++ pending_mutex_lock(mt);
+
+ mt->ap = ap;
+ strncpy(mt->name, pkt->name, pkt->len);
+@@ -898,7 +856,7 @@ int handle_packet_missing_indirect(struc
+ ops->send_fail(ap->logopt,
+ ap->ioctlfd, pkt->wait_queue_token, -status);
+ master_mutex_unlock();
+- mount_mutex_unlock(mt);
++ pending_mutex_unlock(mt);
+ pending_cond_destroy(mt);
+ pending_mutex_destroy(mt);
+ free_pending_args(mt);
+@@ -911,7 +869,7 @@ int handle_packet_missing_indirect(struc
+ pthread_cleanup_push(free_pending_args, mt);
+ pthread_cleanup_push(pending_mutex_destroy, mt);
+ pthread_cleanup_push(pending_cond_destroy, mt);
+- pthread_cleanup_push(mount_mutex_unlock, mt);
++ pthread_cleanup_push(pending_mutex_unlock, mt);
+ pthread_setcancelstate(state, NULL);
+
+ mt->signaled = 0;
+--- autofs-5.0.5.orig/include/automount.h
++++ autofs-5.0.5/include/automount.h
+@@ -375,6 +375,47 @@ struct pending_args {
+ unsigned long wait_queue_token; /* Associated kernel wait token */
+ };
+
++#ifdef INCLUDE_PENDING_FUNCTIONS
++static void pending_cond_destroy(void *arg)
++{
++ struct pending_args *mt = (struct pending_args *) arg;
++ int status;
++ status = pthread_cond_destroy(&mt->cond);
++ if (status)
++ fatal(status);
++}
++
++static void pending_mutex_destroy(void *arg)
++{
++ struct pending_args *mt = (struct pending_args *) arg;
++ int status = pthread_mutex_destroy(&mt->mutex);
++ if (status)
++ fatal(status);
++}
++
++static void free_pending_args(void *arg)
++{
++ struct pending_args *mt = (struct pending_args *) arg;
++ free(mt);
++}
++
++static void pending_mutex_lock(void *arg)
++{
++ struct pending_args *mt = (struct pending_args *) arg;
++ int status = pthread_mutex_lock(&mt->mutex);
++ if (status)
++ fatal(status);
++}
++
++static void pending_mutex_unlock(void *arg)
++{
++ struct pending_args *mt = (struct pending_args *) arg;
++ int status = pthread_mutex_unlock(&mt->mutex);
++ if (status)
++ fatal(status);
++}
++#endif
++
+ struct thread_stdenv_vars {
+ uid_t uid;
+ gid_t gid;
diff --git a/autofs-5.0.5-fix-error-handing-in-do_mount_indirect.patch b/autofs-5.0.5-fix-error-handing-in-do_mount_indirect.patch
new file mode 100644
index 0000000..4346424
--- /dev/null
+++ b/autofs-5.0.5-fix-error-handing-in-do_mount_indirect.patch
@@ -0,0 +1,43 @@
+autofs-5.0.5 - fix error handing in do_mount_indirect()
+
+From: Ian Kent <raven at themaw.net>
+
+A couple of error returns in do_mount_indirect() fail to notify
+the kernel of request status before terminating.
+---
+
+ CHANGELOG | 1 +
+ daemon/indirect.c | 4 ++++
+ 2 files changed, 5 insertions(+)
+
+
+--- autofs-5.0.5.orig/CHANGELOG
++++ autofs-5.0.5/CHANGELOG
+@@ -44,6 +44,7 @@
+ - fix negative cache included map lookup.
+ - remove state machine timed wait.
+ - remove extra read master map call.
++- fix error handing in do_mount_indirect().
+
+ 03/09/2009 autofs-5.0.5
+ -----------------------
+--- autofs-5.0.5.orig/daemon/indirect.c
++++ autofs-5.0.5/daemon/indirect.c
+@@ -792,6 +792,9 @@ static void *do_mount_indirect(void *arg
+ len = ncat_path(buf, sizeof(buf), ap->path, mt.name, mt.len);
+ if (!len) {
+ crit(ap->logopt, "path to be mounted is to long");
++ ops->send_fail(ap->logopt,
++ ap->ioctlfd, mt.wait_queue_token,
++ -ENAMETOOLONG);
+ pthread_setcancelstate(state, NULL);
+ pthread_exit(NULL);
+ }
+@@ -800,6 +803,7 @@ static void *do_mount_indirect(void *arg
+ if (status != -1 && !(S_ISDIR(st.st_mode) && st.st_dev == mt.dev)) {
+ error(ap->logopt,
+ "indirect trigger not valid or already mounted %s", buf);
++ ops->send_ready(ap->logopt, ap->ioctlfd, mt.wait_queue_token);
+ pthread_setcancelstate(state, NULL);
+ pthread_exit(NULL);
+ }
diff --git a/autofs-5.0.5-fix-fix-cache_init-on-source-re-read.patch b/autofs-5.0.5-fix-fix-cache_init-on-source-re-read.patch
new file mode 100644
index 0000000..8d304f4
--- /dev/null
+++ b/autofs-5.0.5-fix-fix-cache_init-on-source-re-read.patch
@@ -0,0 +1,28 @@
+autofs-5.0.5 - fix "fix cache_init() on source re-read"
+
+From: Ian Kent <raven at themaw.net>
+
+Remove extra cache create call in master_add_map_source().
+---
+
+ lib/master.c | 6 ------
+ 1 files changed, 0 insertions(+), 6 deletions(-)
+
+
+diff --git a/lib/master.c b/lib/master.c
+index 03d8f77..12f2d22 100644
+--- a/lib/master.c
++++ b/lib/master.c
+@@ -188,12 +188,6 @@ master_add_map_source(struct master_mapent *entry,
+ source->argc = argc;
+ source->argv = tmpargv;
+
+- source->mc = cache_init(entry->ap, source);
+- if (!source->mc) {
+- master_free_map_source(source, 0);
+- return NULL;
+- }
+-
+ master_source_writelock(entry);
+
+ if (!entry->maps) {
diff --git a/autofs-5.0.5-include-krb5-library.patch b/autofs-5.0.5-include-krb5-library.patch
new file mode 100644
index 0000000..71d8cc6
--- /dev/null
+++ b/autofs-5.0.5-include-krb5-library.patch
@@ -0,0 +1,204 @@
+autofs-5.0.5 - include krb5 library
+
+From: Ian Kent <raven at themaw.net>
+
+Since the Cyrus SASL module calls Kerberos directly we should be
+linking against the Kerberos librarys.
+---
+
+ Makefile.conf.in | 2 ++
+ aclocal.m4 | 19 +++++++++++++++
+ configure | 67 +++++++++++++++++++++++++++++++++++++++++++++++++++++-
+ configure.in | 5 +++-
+ modules/Makefile | 4 ++-
+ 5 files changed, 93 insertions(+), 4 deletions(-)
+
+
+diff --git a/Makefile.conf.in b/Makefile.conf.in
+index 7670364..80093c1 100644
+--- a/Makefile.conf.in
++++ b/Makefile.conf.in
+@@ -31,6 +31,8 @@ XML_FLAGS = @XML_FLAGS@
+ SASL = @HAVE_SASL@
+ LIBSASL= @LIBSASL@
+ SASL_FLAGS = @SASL_FLAGS@
++KRB5_LIBS=@KRB5_LIBS@
++KRB5_FLAGS=@KRB5_FLAGS@
+
+ # NIS+ support: yes (1) no (0)
+ NISPLUS = @HAVE_NISPLUS@
+diff --git a/aclocal.m4 b/aclocal.m4
+index e7f1a30..750a159 100644
+--- a/aclocal.m4
++++ b/aclocal.m4
+@@ -215,6 +215,25 @@ else
+ fi])
+
+ dnl --------------------------------------------------------------------------
++dnl AF_CHECK_KRB5
++dnl
++dnl Check for Kerberos 5
++dnl --------------------------------------------------------------------------
++AC_DEFUN([AF_CHECK_KRB5],
++[AC_PATH_PROGS(KRB5_CONFIG, krb5-config, no)
++AC_MSG_CHECKING(for Kerberos library)
++if test "$KRB5_CONFIG" = "no"
++then
++ AC_MSG_RESULT(no)
++ HAVE_KRB5=0
++else
++ AC_MSG_RESULT(yes)
++ HAVE_KRB5=1
++ KRB5_LIBS=`$KRB5_CONFIG --libs`
++ KRB5_FLAGS=`$KRB5_CONFIG --cflags`
++fi])
++
++dnl --------------------------------------------------------------------------
+ dnl AF_CHECK_LIBHESIOD
+ dnl
+ dnl Check for lib hesiod
+diff --git a/configure b/configure
+index f5b7d07..352b0d6 100755
+--- a/configure
++++ b/configure
+@@ -640,6 +640,8 @@ ac_subst_vars='LTLIBOBJS
+ LIBOBJS
+ DAEMON_LDFLAGS
+ DAEMON_CFLAGS
++KRB5_FLAGS
++KRB5_LIBS
+ LIBSASL
+ HAVE_SASL
+ SASL_FLAGS
+@@ -657,6 +659,7 @@ LIBHESIOD
+ HAVE_HESIOD
+ LIBRESOLV
+ LIBNSL
++KRB5_CONFIG
+ XML_CONFIG
+ PATH_RPCGEN
+ RPCGEN
+@@ -3786,7 +3789,7 @@ $as_echo "no" >&6; }
+ fi
+ fi
+
+-# LDAP SASL auth need libxml
++# LDAP SASL auth needs libxml and Kerberos
+ for ac_prog in xml2-config
+ do
+ # Extract the first word of "$ac_prog", so it can be a program name with args.
+@@ -3864,6 +3867,66 @@ _ACEOF
+ fi
+ fi
+ fi
++for ac_prog in krb5-config
++do
++ # Extract the first word of "$ac_prog", so it can be a program name with args.
++set dummy $ac_prog; ac_word=$2
++{ $as_echo "$as_me:$LINENO: checking for $ac_word" >&5
++$as_echo_n "checking for $ac_word... " >&6; }
++if test "${ac_cv_path_KRB5_CONFIG+set}" = set; then
++ $as_echo_n "(cached) " >&6
++else
++ case $KRB5_CONFIG in
++ [\\/]* | ?:[\\/]*)
++ ac_cv_path_KRB5_CONFIG="$KRB5_CONFIG" # Let the user override the test with a path.
++ ;;
++ *)
++ as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
++for as_dir in $PATH
++do
++ IFS=$as_save_IFS
++ test -z "$as_dir" && as_dir=.
++ for ac_exec_ext in '' $ac_executable_extensions; do
++ if { test -f "$as_dir/$ac_word$ac_exec_ext" && $as_test_x "$as_dir/$ac_word$ac_exec_ext"; }; then
++ ac_cv_path_KRB5_CONFIG="$as_dir/$ac_word$ac_exec_ext"
++ $as_echo "$as_me:$LINENO: found $as_dir/$ac_word$ac_exec_ext" >&5
++ break 2
++ fi
++done
++done
++IFS=$as_save_IFS
++
++ ;;
++esac
++fi
++KRB5_CONFIG=$ac_cv_path_KRB5_CONFIG
++if test -n "$KRB5_CONFIG"; then
++ { $as_echo "$as_me:$LINENO: result: $KRB5_CONFIG" >&5
++$as_echo "$KRB5_CONFIG" >&6; }
++else
++ { $as_echo "$as_me:$LINENO: result: no" >&5
++$as_echo "no" >&6; }
++fi
++
++
++ test -n "$KRB5_CONFIG" && break
++done
++test -n "$KRB5_CONFIG" || KRB5_CONFIG="no"
++
++{ $as_echo "$as_me:$LINENO: checking for Kerberos library" >&5
++$as_echo_n "checking for Kerberos library... " >&6; }
++if test "$KRB5_CONFIG" = "no"
++then
++ { $as_echo "$as_me:$LINENO: result: no" >&5
++$as_echo "no" >&6; }
++ HAVE_KRB5=0
++else
++ { $as_echo "$as_me:$LINENO: result: yes" >&5
++$as_echo "yes" >&6; }
++ HAVE_KRB5=1
++ KRB5_LIBS=`$KRB5_CONFIG --libs`
++ KRB5_FLAGS=`$KRB5_CONFIG --cflags`
++fi
+
+ #
+ # glibc/libc 6 new libraries
+@@ -5241,6 +5304,8 @@ fi
+
+
+
++
++
+ LDFLAGS="${AF_tmp_ldflags}"
+
+ #
+diff --git a/configure.in b/configure.in
+index 78085bd..233edab 100644
+--- a/configure.in
++++ b/configure.in
+@@ -145,8 +145,9 @@ AF_CHECK_PROG(RPCGEN, rpcgen, , $searchpath)
+ #
+ AF_SLOPPY_MOUNT()
+
+-# LDAP SASL auth need libxml
++# LDAP SASL auth needs libxml and Kerberos
+ AF_CHECK_LIBXML()
++AF_CHECK_KRB5()
+
+ #
+ # glibc/libc 6 new libraries
+@@ -275,6 +276,8 @@ AC_SUBST(XML_LIBS)
+ AC_SUBST(SASL_FLAGS)
+ AC_SUBST(HAVE_SASL)
+ AC_SUBST(LIBSASL)
++AC_SUBST(KRB5_LIBS)
++AC_SUBST(KRB5_FLAGS)
+ LDFLAGS="${AF_tmp_ldflags}"
+
+ #
+diff --git a/modules/Makefile b/modules/Makefile
+index 0bb9464..164d412 100644
+--- a/modules/Makefile
++++ b/modules/Makefile
+@@ -42,8 +42,8 @@ ifeq ($(LDAP), 1)
+ MODS += lookup_ldap.so
+ ifeq ($(SASL), 1)
+ SASL_OBJ = cyrus-sasl.o
+- LDAP_FLAGS += $(SASL_FLAGS) $(XML_FLAGS) -DLDAP_THREAD_SAFE
+- LIBLDAP += $(LIBSASL) $(XML_LIBS)
++ LDAP_FLAGS += $(SASL_FLAGS) $(XML_FLAGS) $(KRB5_FLAGS) -DLDAP_THREAD_SAFE
++ LIBLDAP += $(LIBSASL) $(XML_LIBS) $(KRB5_LIBS)
+ endif
+ endif
+
diff --git a/autofs-5.0.5-make-verbose-mode-a-little-less-verbose.patch b/autofs-5.0.5-make-verbose-mode-a-little-less-verbose.patch
new file mode 100644
index 0000000..3e0602d
--- /dev/null
+++ b/autofs-5.0.5-make-verbose-mode-a-little-less-verbose.patch
@@ -0,0 +1,94 @@
+autofs-5.0.5 - Make "verbose" mode a little less verbose
+
+From: Leonardo Chiquitto <leonardo.lists at gmail.com>
+
+Remove some log message duplication for verbose logging.
+---
+
+ daemon/automount.c | 2 +-
+ daemon/lookup.c | 2 +-
+ modules/mount_changer.c | 2 +-
+ modules/mount_ext2.c | 2 +-
+ modules/mount_generic.c | 2 +-
+ modules/mount_nfs.c | 2 +-
+ 6 files changed, 6 insertions(+), 6 deletions(-)
+
+
+diff --git a/daemon/automount.c b/daemon/automount.c
+index 206734b..9939a25 100644
+--- a/daemon/automount.c
++++ b/daemon/automount.c
+@@ -512,7 +512,7 @@ static int umount_subtree_mounts(struct autofs_point *ap, const char *path, unsi
+ * it already to ensure it's ok to remove any offset triggers.
+ */
+ if (!is_mm_root && is_mounted(_PATH_MOUNTED, path, MNTS_REAL)) {
+- info(ap->logopt, "unmounting dir = %s", path);
++ debug(ap->logopt, "unmounting dir = %s", path);
+ if (umount_ent(ap, path)) {
+ warn(ap->logopt, "could not umount dir %s", path);
+ left++;
+diff --git a/daemon/lookup.c b/daemon/lookup.c
+index f5d9da8..a4bd07f 100644
+--- a/daemon/lookup.c
++++ b/daemon/lookup.c
+@@ -688,7 +688,7 @@ static int lookup_name_file_source_instance(struct autofs_point *ap, struct map_
+ char *type, *format;
+
+ if (stat(map->argv[0], &st) == -1) {
+- warn(ap->logopt, "file map not found");
++ debug(ap->logopt, "file map not found");
+ return NSS_STATUS_NOTFOUND;
+ }
+
+diff --git a/modules/mount_changer.c b/modules/mount_changer.c
+index f4d82dd..d7bfa09 100644
+--- a/modules/mount_changer.c
++++ b/modules/mount_changer.c
+@@ -129,7 +129,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
+
+ return 1;
+ } else {
+- info(ap->logopt, MODPREFIX "mounted %s type %s on %s",
++ debug(ap->logopt, MODPREFIX "mounted %s type %s on %s",
+ what, fstype, fullpath);
+ return 0;
+ }
+diff --git a/modules/mount_ext2.c b/modules/mount_ext2.c
+index 26d59d1..1edf347 100644
+--- a/modules/mount_ext2.c
++++ b/modules/mount_ext2.c
+@@ -140,7 +140,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
+
+ return 1;
+ } else {
+- info(ap->logopt,
++ debug(ap->logopt,
+ MODPREFIX "mounted %s type %s on %s",
+ what, fstype, fullpath);
+ return 0;
+diff --git a/modules/mount_generic.c b/modules/mount_generic.c
+index da85d1a..79e3d32 100644
+--- a/modules/mount_generic.c
++++ b/modules/mount_generic.c
+@@ -122,7 +122,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
+
+ return 1;
+ } else {
+- info(ap->logopt, MODPREFIX "mounted %s type %s on %s",
++ debug(ap->logopt, MODPREFIX "mounted %s type %s on %s",
+ loc, fstype, fullpath);
+ free(loc);
+ return 0;
+diff --git a/modules/mount_nfs.c b/modules/mount_nfs.c
+index 21e1929..9110eba 100644
+--- a/modules/mount_nfs.c
++++ b/modules/mount_nfs.c
+@@ -251,7 +251,7 @@ int mount_mount(struct autofs_point *ap, const char *root, const char *name, int
+ }
+
+ if (!err) {
+- info(ap->logopt, MODPREFIX "mounted %s on %s", loc, fullpath);
++ debug(ap->logopt, MODPREFIX "mounted %s on %s", loc, fullpath);
+ free(loc);
+ free_host_list(&hosts);
+ return 0;
diff --git a/autofs-5.0.5-remove-ERR_remove_state-openssl-call.patch b/autofs-5.0.5-remove-ERR_remove_state-openssl-call.patch
new file mode 100644
index 0000000..4f99e21
--- /dev/null
+++ b/autofs-5.0.5-remove-ERR_remove_state-openssl-call.patch
@@ -0,0 +1,44 @@
+autofs-5.0.5 - remove ERR_remove_state() openssl call
+
+From: Ian Kent <raven at themaw.net>
+
+autofs should never have had to use ERR_remove_state() so remove that call.
+---
+
+ CHANGELOG | 1 +
+ modules/lookup_ldap.c | 12 +-----------
+ 2 files changed, 2 insertions(+), 11 deletions(-)
+
+
+--- autofs-5.0.5.orig/CHANGELOG
++++ autofs-5.0.5/CHANGELOG
+@@ -46,6 +46,7 @@
+ - remove extra read master map call.
+ - fix error handing in do_mount_indirect().
+ - expire thread use pending mutex.
++- remove ERR_remove_state() openssl call.
+
+ 03/09/2009 autofs-5.0.5
+ -----------------------
+--- autofs-5.0.5.orig/modules/lookup_ldap.c
++++ autofs-5.0.5/modules/lookup_ldap.c
+@@ -169,18 +169,8 @@ int unbind_ldap_connection(unsigned logo
+ int rv;
+
+ #ifdef WITH_SASL
+- /*
+- * The OpenSSL library can't handle having its message and error
+- * string database loaded multiple times and segfaults if the
+- * TLS environment is not reset at the right times. As there
+- * is no ldap_stop_tls call in the openldap library we have
+- * to do the job ourselves, here and in lookup_done when the
+- * module is closed.
+- */
+- if (ctxt->use_tls == LDAP_TLS_RELEASE) {
+- ERR_remove_state(0);
++ if (ctxt->use_tls == LDAP_TLS_RELEASE)
+ ctxt->use_tls = LDAP_TLS_INIT;
+- }
+ autofs_sasl_unbind(ctxt);
+ #endif
+
diff --git a/autofs-5.0.5-remove-extra-read-master-map-call.patch b/autofs-5.0.5-remove-extra-read-master-map-call.patch
new file mode 100644
index 0000000..e7df68a
--- /dev/null
+++ b/autofs-5.0.5-remove-extra-read-master-map-call.patch
@@ -0,0 +1,33 @@
+autofs-5.0.5 - remove extra read master map call
+
+From: Ian Kent <raven at themaw.net>
+
+Fix a mistake with a recent patch where a call to lookup_read_master()
+which should have been removed wasn't.
+---
+
+ CHANGELOG | 1 +
+ lib/master.c | 1 -
+ 2 files changed, 1 insertion(+), 1 deletion(-)
+
+
+--- autofs-5.0.5.orig/CHANGELOG
++++ autofs-5.0.5/CHANGELOG
+@@ -43,6 +43,7 @@
+ - check each dc server individually.
+ - fix negative cache included map lookup.
+ - remove state machine timed wait.
++- remove extra read master map call.
+
+ 03/09/2009 autofs-5.0.5
+ -----------------------
+--- autofs-5.0.5.orig/lib/master.c
++++ autofs-5.0.5/lib/master.c
+@@ -840,7 +840,6 @@ int master_read_master(struct master *ma
+ lookup_nss_read_master(master, age);
+ cache_unlock(nc);
+
+- lookup_nss_read_master(master, age);
+ if (!master->read_fail)
+ master_mount_mounts(master, age, readall);
+ else {
diff --git a/autofs.spec b/autofs.spec
index a2f60e7..30d8690 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.5
-Release: 27%{?dist}
+Release: 29%{?dist}
Epoch: 1
License: GPLv2+
Group: System Environment/Daemons
@@ -53,6 +53,13 @@ Patch41: autofs-5.0.5-mapent-becomes-negative-during-lookup.patch
Patch42: autofs-5.0.5-check-each-dc-server.patch
Patch43: autofs-5.0.5-fix-negative-cache-included-map-lookup.patch
Patch44: autofs-5.0.5-remove-state-machine-timed-wait.patch
+Patch45: autofs-5.0.5-remove-extra-read-master-map-call.patch
+Patch46: autofs-5.0.5-fix-fix-cache_init-on-source-re-read.patch
+Patch47: autofs-5.0.5-fix-error-handing-in-do_mount_indirect.patch
+Patch48: autofs-5.0.5-expire-thread-use-pending-mutex.patch
+Patch49: autofs-5.0.5-include-krb5-library.patch
+Patch50: autofs-5.0.5-make-verbose-mode-a-little-less-verbose.patch
+Patch51: autofs-5.0.5-remove-ERR_remove_state-openssl-call.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 libtirpc-devel
Conflicts: cyrus-sasl-lib < 2.1.23-9
@@ -139,6 +146,13 @@ echo %{version}-%{release} > .version
%patch42 -p1
%patch43 -p1
%patch44 -p1
+%patch45 -p1
+%patch46 -p1
+%patch47 -p1
+%patch48 -p1
+%patch49 -p1
+%patch50 -p1
+%patch51 -p1
%build
#CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir}
@@ -191,6 +205,15 @@ fi
%{_libdir}/autofs/
%changelog
+* Tue Aug 17 2010 Ian Kent <ikent at redhat.com> - 1:5.0.5-29
+- remove extra read master map call.
+- remove extra cache create call in master_add_map_source().
+- fix error handing in do_mount_indirect().
+- expire thread use pending mutex.
+- explicity link against the Kerberos library.
+- remove some log message duplication for verbose logging.
+- remove ERR_remove_state() openssl call.
+
* Mon May 24 2010 Ian Kent <ikent at redhat.com> - 1:5.0.5-27.fc14
- fix master map source server unavailable handling.
- add autofs_ldap_auth.conf man page.
More information about the scm-commits
mailing list