diff options
author | Harshula Jayasuriya <harshula@redhat.com> | 2009-11-16 13:39:35 -0500 |
---|---|---|
committer | Steve Dickson <steved@redhat.com> | 2009-11-16 13:39:35 -0500 |
commit | 1cf5510adf8cbf7c342d8fce73f0b62ac1f93612 (patch) | |
tree | 8309f327f79759769ff7c1198ce4dcdf07445f79 /utils/mount/nfsmount.c | |
parent | fa42ac173d1d7e37a4052471dfc15520a09f102e (diff) | |
download | nfs-utils-1cf5510adf8cbf7c342d8fce73f0b62ac1f93612.tar.gz nfs-utils-1cf5510adf8cbf7c342d8fce73f0b62ac1f93612.tar.xz nfs-utils-1cf5510adf8cbf7c342d8fce73f0b62ac1f93612.zip |
mount options can be lost when using bg option
When mounting an NFS export *without* the "bg" option, try_mount() is
called only once. Before calling it, the variables mount_opts and
extra_opts are set up. Then try_mount() calls nfsmount(), the latter
assumes that the aforementioned variables can be modified. Most
significantly, it allows the variable extra_opts to be modified.
When the "bg" mount option is used *and* the first try_mount() attempt
fails, it daemonizes the process and calls try_mount() again,
unfortunately, we've lost the required mount options in the variable
extra_opts.
See https://bugzilla.redhat.com/show_bug.cgi?id=529370 for details.
Signed-off-by: Harshula Jayasuriya <harshula@redhat.com>
Signed-off-by: Steve Dickson <steved@redhat.com>
Diffstat (limited to 'utils/mount/nfsmount.c')
-rw-r--r-- | utils/mount/nfsmount.c | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/utils/mount/nfsmount.c b/utils/mount/nfsmount.c index 6355681..6b3356c 100644 --- a/utils/mount/nfsmount.c +++ b/utils/mount/nfsmount.c @@ -170,7 +170,7 @@ parse_options(char *old_opts, struct nfs_mount_data *data, struct pmap *mnt_pmap = &mnt_server->pmap; struct pmap *nfs_pmap = &nfs_server->pmap; int len; - char *opt, *opteq, *p, *opt_b; + char *opt, *opteq, *p, *opt_b, *tmp_opts; char *mounthost = NULL; char cbuf[128]; int open_quote = 0; @@ -179,7 +179,8 @@ parse_options(char *old_opts, struct nfs_mount_data *data, *bg = 0; len = strlen(new_opts); - for (p=old_opts, opt_b=NULL; p && *p; p++) { + tmp_opts = xstrdup(old_opts); + for (p=tmp_opts, opt_b=NULL; p && *p; p++) { if (!opt_b) opt_b = p; /* begin of the option item */ if (*p == '"') @@ -457,10 +458,12 @@ parse_options(char *old_opts, struct nfs_mount_data *data, goto out_bad; *mnt_server->hostname = mounthost; } + free(tmp_opts); return 1; bad_parameter: nfs_error(_("%s: Bad nfs mount parameter: %s\n"), progname, opt); out_bad: + free(tmp_opts); return 0; } |