X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmount%2Fstropts.c;h=f856998f569b9201d11f0f0398d3592b7ad95fd4;hp=a9c0b504e400ae386289e546e8ca0e3a61b4e18d;hb=1adb0e018f57079c6e95a9bdbf904361354b0527;hpb=0ff226cb9dc9382c5215368a03a5bd3a69ee287a diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c index a9c0b50..f856998 100644 --- a/utils/mount/stropts.c +++ b/utils/mount/stropts.c @@ -194,6 +194,37 @@ static time_t nfs_parse_retry_option(struct mount_options *options, return time(NULL) + (time_t)(timeout_minutes * 60); } +/* + * 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 @@ -206,19 +237,12 @@ static time_t nfs_parse_retry_option(struct mount_options *options, * Returns 1 if 'addr=' option appended successfully; * otherwise zero. */ -static int append_addr_option(struct sockaddr_in *saddr, - struct mount_options *options) +static int nfs_append_addr_option(const struct sockaddr *sap, + socklen_t salen, + struct mount_options *options) { - char new_option[24]; - po_remove_all(options, "addr"); - - snprintf(new_option, sizeof(new_option) - 1, - "addr=%s", inet_ntoa(saddr->sin_addr)); - - if (po_append(options, new_option) == PO_SUCCEEDED) - return 1; - return 0; + return nfs_append_generic_address_option(sap, salen, "addr", options); } /* @@ -327,10 +351,8 @@ static int nfs_validate_options(struct nfsmount_info *mi) if (!nfs_append_sloppy_option(mi->options)) return 0; - if (!append_addr_option(&saddr, mi->options)) - return 0; - - return 1; + return nfs_append_addr_option((struct sockaddr *)&saddr, + sizeof(saddr), mi->options); } /*