From 1f16a5e0fc0039a306726fb56eee75e5699c9db0 Mon Sep 17 00:00:00 2001
From: Cecil Hugh Watson <knoppmyth@gmail.com>
Date: Tue, 28 Apr 2009 00:39:35 -0700
Subject: Latest autofs, closes FS# 333.

---
 abs/extra-testing/autofs/PKGBUILD       |  67 +++---
 abs/extra-testing/autofs/auto.master    |   3 +-
 abs/extra-testing/autofs/auto.misc      |   8 +-
 abs/extra-testing/autofs/auto.net       |  29 ---
 abs/extra-testing/autofs/autofs         | 364 +-------------------------------
 abs/extra-testing/autofs/autofs.conf.d  |   3 +-
 abs/extra-testing/autofs/autofs.install |   5 +
 abs/extra-testing/autofs/heimdal.patch  |  34 +++
 8 files changed, 87 insertions(+), 426 deletions(-)
 delete mode 100644 abs/extra-testing/autofs/auto.net
 create mode 100644 abs/extra-testing/autofs/autofs.install
 create mode 100644 abs/extra-testing/autofs/heimdal.patch

diff --git a/abs/extra-testing/autofs/PKGBUILD b/abs/extra-testing/autofs/PKGBUILD
index 1bc5435..ca6abea 100644
--- a/abs/extra-testing/autofs/PKGBUILD
+++ b/abs/extra-testing/autofs/PKGBUILD
@@ -1,48 +1,49 @@
-# $Id: PKGBUILD 356 2008-04-18 22:56:27Z aaron $
-# Maintainer: Dale Blount <dale@archlinux.org>
+# $Id: PKGBUILD 36638 2009-04-26 19:00:46Z andrea $
+# Maintainer: Andrea Scarpino <andrea@archlinux.org>
+# Contributor: Dale Blount <dale@archlinux.org>
 # Contributor: Manolis Tzanidakis
 
 pkgname=autofs
-pkgver=4.1.4
+pkgver=5.0.4
 pkgrel=4
 pkgdesc="A kernel-based automounter for Linux."
