All of lore.kernel.org
 help / color / mirror / Atom feed
* module development
@ 2007-02-27 22:09 Jordi Prats
  2007-02-28  2:00 ` Ian Kent
  2007-02-28 18:46 ` Jim Carter
  0 siblings, 2 replies; 8+ messages in thread
From: Jordi Prats @ 2007-02-27 22:09 UTC (permalink / raw)
  To: autofs

Hi all,
I'm new to this list. I need to develop a module for autofs for a custom
fs type, but I'm not really familiar with autofs. I'm supposing to do
this I need to do a module like modules/mount_generic.c but with my
custom stuff. For the mounting process it's all right, but to umount the
fs I also need to do some operations.

There isn't any hook to do my custom operations before or after (in my
cas doesn't matter) umounting it?

I'm sorry if this a simple or trivial question, but I didn't found how
to do this as a module.

Thank you all,
Jordi

-- 
......................................................................
        __
       / /          Jordi Prats Català
 C E / S / C A      Departament de Sistemes
     /_/            Centre de Supercomputació de Catalunya

 Gran Capità, 2-4 (Edifici Nexus) · 08034 Barcelona
 T. 93 205 6464 · F.  93 205 6979 · jprats@cesca.es
......................................................................
pgp:0x5D0D1321
......................................................................

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: module development
  2007-02-27 22:09 module development Jordi Prats
@ 2007-02-28  2:00 ` Ian Kent
  2007-02-28 14:34   ` Jordi Prats
  2007-02-28 18:46 ` Jim Carter
  1 sibling, 1 reply; 8+ messages in thread
From: Ian Kent @ 2007-02-28  2:00 UTC (permalink / raw)
  To: Jordi Prats; +Cc: autofs

On Tue, 2007-02-27 at 23:09 +0100, Jordi Prats wrote:
> Hi all,
> I'm new to this list. I need to develop a module for autofs for a custom
> fs type, but I'm not really familiar with autofs. I'm supposing to do
> this I need to do a module like modules/mount_generic.c but with my
> custom stuff. For the mounting process it's all right, but to umount the
> fs I also need to do some operations.
> 
> There isn't any hook to do my custom operations before or after (in my
> cas doesn't matter) umounting it?
> 
> I'm sorry if this a simple or trivial question, but I didn't found how
> to do this as a module.

Your right, at this stage there isn't an entry point for the umount
operation.

Ian

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: module development
  2007-02-28  2:00 ` Ian Kent
@ 2007-02-28 14:34   ` Jordi Prats
  2007-03-01  7:48     ` Ian Kent
  0 siblings, 1 reply; 8+ messages in thread
From: Jordi Prats @ 2007-02-28 14:34 UTC (permalink / raw)
  To: autofs

