Author: trasz
Date: Thu May 21 13:31:44 2015
New Revision: 283235
URL: https://svnweb.freebsd.org/changeset/base/283235

Log:
  MFC r279846:
  
  Properly pass options for direct maps.
  
  Sponsored by: The FreeBSD Foundation

Modified:
  stable/10/usr.sbin/autofs/automount.c
  stable/10/usr.sbin/autofs/automountd.c
Directory Properties:
  stable/10/   (props changed)

Modified: stable/10/usr.sbin/autofs/automount.c
==============================================================================
--- stable/10/usr.sbin/autofs/automount.c       Thu May 21 13:30:10 2015        
(r283234)
+++ stable/10/usr.sbin/autofs/automount.c       Thu May 21 13:31:44 2015        
(r283235)
@@ -141,8 +141,8 @@ mount_autofs(const char *from, const cha
 }
 
 static void
-mount_if_not_already(const struct node *n, const char *map,
-    const struct statfs *mntbuf, int nitems)
+mount_if_not_already(const struct node *n, const char *map, const char 
*options,
+    const char *prefix, const struct statfs *mntbuf, int nitems)
 {
        const struct statfs *sb;
        char *mountpoint;
@@ -175,7 +175,7 @@ mount_if_not_already(const struct node *
                    mountpoint);
        }
 
-       mount_autofs(from, mountpoint, n->n_options, n->n_key);
+       mount_autofs(from, mountpoint, options, prefix);
        free(from);
        free(mountpoint);
 }
@@ -184,7 +184,7 @@ static void
 mount_unmount(struct node *root)
 {
        struct statfs *mntbuf;
-       struct node *n, *n2, *n3;
+       struct node *n, *n2;
        int i, nitems;
 
        nitems = getmntinfo(&mntbuf, MNT_WAIT);
@@ -216,15 +216,14 @@ mount_unmount(struct node *root)
 
        TAILQ_FOREACH(n, &root->n_children, n_next) {
                if (!node_is_direct_map(n)) {
-                       mount_if_not_already(n, n->n_map, mntbuf, nitems);
+                       mount_if_not_already(n, n->n_map, n->n_options,
+                           n->n_key, mntbuf, nitems);
                        continue;
                }
 
                TAILQ_FOREACH(n2, &n->n_children, n_next) {
-                       TAILQ_FOREACH(n3, &n2->n_children, n_next) {
-                               mount_if_not_already(n3, n->n_map,
-                                   mntbuf, nitems);
-                       }
+                       mount_if_not_already(n2, n->n_map, n->n_options,
+                           "/", mntbuf, nitems);
                }
        }
 }

Modified: stable/10/usr.sbin/autofs/automountd.c
==============================================================================
--- stable/10/usr.sbin/autofs/automountd.c      Thu May 21 13:30:10 2015        
(r283234)
+++ stable/10/usr.sbin/autofs/automountd.c      Thu May 21 13:31:44 2015        
(r283235)
@@ -202,7 +202,7 @@ handle_request(const struct autofs_daemo
                parent = root;
        } else {
                parent = node_new_map(root, checked_strdup(adr->adr_prefix),
-                   checked_strdup(adr->adr_options), checked_strdup(map),
+                   NULL,  checked_strdup(map),
                    checked_strdup("[kernel request]"), lineno);
        }
 
@@ -231,19 +231,19 @@ handle_request(const struct autofs_daemo
                    "failing mount", map, adr->adr_path);
        }
 
+       options = node_options(node);
+       options = concat(adr->adr_options, ',', options);
+
+       /*
+        * Prepend options passed via automountd(8) command line.
+        */
+       if (cmdline_options != NULL)
+               options = concat(cmdline_options, ',', options);
+
        if (node->n_location == NULL) {
                log_debugx("found node defined at %s:%d; not a mountpoint",
                    node->n_config_file, node->n_config_line);
 
-               options = node_options(node);
-
-               /*
-                * Prepend options passed via automountd(8) command line.
-                */
-               if (cmdline_options != NULL) {
-                       options = concat(cmdline_options, ',', options);
-               }
-
                nobrowse = pick_option("nobrowse", &options);
                if (nobrowse != NULL && adr->adr_key[0] == '\0') {
                        log_debugx("skipping map %s due to \"nobrowse\" "
@@ -293,14 +293,6 @@ handle_request(const struct autofs_daemo
                    "failing mount", adr->adr_path);
        }
 
-       options = node_options(node);
-
-       /*
-        * Prepend options passed via automountd(8) command line.
-        */
-       if (cmdline_options != NULL)
-               options = concat(cmdline_options, ',', options);
-
        /*
         * Append "automounted".
         */
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to