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 + +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 + +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 + +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 + +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 ], +- [ 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 +-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 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 + +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 + +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 - 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 - 1:5.0.6-4 - fix lsb service name in init script 2 (bz712504).