summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2008-07-15 13:33:32 -0400
committerSteve Dickson <steved@redhat.com>2008-07-15 13:33:32 -0400
commitda8a62dc65d2d105a3304dd41b6bdae5a5ddc742 (patch)
treebbf8a4e10e46893a6a734bb1b0e749186814e61c
parent6ab9cdacd2ea314a837c7affb840aeeec620cb66 (diff)
downloadnfs-utils-da8a62dc65d2d105a3304dd41b6bdae5a5ddc742.tar.gz
nfs-utils-da8a62dc65d2d105a3304dd41b6bdae5a5ddc742.tar.xz
nfs-utils-da8a62dc65d2d105a3304dd41b6bdae5a5ddc742.zip
There are three helpers that convert sockaddr-style addresses to text
addresses, then construct mount options to pass these addresses to the kernel. The tail of each of these helpers does exactly the same thing, so introduce a helper that handles the common code. Magically, the new helper supports IPv6 as well as IPv4. Signed-off-by: Chuck Lever <chuck.lever@oracle.com> Signed-off-by: Steve Dickson <steved@redhat.com>
-rw-r--r--utils/mount/stropts.c31
1 files changed, 31 insertions, 0 deletions
diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c
index a9c0b50..a1ffca2 100644
--- a/utils/mount/stropts.c
+++ b/utils/mount/stropts.c
@@ -195,6 +195,37 @@ static time_t nfs_parse_retry_option(struct mount_options *options,
}
/*
+ * Convert the passed-in sockaddr-style address to presentation
+ * format, then append an option of the form "keyword=address".
+ *
+ * Returns 1 if the option was appended successfully; otherwise zero.
+ */
+static int nfs_append_generic_address_option(const struct sockaddr *sap,
+ const socklen_t salen,
+ const char *keyword,
+ struct mount_options *options)
+{
+ char address[NI_MAXHOST];
+ char new_option[512];
+
+ if (!nfs_present_sockaddr(sap, salen, address, sizeof(address)))
+ goto out_err;
+
+ if (snprintf(new_option, sizeof(new_option), "%s=%s",
+ keyword, address) >= sizeof(new_option))
+ goto out_err;
+
+ if (po_append(options, new_option) != PO_SUCCEEDED)
+ goto out_err;
+
+ return 1;
+
+out_err:
+ nfs_error(_("%s: failed to construct %s option"), progname, keyword);
+ return 0;
+}
+
+/*
* Append the 'addr=' option to the options string to pass a resolved
* server address to the kernel. After a successful mount, this address
* is also added to /etc/mtab for use when unmounting.