From 1f16a5e0fc0039a306726fb56eee75e5699c9db0 Mon Sep 17 00:00:00 2001 From: Cecil Hugh Watson 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 +# $Id: PKGBUILD 36638 2009-04-26 19:00:46Z andrea $ +# Maintainer: Andrea Scarpino +# Contributor: Dale Blount # 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 ' 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 : - type=$maptype - map=`echo $map | cut -f2- -d:` - else - # special handling of maps - case "$map" in - hesiod|userhome) - type=$map - map="" - ;; - ldap) - # / ldap - 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