[-- Attachment #1: Type: text/plain, Size: 1580 bytes --]

Hi all,
I have modified autofs's source code to create an entry point for the 
umount operation. Here I attach a patch for autofs-4.1.4

This patch will allow to create a custom umount operation. In my case I 
need to perform an operation before mounting the fs and after. So, I 
think this could help others.

What I need to do to contribute this code?

Thank you,

-- 
......................................................................
         __
        / /          Jordi Prats
  C E / S / C A      Dept. de Sistemes
      /_/            Centre de Supercomputació de Catalunya

  Gran Capità, 2-4 (Edifici Nexus) · 08034 Barcelona
  T. 93 205 6464 · F.  93 205 6979 · jprats@cesca.es
...................................................................... 



Ian Kent wrote:
> On Tue, 2007-02-27 at 23:09 +0100, Jordi Prats wrote:
>   
>> Hi all,
>> I'm new to this list. I need to develop a module for autofs for a custom
>> fs type, but I'm not really familiar with autofs. I'm supposing to do
>> this I need to do a module like modules/mount_generic.c but with my
>> custom stuff. For the mounting process it's all right, but to umount the
>> fs I also need to do some operations.
>>
>> There isn't any hook to do my custom operations before or after (in my
>> cas doesn't matter) umounting it?
>>
>> I'm sorry if this a simple or trivial question, but I didn't found how
>> to do this as a module.
>>     
>
> Your right, at this stage there isn't an entry point for the umount
> operation.
>
> Ian
>
>
>
>
>   



[-- Attachment #2: patch-umount --]
[-- Type: text/plain, Size: 101058 bytes --]

diff -Naur autofs-4.1.4/config.log autofs-modificat/config.log
--- autofs-4.1.4/config.log	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/config.log	2007-02-28 10:46:55.000000000 +0100
@@ -0,0 +1,537 @@
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+
+It was created by configure, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  $ ./configure 
+
+## --------- ##
+## Platform. ##
+## --------- ##
+
+hostname = inf12
+uname -m = i686
+uname -r = 2.6.19-1.2911.fc6xen
+uname -s = Linux
+uname -v = #1 SMP Sat Feb 10 16:09:50 EST 2007
+
+/usr/bin/uname -p = unknown
+/bin/uname -X     = unknown
+
+/bin/arch              = i686
+/usr/bin/arch -k       = unknown
+/usr/convex/getsysinfo = unknown
+hostinfo               = unknown
+/bin/machine           = unknown
+/usr/bin/oslevel       = unknown
+/bin/universe          = unknown
+
+PATH: /usr/kerberos/sbin
+PATH: /usr/kerberos/bin
+PATH: /usr/local/sbin
+PATH: /usr/local/bin
+PATH: /sbin
+PATH: /bin
+PATH: /usr/sbin
+PATH: /usr/bin
+PATH: /root/bin
+
+
+## ----------- ##
+## Core tests. ##
+## ----------- ##
+
+configure:1307: checking for binaries in
+configure:1309: result: /usr/bin:/bin:/usr/sbin:/sbin
+configure:1319: checking for mount
+configure:1337: found /bin/mount
+configure:1349: result: /bin/mount
+configure:1378: checking for umount
+configure:1396: found /bin/umount
+configure:1408: result: /bin/umount
+configure:1437: checking for fsck.ext2
+configure:1455: found /sbin/fsck.ext2
+configure:1467: result: /sbin/fsck.ext2
+configure:1495: checking for fsck.ext3
+configure:1513: found /sbin/fsck.ext3
+configure:1525: result: /sbin/fsck.ext3
+configure:1555: checking if mount accepts the -s option
+configure:1562: result: yes
+configure:1619: checking for gcc
+configure:1635: found /usr/bin/gcc
+configure:1645: result: gcc
+configure:1889: checking for C compiler version
+configure:1892: gcc --version </dev/null >&5
+gcc (GCC) 4.1.1 20070105 (Red Hat 4.1.1-51)
+Copyright (C) 2006 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+configure:1895: $? = 0
+configure:1897: gcc -v </dev/null >&5
+Using built-in specs.
+Target: i386-redhat-linux
+Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
+Thread model: posix
+gcc version 4.1.1 20070105 (Red Hat 4.1.1-51)
+configure:1900: $? = 0
+configure:1902: gcc -V </dev/null >&5
+gcc: '-V' option must have argument
+configure:1905: $? = 1
+configure:1928: checking for C compiler default output file name
+configure:1931: gcc    conftest.c  >&5
+configure:1934: $? = 0
+configure:1980: result: a.out
+configure:1985: checking whether the C compiler works
+configure:1991: ./a.out
+configure:1994: $? = 0
+configure:2011: result: yes
+configure:2018: checking whether we are cross compiling
+configure:2020: result: no
+configure:2023: checking for suffix of executables
+configure:2025: gcc -o conftest    conftest.c  >&5
+configure:2028: $? = 0
+configure:2053: result: 
+configure:2059: checking for suffix of object files
+configure:2080: gcc -c   conftest.c >&5
+configure:2083: $? = 0
+configure:2105: result: o
+configure:2109: checking whether we are using the GNU C compiler
+configure:2133: gcc -c   conftest.c >&5
+configure:2139: $? = 0
+configure:2143: test -z 
+			 || test ! -s conftest.err
+configure:2146: $? = 0
+configure:2149: test -s conftest.o
+configure:2152: $? = 0
+configure:2165: result: yes
+configure:2171: checking whether gcc accepts -g
+configure:2192: gcc -c -g  conftest.c >&5
+configure:2198: $? = 0
+configure:2202: test -z 
+			 || test ! -s conftest.err
+configure:2205: $? = 0
+configure:2208: test -s conftest.o
+configure:2211: $? = 0
+configure:2222: result: yes
+configure:2239: checking for gcc option to accept ANSI C
+configure:2309: gcc  -c -g -O2  conftest.c >&5
+configure:2315: $? = 0
+configure:2319: test -z 
+			 || test ! -s conftest.err
+configure:2322: $? = 0
+configure:2325: test -s conftest.o
+configure:2328: $? = 0
+configure:2346: result: none needed
+configure:2364: gcc -c -g -O2  conftest.c >&5
+conftest.c:2: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'me'
+configure:2370: $? = 1
+configure: failed program was:
+| #ifndef __cplusplus
+|   choke me
+| #endif
+configure:2504: checking for yp_match in -lnsl
+configure:2534: gcc -o conftest -g -O2   conftest.c -lnsl   >&5
+configure:2540: $? = 0
+configure:2544: test -z 
+			 || test ! -s conftest.err
+configure:2547: $? = 0
+configure:2550: test -s conftest
+configure:2553: $? = 0
+configure:2566: result: yes
+configure:2574: checking for res_query in -lresolv
+configure:2604: gcc -o conftest -g -O2   conftest.c -lresolv   >&5
+configure:2610: $? = 0
+configure:2614: test -z 
+			 || test ! -s conftest.err
+configure:2617: $? = 0
+configure:2620: test -s conftest
+configure:2623: $? = 0
+configure:2636: result: yes
+configure:2672: checking for hes_resolve in -lhesiod
+configure:2702: gcc -o conftest -g -O2   conftest.c -lhesiod -lresolv  >&5
+configure:2708: $? = 0
+configure:2712: test -z 
+			 || test ! -s conftest.err
+configure:2715: $? = 0
+configure:2718: test -s conftest
+configure:2721: $? = 0
+configure:2734: result: yes
+configure:2753: checking how to run the C preprocessor
+configure:2788: gcc -E  conftest.c
+configure:2794: $? = 0
+configure:2826: gcc -E  conftest.c
+conftest.c:18:28: error: ac_nonexistent.h: No such file or directory
+configure:2832: $? = 1
+configure: failed program was:
+| /* confdefs.h.  */
+| 
+| #define PACKAGE_NAME ""
+| #define PACKAGE_TARNAME ""
+| #define PACKAGE_VERSION ""
+| #define PACKAGE_STRING ""
+| #define PACKAGE_BUGREPORT ""
+| #define HAVE_MOUNT 1
+| #define PATH_MOUNT "/bin/mount"
+| #define HAVE_UMOUNT 1
+| #define PATH_UMOUNT "/bin/umount"
+| #define HAVE_E2FSCK 1
+| #define PATH_E2FSCK "/sbin/fsck.ext2"
+| #define HAVE_E3FSCK 1
+| #define PATH_E3FSCK "/sbin/fsck.ext3"
+| #define HAVE_SLOPPY_MOUNT 1
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:2871: result: gcc -E
+configure:2895: gcc -E  conftest.c
+configure:2901: $? = 0
+configure:2933: gcc -E  conftest.c
+conftest.c:18:28: error: ac_nonexistent.h: No such file or directory
+configure:2939: $? = 1
+configure: failed program was:
+| /* confdefs.h.  */
+| 
+| #define PACKAGE_NAME ""
+| #define PACKAGE_TARNAME ""
+| #define PACKAGE_VERSION ""
+| #define PACKAGE_STRING ""
+| #define PACKAGE_BUGREPORT ""
+| #define HAVE_MOUNT 1
+| #define PATH_MOUNT "/bin/mount"
+| #define HAVE_UMOUNT 1
+| #define PATH_UMOUNT "/bin/umount"
+| #define HAVE_E2FSCK 1
+| #define PATH_E2FSCK "/sbin/fsck.ext2"
+| #define HAVE_E3FSCK 1
+| #define PATH_E3FSCK "/sbin/fsck.ext3"
+| #define HAVE_SLOPPY_MOUNT 1
+| /* end confdefs.h.  */
+| #include <ac_nonexistent.h>
+configure:2983: checking for egrep
+configure:2993: result: grep -E
+configure:2998: checking for ANSI C header files
+configure:3023: gcc -c -g -O2  conftest.c >&5
+configure:3029: $? = 0
+configure:3033: test -z 
+			 || test ! -s conftest.err
+configure:3036: $? = 0
+configure:3039: test -s conftest.o
+configure:3042: $? = 0
+configure:3131: gcc -o conftest -g -O2   conftest.c  >&5
+conftest.c: In function 'main':
+conftest.c:35: warning: incompatible implicit declaration of built-in function 'exit'
+configure:3134: $? = 0
+configure:3136: ./conftest
+configure:3139: $? = 0
+configure:3154: result: yes
+configure:3178: checking for sys/types.h
+configure:3194: gcc -c -g -O2  conftest.c >&5
+configure:3200: $? = 0
+configure:3204: test -z 
+			 || test ! -s conftest.err
+configure:3207: $? = 0
+configure:3210: test -s conftest.o
+configure:3213: $? = 0
+configure:3224: result: yes
+configure:3178: checking for sys/stat.h
+configure:3194: gcc -c -g -O2  conftest.c >&5
+configure:3200: $? = 0
+configure:3204: test -z 
+			 || test ! -s conftest.err
+configure:3207: $? = 0
+configure:3210: test -s conftest.o
+configure:3213: $? = 0
+configure:3224: result: yes
+configure:3178: checking for stdlib.h
+configure:3194: gcc -c -g -O2  conftest.c >&5
+configure:3200: $? = 0
+configure:3204: test -z 
+			 || test ! -s conftest.err
+configure:3207: $? = 0
+configure:3210: test -s conftest.o
+configure:3213: $? = 0
+configure:3224: result: yes
+configure:3178: checking for string.h
+configure:3194: gcc -c -g -O2  conftest.c >&5
+configure:3200: $? = 0
+configure:3204: test -z 
+			 || test ! -s conftest.err
+configure:3207: $? = 0
+configure:3210: test -s conftest.o
+configure:3213: $? = 0
+configure:3224: result: yes
+configure:3178: checking for memory.h
+configure:3194: gcc -c -g -O2  conftest.c >&5
+configure:3200: $? = 0
+configure:3204: test -z 
+			 || test ! -s conftest.err
+configure:3207: $? = 0
+configure:3210: test -s conftest.o
+configure:3213: $? = 0
+configure:3224: result: yes
+configure:3178: checking for strings.h
+configure:3194: gcc -c -g -O2  conftest.c >&5
+configure:3200: $? = 0
+configure:3204: test -z 
+			 || test ! -s conftest.err
+configure:3207: $? = 0
+configure:3210: test -s conftest.o
+configure:3213: $? = 0
+configure:3224: result: yes
+configure:3178: checking for inttypes.h
+configure:3194: gcc -c -g -O2  conftest.c >&5
+configure:3200: $? = 0
+configure:3204: test -z 
+			 || test ! -s conftest.err
+configure:3207: $? = 0
+configure:3210: test -s conftest.o
+configure:3213: $? = 0
+configure:3224: result: yes
+configure:3178: checking for stdint.h
+configure:3194: gcc -c -g -O2  conftest.c >&5
+configure:3200: $? = 0
+configure:3204: test -z 
+			 || test ! -s conftest.err
+configure:3207: $? = 0
+configure:3210: test -s conftest.o
+configure:3213: $? = 0
+configure:3224: result: yes
+configure:3178: checking for unistd.h
+configure:3194: gcc -c -g -O2  conftest.c >&5
+configure:3200: $? = 0
+configure:3204: test -z 
+			 || test ! -s conftest.err
+configure:3207: $? = 0
+configure:3210: test -s conftest.o
+configure:3213: $? = 0
+configure:3224: result: yes
+configure:3246: checking rpcsvc/nis.h usability
+configure:3258: gcc -c -g -O2  conftest.c >&5
+configure:3264: $? = 0
+configure:3268: test -z 
+			 || test ! -s conftest.err
+configure:3271: $? = 0
+configure:3274: test -s conftest.o
+configure:3277: $? = 0
+configure:3287: result: yes
+configure:3291: checking rpcsvc/nis.h presence
+configure:3301: gcc -E  conftest.c
+configure:3307: $? = 0
+configure:3327: result: yes
+configure:3362: checking for rpcsvc/nis.h
+configure:3369: result: yes
+configure:3405: checking for ldap_init in -lldap
+configure:3435: gcc -o conftest -g -O2   conftest.c -lldap -llber -lresolv   >&5
+configure:3441: $? = 0
+configure:3445: test -z 
+			 || test ! -s conftest.err
+configure:3448: $? = 0
+configure:3451: test -s conftest
+configure:3454: $? = 0
+configure:3467: result: yes
+configure:3529: checking for gcc
+configure:3555: result: gcc
+configure:3799: checking for C compiler version
+configure:3802: gcc --version </dev/null >&5
+gcc (GCC) 4.1.1 20070105 (Red Hat 4.1.1-51)
+Copyright (C) 2006 Free Software Foundation, Inc.
+This is free software; see the source for copying conditions.  There is NO
+warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
+
+configure:3805: $? = 0
+configure:3807: gcc -v </dev/null >&5
+Using built-in specs.
+Target: i386-redhat-linux
+Configured with: ../configure --prefix=/usr --mandir=/usr/share/man --infodir=/usr/share/info --enable-shared --enable-threads=posix --enable-checking=release --with-system-zlib --enable-__cxa_atexit --disable-libunwind-exceptions --enable-libgcj-multifile --enable-languages=c,c++,objc,obj-c++,java,fortran,ada --enable-java-awt=gtk --disable-dssi --enable-plugin --with-java-home=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre --with-cpu=generic --host=i386-redhat-linux
+Thread model: posix
+gcc version 4.1.1 20070105 (Red Hat 4.1.1-51)
+configure:3810: $? = 0
+configure:3812: gcc -V </dev/null >&5
+gcc: '-V' option must have argument
+configure:3815: $? = 1
+configure:3818: checking whether we are using the GNU C compiler
+configure:3874: result: yes
+configure:3880: checking whether gcc accepts -g
+configure:3931: result: yes
+configure:3948: checking for gcc option to accept ANSI C
+configure:4055: result: none needed
+configure:4073: gcc -c -g -O2  conftest.c >&5
+conftest.c:2: error: expected '=', ',', ';', 'asm' or '__attribute__' before 'me'
+configure:4079: $? = 1
+configure: failed program was:
+| #ifndef __cplusplus
+|   choke me
+| #endif
+configure:4219: checking whether gcc -fPIE works
+configure:4244: gcc -o conftest -fPIE  -pie conftest.c  >&5
+configure:4247: $? = 0
+configure:4249: ./conftest
+configure:4252: $? = 0
+configure:4265: result: yes
+configure:4279: checking location of the init.d directory
+configure:4285: result: /etc/init.d
+configure:4358: creating ./config.status
+
+## ---------------------- ##
+## Running config.status. ##
+## ---------------------- ##
+
+This file was extended by config.status, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = 
+  CONFIG_HEADERS  = 
+  CONFIG_LINKS    = 
+  CONFIG_COMMANDS = 
+  $ ./config.status 
+
+on inf12
+
+config.status:661: creating Makefile.conf
+config.status:764: creating include/config.h
+
+## ---------------- ##
+## Cache variables. ##
+## ---------------- ##
+
+ac_cv_c_compiler_gnu=yes
+ac_cv_env_CC_set=
+ac_cv_env_CC_value=
+ac_cv_env_CFLAGS_set=
+ac_cv_env_CFLAGS_value=
+ac_cv_env_CPPFLAGS_set=
+ac_cv_env_CPPFLAGS_value=
+ac_cv_env_CPP_set=
+ac_cv_env_CPP_value=
+ac_cv_env_LDFLAGS_set=
+ac_cv_env_LDFLAGS_value=
+ac_cv_env_build_alias_set=
+ac_cv_env_build_alias_value=
+ac_cv_env_host_alias_set=
+ac_cv_env_host_alias_value=
+ac_cv_env_target_alias_set=
+ac_cv_env_target_alias_value=
+ac_cv_exeext=
+ac_cv_header_inttypes_h=yes
+ac_cv_header_memory_h=yes
+ac_cv_header_rpcsvc_nis_h=yes
+ac_cv_header_stdc=yes
+ac_cv_header_stdint_h=yes
+ac_cv_header_stdlib_h=yes
+ac_cv_header_string_h=yes
+ac_cv_header_strings_h=yes
+ac_cv_header_sys_stat_h=yes
+ac_cv_header_sys_types_h=yes
+ac_cv_header_unistd_h=yes
+ac_cv_lib_hesiod_hes_resolve=yes
+ac_cv_lib_ldap_ldap_init=yes
+ac_cv_lib_nsl_yp_match=yes
+ac_cv_lib_resolv_res_query=yes
+ac_cv_objext=o
+ac_cv_path_E2FSCK=/sbin/fsck.ext2
+ac_cv_path_E3FSCK=/sbin/fsck.ext3
+ac_cv_path_MOUNT=/bin/mount
+ac_cv_path_UMOUNT=/bin/umount
+ac_cv_prog_CPP='gcc -E'
+ac_cv_prog_ac_ct_CC=gcc
+ac_cv_prog_cc_g=yes
+ac_cv_prog_cc_stdc=
+ac_cv_prog_egrep='grep -E'
+
+## ----------------- ##
+## Output variables. ##
+## ----------------- ##
+
+CC='gcc'
+CFLAGS='-fPIE'
+CPP='gcc -E'
+CPPFLAGS=''
+DAEMON_CFLAGS='-fPIE'
+DAEMON_LDFLAGS='-pie'
+DEFS='-DHAVE_CONFIG_H'
+E2FSCK='/sbin/fsck.ext2'
+E3FSCK='/sbin/fsck.ext3'
+ECHO_C=''
+ECHO_N='-n'
+ECHO_T=''
+EGREP='grep -E'
+EXEEXT=''
+HAVE_E2FSCK='1'
+HAVE_E3FSCK='1'
+HAVE_HESIOD='1'
+HAVE_LDAP='1'
+HAVE_MOUNT='1'
+HAVE_NISPLUS='1'
+HAVE_UMOUNT='1'
+HESIOD_FLAGS=''
+LDAP_FLAGS=''
+LDFLAGS='-pie'
+LIBHESIOD=' -lhesiod'
+LIBLDAP=' -lldap -llber -lresolv'
+LIBNSL='-lnsl'
+LIBOBJS=''
+LIBRESOLV='-lresolv'
+LIBS=''
+LTLIBOBJS=''
+MOUNT='/bin/mount'
+OBJEXT='o'
+PACKAGE_BUGREPORT=''
+PACKAGE_NAME=''
+PACKAGE_STRING=''
+PACKAGE_TARNAME=''
+PACKAGE_VERSION=''
+PATH_SEPARATOR=':'
+SHELL='/bin/sh'
+UMOUNT='/bin/umount'
+ac_ct_CC='gcc'
+bindir='${exec_prefix}/bin'
+build_alias=''
+datadir='${prefix}/share'
+exec_prefix='${prefix}'
+host_alias=''
+includedir='${prefix}/include'
+infodir='${prefix}/info'
+initdir='/etc/init.d'
+libdir='${exec_prefix}/lib'
+libexecdir='${exec_prefix}/libexec'
+localstatedir='${prefix}/var'
+mandir='${prefix}/man'
+oldincludedir='/usr/include'
+prefix='/usr'
+program_transform_name='s,x,x,'
+sbindir='${exec_prefix}/sbin'
+sharedstatedir='${prefix}/com'
+sysconfdir='${prefix}/etc'
+target_alias=''
+
+## ----------- ##
+## confdefs.h. ##
+## ----------- ##
+
+#define HAVE_E2FSCK 1
+#define HAVE_E3FSCK 1
+#define HAVE_INTTYPES_H 1
+#define HAVE_MEMORY_H 1
+#define HAVE_MOUNT 1
+#define HAVE_SLOPPY_MOUNT 1
+#define HAVE_STDINT_H 1
+#define HAVE_STDLIB_H 1
+#define HAVE_STRINGS_H 1
+#define HAVE_STRING_H 1
+#define HAVE_SYS_STAT_H 1
+#define HAVE_SYS_TYPES_H 1
+#define HAVE_UMOUNT 1
+#define HAVE_UNISTD_H 1
+#define PACKAGE_BUGREPORT ""
+#define PACKAGE_NAME ""
+#define PACKAGE_STRING ""
+#define PACKAGE_TARNAME ""
+#define PACKAGE_VERSION ""
+#define PATH_E2FSCK "/sbin/fsck.ext2"
+#define PATH_E3FSCK "/sbin/fsck.ext3"
+#define PATH_MOUNT "/bin/mount"
+#define PATH_UMOUNT "/bin/umount"
+#define STDC_HEADERS 1
+
+configure: exit 0
diff -Naur autofs-4.1.4/config.status autofs-modificat/config.status
--- autofs-4.1.4/config.status	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/config.status	2007-02-28 10:46:55.000000000 +0100
@@ -0,0 +1,933 @@
+#! /bin/sh
+# Generated by configure.
+# Run this file to recreate the current configuration.
+# Compiler output produced by configure, useful for debugging
+# configure, is in config.log if it exists.
+
+debug=false
+ac_cs_recheck=false
+ac_cs_silent=false
+SHELL=${CONFIG_SHELL-/bin/sh}
+## --------------------- ##
+## M4sh Initialization.  ##
+## --------------------- ##
+
+# Be Bourne compatible
+if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then
+  emulate sh
+  NULLCMD=:
+  # Zsh 3.x and 4.x performs word splitting on ${1+"$@"}, which
+  # is contrary to our usage.  Disable this feature.
+  alias -g '${1+"$@"}'='"$@"'
+elif test -n "${BASH_VERSION+set}" && (set -o posix) >/dev/null 2>&1; then
+  set -o posix
+fi
+DUALCASE=1; export DUALCASE # for MKS sh
+
+# Support unset when possible.
+if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then
+  as_unset=unset
+else
+  as_unset=false
+fi
+
+
+# Work around bugs in pre-3.0 UWIN ksh.
+$as_unset ENV MAIL MAILPATH
+PS1='$ '
+PS2='> '
+PS4='+ '
+
+# NLS nuisances.
+for as_var in \
+  LANG LANGUAGE LC_ADDRESS LC_ALL LC_COLLATE LC_CTYPE LC_IDENTIFICATION \
+  LC_MEASUREMENT LC_MESSAGES LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER \
+  LC_TELEPHONE LC_TIME
+do
+  if (set +x; test -z "`(eval $as_var=C; export $as_var) 2>&1`"); then
+    eval $as_var=C; export $as_var
+  else
+    $as_unset $as_var
+  fi
+done
+
+# Required to use basename.
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+if (basename /) >/dev/null 2>&1 && test "X`basename / 2>&1`" = "X/"; then
+  as_basename=basename
+else
+  as_basename=false
+fi
+
+
+# Name of the executable.
+as_me=`$as_basename "$0" ||
+$as_expr X/"$0" : '.*/\([^/][^/]*\)/*$' \| \
+	 X"$0" : 'X\(//\)$' \| \
+	 X"$0" : 'X\(/\)$' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X/"$0" |
+    sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/; q; }
+  	  /^X\/\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\/\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+
+
+# PATH needs CR, and LINENO needs CR and PATH.
+# Avoid depending upon Character Ranges.
+as_cr_letters='abcdefghijklmnopqrstuvwxyz'
+as_cr_LETTERS='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
+as_cr_Letters=$as_cr_letters$as_cr_LETTERS
+as_cr_digits='0123456789'
+as_cr_alnum=$as_cr_Letters$as_cr_digits
+
+# The user is always right.
+if test "${PATH_SEPARATOR+set}" != set; then
+  echo "#! /bin/sh" >conf$$.sh
+  echo  "exit 0"   >>conf$$.sh
+  chmod +x conf$$.sh
+  if (PATH="/nonexistent;."; conf$$.sh) >/dev/null 2>&1; then
+    PATH_SEPARATOR=';'
+  else
+    PATH_SEPARATOR=:
+  fi
+  rm -f conf$$.sh
+fi
+
+
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2"  || {
+  # Find who we are.  Look in the path if we contain no path at all
+  # relative or not.
+  case $0 in
+    *[\\/]* ) as_myself=$0 ;;
+    *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in $PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break
+done
+
+       ;;
+  esac
+  # We did not find ourselves, most probably we were run as `sh COMMAND'
+  # in which case we are not to be found in the path.
+  if test "x$as_myself" = x; then
+    as_myself=$0
+  fi
+  if test ! -f "$as_myself"; then
+    { { echo "$as_me:$LINENO: error: cannot find myself; rerun with an absolute path" >&5
+echo "$as_me: error: cannot find myself; rerun with an absolute path" >&2;}
+   { (exit 1); exit 1; }; }
+  fi
+  case $CONFIG_SHELL in
+  '')
+    as_save_IFS=$IFS; IFS=$PATH_SEPARATOR
+for as_dir in /bin$PATH_SEPARATOR/usr/bin$PATH_SEPARATOR$PATH
+do
+  IFS=$as_save_IFS
+  test -z "$as_dir" && as_dir=.
+  for as_base in sh bash ksh sh5; do
+	 case $as_dir in
+	 /*)
+	   if ("$as_dir/$as_base" -c '
+  as_lineno_1=$LINENO
+  as_lineno_2=$LINENO
+  as_lineno_3=`(expr $as_lineno_1 + 1) 2>/dev/null`
+  test "x$as_lineno_1" != "x$as_lineno_2" &&
+  test "x$as_lineno_3"  = "x$as_lineno_2" ') 2>/dev/null; then
+	     $as_unset BASH_ENV || test "${BASH_ENV+set}" != set || { BASH_ENV=; export BASH_ENV; }
+	     $as_unset ENV || test "${ENV+set}" != set || { ENV=; export ENV; }
+	     CONFIG_SHELL=$as_dir/$as_base
+	     export CONFIG_SHELL
+	     exec "$CONFIG_SHELL" "$0" ${1+"$@"}
+	   fi;;
+	 esac
+       done
+done
+;;
+  esac
+
+  # Create $as_me.lineno as a copy of $as_myself, but with $LINENO
+  # uniformly replaced by the line number.  The first 'sed' inserts a
+  # line-number line before each line; the second 'sed' does the real
+  # work.  The second script uses 'N' to pair each line-number line
+  # with the numbered line, and appends trailing '-' during
+  # substitution so that $LINENO is not a special case at line end.
+  # (Raja R Harinath suggested sed '=', and Paul Eggert wrote the
+  # second 'sed' script.  Blame Lee E. McMahon for sed's syntax.  :-)
+  sed '=' <$as_myself |
+    sed '
+      N
+      s,$,-,
+      : loop
+      s,^\(['$as_cr_digits']*\)\(.*\)[$]LINENO\([^'$as_cr_alnum'_]\),\1\2\1\3,
+      t loop
+      s,-$,,
+      s,^['$as_cr_digits']*\n,,
+    ' >$as_me.lineno &&
+  chmod +x $as_me.lineno ||
+    { { echo "$as_me:$LINENO: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&5
+echo "$as_me: error: cannot create $as_me.lineno; rerun with a POSIX shell" >&2;}
+   { (exit 1); exit 1; }; }
+
+  # Don't try to exec as it changes $[0], causing all sort of problems
+  # (the dirname of $[0] is not the place where we might find the
+  # original and so on.  Autoconf is especially sensible to this).
+  . ./$as_me.lineno
+  # Exit status is that of the last command.
+  exit
+}
+
+
+case `echo "testing\c"; echo 1,2,3`,`echo -n testing; echo 1,2,3` in
+  *c*,-n*) ECHO_N= ECHO_C='
+' ECHO_T='	' ;;
+  *c*,*  ) ECHO_N=-n ECHO_C= ECHO_T= ;;
+  *)       ECHO_N= ECHO_C='\c' ECHO_T= ;;
+esac
+
+if expr a : '\(a\)' >/dev/null 2>&1; then
+  as_expr=expr
+else
+  as_expr=false
+fi
+
+rm -f conf$$ conf$$.exe conf$$.file
+echo >conf$$.file
+if ln -s conf$$.file conf$$ 2>/dev/null; then
+  # We could just check for DJGPP; but this test a) works b) is more generic
+  # and c) will remain valid once DJGPP supports symlinks (DJGPP 2.04).
+  if test -f conf$$.exe; then
+    # Don't use ln at all; we don't have any links
+    as_ln_s='cp -p'
+  else
+    as_ln_s='ln -s'
+  fi
+elif ln conf$$.file conf$$ 2>/dev/null; then
+  as_ln_s=ln
+else
+  as_ln_s='cp -p'
+fi
+rm -f conf$$ conf$$.exe conf$$.file
+
+if mkdir -p . 2>/dev/null; then
+  as_mkdir_p=:
+else
+  test -d ./-p && rmdir ./-p
+  as_mkdir_p=false
+fi
+
+as_executable_p="test -f"
+
+# Sed expression to map a string onto a valid CPP name.
+as_tr_cpp="eval sed 'y%*$as_cr_letters%P$as_cr_LETTERS%;s%[^_$as_cr_alnum]%_%g'"
+
+# Sed expression to map a string onto a valid variable name.
+as_tr_sh="eval sed 'y%*+%pp%;s%[^_$as_cr_alnum]%_%g'"
+
+
+# IFS
+# We need space, tab and new line, in precisely that order.
+as_nl='
+'
+IFS=" 	$as_nl"
+
+# CDPATH.
+$as_unset CDPATH
+
+exec 6>&1
+
+# Open the log real soon, to keep \$[0] and so on meaningful, and to
+# report actual input values of CONFIG_FILES etc. instead of their
+# values after options handling.  Logging --version etc. is OK.
+exec 5>>config.log
+{
+  echo
+  sed 'h;s/./-/g;s/^.../## /;s/...$/ ##/;p;x;p;x' <<_ASBOX
+## Running $as_me. ##
+_ASBOX
+} >&5
+cat >&5 <<_CSEOF
+
+This file was extended by $as_me, which was
+generated by GNU Autoconf 2.59.  Invocation command line was
+
+  CONFIG_FILES    = $CONFIG_FILES
+  CONFIG_HEADERS  = $CONFIG_HEADERS
+  CONFIG_LINKS    = $CONFIG_LINKS
+  CONFIG_COMMANDS = $CONFIG_COMMANDS
+  $ $0 $@
+
+_CSEOF
+echo "on `(hostname || uname -n) 2>/dev/null | sed 1q`" >&5
+echo >&5
+config_files=" Makefile.conf"
+config_headers=" include/config.h"
+
+ac_cs_usage="\
+\`$as_me' instantiates files from templates according to the
+current configuration.
+
+Usage: $0 [OPTIONS] [FILE]...
+
+  -h, --help       print this help, then exit
+  -V, --version    print version number, then exit
+  -q, --quiet      do not print progress messages
+  -d, --debug      don't remove temporary files
+      --recheck    update $as_me by reconfiguring in the same conditions
+  --file=FILE[:TEMPLATE]
+		   instantiate the configuration file FILE
+  --header=FILE[:TEMPLATE]
+		   instantiate the configuration header FILE
+
+Configuration files:
+$config_files
+
+Configuration headers:
+$config_headers
+
+Report bugs to <bug-autoconf@gnu.org>."
+ac_cs_version="\
+config.status
+configured by ./configure, generated by GNU Autoconf 2.59,
+  with options \"\"
+
+Copyright (C) 2003 Free Software Foundation, Inc.
+This config.status script is free software; the Free Software Foundation
+gives unlimited permission to copy, distribute and modify it."
+srcdir=.
+# If no file are specified by the user, then we need to provide default
+# value.  By we need to know if files were specified by the user.
+ac_need_defaults=:
+while test $# != 0
+do
+  case $1 in
+  --*=*)
+    ac_option=`expr "x$1" : 'x\([^=]*\)='`
+    ac_optarg=`expr "x$1" : 'x[^=]*=\(.*\)'`
+    ac_shift=:
+    ;;
+  -*)
+    ac_option=$1
+    ac_optarg=$2
+    ac_shift=shift
+    ;;
+  *) # This is not an option, so the user has probably given explicit
+     # arguments.
+     ac_option=$1
+     ac_need_defaults=false;;
+  esac
+
+  case $ac_option in
+  # Handling of the options.
+  -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+    ac_cs_recheck=: ;;
+  --version | --vers* | -V )
+    echo "$ac_cs_version"; exit 0 ;;
+  --he | --h)
+    # Conflict between --help and --header
+    { { echo "$as_me:$LINENO: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: ambiguous option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; };;
+  --help | --hel | -h )
+    echo "$ac_cs_usage"; exit 0 ;;
+  --debug | --d* | -d )
+    debug=: ;;
+  --file | --fil | --fi | --f )
+    $ac_shift
+    CONFIG_FILES="$CONFIG_FILES $ac_optarg"
+    ac_need_defaults=false;;
+  --header | --heade | --head | --hea )
+    $ac_shift
+    CONFIG_HEADERS="$CONFIG_HEADERS $ac_optarg"
+    ac_need_defaults=false;;
+  -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+  | -silent | --silent | --silen | --sile | --sil | --si | --s)
+    ac_cs_silent=: ;;
+
+  # This is an error.
+  -*) { { echo "$as_me:$LINENO: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&5
+echo "$as_me: error: unrecognized option: $1
+Try \`$0 --help' for more information." >&2;}
+   { (exit 1); exit 1; }; } ;;
+
+  *) ac_config_targets="$ac_config_targets $1" ;;
+
+  esac
+  shift
+done
+
+ac_configure_extra_args=
+
+if $ac_cs_silent; then
+  exec 6>/dev/null
+  ac_configure_extra_args="$ac_configure_extra_args --silent"
+fi
+
+if $ac_cs_recheck; then
+  echo "running /bin/sh ./configure "  $ac_configure_extra_args " --no-create --no-recursion" >&6
+  exec /bin/sh ./configure  $ac_configure_extra_args --no-create --no-recursion
+fi
+
+for ac_config_target in $ac_config_targets
+do
+  case "$ac_config_target" in
+  # Handling of arguments.
+  "Makefile.conf" ) CONFIG_FILES="$CONFIG_FILES Makefile.conf" ;;
+  "include/config.h" ) CONFIG_HEADERS="$CONFIG_HEADERS include/config.h" ;;
+  *) { { echo "$as_me:$LINENO: error: invalid argument: $ac_config_target" >&5
+echo "$as_me: error: invalid argument: $ac_config_target" >&2;}
+   { (exit 1); exit 1; }; };;
+  esac
+done
+
+# If the user did not use the arguments to specify the items to instantiate,
+# then the envvar interface is used.  Set only those that are not.
+# We use the long form for the default assignment because of an extremely
+# bizarre bug on SunOS 4.1.3.
+if $ac_need_defaults; then
+  test "${CONFIG_FILES+set}" = set || CONFIG_FILES=$config_files
+  test "${CONFIG_HEADERS+set}" = set || CONFIG_HEADERS=$config_headers
+fi
+
+# Have a temporary directory for convenience.  Make it in the build tree
+# simply because there is no reason to put it here, and in addition,
+# creating and moving files from /tmp can sometimes cause problems.
+# Create a temporary directory, and hook for its removal unless debugging.
+$debug ||
+{
+  trap 'exit_status=$?; rm -rf $tmp && exit $exit_status' 0
+  trap '{ (exit 1); exit 1; }' 1 2 13 15
+}
+
+# Create a (secure) tmp directory for tmp files.
+
+{
+  tmp=`(umask 077 && mktemp -d -q "./confstatXXXXXX") 2>/dev/null` &&
+  test -n "$tmp" && test -d "$tmp"
+}  ||
+{
+  tmp=./confstat$$-$RANDOM
+  (umask 077 && mkdir $tmp)
+} ||
+{
+   echo "$me: cannot create a temporary directory in ." >&2
+   { (exit 1); exit 1; }
+}
+
+
+#
+# CONFIG_FILES section.
+#
+
+# No need to generate the scripts if there are no CONFIG_FILES.
+# This happens for instance when ./config.status config.h
+if test -n "$CONFIG_FILES"; then
+  # Protect against being on the right side of a sed subst in config.status.
+  sed 's/,@/@@/; s/@,/@@/; s/,;t t$/@;t t/; /@;t t$/s/[\\&,]/\\&/g;
+   s/@@/,@/; s/@@/@,/; s/@;t t$/,;t t/' >$tmp/subs.sed <<\CEOF
+s,@SHELL@,/bin/sh,;t t
+s,@PATH_SEPARATOR@,:,;t t
+s,@PACKAGE_NAME@,,;t t
+s,@PACKAGE_TARNAME@,,;t t
+s,@PACKAGE_VERSION@,,;t t
+s,@PACKAGE_STRING@,,;t t
+s,@PACKAGE_BUGREPORT@,,;t t
+s,@exec_prefix@,${prefix},;t t
+s,@prefix@,/usr,;t t
+s,@program_transform_name@,s,x,x,,;t t
+s,@bindir@,${exec_prefix}/bin,;t t
+s,@sbindir@,${exec_prefix}/sbin,;t t
+s,@libexecdir@,${exec_prefix}/libexec,;t t
+s,@datadir@,${prefix}/share,;t t
+s,@sysconfdir@,${prefix}/etc,;t t
+s,@sharedstatedir@,${prefix}/com,;t t
+s,@localstatedir@,${prefix}/var,;t t
+s,@libdir@,${exec_prefix}/lib,;t t
+s,@includedir@,${prefix}/include,;t t
+s,@oldincludedir@,/usr/include,;t t
+s,@infodir@,${prefix}/info,;t t
+s,@mandir@,${prefix}/man,;t t
+s,@build_alias@,,;t t
+s,@host_alias@,,;t t
+s,@target_alias@,,;t t
+s,@DEFS@,-DHAVE_CONFIG_H,;t t
+s,@ECHO_C@,,;t t
+s,@ECHO_N@,-n,;t t
+s,@ECHO_T@,,;t t
+s,@LIBS@,,;t t
+s,@MOUNT@,/bin/mount,;t t
+s,@HAVE_MOUNT@,1,;t t
+s,@UMOUNT@,/bin/umount,;t t
+s,@HAVE_UMOUNT@,1,;t t
+s,@E2FSCK@,/sbin/fsck.ext2,;t t
+s,@HAVE_E2FSCK@,1,;t t
+s,@E3FSCK@,/sbin/fsck.ext3,;t t
+s,@HAVE_E3FSCK@,1,;t t
+s,@CC@,gcc,;t t
+s,@CFLAGS@,-fPIE,;t t
+s,@LDFLAGS@,-pie,;t t
+s,@CPPFLAGS@,,;t t
+s,@ac_ct_CC@,gcc,;t t
+s,@EXEEXT@,,;t t
+s,@OBJEXT@,o,;t t
+s,@LIBNSL@,-lnsl,;t t
+s,@LIBRESOLV@,-lresolv,;t t
+s,@HAVE_HESIOD@,1,;t t
+s,@LIBHESIOD@, -lhesiod,;t t
+s,@HESIOD_FLAGS@,,;t t
+s,@CPP@,gcc -E,;t t
+s,@EGREP@,grep -E,;t t
+s,@HAVE_NISPLUS@,1,;t t
+s,@LDAP_FLAGS@,,;t t
+s,@HAVE_LDAP@,1,;t t
+s,@LIBLDAP@, -lldap -llber -lresolv,;t t
+s,@DAEMON_CFLAGS@,-fPIE,;t t
+s,@DAEMON_LDFLAGS@,-pie,;t t
+s,@initdir@,/etc/init.d,;t t
+s,@LIBOBJS@,,;t t
+s,@LTLIBOBJS@,,;t t
+CEOF
+
+  # Split the substitutions into bite-sized pieces for seds with
+  # small command number limits, like on Digital OSF/1 and HP-UX.
+  ac_max_sed_lines=48
+  ac_sed_frag=1 # Number of current file.
+  ac_beg=1 # First line for current file.
+  ac_end=$ac_max_sed_lines # Line after last line for current file.
+  ac_more_lines=:
+  ac_sed_cmds=
+  while $ac_more_lines; do
+    if test $ac_beg -gt 1; then
+      sed "1,${ac_beg}d; ${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    else
+      sed "${ac_end}q" $tmp/subs.sed >$tmp/subs.frag
+    fi
+    if test ! -s $tmp/subs.frag; then
+      ac_more_lines=false
+    else
+      # The purpose of the label and of the branching condition is to
+      # speed up the sed processing (if there are no `@' at all, there
+      # is no need to browse any of the substitutions).
+      # These are the two extra sed commands mentioned above.
+      (echo ':t
+  /@[a-zA-Z_][a-zA-Z_0-9]*@/!b' && cat $tmp/subs.frag) >$tmp/subs-$ac_sed_frag.sed
+      if test -z "$ac_sed_cmds"; then
+	ac_sed_cmds="sed -f $tmp/subs-$ac_sed_frag.sed"
+      else
+	ac_sed_cmds="$ac_sed_cmds | sed -f $tmp/subs-$ac_sed_frag.sed"
+      fi
+      ac_sed_frag=`expr $ac_sed_frag + 1`
+      ac_beg=$ac_end
+      ac_end=`expr $ac_end + $ac_max_sed_lines`
+    fi
+  done
+  if test -z "$ac_sed_cmds"; then
+    ac_sed_cmds=cat
+  fi
+fi # test -n "$CONFIG_FILES"
+
+for ac_file in : $CONFIG_FILES; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  # Compute @srcdir@, @top_srcdir@, and @INSTALL@ for subdirectories.
+  ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+  { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+  ac_builddir=.
+
+if test "$ac_dir" != .; then
+  ac_dir_suffix=/`echo "$ac_dir" | sed 's,^\.[\\/],,'`
+  # A "../" for each directory in $ac_dir_suffix.
+  ac_top_builddir=`echo "$ac_dir_suffix" | sed 's,/[^\\/]*,../,g'`
+else
+  ac_dir_suffix= ac_top_builddir=
+fi
+
+case $srcdir in
+  .)  # No --srcdir option.  We are building in place.
+    ac_srcdir=.
+    if test -z "$ac_top_builddir"; then
+       ac_top_srcdir=.
+    else
+       ac_top_srcdir=`echo $ac_top_builddir | sed 's,/$,,'`
+    fi ;;
+  [\\/]* | ?:[\\/]* )  # Absolute path.
+    ac_srcdir=$srcdir$ac_dir_suffix;
+    ac_top_srcdir=$srcdir ;;
+  *) # Relative path.
+    ac_srcdir=$ac_top_builddir$srcdir$ac_dir_suffix
+    ac_top_srcdir=$ac_top_builddir$srcdir ;;
+esac
+
+# Do not use `cd foo && pwd` to compute absolute paths, because
+# the directories may not exist.
+case `pwd` in
+.) ac_abs_builddir="$ac_dir";;
+*)
+  case "$ac_dir" in
+  .) ac_abs_builddir=`pwd`;;
+  [\\/]* | ?:[\\/]* ) ac_abs_builddir="$ac_dir";;
+  *) ac_abs_builddir=`pwd`/"$ac_dir";;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_builddir=${ac_top_builddir}.;;
+*)
+  case ${ac_top_builddir}. in
+  .) ac_abs_top_builddir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_builddir=${ac_top_builddir}.;;
+  *) ac_abs_top_builddir=$ac_abs_builddir/${ac_top_builddir}.;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_srcdir=$ac_srcdir;;
+*)
+  case $ac_srcdir in
+  .) ac_abs_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_srcdir=$ac_srcdir;;
+  *) ac_abs_srcdir=$ac_abs_builddir/$ac_srcdir;;
+  esac;;
+esac
+case $ac_abs_builddir in
+.) ac_abs_top_srcdir=$ac_top_srcdir;;
+*)
+  case $ac_top_srcdir in
+  .) ac_abs_top_srcdir=$ac_abs_builddir;;
+  [\\/]* | ?:[\\/]* ) ac_abs_top_srcdir=$ac_top_srcdir;;
+  *) ac_abs_top_srcdir=$ac_abs_builddir/$ac_top_srcdir;;
+  esac;;
+esac
+
+
+
+  if test x"$ac_file" != x-; then
+    { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+    rm -f "$ac_file"
+  fi
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    configure_input=
+  else
+    configure_input="$ac_file.  "
+  fi
+  configure_input=$configure_input"Generated from `echo $ac_file_in |
+				     sed 's,.*/,,'` by configure."
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  sed "/^[	 ]*VPATH[	 ]*=/{
+s/:*\$(srcdir):*/:/;
+s/:*\${srcdir}:*/:/;
+s/:*@srcdir@:*/:/;
+s/^\([^=]*=[	 ]*\):*/\1/;
+s/:*$//;
+s/^[^=]*=[	 ]*$//;
+}
+
+:t
+/@[a-zA-Z_][a-zA-Z_0-9]*@/!b
+s,@configure_input@,$configure_input,;t t
+s,@srcdir@,$ac_srcdir,;t t
+s,@abs_srcdir@,$ac_abs_srcdir,;t t
+s,@top_srcdir@,$ac_top_srcdir,;t t
+s,@abs_top_srcdir@,$ac_abs_top_srcdir,;t t
+s,@builddir@,$ac_builddir,;t t
+s,@abs_builddir@,$ac_abs_builddir,;t t
+s,@top_builddir@,$ac_top_builddir,;t t
+s,@abs_top_builddir@,$ac_abs_top_builddir,;t t
+" $ac_file_inputs | (eval "$ac_sed_cmds") >$tmp/out
+  rm -f $tmp/stdin
+  if test x"$ac_file" != x-; then
+    mv $tmp/out $ac_file
+  else
+    cat $tmp/out
+    rm -f $tmp/out
+  fi
+
+done
+
+#
+# CONFIG_HEADER section.
+#
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s,^\([	 ]*\)#\([	 ]*define[	 ][	 ]*\)'
+ac_dB='[	 ].*$,\1#\2'
+ac_dC=' '
+ac_dD=',;t'
+# ac_u turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_uA='s,^\([	 ]*\)#\([	 ]*\)undef\([	 ][	 ]*\)'
+ac_uB='$,\1#\2define\3'
+ac_uC=' '
+ac_uD=',;t'
+
+for ac_file in : $CONFIG_HEADERS; do test "x$ac_file" = x: && continue
+  # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+  case $ac_file in
+  - | *:- | *:-:* ) # input from stdin
+	cat >$tmp/stdin
+	ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  *:* ) ac_file_in=`echo "$ac_file" | sed 's,[^:]*:,,'`
+	ac_file=`echo "$ac_file" | sed 's,:.*,,'` ;;
+  * )   ac_file_in=$ac_file.in ;;
+  esac
+
+  test x"$ac_file" != x- && { echo "$as_me:$LINENO: creating $ac_file" >&5
+echo "$as_me: creating $ac_file" >&6;}
+
+  # First look for the input files in the build tree, otherwise in the
+  # src tree.
+  ac_file_inputs=`IFS=:
+    for f in $ac_file_in; do
+      case $f in
+      -) echo $tmp/stdin ;;
+      [\\/$]*)
+	 # Absolute (can't be DOS-style, as IFS=:)
+	 test -f "$f" || { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 # Do quote $f, to prevent DOS paths from being IFS'd.
+	 echo "$f";;
+      *) # Relative
+	 if test -f "$f"; then
+	   # Build tree
+	   echo "$f"
+	 elif test -f "$srcdir/$f"; then
+	   # Source tree
+	   echo "$srcdir/$f"
+	 else
+	   # /dev/null tree
+	   { { echo "$as_me:$LINENO: error: cannot find input file: $f" >&5
+echo "$as_me: error: cannot find input file: $f" >&2;}
+   { (exit 1); exit 1; }; }
+	 fi;;
+      esac
+    done` || { (exit 1); exit 1; }
+  # Remove the trailing spaces.
+  sed 's/[	 ]*$//' $ac_file_inputs >$tmp/in
+
+  # Handle all the #define templates only if necessary.
+  if grep "^[	 ]*#[	 ]*define" $tmp/in >/dev/null; then
+  # If there are no defines, we may have an empty if/fi
+  :
+  cat >$tmp/defines.sed <<CEOF
+/^[	 ]*#[	 ]*define/!b
+t clr
+: clr
+${ac_dA}PACKAGE_NAME${ac_dB}PACKAGE_NAME${ac_dC}""${ac_dD}
+${ac_dA}PACKAGE_TARNAME${ac_dB}PACKAGE_TARNAME${ac_dC}""${ac_dD}
+${ac_dA}PACKAGE_VERSION${ac_dB}PACKAGE_VERSION${ac_dC}""${ac_dD}
+${ac_dA}PACKAGE_STRING${ac_dB}PACKAGE_STRING${ac_dC}""${ac_dD}
+${ac_dA}PACKAGE_BUGREPORT${ac_dB}PACKAGE_BUGREPORT${ac_dC}""${ac_dD}
+${ac_dA}HAVE_MOUNT${ac_dB}HAVE_MOUNT${ac_dC}1${ac_dD}
+${ac_dA}PATH_MOUNT${ac_dB}PATH_MOUNT${ac_dC}"/bin/mount"${ac_dD}
+${ac_dA}HAVE_UMOUNT${ac_dB}HAVE_UMOUNT${ac_dC}1${ac_dD}
+${ac_dA}PATH_UMOUNT${ac_dB}PATH_UMOUNT${ac_dC}"/bin/umount"${ac_dD}
+${ac_dA}HAVE_E2FSCK${ac_dB}HAVE_E2FSCK${ac_dC}1${ac_dD}
+${ac_dA}PATH_E2FSCK${ac_dB}PATH_E2FSCK${ac_dC}"/sbin/fsck.ext2"${ac_dD}
+${ac_dA}HAVE_E3FSCK${ac_dB}HAVE_E3FSCK${ac_dC}1${ac_dD}
+${ac_dA}PATH_E3FSCK${ac_dB}PATH_E3FSCK${ac_dC}"/sbin/fsck.ext3"${ac_dD}
+${ac_dA}HAVE_SLOPPY_MOUNT${ac_dB}HAVE_SLOPPY_MOUNT${ac_dC}1${ac_dD}
+${ac_dA}STDC_HEADERS${ac_dB}STDC_HEADERS${ac_dC}1${ac_dD}
+${ac_dA}HAVE_SYS_TYPES_H${ac_dB}HAVE_SYS_TYPES_H${ac_dC}1${ac_dD}
+${ac_dA}HAVE_SYS_STAT_H${ac_dB}HAVE_SYS_STAT_H${ac_dC}1${ac_dD}
+${ac_dA}HAVE_STDLIB_H${ac_dB}HAVE_STDLIB_H${ac_dC}1${ac_dD}
+${ac_dA}HAVE_STRING_H${ac_dB}HAVE_STRING_H${ac_dC}1${ac_dD}
+${ac_dA}HAVE_MEMORY_H${ac_dB}HAVE_MEMORY_H${ac_dC}1${ac_dD}
+${ac_dA}HAVE_STRINGS_H${ac_dB}HAVE_STRINGS_H${ac_dC}1${ac_dD}
+${ac_dA}HAVE_INTTYPES_H${ac_dB}HAVE_INTTYPES_H${ac_dC}1${ac_dD}
+${ac_dA}HAVE_STDINT_H${ac_dB}HAVE_STDINT_H${ac_dC}1${ac_dD}
+${ac_dA}HAVE_UNISTD_H${ac_dB}HAVE_UNISTD_H${ac_dC}1${ac_dD}
+CEOF
+  sed -f $tmp/defines.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+
+  fi # grep
+
+  # Handle all the #undef templates
+  cat >$tmp/undefs.sed <<CEOF
+/^[	 ]*#[	 ]*undef/!b
+t clr
+: clr
+${ac_uA}PACKAGE_NAME${ac_uB}PACKAGE_NAME${ac_uC}""${ac_uD}
+${ac_uA}PACKAGE_TARNAME${ac_uB}PACKAGE_TARNAME${ac_uC}""${ac_uD}
+${ac_uA}PACKAGE_VERSION${ac_uB}PACKAGE_VERSION${ac_uC}""${ac_uD}
+${ac_uA}PACKAGE_STRING${ac_uB}PACKAGE_STRING${ac_uC}""${ac_uD}
+${ac_uA}PACKAGE_BUGREPORT${ac_uB}PACKAGE_BUGREPORT${ac_uC}""${ac_uD}
+${ac_uA}HAVE_MOUNT${ac_uB}HAVE_MOUNT${ac_uC}1${ac_uD}
+${ac_uA}PATH_MOUNT${ac_uB}PATH_MOUNT${ac_uC}"/bin/mount"${ac_uD}
+${ac_uA}HAVE_UMOUNT${ac_uB}HAVE_UMOUNT${ac_uC}1${ac_uD}
+${ac_uA}PATH_UMOUNT${ac_uB}PATH_UMOUNT${ac_uC}"/bin/umount"${ac_uD}
+${ac_uA}HAVE_E2FSCK${ac_uB}HAVE_E2FSCK${ac_uC}1${ac_uD}
+${ac_uA}PATH_E2FSCK${ac_uB}PATH_E2FSCK${ac_uC}"/sbin/fsck.ext2"${ac_uD}
+${ac_uA}HAVE_E3FSCK${ac_uB}HAVE_E3FSCK${ac_uC}1${ac_uD}
+${ac_uA}PATH_E3FSCK${ac_uB}PATH_E3FSCK${ac_uC}"/sbin/fsck.ext3"${ac_uD}
+${ac_uA}HAVE_SLOPPY_MOUNT${ac_uB}HAVE_SLOPPY_MOUNT${ac_uC}1${ac_uD}
+${ac_uA}STDC_HEADERS${ac_uB}STDC_HEADERS${ac_uC}1${ac_uD}
+${ac_uA}HAVE_SYS_TYPES_H${ac_uB}HAVE_SYS_TYPES_H${ac_uC}1${ac_uD}
+${ac_uA}HAVE_SYS_STAT_H${ac_uB}HAVE_SYS_STAT_H${ac_uC}1${ac_uD}
+${ac_uA}HAVE_STDLIB_H${ac_uB}HAVE_STDLIB_H${ac_uC}1${ac_uD}
+${ac_uA}HAVE_STRING_H${ac_uB}HAVE_STRING_H${ac_uC}1${ac_uD}
+${ac_uA}HAVE_MEMORY_H${ac_uB}HAVE_MEMORY_H${ac_uC}1${ac_uD}
+${ac_uA}HAVE_STRINGS_H${ac_uB}HAVE_STRINGS_H${ac_uC}1${ac_uD}
+${ac_uA}HAVE_INTTYPES_H${ac_uB}HAVE_INTTYPES_H${ac_uC}1${ac_uD}
+${ac_uA}HAVE_STDINT_H${ac_uB}HAVE_STDINT_H${ac_uC}1${ac_uD}
+${ac_uA}HAVE_UNISTD_H${ac_uB}HAVE_UNISTD_H${ac_uC}1${ac_uD}
+s,^[	 ]*#[	 ]*undef[	 ][	 ]*[a-zA-Z_][a-zA-Z_0-9]*,/* & */,
+CEOF
+  sed -f $tmp/undefs.sed $tmp/in >$tmp/out
+  rm -f $tmp/in
+  mv $tmp/out $tmp/in
+
+  # Let's still pretend it is `configure' which instantiates (i.e., don't
+  # use $as_me), people would be surprised to read:
+  #    /* config.h.  Generated by config.status.  */
+  if test x"$ac_file" = x-; then
+    echo "/* Generated by configure.  */" >$tmp/config.h
+  else
+    echo "/* $ac_file.  Generated by configure.  */" >$tmp/config.h
+  fi
+  cat $tmp/in >>$tmp/config.h
+  rm -f $tmp/in
+  if test x"$ac_file" != x-; then
+    if diff $ac_file $tmp/config.h >/dev/null 2>&1; then
+      { echo "$as_me:$LINENO: $ac_file is unchanged" >&5
+echo "$as_me: $ac_file is unchanged" >&6;}
+    else
+      ac_dir=`(dirname "$ac_file") 2>/dev/null ||
+$as_expr X"$ac_file" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$ac_file" : 'X\(//\)[^/]' \| \
+	 X"$ac_file" : 'X\(//\)$' \| \
+	 X"$ac_file" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$ac_file" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+      { if $as_mkdir_p; then
+    mkdir -p "$ac_dir"
+  else
+    as_dir="$ac_dir"
+    as_dirs=
+    while test ! -d "$as_dir"; do
+      as_dirs="$as_dir $as_dirs"
+      as_dir=`(dirname "$as_dir") 2>/dev/null ||
+$as_expr X"$as_dir" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \
+	 X"$as_dir" : 'X\(//\)[^/]' \| \
+	 X"$as_dir" : 'X\(//\)$' \| \
+	 X"$as_dir" : 'X\(/\)' \| \
+	 .     : '\(.\)' 2>/dev/null ||
+echo X"$as_dir" |
+    sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/; q; }
+  	  /^X\(\/\/\)[^/].*/{ s//\1/; q; }
+  	  /^X\(\/\/\)$/{ s//\1/; q; }
+  	  /^X\(\/\).*/{ s//\1/; q; }
+  	  s/.*/./; q'`
+    done
+    test ! -n "$as_dirs" || mkdir $as_dirs
+  fi || { { echo "$as_me:$LINENO: error: cannot create directory \"$ac_dir\"" >&5
+echo "$as_me: error: cannot create directory \"$ac_dir\"" >&2;}
+   { (exit 1); exit 1; }; }; }
+
+      rm -f $ac_file
+      mv $tmp/config.h $ac_file
+    fi
+  else
+    cat $tmp/config.h
+    rm -f $tmp/config.h
+  fi
+done
+
+{ (exit 0); exit 0; }
diff -Naur autofs-4.1.4/daemon/automount.c autofs-modificat/daemon/automount.c
--- autofs-4.1.4/daemon/automount.c	2005-03-06 10:43:55.000000000 +0100
+++ autofs-modificat/daemon/automount.c	2007-02-28 11:55:00.000000000 +0100
@@ -139,31 +139,7 @@
 
 static int umount_ent(const char *root, const char *name, const char *type)
 {
-	char path_buf[PATH_MAX];
-	struct stat st;
-	int sav_errno;
-	int is_smbfs = (strcmp(type, "smbfs") == 0);
-	int status;
-	int rv = 0;
-
-	sprintf(path_buf, "%s/%s", root, name);
-	status =  lstat(path_buf, &st);
-	sav_errno = errno;
-
-	/* EIO appears to correspond to an smb mount that has gone away */
-	if (!status ||
-	    (is_smbfs && (sav_errno == EIO || sav_errno == EBADSLT))) {
-		int umount_ok = 0;
-
-		if (!status && (S_ISDIR(st.st_mode) && (st.st_dev != ap.dev)))
-			umount_ok = 1;
-
-		if (umount_ok || is_smbfs) {
-			rv = spawnll(LOG_DEBUG, 
-				    PATH_UMOUNT, PATH_UMOUNT, path_buf, NULL);
-		}
-	}
-	return rv;
+  return do_umount(root, name, type);
 }
 
 /* Like ftw, except fn gets called twice: before a directory is
diff -Naur autofs-4.1.4/daemon/Makefile autofs-modificat/daemon/Makefile
--- autofs-4.1.4/daemon/Makefile	2004-04-03 09:14:33.000000000 +0200
+++ autofs-modificat/daemon/Makefile	2007-02-28 11:03:47.000000000 +0100
@@ -6,8 +6,8 @@
 -include ../Makefile.conf
 include ../Makefile.rules
 
-SRCS = automount.c spawn.c module.c mount.c
-OBJS = automount.o spawn.o module.o mount.o
+SRCS = automount.c spawn.c module.c mount.c umount.c
+OBJS = automount.o spawn.o module.o mount.o umount.o
 
 version := $(shell cat ../.version)
 
diff -Naur autofs-4.1.4/daemon/module.c autofs-modificat/daemon/module.c
--- autofs-4.1.4/daemon/module.c	2004-01-29 17:01:22.000000000 +0100
+++ autofs-modificat/daemon/module.c	2007-02-28 13:27:28.000000000 +0100
@@ -240,6 +240,75 @@
 	return mod;
 }
 
+
+struct mount_mod *open_umount(const char *name, const char *err_prefix)
+{
+	struct mount_mod *mod;
+	char *fnbuf;
+	size_t size_name;
+	size_t size_fnbuf;
+	void *dh;
+	int *ver;
+	
+	size_name = _strlen(name, PATH_MAX + 1);
+	if (!size_name)
+		return NULL;
+
+	mod = malloc(sizeof(struct mount_mod));
+	if (!mod) {
+		if (err_prefix)
+			crit("%s%m", err_prefix);
+		return NULL;
+	}
+
+	size_fnbuf = size_name + strlen(AUTOFS_LIB_DIR) + 13;
+	fnbuf = alloca(size_fnbuf);
+	if (!fnbuf) {
+		free(mod);
+		if (err_prefix)
+			crit("%s%m", err_prefix);
+		return NULL;
+	}
+	snprintf(fnbuf, size_fnbuf, "%s/umount_%s.so", AUTOFS_LIB_DIR, name);
+	
+	if (!(dh = dlopen(fnbuf, RTLD_NOW))) {
+		if (err_prefix)
+			crit("%scannot open umount module %s (%s)",
+			       err_prefix, name, dlerror());
+		free(mod);
+		return NULL;
+	}
+
+	if (!(ver = (int *) dlsym(dh, "mount_version"))
+	    || *ver != AUTOFS_MOUNT_VERSION) {
+		if (err_prefix)
+			crit("%smount module %s version mismatch",
+			     err_prefix, name);
+		dlclose(dh);
+		free(mod);
+		return NULL;
+	}
+
+	if (!(mod->mount_init = (mount_init_t) dlsym(dh, "mount_init")) ||
+	    !(mod->mount_umount = (mount_umount_t) dlsym(dh, "mount_umount")) ||
+	    !(mod->mount_done = (mount_done_t) dlsym(dh, "mount_done"))) {
+		if (err_prefix)
+			crit("%smount module %s corrupt", err_prefix, name);
+		dlclose(dh);
+		free(mod);
+		return NULL;
+	}
+
+	if (mod->mount_init(&mod->context)) {
+		dlclose(dh);
+		free(mod);
+		return NULL;
+	}
+	mod->dlhandle = dh;
+	return mod;
+}
+
+
 int close_mount(struct mount_mod *mod)
 {
 	int rv = mod->mount_done(mod->context);
diff -Naur autofs-4.1.4/daemon/umount.c autofs-modificat/daemon/umount.c
--- autofs-4.1.4/daemon/umount.c	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/daemon/umount.c	2007-02-28 15:05:30.000000000 +0100
@@ -0,0 +1,63 @@
+/* ----------------------------------------------------------------------- *
+ *   
+ *   umount.c - Abstract umount code used by modules for an unexpected
+ *            filesystem type
+ *
+ *   Copyright 2007 Jordi Prats - CESCA - All Rights Reserved
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
+ *   USA; either version 2 of the License, or (at your option) any later
+ *   version.
+ *   
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ * ----------------------------------------------------------------------- */
+
+#include <syslog.h>
+#include <stdlib.h>
+#include <string.h>
+#include "automount.h"
+
+/* These filesystems are known not to work with the "generic" module */
+static char *not_generic[] = { "ext3lvm",
+			       NULL
+};
+
+// (const char *root, const char *name, int name_len,
+// const char *what, const char *fstype, const char *options)
+
+int do_umount(const char *root, const char *name, const char *type)
+{
+	struct mount_mod *mod;
+	const char *modstr;
+	char **ngp;
+	int rv;
+		
+	mod = open_umount(modstr = type, NULL);
+	if (!mod) {
+		for (ngp = not_generic; *ngp; ngp++) {
+			if (!strcmp(type, *ngp))
+				break;
+		}
+		if (!*ngp)
+			mod = open_umount(modstr = "generic", NULL);
+		if (!mod) {
+			error("cannot find umount method for filesystem %s",
+			       type);
+			return -1;
+		}
+	}
+
+	debug("do_umount root %s name type %s",
+		  root, name, type);
+
+	rv = mod->mount_umount(root, name, strlen(name), type, mod->context);
+	close_mount(mod);
+
+	return rv;
+}
diff -Naur autofs-4.1.4/daemon/umount.c~ autofs-modificat/daemon/umount.c~
--- autofs-4.1.4/daemon/umount.c~	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/daemon/umount.c~	2007-02-28 13:27:10.000000000 +0100
@@ -0,0 +1,64 @@
+#ident "$Id: mount.c,v 1.5 2004/11/17 14:38:27 raven Exp $"
+/* ----------------------------------------------------------------------- *
+ *   
+ *   umount.c - Abstract mount code used by modules for an unexpected
+ *            filesystem type
+ *
+ *   Copyright 2007 CESCA - All Rights Reserved
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
+ *   USA; either version 2 of the License, or (at your option) any later
+ *   version.
+ *   
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ * ----------------------------------------------------------------------- */
+
+#include <syslog.h>
+#include <stdlib.h>
+#include <string.h>
+#include "automount.h"
+
+/* These filesystems are known not to work with the "generic" module */
+static char *not_generic[] = { "ext3lvm",
+			       NULL
+};
+
+// (const char *root, const char *name, int name_len,
+// const char *what, const char *fstype, const char *options)
+
+int do_umount(const char *root, const char *name, const char *type)
+{
+	struct mount_mod *mod;
+	const char *modstr;
+	char **ngp;
+	int rv;
+		
+	mod = open_umount(modstr = type, NULL);
+	if (!mod) {
+		for (ngp = not_generic; *ngp; ngp++) {
+			if (!strcmp(type, *ngp))
+				break;
+		}
+		if (!*ngp)
+			mod = open_umount(modstr = "generic", NULL);
+		if (!mod) {
+			error("cannot find umount method for filesystem %s",
+			       type);
+			return -1;
+		}
+	}
+
+	debug("do_umount root %s name type %s",
+		  root, name, type);
+
+	rv = mod->mount_umount(root, name, strlen(name), type, mod->context);
+	close_mount(mod);
+
+	return rv;
+}
diff -Naur autofs-4.1.4/include/automount.h autofs-modificat/include/automount.h
--- autofs-4.1.4/include/automount.h	2005-01-26 14:03:02.000000000 +0100
+++ autofs-modificat/include/automount.h	2007-02-28 11:54:07.000000000 +0100
@@ -130,6 +130,9 @@
 int signal_children(int sig);
 int do_mount(const char *root, const char *name, int name_len,
 	     const char *what, const char *fstype, const char *options);
+
+int do_umount(const char *root, const char *name, const char *type);
+
 int mkdir_path(const char *path, mode_t mode);
 int rmdir_path(const char *path);
 
@@ -200,22 +203,32 @@
 int mount_init(void **context);
 int mount_mount(const char *root, const char *name, int name_len,
 		const char *what, const char *fstype, const char *options, void *context);
+
+int mount_umount(const char *root, const char *name, int name_len,
+		 const char *fstype, void *context);
+
 int mount_done(void *context);
 #endif
 typedef int (*mount_init_t) (void **);
 typedef int (*mount_mount_t) (const char *, const char *, int, const char *, const char *,
 			      const char *, void *);
+
+typedef int (*mount_umount_t) (const char *, const char *, int, const char *,
+			      void *);
+
 typedef int (*mount_done_t) (void *);
 
 struct mount_mod {
 	mount_init_t mount_init;
 	mount_mount_t mount_mount;
+	mount_umount_t mount_umount;
 	mount_done_t mount_done;
 	void *dlhandle;
 	void *context;
 };
 
 struct mount_mod *open_mount(const char *name, const char *err_prefix);
+struct mount_mod *open_umount(const char *name, const char *err_prefix);
 int close_mount(struct mount_mod *);
 
 /* mapent cache definition */
diff -Naur autofs-4.1.4/include/config.h autofs-modificat/include/config.h
--- autofs-4.1.4/include/config.h	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/include/config.h	2007-02-28 10:46:55.000000000 +0100
@@ -0,0 +1,28 @@
+/* include/config.h.  Generated by configure.  */
+#ident "$Id: config.h.in,v 1.4 2004/02/03 15:23:21 raven Exp $"
+/* -*- c -*-
+ *
+ * config.h.in: Pattern file for autofs to be filled in by configure
+ *
+ */
+
+/* Program paths */
+#define HAVE_MOUNT 1
+#define PATH_MOUNT "/bin/mount"
+
+#define HAVE_UMOUNT 1
+#define PATH_UMOUNT "/bin/umount"
+
+/* #undef HAVE_SMBMOUNT */
+/* #undef PATH_SMBMOUNT */
+
+#define HAVE_E2FSCK 1
+#define PATH_E2FSCK "/sbin/fsck.ext2"
+
+#define HAVE_E3FSCK 1
+#define PATH_E3FSCK "/sbin/fsck.ext3"
+
+/* Define this option if mount(8) supports the -s (sloppy) option */
+#define HAVE_SLOPPY_MOUNT 1
+
+/* #undef ENABLE_EXT_ENV */
diff -Naur autofs-4.1.4/Makefile.conf autofs-modificat/Makefile.conf
--- autofs-4.1.4/Makefile.conf	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/Makefile.conf	2007-02-28 10:46:55.000000000 +0100
@@ -0,0 +1,60 @@
+#
+# $id$
+#
+# Makefile.conf.in
+#
+# Pattern file to be filled in by configure; contains specific options to
+# build autofs.
+#
+
+# Do we build with -fpie?
+DAEMON_CFLAGS  = -fPIE
+DAEMON_LDFLAGS = -pie
+
+# Special parameters for glibc (libc 6)
+LIBNSL    = -lnsl
+LIBRESOLV = -lresolv
+
+# Hesiod support: yes (1) no (0)
+HESIOD = 1
+LIBHESIOD =  -lhesiod
+HESIOD_FLAGS = 
+
+# LDAP support: yes (1) no (0)
+LDAP = 1
+LIBLDAP=  -lldap -llber -lresolv
+LDAP_FLAGS = 
+
+# NIS+ support: yes (1) no (0)
+NISPLUS = 1
+
+# SMBFS support: yes (1) no (0)
+SMBFS = @HAVE_SMBMOUNT@
+
+# Support for calling e2fsck when mounting ext2 filesystems
+EXT2FS = 1
+
+# Support for calling e3fsck when mounting ext3 filesystems
+EXT3FS = 1
+
+#
+# Note: the DESTDIR define is so you can build autofs into a temporary
+# directory and still have all the compiled-in paths point to the right
+# place.
+#
+
+# Common install prefix
+prefix = /usr
+exec_prefix = ${prefix}
+
+# Directory for autofs modules
+autofslibdir = ${exec_prefix}/lib/autofs
+
+# Where to install the automount program
+sbindir = ${exec_prefix}/sbin
+
+# Where to install man pages
+mandir = ${prefix}/man
+
+# Location for init.d files
+initdir = /etc/init.d
diff -Naur autofs-4.1.4/modules/Makefile autofs-modificat/modules/Makefile
--- autofs-4.1.4/modules/Makefile	2004-08-29 14:46:23.000000000 +0200
+++ autofs-modificat/modules/Makefile	2007-02-28 13:03:49.000000000 +0100
@@ -10,13 +10,13 @@
 	lookup_multi.c \
 	parse_sun.c    \
 	mount_generic.c  mount_nfs.c  mount_afs.c  mount_autofs.c \
-	mount_changer.c  mount_bind.c
+	mount_changer.c  mount_bind.c umount_generic.c
 
 MODS :=	lookup_yp.so lookup_file.so lookup_program.so lookup_userhome.so \
 	lookup_multi.so \
 	parse_sun.so \
 	mount_generic.so mount_nfs.so mount_afs.so mount_autofs.so \
-	mount_changer.so mount_bind.so
+	mount_changer.so mount_bind.so umount_generic.so
 
 ifeq ($(EXT2FS), 1)
   SRCS += mount_ext2.c
diff -Naur autofs-4.1.4/modules/#umount_generic.# autofs-modificat/modules/#umount_generic.#
--- autofs-4.1.4/modules/#umount_generic.#	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/modules/#umount_generic.#	2007-02-28 11:55:41.000000000 +0100
@@ -0,0 +1 @@
+-cn
\ No newline at end of file
diff -Naur autofs-4.1.4/modules/umount_generic.c autofs-modificat/modules/umount_generic.c
--- autofs-4.1.4/modules/umount_generic.c	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/modules/umount_generic.c	2007-02-28 15:06:18.000000000 +0100
@@ -0,0 +1,73 @@
+/* ----------------------------------------------------------------------- *
+ *   
+ *  umount_generic.c - module for Linux automountd to umount filesystems
+ *                    for which no special magic is required
+ *
+ *   Copyright 2007 Jordi Prats - CESCA - All Rights Reserved
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
+ *   USA; either version 2 of the License, or (at your option) any later
+ *   version; incorporated herein by reference.
+ *
+ * ----------------------------------------------------------------------- */
+
+#include <stdio.h>
+#include <malloc.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <syslog.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#define MODULE_MOUNT
+#include "automount.h"
+
+#define MODPREFIX "umount(generic): "
+
+int mount_version = AUTOFS_MOUNT_VERSION;	/* Required by protocol */
+
+int mount_init(void **context)
+{
+	return 0;
+}
+
+int mount_umount(const char *root, const char *name, int name_len,
+		 const char *fstype, void *context)
+{
+	char path_buf[PATH_MAX];
+	struct stat st;
+	int sav_errno;
+	int is_smbfs = (strcmp(fstype, "smbfs") == 0);
+	int status;
+	int rv = 0;
+	
+	sprintf(path_buf, "%s/%s", root, name);
+	status =  lstat(path_buf, &st);
+	sav_errno = errno;
+
+	/* EIO appears to correspond to an smb mount that has gone away */
+	if (!status ||
+	    (is_smbfs && (sav_errno == EIO || sav_errno == EBADSLT))) {
+		int umount_ok = 0;
+
+		if (!status && (S_ISDIR(st.st_mode) && (st.st_dev != ap.dev)))
+			umount_ok = 1;
+
+		if (umount_ok || is_smbfs) {
+			rv = spawnll(LOG_DEBUG, 
+				    PATH_UMOUNT, PATH_UMOUNT, path_buf, NULL);
+		}
+	}
+	return rv;
+}
+
+int mount_done(void *context)
+{
+	return 0;
+}
diff -Naur autofs-4.1.4/modules/umount_generic.c~ autofs-modificat/modules/umount_generic.c~
--- autofs-4.1.4/modules/umount_generic.c~	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/modules/umount_generic.c~	2007-02-28 13:27:42.000000000 +0100
@@ -0,0 +1,74 @@
+#ident "$Id: mount_generic.c,v 1.15 2005/01/10 13:28:29 raven Exp $"
+/* ----------------------------------------------------------------------- *
+ *   
+ *  mount_generic.c - module for Linux automountd to mount filesystems
+ *                    for which no special magic is required
+ *
+ *   Copyright 1997-1999 Transmeta Corporation - All Rights Reserved
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
+ *   USA; either version 2 of the License, or (at your option) any later
+ *   version; incorporated herein by reference.
+ *
+ * ----------------------------------------------------------------------- */
+
+#include <stdio.h>
+#include <malloc.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <syslog.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#define MODULE_MOUNT
+#include "automount.h"
+
+#define MODPREFIX "umount(generic): "
+
+int mount_version = AUTOFS_MOUNT_VERSION;	/* Required by protocol */
+
+int mount_init(void **context)
+{
+	return 0;
+}
+
+int mount_umount(const char *root, const char *name, int name_len,
+		 const char *fstype, void *context)
+{
+	char path_buf[PATH_MAX];
+	struct stat st;
+	int sav_errno;
+	int is_smbfs = (strcmp(fstype, "smbfs") == 0);
+	int status;
+	int rv = 0;
+	
+	sprintf(path_buf, "%s/%s", root, name);
+	status =  lstat(path_buf, &st);
+	sav_errno = errno;
+
+	/* EIO appears to correspond to an smb mount that has gone away */
+	if (!status ||
+	    (is_smbfs && (sav_errno == EIO || sav_errno == EBADSLT))) {
+		int umount_ok = 0;
+
+		if (!status && (S_ISDIR(st.st_mode) && (st.st_dev != ap.dev)))
+			umount_ok = 1;
+
+		if (umount_ok || is_smbfs) {
+			rv = spawnll(LOG_DEBUG, 
+				    PATH_UMOUNT, PATH_UMOUNT, path_buf, NULL);
+		}
+	}
+	return rv;
+}
+
+int mount_done(void *context)
+{
+	return 0;
+}
diff -Naur autofs-4.1.4/samples/autofs-ldap-auto-master autofs-modificat/samples/autofs-ldap-auto-master
--- autofs-4.1.4/samples/autofs-ldap-auto-master	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/samples/autofs-ldap-auto-master	2007-02-28 11:02:14.000000000 +0100
@@ -0,0 +1,17 @@
+\x7fELF\x01\x01\x01\0\0\0\0\0\0\0\0\0\x02\0\x03\0\x01\0\0\0\0‰\x04\b4\0\0\0\x18\x1f\0\0\0\0\0\04\0 \0\a\0(\0\x1a\0\x19\0\x06\0\0\04\0\0\04€\x04\b4€\x04\bà\0\0\0à\0\0\0\x05\0\0\0\x04\0\0\0\x03\0\0\0\x14\x01\0\0\x14\x04\b\x14\x04\b\x13\0\0\0\x13\0\0\0\x04\0\0\0\x01\0\0\0\x01\0\0\0\0\0\0\0\0€\x04\b\0€\x04\bÈ^[\0\0È^[\0\0\x05\0\0\0\0\x10\0\0\x01\0\0\0È^[\0\0È«\x04\bÈ«\x04\bp\x01\0\0€\x01\0\0\x06\0\0\0\0\x10\0\0\x02\0\0\0Ü^[\0\0Ü«\x04\bÜ«\x04\bØ\0\0\0Ø\0\0\0\x06\0\0\0\x04\0\0\0\x04\0\0\0(\x01\0\0(\x04\b(\x04\b \0\0\0 \0\0\0\x04\0\0\0\x04\0\0\0Qåtd\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x06\0\0\0\x04\0\0\0/lib/ld-linux.so.2\0\0\x04\0\0\0\x10\0\0\0\x01\0\0\0GNU\0\0\0\0\0\x02\0\0\0\x06\0\0\0	\0\0\0\x03\0\0\0\x1d\0\0\0\x02\0\0\0\x06\0\0\0ˆ\0 \x01\0åM\v\x1d\0\0\0\x1f\0\0\0#\0\0\0ºã’|CEÕì¬KãÀ8ò‹\x1cØqX\x1c¹ñ\x0eêÓï\x0e2Ä÷\x12³¢÷\x12\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0N\0\0\0\0\0\0\0Á\0\0\0\x12\0\0\0µ\0\0\0\0\0\0\0+\0\0\0\x12\0\0\0“\0\0\0\0\0\0\0Ø\0\0\0\x12\0\0\0\x12\0\0\0\0\0\0\0\0\0\0\0 \0\0\0!\0\0\0\0\0\0\0\0\0\0\0 \0\0\0~\x01\0\0\0\0\0\0g\x01\0\0\x12\0\0\0ÿ\0\0\0\0\0\0\0\x10\x06\0\0\x12\0\0\0[\x01\0\0\0\0\0\0C\0\0\0\x12\0\0\0\x01\0\0\0\0\0\0Ÿ\x01\0\0\x12\0\0\0J\x01\0\0\0\0\0\0¹\x01\0\0\x12\0\0\0Ž\0\0\0\0\0\0\0ä\x01\0\0\x12\0\0\0s\0\0\0\0\0\0\0Æ\0\0\0\x12\0\0\0ó\0\0\0\0\0\0\0u\0\0\0\x12\0\0\0a\0\0\0\0\0\0\0e\0\0\0\x12\0\0\0b\x01\0\0\0\0\0\0I\0\0\0\x12\0\0\0Â\0\0\0\0\0\0\0Â\0\0\0\x12\0\0\09\x01\0\0\0\0\0\0^\x06\0\0\x12\0\0\0Ù\0\0\0\0\0\0\0œ\0\0\0\x12\0\0\0†\x01\0\0\0\0\0\09\0\0\0\x12\0\0\05\0\0\0\0\0\0\0¨\0\0\0\x12\0\0\0w\x01\0\0\0\0\0\0_\x01\0\0\x12\0\0\0ƒ\0\0\0\0\0\0\0+\0\0\0\x12\0\0\0…\x01\0\0\0\0\0\0$\0\0\0\x12\0\0\0¥\0\0\0\0\0\0\0¼\0\0\0\x12\0\0\0B\0\0\0\0\0\0\0}\x01\0\0\x12\0\0\0ã\0\0\0\0\0\0\0b\x02\0\0\x12\0\0\0Ÿ\x01\0\0\0\0\0\0;\0\0\0\x12\0\0\0R\x01\0\0\0\0\0\0W\0\0\0\x12\0\0\0»\x01\0\0H­\x04\b\0\0\0\0\x10\0ñÿ¨\x01\0\08­\x04\b\0\0\0\0\x10\0ñÿ*\x01\0\0È‘\x04\b\x04\0\0\0\x11\0\x0e\0p\x01\0\0<­\x04\b\x04\0\0\0\x11\0\x17\0¯\x01\0\08­\x04\b\0\0\0\0\x10\0ñÿÝ\0\0\0 ‡\x04\b\0\0\0\0\x12\0
+\0Ó\0\0\0¨‘\x04\b\0\0\0\0\x12\0\r\0C\x01\0\08­\x04\b\x04\0\0\0\x11\0\x17\0i\x01\0\0@­\x04\b\x04\0\0\0\x11\0\x17\0\0libldap-2.3.so.0\0__gmon_start__\0_Jv_RegisterClasses\0ldap_msgfree\0ldap_get_dn\0ldap_simple_bind_s\0ldap_control_free\0ldap_next_entry\0ldap_value_free\0ldap_search_ext_s\0ldap_err2string\0ldap_memfree\0ldap_first_entry\0_fini\0ldap_init\0ldap_get_values\0ldap_unbind\0ldap_set_option\0liblber-2.3.so.0\0libc.so.6\0_IO_stdin_used\0setlocale\0optind\0strrchr\0__strdup\0memset\0getopt\0optarg\0stderr\0fwrite\0strchr\0fprintf\0__libc_start_main\0snprintf\0_edata\0__bss_start\0_end\0GLIBC_2.0\0\0\0\0\0\0\0\0\0\0\0\0\0\x02\0\0\0\x02\0\x02\0\x02\0\x02\0\0\0\0\0\0\0\x02\0\0\0\x02\0\0\0\x02\0\0\0\x02\0\0\0\x02\0\0\0\0\0\0\0\x02\0\x02\0\x01\0\x01\0\x01\0\x02\0\x01\0\x01\0\x01\0\x02\0\x02\0\0\0\x01\0\x01\0 \x01\0\0\x10\0\0\0\0\0\0\0\x10ii\r\0\0\x02\0À\x01\0\0\0\0\0\0´¬\x04\b\x06\x04\0\08­\x04\b\x05$\0\0<­\x04\b\x05 \0\0@­\x04\b\x05%\0\0Ĭ\x04\b\a\x01\0\0Ȭ\x04\b\a\x02\0\0̬\x04\b\a\x03\0\0Ь\x04\b\a\x04\0\0Ô¬\x04\b\a\x06\0\0ج\x04\b\a\a\0\0ܬ\x04\b\a\b\0\0à¬\x04\b\a	\0\0ä¬\x04\b\a
+\0\0è¬\x04\b\a\v\0\0ì¬\x04\b\a\f\0\0ð¬\x04\b\a\r\0\0ô¬\x04\b\a\x0e\0\0ø¬\x04\b\a\x0f\0\0ü¬\x04\b\a\x10\0\0\0­\x04\b\a\x11\0\0\x04­\x04\b\a\x12\0\0\b­\x04\b\a\x13\0\0\f­\x04\b\a\x14\0\0\x10­\x04\b\a\x15\0\0\x14­\x04\b\a\x16\0\0\x18­\x04\b\a\x17\0\0\x1c­\x04\b\a\x18\0\0 ­\x04\b\a\x19\0\0$­\x04\b\a\x1a\0\0(­\x04\b\a^[\0\0,­\x04\b\a\x1c\0\0U‰åƒì\bèù\x01\0\0èP\x02\0\0èK
+\0\0ÉÃ\0ÿ5¼¬\x04\bÿ%À¬\x04\b\0\0\0\0ÿ%Ĭ\x04\bh\0\0\0\0éàÿÿÿÿ%Ȭ\x04\bh\b\0\0\0éÐÿÿÿÿ%̬\x04\bh\x10\0\0\0éÀÿÿÿÿ%Ь\x04\bh\x18\0\0\0é°ÿÿÿÿ%Ô¬\x04\bh \0\0\0é ÿÿÿÿ%ج\x04\bh(\0\0\0éÿÿÿÿ%ܬ\x04\bh0\0\0\0é€ÿÿÿÿ%à¬\x04\bh8\0\0\0épÿÿÿÿ%ä¬\x04\bh@\0\0\0é`ÿÿÿÿ%è¬\x04\bhH\0\0\0éPÿÿÿÿ%ì¬\x04\bhP\0\0\0é@ÿÿÿÿ%ð¬\x04\bhX\0\0\0é0ÿÿÿÿ%ô¬\x04\bh`\0\0\0é ÿÿÿÿ%ø¬\x04\bhh\0\0\0é\x10ÿÿÿÿ%ü¬\x04\bhp\0\0\0é\0ÿÿÿÿ%\0­\x04\bhx\0\0\0éðþÿÿÿ%\x04­\x04\bh€\0\0\0éàþÿÿÿ%\b­\x04\bhˆ\0\0\0éÐþÿÿÿ%\f­\x04\bh\0\0\0éÀþÿÿÿ%\x10­\x04\bh˜\0\0\0é°þÿÿÿ%\x14­\x04\bh \0\0\0é þÿÿÿ%\x18­\x04\bh¨\0\0\0éþÿÿÿ%\x1c­\x04\bh°\0\0\0é€þÿÿÿ% ­\x04\bh¸\0\0\0épþÿÿÿ%$­\x04\bhÀ\0\0\0é`þÿÿÿ%(­\x04\bhÈ\0\0\0éPþÿÿÿ%,­\x04\bhÐ\0\0\0é@þÿÿ\0\0\0\0\0\0\0\01í^‰áƒäðPTRh\0‘\x04\bh\x10‘\x04\bQVh€\x04\bè—þÿÿôU‰åSƒì\x04è\0\0\0\0[Ãˆ#\0\0‹“üÿÿÿ…Òt\x05è2þÿÿX[ÉАU‰åƒì\b€=D­\x04\b\0t\fë\x1cƒÀ\x04£4­\x04\bÿÒ¡4­\x04\b‹\x10…ÒuëÆ\x05D­\x04\b\x01ÉÐU‰åƒì\b¡Ø«\x04\b…Àt\x12¸\0\0\0\0…Àt	Ç\x04$Ø«\x04\bÿÐÉАU‰ÅW‰ÏV‰ÖSì\\b\0\0\x0f¶\x05’\x04\b‹œ$t\b\0\0Ç„$X\b\0\0\0\0\0\0Ç„$T\b\0\0\0\0\0\0ˆD$DD$EÇ„$P\b\0\0\0\0\0\0ÇD$\bÿ\a\0\0ÇD$\x04\0\0\0\0‰\x04$è™ýÿÿ‰\x1c$èÑþÿÿ‰„$D\b\0\0‹„$|\b\0\0‰\x04$è»þÿÿ‰\$\x10\$D‰t$\x14´$D\b\0\0‰|$\f¼$X\b\0\0Ç„$L\b\0\0\0\0\0\0ÇD$\bБ\x04\b‰„$H\b\0\0ÇD$\x04\0\b\0\0‰\x1c$ècþÿÿ„$P\b\0\0‰D$(„$T\b\0\0ÇD$$\0\0\0\0ÇD$ \0\0\0\0‰D$\x1c‰|$\x18ÇD$\x14\0\0\0\0‰t$\x10‰\$\fÇD$\b\x02\0\0\0ÇD$\x04\0\0\0\0‰,$è¡üÿÿ…Àt\x17ÇD$8\0\0\0\0‹D$8Ä\\b\0\0[^_]Ë„$P\b\0\0‰,$‰D$\x04è3ýÿÿ…ÀtÒ‰D$\x04‰,$è³ýÿÿ…À‰D$4t¾€8\0t¹‹„$p\b\0\0ÇD$\bë‘\x04\bÇD$\x04\0\b\0\0‰\x1c$‰D$\fè£ýÿÿ‹„$D\b\0\0‰\x04$è”üÿÿ‹„$H\b\0\0‰\x04$è…üÿÿ‹„$X\b\0\0…Àt\x13‰\x04$è¢üÿÿÇ„$X\b\0\0\0\0\0\0‹„$T\b\0\0…Àt\x13‰\x04$è„üÿÿÇ„$T\b\0\0\0\0\0\0‹„$P\b\0\0…Àt\x13‰\x04$èÆüÿÿÇ„$P\b\0\0\0\0\0\0‹„$x\b\0\0‰\x04$è,ýÿÿ‰„$D\b\0\0‹„$|\b\0\0‰\x04$è\x16ýÿÿÇ„$L\b\0\0\0\0\0\0ÇD$$\0\0\0\0ÇD$ \0\0\0\0‰|$\x18ÇD$\x14\0\0\0\0‰„$H\b\0\0„$P\b\0\0‰D$(„$T\b\0\0‰D$\x1c‹D$4‰t$\x10‰\$\fÇD$\b\x02\0\0\0‰D$\x04‰,$è2ûÿÿ…À\x0f…þÿÿ‹„$P\b\0\0‰,$‰D$\x04è×ûÿÿÇD$8\0\0\0\0…À‰Æu\x17é‘\0\0\0‰t$\x04‰,$èxûÿÿ…À‰Æt\x7f‹„$x\b\0\0‰t$\x04‰,$‰D$\bè;üÿÿ‰t$\x04‰,$‰Ã‹„$|\b\0\0‰D$\bè"üÿÿ…Û‰Çt4‹\x13…Òt&…Àt"‹\0…Àt\x1c‰D$\b‰T$\x04Ç\x04$ü‘\x04\bèˆûÿÿÇD$8\x01\0\0\0‰\x1c$è¨ûÿÿ…ÿt€‰<$èœûÿÿt&\0éoÿÿÿ‹D$4‰\x04$èWúÿÿ‹„$D\b\0\0‰\x04$èÈúÿÿ‹„$H\b\0\0‰\x04$è¹úÿÿ‹„$X\b\0\0…Àt\x13‰\x04$èÖúÿÿÇ„$X\b\0\0\0\0\0\0‹„$T\b\0\0…Àt\x13‰\x04$è¸úÿÿÇ„$T\b\0\0\0\0\0\0‹„$P\b\0\0…À\x0f„iýÿÿ‰\x04$èöúÿÿé\ýÿÿ‰ö¼'\0\0\0\0L$\x04ƒäðÿqüƒì\‰l$X½$’\x04\b‰L$H‰\$L‰t$P‰|$T‹\x19‹q\x04ÇD$\x04]’\x04\bÇ\x04$\x06\0\0\0èyúÿÿÇD$(\x03’\x04\bÇD$,\x0e’\x04\bÇD$0\x11’\x04\bÇD$$\x1d’\x04\bÇD$\b:’\x04\b‰t$\x04‰\x1c$è%úÿÿƒøÿ‰D$D\x0f„à\0\0\0ƒèeƒø\x11w\bÿ$…š\x04\b‹6ÇD$\x04/\0\0\0‰4$èfùÿÿ…Àt\x13‰4$ÇD$\x04/\0\0\0è’ùÿÿp\x01‹T$0‹D$(‹|$,ÇD$ .’\x04\b‰T$\x1c‹T$$‰D$\x14‰|$\x18‰l$\x10‰T$\f‰t$\bÇD$\x04Øš\x04\b¡<­\x04\b‰\x04$è\x1aúÿÿ1À‹L$H‹\$L‹t$P‹|$T‹l$XƒÄ\aüË-@­\x04\bé9ÿÿÿ¡@­\x04\b‰D$0é+ÿÿÿ‹\x15@­\x04\b‰T$(é\x1cÿÿÿ¡@­\x04\b‰D$$é\x0eÿÿÿ‹=@­\x04\b‰|$,éÿþÿÿ¡8­\x04\bÇD$4.’\x04\b‹\x14†…Òt	€:\0\x0f…Î\0\0\0ÇD$\x04…\x01\0\0Ç\x04$\0\0\0\0è7ùÿÿ…À\x0f„ƒ\0\0\0‰ÃD$DÇD$D\x03\0\0\0‰D$\bÇD$\x04\x11\0\0\0‰\x1c$è]øÿÿ…À\x0f…‘\0\0\0ÇD$\b\0\0\0\0ÇD$\x04\0\0\0\0‰\x1c$èí÷ÿÿ…À\x0f„”\0\0\0‰\x04$è=ùÿÿ‰D$\f‹\x06ÇD$\x04 ›\x04\b‰D$\b¡<­\x04\b‰\x04$è\x0eùÿÿ‰\x1c$èføÿÿ¸\x02\0\0\0éäþÿÿ¡<­\x04\bÇD$\b\x18\0\0\0ÇD$\x04\x01\0\0\0Ç\x04$E’\x04\b‰D$\fè·øÿÿ¸\x01\0\0\0éµþÿÿ‰T$4é)ÿÿÿ‰\x1c$è\x1cøÿÿÇD$\x04…\x01\0\0Ç\x04$\0\0\0\0èXøÿÿ‰ÃéLÿÿÿ‹T$(‹D$,‹|$0‹L$$‰T$\x04‹T$4‰D$\b‰Ø‰|$\f‰,$èùÿÿ…Àt\x10‰\x1c$èË÷ÿÿ1ÀéKþÿÿ‹t$$¸^’\x04\b¹\r\0\0\0ü‰Çó¦u^¿k’\x04\b¹
+\0\0\0‰îó¦uN‹T$(\x0f¶\x05u’\x04\b:\x02u?\x0f¶\x05v’\x04\b:B\x01u3\x0f¶\x05w’\x04\b:B\x02u'‹|$,\x0f¶\x05\x0e’\x04\b:\au\x18\x0f¶\x05\x0f’\x04\b:G\x01u\f\x0f¶\x05\x10’\x04\b:G\x02t4‹T$4¹^’\x04\b‰ØÇD$\fx’\x04\bÇD$\b\x0e’\x04\bÇD$\x04u’\x04\bÇ\x04$k’\x04\bèÙøÿÿéIÿÿÿ‹t$0¿x’\x04\b¹\x15\0\0\0ó¦\x0f„3ÿÿÿ봐U‰å]Ít&\0¼'\0\0\0\0U‰åWVSè^\0\0\0Ã^[\0\0ƒì\x1cè÷õÿÿƒ\x10ÿÿÿ‰Eðƒ\x10ÿÿÿ)EðÁ}ð\x02‹Uð…Òt+1ÿ‰Æ¶\0\0\0\0‹E\x10ƒÇ\x01‰D$\b‹E\f‰D$\x04‹E\b‰\x04$ÿ\x16ƒÆ\x049}ðu߃Ä\x1c[^_]Ë\x1c$АU‰åS»È«\x04\bƒì\x04¡È«\x04\bƒøÿt\fƒë\x04ÿЋ\x03ƒøÿuôƒÄ\x04[]ÃU‰åSƒì\x04è\0\0\0\0[Ã\x04^[\0\0è÷ÿÿY[ÉÃ\x03\0\0\0\x01\0\x02\0\0\0\0\0(&(objectclass=%s)(%s=%s))\0(objectclass=%s)\0%s %s
+\0nisMapName\0cn\0nisMapEntry\0nisMap\0nisObject\0auto.master\0m:e:n:k:v:\0error initializing LDAP
+\0automountMap\0automount\0ou\0automountInformation\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0›Ž\x04\b\x10Ž\x04\b\x10Ž\x04\b\x10Ž\x04\b\x10Ž\x04\b\x10Ž\x04\bÑŽ\x04\b\x10Ž\x04\bÃŽ\x04\b´Ž\x04\b\x10Ž\x04\b\x10Ž\x04\b\x10Ž\x04\b\x10Ž\x04\b\x10Ž\x04\b\x10Ž\x04\b\x10Ž\x04\b¦Ž\x04\bsyntax: %s
+	[-m %s] (map object class)
+	[-e %s] (entry object class)
+	[-n %s] (attribute used as map key)
+	[-k %s] (attribute used as entry key)
+	[-v %s] (attribute used as value)
+	[%s] (map name)
+\0\0\0%s: error binding to server: %s
+\0\0\0\0\0\0\0\0ÿÿÿÿ\0\0\0\0ÿÿÿÿ\0\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0\x01\0\0\0\x0f\x01\0\0\x01\0\0\0 \x01\0\0\f\0\0\0 ‡\x04\b\r\0\0\0¨‘\x04\bõþÿoH\x04\b\x05\0\0\0ðƒ\x04\b\x06\0\0\0\x04\b
+\0\0\0Ê\x01\0\0\v\0\0\0\x10\0\0\0\x15\0\0\0\0\0\0\0\x03\0\0\0¸¬\x04\b\x02\0\0\0Ø\0\0\0\x14\0\0\0\x11\0\0\0\x17\0\0\0H†\x04\b\x11\0\0\0(†\x04\b\x12\0\0\0 \0\0\0\x13\0\0\0\b\0\0\0þÿÿo\b†\x04\bÿÿÿo\x01\0\0\0ðÿÿoº…\x04\b\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0Ü«\x04\b\0\0\0\0\0\0\0\0N‡\x04\b^‡\x04\bn‡\x04\b~‡\x04\bŽ‡\x04\bž‡\x04\b®‡\x04\b¾‡\x04\b·\x04\bÞ‡\x04\bî‡\x04\bþ‡\x04\b\x0eˆ\x04\b\x1eˆ\x04\b.ˆ\x04\b>ˆ\x04\bNˆ\x04\b^ˆ\x04\bnˆ\x04\b~ˆ\x04\bŽˆ\x04\bžˆ\x04\b®ˆ\x04\b¾ˆ\x04\bΈ\x04\bÞˆ\x04\bîˆ\x04\b\0\0\0\0Ô«\x04\b\0GCC: (GNU) 4.1.1 20061011 (Red Hat 4.1.1-30)\0\0GCC: (GNU) 4.1.1 20061011 (Red Hat 4.1.1-30)\0\0GCC: (GNU) 4.1.1 20070105 (Red Hat 4.1.1-51)\0\0GCC: (GNU) 4.1.1 20070105 (Red Hat 4.1.1-51)\0\0GCC: (GNU) 4.1.1 20070105 (Red Hat 4.1.1-51)\0\0GCC: (GNU) 4.1.1 20061011 (Red Hat 4.1.1-30)\0\0.shstrtab\0.interp\0.note.ABI-tag\0.gnu.hash\0.dynsym\0.dynstr\0.gnu.version\0.gnu.version_r\0.rel.dyn\0.rel.plt\0.init\0.text\0.fini\0.rodata\0.eh_frame\0.ctors\0.dtors\0.jcr\0.dynamic\0.got\0.got.plt\0.data\0.bss\0.comment\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\v\0\0\0\x01\0\0\0\x02\0\0\0\x14\x04\b\x14\x01\0\0\x13\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x13\0\0\0\a\0\0\0\x02\0\0\0(\x04\b(\x01\0\0 \0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0!\0\0\0öÿÿo\x02\0\0\0H\x04\bH\x01\0\0H\0\0\0\x04\0\0\0\0\0\0\0\x04\0\0\0\x04\0\0\0+\0\0\0\v\0\0\0\x02\0\0\0\x04\b\x01\0\0`\x02\0\0\x05\0\0\0\x01\0\0\0\x04\0\0\0\x10\0\0\03\0\0\0\x03\0\0\0\x02\0\0\0ðƒ\x04\bð\x03\0\0Ê\x01\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0;\0\0\0ÿÿÿo\x02\0\0\0º…\x04\bº\x05\0\0L\0\0\0\x04\0\0\0\0\0\0\0\x02\0\0\0\x02\0\0\0H\0\0\0þÿÿo\x02\0\0\0\b†\x04\b\b\x06\0\0 \0\0\0\x05\0\0\0\x01\0\0\0\x04\0\0\0\0\0\0\0W\0\0\0	\0\0\0\x02\0\0\0(†\x04\b(\x06\0\0 \0\0\0\x04\0\0\0\0\0\0\0\x04\0\0\0\b\0\0\0`\0\0\0	\0\0\0\x02\0\0\0H†\x04\bH\x06\0\0Ø\0\0\0\x04\0\0\0\v\0\0\0\x04\0\0\0\b\0\0\0i\0\0\0\x01\0\0\0\x06\0\0\0 ‡\x04\b \a\0\0\x17\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0d\0\0\0\x01\0\0\0\x06\0\0\08‡\x04\b8\a\0\0À\x01\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\x04\0\0\0o\0\0\0\x01\0\0\0\x06\0\0\0\0‰\x04\b\0	\0\0¨\b\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0u\0\0\0\x01\0\0\0\x06\0\0\0¨‘\x04\b¨\x11\0\0\x1c\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0{\0\0\0\x01\0\0\0\x02\0\0\0Ä‘\x04\bÄ\x11\0\0\0
+\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0ƒ\0\0\0\x01\0\0\0\x02\0\0\0Ä›\x04\bÄ^[\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x03\0\0\0È«\x04\bÈ^[\0\0\b\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0”\0\0\0\x01\0\0\0\x03\0\0\0Ы\x04\bÐ^[\0\0\b\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0›\0\0\0\x01\0\0\0\x03\0\0\0Ø«\x04\bØ^[\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0 \0\0\0\x06\0\0\0\x03\0\0\0Ü«\x04\bÜ^[\0\0Ø\0\0\0\x05\0\0\0\0\0\0\0\x04\0\0\0\b\0\0\0©\0\0\0\x01\0\0\0\x03\0\0\0´¬\x04\b´\x1c\0\0\x04\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\x04\0\0\0®\0\0\0\x01\0\0\0\x03\0\0\0¸¬\x04\b¸\x1c\0\0x\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\x04\0\0\0·\0\0\0\x01\0\0\0\x03\0\0\00­\x04\b0\x1d\0\0\b\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0½\0\0\0\b\0\0\0\x03\0\0\08­\x04\b8\x1d\0\0\x10\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0Â\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\08\x1d\0\0\x14\x01\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0L\x1e\0\0Ë\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0
\ No newline at end of file
diff -Naur autofs-4.1.4/samples/autofs-ldap-auto-master.o autofs-modificat/samples/autofs-ldap-auto-master.o
--- autofs-4.1.4/samples/autofs-ldap-auto-master.o	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/samples/autofs-ldap-auto-master.o	2007-02-28 11:02:14.000000000 +0100
@@ -0,0 +1,15 @@
+\x7fELF\x01\x01\x01\0\0\0\0\0\0\0\0\0\x01\0\x03\0\x01\0\0\0\0\0\0\0\0\0\0\0\x18\x12\0\0\0\0\0\04\0\0\0\0\0(\0\x0e\0\v\0\0\0\0\0\0\0\0\0\0\0\0\0U‰ÅW‰ÏV‰ÖSì\\b\0\0\x0f¶\x05\0\0\0\0‹œ$t\b\0\0Ç„$X\b\0\0\0\0\0\0Ç„$T\b\0\0\0\0\0\0ˆD$DD$EÇ„$P\b\0\0\0\0\0\0ÇD$\bÿ\a\0\0ÇD$\x04\0\0\0\0‰\x04$èüÿÿÿ‰\x1c$èüÿÿÿ‰„$D\b\0\0‹„$|\b\0\0‰\x04$èüÿÿÿ‰\$\x10\$D‰t$\x14´$D\b\0\0‰|$\f¼$X\b\0\0Ç„$L\b\0\0\0\0\0\0ÇD$\b\0\0\0\0‰„$H\b\0\0ÇD$\x04\0\b\0\0‰\x1c$èüÿÿÿ„$P\b\0\0‰D$(„$T\b\0\0ÇD$$\0\0\0\0ÇD$ \0\0\0\0‰D$\x1c‰|$\x18ÇD$\x14\0\0\0\0‰t$\x10‰\$\fÇD$\b\x02\0\0\0ÇD$\x04\0\0\0\0‰,$èüÿÿÿ…Àt\x17ÇD$8\0\0\0\0‹D$8Ä\\b\0\0[^_]Ë„$P\b\0\0‰,$‰D$\x04èüÿÿÿ…ÀtÒ‰D$\x04‰,$èüÿÿÿ…À‰D$4t¾€8\0t¹‹„$p\b\0\0ÇD$\b^[\0\0\0ÇD$\x04\0\b\0\0‰\x1c$‰D$\fèüÿÿÿ‹„$D\b\0\0‰\x04$èüÿÿÿ‹„$H\b\0\0‰\x04$èüÿÿÿ‹„$X\b\0\0…Àt\x13‰\x04$èüÿÿÿÇ„$X\b\0\0\0\0\0\0‹„$T\b\0\0…Àt\x13‰\x04$èüÿÿÿÇ„$T\b\0\0\0\0\0\0‹„$P\b\0\0…Àt\x13‰\x04$èüÿÿÿÇ„$P\b\0\0\0\0\0\0‹„$x\b\0\0‰\x04$èüÿÿÿ‰„$D\b\0\0‹„$|\b\0\0‰\x04$èüÿÿÿÇ„$L\b\0\0\0\0\0\0ÇD$$\0\0\0\0ÇD$ \0\0\0\0‰|$\x18ÇD$\x14\0\0\0\0‰„$H\b\0\0„$P\b\0\0‰D$(„$T\b\0\0‰D$\x1c‹D$4‰t$\x10‰\$\fÇD$\b\x02\0\0\0‰D$\x04‰,$èüÿÿÿ…À\x0f…þÿÿ‹„$P\b\0\0‰,$‰D$\x04èüÿÿÿÇD$8\0\0\0\0…À‰Æu\x17é‘\0\0\0‰t$\x04‰,$èüÿÿÿ…À‰Æt\x7f‹„$x\b\0\0‰t$\x04‰,$‰D$\bèüÿÿÿ‰t$\x04‰,$‰Ã‹„$|\b\0\0‰D$\bèüÿÿÿ…Û‰Çt4‹\x13…Òt&…Àt"‹\0…Àt\x1c‰D$\b‰T$\x04Ç\x04$,\0\0\0èüÿÿÿÇD$8\x01\0\0\0‰\x1c$èüÿÿÿ…ÿt€‰<$èüÿÿÿt&\0éoÿÿÿ‹D$4‰\x04$èüÿÿÿ‹„$D\b\0\0‰\x04$èüÿÿÿ‹„$H\b\0\0‰\x04$èüÿÿÿ‹„$X\b\0\0…Àt\x13‰\x04$èüÿÿÿÇ„$X\b\0\0\0\0\0\0‹„$T\b\0\0…Àt\x13‰\x04$èüÿÿÿÇ„$T\b\0\0\0\0\0\0‹„$P\b\0\0…À\x0f„iýÿÿ‰\x04$èüÿÿÿé\ýÿÿ‰ö¼'\0\0\0\0L$\x04ƒäðÿqüƒì\‰l$X½U\0\0\0‰L$H‰\$L‰t$P‰|$T‹\x19‹q\x04ÇD$\x043\0\0\0Ç\x04$\x06\0\0\0èüÿÿÿÇD$(4\0\0\0ÇD$,?\0\0\0ÇD$0B\0\0\0ÇD$$N\0\0\0ÇD$\bk\0\0\0‰t$\x04‰\x1c$èüÿÿÿƒøÿ‰D$D\x0f„à\0\0\0ƒèeƒø\x11w\bÿ$…\0\b\0\0‹6ÇD$\x04/\0\0\0‰4$èüÿÿÿ…Àt\x13‰4$ÇD$\x04/\0\0\0èüÿÿÿp\x01‹T$0‹D$(‹|$,ÇD$ _\0\0\0‰T$\x1c‹T$$‰D$\x14‰|$\x18‰l$\x10‰T$\f‰t$\bÇD$\x04\0\0\0\0¡\0\0\0\0‰\x04$èüÿÿÿ1À‹L$H‹\$L‹t$P‹|$T‹l$XƒÄ\aüË-\0\0\0\0é9ÿÿÿ¡\0\0\0\0‰D$0é+ÿÿÿ‹\x15\0\0\0\0‰T$(é\x1cÿÿÿ¡\0\0\0\0‰D$$é\x0eÿÿÿ‹=\0\0\0\0‰|$,éÿþÿÿ¡\0\0\0\0ÇD$4_\0\0\0‹\x14†…Òt	€:\0\x0f…Î\0\0\0ÇD$\x04…\x01\0\0Ç\x04$\0\0\0\0èüÿÿÿ…À\x0f„ƒ\0\0\0‰ÃD$DÇD$D\x03\0\0\0‰D$\bÇD$\x04\x11\0\0\0‰\x1c$èüÿÿÿ…À\x0f…‘\0\0\0ÇD$\b\0\0\0\0ÇD$\x04\0\0\0\0‰\x1c$èüÿÿÿ…À\x0f„”\0\0\0‰\x04$èüÿÿÿ‰D$\f‹\x06ÇD$\x04È\0\0\0‰D$\b¡\0\0\0\0‰\x04$èüÿÿÿ‰\x1c$èüÿÿÿ¸\x02\0\0\0éäþÿÿ¡\0\0\0\0ÇD$\b\x18\0\0\0ÇD$\x04\x01\0\0\0Ç\x04$v\0\0\0‰D$\fèüÿÿÿ¸\x01\0\0\0éµþÿÿ‰T$4é)ÿÿÿ‰\x1c$èüÿÿÿÇD$\x04…\x01\0\0Ç\x04$\0\0\0\0èüÿÿÿ‰ÃéLÿÿÿ‹T$(‹D$,‹|$0‹L$$‰T$\x04‹T$4‰D$\b‰Ø‰|$\f‰,$èùÿÿ…Àt\x10‰\x1c$èüÿÿÿ1ÀéKþÿÿ‹t$$¸\0\0\0¹\r\0\0\0ü‰Çó¦u^¿œ\0\0\0¹
+\0\0\0‰îó¦uN‹T$(\x0f¶\x05¦\0\0\0:\x02u?\x0f¶\x05\x01\0\0\0:B\x01u3\x0f¶\x05\x02\0\0\0:B\x02u'‹|$,\x0f¶\x05?\0\0\0:\au\x18\x0f¶\x05\x01\0\0\0:G\x01u\f\x0f¶\x05\x02\0\0\0:G\x02t4‹T$4¹\0\0\0‰ØÇD$\f©\0\0\0ÇD$\b?\0\0\0ÇD$\x04¦\0\0\0Ç\x04$œ\0\0\0èÙøÿÿéIÿÿÿ‹t$0¿©\0\0\0¹\x15\0\0\0ó¦\x0f„3ÿÿÿë´(&(objectclass=%s)(%s=%s))\0(objectclass=%s)\0%s %s
+\0\0nisMapName\0cn\0nisMapEntry\0nisMap\0nisObject\0auto.master\0m:e:n:k:v:\0error initializing LDAP
+\0automountMap\0automount\0ou\0automountInformation\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0ë\x04\0\0`\x04\0\0`\x04\0\0`\x04\0\0`\x04\0\0`\x04\0\0!\x05\0\0`\x04\0\0\x13\x05\0\0\x04\x05\0\0`\x04\0\0`\x04\0\0`\x04\0\0`\x04\0\0`\x04\0\0`\x04\0\0`\x04\0\0ö\x04\0\0syntax: %s
+	[-m %s] (map object class)
+	[-e %s] (entry object class)
+	[-n %s] (attribute used as map key)
+	[-k %s] (attribute used as entry key)
+	[-v %s] (attribute used as value)
+	[%s] (map name)
+\0\0\0%s: error binding to server: %s
+\0\0GCC: (GNU) 4.1.1 20070105 (Red Hat 4.1.1-51)\0\0.symtab\0.strtab\0.shstrtab\0.rel.text\0.data\0.bss\0.rodata.str1.1\0.rel.rodata\0.rodata.str1.4\0.comment\0.note.GNU-stack\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x1f\0\0\0\x01\0\0\0\x06\0\0\0\0\0\0\0@\0\0\0D\a\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\0\0\0\0^[\0\0\0	\0\0\0\0\0\0\0\0\0\0\0\\x18\0\0 \x02\0\0\f\0\0\0\x01\0\0\0\x04\0\0\0\b\0\0\0%\0\0\0\x01\0\0\0\x03\0\0\0\0\0\0\0„\a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0+\0\0\0\b\0\0\0\x03\0\0\0\0\0\0\0„\a\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\00\0\0\0\x01\0\0\02\0\0\0\0\0\0\0„\a\0\0¾\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\x01\0\0\0C\0\0\0\x01\0\0\0\x02\0\0\0\0\0\0\0D\b\0\0H\b\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\0\0\0\0?\0\0\0	\0\0\0\0\0\0\0\0\0\0\0ü\x1a\0\0\0\0\0\f\0\0\0\x06\0\0\0\x04\0\0\0\b\0\0\0K\0\0\0\x01\0\0\02\0\0\0\0\0\0\0Œ\x10\0\0é\0\0\0\0\0\0\0\0\0\0\0\x04\0\0\0\x01\0\0\0Z\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0u\x11\0\0.\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0c\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0£\x11\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x11\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0£\x11\0\0s\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\x01\0\0\0\x02\0\0\0\0\0\0\0\0\0\0\0H\x14\0\0 \x02\0\0\r\0\0\0\r\0\0\0\x04\0\0\0\x10\0\0\0	\0\0\0\x03\0\0\0\0\0\0\0\0\0\0\0è\x16\0\0q\x01\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\x01\0\0\0\0\0\0\0\0\0\0\0\x04\0ñÿ\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x03\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x04\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x05\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\x06\0^[\0\0\0\0\0\0\0Ç\x03\0\0\x02\0\x01\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0\b\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0
+\0$\0\0\0¦\0\0\0\0\0\0\0\0\0\x05\0*\0\0\0?\0\0\0\0\0\0\0\0\0\x05\0\0\0\0\0\0\0\0\0\0\0\0\0\x03\0	\0/\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\06\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0?\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0H\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0Z\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0k\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0w\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0|\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0Ž\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0›\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0«\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0»\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0Â\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0Ò\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0ß\0\0\0Ð\x03\0\0t\x03\0\0\x12\0\x01\0ä\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0î\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0õ\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0ü\0\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\x04\x01\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\v\x01\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\x13\x01\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\x1a\x01\0\0\0\0\0\0\0\0\0\0\x10\0\0\0!\x01\0\0\0\0\0\0\0\0\0\0\x10\0\0\0+\x01\0\0\0\0\0\0\0\0\0\0\x10\0\0\0;\x01\0\0\0\0\0\0\0\0\0\0\x10\0\0\0N\x01\0\0\0\0\0\0\0\0\0\0\x10\0\0\0^\x01\0\0\0\0\0\0\0\0\0\0\x10\0\0\0j\x01\0\0\0\0\0\0\0\0\0\0\x10\0\0\0\0autofs-ldap-auto-master.c\0dump_map\0.LC17\0.LC6\0memset\0__strdup\0snprintf\0ldap_search_ext_s\0ldap_first_entry\0ldap_get_dn\0free\0ldap_control_free\0ldap_msgfree\0ldap_next_entry\0ldap_get_values\0printf\0ldap_value_free\0ldap_memfree\0main\0setlocale\0getopt\0strchr\0strrchr\0stderr\0fprintf\0optarg\0optind\0ldap_init\0ldap_set_option\0ldap_simple_bind_s\0ldap_err2string\0ldap_unbind\0fwrite\0\0\0\0\x13\0\0\0\x01\x06\0\0[\0\0\0\x02\r\0\0c\0\0\0\x02\x0e\0\0y\0\0\0\x02\x0e\0\0ª\0\0\0\x01\x05\0\0Á\0\0\0\x02\x0f\0\0\x13\x01\0\0\x02\x10\0\0A\x01\0\0\x02\x11\0\0Q\x01\0\0\x02\x12\0\0m\x01\0\0\x01\x05\0\0\x01\0\0\x02\x0f\0\0\x01\0\0\x02\x13\0\0Ÿ\x01\0\0\x02\x13\0\0²\x01\0\0\x02\x14\0\0Ð\x01\0\0\x02\x14\0\0î\x01\0\0\x02\x15\0\0\b\x02\0\0\x02\x0e\0\0\x1e\x02\0\0\x02\x0e\0\0‚\x02\0\0\x02\x10\0\0\x02\0\0\x02\x11\0\0¼\x02\0\0\x02\x16\0\0Ù\x02\0\0\x02\x17\0\0ò\x02\0\0\x02\x17\0\0\x17\x03\0\0\x01\x05\0\0\x1c\x03\0\0\x02\x18\0\0,\x03\0\0\x02\x19\0\08\x03\0\0\x02\x19\0\0M\x03\0\0\x02\x1a\0\0\\x03\0\0\x02\x13\0\0k\x03\0\0\x02\x13\0\0~\x03\0\0\x02\x14\0\0œ\x03\0\0\x02\x14\0\0¾\x03\0\0\x02\x15\0\0â\x03\0\0\x01\x05\0\0ÿ\x03\0\0\x01\x05\0\0\v\x04\0\0\x02\x1c\0\0\x13\x04\0\0\x01\x05\0\0^[\x04\0\0\x01\x05\0\0#\x04\0\0\x01\x05\0\0+\x04\0\0\x01\x05\0\03\x04\0\0\x01\x05\0\0?\x04\0\0\x02\x1d\0\0[\x04\0\0\x01\x06\0\0n\x04\0\0\x02\x1e\0\0‚\x04\0\0\x02\x1f\0\0™\x04\0\0\x01\x05\0\0½\x04\0\0\x01\b\0\0Â\x04\0\0\x01 \0\0Ê\x04\0\0\x02!\0\0í\x04\0\0\x01"\0\0÷\x04\0\0\x01"\0\0\x06\x05\0\0\x01"\0\0\x14\x05\0\0\x01"\0\0#\x05\0\0\x01"\0\01\x05\0\0\x01#\0\09\x05\0\0\x01\x05\0\0]\x05\0\0\x02$\0\0‡\x05\0\0\x02%\0\0§\x05\0\0\x02&\0\0·\x05\0\0\x02'\0\0Å\x05\0\0\x01\b\0\0Î\x05\0\0\x01 \0\0Ö\x05\0\0\x02!\0\0Þ\x05\0\0\x02(\0\0í\x05\0\0\x01 \0\0\x04\x06\0\0\x01\x05\0\0\r\x06\0\0\x02)\0\0(\x06\0\0\x02(\0\0<\x06\0\0\x02$\0\0y\x06\0\0\x02(\0\0Š\x06\0\0\x01\x05\0\0›\x06\0\0\x01\x05\0\0±\x06\0\0\x01\x05\0\0¼\x06\0\0\x01
+\0\0È\x06\0\0\x01
+\0\0Ø\x06\0\0\x01\x05\0\0ã\x06\0\0\x01\v\0\0ï\x06\0\0\x01\v\0\0ý\x06\0\0\x01\x05\0\0\a\a\0\0\x01\x05\0\0\x0f\a\0\0\x01\x05\0\0\x17\a\0\0\x01\x05\0\0\x1e\a\0\0\x01\x05\0\01\a\0\0\x01\x05\0\0\0\b\0\0\x01\x02\0\0\x04\b\0\0\x01\x02\0\0\b\b\0\0\x01\x02\0\0\f\b\0\0\x01\x02\0\0\x10\b\0\0\x01\x02\0\0\x14\b\0\0\x01\x02\0\0\x18\b\0\0\x01\x02\0\0\x1c\b\0\0\x01\x02\0\0 \b\0\0\x01\x02\0\0$\b\0\0\x01\x02\0\0(\b\0\0\x01\x02\0\0,\b\0\0\x01\x02\0\00\b\0\0\x01\x02\0\04\b\0\0\x01\x02\0\08\b\0\0\x01\x02\0\0<\b\0\0\x01\x02\0\0@\b\0\0\x01\x02\0\0D\b\0\0\x01\x02\0\0
\ No newline at end of file
diff -Naur autofs-4.1.4/samples/Makefile autofs-modificat/samples/Makefile
--- autofs-4.1.4/samples/Makefile	2005-01-04 15:36:54.000000000 +0100
+++ autofs-modificat/samples/Makefile	2007-02-28 10:46:48.000000000 +0100
@@ -26,14 +26,14 @@
 
 install: all
 	install -d -m 755 $(INSTALLROOT)/etc
-	-mv -f $(INSTALLROOT)/etc/auto.master $(INSTALLROOT)/etc/auto.master.old
-	install -c auto.master -m 644 $(INSTALLROOT)/etc
-	-mv -f $(INSTALLROOT)/etc/auto.misc $(INSTALLROOT)/etc/auto.misc.old
-	install -c auto.misc   -m 644 $(INSTALLROOT)/etc
-	-mv -f $(INSTALLROOT)/etc/auto.net $(INSTALLROOT)/etc/auto.net.old
-	install -c auto.net    -m 755 $(INSTALLROOT)/etc
-	-mv -f $(INSTALLROOT)/etc/auto.smb $(INSTALLROOT)/etc/auto.smb.old
-	install -c auto.smb    -m 755 $(INSTALLROOT)/etc
+	#-mv -f $(INSTALLROOT)/etc/auto.master $(INSTALLROOT)/etc/auto.master.old
+	#install -c auto.master -m 644 $(INSTALLROOT)/etc
+	#-mv -f $(INSTALLROOT)/etc/auto.misc $(INSTALLROOT)/etc/auto.misc.old
+	#install -c auto.misc   -m 644 $(INSTALLROOT)/etc
+	#-mv -f $(INSTALLROOT)/etc/auto.net $(INSTALLROOT)/etc/auto.net.old
+	#install -c auto.net    -m 755 $(INSTALLROOT)/etc
+	#-mv -f $(INSTALLROOT)/etc/auto.smb $(INSTALLROOT)/etc/auto.smb.old
+	#install -c auto.smb    -m 755 $(INSTALLROOT)/etc
 	install -d -m 755 $(INSTALLROOT)$(initdir)
 	install -c rc.autofs   -m 755 $(INSTALLROOT)$(initdir)/autofs
 	install -d -m 755 $(INSTALLROOT)$(autofslibdir)
diff -Naur autofs-4.1.4/samples/rc.autofs autofs-modificat/samples/rc.autofs
--- autofs-4.1.4/samples/rc.autofs	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/samples/rc.autofs	2007-02-28 11:02:14.000000000 +0100
@@ -0,0 +1,776 @@
+#!/bin/bash
+#
+# $Id: rc.autofs.in,v 1.58 2005/04/11 11:30:54 raven Exp $
+#
+# rc file for automount using a Sun-style "master map".
+# We first look for a local /etc/auto.master, then a YP
+# map with that name
+#
+# On most distributions, this file should be called:
+# /etc/rc.d/init.d/autofs or /etc/init.d/autofs
+#
+
+# For Redhat-ish systems
+#
+# chkconfig: 345 28 72
+# processname: /usr/sbin/automount
+# config: /etc/auto.master
+# description: Automounts filesystems on demand
+
+# This is used in the Debian distribution to determine the proper
+# location for the S- and K-links to this init file.
+# The following value is extracted by debstd to figure out how to
+# generate the postinst script. Edit the field to change the way the
+# script is registered through update-rc.d (see the manpage for
+# update-rc.d!)
+#
+FLAGS="defaults 21"
+
+#
+# Location of the automount daemon and the init directory
+#
+DAEMON=/usr/sbin/automount
+prog=`basename $DAEMON`
+initdir=/etc/init.d
+
+test -e $DAEMON || exit 0
+
+#
+# Determine which kind of configuration we're using
+#
+system=unknown
+if [ -f /etc/debian_version ]; then
+	system=debian
+elif [ -f /etc/redhat-release ]; then
+	system=redhat
+else
+	echo "$0: Unknown system, please port and contact autofs@linux.kernel.org" 1>&2
+	exit 1
+fi
+
+if [ $system = redhat ]; then
+	. $initdir/functions
+fi
+
+if [ $system = debian ]; then
+	thisscript="$0"
+	if [ ! -f "$thisscript" ]; then
+		echo "$0: Cannot find myself" 1>&2
+		exit 1
+	fi
+fi
+
+PATH=/sbin:/usr/sbin:/bin:/usr/bin
+export PATH
+
+#
+# We can add local options here
+# e.g. localoptions='rsize=8192,wsize=8192'
+#
+localoptions=''
+
+#
+# Daemon options
+# e.g. --timeout=60
+#
+daemonoptions=''
+
+#
+# load custom settings
+#
+if [ "$system" = "redhat" ]; then
+	LOCALOPTIONS=""
+	DAEMONOPTIONS=""
+	UNDERSCORETODOT=1
+	DISABLE_DIRECT=1
+	DAEMON_EXIT_WAIT=20
+
+	[ -f /etc/sysconfig/autofs ] && . /etc/sysconfig/autofs
+
+	# Over-ride localoptions if set
+	if [ -n "$LOCALOPTIONS" ]; then
+		localoptions=$LOCALOPTIONS
+	fi
+
+	# Over-ride daemonoptions if set
+	if [ -n "$DAEMONOPTIONS" ]; then
+		daemonoptions=$DAEMONOPTIONS
+	fi
+elif [ "$system" = "debian" ]; then
+	TIMEOUT=300
+	DISABLE_DIRECT=1
+	DAEMON_EXIT_WAIT=20
+
+	[ -f /etc/default/autofs ] && . /etc/default/autofs
+
+	daemonoptions="$daemonoptions --timeout=$TIMEOUT"
+fi
+
+#
+# Check for all maps that are to be loaded
+#
+function getschemes()
+{
+	SOURCES=`grep ^automount: /etc/nsswitch.conf | \
+		 sed -e 's/^.*://' -e 's/\[.*\]/ /g'`
+
+	if [ `echo $SOURCES | awk '{print NF}'` -gt 0 ]
+	then
+		echo ${SOURCES}
+	else
+		echo files
+	fi
+}
+
+function catnismap()
+{
+    if [ -z "$1" ] ; then
+        map="auto_master"
+    else
+        map="$1"
+    fi
+    /usr/bin/ypcat -k "$map" 2> /dev/null | sed -e '/^#/d' -e '/^$/d'
+}
+
+function getfilemounts()
+{
+    if [ -f /etc/auto.master ] ; then
+        cat /etc/auto.master | awk '{print $0}' | sed -e '/^#/d' -e '/^$/d' | (
+        while read auto_master_in
+        do
+            if [ "`echo $auto_master_in | grep '^+'`" = "" ]; then
+                echo $auto_master_in
+            else
+                for nismap in `cat /etc/auto.master | grep '^\+' |
+                        sed -e '/^#/d' -e '/^$/d'`; do
+                    catnismap `echo "$nismap" | sed -e 's/^\+//'`
+                done
+            fi
+        done
+        )
+    fi
+}
+
+function getnismounts()
+{
+    YPMAP=`catnismap auto.master`
+    if [ -z "$YPMAP" ]; then
+       catnismap
+    else
+       catnismap auto.master
+    fi
+}
+
+function getldapmounts()
+{
+    if [ -x /usr/lib/autofs/autofs-ldap-auto-master ]; then
+        /usr/lib/autofs/autofs-ldap-auto-master 2> /dev/null
+    fi
+}
+
+function getrawmounts()
+{
+    for scheme in `getschemes` ; do
+        case "$scheme" in
+            files)
+                if [ -z "$filescheme" ] ; then
+                    getfilemounts
+                    filescheme=1
+                    export filescheme
+                fi
+                ;;
+            nis)
+                if [ -z "$nisscheme" ] ; then
+                    getnismounts
+                    nisscheme=1
+                    export nisscheme
+                fi
+                ;;
+            ldap*)
+                if [ -z "$ldapscheme" ] ; then
+                    getldapmounts
+                    ldapscheme=1
+                    export ldapscheme
+                fi
+                ;;
+        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()
+{
+	local LC_ALL=C
+	export LC_ALL
+	knownmaps=" "
+	getrawmounts | (
+	while read dir map options
+	do
+	    # These checks screen out duplicates and skip over directories
+	    # where the map is '-'.
+	    # We can't do empty or direct host maps, so don't bother trying.
+
+	    # Strip trailing slashes from the dir line if it exists to aid
+	    # in checking for duplicate maps
+	    dir=`echo "$dir" | sed -e "s/\/*$//"`
+
+	    if [ ! -z "$map" -a "$map" = "-hosts" ] ; then
+		continue
+	    fi
+
+	    if [ $DISABLE_DIRECT -eq 1 \
+			-a x`echo $dir | grep -E "^/-"` != 'x' ]
+	    then
+		continue
+	    fi
+
+	    # Do not include a map if it is a duplicate, maps on top of
+	    # another map or another map, maps on top of it.
+	    for knownmap in $knownmaps
+	    do	
+		if [ "`echo $dir/ | grep ^$knownmap`" != "" \
+			-o "`echo $knownmap | grep ^$dir/`" != "" \]
+		then 
+		    continue 2
+		fi	
+	    done
+
+	    if [ ! -z "$dir" -a ! -z "$map" \
+			-a x`echo "$map" | cut -c1` != 'x-' ]
+	    then
+		# If the options include a -t or --timeout, a -g or --ghost,
+		# a -v or --verbose or a -d or --debug paramter, then pull
+		# those particular options out.
+		: echo DAEMONOPTIONS OPTIONS $daemonoptions $options
+		startupoptions=
+		if echo "$options" | grep -qE -- '\B-(t\b|-timeout\b=)' ;
+		then
+		    startupoptions="--timeout=$(echo $options |\
+			sed 's/.*-\(t[^0-9]*\|-timeout\)[ \t=]*\([0-9][0-9]*\).*$/\2/g')"
+		elif echo "$daemonoptions" | grep -q -- '-t' ;
+		then
+		    # It's okay to be sloppy with DAEMONOPTIONS as there is no
+		    # possibility of conflicting with mount or map options.
+		    startupoptions="--timeout=$(echo $daemonoptions | \
+		      sed 's/.*--*t\(imeout\)*[ \t=]*\([0-9][0-9]*\).*$/\2/g')"
+		fi
+
+		# Check for the ghost option
+		if echo "$daemonoptions $options" | grep -qE -- '\B-(g\b|-ghost\b)' ;
+		then
+		    startupoptions="$startupoptions --ghost"
+		fi
+		# Dont even deal with conflicts between --ghost and [no]browse
+		# Its just insane to configure things like that.
+		if echo "$options" | grep -qE -- '\B-browse\b' ;
+		then
+		    startupoptions="$startupoptions --ghost"
+		fi
+		# Check for verbose
+		if echo "$daemonoptions $options" | \
+					grep -qE -- '\B-(v\b|-verbose\b)' ;
+		then
+		    startupoptions="$startupoptions --verbose"
+		fi
+
+		# Check for debug
+		if echo "$daemonoptions $options" | \
+					grep -qE -- '\B-(d\b|-debug\b)' ;
+		then
+		    startupoptions="$startupoptions --debug"
+		fi
+
+		# Other option flags are intended for maps.
+		mapoptions="$(echo "$daemonoptions $options" |\
+		      sed   's/-\(t[^0-9]*\|-timeout\)[ \t=]*\([0-9][0-9]*\)//g' |
+		      sed   's/-\(g\b\|-ghost\b\)//g' |
+		      sed   's/-\(v\b\|-verbose\b\)//g' |
+		      sed   's/-\(d\b\|-debug\b\)//g' |
+		      sed   's/-\b\(no\)\?browse\b//g')"
+
+		# Break up the maptype and map, if the map type is specified
+		maptype=`echo $map | cut -f1 -d:`
+		# Handle degenerate map specifiers
+		if [ "$maptype" = "$map" ] ; then
+		    if [ "$map" = "hesiod" -o "$map" = "userhome" ] ; then
+			maptype=$map
+			map=
+		    elif [ "$map" = "multi" ] ; then
+			maptype=$map
+			map=
+#		    elif echo "$map" | grep -q '^!'; then
+#		        map=`echo "$map"| sed -e 's/^!//g'`
+		    elif `echo $map | grep -q "^/"` && [ -x "$map" ]; then
+			maptype=program
+		    elif [ -x "/etc/$map" ]; then
+			maptype=program
+			map=`echo /etc/$map | sed 's^//^/^g'`
+		    elif `echo $map | grep -q "^/"` && [ -f "$map" ]; then
+			maptype=file
+		    elif [ -f "/etc/$map" ]; then
+			maptype=file
+			map=`echo /etc/$map | sed 's^//^/^g'`
+		    else
+			maptype=yp
+			if [ "$UNDERSCORETODOT" = "1" ] ; then
+			    map=`basename $map | sed -e s/^auto_home/auto.home/ -e s/^auto_mnt/auto.mnt/`
+			else
+			    map=`basename $map | sed 's^//^/^g'`
+			fi
+		    fi
+		fi
+		map=`echo $map | cut -f2- -d:`
+
+		: echo STARTUPOPTIONS $startupoptions
+		: echo DIR $dir
+		: echo MAPTYPE $maptype
+		: echo MAP $map
+		: echo MAPOPTIONS $mapoptions
+		: echo LOCALOPTIONS $localoptions
+
+		NEWOPTIONS=""
+		for m in $mapoptions
+		do
+			if [ x"$m" = x"--" ]; then
+				NEWOPTIONS="$NEWOPTIONS $localoptions --"
+			else
+				NEWOPTIONS="$NEWOPTIONS $m"
+			fi
+		done
+		mapoptions=$NEWOPTIONS
+
+		echo "$DAEMON $startupoptions $dir $maptype $map $mapoptions $localoptions" | sed -e 's/	/ /g' -e 's/  */ /g'
+
+		: echo ------------------------
+	        knownmaps=" $dir/ $knownmaps"
+	    fi
+	done
+    )
+}
+
+#
+# Status lister.
+#
+function status()
+{
+	echo -e $"Configured Mount Points:\n------------------------"
+	getmounts
+	echo ""
+	echo -e $"Active Mount Points:\n--------------------"
+	ps axwww|grep "[0-9]:[0-9][0-9] $DAEMON " | (
+		while read pid tt stat time command; do echo $command; done
+	)
+}
+
+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
+}
+
+#
+# Find pids of process group leaders
+#
+function get_pgrp_pids()
+{
+	ps -eo pid,pgrp,cmd|grep $DAEMON|\
+	awk '{print $1,$2}'|\
+	while read pid pgrp
+	do
+		if [ $pid -eq $pgrp ]
+		then
+			echo $pid
+		fi
+	done
+}
+
+#
+# Signal each automount process group leader
+#
+function signal_automounts()
+{
+	RETVAL=0
+	pgrp_pids=`get_pgrp_pids`
+	for pid in $pgrp_pids
+	do
+		kill -USR2 $pid 2 > /dev/null
+		count=0
+		while ps ax|grep -v grep|grep $pid >/dev/null
+		do
+			sleep 1 
+			count=$(expr $count + 1)
+			if [ $count -gt $DAEMON_EXIT_WAIT ]; then
+				break;
+			fi
+		done
+	done
+
+	if [ -n "`/sbin/pidof $DAEMON`" ] ; then
+		RETVAL=1
+	fi
+
+	return $RETVAL
+}
+
+function umount_loopback()
+{
+    loops=`LC_ALL=C awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $2}' /proc/mounts`
+    automounts=`LC_ALL=C awk '!/^#/ && $1 ~ /^automount/ {print $2}' /proc/mounts`
+
+    for l in $loops
+    do
+	# If a loop device is mounted into a subdir of the automount point,
+	# umount it here.
+	for a in $automounts
+	do
+	    match=`echo $l | grep -E "^$a[\$|/]" || true`
+	    if [ -n "$match" ]; then
+		echo ""
+		echo -n $"Unmounting loopback filesystem $match:  "
+		loopdev=`LC_ALL=C grep $l /proc/mounts | awk '{print $1}'`
+		umount -d $match
+		if [ $? -eq 0 ]; then
+		    echo "done"
+		else
+		    echo "failed ($?)"
+		fi
+	    fi
+	done
+    done
+
+    # If the loop device file exists under the automount point, umount
+    # it here.
+    loopmnts=`LC_ALL=C awk '!/^#/ && $1 ~ /^\/dev\/loop/ && $2 != "/" {print $1}' /proc/mounts`
+    for l in $loopmnts
+    do
+	loopmnt=`losetup $l | awk -F\( '{print $2}' | awk -F\) '{print $1}'`
+	for a in $automounts
+	do
+	    match=`echo $loopmnt | grep -E "^$a[\$|/]" || true`
+	    if [ -n "$match" ]; then
+		echo ""
+		echo -n $"Unmounting loopback filesystem $match:  "
+		umount -d $match
+		if [ $? -eq 0 ]; then
+		    echo "done"
+		else
+		    echo "failed ($?)"
+		fi
+	    fi
+	done
+    done
+}
+
+#
+# Redhat start/stop function.
+#
+function redhat()
+{
+
+#
+# See how we were called.
+#
+case "$1" in
+  start)
+        # Make sure the autofs filesystem type is available.
+        (grep -q autofs /proc/filesystems || /sbin/modprobe -k autofs4 || /sbin/modprobe -k autofs) 2> /dev/null
+        echo -n $"Starting $prog: "
+        TMP=`mktemp /tmp/autofs.XXXXXX` || { echo $"could not make temp file" >& 2; exit 1; }
+        getmounts | tee $TMP | sh
+        RETVAL=$?
+	if [ -s $TMP ] ; then
+	    if [ $RETVAL -eq 0 ] ; then
+		success "$prog startup"
+	    else
+		failure "$prog startup"
+	    fi
+	    [ $RETVAL = 0 ] && touch /var/lock/subsys/autofs
+	else
+	    echo -n $"No Mountpoints Defined"
+	    success "$prog startup"
+	fi
+	rm -f $TMP
+	echo
+	;;
+  stop)
+	echo -n $"Stopping $prog:"
+	if [ -z "`pidofproc $prog`" -a -z "`getmounts`" ]; then
+		RETVAL=0
+	else
+		umount_loopback
+		signal_automounts
+		RETVAL=$?
+	fi
+	count=0
+	while [ -n "`/sbin/pidof $DAEMON`" -a $count -lt 10 ] ; do
+	   killproc $DAEMON -USR2 >& /dev/null
+	   RETVAL=$?
+	   [ $RETVAL = 0 -a -z "`/sbin/pidof $DAEMON`" ] || sleep 3
+	   count=`expr $count + 1`
+	done
+	umount -a -f -t autofs
+	rm -f /var/lock/subsys/autofs
+	if [ -n "`/sbin/pidof $DAEMON`" ] ; then
+	    failure "$prog shutdown"
+	else
+	    success "$prog shutdown"
+	fi
+	echo
+	;;
+  restart)
+	redhat stop
+	redhat start
+	;;
+  reload)
+	if [ ! -f /var/lock/subsys/autofs ]; then
+		echo $"$prog not running"
+		RETVAL=1
+		return
+	fi
+	echo $"Checking for changes to /etc/auto.master ...."
+        TMP1=`mktemp /tmp/autofs.XXXXXX` || { echo $"could not make temp file" >& 2; exit 1; }
+        TMP2=`mktemp /tmp/autofs.XXXXXX` || { echo $"could not make temp file" >& 2; exit 1; }
+	getmounts >$TMP1
+	ps axwww|grep "[0-9]:[0-9][0-9] $DAEMON " | (
+	    while read pid tt stat time command; do
+		echo "$command" >>$TMP2
+		if ! grep -q "^$command" $TMP1; then
+		    if ! echo "$command" | grep -q -e --submount; then
+			kill -USR2 $pid 2> /dev/null
+			echo $"Stop $command"
+		    fi
+		else
+			kill -HUP $pid 2> /dev/null
+			echo $"Reload map $command"
+		fi
+	    done
+	)
+	cat $TMP1 | ( while read x; do
+		if ! grep -q "^$x" $TMP2; then
+			$x
+			echo $"Start $x"
+		fi
+        done )
+	rm -f $TMP1 $TMP2
+	;;
+  status)
+	status
+	;;
+  condrestart)
+	[ -f /var/lock/subsys/autofs ] && redhat restart
+        RETVAL=0
+	;;
+  *)
+	echo $"Usage: $0 {start|stop|restart|reload|condrestart|status}"
+	RETVAL=0
+esac
+}
+
+#
+# Debian start/stop functions.
+#
+function debian()
+{
+
+case "$1" in
+start)
+	echo -n 'Starting automounter:'
+
+	# make sure autofs4 is loaded
+	if ! grep -q autofs /proc/filesystems
+	then
+		# autofs filesystem support not loaded
+		echo -n ' loading autofs4 kernel module,'
+		modprobe autofs4 || true
+	elif ([ -f /proc/modules ] && lsmod) | grep -q autofs[^4]; then
+		# wrong autofs filesystem module loaded
+		echo
+		echo "WARNING: autofs kernel module is loaded, autofs4 needed"
+		echo " for correct behaviour. You might experience mount failures."
+	fi
+
+	# Check that maps exist
+	if [ -z "$(getrawmounts)" ]
+	then
+		echo " no automount maps defined."
+		exit 0
+	fi
+
+	# ensure pid file directory exists
+	if [ ! -e /var/run/autofs ]
+	then
+		mkdir /var/run/autofs
+	fi
+
+	getmounts | while read cmd rest
+	do
+		mnt=`echo $rest | sed 's/^.* \(\/[^ ]*\) [A-Za-z].*$/\1/'`
+		pidfile=/var/run/autofs/`echo $mnt | sed 's,/,_,g'`.pid
+
+		start-stop-daemon --start --pidfile $pidfile --quiet \
+	  		--exec $DAEMON -- --pid-file=$pidfile $rest
+
+		ret=$?
+
+		if [ $ret -ne 0 ]
+		then
+			echo
+			echo " failed to start automount point $mnt"
+		fi
+	done
+
+	echo " done."
+	;;
+stop)
+	echo -n 'Stopping automounter:'
+
+	umount_loopback
+	
+	any=0
+	for file in `ls /var/run/autofs/*.pid 2>/dev/null`
+	do
+		if [ -e "$file" ]
+		then
+			any=1
+			pid=`head -n 1 $file`
+			mnt=`ps -wwo 'cmd=' $pid | sed -e \
+			  's,.* --pid-file=/var/run/autofs/\([^ ]*\)\.pid.*,\1,; s,_,/,g'`
+			dname=`basename $DAEMON`
+
+			start-stop-daemon --stop --quiet \
+					--retry USR2/$DAEMON_EXIT_WAIT \
+					--pidfile $file --name $dname
+
+			ret=$?
+
+			case $ret in
+			0)
+#				echo -n " $mnt"
+				rm -f $file
+				;;
+			1)
+				echo -n -e "\n No process for automount $mnt"
+				rm -f $file
+				;;
+			2)
+				echo -n -e "\n  Couldn't stop automount for $mnt"
+				;;
+			*)
+				echo -n -e \
+			 	"\n Strange start-stop-daemon exit status: $ret"
+				;;
+			esac
+		fi
+	done
+
+	echo " done."
+	;;
+reload)
+	echo "Reloading automounter: checking for changes ... "
+
+	TMP1=`mktemp -t autofs.XXXXXX`
+	TMP2=`mktemp -t autofs.XXXXXX`
+
+	getmounts >$TMP1
+
+	for i in `ls /var/run/autofs/*.pid 2>/dev/null`
+	do
+		pid=`head -n 1 $i 2>/dev/null`
+		[ "$pid" = "" ] && continue
+		
+		cmd=`get_command_from_pid $pid`
+		echo $cmd >>$TMP2
+
+		mnt=`ps -wwo 'cmd=' $pid | sed -e \
+		 's,.* --pid-file=/var/run/autofs/\([^ ]*\)\.pid.*,\1,; s,_,/,g'`
+
+		if ! grep -q "$cmd" $TMP1; then
+			echo "Stopping automounter for: $mnt"
+			kill -USR2 $pid 2> /dev/null
+		else
+			echo "Reloading automounter map for: $mnt"
+			kill -HUP $pid 2> /dev/null
+		fi
+	done
+
+	cat $TMP1 | (while read x; do
+		if ! grep -q "^$x" $TMP2; then
+			echo $x | while read cmd rest; do
+
+			mnt=`echo $rest | sed 's/^.* \(\/[^ ]*\) [A-Za-z].*$/\1/'`
+			pidfile=/var/run/autofs/`echo $mnt | sed 's,/,_,g'`.pid
+
+			start-stop-daemon --start --pidfile $pidfile --quiet \
+				--exec $DAEMON -- --pid-file=$pidfile $rest
+
+			ret=$?
+
+			if [ $ret -ne 0 ]
+			then
+				echo
+				echo " failed to start automount point $mnt"
+			else
+				echo "Started automounter: $mnt"
+			fi
+			done
+		fi
+	done)
+
+	rm -f $TMP1 $TMP2
+	;;
+force-reload|restart)
+	debian stop
+	debian start
+	;;
+status)
+	status
+	;;
+getmounts)
+    	getmounts
+	;;
+active)
+    	alive
+	;;
+*)
+	echo "Usage: $initdir/autofs {start|stop|restart|reload|status|getmounts|active}" >&2
+	exit 1
+	;;
+esac
+}
+
+RETVAL=0
+if [ $system = debian ]; then
+	debian "$@"
+elif [ $system = redhat ]; then
+	redhat "$@"
+fi
+
+exit $RETVAL