-arch=(i686 x86_64)
-url="ftp://ftp.kernel.org/pub/linux/daemons/autofs"
-depends=('libldap')
-backup=(etc/autofs/auto.master etc/conf.d/autofs)
-source=($url/v4/${pkgname}-${pkgver}.tar.bz2
-        ${pkgname}
-        ${pkgname}.conf.d
-        auto.master
-        auto.misc
-        auto.net)
-md5sums=('7e3949114c00665b4636f0c318179657' '80b77182aa957646a2074433d3890518'\
-         'ddd69346754419faee15fc4c7edeb8b8' '0543a0d172eaec300e8d08708440dd4b'\
-         '0be409ef0cdf0255ce701ed4ba9e46b5' 'e4d945d63abc0488a47a5e2a750e8c3b')
+arch=('i686' 'x86_64')
+url="http://wiki.autofs.net/FrontPage"
+license=('GPL2')
+depends=('libldap' 'libxml2' 'heimdal')
+backup=(etc/autofs/auto.master etc/autofs/auto.misc etc/conf.d/autofs)
+install=autofs.install
+source=("http://www.kernel.org/pub/linux/daemons/${pkgname}/v5/${pkgname}-${pkgver}.tar.bz2"
+  'autofs' 'autofs.conf.d' 'auto.master' 'auto.misc'
+  'heimdal.patch')
+md5sums=('2646dde61edd08dd952255558c733c08'
+         'b4984b3161f50cba3d189b0ec594d014'
+         '47f597c870410055e0fdb66103daf928'
+         'a6cefb591e77b31b79dbb7243646c96b'
+         'd8a15ec9186c5c0b36e5cea1e2739e8a'
+         '1ee4825e26ad72bfe86acec3d3da5d2a')
 
 build() {
   export MAKEFLAGS="-j1"
-  cd ${startdir}/src/${pkgname}-${pkgver}
-  /bin/sed -i "s:-O3 -fomit-frame-pointer -Wall:${CFLAGS}:" \
-      Makefile.rules
-  /bin/sed -i "s:SUBDIRS = lib daemon modules man samples:SUBDIRS = lib daemon modules man:" \
-      Makefile.rules
-  ./configure --prefix=/usr --sysconfdir=/etc/autofs
-  /usr/bin/make || return 1
-  /usr/bin/make INSTALLROOT=${startdir}/pkg install
+  cd ${srcdir}/${pkgname}-${pkgver}
+
+  sed -i "s:SUBDIRS = lib daemon modules man samples:SUBDIRS = lib daemon modules man:" Makefile.rules
+  patch -Np1 -i ${srcdir}/heimdal.patch
+
+  ./configure --prefix=/usr \
+    --sysconfdir=/etc/autofs \
+    --with-mapdir=/etc/autofs \
+    --without-hesiod
+  make || return 1
+  make INSTALLROOT=${pkgdir} install
   
   local conf_file
   for conf_file in auto.{master,misc}; do
-    /bin/install -D -m 644 ${startdir}/$conf_file \
-        ${startdir}/pkg/etc/autofs/$conf_file
+    install -D -m 644 ${srcdir}/$conf_file ${pkgdir}/etc/autofs/$conf_file
   done
 
-  /bin/install -m 755 ${startdir}/auto.net \
-      ${startdir}/pkg/etc/autofs/auto.net
-  /bin/sed -i "s:/etc:/etc/autofs:g" \
-      ${startdir}/pkg/usr/man/man5/auto.master.5
-  /bin/install -D -m 755 ${startdir}/autofs ${startdir}/pkg/etc/rc.d/autofs
-  /bin/install -D -m 644 ${startdir}/autofs.conf.d \
-      ${startdir}/pkg/etc/conf.d/autofs
+  sed -i "s:/etc:/etc/autofs:g" ${pkgdir}/usr/share/man/man5/auto.master.5
+  install -D -m 755 ${srcdir}/autofs ${pkgdir}/etc/rc.d/autofs
+  install -D -m 644 ${srcdir}/autofs.conf.d ${pkgdir}/etc/conf.d/autofs
 }
 # vim: ts=2 sw=2 et ft=sh
diff --git a/abs/extra-testing/autofs/auto.master b/abs/extra-testing/autofs/auto.master
index faa42c9..be4ea73 100644
--- a/abs/extra-testing/autofs/auto.master
+++ b/abs/extra-testing/autofs/auto.master
@@ -3,5 +3,4 @@
 # mountpoint map options
 # For details of the format look at autofs(5).
 
-/var/autofs/misc	/etc/autofs/auto.misc
-/var/autofs/net	  /etc/autofs/auto.net
+#/media /etc/autofs/auto.media
diff --git a/abs/extra-testing/autofs/auto.misc b/abs/extra-testing/autofs/auto.misc
index e7714bd..5691566 100644
--- a/abs/extra-testing/autofs/auto.misc
+++ b/abs/extra-testing/autofs/auto.misc
@@ -2,8 +2,6 @@
 # key [ -mount-options-separated-by-comma ] location
 # Details may be found in the autofs(5) manpage
 
