Ian Kent <[EMAIL PROTECTED]> writes:

> On Wed, 2007-09-26 at 12:02 -0400, Jeff Moyer wrote:
>> Ian Kent <[EMAIL PROTECTED]> writes:
>> 
>> > On Wed, 2007-09-26 at 17:32 +0200, Matthias Koenig wrote:
>> >> Ian Kent <[EMAIL PROTECTED]> writes:
>> >> 
>> >> > On Tue, 2007-09-25 at 18:21 +0200, Matthias Koenig wrote:
>> >> >> Hi,
>> >> >> 
>> >> >> we noticed a problem concerning loop mounts on locations that 
>> >> >> have to be mounted before. E.g. consider the following situation,
>> >> >> a NFS server exporting a cd image, which we want to loop mount
>> >> >> locally to get access to the content:
>> >> >> 
>> >> >> auto.master:
>> >> >> /cdimage        auto.cdimage
>> >> >> /cdcontent      auto.cdcontent
>> >> >> 
>> >> >> auto.cdimage:
>> >> >> foo             nfsserver:/cdimage/foo.img
>> >> >> 
>> >> >> auto.cdcontent:
>> >> >> foo             -fstype=auto,loop       :/cdimage/foo/foo.img
>> >> >> 
>> >> >> The access to /cdcontent/foo will fail, when /cdimage/foo is not 
>> >> >> mounted before, because spawn_mount does not use SPAWN_OPT_ACCESS
>> >> >> in this case.
>> >> >> The patch below fixes this problem.
>> >> >
>> >> > I can't remember now.
>> >> > I wonder why I don't always call access?
>> >> > I must have had a reason, let me think about it for a while.
>> >> 
>> >> Yes, I first tried to set SPAWN_OPT_ACCESS as default, but this did
>> >> not work and had the negative effect, that NFS mounts could not
>> >> be mounted anymore, because an access() has been done on the
>> >> NFS location description "nfsserver:/cdimage", which then fails.
>> >
>> > Of course, I'll go with you're patch.
>> 
>> Are you sure the argument positions will be the same for all of the
>> mount modules?  Is this really the best way to fix this?
>
> Yes, it's possible that the "-o" could end up in a different position if
> the code is modified at some later time without thinking.

Maybe it is better to iterate over the options?

Matthias

Index: autofs-git20070924/daemon/spawn.c
===================================================================
--- autofs-git20070924.orig/daemon/spawn.c
+++ autofs-git20070924/daemon/spawn.c
@@ -293,6 +293,14 @@ int spawn_mount(logger *log, ...)
        while ((*p++ = va_arg(arg, char *)));
        va_end(arg);
 
+#ifndef ENABLE_MOUNT_LOCKING
+       /* validate loop mounts as they could be on some location to be
+        * mounted first */
+       for (p = argv; *(p+1); p++)
+               if (!strcmp(*p, "-o") && strstr(*(p+1), "loop"))
+                       options = SPAWN_OPT_ACCESS;
+#endif
+
        while (retries--) {
                ret = do_spawn(log, options, prog, (const char **) argv);
                if (ret & MTAB_NOTUPDATED)

_______________________________________________
autofs mailing list
[email protected]
http://linux.kernel.org/mailman/listinfo/autofs

Reply via email to