[autofs] * Mon Dec 5 2011 Ian Kent <ikent at redhat.com> - 1:5.0.6-5 - fix ipv6 name lookup check. - fix ipv6 rp

Ian Kent iankent at fedoraproject.org
Mon Dec 5 07:09:54 UTC 2011


commit 3d12a7aac3fa48a93e16eb288c75765e39b559a8
Author: Ian Kent <raven at themaw.net>
Date:   Mon Dec 5 15:09:33 2011 +0800

    * Mon Dec 5 2011 Ian Kent <ikent at redhat.com> - 1:5.0.6-5
    - fix ipv6 name lookup check.
    - fix ipv6 rpc calls.
    - fix ipv6 configure check.
    - add piddir to configure.
    - add systemd unit support.
    - fix MNT_DETACH define.

 autofs-5.0.6-add-piddir-to-configure.patch    |  145 +++++++
 autofs-5.0.6-add-systemd-unit-support.patch   |  388 ++++++++++++++++++
 autofs-5.0.6-fix-MNT_DETACH-define.patch      |   23 +
 autofs-5.0.6-fix-ipv6-configure-check.patch   |  185 +++++++++
 autofs-5.0.6-fix-ipv6-name-lookup-check.patch |   63 +++
 autofs-5.0.6-fix-ipv6-rpc-calls.patch         |  531 +++++++++++++++++++++++++
 autofs.spec                                   |   80 ++++-
 7 files changed, 1408 insertions(+), 7 deletions(-)
