X-Git-Url: https://git.decadent.org.uk/gitweb/?p=nfs-utils.git;a=blobdiff_plain;f=utils%2Fmount%2Fstropts.c;h=ff516523d2389ddd05b48110df2cb30ff96f4df5;hp=a1ffca2face922e7e9e807b73e322d3b0fc4c441;hb=313dcf93f7a8351ff1664a3a7e2a964e02ea624a;hpb=da8a62dc65d2d105a3304dd41b6bdae5a5ddc742 diff --git a/utils/mount/stropts.c b/utils/mount/stropts.c index a1ffca2..ff51652 100644 --- a/utils/mount/stropts.c +++ b/utils/mount/stropts.c @@ -237,19 +237,12 @@ out_err: * 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); } /* @@ -259,24 +252,21 @@ static int append_addr_option(struct sockaddr_in *saddr, * Returns 1 if 'clientaddr=' option created successfully or if * 'clientaddr=' option is already present; otherwise zero. */ -static int append_clientaddr_option(struct sockaddr_in *saddr, - struct mount_options *options) +static int nfs_append_clientaddr_option(const struct sockaddr *sap, + socklen_t salen, + struct mount_options *options) { - struct sockaddr_in my_addr; - char new_option[32]; + struct sockaddr_storage dummy; + struct sockaddr *my_addr = (struct sockaddr *)&dummy; + socklen_t my_len = sizeof(dummy); - if (po_contains(options, "clientaddr") == PO_SUCCEEDED) + if (po_contains(options, "clientaddr") == PO_FOUND) return 1; - if (!get_client_address(saddr, &my_addr)) - return 0; - - snprintf(new_option, sizeof(new_option) - 1, - "clientaddr=%s", inet_ntoa(my_addr.sin_addr)); + nfs_callback_address(sap, salen, my_addr, &my_len); - if (po_append(options, new_option) == PO_SUCCEEDED) - return 1; - return 0; + return nfs_append_generic_address_option(my_addr, my_len, + "clientaddr", options); } /* @@ -346,7 +336,8 @@ static int nfs_validate_options(struct nfsmount_info *mi) return 0; if (strncmp(mi->type, "nfs4", 4) == 0) { - if (!append_clientaddr_option(&saddr, mi->options)) + if (!nfs_append_clientaddr_option((struct sockaddr *)&saddr, + sizeof(saddr), mi->options)) return 0; } else { if (!fix_mounthost_option(mi->options)) @@ -358,10 +349,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); } /*