summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorRobin H. Johnson <robbat2@gentoo.org>2005-03-15 04:18:38 +0000
committerRobin H. Johnson <robbat2@gentoo.org>2005-03-15 04:18:38 +0000
commit81527e780e8d5d51740a9edc7999106b0bbddde4 (patch)
treea059fb327031dceb8407baedb08d2eef72fd76a8 /net-fs/autofs/files/autofs.rc10
parentMark ~amd64. Closes #85171 (diff)
downloadgentoo-2-81527e780e8d5d51740a9edc7999106b0bbddde4.tar.gz
gentoo-2-81527e780e8d5d51740a9edc7999106b0bbddde4.tar.bz2
gentoo-2-81527e780e8d5d51740a9edc7999106b0bbddde4.zip
Bug #82086 - totally revamp the init script, now supports all daemon options. Also cleanup all usage of unsafe sub-shells.
(Portage version: 2.0.51.19)
Diffstat (limited to 'net-fs/autofs/files/autofs.rc10')
-rw-r--r--net-fs/autofs/files/autofs.rc10236
1 files changed, 236 insertions, 0 deletions
diff --git a/net-fs/autofs/files/autofs.rc10 b/net-fs/autofs/files/autofs.rc10
new file mode 100644
index 000000000000..9e6b167595e9
--- /dev/null
+++ b/net-fs/autofs/files/autofs.rc10
@@ -0,0 +1,236 @@
+#!/sbin/runscript
+# Copyright 1999-2004 Gentoo Foundation
+# Distributed under the terms of the GNU General Public License v2
+# $Header: /var/cvsroot/gentoo-x86/net-fs/autofs/files/autofs.rc10,v 1.1 2005/03/15 04:18:38 robbat2 Exp $
+
+# rc file for automount using a Sun-style "master map".
+# We first look for a local /etc/autofs/auto.master, then a YP
+# map with that name
+
+DAEMON=/usr/sbin/automount
+
+depend() {
+ need localmount
+ use ypbind nfs slapd portmap net
+}
+
+opts="start stop status stats reload restart"
+
+#
+# Check for all maps that are to be loaded
+#
+function getschemes()
+{
+ awk '/^automount:/{ $1="" ; gsub("\\[.*\\]","") ; print $0 }' /etc/nsswitch.conf
+}
+
+function getfilemounts()
+{
+ if [ -f /etc/autofs/auto.master ] ; then
+ sed -e '/^#/d' -e '/^$/d' < /etc/autofs/auto.master
+ fi
+}
+
+function getnismounts()
+{
+ /usr/bin/ypcat -k ${nis_mapname} 2> /dev/null | sed -e '/^#/d' -e '/^$/d'
+}
+
+function getldapmounts()
+{
+ if [ -x /usr/lib/autofs/autofs-ldap-auto-master ]; then
+ /usr/lib/autofs/autofs-ldap-auto-master \
+ -m ${ldap_map_oc} -e ${ldap_entry_oc} \
+ -n ${ldap_map_key} -k ${ldap_entry_key} \
+ -v ${ldap_value} 2> /dev/null
+ fi
+}
+
+function getrawmounts()
+{
+ for scheme in `getschemes` ; do
+ case "$scheme" in
+ files)
+ getfilemounts
+ ;;
+ nis*)
+ getnismounts
+ ;;
+ ldap*)
+ getldapmounts
+ ;;
+ esac
+ done
+}
+
+
+#
+# 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()
+{
+ knownmaps=" "
+ getrawmounts | (
+ while read dir map options
+ do
+ # These checks screen out duplicates and skip over directories
+ # where the map is '-'.
+ if [ ! -z "$dir" -a ! -z "$map" \
+ -a x`echo "$map" | cut -c1` != 'x-' \
+ -a "`echo "$knownmaps" | grep -w $dir/`" = "" ]
+ then
+ # If the options include a -t or --timeout parameter, then
+ # pull those particular options out.
+ # echo DAEMONOPTIONS OPTIONS $daemonoptions $options
+ allopts="$daemonoptions $options"
+ startupoptions=
+
+ # there is no way to get all of these out in a single sed call that I'm aware of :-(
+ opt_timeout="$(echo ${allopts} | sed -n -e '/-t/s/.*--*t\(imeout\)*[[:space:]=]*\([0-9][0-9]*\).*$/--timeout \2/gp')"
+ opt_pidfile="$(echo ${allopts} | sed -n -e '/-p/s/.*--*p\(id-file\)*[[:space:]=]*\([^[:space:]]*\).*$/--pid-file \2/gp')"
+ opt_verbose="$(echo ${allopts} | sed -n -e '/-v/s/.*--*v\(erbose\)*.*$/--verbose/gp')"
+ opt_debug="$(echo ${allopts} | sed -n -e '/-d/s/.*--*d\(ebug\)*.*$/--debug/gp')"
+ opt_ghost="$(echo ${allopts} | sed -n -e '/-g/s/.*--*g\(host\)*.*$/--ghost/gp')"
+
+ startupoptions="${opt_timeout} ${opt_pidfile} ${opt_verbose} ${opt_debug} ${opt_ghost}"
+
+
+ # Other option flags are intended for maps.
+ mapoptions="$(echo ${allopts} | sed \
+ -e '/-t/{s/--*t\(imeout\)*[[:space:]=]*\([0-9][0-9]*\)//g }' \
+ -e '/-p/{s/--*p\(id-file\)*[[:space:]=]*\([^[:space:]]*\)//g }' \
+ -e '/-v/{s/--*v\(erbose\)*//g }' \
+ -e '/-d/{s/--*d\(ebug\)*//g }' \
+ -e '/-g/{s/--*g\(host\)*//g }' \
+ -e 's/^[[:space:]]*//g' \
+ -e 's/[[:space:]]*$//g')"
+
+ # Break up the maptype and map, if the map type is specified
+ maptype="${map/:*}"
+ # Handle degenerate map specifiers
+ if [ "$maptype" = "$map" ] ; then
+ if [ -x "$map" ]; then
+ maptype="program"
+ elif [ -x "/etc/$map" ]; then
+ maptype="program"
+ map=`echo /etc/$map | sed 's^//^/^g'`
+ elif [ -f "$map" ]; then
+ maptype="file"
+ elif [ -f "/etc/$map" ]; then
+ maptype="file"
+ map=`echo /etc/$map | sed 's^//^/^g'`
+ elif [ "$map" = "hesiod" -o "$map" = "userhome" ] ; then
+ maptype="$map"
+ map=
+ elif [ "$map" = "multi" ] ; then
+ maptype="$map"
+ map=
+ else
+ maptype=yp
+ map=`basename $map | sed -e s/^auto_home/auto.home/ -e s/^auto_mnt/auto.mnt/`
+ fi
+ fi
+ map="${map#*:}"
+
+ #echo STARTUPOPTIONS $startupoptions > /tmp/debug
+ #echo DIR $dir >> /tmp/debug
+ #echo MAPTYPE $maptype >> /tmp/debug
+ #echo MAP $map >> /tmp/debug
+ #echo MAPOPTIONS $mapoptions >> /tmp/debug
+ #echo LOCALOPTIONS $localoptions >> /tmp/debug
+
+ echo "$DAEMON $startupoptions $dir $maptype $map $mapoptions $localoptions" | sed -e 's/ / /g' -e 's/ / /g'
+
+ # echo ------------------------
+ fi
+ knownmaps=" $dir/ $knownmaps"
+ done
+ )
+}
+
+
+start() {
+ ebegin "Starting automounter"
+ # Check that maps exist
+ if [ -z "$(getmounts)" ]; then
+ eend 1 "No automount maps defined"
+ exit 1
+ fi
+ # ensure autofs support is loaded
+ grep -q autofs /proc/filesystems || modprobe -q autofs4 || modprobe -q autofs
+ if [ $? -ne 0 ]; then
+ eend 1 "No autofs support available"
+ exit 1
+ fi
+ # Now go
+ getmounts | while read cmd timeout time mnt rest
+ do
+ #FIXME: this works but it really sucks
+ if echo $timeout|grep -v -- '--timeout' >/dev/null ; then
+ rest="$time $mnt $rest"
+ mnt="$timeout"
+ time=""
+ timeout=""
+ fi
+
+ echo -n " $mnt"
+ pidfile=/var/run/autofs`echo $mnt | sed 's/\//./g'`.pid
+ start-stop-daemon --start --pidfile $pidfile --quiet \
+ --exec /usr/sbin/automount -- $timeout $time $mnt $rest
+ #
+ # Automount needs a '--pidfile' or '-p' option.
+ # For now we look for the pid ourself.
+ #
+ ps ax | grep "[0-9]:[0-9][0-9] /usr/sbin/automount $timeout $time \?$mnt" | (
+ read pid rest
+ echo $pid > $pidfile
+ echo "$mnt $rest" >> $pidfile
+ )
+ done
+ echo
+ eend $?
+}
+
+stop() {
+ ebegin "Stopping automounter"
+ start-stop-daemon --stop --quiet --signal 12 --exec /usr/sbin/automount
+ eend $?
+}
+
+stats() {
+ echo "Configured Mount Points:"
+ echo "------------------------"
+ getmounts
+ echo ""
+ echo "Active Mount Points:"
+ echo "--------------------"
+ ps ax|grep "[0-9]:[0-9][0-9] /usr/sbin/automount " | (
+ while read pid tt stat time command; do echo $command; done
+ )
+}
+
+reload() {
+ echo "Reloading automounter: checking for changes ... "
+ TMP=/var/run/autofs.tmp
+ getmounts >$TMP
+ for i in /var/run/autofs.*.pid
+ do
+ pid=`head -n 1 $i 2>/dev/null`
+ [ "$pid" = "" ] && continue
+ command=`tail -n +2 $i`
+ if ! grep -q "^$command" $TMP
+ then
+ echo "Stopping automounter: $command"
+ kill -USR2 $pid
+ fi
+ done
+ rm -f $TMP
+ svc_start
+}
+
+restart() {
+ svc_stop
+ svc_start
+}