---
diff --git a/autofs-5.0.6-add-piddir-to-configure.patch b/autofs-5.0.6-add-piddir-to-configure.patch
new file mode 100644
index 0000000..9fa90a0
--- /dev/null
+++ b/autofs-5.0.6-add-piddir-to-configure.patch
@@ -0,0 +1,145 @@
+autofs-5.0.5 - add piddir to configure
+
+From: Ian Kent <ikent at redhat.com>
+
+In order to accomodate possible changes or different pid file
+locations add directory selection for pid file directory to
+configure. Also update the fifo directory and flag file directory
+configure checks.
+---
+
+ CHANGELOG             |    1 +
+ Makefile.conf.in      |    3 +++
+ aclocal.m4            |   20 ++++++++++++++++++--
+ configure             |    4 ++--
+ redhat/Makefile       |    1 +
+ redhat/autofs.init.in |    4 ++--
+ samples/Makefile      |    2 +-
+ 7 files changed, 28 insertions(+), 7 deletions(-)
+
+
+--- autofs-5.0.6.orig/CHANGELOG
++++ autofs-5.0.6/CHANGELOG
+@@ -16,6 +16,7 @@
+ - fix ipv6 name lookup check.
+ - fix ipv6 rpc calls.
+ - fix ipv6 configure check.
++- add piddir to configure.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+--- autofs-5.0.6.orig/Makefile.conf.in
++++ autofs-5.0.6/Makefile.conf.in
+@@ -79,6 +79,9 @@ autofsconfdir = @confdir@
+ # Location for autofs maps
+ autofsmapdir = @mapdir@
+ 
++# Localtion of pid files
++autofspiddir = @piddir@
++
+ # Location for autofs fifos
+ autofsfifodir = @fifodir@
+ 
+--- autofs-5.0.6.orig/aclocal.m4
++++ autofs-5.0.6/aclocal.m4
+@@ -121,13 +121,29 @@ AC_DEFUN(AF_MAP_D,
+ fi])
+ 
+ dnl --------------------------------------------------------------------------
++dnl AF_PID_D
++dnl
++dnl Check the location of the pid file directory.
++dnl --------------------------------------------------------------------------
++AC_DEFUN(AF_PID_D,
++[if test -z "$piddir"; then
++  for pid_d in /run /var/run /tmp; do
++    if test -z "$piddir"; then
++      if test -d "$pid_d"; then
++        piddir="$pid_d"
++      fi
++    fi
++  done
++fi])
++
++dnl --------------------------------------------------------------------------
+ dnl AF_FIFO_D
+ dnl
+ dnl Check the location of the autofs fifos directory
+ dnl --------------------------------------------------------------------------
+ AC_DEFUN(AF_FIFO_D,
+ [if test -z "$fifodir"; then
+-  for fifo_d in /var/run /tmp; do
++  for fifo_d in /run /var/run /tmp; do
+     if test -z "$fifodir"; then
+       if test -d "$fifo_d"; then
+         fifodir="$fifo_d"
+@@ -143,7 +159,7 @@ dnl Check the location of the autofs fla
+ dnl --------------------------------------------------------------------------
+ AC_DEFUN(AF_FLAG_D,
+ [if test -z "$flagdir"; then
+-  for flag_d in /var/run /tmp; do
++  for flag_d in /run /var/run /tmp; do
+     if test -z "$flagdir"; then
+       if test -d "$flag_d"; then
+         flagdir="$flag_d"
+--- autofs-5.0.6.orig/configure
++++ autofs-5.0.6/configure
+@@ -2184,7 +2184,7 @@ $as_echo "$mapdir" >&6; }
+ # The user can specify --with-fifodir=PATH to specify where autofs fifos go
+ #
+ if test -z "$fifodir"; then
+-  for fifo_d in /var/run /tmp; do
++  for fifo_d in /run /var/run /tmp; do
+     if test -z "$fifodir"; then
+       if test -d "$fifo_d"; then
+         fifodir="$fifo_d"
+@@ -2214,7 +2214,7 @@ $as_echo "$fifodir" >&6; }
+ # The user can specify --with-flagdir=PATH to specify where autofs flag file goes
+ #
+ if test -z "$flagdir"; then
+-  for flag_d in /var/run /tmp; do
++  for flag_d in /run /var/run /tmp; do
+     if test -z "$flagdir"; then
+       if test -d "$flag_d"; then
+         flagdir="$flag_d"
+--- autofs-5.0.6.orig/redhat/Makefile
++++ autofs-5.0.6/redhat/Makefile
+@@ -8,6 +8,7 @@ autofs.init: autofs.init.in
+ 	sed -e "s|@@sbindir@@|$(sbindir)|g" \
+ 	    -e "s|@@autofslibdir@@|$(autofslibdir)|g" \
+ 	    -e "s|@@autofsconfdir@@|$(autofsconfdir)|g" \
++	    -e "s|@@autofspiddir@@|$(autofspiddir)|g" \
+ 	    -e "s|@@initdir@@|$(initdir)|g" < autofs.init.in > autofs.init
+ 
+ autofs.sysconfig: autofs.sysconfig.in
+--- autofs-5.0.6.orig/redhat/autofs.init.in
++++ autofs-5.0.6/redhat/autofs.init.in
+@@ -86,7 +86,7 @@ function start() {
+ 	fi
+ 
+ 	echo -n $"Starting $prog: "
+-	$prog $OPTIONS --pid-file /var/run/autofs.pid
++	$prog $OPTIONS --pid-file @@autofspiddir@@/autofs.pid
+ 	RETVAL=$?
+ 	if [ $RETVAL -eq 0 ] ; then
+ 		success "$prog startup"
+@@ -171,7 +171,7 @@ case "$1" in
+ 		stop
+ 		;;
+ 	status)
+-		status -p /var/run/autofs.pid -l autofs $prog
++		status -p @@autofspiddir@@/autofs.pid -l autofs $prog
+ 		;;
+ 	restart|force-reload)
+ 		restart
+--- autofs-5.0.6.orig/samples/Makefile
++++ autofs-5.0.6/samples/Makefile
+@@ -21,7 +21,7 @@ dirs:
+ 	install -d -m 755 $(INSTALLROOT)$(autofsmapdir)
+ 	install -d -m 755 $(INSTALLROOT)$(autofsconfdir)
+ 	install -d -m 755 $(INSTALLROOT)$(autofslibdir)
+-	install -d -m 755 $(INSTALLROOT)/var/run/autofs
++	install -d -m 755 $(INSTALLROOT)$(autofspiddir)
+ 
+ .PHONY: autofs.init
+ autofs.init:
diff --git a/autofs-5.0.6-add-systemd-unit-support.patch b/autofs-5.0.6-add-systemd-unit-support.patch
new file mode 100644
index 0000000..d59ecbe
--- /dev/null
+++ b/autofs-5.0.6-add-systemd-unit-support.patch
@@ -0,0 +1,388 @@
+autofs-5.0.5 - add systemd unit support
+
+From: Ian Kent <ikent at redhat.com>
+
+Add a systemd unit file and attempt to integrating it into our
+install.
+---
+
+ CHANGELOG                 |    1 
+ Makefile.conf.in          |    2 +
+ aclocal.m4                |   28 ++++++++++++++++++++++
+ autofs.spec               |   58 +++++++++++++++++++++++++++++++++++++++++-----
+ configure                 |   47 +++++++++++++++++++++++++++++++++++++
+ configure.in              |    9 +++++++
+ redhat/Makefile           |   10 ++++++-
+ samples/Makefile          |   23 +++++++++++++-----
+ samples/autofs.service.in |   12 +++++++++
+ 9 files changed, 176 insertions(+), 14 deletions(-)
+ create mode 100644 samples/autofs.service.in
+
+
+--- autofs-5.0.6.orig/CHANGELOG
++++ autofs-5.0.6/CHANGELOG
+@@ -17,6 +17,7 @@
+ - fix ipv6 rpc calls.
+ - fix ipv6 configure check.
+ - add piddir to configure.
++- add systemd unit support.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+--- autofs-5.0.6.orig/Makefile.conf.in
++++ autofs-5.0.6/Makefile.conf.in
+@@ -98,3 +98,5 @@ mandir = @mandir@
+ # Location for init.d files
+ initdir = @initdir@
+ 
++# Location of systemd unit files
++systemddir = @systemddir@
+--- autofs-5.0.6.orig/aclocal.m4
++++ autofs-5.0.6/aclocal.m4
+@@ -199,6 +199,34 @@ fi], [AC_MSG_RESULT(no)])
+ ])
+ 
+ dnl --------------------------------------------------------------------------
++dnl AF_WITH_SYSTEMD
++dnl
++dnl Check the location of the systemd unit files directory
++dnl --------------------------------------------------------------------------
++AC_DEFUN([AF_WITH_SYSTEMD],
++[AC_ARG_WITH(systemd,
++[  --with-systemd         install systemd unit file if systemd unit directory
++			  is found on system],
++[if test "$withval" = yes; then
++  if test -z "$systemddir"; then
++    AC_MSG_CHECKING([location of the systemd unit files directory])
++    for systemd_d in /lib/systemd/system; do
++      if test -z "$systemddir"; then
++        if test -d "$systemd_d"; then
++          systemddir="$systemd_d"
++        fi
++      fi
++    done
++  fi
++  if test -n "$systemddir"; then
++    AC_MSG_RESULT($systemddir)
++  else
++    AC_MSG_RESULT(not found)
++  fi
++fi])
++])
++
++dnl --------------------------------------------------------------------------
+ dnl AF_CHECK_LIBXML
+ dnl
+ dnl Check for lib xml
+--- autofs-5.0.6.orig/autofs.spec
++++ autofs-5.0.6/autofs.spec
+@@ -8,6 +8,10 @@
+ %define _lib lib64
+ %endif
+ 
++# Use --without systemd in your rpmbuild command or force values to 0 to
++# disable them.
++%define with_systemd        %{?_without_systemd:        0} %{?!_without_systemd:        1}
++
+ Summary: A tool from automatically mounting and umounting filesystems.
+ Name: autofs
+ %define version 5.0.6
+@@ -18,9 +22,18 @@ License: GPL
+ Group: System Environment/Daemons
+ Source: ftp://ftp.kernel.org/pub/linux/daemons/autofs/v4/autofs-%{version}.tar.gz
+ Buildroot: %{_tmppath}/%{name}-tmp
++%if %{with_systemd}
++BuildRequires: systemd-units
++%endif
+ BuildPrereq: autoconf, hesiod-devel, openldap-devel, bison, flex, cyrus-sasl-devel
+ Prereq: chkconfig
+ Requires: /bin/bash mktemp sed textutils sh-utils grep /bin/ps
++%if %{with_systemd}
++Requires(post): systemd-sysv
++Requires(post): systemd-units
++Requires(preun): systemd-units
++Requires(postun): systemd-units
++%endif
+ Obsoletes: autofs-ldap
+ Summary(de): autofs daemon 
+ Summary(fr): démon autofs
+@@ -55,14 +68,22 @@ inkludera nätfilsystem, CD-ROM, floppydi
+ %prep
+ %setup -q
+ echo %{version}-%{release} > .version
++%if %{with_systemd}
++  %define _unitdir %{?_unitdir:/lib/systemd/system}
++  %define systemd_configure_arg --with-systemd
++%endif
+ 
+ %build
+-CFLAGS="$RPM_OPT_FLAGS -Wall" ./configure --libdir=%{_libdir} --disable-mount-locking --enable-ignore-busy --with-libtirpc --disable-mount-move
++CFLAGS="$RPM_OPT_FLAGS -Wall" ./configure --libdir=%{_libdir} --disable-mount-locking --enable-ignore-busy --with-libtirpc --disable-mount-move %{?systemd_configure_arg:}
+ CFLAGS="$RPM_OPT_FLAGS -Wall" make initdir=/etc/rc.d/init.d DONTSTRIP=1
+ 
+ %install
+ rm -rf $RPM_BUILD_ROOT
++%if %{with_systemd}
++install -d -m 755 $RPM_BUILD_ROOT%{_unitdir}
++%else
+ mkdir -p -m755 $RPM_BUILD_ROOT/etc/rc.d/init.d
++%endif
+ mkdir -p -m755 $RPM_BUILD_ROOT%{_sbindir}
+ mkdir -p -m755 $RPM_BUILD_ROOT%{_libdir}/autofs
+ mkdir -p -m755 $RPM_BUILD_ROOT%{_mandir}/{man5,man8}
+@@ -70,31 +91,56 @@ mkdir -p -m755 $RPM_BUILD_ROOT/etc/sysco
+ mkdir -p -m755 $RPM_BUILD_ROOT/etc/auto.master.d
+ 
+ make install mandir=%{_mandir} initdir=/etc/rc.d/init.d INSTALLROOT=$RPM_BUILD_ROOT
++echo make -C redhat
+ make -C redhat
++%if %{with_systemd}
++install -m 644 redhat/autofs.service $RPM_BUILD_ROOT%{_unitdir}/autofs.service
++%else
+ install -m 755 redhat/autofs.init $RPM_BUILD_ROOT/etc/rc.d/init.d/autofs
++%endif
+ install -m 644 redhat/autofs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/autofs
+ 
+ %clean
+ [ "$RPM_BUILD_ROOT" != "/" ] && rm -rf $RPM_BUILD_ROOT
+ 
+ %post
++%if %{with_systemd}
++/bin/systemctl daemon-reload >/dev/null 2>&1 || :
++%else
+ chkconfig --add autofs
+-
+-%postun
+-if [ $1 -ge 1 ] ; then
+-	/sbin/service autofs condrestart > /dev/null 2>&1 || :
+-fi
++%endif
+ 
+ %preun
+ if [ "$1" = 0 ] ; then
++%if %{with_systemd}
++	/bin/systemctl --no-reload disable autofs.service > /dev/null 2>&1 || :
++	/bin/systemctl stop autofs.service > /dev/null 2>&1 || :
++%else
+ 	/sbin/service autofs stop > /dev/null 2>&1 || :
+ 	/sbin/chkconfig --del autofs
++%endif
+ fi
+ 
++%postun
++%if %{with_systemd}
++/bin/systemctl daemon-reload >/dev/null 2>&1 || :
++if [ $1 -ge 1 ] ; then
++	/bin/systemctl try-restart autofs.service >/dev/null 2>&1 || :
++fi
++%else
++if [ $1 -ge 1 ] ; then
++	/sbin/service autofs condrestart > /dev/null 2>&1 || :
++fi
++%endif
++
+ %files
+ %defattr(-,root,root)
+ %doc CREDITS CHANGELOG INSTALL COPY* README* samples/ldap* samples/autofs.schema samples/autofs_ldap_auth.conf
++%if %{with_systemd}
++%{_unitdir}/autofs.service
++%else
+ %config /etc/rc.d/init.d/autofs
++%endif
+ %config(noreplace) /etc/auto.master
+ %config(noreplace,missingok) /etc/auto.misc
+ %config(noreplace,missingok) /etc/auto.net
+--- autofs-5.0.6.orig/configure
++++ autofs-5.0.6/configure
+@@ -650,6 +650,8 @@ flagdir
+ fifodir
+ mapdir
+ confdir
++systemddir
++piddir
+ initdir
+ target_alias
+ host_alias
+@@ -693,6 +695,7 @@ ac_subst_files=''
+ ac_user_opts='
+ enable_option_checking
+ with_path
++with_systemd
+ with_confdir
+ with_mapdir
+ with_fifodir
+@@ -1337,6 +1340,8 @@ Optional Packages:
+   --with-PACKAGE[=ARG]    use PACKAGE [ARG=yes]
+   --without-PACKAGE       do not use PACKAGE (same as --with-PACKAGE=no)
+   --with-path=PATH	  look in PATH for binaries needed by the automounter
++  --with-systemd         install systemd unit file if systemd unit directory
++			  is found on system
+   --with-confdir=DIR	  use DIR for autofs configuration files
+   --with-mapdir=PATH	  look in PATH for mount maps used by the automounter
+   --with-fifodir=PATH	   use PATH as the directory for fifos used by the automounter
+@@ -2119,6 +2124,48 @@ $as_echo "$initdir" >&6; }
+   done
+ fi
+ 
++if test -z "$piddir"; then
++  for pid_d in /run /var/run /tmp; do
++    if test -z "$piddir"; then
++      if test -d "$pid_d"; then
++        piddir="$pid_d"
++      fi
++    fi
++  done
++fi
++
++
++#
++# Check for systemd unit files direectory exists if unit file installation
++# is requested
++#
++
++# Check whether --with-systemd was given.
++if test "${with_systemd+set}" = set; then :
++  withval=$with_systemd; if test "$withval" = yes; then
++  if test -z "$systemddir"; then
++    { $as_echo "$as_me:${as_lineno-$LINENO}: checking location of the systemd unit files directory" >&5
++$as_echo_n "checking location of the systemd unit files directory... " >&6; }
++    for systemd_d in /lib/systemd/system; do
++      if test -z "$systemddir"; then
++        if test -d "$systemd_d"; then
++          systemddir="$systemd_d"
++        fi
++      fi
++    done
++  fi
++  if test -n "$systemddir"; then
++    { $as_echo "$as_me:${as_lineno-$LINENO}: result: $systemddir" >&5
++$as_echo "$systemddir" >&6; }
++  else
++    { $as_echo "$as_me:${as_lineno-$LINENO}: result: not found" >&5
++$as_echo "not found" >&6; }
++  fi
++fi
++fi
++
++
++
+ 
+ #
+ # Location of system config script directory?
+--- autofs-5.0.6.orig/configure.in
++++ autofs-5.0.6/configure.in
+@@ -43,6 +43,15 @@ AF_LINUX_PROCFS()
+ #
+ AF_INIT_D()
+ AC_SUBST(initdir)
++AF_PID_D()
++AC_SUBST(piddir)
++
++#
++# Check for systemd unit files direectory exists if unit file installation
++# is requested
++#
++AF_WITH_SYSTEMD()
++AC_SUBST(systemddir)
+ 
+ #
+ # Location of system config script directory?
+--- autofs-5.0.6.orig/redhat/Makefile
++++ autofs-5.0.6/redhat/Makefile
+@@ -2,7 +2,7 @@
+ -include ../Makefile.conf
+ include ../Makefile.rules
+ 
+-all: autofs.init autofs.sysconfig
++all: autofs.init autofs.sysconfig autofs.service
+ 
+ autofs.init: autofs.init.in
+ 	sed -e "s|@@sbindir@@|$(sbindir)|g" \
+@@ -15,6 +15,12 @@ autofs.sysconfig: autofs.sysconfig.in
+ 	sed -e "s|@@autofsmapdir@@|$(autofsmapdir)|g" \
+ 		< autofs.sysconfig.in > autofs.sysconfig
+ 
++autofs.service: ../samples/autofs.service.in
++	sed -e "s|@@sbindir@@|$(sbindir)|g" \
++	    -e "s|@@autofsconfdir@@|$(autofsconfdir)|g" \
++	    -e "s|@@autofspiddir@@|$(autofspiddir)|g" \
++		< ../samples/autofs.service.in > autofs.service
++
+ clean:
+-	rm -f autofs.init autofs.sysconfig
++	rm -f autofs.init autofs.sysconfig autofs.service
+ 
+--- autofs-5.0.6.orig/samples/Makefile
++++ autofs-5.0.6/samples/Makefile
+@@ -4,7 +4,7 @@ include ../Makefile.rules
+ 
+ SAMPLES = auto.master auto.misc auto.net auto.smb
+ 
+-all: rc.autofs autofs.conf.default
++all: rc.autofs autofs.conf.default autofs.service
+ 
+ rc.autofs: rc.autofs.in
+ 	sed -e "s|@@sbindir@@|$(sbindir)|g" \
+@@ -16,6 +16,12 @@ autofs.conf.default: autofs.conf.default
+ 	sed -e "s|@@autofsmapdir@@|$(autofsmapdir)|g" \
+ 		< autofs.conf.default.in > autofs.conf.default
+ 
++autofs.service: autofs.service.in
++	sed -e "s|@@sbindir@@|$(sbindir)|g" \
++	    -e "s|@@autofsconfdir@@|$(autofsconfdir)|g" \
++	    -e "s|@@autofspiddir@@|$(autofspiddir)|g" \
++		< autofs.service.in > autofs.service
++
+ .PHONY: dirs
+ dirs:
+ 	install -d -m 755 $(INSTALLROOT)$(autofsmapdir)
+@@ -26,13 +32,18 @@ dirs:
+ .PHONY: autofs.init
+ autofs.init:
+ 	@echo
+-ifneq ($(initdir),)
++ifneq ($(systemddir),)
++	install -d -m 755 $(INSTALLROOT)$(systemddir)
++	install autofs.service -m 644 $(INSTALLROOT)$(systemddir)/autofs.service
++else
++   ifneq ($(initdir),)
+ 	install -d -m 755 $(INSTALLROOT)$(initdir)
+ 	install rc.autofs -m 755 $(INSTALLROOT)$(initdir)/autofs
+-else
++   else
+ 	if test -d $(INSTALLROOT)/etc/rc.d ; then \
+ 		install -c rc.autofs -m 755 $(INSTALLROOT)/etc/rc.d ; \
+ 	fi
++   endif
+ endif
+ 
+ CONFIG = $(shell test -e $(INSTALLROOT)$(autofsconfdir)/autofs.orig || echo "-b --suffix=.orig")
+@@ -173,10 +184,10 @@ auto.smb:
+ 		fi ; \
+ 	fi
+ 
+-install: rc.autofs autofs.conf.default dirs autofs.init autofs.conf \
+-		autofs_ldap_auth.conf $(SAMPLES)
++install: rc.autofs autofs.conf.default dirs autofs.init autofs.service \
++		autofs.conf autofs_ldap_auth.conf $(SAMPLES)
+ 	@echo
+ 
+ clean:
+-	rm -f *.o *.s rc.autofs autofs.conf.default
++	rm -f *.o *.s rc.autofs autofs.conf.default autofs.service
+ 
+--- /dev/null
++++ autofs-5.0.6/samples/autofs.service.in
+@@ -0,0 +1,12 @@
++[Unit]
++Description=Automounts filesystems on demand
++After=network.target ypbind.service
++
++[Service]
++Type=forking
++PIDFile=@@autofspiddir@@/autofs.pid
++EnvironmentFile=-@@autofsconfdir@@/autofs
++ExecStart=@@sbindir@@/automount ${OPTIONS} --pid-file @@autofspiddir@@/autofs.pid
++
++[Install]
++WantedBy=multi-user.target
diff --git a/autofs-5.0.6-fix-MNT_DETACH-define.patch b/autofs-5.0.6-fix-MNT_DETACH-define.patch
new file mode 100644
index 0000000..ee6ecd9
--- /dev/null
+++ b/autofs-5.0.6-fix-MNT_DETACH-define.patch
@@ -0,0 +1,23 @@
+autofs-5.0.6 - fix MNT_DETACH define
+
+From: Ian Kent <raven at themaw.net>
+
+MNT_DETACH has been included in herder file
+---
+
+ include/automount.h |    2 ++
+ 1 file changed, 2 insertions(+)
+
+
+--- autofs-5.0.6.orig/include/automount.h
++++ autofs-5.0.6/include/automount.h
+@@ -333,7 +333,9 @@ int ncat_path(char *buf, size_t len,
+ 
+ /* Core automount definitions */
+ 
++#ifndef MNT_DETACH
+ #define MNT_DETACH	0x00000002	/* Just detach from the tree */
++#endif
+ 
+ struct startup_cond {
+ 	pthread_mutex_t mutex;
diff --git a/autofs-5.0.6-fix-ipv6-configure-check.patch b/autofs-5.0.6-fix-ipv6-configure-check.patch
new file mode 100644
index 0000000..39d283f
--- /dev/null
+++ b/autofs-5.0.6-fix-ipv6-configure-check.patch
@@ -0,0 +1,185 @@
+autofs-5.0.6 - fix ipv6 configure check
+
+From: Ian Kent <ikent at redhat.com>
+
+Since the functions clntudp6_bufcreate() and clnttcp6_create() of
+libtirpc were never actually included in the library our reference
+to clntudp6_bufcreate() in configure needs to be removed.
+
+Having redone the libtirpc interface (after realizing these functions
+were defined but not actually included in the library) checking for
+IPv6 support can't be done now and we need to rely on the transport
+independent nature of libtirpc to take care of this. So the INET6
+checks have been replaced with WITH_LIBTIRPC checks instead.
+---
+
+ CHANGELOG            |    1 +
+ aclocal.m4           |   36 ------------------------------------
+ configure            |   46 ----------------------------------------------
+ include/config.h.in  |    3 ---
+ modules/replicated.c |   10 +++++++---
+ 5 files changed, 8 insertions(+), 88 deletions(-)
+
+
+--- autofs-5.0.6.orig/CHANGELOG
++++ autofs-5.0.6/CHANGELOG
+@@ -15,6 +15,7 @@
+ - add disable move mount configure option.
+ - fix ipv6 name lookup check.
+ - fix ipv6 rpc calls.
++- fix ipv6 configure check.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+--- autofs-5.0.6.orig/aclocal.m4
++++ autofs-5.0.6/aclocal.m4
+@@ -324,41 +324,6 @@ LIBS="$af_check_ldap_parse_page_control_
+ ])
+ 
+ dnl --------------------------------------------------------------------------
+-dnl AF_CHECK_LIBTIRPC_IPV6
+-dnl
+-dnl Use libtirpc for rpc transport
+-dnl --------------------------------------------------------------------------
+-AC_DEFUN([AF_CHECK_LIBTIRPC_IPV6],
+-[AC_MSG_CHECKING(if libtirpc has IPv6 support)
+-
+-# save current flags
+-af_check_libtirpc_ipv6_save_cflags="$CFLAGS"
+-af_check_libtirpc_ipv6_save_ldflags="$LDFLAGS"
+-CFLAGS="$CFLAGS -I/usr/include/tirpc"
+-LDFLAGS="$LDFLAGS -ltirpc"
+-
+-AC_TRY_LINK(
+-    [ #define INET6
+-      #include <rpc/rpc.h> ],
+-    [ CLIENT *cl;
+-      struct sockaddr_in6 addr;
+-      int fd;
+-      unsigned long ul; struct timeval t; unsigned int ui;
+-      cl = clntudp6_bufcreate(&addr,ul,ul,t,&fd,ui,ui); ],
+-    [ af_have_libtirpc_ipv6=yes
+-      AC_MSG_RESULT(yes) ],
+-    [ AC_MSG_RESULT(no) ])
+-
+-if test "$af_have_libtirpc_ipv6" = "yes"; then
+-    AC_DEFINE(INET6,1, [Use IPv6 with libtirpc])
+-fi
+-
+-# restore flags
+-CFLAGS="$af_check_libtirpc_ipv6_save_cflags"
+-LDFLAGS="$af_check_libtirpc_ipv6_save_ldflags"
+-])
+-
+-dnl --------------------------------------------------------------------------
+ dnl AF_CHECK_LIBTIRPC
+ dnl
+ dnl Use libtirpc for rpc transport
+@@ -399,7 +364,6 @@ AC_ARG_WITH(libtirpc,
+ [  --with-libtirpc         use libtirpc if available],
+ [if test "$withval" = yes; then
+   AF_CHECK_LIBTIRPC()
+-  AF_CHECK_LIBTIRPC_IPV6()
+ else
+   AC_MSG_RESULT(no)
+ fi], [AC_MSG_RESULT(no)])
+--- autofs-5.0.6.orig/configure
++++ autofs-5.0.6/configure
+@@ -3087,52 +3087,6 @@ fi
+ CFLAGS="$af_check_libtirpc_save_cflags"
+ LDFLAGS="$af_check_libtirpc_save_ldflags"
+ 
+-  { $as_echo "$as_me:${as_lineno-$LINENO}: checking if libtirpc has IPv6 support" >&5
+-$as_echo_n "checking if libtirpc has IPv6 support... " >&6; }
+-
+-# save current flags
+-af_check_libtirpc_ipv6_save_cflags="$CFLAGS"
+-af_check_libtirpc_ipv6_save_ldflags="$LDFLAGS"
+-CFLAGS="$CFLAGS -I/usr/include/tirpc"
+-LDFLAGS="$LDFLAGS -ltirpc"
+-
+-cat confdefs.h - <<_ACEOF >conftest.$ac_ext
+-/* end confdefs.h.  */
+- #define INET6
+-      #include <rpc/rpc.h>
+-int
+-main ()
+-{
+- CLIENT *cl;
+-      struct sockaddr_in6 addr;
+-      int fd;
+-      unsigned long ul; struct timeval t; unsigned int ui;
+-      cl = clntudp6_bufcreate(&addr,ul,ul,t,&fd,ui,ui);
+-  ;
+-  return 0;
+-}
+-_ACEOF
+-if ac_fn_c_try_link "$LINENO"; then :
+-   af_have_libtirpc_ipv6=yes
+-      { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+-$as_echo "yes" >&6; }
+-else
+-   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+-$as_echo "no" >&6; }
+-fi
+-rm -f core conftest.err conftest.$ac_objext \
+-    conftest$ac_exeext conftest.$ac_ext
+-
+-if test "$af_have_libtirpc_ipv6" = "yes"; then
+-
+-$as_echo "#define INET6 1" >>confdefs.h
+-
+-fi
+-
+-# restore flags
+-CFLAGS="$af_check_libtirpc_ipv6_save_cflags"
+-LDFLAGS="$af_check_libtirpc_ipv6_save_ldflags"
+-
+ else
+   { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+ $as_echo "no" >&6; }
+--- autofs-5.0.6.orig/include/config.h.in
++++ autofs-5.0.6/include/config.h.in
+@@ -72,9 +72,6 @@
+ /* Define to 1 if you have the <unistd.h> header file. */
+ #undef HAVE_UNISTD_H
+ 
+-/* Use IPv6 with libtirpc */
+-#undef INET6
+-
+ /* Use libxml2 tsd usage workaround */
+ #undef LIBXML2_WORKAROUND
+ 
+--- autofs-5.0.6.orig/modules/replicated.c
++++ autofs-5.0.6/modules/replicated.c
+@@ -180,7 +180,7 @@ static unsigned int get_proximity(struct
+ 		break;
+ 
+ 	case AF_INET6:
+-#ifndef INET6
++#ifndef WITH_LIBTIRPC
+ 		return PROXIMITY_UNSUPPORTED;
+ #else
+ 		addr6 = (struct sockaddr_in6 *) host_addr;
+@@ -229,7 +229,9 @@ static unsigned int get_proximity(struct
+ 			break;
+ 
+ 		case AF_INET6:
+-#ifdef INET6
++#ifndef WITH_LIBTIRPC
++			return PROXIMITY_UNSUPPORTED;
++#else
+ 			if (host_addr->sa_family == AF_INET)
+ 				break;
+ 
+@@ -309,7 +311,9 @@ static unsigned int get_proximity(struct
+ 			break;
+ 
+ 		case AF_INET6:
+-#ifdef INET6
++#ifndef WITH_LIBTIRPC
++			return PROXIMITY_UNSUPPORTED;
++#else
+ 			if (host_addr->sa_family == AF_INET)
+ 				break;
+ 
diff --git a/autofs-5.0.6-fix-ipv6-name-lookup-check.patch b/autofs-5.0.6-fix-ipv6-name-lookup-check.patch
new file mode 100644
index 0000000..d8fd7c4
--- /dev/null
+++ b/autofs-5.0.6-fix-ipv6-name-lookup-check.patch
@@ -0,0 +1,63 @@
+autofs-5.0.6 - fix ipv6 name lookup check
+
+From: Ian Kent <raven at themaw.net>
+
+The host address must be used when the host name has multiple
+addresses since we need to mount the specific host and so that
+it is known what host log entries refer to.
+
+But the check for multiple addresses can be wrong because there
+is no distinction between ipv4 and ipv6 addresses. Change the
+check to use the host name when mounting if neither the ipv4
+or the ipv6 addresses have more than one record.
+---
+
+ CHANGELOG            |    1 +
+ modules/replicated.c |   17 +++++++++++++++--
+ 2 files changed, 16 insertions(+), 2 deletions(-)
+
+
+--- autofs-5.0.6.orig/CHANGELOG
++++ autofs-5.0.6/CHANGELOG
+@@ -13,6 +13,7 @@
+ - fix submount shutdown race.
+ - fix fix map source check in file lookup.
+ - add disable move mount configure option.
++- fix ipv6 name lookup check.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+--- autofs-5.0.6.orig/modules/replicated.c
++++ autofs-5.0.6/modules/replicated.c
+@@ -1117,7 +1117,7 @@ static int add_host_addrs(struct host **
+ 	char *name = n_ptr = strdup(host);
+ 	int len;
+ 	char buf[MAX_ERR_BUF];
+-	int rr = 0;
++	int rr = 0, rr4 = 0, rr6 = 0;
+ 	int ret;
+ 
+ 	if (!name) {
+@@ -1167,8 +1167,21 @@ try_name:
+ 	}
+ 
+ 	this = ni;
+-	if (this->ai_next)
++	while (this->ai_next) {
++		if (this->ai_family == AF_INET) {
++			struct sockaddr_in *addr = (struct sockaddr_in *) this->ai_addr;
++			if (addr->sin_addr.s_addr != INADDR_LOOPBACK)
++				rr4++;
++		} else if (this->ai_family == AF_INET6) {
++			struct sockaddr_in6 *addr = (struct sockaddr_in6 *) this->ai_addr;
++			if (!IN6_IS_ADDR_LOOPBACK(addr->sin6_addr.__in6_u.__u6_addr32))
++				rr6++;
++		}
++		this = this->ai_next;
++	}
++	if (rr4 > 1 || rr6 > 1)
+ 		rr++;
++	this = ni;
+ 	while (this) {
+ 		ret = add_new_host(list, host, weight, this, rr, options);
+ 		if (!ret)
diff --git a/autofs-5.0.6-fix-ipv6-rpc-calls.patch b/autofs-5.0.6-fix-ipv6-rpc-calls.patch
new file mode 100644
index 0000000..ed8230d
--- /dev/null
+++ b/autofs-5.0.6-fix-ipv6-rpc-calls.patch
@@ -0,0 +1,531 @@
+autofs-5.0.6 - fix ipv6 rpc calls
+
+From: Ian Kent <ikent at redhat.com>
+
+There is a mistake in the way autofs uses libtirpc. Two IPv6 compatibiliy
+functions were thought to be included when in fact they were not and would
+not actually work with IPv6 anyway.
+
+To fix that the libtirpc interface code needed to be re-written. Portmap
+(using libtirpc calls) is still used to get service port numbers, rather
+than rpcbind.
+---
+
+ CHANGELOG            |    1 
+ lib/rpc_subs.c       |  370 ++++++++++++++++++++-------------------------------
+ modules/replicated.c |    8 -
+ 3 files changed, 155 insertions(+), 224 deletions(-)
+
+
+--- autofs-5.0.6.orig/CHANGELOG
++++ autofs-5.0.6/CHANGELOG
+@@ -14,6 +14,7 @@
+ - fix fix map source check in file lookup.
+ - add disable move mount configure option.
+ - fix ipv6 name lookup check.
++- fix ipv6 rpc calls.
+ 
+ 28/06/2011 autofs-5.0.6
+ -----------------------
+--- autofs-5.0.6.orig/lib/rpc_subs.c
++++ autofs-5.0.6/lib/rpc_subs.c
+@@ -62,89 +62,6 @@ static const rpcvers_t mount_vers[] = {
+ static int connect_nb(int, struct sockaddr *, socklen_t, struct timeval *);
+ inline void dump_core(void);
+ 
+-static CLIENT *rpc_clntudp_create(struct sockaddr *addr, struct conn_info *info, int *fd)
+-{
+-	struct sockaddr_in *in4_raddr;
+-	struct sockaddr_in6 *in6_raddr;
+-	CLIENT *client = NULL;
+-
+-	switch (addr->sa_family) {
+-	case AF_INET:
+-		in4_raddr = (struct sockaddr_in *) addr;
+-		in4_raddr->sin_port = htons(info->port);
+-		client = clntudp_bufcreate(in4_raddr,
+-					   info->program, info->version,
+-					   info->timeout, fd,
+-					   info->send_sz, info->recv_sz);
+-		break;
+-
+-	case AF_INET6:
+-#ifndef INET6
+-		/* Quiet compile warning */
+-		in6_raddr = NULL;
+-#else
+-		in6_raddr = (struct sockaddr_in6 *) addr;
+-		in6_raddr->sin6_port = htons(info->port);
+-		client = clntudp6_bufcreate(in6_raddr,
+-					    info->program, info->version,
+-					    info->timeout, fd,
+-					    info->send_sz, info->recv_sz);
+-#endif
+-		break;
+-
+-	default:
+-		break;
+-	}
+-
+-	return client;
+-}
+-
+-static CLIENT *rpc_clnttcp_create(struct sockaddr *addr, struct conn_info *info, int *fd)
+-{
+-	struct sockaddr_in *in4_raddr;
+-	struct sockaddr_in6 *in6_raddr;
+-	CLIENT *client = NULL;
+-	socklen_t slen;
+-
+-	switch (addr->sa_family) {
+-	case AF_INET:
+-		in4_raddr = (struct sockaddr_in *) addr;
+-		in4_raddr->sin_port = htons(info->port);
+-		slen = sizeof(struct sockaddr_in);
+-
+-		if (connect_nb(*fd, addr, slen, &info->timeout) < 0)
+-			break;
+-
+-		client = clnttcp_create(in4_raddr,
+-					info->program, info->version, fd,
+-					info->send_sz, info->recv_sz);
+-		break;
+-
+-	case AF_INET6:
+-#ifndef INET6
+-		/* Quiet compile warning */
+-		in6_raddr = NULL;
+-#else
+-		in6_raddr = (struct sockaddr_in6 *) addr;
+-		in6_raddr->sin6_port = htons(info->port);
+-		slen = sizeof(struct sockaddr_in6);
+-
+-		if (connect_nb(*fd, addr, slen, &info->timeout) < 0)
+-			break;
+-
+-		client = clnttcp6_create(in6_raddr,
+-					 info->program, info->version, fd,
+-					 info->send_sz, info->recv_sz);
+-#endif
+-		break;
+-
+-	default:
+-		break;
+-	}
+-
+-	return client;
+-}
+-
+ /*
+  *  Perform a non-blocking connect on the socket fd.
+  *
+@@ -232,12 +149,12 @@ done:
+ 	return ret;
+ }
+ 
++#ifndef WITH_LIBTIRPC
+ static CLIENT *rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, int *fd)
+ {
+ 	CLIENT *client = NULL;
+-	struct sockaddr *laddr;
+ 	struct sockaddr_in in4_laddr;
+-	struct sockaddr_in6 in6_laddr;
++	struct sockaddr_in in4_raddr;
+ 	int type, proto;
+ 	socklen_t slen;
+ 
+@@ -252,48 +169,41 @@ static CLIENT *rpc_do_create_client(stru
+ 	 * layer, it would bind to a reserved port, which has been shown
+ 	 * to exhaust the reserved port range in some situations.
+ 	 */
+-	switch (addr->sa_family) {
+-	case AF_INET:
+-		in4_laddr.sin_family = AF_INET;
+-		in4_laddr.sin_port = htons(0);
+-		in4_laddr.sin_addr.s_addr = htonl(INADDR_ANY);
+-		slen = sizeof(struct sockaddr_in);
+-		laddr = (struct sockaddr *) &in4_laddr;
+-		break;
+-
+-	case AF_INET6:
+-#ifndef INET6
+-		/* Quiet compiler */
+-		in6_laddr.sin6_family = AF_INET6;
+-		return NULL;
+-#else
+-		in6_laddr.sin6_family = AF_INET6;
+-		in6_laddr.sin6_port = htons(0);
+-		in6_laddr.sin6_addr = in6addr_any;
+-		slen = sizeof(struct sockaddr_in6);
+-		laddr = (struct sockaddr *) &in6_laddr;
+-		break;
+-#endif
+-	default:
+-		return NULL;
+-	}
++	in4_laddr.sin_family = AF_INET;
++	in4_laddr.sin_port = htons(0);
++	in4_laddr.sin_addr.s_addr = htonl(INADDR_ANY);
++	slen = sizeof(struct sockaddr_in);
+ 
+ 	if (!info->client) {
++		struct sockaddr *laddr;
++
+ 		*fd = open_sock(addr->sa_family, type, proto);
+ 		if (*fd < 0)
+ 			return NULL;
+ 
++		laddr = (struct sockaddr *) &in4_laddr;
+ 		if (bind(*fd, laddr, slen) < 0)
+ 			return NULL;
+ 	}
+ 
++	in4_raddr = (struct sockaddr_in *) addr;
++	in4_raddr->sin_port = htons(info->port);
++
+ 	switch (info->proto->p_proto) {
+ 	case IPPROTO_UDP:
+-		client = rpc_clntudp_create(addr, info, fd);
++		client = clntudp_bufcreate(in4_raddr,
++					   info->program, info->version,
++					   info->timeout, fd,
++					   info->send_sz, info->recv_sz);
+ 		break;
+ 
+ 	case IPPROTO_TCP:
+-		client = rpc_clnttcp_create(addr, info, fd);
++		if (connect_nb(*fd, addr, slen, &info->timeout) < 0)
++			break;
++
++		client = clnttcp_create(in4_raddr,
++					info->program, info->version, fd,
++					info->send_sz, info->recv_sz);
+ 		break;
+ 
+ 	default:
+@@ -302,20 +212,126 @@ static CLIENT *rpc_do_create_client(stru
+ 
+ 	return client;
+ }
++#else
++struct netconfig *find_netconf(void *handle, char *family, char *proto)
++{
++	struct netconfig *nconf;
++
++	while ((nconf = getnetconfig(handle))) {
++		if ((strcmp(nconf->nc_protofmly, family) == 0) &&
++		    (strcmp(nconf->nc_proto, proto) == 0))
++			break;
++	}
++
++	return nconf;
++}
++
++static CLIENT *rpc_do_create_client(struct sockaddr *addr, struct conn_info *info, int *fd)
++{
++	CLIENT *client = NULL;
++	struct sockaddr_in in4_laddr;
++	struct sockaddr_in6 in6_laddr;
++	struct sockaddr *laddr = NULL;
++	struct netconfig *nconf;
++	struct netbuf nb_addr;
++	int type, proto;
++	char *nc_family, *nc_proto;
++	void *handle;
++	size_t slen;
++
++	proto = info->proto->p_proto;
++	if (proto == IPPROTO_UDP) {
++		type = SOCK_DGRAM;
++		nc_proto = NC_UDP;
++	} else {
++		type = SOCK_STREAM;
++		nc_proto = NC_TCP;
++	}
++
++	/*
++	 * bind to any unused port.  If we left this up to the rpc
++	 * layer, it would bind to a reserved port, which has been shown
++	 * to exhaust the reserved port range in some situations.
++	 */
++	if (addr->sa_family == AF_INET) {
++		struct sockaddr_in *in4_raddr = (struct sockaddr_in *) addr;
++		in4_laddr.sin_family = AF_INET;
++		in4_laddr.sin_port = htons(0);
++		in4_laddr.sin_addr.s_addr = htonl(INADDR_ANY);
++		laddr = (struct sockaddr *) &in4_laddr;
++		in4_raddr->sin_port = htons(info->port);
++		slen = sizeof(struct sockaddr_in);
++		nc_family = NC_INET;
++	} else if (addr->sa_family == AF_INET6) {
++		struct sockaddr_in6 *in6_raddr = (struct sockaddr_in6 *) addr;
++		in6_laddr.sin6_family = AF_INET6;
++		in6_laddr.sin6_port = htons(0);
++		in6_laddr.sin6_addr = in6addr_any;
++		laddr = (struct sockaddr *) &in6_laddr;
++		in6_raddr->sin6_port = htons(info->port);
++		slen = sizeof(struct sockaddr_in6);
++		nc_family = NC_INET6;
++	} else
++		return NULL;
++
++	handle = setnetconfig();
++	if (!handle)
++		return NULL;
++
++	nconf = find_netconf(handle, nc_family, nc_proto);
++	if (!nconf) {
++		endnetconfig(handle);
++		return NULL;
++	}
++
++	/*
++	 * bind to any unused port.  If we left this up to the rpc layer,
++	 * it would bind to a reserved port, which has been shown to
++	 * exhaust the reserved port range in some situations.
++	 */
++	if (!info->client) {
++		*fd = open_sock(addr->sa_family, type, proto);
++		if (*fd < 0) {
++			endnetconfig(handle);
++			return NULL;
++		}
++
++		if (bind(*fd, laddr, slen) < 0) {
++			endnetconfig(handle);
++			return NULL;
++		}
++	}
++
++	nb_addr.maxlen = nb_addr.len = slen;
++	nb_addr.buf = addr;
++
++	if (info->proto->p_proto == IPPROTO_TCP) {
++		if (connect_nb(*fd, addr, slen, &info->timeout) < 0) {
++			endnetconfig(handle);
++			return NULL;
++		}
++	}
++
++	client = clnt_tli_create(*fd, nconf, &nb_addr,
++				 info->program, info->version,
++				 info->send_sz, info->recv_sz);
++
++	endnetconfig(handle);
++
++	return client;
++}
++#endif
+ 
+ /*
+- * Create a UDP RPC client
++ * Create an RPC client
+  */
+-static CLIENT *create_udp_client(struct conn_info *info)
++static CLIENT *create_client(struct conn_info *info)
+ {
+ 	CLIENT *client = NULL;
+ 	struct addrinfo *ai, *haddr;
+ 	struct addrinfo hints;
+ 	int fd, ret;
+ 
+-	if (info->proto->p_proto != IPPROTO_UDP)
+-		return NULL;
+-
+ 	fd = RPC_ANYSOCK;
+ 
+ 	if (info->client) {
+@@ -355,6 +371,11 @@ static CLIENT *create_udp_client(struct
+ 
+ 	haddr = ai;
+ 	while (haddr) {
++		if (haddr->ai_protocol != info->proto->p_proto) {
++			haddr = haddr->ai_next;
++			continue;
++		}
++
+ 		client = rpc_do_create_client(haddr->ai_addr, info, &fd);
+ 		if (client)
+ 			break;
+@@ -408,7 +429,7 @@ int rpc_udp_getclient(struct conn_info *
+ 	info->program = program;
+ 	info->version = version;
+ 
+-	client = create_udp_client(info);
++	client = create_client(info);
+ 
+ 	if (!client)
+ 		return 0;
+@@ -428,92 +449,6 @@ void rpc_destroy_udp_client(struct conn_
+ 	return;
+ }
+ 
+-/*
+- * Create a TCP RPC client using non-blocking connect
+- */
+-static CLIENT *create_tcp_client(struct conn_info *info)
+-{
+-	CLIENT *client = NULL;
+-	struct addrinfo *ai, *haddr;
+-	struct addrinfo hints;
+-	int fd, ret;
+-
+-	if (info->proto->p_proto != IPPROTO_TCP)
+-		return NULL;
+-
+-	fd = RPC_ANYSOCK;
+-
+-	if (info->client) {
+-		if (!clnt_control(info->client, CLGET_FD, (char *) &fd)) {
+-			fd = RPC_ANYSOCK;
+-			clnt_destroy(info->client);
+-			info->client = NULL;
+-		} else {
+-			clnt_control(info->client, CLSET_FD_NCLOSE, NULL);
+-			clnt_destroy(info->client);
+-		}
+-	}
+-
+-	if (info->addr) {
+-		client = rpc_do_create_client(info->addr, info, &fd);
+-		if (client)
+-			goto done;
+-
+-		if (!info->client) {
+-			close(fd);
+-			fd = RPC_ANYSOCK;
+-		}
+-	}
+-
+-	memset(&hints, 0, sizeof(hints));
+-	hints.ai_flags = AI_ADDRCONFIG;
+-	hints.ai_family = AF_UNSPEC;
+-	hints.ai_socktype = SOCK_STREAM;
+-
+-	ret = getaddrinfo(info->host, NULL, &hints, &ai);
+-	if (ret) {
+-		error(LOGOPT_ANY,
+-		      "hostname lookup failed: %s", gai_strerror(ret));
+-		info->client = NULL;
+-		goto out_close;
+-	}
+-
+-	haddr = ai;
+-	while (haddr) {
+-		client = rpc_do_create_client(haddr->ai_addr, info, &fd);
+-		if (client)
+-			break;
+-
+-		if (!info->client && fd != RPC_ANYSOCK) {
+-			close(fd);
+-			fd = RPC_ANYSOCK;
+-		}
+-
+-		haddr = haddr->ai_next;
+-	}
+-
+-	freeaddrinfo(ai);
+-
+-	if (!client) {
+-		info->client = NULL;
+-		goto out_close;
+-	}
+-done:
+-	/* Close socket fd on destroy, as is default for rpcowned fds */
+-	if  (!clnt_control(client, CLSET_FD_CLOSE, NULL)) {
+-		clnt_destroy(client);
+-		info->client = NULL;
+-		goto out_close;
+-	}
+-
+-	return client;
+-
+-out_close:
+-	if (fd != -1)
+-		close(fd);
+-	return NULL;
+-}
+-
+ int rpc_tcp_getclient(struct conn_info *info,
+ 		      unsigned int program, unsigned int version)
+ {
+@@ -533,7 +468,7 @@ int rpc_tcp_getclient(struct conn_info *
+ 	info->program = program;
+ 	info->version = version;
+ 
+-	client = create_tcp_client(info);
++	client = create_client(info);
+ 
+ 	if (!client)
+ 		return 0;
+@@ -593,12 +528,9 @@ int rpc_portmap_getclient(struct conn_in
+ 	info->close_option = option;
+ 	info->client = NULL;
+ 
+-	if (pe_proto->p_proto == IPPROTO_TCP) {
++	if (pe_proto->p_proto == IPPROTO_TCP)
+ 		info->timeout.tv_sec = PMAP_TOUT_TCP;
+-		client = create_tcp_client(info);
+-	} else
+-		client = create_udp_client(info);
+-
++	client = create_client(info);
+ 	if (!client)
+ 		return 0;
+ 
+@@ -635,11 +567,7 @@ unsigned short rpc_portmap_getport(struc
+ 		pmap_info.send_sz = RPCSMALLMSGSIZE;
+ 		pmap_info.recv_sz = RPCSMALLMSGSIZE;
+ 
+-		if (proto == IPPROTO_TCP)
+-			client = create_tcp_client(&pmap_info);
+-		else
+-			client = create_udp_client(&pmap_info);
+-
++		client = create_client(&pmap_info);
+ 		if (!client)
+ 			return 0;
+ 	}
+@@ -700,10 +628,8 @@ int rpc_ping_proto(struct conn_info *inf
+ 		if (info->proto->p_proto == IPPROTO_UDP) {
+ 			info->send_sz = UDPMSGSIZE;
+ 			info->recv_sz = UDPMSGSIZE;
+-			client = create_udp_client(info);
+-		} else
+-			client = create_tcp_client(info);
+-
++		}
++		client = create_client(info);
+ 		if (!client)
+ 			return 0;
+ 	}
+@@ -857,10 +783,8 @@ static int rpc_get_exports_proto(struct
+ 	if (info->proto->p_proto == IPPROTO_UDP) {
+ 		info->send_sz = UDPMSGSIZE;
+ 		info->recv_sz = UDPMSGSIZE;
+-		client = create_udp_client(info);
+-	} else
+-		client = create_tcp_client(info);
+-
++	}
++	client = create_client(info);
+ 	if (!client)
+ 		return 0;
+ 
+--- autofs-5.0.6.orig/modules/replicated.c
++++ autofs-5.0.6/modules/replicated.c
+@@ -1095,7 +1095,13 @@ static int add_new_host(struct host **li
+ 	if (prx == PROXIMITY_ERROR)
+ 		return 0;
+ 
+-	addr_len = sizeof(struct sockaddr);
++	if (host_addr->ai_addr->sa_family == AF_INET)
++		addr_len = INET_ADDRSTRLEN;
++	else if (host_addr->ai_addr->sa_family == AF_INET6)
++		addr_len = INET6_ADDRSTRLEN;
++	else
++		return 0;
++
+ 	new = new_host(host, host_addr->ai_addr, addr_len, prx, weight, options);
+ 	if (!new)
+ 		return 0;
diff --git a/autofs.spec b/autofs.spec
index ea33c15..8424791 100644
--- a/autofs.spec
+++ b/autofs.spec
@@ -1,10 +1,14 @@
 #
 # $Id: autofs.spec,v 1.11 2003/12/04 15:41:32 raven Exp $
 #
+# Use --without systemd in your rpmbuild command or force values to 0 to
+# disable them.
+%define with_systemd        %{?_without_systemd:        0} %{?!_without_systemd:        1}
+
 Summary: A tool for automatically mounting and unmounting filesystems
 Name: autofs
 Version: 5.0.6
-Release: 4%{?dist}
+Release: 5%{?dist}
 Epoch: 1
 License: GPLv2+
 Group: System Environment/Daemons
@@ -23,11 +27,26 @@ Patch11: autofs-5.0.6-fix-submount-shutdown-race.patch
 Patch12: autofs-5.0.6-fix-fix-map-source-check-in-file-lookup.patch
 Patch13: autofs-5.0.6-add-disable-move-mount-configure-option.patch
 Patch14: autofs-5.0.6-fix-lsb-service-name-in-init-script-2.patch
+Patch15: autofs-5.0.6-fix-ipv6-name-lookup-check.patch
+Patch16: autofs-5.0.6-fix-ipv6-rpc-calls.patch
+Patch17: autofs-5.0.6-fix-ipv6-configure-check.patch
+Patch18: autofs-5.0.6-add-piddir-to-configure.patch
+Patch19: autofs-5.0.6-add-systemd-unit-support.patch
+Patch20: autofs-5.0.6-fix-MNT_DETACH-define.patch
 Buildroot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
+%if %{with_systemd}
+BuildRequires: systemd-units
+%endif
 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
 Requires: kernel >= 2.6.17
 Requires: bash mktemp sed gawk textutils sh-utils grep module-init-tools /bin/ps
+%if %{with_systemd}
+Requires(post): systemd-sysv
+Requires(post): systemd-units
+Requires(preun): systemd-units
+Requires(postun): systemd-units
+%endif
 Requires(post): /sbin/chkconfig
 Requires(preun): /sbin/service
 Requires(postun): /sbin/service
@@ -65,6 +84,10 @@ inkludera nÀtfilsystem, CD-ROM, floppydiskar, och sÄ vidare.
 %prep
 %setup -q
 echo %{version}-%{release} > .version
+%if %{with_systemd}
+  %define _unitdir %{?_unitdir:/lib/systemd/system}
+  %define systemd_configure_arg --with-systemd
+%endif
 %patch1 -p1
 %patch2 -p1
 %patch3 -p1
@@ -79,15 +102,25 @@ echo %{version}-%{release} > .version
 %patch12 -p1
 %patch13 -p1
 %patch14 -p1
+%patch15 -p1
+%patch16 -p1
+%patch17 -p1
+%patch18 -p1
+%patch19 -p1
+%patch20 -p1
 
 %build
 #CFLAGS="$RPM_OPT_FLAGS" ./configure --prefix=/usr --libdir=%{_libdir}
-%configure --disable-mount-locking --enable-ignore-busy --with-libtirpc --disable-mount-move
+%configure --disable-mount-locking --enable-ignore-busy --with-libtirpc --disable-mount-move %{?systemd_configure_arg:}
 make initdir=%{_initrddir} DONTSTRIP=1
 
 %install
 rm -rf $RPM_BUILD_ROOT
+%if %{with_systemd}
+install -d -m 755 $RPM_BUILD_ROOT%{_unitdir}
+%else
 mkdir -p -m755 $RPM_BUILD_ROOT%{_initrddir}
+%endif
 mkdir -p -m755 $RPM_BUILD_ROOT%{_sbindir}
 mkdir -p -m755 $RPM_BUILD_ROOT%{_libdir}/autofs
 mkdir -p -m755 $RPM_BUILD_ROOT%{_mandir}/{man5,man8}
@@ -95,32 +128,57 @@ mkdir -p -m755 $RPM_BUILD_ROOT/etc/sysconfig
 mkdir -p -m755 $RPM_BUILD_ROOT/etc/auto.master.d
 
 make install mandir=%{_mandir} initdir=%{_initrddir} INSTALLROOT=$RPM_BUILD_ROOT
+echo make -C redhat
 make -C redhat
 install -m 755 -d $RPM_BUILD_ROOT/misc
+%if %{with_systemd}
+install -m 644 redhat/autofs.service $RPM_BUILD_ROOT%{_unitdir}/autofs.service
+%else
 install -m 755 redhat/autofs.init $RPM_BUILD_ROOT%{_initrddir}/autofs
+%endif
 install -m 644 redhat/autofs.sysconfig $RPM_BUILD_ROOT/etc/sysconfig/autofs
 
 %clean
 rm -rf $RPM_BUILD_ROOT
 
 %post
+%if %{with_systemd}
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+%else
 /sbin/chkconfig --add autofs
-
-%postun
-if [ $1 -ge 1 ] ; then
-    /sbin/service autofs condrestart > /dev/null 2>&1 || :
-fi
+%endif
 
 %preun
 if [ "$1" = 0 ] ; then
+%if %{with_systemd}
+    /bin/systemctl --no-reload disable autofs.service > /dev/null 2>&1 || :
+    /bin/systemctl stop autofs.service > /dev/null 2>&1 || :
+%else
     /sbin/service autofs stop > /dev/null 2>&1 || :
     /sbin/chkconfig --del autofs
+%endif
+fi
+
+%postun
+%if %{with_systemd}
+/bin/systemctl daemon-reload >/dev/null 2>&1 || :
+if [ $1 -ge 1 ] ; then
+    /bin/systemctl try-restart autofs.service >/dev/null 2>&1 || :
 fi
+%else
+if [ $1 -ge 1 ] ; then
+    /sbin/service autofs condrestart > /dev/null 2>&1 || :
+fi
+%endif
 
 %files
 %defattr(-,root,root,-)
 %doc CREDITS INSTALL COPY* README* patches/* samples/ldap* samples/autofs.schema
+%if %{with_systemd}
+%{_unitdir}/autofs.service
+%else
 %{_initrddir}/autofs
+%endif
 %config(noreplace,missingok) /etc/auto.master
 %config(noreplace,missingok) /etc/auto.misc
 %config(noreplace,missingok) /etc/auto.net
@@ -133,6 +191,14 @@ fi
 %dir /etc/auto.master.d
 
 %changelog
+* Mon Dec 5 2011 Ian Kent <ikent at redhat.com> - 1:5.0.6-5
+- fix ipv6 name lookup check.
+- fix ipv6 rpc calls.
+- fix ipv6 configure check.
+- add piddir to configure.
+- add systemd unit support.
+- fix MNT_DETACH define.
+
 * Mon Dec 5 2011 Ian Kent <ikent at redhat.com> - 1:5.0.6-4
 - fix lsb service name in init script 2 (bz712504).
 


More information about the scm-commits mailing list