[arch-commits] Commit in autofs/trunk (PKGBUILD auto.master auto.misc auto.net autofs)

Andrea Scarpino andrea at archlinux.org
Mon Mar 16 15:13:09 UTC 2009


    Date: Monday, March 16, 2009 @ 11:13:09
  Author: andrea
Revision: 30098

upgpkg: autofs 4.1.4-5

Modified:
  autofs/trunk/PKGBUILD
  autofs/trunk/auto.master
  autofs/trunk/auto.misc
  autofs/trunk/auto.net
  autofs/trunk/autofs

-------------+
 PKGBUILD    |   54 ++++----
 auto.master |    1 
 auto.misc   |    8 -
 auto.net    |    2 
 autofs      |  362 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 5 files changed, 388 insertions(+), 39 deletions(-)

Modified: PKGBUILD
===================================================================
--- PKGBUILD	2009-03-16 14:44:29 UTC (rev 30097)
+++ PKGBUILD	2009-03-16 15:13:09 UTC (rev 30098)
@@ -4,45 +4,47 @@
 # Contributor: Manolis Tzanidakis
 
 pkgname=autofs
-pkgver=5.0.4
-pkgrel=2
+pkgver=4.1.4
+pkgrel=5
 pkgdesc="A kernel-based automounter for Linux."
 arch=('i686' 'x86_64')
-url="http://wiki.autofs.net/FrontPage"
+url="ftp://ftp.kernel.org/pub/linux/daemons/autofs"
 license=('GPL2')
-depends=('libldap' 'libxml2' 'heimdal')
-backup=(etc/autofs/auto.master etc/autofs/auto.misc etc/conf.d/autofs)
-source=("http://www.kernel.org/pub/linux/daemons/${pkgname}/v5/${pkgname}-${pkgver}.tar.bz2"
-	'autofs' 'autofs.conf.d' 'auto.master' 'auto.misc' 'auto.net' 'heimdal.patch')
-md5sums=('2646dde61edd08dd952255558c733c08'
-         'e857b28b8a660602d349a5e21edab9f0'
-         'ddd69346754419faee15fc4c7edeb8b8'
-         '036bb5731400b7b0a89797e949169734'
-         'd8a15ec9186c5c0b36e5cea1e2739e8a'
-         'e4d945d63abc0488a47a5e2a750e8c3b'
-	 '1ee4825e26ad72bfe86acec3d3da5d2a')
+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' '74d102e637e53050ef095f1cbd9d461b')
 
 build() {
   export MAKEFLAGS="-j1"
+
   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 \
-    --without-hesiod
+  sed -i "s:-O3 -fomit-frame-pointer -Wall:${CFLAGS}:" \
+    Makefile.rules
+  sed -i "s:SUBDIRS = lib daemon modules man samples:SUBDIRS = lib daemon modules man:" \
+    Makefile.rules
+  ./configure --prefix=/usr --sysconfdir=/etc/autofs
   make || return 1
   make INSTALLROOT=${pkgdir} install
   
   local conf_file
   for conf_file in auto.{master,misc}; do
-    install -D -m 644 ${srcdir}/$conf_file ${pkgdir}/etc/autofs/$conf_file
+    install -D -m 644 ${srcdir}/$conf_file \
+      ${pkgdir}/etc/autofs/$conf_file
   done
 
-  install -m 755 ${srcdir}/auto.net ${pkgdir}/etc/autofs/auto.net
-  sed -i "s:/etc:/etc/autofs:g" ${pkgdir}/usr/share/man/man5/auto.master.5
+  install -m 755 ${srcdir}/auto.net \
+    ${pkgdir}/etc/autofs/auto.net
+  sed -i "s:/etc:/etc/autofs:g" \
+    ${pkgdir}/usr/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
+  install -D -m 644 ${srcdir}/autofs.conf.d \
+    ${pkgdir}/etc/conf.d/autofs
 }
-# vim: ts=2 sw=2 et ft=sh

Modified: auto.master
===================================================================
--- auto.master	2009-03-16 14:44:29 UTC (rev 30097)
+++ auto.master	2009-03-16 15:13:09 UTC (rev 30098)
@@ -3,4 +3,5 @@
 # mountpoint map options
 # For details of the format look at autofs(5).
 
-/media /etc/autofs/auto.media
\ No newline at end of file
+/var/autofs/misc	/etc/autofs/auto.misc
+/var/autofs/net	  /etc/autofs/auto.net

Modified: auto.misc
===================================================================
--- auto.misc	2009-03-16 14:44:29 UTC (rev 30097)
+++ auto.misc	2009-03-16 15:13:09 UTC (rev 30098)
@@ -2,6 +2,8 @@
 # key [ -mount-options-separated-by-comma ] location
 # Details may be found in the autofs(5) manpage
 
-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
+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

Modified: auto.net
===================================================================
--- auto.net	2009-03-16 14:44:29 UTC (rev 30097)
+++ auto.net	2009-03-16 15:13:09 UTC (rev 30098)
@@ -21,7 +21,7 @@
 # Newer distributions get this right
 SHOWMOUNT="/usr/sbin/showmount --no-headers -e $key"
 
-$SHOWMOUNT | LC_ALL=C sort +0 | \
+$SHOWMOUNT | LC_ALL=C sort -k 1 | \
 	awk -v key="$key" -v opts="$opts" -- '
 	BEGIN		{ ORS=""; first=1 }
 			{ if (first) { print opts; first=0 }; print " \\\n\t" $1, key ":" $1 }

Modified: autofs
===================================================================
--- autofs	2009-03-16 14:44:29 UTC (rev 30097)
+++ autofs	2009-03-16 15:13:09 UTC (rev 30098)
@@ -6,24 +6,365 @@
 # 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
 
-PID=`cat /var/run/autofs-running &> /dev/null`
+# 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`
 case "$1" in
   start)
-    stat_busy "Starting Automounter"
-    [ -z "$PID" ] && /usr/sbin/automount $daemonoptions &> /dev/null &
+    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
     if [ $? -gt 0 ]; then
       stat_fail
     else
       add_daemon autofs
       stat_done
     fi
-    ;;
+  ;;
   stop)
-    stat_busy "Stopping Automounter"
+    stat_busy "Stopping automounter"
     [ ! -z "$PID" ]  && kill $PID &> /dev/null
     if [ $? -gt 0 ]; then
       stat_fail
@@ -31,13 +372,18 @@
       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  




More information about the arch-commits mailing list