[-- Attachment #3: Type: text/plain, Size: 140 bytes --]

_______________________________________________
autofs mailing list
autofs@linux.kernel.org
http://linux.kernel.org/mailman/listinfo/autofs

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: module development
  2007-02-27 22:09 module development Jordi Prats
  2007-02-28  2:00 ` Ian Kent
@ 2007-02-28 18:46 ` Jim Carter
  1 sibling, 0 replies; 8+ messages in thread
From: Jim Carter @ 2007-02-28 18:46 UTC (permalink / raw)
  To: Jordi Prats; +Cc: autofs

On Tue, 27 Feb 2007, Jordi Prats wrote:

> I'm new to this list. I need to develop a module for autofs for a custom
> fs type, but I'm not really familiar with autofs. I'm supposing to do
> this I need to do a module like modules/mount_generic.c but with my
> custom stuff. For the mounting process it's all right, but to umount the
> fs I also need to do some operations.

Special operations connected with mount or umount are a royal pain for the 
system administrator, not just for autofs but for boot-time mounting too, 
and hotplug mounting.  I wonder if the custom filesystem could be modified 
to be easier to use?  The ideal is if a submodule of mount can handle all 
the special operations and system call argument formatting, guided by the 
mount options.  /sbin/mount.cifs is an example.  Another possibility is if 
the filesystem driver, upon (un)mounting, starts a kernel thread that does 
whatever userspace activities and then exits.

But autofs does the mount system call itself because of the performance hit 
of forking mount(1) every time.  Here's a modest proposal:  autofs knows 
how to do NFS mounts and generic mounts (ext3, reiser, iso9660, etc. with 
only standard options).  How about a mount option to be interpreted by 
autofs, -nonstandard, which gives control to a module that spawns mount(1) 
and accepts the performance hit?

In the interesting case of Samba/CIFS and NFSv4 mounts, a password or a 
user's Kerberos credential is needed for non-world-readable content.  How 
could autofs (or better, mount(1) spawned by autofs) reach back to the 
user's context and figure out the credential cache (there could be several) 
or run a password requesting program using the correct .Xauthority file, 
e.g. /tmp/gdm.QwErTy?

James F. Carter          Voice 310 825 2897    FAX 310 206 6673
UCLA-Mathnet;  6115 MSA; 405 Hilgard Ave.; Los Angeles, CA, USA  90095-1555
Email: jimc@math.ucla.edu    http://www.math.ucla.edu/~jimc (q.v. for PGP key)

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: module development
  2007-02-28 14:34   ` Jordi Prats
@ 2007-03-01  7:48     ` Ian Kent
  2007-03-01 11:21       ` Jordi Prats
  0 siblings, 1 reply; 8+ messages in thread
From: Ian Kent @ 2007-03-01  7:48 UTC (permalink / raw)
  To: Jordi Prats; +Cc: autofs

On Wed, 2007-02-28 at 15:34 +0100, Jordi Prats wrote:
> Hi all,
> I have modified autofs's source code to create an entry point for the 
> umount operation. Here I attach a patch for autofs-4.1.4
> 
> This patch will allow to create a custom umount operation. In my case I 
> need to perform an operation before mounting the fs and after. So, I 
> think this could help others.
> 
> What I need to do to contribute this code?

Sorry, you've got a bit of work to do on that patch.

When you make a patch please make the diff from a clean source tree.
The reason for this is that the diff should contain only the changes
that you're proposing so the possibility of mistakes getting through is
minimized. As it is this patch contains a more unrelated stuff than the
changes for the proposal itself. I can't really follow it well enough to
know what you're trying to do.

Ian

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: module development
  2007-03-01  7:48     ` Ian Kent
@ 2007-03-01 11:21       ` Jordi Prats
  2007-03-01 12:21         ` Ian Kent
  0 siblings, 1 reply; 8+ messages in thread
From: Jordi Prats @ 2007-03-01 11:21 UTC (permalink / raw)
  To: Ian Kent; +Cc: autofs

[-- Attachment #1: Type: text/plain, Size: 1464 bytes --]

Hi,
Ok, No problem! Here it is with the only changes of my proposal.

Jordi

Ian Kent wrote:
> On Wed, 2007-02-28 at 15:34 +0100, Jordi Prats wrote:
>   
>> Hi all,
>> I have modified autofs's source code to create an entry point for the 
>> umount operation. Here I attach a patch for autofs-4.1.4
>>
>> This patch will allow to create a custom umount operation. In my case I 
>> need to perform an operation before mounting the fs and after. So, I 
>> think this could help others.
>>
>> What I need to do to contribute this code?
>>     
>
> Sorry, you've got a bit of work to do on that patch.
>
> When you make a patch please make the diff from a clean source tree.
> The reason for this is that the diff should contain only the changes
> that you're proposing so the possibility of mistakes getting through is
> minimized. As it is this patch contains a more unrelated stuff than the
> changes for the proposal itself. I can't really follow it well enough to
> know what you're trying to do.
>
> Ian
>
>
>
>   


-- 
......................................................................
         __
        / /          Jordi Prats
  C E / S / C A      Dept. de Sistemes
      /_/            Centre de Supercomputació de Catalunya

  Gran Capità, 2-4 (Edifici Nexus) · 08034 Barcelona
  T. 93 205 6464 · F.  93 205 6979 · jprats@cesca.es
...................................................................... 


[-- Attachment #2: patch-umount --]
[-- Type: text/plain, Size: 11147 bytes --]

diff -Naur autofs-4.1.4/daemon/automount.c autofs-modificat/daemon/automount.c
--- autofs-4.1.4/daemon/automount.c	2005-03-06 10:43:55.000000000 +0100
+++ autofs-modificat/daemon/automount.c	2007-02-28 11:55:00.000000000 +0100
@@ -139,31 +139,7 @@
 
 static int umount_ent(const char *root, const char *name, const char *type)
 {
-	char path_buf[PATH_MAX];
-	struct stat st;
-	int sav_errno;
-	int is_smbfs = (strcmp(type, "smbfs") == 0);
-	int status;
-	int rv = 0;
-
-	sprintf(path_buf, "%s/%s", root, name);
-	status =  lstat(path_buf, &st);
-	sav_errno = errno;
-
-	/* EIO appears to correspond to an smb mount that has gone away */
-	if (!status ||
-	    (is_smbfs && (sav_errno == EIO || sav_errno == EBADSLT))) {
-		int umount_ok = 0;
-
-		if (!status && (S_ISDIR(st.st_mode) && (st.st_dev != ap.dev)))
-			umount_ok = 1;
-
-		if (umount_ok || is_smbfs) {
-			rv = spawnll(LOG_DEBUG, 
-				    PATH_UMOUNT, PATH_UMOUNT, path_buf, NULL);
-		}
-	}
-	return rv;
+  return do_umount(root, name, type);
 }
 
 /* Like ftw, except fn gets called twice: before a directory is
diff -Naur autofs-4.1.4/daemon/Makefile autofs-modificat/daemon/Makefile
--- autofs-4.1.4/daemon/Makefile	2004-04-03 09:14:33.000000000 +0200
+++ autofs-modificat/daemon/Makefile	2007-02-28 11:03:47.000000000 +0100
@@ -6,8 +6,8 @@
 -include ../Makefile.conf
 include ../Makefile.rules
 
-SRCS = automount.c spawn.c module.c mount.c
-OBJS = automount.o spawn.o module.o mount.o
+SRCS = automount.c spawn.c module.c mount.c umount.c
+OBJS = automount.o spawn.o module.o mount.o umount.o
 
 version := $(shell cat ../.version)
 
diff -Naur autofs-4.1.4/daemon/module.c autofs-modificat/daemon/module.c
--- autofs-4.1.4/daemon/module.c	2004-01-29 17:01:22.000000000 +0100
+++ autofs-modificat/daemon/module.c	2007-02-28 13:27:28.000000000 +0100
@@ -240,6 +240,75 @@
 	return mod;
 }
 
+
+struct mount_mod *open_umount(const char *name, const char *err_prefix)
+{
+	struct mount_mod *mod;
+	char *fnbuf;
+	size_t size_name;
+	size_t size_fnbuf;
+	void *dh;
+	int *ver;
+	
+	size_name = _strlen(name, PATH_MAX + 1);
+	if (!size_name)
+		return NULL;
+
+	mod = malloc(sizeof(struct mount_mod));
+	if (!mod) {
+		if (err_prefix)
+			crit("%s%m", err_prefix);
+		return NULL;
+	}
+
+	size_fnbuf = size_name + strlen(AUTOFS_LIB_DIR) + 13;
+	fnbuf = alloca(size_fnbuf);
+	if (!fnbuf) {
+		free(mod);
+		if (err_prefix)
+			crit("%s%m", err_prefix);
+		return NULL;
+	}
+	snprintf(fnbuf, size_fnbuf, "%s/umount_%s.so", AUTOFS_LIB_DIR, name);
+	
+	if (!(dh = dlopen(fnbuf, RTLD_NOW))) {
+		if (err_prefix)
+			crit("%scannot open umount module %s (%s)",
+			       err_prefix, name, dlerror());
+		free(mod);
+		return NULL;
+	}
+
+	if (!(ver = (int *) dlsym(dh, "mount_version"))
+	    || *ver != AUTOFS_MOUNT_VERSION) {
+		if (err_prefix)
+			crit("%smount module %s version mismatch",
+			     err_prefix, name);
+		dlclose(dh);
+		free(mod);
+		return NULL;
+	}
+
+	if (!(mod->mount_init = (mount_init_t) dlsym(dh, "mount_init")) ||
+	    !(mod->mount_umount = (mount_umount_t) dlsym(dh, "mount_umount")) ||
+	    !(mod->mount_done = (mount_done_t) dlsym(dh, "mount_done"))) {
+		if (err_prefix)
+			crit("%smount module %s corrupt", err_prefix, name);
+		dlclose(dh);
+		free(mod);
+		return NULL;
+	}
+
+	if (mod->mount_init(&mod->context)) {
+		dlclose(dh);
+		free(mod);
+		return NULL;
+	}
+	mod->dlhandle = dh;
+	return mod;
+}
+
+
 int close_mount(struct mount_mod *mod)
 {
 	int rv = mod->mount_done(mod->context);
diff -Naur autofs-4.1.4/daemon/umount.c autofs-modificat/daemon/umount.c
--- autofs-4.1.4/daemon/umount.c	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/daemon/umount.c	2007-02-28 15:05:30.000000000 +0100
@@ -0,0 +1,63 @@
+/* ----------------------------------------------------------------------- *
+ *   
+ *   umount.c - Abstract umount code used by modules for an unexpected
+ *            filesystem type
+ *
+ *   Copyright 2007 Jordi Prats - CESCA - All Rights Reserved
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
+ *   USA; either version 2 of the License, or (at your option) any later
+ *   version.
+ *   
+ *   This program is distributed in the hope that it will be useful,
+ *   but WITHOUT ANY WARRANTY; without even the implied warranty of
+ *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ *   GNU General Public License for more details.
+ *
+ * ----------------------------------------------------------------------- */
+
+#include <syslog.h>
+#include <stdlib.h>
+#include <string.h>
+#include "automount.h"
+
+/* These filesystems are known not to work with the "generic" module */
+static char *not_generic[] = { "ext3lvm",
+			       NULL
+};
+
+// (const char *root, const char *name, int name_len,
+// const char *what, const char *fstype, const char *options)
+
+int do_umount(const char *root, const char *name, const char *type)
+{
+	struct mount_mod *mod;
+	const char *modstr;
+	char **ngp;
+	int rv;
+		
+	mod = open_umount(modstr = type, NULL);
+	if (!mod) {
+		for (ngp = not_generic; *ngp; ngp++) {
+			if (!strcmp(type, *ngp))
+				break;
+		}
+		if (!*ngp)
+			mod = open_umount(modstr = "generic", NULL);
+		if (!mod) {
+			error("cannot find umount method for filesystem %s",
+			       type);
+			return -1;
+		}
+	}
+
+	debug("do_umount root %s name type %s",
+		  root, name, type);
+
+	rv = mod->mount_umount(root, name, strlen(name), type, mod->context);
+	close_mount(mod);
+
+	return rv;
+}
diff -Naur autofs-4.1.4/include/automount.h autofs-modificat/include/automount.h
--- autofs-4.1.4/include/automount.h	2005-01-26 14:03:02.000000000 +0100
+++ autofs-modificat/include/automount.h	2007-02-28 11:54:07.000000000 +0100
@@ -130,6 +130,9 @@
 int signal_children(int sig);
 int do_mount(const char *root, const char *name, int name_len,
 	     const char *what, const char *fstype, const char *options);
+
+int do_umount(const char *root, const char *name, const char *type);
+
 int mkdir_path(const char *path, mode_t mode);
 int rmdir_path(const char *path);
 
@@ -200,22 +203,32 @@
 int mount_init(void **context);
 int mount_mount(const char *root, const char *name, int name_len,
 		const char *what, const char *fstype, const char *options, void *context);
+
+int mount_umount(const char *root, const char *name, int name_len,
+		 const char *fstype, void *context);
+
 int mount_done(void *context);
 #endif
 typedef int (*mount_init_t) (void **);
 typedef int (*mount_mount_t) (const char *, const char *, int, const char *, const char *,
 			      const char *, void *);
+
+typedef int (*mount_umount_t) (const char *, const char *, int, const char *,
+			      void *);
+
 typedef int (*mount_done_t) (void *);
 
 struct mount_mod {
 	mount_init_t mount_init;
 	mount_mount_t mount_mount;
+	mount_umount_t mount_umount;
 	mount_done_t mount_done;
 	void *dlhandle;
 	void *context;
 };
 
 struct mount_mod *open_mount(const char *name, const char *err_prefix);
+struct mount_mod *open_umount(const char *name, const char *err_prefix);
 int close_mount(struct mount_mod *);
 
 /* mapent cache definition */
diff -Naur autofs-4.1.4/include/config.h autofs-modificat/include/config.h
--- autofs-4.1.4/include/config.h	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/include/config.h	2007-02-28 10:46:55.000000000 +0100
@@ -0,0 +1,28 @@
+/* include/config.h.  Generated by configure.  */
+#ident "$Id: config.h.in,v 1.4 2004/02/03 15:23:21 raven Exp $"
+/* -*- c -*-
+ *
+ * config.h.in: Pattern file for autofs to be filled in by configure
+ *
+ */
+
+/* Program paths */
+#define HAVE_MOUNT 1
+#define PATH_MOUNT "/bin/mount"
+
+#define HAVE_UMOUNT 1
+#define PATH_UMOUNT "/bin/umount"
+
+/* #undef HAVE_SMBMOUNT */
+/* #undef PATH_SMBMOUNT */
+
+#define HAVE_E2FSCK 1
+#define PATH_E2FSCK "/sbin/fsck.ext2"
+
+#define HAVE_E3FSCK 1
+#define PATH_E3FSCK "/sbin/fsck.ext3"
+
+/* Define this option if mount(8) supports the -s (sloppy) option */
+#define HAVE_SLOPPY_MOUNT 1
+
+/* #undef ENABLE_EXT_ENV */
diff -Naur autofs-4.1.4/modules/Makefile autofs-modificat/modules/Makefile
--- autofs-4.1.4/modules/Makefile	2004-08-29 14:46:23.000000000 +0200
+++ autofs-modificat/modules/Makefile	2007-02-28 13:03:49.000000000 +0100
@@ -10,13 +10,13 @@
 	lookup_multi.c \
 	parse_sun.c    \
 	mount_generic.c  mount_nfs.c  mount_afs.c  mount_autofs.c \
-	mount_changer.c  mount_bind.c
+	mount_changer.c  mount_bind.c umount_generic.c
 
 MODS :=	lookup_yp.so lookup_file.so lookup_program.so lookup_userhome.so \
 	lookup_multi.so \
 	parse_sun.so \
 	mount_generic.so mount_nfs.so mount_afs.so mount_autofs.so \
-	mount_changer.so mount_bind.so
+	mount_changer.so mount_bind.so umount_generic.so
 
 ifeq ($(EXT2FS), 1)
   SRCS += mount_ext2.c
diff -Naur autofs-4.1.4/modules/umount_generic.c autofs-modificat/modules/umount_generic.c
--- autofs-4.1.4/modules/umount_generic.c	1970-01-01 01:00:00.000000000 +0100
+++ autofs-modificat/modules/umount_generic.c	2007-02-28 15:06:18.000000000 +0100
@@ -0,0 +1,73 @@
+/* ----------------------------------------------------------------------- *
+ *   
+ *  umount_generic.c - module for Linux automountd to umount filesystems
+ *                    for which no special magic is required
+ *
+ *   Copyright 2007 Jordi Prats - CESCA - All Rights Reserved
+ *
+ *   This program is free software; you can redistribute it and/or modify
+ *   it under the terms of the GNU General Public License as published by
+ *   the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
+ *   USA; either version 2 of the License, or (at your option) any later
+ *   version; incorporated herein by reference.
+ *
+ * ----------------------------------------------------------------------- */
+
+#include <stdio.h>
+#include <malloc.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <syslog.h>
+#include <string.h>
+#include <stdlib.h>
+#include <sys/param.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+
+#define MODULE_MOUNT
+#include "automount.h"
+
+#define MODPREFIX "umount(generic): "
+
+int mount_version = AUTOFS_MOUNT_VERSION;	/* Required by protocol */
+
+int mount_init(void **context)
+{
+	return 0;
+}
+
+int mount_umount(const char *root, const char *name, int name_len,
+		 const char *fstype, void *context)
+{
+	char path_buf[PATH_MAX];
+	struct stat st;
+	int sav_errno;
+	int is_smbfs = (strcmp(fstype, "smbfs") == 0);
+	int status;
+	int rv = 0;
+	
+	sprintf(path_buf, "%s/%s", root, name);
+	status =  lstat(path_buf, &st);
+	sav_errno = errno;
+
+	/* EIO appears to correspond to an smb mount that has gone away */
+	if (!status ||
+	    (is_smbfs && (sav_errno == EIO || sav_errno == EBADSLT))) {
+		int umount_ok = 0;
+
+		if (!status && (S_ISDIR(st.st_mode) && (st.st_dev != ap.dev)))
+			umount_ok = 1;
+
+		if (umount_ok || is_smbfs) {
+			rv = spawnll(LOG_DEBUG, 
+				    PATH_UMOUNT, PATH_UMOUNT, path_buf, NULL);
+		}
+	}
+	return rv;
+}
+
+int mount_done(void *context)
+{
+	return 0;
+}

[-- Attachment #3: Type: text/plain, Size: 140 bytes --]

_______________________________________________
autofs mailing list
autofs@linux.kernel.org
http://linux.kernel.org/mailman/listinfo/autofs

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Re: module development
  2007-03-01 11:21       ` Jordi Prats
@ 2007-03-01 12:21         ` Ian Kent
  0 siblings, 0 replies; 8+ messages in thread
From: Ian Kent @ 2007-03-01 12:21 UTC (permalink / raw)
  To: Jordi Prats; +Cc: autofs

On Thu, 2007-03-01 at 12:21 +0100, Jordi Prats wrote:
> Hi,
> Ok, No problem! Here it is with the only changes of my proposal.

The approach is good.

But there's something not quite right which I can't quite put my finger
on. I'll have a closer look on the weekend.

btw, this is something that a couple of people have asked for which I
haven't got to it yet.

Thanks
Ian

> 
> Jordi
> 
> Ian Kent wrote:
> > On Wed, 2007-02-28 at 15:34 +0100, Jordi Prats wrote:
> >   
> >> Hi all,
> >> I have modified autofs's source code to create an entry point for the 
> >> umount operation. Here I attach a patch for autofs-4.1.4
> >>
> >> This patch will allow to create a custom umount operation. In my case I 
> >> need to perform an operation before mounting the fs and after. So, I 
> >> think this could help others.
> >>
> >> What I need to do to contribute this code?
> >>     
> >
> > Sorry, you've got a bit of work to do on that patch.
> >
> > When you make a patch please make the diff from a clean source tree.
> > The reason for this is that the diff should contain only the changes
> > that you're proposing so the possibility of mistakes getting through is
> > minimized. As it is this patch contains a more unrelated stuff than the
> > changes for the proposal itself. I can't really follow it well enough to
> > know what you're trying to do.
> >
> > Ian
> >
> >
> >
> >   
> 
> 
> plain text document attachment (patch-umount)
> diff -Naur autofs-4.1.4/daemon/automount.c autofs-modificat/daemon/automount.c
> --- autofs-4.1.4/daemon/automount.c	2005-03-06 10:43:55.000000000 +0100
> +++ autofs-modificat/daemon/automount.c	2007-02-28 11:55:00.000000000 +0100
> @@ -139,31 +139,7 @@
>  
>  static int umount_ent(const char *root, const char *name, const char *type)
>  {
> -	char path_buf[PATH_MAX];
> -	struct stat st;
> -	int sav_errno;
> -	int is_smbfs = (strcmp(type, "smbfs") == 0);
> -	int status;
> -	int rv = 0;
> -
> -	sprintf(path_buf, "%s/%s", root, name);
> -	status =  lstat(path_buf, &st);
> -	sav_errno = errno;
> -
> -	/* EIO appears to correspond to an smb mount that has gone away */
> -	if (!status ||
> -	    (is_smbfs && (sav_errno == EIO || sav_errno == EBADSLT))) {
> -		int umount_ok = 0;
> -
> -		if (!status && (S_ISDIR(st.st_mode) && (st.st_dev != ap.dev)))
> -			umount_ok = 1;
> -
> -		if (umount_ok || is_smbfs) {
> -			rv = spawnll(LOG_DEBUG, 
> -				    PATH_UMOUNT, PATH_UMOUNT, path_buf, NULL);
> -		}
> -	}
> -	return rv;
> +  return do_umount(root, name, type);
>  }
>  
>  /* Like ftw, except fn gets called twice: before a directory is
> diff -Naur autofs-4.1.4/daemon/Makefile autofs-modificat/daemon/Makefile
> --- autofs-4.1.4/daemon/Makefile	2004-04-03 09:14:33.000000000 +0200
> +++ autofs-modificat/daemon/Makefile	2007-02-28 11:03:47.000000000 +0100
> @@ -6,8 +6,8 @@
>  -include ../Makefile.conf
>  include ../Makefile.rules
>  
> -SRCS = automount.c spawn.c module.c mount.c
> -OBJS = automount.o spawn.o module.o mount.o
> +SRCS = automount.c spawn.c module.c mount.c umount.c
> +OBJS = automount.o spawn.o module.o mount.o umount.o
>  
>  version := $(shell cat ../.version)
>  
> diff -Naur autofs-4.1.4/daemon/module.c autofs-modificat/daemon/module.c
> --- autofs-4.1.4/daemon/module.c	2004-01-29 17:01:22.000000000 +0100
> +++ autofs-modificat/daemon/module.c	2007-02-28 13:27:28.000000000 +0100
> @@ -240,6 +240,75 @@
>  	return mod;
>  }
>  
> +
> +struct mount_mod *open_umount(const char *name, const char *err_prefix)
> +{
> +	struct mount_mod *mod;
> +	char *fnbuf;
> +	size_t size_name;
> +	size_t size_fnbuf;
> +	void *dh;
> +	int *ver;
> +	
> +	size_name = _strlen(name, PATH_MAX + 1);
> +	if (!size_name)
> +		return NULL;
> +
> +	mod = malloc(sizeof(struct mount_mod));
> +	if (!mod) {
> +		if (err_prefix)
> +			crit("%s%m", err_prefix);
> +		return NULL;
> +	}
> +
> +	size_fnbuf = size_name + strlen(AUTOFS_LIB_DIR) + 13;
> +	fnbuf = alloca(size_fnbuf);
> +	if (!fnbuf) {
> +		free(mod);
> +		if (err_prefix)
> +			crit("%s%m", err_prefix);
> +		return NULL;
> +	}
> +	snprintf(fnbuf, size_fnbuf, "%s/umount_%s.so", AUTOFS_LIB_DIR, name);
> +	
> +	if (!(dh = dlopen(fnbuf, RTLD_NOW))) {
> +		if (err_prefix)
> +			crit("%scannot open umount module %s (%s)",
> +			       err_prefix, name, dlerror());
> +		free(mod);
> +		return NULL;
> +	}
> +
> +	if (!(ver = (int *) dlsym(dh, "mount_version"))
> +	    || *ver != AUTOFS_MOUNT_VERSION) {
> +		if (err_prefix)
> +			crit("%smount module %s version mismatch",
> +			     err_prefix, name);
> +		dlclose(dh);
> +		free(mod);
> +		return NULL;
> +	}
> +
> +	if (!(mod->mount_init = (mount_init_t) dlsym(dh, "mount_init")) ||
> +	    !(mod->mount_umount = (mount_umount_t) dlsym(dh, "mount_umount")) ||
> +	    !(mod->mount_done = (mount_done_t) dlsym(dh, "mount_done"))) {
> +		if (err_prefix)
> +			crit("%smount module %s corrupt", err_prefix, name);
> +		dlclose(dh);
> +		free(mod);
> +		return NULL;
> +	}
> +
> +	if (mod->mount_init(&mod->context)) {
> +		dlclose(dh);
> +		free(mod);
> +		return NULL;
> +	}
> +	mod->dlhandle = dh;
> +	return mod;
> +}
> +
> +
>  int close_mount(struct mount_mod *mod)
>  {
>  	int rv = mod->mount_done(mod->context);
> diff -Naur autofs-4.1.4/daemon/umount.c autofs-modificat/daemon/umount.c
> --- autofs-4.1.4/daemon/umount.c	1970-01-01 01:00:00.000000000 +0100
> +++ autofs-modificat/daemon/umount.c	2007-02-28 15:05:30.000000000 +0100
> @@ -0,0 +1,63 @@
> +/* ----------------------------------------------------------------------- *
> + *   
> + *   umount.c - Abstract umount code used by modules for an unexpected
> + *            filesystem type
> + *
> + *   Copyright 2007 Jordi Prats - CESCA - All Rights Reserved
> + *
> + *   This program is free software; you can redistribute it and/or modify
> + *   it under the terms of the GNU General Public License as published by
> + *   the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
> + *   USA; either version 2 of the License, or (at your option) any later
> + *   version.
> + *   
> + *   This program is distributed in the hope that it will be useful,
> + *   but WITHOUT ANY WARRANTY; without even the implied warranty of
> + *   MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + *   GNU General Public License for more details.
> + *
> + * ----------------------------------------------------------------------- */
> +
> +#include <syslog.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include "automount.h"
> +
> +/* These filesystems are known not to work with the "generic" module */
> +static char *not_generic[] = { "ext3lvm",
> +			       NULL
> +};
> +
> +// (const char *root, const char *name, int name_len,
> +// const char *what, const char *fstype, const char *options)
> +
> +int do_umount(const char *root, const char *name, const char *type)
> +{
> +	struct mount_mod *mod;
> +	const char *modstr;
> +	char **ngp;
> +	int rv;
> +		
> +	mod = open_umount(modstr = type, NULL);
> +	if (!mod) {
> +		for (ngp = not_generic; *ngp; ngp++) {
> +			if (!strcmp(type, *ngp))
> +				break;
> +		}
> +		if (!*ngp)
> +			mod = open_umount(modstr = "generic", NULL);
> +		if (!mod) {
> +			error("cannot find umount method for filesystem %s",
> +			       type);
> +			return -1;
> +		}
> +	}
> +
> +	debug("do_umount root %s name type %s",
> +		  root, name, type);
> +
> +	rv = mod->mount_umount(root, name, strlen(name), type, mod->context);
> +	close_mount(mod);
> +
> +	return rv;
> +}
> diff -Naur autofs-4.1.4/include/automount.h autofs-modificat/include/automount.h
> --- autofs-4.1.4/include/automount.h	2005-01-26 14:03:02.000000000 +0100
> +++ autofs-modificat/include/automount.h	2007-02-28 11:54:07.000000000 +0100
> @@ -130,6 +130,9 @@
>  int signal_children(int sig);
>  int do_mount(const char *root, const char *name, int name_len,
>  	     const char *what, const char *fstype, const char *options);
> +
> +int do_umount(const char *root, const char *name, const char *type);
> +
>  int mkdir_path(const char *path, mode_t mode);
>  int rmdir_path(const char *path);
>  
> @@ -200,22 +203,32 @@
>  int mount_init(void **context);
>  int mount_mount(const char *root, const char *name, int name_len,
>  		const char *what, const char *fstype, const char *options, void *context);
> +
> +int mount_umount(const char *root, const char *name, int name_len,
> +		 const char *fstype, void *context);
> +
>  int mount_done(void *context);
>  #endif
>  typedef int (*mount_init_t) (void **);
>  typedef int (*mount_mount_t) (const char *, const char *, int, const char *, const char *,
>  			      const char *, void *);
> +
> +typedef int (*mount_umount_t) (const char *, const char *, int, const char *,
> +			      void *);
> +
>  typedef int (*mount_done_t) (void *);
>  
>  struct mount_mod {
>  	mount_init_t mount_init;
>  	mount_mount_t mount_mount;
> +	mount_umount_t mount_umount;
>  	mount_done_t mount_done;
>  	void *dlhandle;
>  	void *context;
>  };
>  
>  struct mount_mod *open_mount(const char *name, const char *err_prefix);
> +struct mount_mod *open_umount(const char *name, const char *err_prefix);
>  int close_mount(struct mount_mod *);
>  
>  /* mapent cache definition */
> diff -Naur autofs-4.1.4/include/config.h autofs-modificat/include/config.h
> --- autofs-4.1.4/include/config.h	1970-01-01 01:00:00.000000000 +0100
> +++ autofs-modificat/include/config.h	2007-02-28 10:46:55.000000000 +0100
> @@ -0,0 +1,28 @@
> +/* include/config.h.  Generated by configure.  */
> +#ident "$Id: config.h.in,v 1.4 2004/02/03 15:23:21 raven Exp $"
> +/* -*- c -*-
> + *
> + * config.h.in: Pattern file for autofs to be filled in by configure
> + *
> + */
> +
> +/* Program paths */
> +#define HAVE_MOUNT 1
> +#define PATH_MOUNT "/bin/mount"
> +
> +#define HAVE_UMOUNT 1
> +#define PATH_UMOUNT "/bin/umount"
> +
> +/* #undef HAVE_SMBMOUNT */
> +/* #undef PATH_SMBMOUNT */
> +
> +#define HAVE_E2FSCK 1
> +#define PATH_E2FSCK "/sbin/fsck.ext2"
> +
> +#define HAVE_E3FSCK 1
> +#define PATH_E3FSCK "/sbin/fsck.ext3"
> +
> +/* Define this option if mount(8) supports the -s (sloppy) option */
> +#define HAVE_SLOPPY_MOUNT 1
> +
> +/* #undef ENABLE_EXT_ENV */
> diff -Naur autofs-4.1.4/modules/Makefile autofs-modificat/modules/Makefile
> --- autofs-4.1.4/modules/Makefile	2004-08-29 14:46:23.000000000 +0200
> +++ autofs-modificat/modules/Makefile	2007-02-28 13:03:49.000000000 +0100
> @@ -10,13 +10,13 @@
>  	lookup_multi.c \
>  	parse_sun.c    \
>  	mount_generic.c  mount_nfs.c  mount_afs.c  mount_autofs.c \
> -	mount_changer.c  mount_bind.c
> +	mount_changer.c  mount_bind.c umount_generic.c
>  
>  MODS :=	lookup_yp.so lookup_file.so lookup_program.so lookup_userhome.so \
>  	lookup_multi.so \
>  	parse_sun.so \
>  	mount_generic.so mount_nfs.so mount_afs.so mount_autofs.so \
> -	mount_changer.so mount_bind.so
> +	mount_changer.so mount_bind.so umount_generic.so
>  
>  ifeq ($(EXT2FS), 1)
>    SRCS += mount_ext2.c
> diff -Naur autofs-4.1.4/modules/umount_generic.c autofs-modificat/modules/umount_generic.c
> --- autofs-4.1.4/modules/umount_generic.c	1970-01-01 01:00:00.000000000 +0100
> +++ autofs-modificat/modules/umount_generic.c	2007-02-28 15:06:18.000000000 +0100
> @@ -0,0 +1,73 @@
> +/* ----------------------------------------------------------------------- *
> + *   
> + *  umount_generic.c - module for Linux automountd to umount filesystems
> + *                    for which no special magic is required
> + *
> + *   Copyright 2007 Jordi Prats - CESCA - All Rights Reserved
> + *
> + *   This program is free software; you can redistribute it and/or modify
> + *   it under the terms of the GNU General Public License as published by
> + *   the Free Software Foundation, Inc., 675 Mass Ave, Cambridge MA 02139,
> + *   USA; either version 2 of the License, or (at your option) any later
> + *   version; incorporated herein by reference.
> + *
> + * ----------------------------------------------------------------------- */
> +
> +#include <stdio.h>
> +#include <malloc.h>
> +#include <errno.h>
> +#include <fcntl.h>
> +#include <unistd.h>
> +#include <syslog.h>
> +#include <string.h>
> +#include <stdlib.h>
> +#include <sys/param.h>
> +#include <sys/types.h>
> +#include <sys/stat.h>
> +
> +#define MODULE_MOUNT
> +#include "automount.h"
> +
> +#define MODPREFIX "umount(generic): "
> +
> +int mount_version = AUTOFS_MOUNT_VERSION;	/* Required by protocol */
> +
> +int mount_init(void **context)
> +{
> +	return 0;
> +}
> +
> +int mount_umount(const char *root, const char *name, int name_len,
> +		 const char *fstype, void *context)
> +{
> +	char path_buf[PATH_MAX];
> +	struct stat st;
> +	int sav_errno;
> +	int is_smbfs = (strcmp(fstype, "smbfs") == 0);
> +	int status;
> +	int rv = 0;
> +	
> +	sprintf(path_buf, "%s/%s", root, name);
> +	status =  lstat(path_buf, &st);
> +	sav_errno = errno;
> +
> +	/* EIO appears to correspond to an smb mount that has gone away */
> +	if (!status ||
> +	    (is_smbfs && (sav_errno == EIO || sav_errno == EBADSLT))) {
> +		int umount_ok = 0;
> +
> +		if (!status && (S_ISDIR(st.st_mode) && (st.st_dev != ap.dev)))
> +			umount_ok = 1;
> +
> +		if (umount_ok || is_smbfs) {
> +			rv = spawnll(LOG_DEBUG, 
> +				    PATH_UMOUNT, PATH_UMOUNT, path_buf, NULL);
> +		}
> +	}
> +	return rv;
> +}
> +
> +int mount_done(void *context)
> +{
> +	return 0;
> +}

^ permalink raw reply	[flat|nested] 8+ messages in thread

* Module development...
@ 2010-06-23 19:50 Sean_Hudson
  0 siblings, 0 replies; 8+ messages in thread
From: Sean_Hudson @ 2010-06-23 19:50 UTC (permalink / raw)
  To: Openembedded-devel

Does anyone have any advice about how to integrate modules that are currently under development with OE?

To accomplish this, we are trying to write recipes to do one or both of the following:

1)      Prevent tarball/md5 generation

2)      Pull the latest revision from a VCS every time  the recipe is built

  Is this the best way to accomplish our goal, or are there better ways?


^ permalink raw reply	[flat|nested] 8+ messages in thread

end of thread, other threads:[~2010-06-23 19:55 UTC | newest]

Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-02-27 22:09 module development Jordi Prats
2007-02-28  2:00 ` Ian Kent
2007-02-28 14:34   ` Jordi Prats
2007-03-01  7:48     ` Ian Kent
2007-03-01 11:21       ` Jordi Prats
2007-03-01 12:21         ` Ian Kent
2007-02-28 18:46 ` Jim Carter
2010-06-23 19:50 Module development Sean_Hudson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.