-kernel		  -ro			        ftp.kernel.org:/pub/linux
-boot		    -fstype=ext2		              :/dev/hda1
-removable	  -fstype=ext2		              :/dev/hdd
-cd		      -fstype=iso9660,ro	          :/dev/hdc
-floppy		  -fstype=auto		              :/dev/fd0
+cdrom -fstype=iso9660,ro,nodev,nosuid :/dev/cdrom
+floppy -fstype=auto,async,nodev,nosuid,umask=000 :/dev/fl
+usbstick -fstype=auto,async,nodev,nosuid,umask=000 :/dev/sda1
diff --git a/abs/extra-testing/autofs/auto.net b/abs/extra-testing/autofs/auto.net
deleted file mode 100644
index 20861d1..0000000
--- a/abs/extra-testing/autofs/auto.net
+++ /dev/null
@@ -1,29 +0,0 @@
-#!/bin/sh
-
-# $Id: auto.net,v 1.1 2003/11/15 15:40:14 manolis Exp $
-
-# Look at what a host is exporting to determine what we can mount.
-# This is very simple, but it appears to work surprisingly well
-
-key="$1"
-
-# add "nosymlink" here if you want to suppress symlinking local filesystems
-# Note: "nonstrict" is now set by default, remove it if you don't want it.
-opts="-fstype=nfs,hard,intr,nodev,nosuid,nonstrict"
-
-# Showmount comes in a number of names and varieties.  "showmount" is
-# typically an older version which accepts the '--no-headers' flag
-# but ignores it.  "kshowmount" is the newer version installed with knfsd,
-# which both accepts and acts on the '--no-headers' flag.
-#SHOWMOUNT="kshowmount --no-headers -e $key"
-#SHOWMOUNT="showmount -e $key | tail +2"
-
-# Newer distributions get this right
-SHOWMOUNT="/usr/sbin/showmount --no-headers -e $key"
-
-$SHOWMOUNT | LC_ALL=C sort +0 | \
-	awk -v key="$key" -v opts="$opts" -- '
-	BEGIN		{ ORS=""; first=1 }
-			{ if (first) { print opts; first=0 }; print " \\\n\t" $1, key ":" $1 }
-	END		{ if (!first) print "\n"; else exit 1 }
-	'
diff --git a/abs/extra-testing/autofs/autofs b/abs/extra-testing/autofs/autofs
index 83b0303..59ea4f5 100644
--- a/abs/extra-testing/autofs/autofs
+++ b/abs/extra-testing/autofs/autofs
@@ -6,384 +6,38 @@
 # source application-specific settings
 [ -f /etc/conf.d/autofs ] && . /etc/conf.d/autofs
 
-DAEMON=/usr/sbin/automount
-
 if [ ! -z "$TIMEOUT" ]; then
   daemonoptions="--timeout=$TIMEOUT $daemonoptions"
 fi
 
-# Extract the schemes from /etc/nsswitch.conf
-# (function derived from RedHat)
-function getschemes()
-{
-  grep ^automount: /etc/nsswitch.conf | sed -e 's/^.*://' -e 's/\[.*\]/ /g'
-}
-
-# Process the schemes found in /etc/nsswitch.conf
-# (function derived from RedHat, with some modifications)
-function getrawmounts()
-{
-  for scheme in `getschemes` ; do
-    case "$scheme" in
-      files)
-        if [ -z "$filescheme" ] ; then
-          if getmounts_file /etc/autofs/auto.master; then
-            filescheme=1  # success
-          else
-            filescheme=0  # failure
-          fi
-          export filescheme
-        fi
-      ;;
-      nis)
-        if [ -z "$nisscheme" ] ; then
-          if getnismounts auto.master; then
-            nisscheme=1  # success
-          else
-            nisscheme=0  # failure
-          fi
-          export nisscheme
-        fi
-      ;;
-      ldap*)
-        if [ -z "$ldapscheme" ] ; then
-          if getldapmounts; then
-            ldapscheme=1  # success
-          else
-            ldapscheme=0  # failure
-          fi
-        export ldapscheme
-        fi
-      ;;
-    esac
-  done
-
-  if [ -z "$filescheme" -a -z "$nisscheme" -a -z "$ldapscheme" ]; then
-    # nothing configured in /etc/nsswitch.conf, fall back to old behaviour
-    if ! getmounts_file /etc/autofs/auto.master; then
-      if ! getnismounts auto.master; then
-        if ! getldapmounts; then
-          echo "no autofs mounts configured!" 1>&2
-	fi
-      fi
-    fi
-  else
-    if [ ! \( "$filescheme" == "1" -o "$nisscheme" == "1" -o "$ldapscheme" == "1" \) ]; then
-      # all schemes found in /etc/nsswitch.conf have failed
-      echo "no autofs mounts configured!" 1>&2
-    fi
-  fi
-}
-
-# This function will build a list of automount commands to execute in
-# order to activate all the mount points. It is used to figure out
-# the difference of automount points in case of a reload
-function getmounts()
-{
-  getrawmounts
-}
-
-function getmounts_file()
-{
-  # Check for local maps to be loaded
-  local map="$1"
-  shift
-  if [ -f "$map" ]; then
-    cat "$map" | sed -e '/^#/d' -e '/^$/d' | process_master_file
-  else
-    return 1
-  fi
-}
-
-function process_master_file()
-{
-  local line_options
-  local daemon_options
-  line_options="$@"  # from `+auto.master <line_options>' in /etc/autofs/auto.master
-
-  while read dir map first_option options; do
-    all_options="$first_option $options"
-
-  case "$dir" in
-    +*)
-      # note: $map contains options instead of a map
-      getnismounts "${dir/+/}" "$line_options" "$map" "$all_options"
-      continue;
-    ;;
-    '/-')
-      # ignore (not supported) direct maps
-      continue;
-    ;;
-  esac
-
-  if [ ! -z "$dir" -a ! -z "$map" -a x`echo "$map" | cut -c1` != 'x-' ]; then
-    type=""
-    # Break up the maptype and map, if the map type is specified
-    maptype=`echo $map | cut -f1 -d:`
-    if [ "$maptype" != "$map" ]; then
-      # map has form <maptype>:<map>
-      type=$maptype
-      map=`echo $map | cut -f2- -d:`
-    else
-    # special handling of maps
-    case "$map" in
-      hesiod|userhome)
-	type=$map
-	map=""
-      ;;
-      ldap)
-        # /<mountpoint> ldap <ldap data> <options>
-        type=ldap
-      
-        # extract LDAP data
-        map="$first_option"
-        all_options=$options
-      ;;
-      /*)
-        # map is absolute path
-	if [ -x $map ]; then
-          type=program
-	elif [ -f $map ]; then
-          type=file
-	else
-        # invalid absolute path, ignoring
-          type=""
-	fi
-      ;;
-      !*)
-	# map is executable file
- 	type=program
-	map="${map/!/}"
-      ;;
-      *)
-        # map is relative path or empty
-        if [ ! -z "$map" ]; then
-	  # map is relative path
-          if [ -x /etc/autofs/$map ]; then
-            type=program
-	    map=/etc/autofs/$map
-	  elif [ -f /etc/autofs/$map ]; then
-	    type=file
-	    map=/etc/autofs/$map
-	  else
-	    type=yp
-	  fi
-	else
-	  # map is empty, ignoring
-	  type=""
-	fi
-      ;;
-    esac
-    fi
-
-    if [ "$type" ]; then
-      options="$line_options $all_options"
-
-      daemon_options=`munge_options daemon $daemonoptions $options`
-      options=`munge_options mount $options`
-
-      echo "$DAEMON $daemon_options -- $dir $type $map $localoptions $options" | sed -e 's/  */ /g'
-    fi
-  fi
-  done
-}
-
-function getnismounts()
-{
-  # Check for YellowPage maps to be loaded
-  local map="$1"
-  shift
-  if [ -e /usr/bin/ypcat ] && [ `ypcat -k "$map" 2>/dev/null | wc -l` -gt 0 ]; then
-    # exclude references to other nis maps (avoid self-references -> inf. loop)
-    # - e.g. a map may look like:
-    #   $ ypcat -k auto.master
-    #   +auto_master             # <- = auto.master = erk!
-    #   /net -hosts             -nosuid,nobrowse
-    #   /home auto_home -nobrowse
-    ypcat -k "$map" | grep -v '^+' | process_master_file "$@"
-  else
-    return 1
-  fi
-}
-
-function getldapmounts() {
-  if [ ! -x /usr/bin/ldapsearch -o -z "$LDAPURI" -o -z "$LDAPBASE" ]; then
-    return 1
-  fi    
-
-  # TODO: Doesn't yet work for LDIF output where lines are continued on the
-  #       next line (starting with space or tab). (See ldif(5))
-
-  ldapsearch -LLL -H $LDAPURI -b $LDAPBASE -x \
-    '(objectClass=automount)' cn automountInformation 2>/dev/null \
-    | while read attr val; do
-  case "$attr" in
-    dn:) 
-      node=""
-      args=""
-    ;;
-    cn:)
-      node=$val
-    ;;
-      automountInformation:)
-      args=$val
-    ;;
-    *)
-    ;;
-  esac
-  if [ -n "$node" -a -n "$args" ]; then
-    echo "$node $args" | process_master_file "$@"
-    node=""
-    args=""
-  fi
-  done
-}
-
-# List active mounts
-function active()
-{
-  ps ax|grep "[0-9]:[0-9][0-9] $DAEMON " |
-    while read pid tt stat time command; do
-      echo $command
-    done
-}
-
-# Status lister.
-function status()
-{
-  echo "Configured Mount Points:"
-  echo "------------------------"
-  getmounts | sed 's/ -- / /'
-  echo ""
-  echo "Active Mount Points:"
-  echo "--------------------"
-  active
-}
-
-function munge_options()
-{
-  local which="$1"
-  shift
-
-  o="$@"
-  # bring `timeout' option in suitable format
-  o=`echo "$o" | sed -e 's/\(\(-\|, *\)t\(imeout\)\?\) \+/\1=/g'`
-  # remove dashes in front of options
-  o=`echo "$o" | sed -e 's/^-\+//' -e 's/ -\+/ /' -e 's/,-\+/,/g'`
-
-  echo "$o" | awk -v which="$which" '
-BEGIN {
-  RS="[, \n]"
-  FS="="
-  daemon_opts[ "timeout" ] = "timeout"
-  daemon_opts[ "t" ] = "timeout"
-}
-{
-  if ( $0 ~ /^$/ )
-    next
-  if ( $1 in daemon_opts ) {
-    daemon[ daemon_opts[ $1 ] ] = $2
-    } else if ($1 ~ /^D.+/) {
-      defines[ $1 ] = $2
-    } else {
-  mount[NR] = $0
-  }
-}
-END {
-  if ( which ~ "^daemon$" ) {
-    if ( "timeout" in daemon ) {
-      printf "--timeout=%s\n", daemon["timeout"]
-    }
-  } else {
-    for ( a in defines ) {
-      printf "-%s=%s ", a, defines[a]
-    }
-    for ( a in mount ) {
-      if ( length( out ) )
-        out=out "," mount[a]
-      else
-	out=mount[a]
-    }
-    printf "%s\n", out
-  }
-}
-'
-}
-
-function get_command_from_pid()
-{
-  ps ax | grep "[0-9]:[0-9][0-9] $DAEMON " | (
-    while read pid tt stat time command; do
-      if [ "$pid" = "$1" ] ; then
-        echo `echo "$command" | sed 's/--pid-file.*\.pid/ /'`
-	return 0
-      fi
-    done
-    )
-
-  return 0
-}
-
-# return true if at least one pid is alive
-function alive()
-{
-  if [ -z "$*" ]; then
-    return 1
-  fi
-  for i in $*; do
-    if kill -0 $i 2> /dev/null; then
-      return 0
-    fi
-  done
-
-  return 1
-}
-
-# Start the fun :)
-PID=`pidof -o %PPID /usr/sbin/automount`
+PID=`cat /var/run/autofs-running 2> /dev/null`
 case "$1" in
   start)
-    stat_busy "Starting automounter"
-    getmounts | while read cmd args; do
-      opt=${args%%-- *}
-      rest=${args#*-- }
-      mnt=${rest%% *}
-      rest=${rest#* }
-      echo -n " $mnt"
-      if [ ! -d /var/run/autofs ]; then
-        mkdir /var/run/autofs
-      fi
-      pidfile=/var/run/autofs/`echo $mnt | sed 's,_,__,g;s,/,_:,g'`.pid
-      $DAEMON $daemonoptions --pid-file=$pidfile $opt $mnt $rest
-    done
+    stat_busy "Starting Automounter"
+    [ -z "$PID" ] && /usr/sbin/automount $daemonoptions &> /dev/null
     if [ $? -gt 0 ]; then
       stat_fail
     else
       add_daemon autofs
       stat_done
     fi
-  ;;
+    ;;
   stop)
-    stat_busy "Stopping automounter"
-    [ ! -z "$PID" ]  && kill $PID &> /dev/null
+    stat_busy "Stopping Automounter"
+    [ ! -z "$PID" ] && kill $PID &> /dev/null
     if [ $? -gt 0 ]; then
       stat_fail
     else
       rm_daemon autofs
       stat_done
     fi
-  ;;
+    ;;
   restart)
     $0 stop
     sleep 1
     $0 start
-  ;;
-  status)
-    status
-  ;;
+    ;;
   *)
     echo "usage: $0 {start|stop|restart}"  
-  ;;
 esac
-
-exit 0  
+exit 0
diff --git a/abs/extra-testing/autofs/autofs.conf.d b/abs/extra-testing/autofs/autofs.conf.d
index 435665d..bc82491 100644
--- a/abs/extra-testing/autofs/autofs.conf.d
+++ b/abs/extra-testing/autofs/autofs.conf.d
@@ -1,5 +1,4 @@
-# e.g. localoptions='rsize=8192,wsize=8192'
-localoptions=''
+#localoptions='rsize=8192,wsize=8192'
 
 # e.g. --timeout=60
 daemonoptions=''
diff --git a/abs/extra-testing/autofs/autofs.install b/abs/extra-testing/autofs/autofs.install
new file mode 100644
index 0000000..61120bb
--- /dev/null
+++ b/abs/extra-testing/autofs/autofs.install
@@ -0,0 +1,5 @@
+post_install(){
+	echo "########################################################"
+	echo "In autofs5 --ghost option isn't valid. In order to start"
+	echo "autofs you must remove it from your /etc/conf.d/autofs. "
+}
diff --git a/abs/extra-testing/autofs/heimdal.patch b/abs/extra-testing/autofs/heimdal.patch
new file mode 100644
index 0000000..c49b1fd
--- /dev/null
+++ b/abs/extra-testing/autofs/heimdal.patch
@@ -0,0 +1,34 @@
+--- autofs-5.0.4/modules/cyrus-sasl.c~	2009-01-11 17:18:55.000000000 +0100
++++ autofs-5.0.4/modules/cyrus-sasl.c	2009-01-11 17:18:55.000000000 +0100
+@@ -66,6 +66,15 @@
+ #endif
+ #endif
+ 
++/**
++ * The type of a principal is different for MIT Krb5 and Heimdal.
++ * These macros are provided by Heimdal, and introduced here for MIT.
++ */
++#ifndef krb5_realm_length
++#define krb5_realm_length(r) ((r).length)
++#define krb5_realm_data(r) ((r).data)
++#endif
++
+ /*
+  *  Once a krb5 credentials cache is setup, we need to set the KRB5CCNAME
+  *  environment variable so that the library knows where to find it.
+@@ -451,11 +460,11 @@
+ 
+ 	/* setup a principal for the ticket granting service */
+ 	ret = krb5_build_principal_ext(ctxt->krb5ctxt, &tgs_princ,
+-		krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)->length,
+-		krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)->data,
++		krb5_realm_length(*krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)),
++		krb5_realm_data(*krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)),
+ 		strlen(KRB5_TGS_NAME), KRB5_TGS_NAME,
+-		krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)->length,
+-		krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)->data,
++		krb5_realm_length(*krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)),
++		krb5_realm_data(*krb5_princ_realm(ctxt->krb5ctxt, krb5_client_princ)),
+ 		0);
+ 	if (ret) {
+ 		error(logopt,
-- 
cgit v0.12